[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 3/5] Update IRQL annotations


  • To: win-pv-devel@xxxxxxxxxxxxxxxxxxxx
  • From: "Tu Dinh" <ngoc-tu.dinh@xxxxxxxxxx>
  • Date: Thu, 16 Apr 2026 11:10:00 +0000
  • Authentication-results: eu.smtp.expurgate.cloud; dkim=pass header.s=mte1 header.d=mandrillapp.com header.i="@mandrillapp.com" header.h="From:Subject:To:Cc:Message-Id:In-Reply-To:References:Feedback-ID:Date:MIME-Version:Content-Type:Content-Transfer-Encoding"; dkim=pass header.s=mte1 header.d=vates.tech header.i="ngoc-tu.dinh@xxxxxxxxxx" header.h="From:Subject:To:Cc:Message-Id:In-Reply-To:References:Feedback-ID:Date:MIME-Version:Content-Type:Content-Transfer-Encoding"
  • Cc: "Tu Dinh" <ngoc-tu.dinh@xxxxxxxxxx>, "Owen Smith" <owen.smith@xxxxxxxxxx>
  • Delivery-date: Thu, 16 Apr 2026 11:10:05 +0000
  • Feedback-id: 30504962:30504962.20260416:md
  • List-id: Developer list for the Windows PV Drivers subproject <win-pv-devel.lists.xenproject.org>

Many functions don't need to be called from DISPATCH_LEVEL, mostly the
ones that raise the IRQL on their own.

This also requires fixing IRQL and other annotations in various places.

Signed-off-by: Tu Dinh <ngoc-tu.dinh@xxxxxxxxxx>
---
 src/xenvif/controller.c  |  5 ++++-
 src/xenvif/frontend.c    | 20 +++++++++++---------
 src/xenvif/frontend.h    | 18 +++++++++---------
 src/xenvif/receiver.c    | 24 ++++++++++++------------
 src/xenvif/receiver.h    | 14 +++++++-------
 src/xenvif/transmitter.c | 11 +++++++----
 src/xenvif/transmitter.h |  6 +++---
 7 files changed, 53 insertions(+), 45 deletions(-)

diff --git a/src/xenvif/controller.c b/src/xenvif/controller.c
index ca854ef..dac6952 100644
--- a/src/xenvif/controller.c
+++ b/src/xenvif/controller.c
@@ -118,10 +118,11 @@ __ControllerReleaseLock(
     IN  PXENVIF_CONTROLLER  Controller
     )
 {
-#pragma prefast(suppress:26110) // Caller failing to hold lock
     KeReleaseSpinLockFromDpcLevel(&Controller->Lock);
 }
 
+_Acquires_nonreentrant_lock_(Controller)
+_IRQL_requires_(DISPATCH_LEVEL)
 static VOID
 ControllerAcquireLock(
     IN  PXENVIF_CONTROLLER  Controller
@@ -130,6 +131,8 @@ ControllerAcquireLock(
     __ControllerAcquireLock(Controller);
 }
 
+_Requires_lock_held_(Controller)
+_IRQL_requires_(DISPATCH_LEVEL)
 static VOID
 ControllerReleaseLock(
     IN  PXENVIF_CONTROLLER  Controller
diff --git a/src/xenvif/frontend.c b/src/xenvif/frontend.c
index 5cdb9a1..f2665e8 100644
--- a/src/xenvif/frontend.c
+++ b/src/xenvif/frontend.c
@@ -983,7 +983,7 @@ fail1:
     return status;
 }
 
-_IRQL_requires_(DISPATCH_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
 NTSTATUS
 FrontendSetMulticastAddresses(
     IN  PXENVIF_FRONTEND    Frontend,
@@ -1151,7 +1151,7 @@ fail1:
     return status;
 }
 
-_IRQL_requires_(DISPATCH_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
 NTSTATUS
 FrontendSetFilterLevel(
     IN  PXENVIF_FRONTEND        Frontend,
@@ -1193,7 +1193,7 @@ fail1:
     return status;
 }
 
-_IRQL_requires_(DISPATCH_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
 VOID
 FrontendAdvertiseIpAddresses(
     IN  PXENVIF_FRONTEND    Frontend
@@ -1977,7 +1977,7 @@ fail1:
     return status;
 }
 
-_IRQL_requires_(DISPATCH_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
 NTSTATUS
 FrontendSetHashAlgorithm(
     IN  PXENVIF_FRONTEND                Frontend,
@@ -2044,7 +2044,7 @@ fail1:
     return status;
 }
 
-_IRQL_requires_(DISPATCH_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
 NTSTATUS
 FrontendQueryHashTypes(
     IN  PXENVIF_FRONTEND    Frontend,
@@ -2084,7 +2084,7 @@ fail1:
     return status;
 }
 
-_IRQL_requires_(DISPATCH_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
 NTSTATUS
 FrontendSetHashMapping(
     IN  PXENVIF_FRONTEND    Frontend,
@@ -2128,7 +2128,7 @@ fail1:
     return status;
 }
 
-_IRQL_requires_(DISPATCH_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
 NTSTATUS
 FrontendSetHashKey(
     IN  PXENVIF_FRONTEND    Frontend,
@@ -2163,7 +2163,7 @@ fail1:
     return status;
 }
 
-_IRQL_requires_(DISPATCH_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
 NTSTATUS
 FrontendSetHashTypes(
     IN  PXENVIF_FRONTEND    Frontend,
@@ -2533,7 +2533,7 @@ FrontendDisable(
     Trace("<====\n");
 }
 
-_IRQL_requires_(DISPATCH_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
 NTSTATUS
 FrontendSetState(
     IN  PXENVIF_FRONTEND        Frontend,
@@ -2711,6 +2711,7 @@ __FrontendSuspend(
     (VOID) FrontendSetState(Frontend, FRONTEND_UNKNOWN);
 }
 
+_IRQL_requires_(HIGH_LEVEL)
 static DECLSPEC_NOINLINE VOID
 FrontendSuspendCallbackEarly(
     IN  PVOID           Argument
@@ -2721,6 +2722,7 @@ FrontendSuspendCallbackEarly(
     Frontend->Online = FALSE;
 }
 
+_IRQL_requires_(DISPATCH_LEVEL)
 static DECLSPEC_NOINLINE VOID
 FrontendSuspendCallbackLate(
     IN  PVOID           Argument
diff --git a/src/xenvif/frontend.h b/src/xenvif/frontend.h
index 5b84806..e062ed0 100644
--- a/src/xenvif/frontend.h
+++ b/src/xenvif/frontend.h
@@ -74,7 +74,7 @@ FrontendEjectFailed(
     IN PXENVIF_FRONTEND Frontend
     );
 
-_IRQL_requires_(DISPATCH_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
 extern NTSTATUS
 FrontendSetState(
     IN  PXENVIF_FRONTEND        Frontend,
@@ -194,7 +194,7 @@ FrontendIncrementStatistic(
     IN  ULONGLONG               Delta
     );
 
-_IRQL_requires_(DISPATCH_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
 extern NTSTATUS
 FrontendSetMulticastAddresses(
     IN  PXENVIF_FRONTEND    Frontend,
@@ -202,7 +202,7 @@ FrontendSetMulticastAddresses(
     IN  ULONG               Count
     );
 
-_IRQL_requires_(DISPATCH_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
 extern NTSTATUS
 FrontendSetFilterLevel(
     IN  PXENVIF_FRONTEND        Frontend,
@@ -210,27 +210,27 @@ FrontendSetFilterLevel(
     IN  XENVIF_MAC_FILTER_LEVEL Level
     );
 
-_IRQL_requires_(DISPATCH_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
 extern VOID
 FrontendAdvertiseIpAddresses(
     IN  PXENVIF_FRONTEND    Frontend
     );
 
-_IRQL_requires_(DISPATCH_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
 extern NTSTATUS
 FrontendSetHashAlgorithm(
     IN  PXENVIF_FRONTEND                Frontend,
     IN  XENVIF_PACKET_HASH_ALGORITHM    Algorithm
     );
 
-_IRQL_requires_(DISPATCH_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
 extern NTSTATUS
 FrontendQueryHashTypes(
     IN  PXENVIF_FRONTEND    Frontend,
     OUT PULONG              Types
     );
 
-_IRQL_requires_(DISPATCH_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
 extern NTSTATUS
 FrontendSetHashMapping(
     IN  PXENVIF_FRONTEND    Frontend,
@@ -238,14 +238,14 @@ FrontendSetHashMapping(
     IN  ULONG               Order
     );
 
-_IRQL_requires_(DISPATCH_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
 extern NTSTATUS
 FrontendSetHashKey(
     IN  PXENVIF_FRONTEND    Frontend,
     IN  PUCHAR              Key
     );
 
-_IRQL_requires_(DISPATCH_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
 extern NTSTATUS
 FrontendSetHashTypes(
     IN  PXENVIF_FRONTEND    Frontend,
diff --git a/src/xenvif/receiver.c b/src/xenvif/receiver.c
index 8e6ec7f..0cd1867 100644
--- a/src/xenvif/receiver.c
+++ b/src/xenvif/receiver.c
@@ -2282,11 +2282,11 @@ __ReceiverRingUnmask(
                           Force);
 }
 
-__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
 ReceiverRingPollDpc(
     IN  PKDPC               Dpc,
@@ -3694,7 +3694,7 @@ ReceiverTeardown(
     __ReceiverFree(Receiver);
 }
 
-_IRQL_requires_(DISPATCH_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
 VOID
 ReceiverSetOffloadOptions(
     IN  PXENVIF_RECEIVER            Receiver,
@@ -3725,7 +3725,7 @@ ReceiverSetOffloadOptions(
     }    
 }
 
-_IRQL_requires_(DISPATCH_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
 VOID
 ReceiverSetBackfillSize(
     IN  PXENVIF_RECEIVER    Receiver,
@@ -3752,7 +3752,7 @@ ReceiverSetBackfillSize(
     }
 }
 
-_IRQL_requires_(DISPATCH_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
 VOID
 ReceiverQueryRingSize(
     IN  PXENVIF_RECEIVER    Receiver,
@@ -3875,7 +3875,7 @@ ReceiverSend(
     __ReceiverRingSend(Ring, FALSE);
 }
 
-_IRQL_requires_(DISPATCH_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
 NTSTATUS
 ReceiverSetHashAlgorithm(
     IN  PXENVIF_RECEIVER                Receiver,
@@ -3919,7 +3919,7 @@ fail1:
     return status;
 }
 
-_IRQL_requires_(DISPATCH_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
 NTSTATUS
 ReceiverQueryHashCapabilities(
     IN  PXENVIF_RECEIVER    Receiver,
@@ -3943,7 +3943,7 @@ fail1:
     return status;
 }
 
-_IRQL_requires_(DISPATCH_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
 NTSTATUS
 ReceiverUpdateHashParameters(
     IN  PXENVIF_RECEIVER    Receiver,
@@ -4039,7 +4039,7 @@ fail1:
     return status;
 }
 
-_IRQL_requires_(DISPATCH_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
 NTSTATUS
 ReceiverUpdateHashMapping(
     IN  PXENVIF_RECEIVER    Receiver,
diff --git a/src/xenvif/receiver.h b/src/xenvif/receiver.h
index d093dd0..96cec02 100644
--- a/src/xenvif/receiver.h
+++ b/src/xenvif/receiver.h
@@ -91,21 +91,21 @@ ReceiverWaitForPackets(
     IN  PXENVIF_RECEIVER    Receiver
     );
 
-_IRQL_requires_(DISPATCH_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
 extern VOID
 ReceiverQueryRingSize(
     IN  PXENVIF_RECEIVER    Receiver,
     OUT PULONG              Size
     );
 
-_IRQL_requires_(DISPATCH_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
 extern VOID
 ReceiverSetOffloadOptions(
     IN  PXENVIF_RECEIVER            Receiver,
     IN  XENVIF_VIF_OFFLOAD_OPTIONS  Options
     );
 
-_IRQL_requires_(DISPATCH_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
 extern VOID
 ReceiverSetBackfillSize(
     IN  PXENVIF_RECEIVER    Receiver,
@@ -133,21 +133,21 @@ ReceiverSend(
     IN  ULONG               Index
     );
 
-_IRQL_requires_(DISPATCH_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
 NTSTATUS
 ReceiverSetHashAlgorithm(
     IN  PXENVIF_RECEIVER                Receiver,
     IN  XENVIF_PACKET_HASH_ALGORITHM    Algorithm
     );
 
-_IRQL_requires_(DISPATCH_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
 NTSTATUS
 ReceiverQueryHashCapabilities(
     IN  PXENVIF_RECEIVER    Receiver,
     OUT PULONG              Types
     );
 
-_IRQL_requires_(DISPATCH_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
 NTSTATUS
 ReceiverUpdateHashParameters(
     IN  PXENVIF_RECEIVER    Receiver,
@@ -155,7 +155,7 @@ ReceiverUpdateHashParameters(
     IN  PUCHAR              Key
     );
 
-_IRQL_requires_(DISPATCH_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
 NTSTATUS
 ReceiverUpdateHashMapping(
     IN  PXENVIF_RECEIVER    Receiver,
diff --git a/src/xenvif/transmitter.c b/src/xenvif/transmitter.c
index 05a2002..0f7deb1 100644
--- a/src/xenvif/transmitter.c
+++ b/src/xenvif/transmitter.c
@@ -248,6 +248,8 @@ __TransmitterFree(
     __FreePoolWithTag(Buffer, XENVIF_TRANSMITTER_TAG);
 }
 
+_Acquires_nonreentrant_lock_(Argument)
+_IRQL_requires_(DISPATCH_LEVEL)
 static VOID
 TransmitterPacketAcquireLock(
     IN  PVOID           Argument
@@ -258,6 +260,8 @@ TransmitterPacketAcquireLock(
     KeAcquireSpinLockAtDpcLevel(&Transmitter->Lock);
 }
 
+_Requires_lock_held_(Argument)
+_IRQL_requires_(DISPATCH_LEVEL)
 static VOID
 TransmitterPacketReleaseLock(
     IN  PVOID           Argument
@@ -265,7 +269,6 @@ TransmitterPacketReleaseLock(
 {
     PXENVIF_TRANSMITTER Transmitter = Argument;
 
-#pragma prefast(suppress:26110)
     KeReleaseSpinLockFromDpcLevel(&Transmitter->Lock);
 }
 
@@ -5301,7 +5304,7 @@ TransmitterQueueMulticastControl(
     (VOID) __TransmitterRingQueueMulticastControl(Ring, Address, Add);
 }
 
-_IRQL_requires_(DISPATCH_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
 VOID
 TransmitterQueryRingSize(
     IN  PXENVIF_TRANSMITTER Transmitter,
@@ -5332,7 +5335,7 @@ TransmitterNotify(
         Ring->PollDpcs++;
 }
 
-_IRQL_requires_(DISPATCH_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
 VOID
 TransmitterQueryOffloadOptions(
     IN  PXENVIF_TRANSMITTER         Transmitter,
@@ -5453,7 +5456,7 @@ TransmitterQueryOffloadOptions(
                                                          
MAXIMUM_IPV6_OPTIONS_LENGTH -          \
                                                          
MAXIMUM_TCP_HEADER_LENGTH)
 
-_IRQL_requires_(DISPATCH_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
 VOID
 TransmitterQueryLargePacketSize(
     IN  PXENVIF_TRANSMITTER     Transmitter,
diff --git a/src/xenvif/transmitter.h b/src/xenvif/transmitter.h
index 30ef371..5e789f1 100644
--- a/src/xenvif/transmitter.h
+++ b/src/xenvif/transmitter.h
@@ -121,7 +121,7 @@ TransmitterQueueMulticastControl(
     IN  BOOLEAN                 Add
     );
 
-_IRQL_requires_(DISPATCH_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
 extern VOID
 TransmitterQueryRingSize(
     IN  PXENVIF_TRANSMITTER Transmitter,
@@ -143,14 +143,14 @@ TransmitterQueuePacket(
     IN  PVOID                       Cookie
     );
 
-_IRQL_requires_(DISPATCH_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
 extern VOID
 TransmitterQueryOffloadOptions(
     IN  PXENVIF_TRANSMITTER         Transmitter,
     OUT PXENVIF_VIF_OFFLOAD_OPTIONS Options
     );
 
-_IRQL_requires_(DISPATCH_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
 extern VOID
 TransmitterQueryLargePacketSize(
     IN  PXENVIF_TRANSMITTER     Transmitter,
-- 
2.53.0.windows.2



--
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates solutions

web: https://vates.tech




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.