|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [XENVIF PATCH] Map out IRQL annotations
This patch doesnt apply directly to the head, and there also appears to be
several chunks that make no actual change - notably in the license comment, and
several code chunks that appear to remove and insert identical code
Could you break up the patch into a series with a patch per file pair (.h and
.c)
Owen
________________________________________
From: win-pv-devel <win-pv-devel-bounces@xxxxxxxxxxxxxxxxxxxx> on behalf of Tu
Dinh <ngoc-tu.dinh@xxxxxxxxxx>
Sent: 08 October 2025 1:58 PM
To: win-pv-devel@xxxxxxxxxxxxxxxxxxxx
Cc: Tu Dinh; Owen Smith
Subject: [XENVIF PATCH] Map out IRQL annotations
This is an initial, exploratory work to help inform the rework of
the controller interface.
No functional changes.
Signed-off-by: Tu Dinh <ngoc-tu.dinh@xxxxxxxxxx>
---
src/xenvif/controller.c | 16 +++++
src/xenvif/controller.h | 12 ++++
src/xenvif/frontend.c | 97 ++++++++++++++++++---------
src/xenvif/frontend.h | 62 ++++++++++-------
src/xenvif/receiver.c | 132 +++++++++++++++++++++---------------
src/xenvif/receiver.h | 64 +++++++++++-------
src/xenvif/transmitter.c | 140 ++++++++++++++++++++++++---------------
src/xenvif/transmitter.h | 63 +++++++++++-------
src/xenvif/vif.c | 61 ++++++++++-------
src/xenvif/vif.h | 48 +++++++-------
10 files changed, 441 insertions(+), 254 deletions(-)
diff --git a/src/xenvif/controller.c b/src/xenvif/controller.c
index ae86837..e032972 100644
--- a/src/xenvif/controller.c
+++ b/src/xenvif/controller.c
@@ -137,6 +137,7 @@ ControllerReleaseLock(
__ControllerReleaseLock(Controller);
}
+_IRQL_requires_min_(DISPATCH_LEVEL)
static FORCEINLINE VOID
__ControllerSend(
IN PXENVIF_CONTROLLER Controller
@@ -177,6 +178,7 @@ ControllerPoll(
Controller->Shared->rsp_event = rsp_cons + 1;
}
+_IRQL_requires_min_(DISPATCH_LEVEL)
static NTSTATUS
ControllerPutRequest(
IN PXENVIF_CONTROLLER Controller,
@@ -248,6 +250,7 @@ fail1:
#define XENVIF_CONTROLLER_POLL_PERIOD 100 // ms
+_IRQL_requires_(DISPATCH_LEVEL)
static NTSTATUS
ControllerGetResponse(
IN PXENVIF_CONTROLLER Controller,
@@ -318,6 +321,7 @@ ControllerGetResponse(
KSERVICE_ROUTINE ControllerEvtchnCallback;
+_Use_decl_annotations_
BOOLEAN
ControllerEvtchnCallback(
IN PKINTERRUPT InterruptObject,
@@ -345,6 +349,7 @@ ControllerDebugCallback(
UNREFERENCED_PARAMETER(Crashing);
}
+_IRQL_requires_(PASSIVE_LEVEL)
NTSTATUS
ControllerInitialize(
IN PXENVIF_FRONTEND Frontend,
@@ -390,6 +395,7 @@ fail1:
return status;
}
+_IRQL_requires_(DISPATCH_LEVEL)
NTSTATUS
ControllerConnect(
IN PXENVIF_CONTROLLER Controller
@@ -597,6 +603,7 @@ fail1:
return status;
}
+_IRQL_requires_(DISPATCH_LEVEL)
NTSTATUS
ControllerStoreWrite(
IN PXENVIF_CONTROLLER Controller,
@@ -670,6 +677,7 @@ ControllerDisable(
Trace("<===>\n");
}
+_IRQL_requires_(DISPATCH_LEVEL)
VOID
ControllerDisconnect(
IN PXENVIF_CONTROLLER Controller
@@ -732,6 +740,7 @@ done:
Trace("<====\n");
}
+_IRQL_requires_(PASSIVE_LEVEL)
VOID
ControllerTeardown(
IN PXENVIF_CONTROLLER Controller
@@ -762,6 +771,7 @@ ControllerTeardown(
__ControllerFree(Controller);
}
+_IRQL_requires_(DISPATCH_LEVEL)
NTSTATUS
ControllerSetHashAlgorithm(
IN PXENVIF_CONTROLLER Controller,
@@ -802,6 +812,7 @@ fail1:
return status;
}
+_IRQL_requires_(DISPATCH_LEVEL)
NTSTATUS
ControllerGetHashFlags(
IN PXENVIF_CONTROLLER Controller,
@@ -842,6 +853,7 @@ fail1:
return status;
}
+_IRQL_requires_(DISPATCH_LEVEL)
NTSTATUS
ControllerSetHashFlags(
IN PXENVIF_CONTROLLER Controller,
@@ -882,6 +894,7 @@ fail1:
return status;
}
+_IRQL_requires_(DISPATCH_LEVEL)
NTSTATUS
ControllerSetHashKey(
IN PXENVIF_CONTROLLER Controller,
@@ -976,6 +989,7 @@ fail1:
return status;
}
+_IRQL_requires_(DISPATCH_LEVEL)
NTSTATUS
ControllerGetHashMappingSize(
IN PXENVIF_CONTROLLER Controller,
@@ -1016,6 +1030,7 @@ fail1:
return status;
}
+_IRQL_requires_(DISPATCH_LEVEL)
NTSTATUS
ControllerSetHashMappingSize(
IN PXENVIF_CONTROLLER Controller,
@@ -1056,6 +1071,7 @@ fail1:
return status;
}
+_IRQL_requires_(DISPATCH_LEVEL)
NTSTATUS
ControllerSetHashMapping(
IN PXENVIF_CONTROLLER Controller,
diff --git a/src/xenvif/controller.h b/src/xenvif/controller.h
index b14e066..18e09b7 100644
--- a/src/xenvif/controller.h
+++ b/src/xenvif/controller.h
@@ -41,17 +41,20 @@
typedef struct _XENVIF_CONTROLLER XENVIF_CONTROLLER, *PXENVIF_CONTROLLER;
+_IRQL_requires_(PASSIVE_LEVEL)
extern NTSTATUS
ControllerInitialize(
IN PXENVIF_FRONTEND Frontend,
OUT PXENVIF_CONTROLLER *Controller
);
+_IRQL_requires_(DISPATCH_LEVEL)
extern NTSTATUS
ControllerConnect(
IN PXENVIF_CONTROLLER Controller
);
+_IRQL_requires_(DISPATCH_LEVEL)
extern NTSTATUS
ControllerStoreWrite(
IN PXENVIF_CONTROLLER Controller,
@@ -68,34 +71,40 @@ ControllerDisable(
IN PXENVIF_CONTROLLER Controller
);
+_IRQL_requires_(DISPATCH_LEVEL)
extern VOID
ControllerDisconnect(
IN PXENVIF_CONTROLLER Controller
);
+_IRQL_requires_(PASSIVE_LEVEL)
extern VOID
ControllerTeardown(
IN PXENVIF_CONTROLLER Controller
);
+_IRQL_requires_(DISPATCH_LEVEL)
extern NTSTATUS
ControllerSetHashAlgorithm(
IN PXENVIF_CONTROLLER Controller,
IN ULONG Algorithm
);
+_IRQL_requires_(DISPATCH_LEVEL)
extern NTSTATUS
ControllerGetHashFlags(
IN PXENVIF_CONTROLLER Controller,
IN PULONG Flags
);
+_IRQL_requires_(DISPATCH_LEVEL)
extern NTSTATUS
ControllerSetHashFlags(
IN PXENVIF_CONTROLLER Controller,
IN ULONG Flags
);
+_IRQL_requires_(DISPATCH_LEVEL)
extern NTSTATUS
ControllerSetHashKey(
IN PXENVIF_CONTROLLER Controller,
@@ -103,18 +112,21 @@ ControllerSetHashKey(
IN ULONG Size
);
+_IRQL_requires_(DISPATCH_LEVEL)
extern NTSTATUS
ControllerGetHashMappingSize(
IN PXENVIF_CONTROLLER Controller,
IN PULONG Size
);
+_IRQL_requires_(DISPATCH_LEVEL)
extern NTSTATUS
ControllerSetHashMappingSize(
IN PXENVIF_CONTROLLER Controller,
IN ULONG Size
);
+_IRQL_requires_(DISPATCH_LEVEL)
extern NTSTATUS
ControllerSetHashMapping(
IN PXENVIF_CONTROLLER Controller,
diff --git a/src/xenvif/frontend.c b/src/xenvif/frontend.c
index bcea522..14fb87e 100644
--- a/src/xenvif/frontend.c
+++ b/src/xenvif/frontend.c
@@ -1,32 +1,32 @@
/* 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
+ *
+ * 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
+ *
+ * * 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
+ * * 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
+ *
+ * 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.
*/
@@ -378,6 +378,7 @@ FrontendIsBackendOnline(
return Online;
}
+_IRQL_requires_(PASSIVE_LEVEL)
static DECLSPEC_NOINLINE NTSTATUS
FrontendEject(
IN PXENVIF_THREAD Self,
@@ -451,9 +452,9 @@ FrontendEjectFailed(
if (Path == NULL)
goto fail1;
- status = RtlStringCbPrintfA(Path,
+ status = RtlStringCbPrintfA(Path,
Length,
- "error/%s",
+ "error/%s",
__FrontendGetPath(Frontend));
if (!NT_SUCCESS(status))
goto fail2;
@@ -823,6 +824,7 @@ FrontendIpAddressChange(
ThreadWake(Frontend->MibThread);
}
+_IRQL_requires_(PASSIVE_LEVEL)
static DECLSPEC_NOINLINE NTSTATUS
FrontendMib(
IN PXENVIF_THREAD Self,
@@ -834,7 +836,7 @@ FrontendMib(
NTSTATUS (*__GetIfTable2)(PMIB_IF_TABLE2 *);
NTSTATUS (*__NotifyUnicastIpAddressChange)(ADDRESS_FAMILY,
PUNICAST_IPADDRESS_CHANGE_CALLBACK,
- PVOID,
+ PVOID,
BOOLEAN,
HANDLE *);
NTSTATUS (*__GetUnicastIpAddressTable)(ADDRESS_FAMILY,
@@ -887,7 +889,7 @@ FrontendMib(
Event = ThreadGetEvent(Self);
- for (;;) {
+ for (;;) {
PMIB_IF_TABLE2 IfTable;
PMIB_UNICASTIPADDRESS_TABLE UnicastIpAddressTable;
KIRQL Irql;
@@ -981,6 +983,7 @@ fail1:
return status;
}
+_IRQL_requires_(DISPATCH_LEVEL)
NTSTATUS
FrontendSetMulticastAddresses(
IN PXENVIF_FRONTEND Frontend,
@@ -1093,6 +1096,7 @@ fail1:
return status;
}
+_IRQL_requires_(DISPATCH_LEVEL)
static NTSTATUS
FrontendNotifyMulticastAddresses(
IN PXENVIF_FRONTEND Frontend,
@@ -1147,6 +1151,7 @@ fail1:
return status;
}
+_IRQL_requires_(DISPATCH_LEVEL)
NTSTATUS
FrontendSetFilterLevel(
IN PXENVIF_FRONTEND Frontend,
@@ -1188,6 +1193,7 @@ fail1:
return status;
}
+_IRQL_requires_(DISPATCH_LEVEL)
VOID
FrontendAdvertiseIpAddresses(
IN PXENVIF_FRONTEND Frontend
@@ -1231,6 +1237,7 @@ FrontendAdvertiseIpAddresses(
KeReleaseSpinLock(&Frontend->Lock, Irql);
}
+_IRQL_requires_(DISPATCH_LEVEL)
static VOID
FrontendSetOnline(
IN PXENVIF_FRONTEND Frontend
@@ -1243,6 +1250,7 @@ FrontendSetOnline(
Trace("<====\n");
}
+_IRQL_requires_(DISPATCH_LEVEL)
static VOID
FrontendSetOffline(
IN PXENVIF_FRONTEND Frontend
@@ -1256,6 +1264,7 @@ FrontendSetOffline(
Trace("<====\n");
}
+_IRQL_requires_(DISPATCH_LEVEL)
static VOID
FrontendSetXenbusState(
IN PXENVIF_FRONTEND Frontend,
@@ -1288,6 +1297,7 @@ FrontendSetXenbusState(
XenbusStateName(State));
}
+_IRQL_requires_(DISPATCH_LEVEL)
static NTSTATUS
FrontendAcquireBackend(
IN PXENVIF_FRONTEND Frontend
@@ -1334,6 +1344,7 @@ fail1:
return status;
}
+_IRQL_requires_(DISPATCH_LEVEL)
static VOID
FrontendWaitForBackendXenbusStateChange(
IN PXENVIF_FRONTEND Frontend,
@@ -1379,6 +1390,7 @@ FrontendWaitForBackendXenbusStateChange(
ULONG Attempt = 0;
while (++Attempt < 1000) {
+#pragma prefast(suppress:28121) // Timeout=0
status = KeWaitForSingleObject(&Event,
Executive,
KernelMode,
@@ -1437,6 +1449,7 @@ FrontendWaitForBackendXenbusStateChange(
XenbusStateName(*State));
}
+_IRQL_requires_(DISPATCH_LEVEL)
static VOID
FrontendReleaseBackend(
IN PXENVIF_FRONTEND Frontend
@@ -1457,6 +1470,7 @@ FrontendReleaseBackend(
Trace("<=====\n");
}
+_IRQL_requires_(DISPATCH_LEVEL)
static VOID
FrontendClose(
IN PXENVIF_FRONTEND Frontend
@@ -1518,6 +1532,7 @@ FrontendClose(
Trace("<====\n");
}
+_IRQL_requires_(DISPATCH_LEVEL)
static NTSTATUS
FrontendPrepare(
IN PXENVIF_FRONTEND Frontend
@@ -1880,6 +1895,7 @@ FrontendIsSplit(
return __FrontendIsSplit(Frontend);
}
+_IRQL_requires_(DISPATCH_LEVEL)
static FORCEINLINE NTSTATUS
__FrontendUpdateHash(
PXENVIF_FRONTEND Frontend,
@@ -1961,6 +1977,7 @@ fail1:
return status;
}
+_IRQL_requires_(DISPATCH_LEVEL)
NTSTATUS
FrontendSetHashAlgorithm(
IN PXENVIF_FRONTEND Frontend,
@@ -2027,6 +2044,7 @@ fail1:
return status;
}
+_IRQL_requires_(DISPATCH_LEVEL)
NTSTATUS
FrontendQueryHashTypes(
IN PXENVIF_FRONTEND Frontend,
@@ -2066,6 +2084,7 @@ fail1:
return status;
}
+_IRQL_requires_(DISPATCH_LEVEL)
NTSTATUS
FrontendSetHashMapping(
IN PXENVIF_FRONTEND Frontend,
@@ -2109,6 +2128,7 @@ fail1:
return status;
}
+_IRQL_requires_(DISPATCH_LEVEL)
NTSTATUS
FrontendSetHashKey(
IN PXENVIF_FRONTEND Frontend,
@@ -2143,6 +2163,7 @@ fail1:
return status;
}
+_IRQL_requires_(DISPATCH_LEVEL)
NTSTATUS
FrontendSetHashTypes(
IN PXENVIF_FRONTEND Frontend,
@@ -2218,6 +2239,7 @@ FrontendGetQueue(
return Queue;
}
+_IRQL_requires_(DISPATCH_LEVEL)
static NTSTATUS
FrontendConnect(
IN PXENVIF_FRONTEND Frontend
@@ -2414,6 +2436,7 @@ fail1:
return status;
}
+_IRQL_requires_(DISPATCH_LEVEL)
static VOID
FrontendDisconnect(
IN PXENVIF_FRONTEND Frontend
@@ -2441,6 +2464,7 @@ FrontendDisconnect(
Trace("<====\n");
}
+_IRQL_requires_(DISPATCH_LEVEL)
static NTSTATUS
FrontendEnable(
IN PXENVIF_FRONTEND Frontend
@@ -2492,6 +2516,7 @@ fail1:
return status;
}
+_IRQL_requires_(DISPATCH_LEVEL)
static VOID
FrontendDisable(
IN PXENVIF_FRONTEND Frontend
@@ -2508,6 +2533,7 @@ FrontendDisable(
Trace("<====\n");
}
+_IRQL_requires_(DISPATCH_LEVEL)
NTSTATUS
FrontendSetState(
IN PXENVIF_FRONTEND Frontend,
@@ -2662,6 +2688,7 @@ FrontendSetState(
return (!Failed) ? STATUS_SUCCESS : STATUS_UNSUCCESSFUL;
}
+_IRQL_requires_(DISPATCH_LEVEL)
static FORCEINLINE VOID
__FrontendResume(
IN PXENVIF_FRONTEND Frontend
@@ -2673,6 +2700,7 @@ __FrontendResume(
(VOID) FrontendSetState(Frontend, FRONTEND_CLOSED);
}
+_IRQL_requires_(DISPATCH_LEVEL)
static FORCEINLINE VOID
__FrontendSuspend(
IN PXENVIF_FRONTEND Frontend
@@ -2704,6 +2732,8 @@ FrontendSuspendCallbackLate(
__FrontendResume(Frontend);
}
+_IRQL_requires_min_(PASSIVE_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
NTSTATUS
FrontendResume(
IN PXENVIF_FRONTEND Frontend
@@ -2756,7 +2786,7 @@ FrontendResume(
Trace("<====\n");
return STATUS_SUCCESS;
-
+
fail3:
Error("fail3\n");
@@ -2780,6 +2810,8 @@ fail1:
return status;
}
+_IRQL_requires_min_(PASSIVE_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
VOID
FrontendSuspend(
IN PXENVIF_FRONTEND Frontend
@@ -2821,7 +2853,7 @@ FrontendSuspend(
Trace("<====\n");
}
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
NTSTATUS
FrontendInitialize(
IN PXENVIF_PDO Pdo,
@@ -2849,9 +2881,9 @@ FrontendInitialize(
if (Path == NULL)
goto fail1;
- status = RtlStringCbPrintfA(Path,
+ status = RtlStringCbPrintfA(Path,
Length,
- "device/vif/%s",
+ "device/vif/%s",
Name);
if (!NT_SUCCESS(status))
goto fail2;
@@ -2863,7 +2895,7 @@ FrontendInitialize(
if (Prefix == NULL)
goto fail3;
- status = RtlStringCbPrintfA(Prefix,
+ status = RtlStringCbPrintfA(Prefix,
Length,
"attr/vif/%s",
Name);
@@ -3031,6 +3063,7 @@ fail1:
return status;
}
+_IRQL_requires_(PASSIVE_LEVEL)
VOID
FrontendTeardown(
IN PXENVIF_FRONTEND Frontend
diff --git a/src/xenvif/frontend.h b/src/xenvif/frontend.h
index 59d9718..e0b9069 100644
--- a/src/xenvif/frontend.h
+++ b/src/xenvif/frontend.h
@@ -1,32 +1,32 @@
/* 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
+ *
+ * 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
+ *
+ * * 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
+ * * 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
+ *
+ * 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.
*/
@@ -56,13 +56,14 @@ typedef enum _XENVIF_FRONTEND_STATE {
FRONTEND_ENABLED
} XENVIF_FRONTEND_STATE, *PXENVIF_FRONTEND_STATE;
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
extern NTSTATUS
FrontendInitialize(
IN PXENVIF_PDO Pdo,
OUT PXENVIF_FRONTEND *Frontend
);
+_IRQL_requires_(PASSIVE_LEVEL)
extern VOID
FrontendTeardown(
IN PXENVIF_FRONTEND Frontend
@@ -73,17 +74,22 @@ FrontendEjectFailed(
IN PXENVIF_FRONTEND Frontend
);
+_IRQL_requires_(DISPATCH_LEVEL)
extern NTSTATUS
FrontendSetState(
IN PXENVIF_FRONTEND Frontend,
IN XENVIF_FRONTEND_STATE State
);
+_IRQL_requires_min_(PASSIVE_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
extern NTSTATUS
FrontendResume(
IN PXENVIF_FRONTEND Frontend
);
+_IRQL_requires_min_(PASSIVE_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
extern VOID
FrontendSuspend(
IN PXENVIF_FRONTEND Frontend
@@ -188,6 +194,7 @@ FrontendIncrementStatistic(
IN ULONGLONG Delta
);
+_IRQL_requires_(DISPATCH_LEVEL)
extern NTSTATUS
FrontendSetMulticastAddresses(
IN PXENVIF_FRONTEND Frontend,
@@ -195,6 +202,7 @@ FrontendSetMulticastAddresses(
IN ULONG Count
);
+_IRQL_requires_(DISPATCH_LEVEL)
extern NTSTATUS
FrontendSetFilterLevel(
IN PXENVIF_FRONTEND Frontend,
@@ -202,23 +210,27 @@ FrontendSetFilterLevel(
IN XENVIF_MAC_FILTER_LEVEL Level
);
+_IRQL_requires_(DISPATCH_LEVEL)
extern VOID
FrontendAdvertiseIpAddresses(
IN PXENVIF_FRONTEND Frontend
);
+_IRQL_requires_(DISPATCH_LEVEL)
extern NTSTATUS
FrontendSetHashAlgorithm(
IN PXENVIF_FRONTEND Frontend,
IN XENVIF_PACKET_HASH_ALGORITHM Algorithm
);
+_IRQL_requires_(DISPATCH_LEVEL)
extern NTSTATUS
FrontendQueryHashTypes(
IN PXENVIF_FRONTEND Frontend,
OUT PULONG Types
);
+_IRQL_requires_(DISPATCH_LEVEL)
extern NTSTATUS
FrontendSetHashMapping(
IN PXENVIF_FRONTEND Frontend,
@@ -226,12 +238,14 @@ FrontendSetHashMapping(
IN ULONG Order
);
+_IRQL_requires_(DISPATCH_LEVEL)
extern NTSTATUS
FrontendSetHashKey(
IN PXENVIF_FRONTEND Frontend,
IN PUCHAR Key
);
+_IRQL_requires_(DISPATCH_LEVEL)
extern NTSTATUS
FrontendSetHashTypes(
IN PXENVIF_FRONTEND Frontend,
diff --git a/src/xenvif/receiver.c b/src/xenvif/receiver.c
index 783f49c..cfb6a64 100644
--- a/src/xenvif/receiver.c
+++ b/src/xenvif/receiver.c
@@ -1,32 +1,32 @@
/* 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
+ *
+ * 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
+ *
+ * * 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
+ * * 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
+ *
+ * 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.
*/
@@ -220,7 +220,7 @@ ReceiverPacketCtor(
fail1:
Error("fail1 (%08x)\n", status);
-
+
ASSERT(IsZeroMemory(Packet, sizeof (XENVIF_RECEIVER_PACKET)));
return status;
@@ -578,7 +578,7 @@ ReceiverRingProcessChecksum(
} else {
Packet->Flags.TcpChecksumNotValidated = 1;
}
-
+
if ((Ring->OffloadOptions.NeedChecksumValue ||
Receiver->CalculateChecksums != 0) &&
(flags & NETRXF_data_validated)) {
@@ -824,9 +824,9 @@ __ReceiverRingBuildSegment(
ULONG PacketLength;
PacketLength = Info->IpHeader.Length +
- Info->IpOptions.Length +
- Info->TcpHeader.Length +
- Info->TcpOptions.Length +
+ Info->IpOptions.Length +
+ Info->TcpHeader.Length +
+ Info->TcpOptions.Length +
SegmentSize;
IpHeader->Version4.PacketLength = HTONS((USHORT)PacketLength);
@@ -836,9 +836,9 @@ __ReceiverRingBuildSegment(
ASSERT3U(IpHeader->Version, ==, 6);
- PayloadLength = Info->IpOptions.Length +
- Info->TcpHeader.Length +
- Info->TcpOptions.Length +
+ PayloadLength = Info->IpOptions.Length +
+ Info->TcpHeader.Length +
+ Info->TcpOptions.Length +
SegmentSize;
IpHeader->Version6.PayloadLength = HTONS((USHORT)PayloadLength);
@@ -854,7 +854,7 @@ __ReceiverRingBuildSegment(
ULONG Length;
Mdl->Next = __ReceiverRingGetMdl(Ring, FALSE);
-
+
status = STATUS_NO_MEMORY;
if (Mdl->Next == NULL)
goto fail2;
@@ -912,7 +912,7 @@ fail2:
fail1:
Error("fail1 (%08x)\n", status);
-
+
return NULL;
}
@@ -952,7 +952,7 @@ ReceiverRingProcessLargePacket(
Info = &Packet->Info;
ASSERT(Info->IpHeader.Offset != 0);
ASSERT(Info->TcpHeader.Offset != 0);
-
+
flags = (uint16_t)Packet->Flags.Value;
ASSERT(flags & NETRXF_csum_blank);
ASSERT(flags & NETRXF_data_validated);
@@ -982,11 +982,11 @@ ReceiverRingProcessLargePacket(
USHORT PacketLength;
PacketLength = NTOHS(IpHeader->Version4.PacketLength);
-
+
Length = (ULONG)PacketLength -
Info->TcpOptions.Length -
Info->TcpHeader.Length -
- Info->IpOptions.Length -
+ Info->IpOptions.Length -
Info->IpHeader.Length;
} else {
USHORT PayloadLength;
@@ -1035,13 +1035,13 @@ ReceiverRingProcessLargePacket(
USHORT PacketLength;
PacketLength = NTOHS(IpHeader->Version4.PacketLength);
-
+
ASSERT3U(Length,
==,
(ULONG)PacketLength -
Info->TcpOptions.Length -
Info->TcpHeader.Length -
- Info->IpOptions.Length -
+ Info->IpOptions.Length -
Info->IpHeader.Length);
IpHeader->Version4.Checksum = ChecksumIpVersion4Header(InfoVa,
Info);
@@ -1330,6 +1330,8 @@ fail1:
1);
}
+_IRQL_requires_min_(PASSIVE_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
static FORCEINLINE VOID
__ReceiverRingSwizzle(
IN PXENVIF_RECEIVER_RING Ring
@@ -1571,8 +1573,8 @@ __ReceiverRingSwizzle(
}
}
+_IRQL_requires_(DISPATCH_LEVEL)
static FORCEINLINE VOID
-__drv_requiresIRQL(DISPATCH_LEVEL)
__ReceiverRingAcquireLock(
IN PXENVIF_RECEIVER_RING Ring
)
@@ -1582,6 +1584,7 @@ __ReceiverRingAcquireLock(
KeAcquireSpinLockAtDpcLevel(&Ring->Lock);
}
+_IRQL_requires_(DISPATCH_LEVEL)
static DECLSPEC_NOINLINE VOID
ReceiverRingAcquireLock(
IN PXENVIF_RECEIVER_RING Ring
@@ -1590,8 +1593,8 @@ ReceiverRingAcquireLock(
__ReceiverRingAcquireLock(Ring);
}
+_IRQL_requires_(DISPATCH_LEVEL)
static FORCEINLINE VOID
-__drv_requiresIRQL(DISPATCH_LEVEL)
__ReceiverRingReleaseLock(
IN PXENVIF_RECEIVER_RING Ring
)
@@ -1602,6 +1605,7 @@ __ReceiverRingReleaseLock(
KeReleaseSpinLockFromDpcLevel(&Ring->Lock);
}
+_IRQL_requires_(DISPATCH_LEVEL)
static DECLSPEC_NOINLINE VOID
ReceiverRingReleaseLock(
IN PXENVIF_RECEIVER_RING Ring
@@ -1610,10 +1614,10 @@ ReceiverRingReleaseLock(
__ReceiverRingReleaseLock(Ring);
}
-__drv_functionClass(KDEFERRED_ROUTINE)
-__drv_maxIRQL(DISPATCH_LEVEL)
-__drv_minIRQL(PASSIVE_LEVEL)
-__drv_sameIRQL
+_Function_class_(KDEFERRED_ROUTINE)
+_IRQL_requires_min_(PASSIVE_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
+_IRQL_requires_same_
static VOID
ReceiverRingQueueDpc(
IN PKDPC Dpc,
@@ -1657,6 +1661,7 @@ __ReceiverRingIsStopped(
return Ring->Stopped;
}
+_IRQL_requires_(DISPATCH_LEVEL)
static FORCEINLINE VOID
__ReceiverRingTrigger(
IN PXENVIF_RECEIVER_RING Ring,
@@ -1701,6 +1706,7 @@ __ReceiverRingSend(
__ReceiverRingReleaseLock(Ring);
}
+_IRQL_requires_(DISPATCH_LEVEL)
static FORCEINLINE VOID
__ReceiverRingReturnPacket(
IN PXENVIF_RECEIVER_RING Ring,
@@ -1853,7 +1859,7 @@ ReceiverRingFill(
}
Fragment = __ReceiverRingPreparePacket(Ring, Packet);
-
+
if (Fragment == NULL) {
__ReceiverRingPutPacket(Ring, Packet, TRUE);
break;
@@ -2005,6 +2011,7 @@ __ReceiverRingQueuePacket(
} while (InterlockedCompareExchangePointer(&Ring->PacketQueue, (PVOID)New,
(PVOID)Old) != Old);
}
+_IRQL_requires_(DISPATCH_LEVEL)
static DECLSPEC_NOINLINE ULONG
ReceiverRingPoll(
IN PXENVIF_RECEIVER_RING Ring
@@ -2312,6 +2319,7 @@ ReceiverRingPollDpc(
KSERVICE_ROUTINE ReceiverRingEvtchnCallback;
+_Use_decl_annotations_
BOOLEAN
ReceiverRingEvtchnCallback(
IN PKINTERRUPT InterruptObject,
@@ -2377,7 +2385,7 @@ ReceiverRingWatchdog(
rsp_prod = 0;
rsp_cons = 0;
- for (;;) {
+ for (;;) {
PKEVENT Event;
KIRQL Irql;
@@ -2652,7 +2660,7 @@ __ReceiverRingConnect(
ASSERT3P(Ring->Front.sring, ==, Ring->Shared);
Pfn = MmGetMdlPfnArray(Ring->Mdl)[0];
-
+
status = XENBUS_GNTTAB(PermitForeignAccess,
&Receiver->GnttabInterface,
Ring->GnttabCache,
@@ -2870,11 +2878,12 @@ fail1:
return status;
}
+_IRQL_requires_(DISPATCH_LEVEL)
static FORCEINLINE VOID
__ReceiverRingDisable(
IN PXENVIF_RECEIVER_RING Ring
)
-{
+{
PXENVIF_RECEIVER Receiver;
PXENVIF_FRONTEND Frontend;
@@ -3076,6 +3085,7 @@ ReceiverDebugCallback(
Receiver->Returned);
}
+_IRQL_requires_(PASSIVE_LEVEL)
NTSTATUS
ReceiverInitialize(
IN PXENVIF_FRONTEND Frontend,
@@ -3249,6 +3259,7 @@ fail1:
return status;
}
+_IRQL_requires_(DISPATCH_LEVEL)
NTSTATUS
ReceiverConnect(
IN PXENVIF_RECEIVER Receiver
@@ -3287,7 +3298,7 @@ ReceiverConnect(
goto fail5;
Index++;
- }
+ }
status = XENBUS_DEBUG(Register,
&Receiver->DebugInterface,
@@ -3434,6 +3445,7 @@ fail1:
return status;
}
+_IRQL_requires_(DISPATCH_LEVEL)
NTSTATUS
ReceiverStoreWrite(
IN PXENVIF_RECEIVER Receiver,
@@ -3493,7 +3505,7 @@ ReceiverStoreWrite(
goto fail6;
Index++;
- }
+ }
return STATUS_SUCCESS;
@@ -3518,6 +3530,7 @@ fail1:
return status;
}
+_IRQL_requires_(DISPATCH_LEVEL)
NTSTATUS
ReceiverEnable(
IN PXENVIF_RECEIVER Receiver
@@ -3540,7 +3553,7 @@ ReceiverEnable(
goto fail1;
Index++;
- }
+ }
Trace("<====\n");
return STATUS_SUCCESS;
@@ -3561,6 +3574,7 @@ fail1:
return status;
}
+_IRQL_requires_(DISPATCH_LEVEL)
VOID
ReceiverDisable(
IN PXENVIF_RECEIVER Receiver
@@ -3583,6 +3597,7 @@ ReceiverDisable(
Trace("<====\n");
}
+_IRQL_requires_(DISPATCH_LEVEL)
VOID
ReceiverDisconnect(
IN PXENVIF_RECEIVER Receiver
@@ -3618,6 +3633,7 @@ ReceiverDisconnect(
Trace("<====\n");
}
+_IRQL_requires_(PASSIVE_LEVEL)
VOID
ReceiverTeardown(
IN PXENVIF_RECEIVER Receiver
@@ -3678,6 +3694,7 @@ ReceiverTeardown(
__ReceiverFree(Receiver);
}
+_IRQL_requires_(DISPATCH_LEVEL)
VOID
ReceiverSetOffloadOptions(
IN PXENVIF_RECEIVER Receiver,
@@ -3705,9 +3722,10 @@ ReceiverSetOffloadOptions(
break;
__ReceiverRingSetOffloadOptions(Ring, Options);
- }
+ }
}
+_IRQL_requires_(DISPATCH_LEVEL)
VOID
ReceiverSetBackfillSize(
IN PXENVIF_RECEIVER Receiver,
@@ -3734,6 +3752,7 @@ ReceiverSetBackfillSize(
}
}
+_IRQL_requires_(DISPATCH_LEVEL)
VOID
ReceiverQueryRingSize(
IN PXENVIF_RECEIVER Receiver,
@@ -3745,6 +3764,7 @@ ReceiverQueryRingSize(
*Size = XENVIF_RECEIVER_RING_SIZE;
}
+_IRQL_requires_(DISPATCH_LEVEL)
VOID
ReceiverReturnPacket(
IN PXENVIF_RECEIVER Receiver,
@@ -3776,6 +3796,7 @@ ReceiverReturnPacket(
#define XENVIF_RECEIVER_PACKET_WAIT_PERIOD 10
+_IRQL_requires_max_(APC_LEVEL)
VOID
ReceiverWaitForPackets(
IN PXENVIF_RECEIVER Receiver
@@ -3826,6 +3847,7 @@ ReceiverWaitForPackets(
Trace("%s: <====\n", FrontendGetPath(Frontend));
}
+_IRQL_requires_(DISPATCH_LEVEL)
VOID
ReceiverTrigger(
IN PXENVIF_RECEIVER Receiver,
@@ -3839,6 +3861,7 @@ ReceiverTrigger(
__ReceiverRingTrigger(Ring, FALSE);
}
+_IRQL_requires_(DISPATCH_LEVEL)
VOID
ReceiverSend(
IN PXENVIF_RECEIVER Receiver,
@@ -3852,6 +3875,7 @@ ReceiverSend(
__ReceiverRingSend(Ring, FALSE);
}
+_IRQL_requires_(DISPATCH_LEVEL)
NTSTATUS
ReceiverSetHashAlgorithm(
IN PXENVIF_RECEIVER Receiver,
@@ -3895,6 +3919,7 @@ fail1:
return status;
}
+_IRQL_requires_(DISPATCH_LEVEL)
NTSTATUS
ReceiverQueryHashCapabilities(
IN PXENVIF_RECEIVER Receiver,
@@ -3918,6 +3943,7 @@ fail1:
return status;
}
+_IRQL_requires_(DISPATCH_LEVEL)
NTSTATUS
ReceiverUpdateHashParameters(
IN PXENVIF_RECEIVER Receiver,
@@ -3969,6 +3995,7 @@ fail1:
return status;
}
+_IRQL_requires_(DISPATCH_LEVEL)
static FORCEINLINE NTSTATUS
__ReceiverSetQueueAffinities(
IN PXENVIF_RECEIVER Receiver,
@@ -4012,6 +4039,7 @@ fail1:
return status;
}
+_IRQL_requires_(DISPATCH_LEVEL)
NTSTATUS
ReceiverUpdateHashMapping(
IN PXENVIF_RECEIVER Receiver,
diff --git a/src/xenvif/receiver.h b/src/xenvif/receiver.h
index 0238bb2..5c03b94 100644
--- a/src/xenvif/receiver.h
+++ b/src/xenvif/receiver.h
@@ -1,32 +1,32 @@
/* 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
+ *
+ * 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
+ *
+ * * 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
+ * * 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
+ *
+ * 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.
*/
@@ -41,96 +41,113 @@
typedef struct _XENVIF_RECEIVER XENVIF_RECEIVER, *PXENVIF_RECEIVER;
+_IRQL_requires_(PASSIVE_LEVEL)
extern NTSTATUS
ReceiverInitialize(
IN PXENVIF_FRONTEND Frontend,
OUT PXENVIF_RECEIVER *Receiver
);
+_IRQL_requires_(DISPATCH_LEVEL)
extern NTSTATUS
ReceiverConnect(
IN PXENVIF_RECEIVER Receiver
);
+_IRQL_requires_(DISPATCH_LEVEL)
extern NTSTATUS
ReceiverStoreWrite(
IN PXENVIF_RECEIVER Receiver,
IN PXENBUS_STORE_TRANSACTION Transaction
);
+_IRQL_requires_(DISPATCH_LEVEL)
extern NTSTATUS
ReceiverEnable(
IN PXENVIF_RECEIVER Receiver
);
+_IRQL_requires_(DISPATCH_LEVEL)
extern VOID
ReceiverDisable(
IN PXENVIF_RECEIVER Receiver
);
+_IRQL_requires_(DISPATCH_LEVEL)
extern VOID
ReceiverDisconnect(
IN PXENVIF_RECEIVER Receiver
);
+_IRQL_requires_(PASSIVE_LEVEL)
extern VOID
ReceiverTeardown(
IN PXENVIF_RECEIVER Receiver
);
+_IRQL_requires_max_(APC_LEVEL)
extern VOID
ReceiverWaitForPackets(
IN PXENVIF_RECEIVER Receiver
);
+_IRQL_requires_(DISPATCH_LEVEL)
extern VOID
ReceiverQueryRingSize(
IN PXENVIF_RECEIVER Receiver,
OUT PULONG Size
);
+_IRQL_requires_(DISPATCH_LEVEL)
extern VOID
ReceiverSetOffloadOptions(
IN PXENVIF_RECEIVER Receiver,
IN XENVIF_VIF_OFFLOAD_OPTIONS Options
);
+_IRQL_requires_(DISPATCH_LEVEL)
extern VOID
ReceiverSetBackfillSize(
IN PXENVIF_RECEIVER Receiver,
IN ULONG Size
);
+_IRQL_requires_(DISPATCH_LEVEL)
extern VOID
ReceiverReturnPacket(
IN PXENVIF_RECEIVER Receiver,
IN PVOID Cookie
);
+_IRQL_requires_(DISPATCH_LEVEL)
extern VOID
ReceiverTrigger(
IN PXENVIF_RECEIVER Receiver,
IN ULONG Index
);
+_IRQL_requires_(DISPATCH_LEVEL)
extern VOID
ReceiverSend(
IN PXENVIF_RECEIVER Receiver,
IN ULONG Index
);
+_IRQL_requires_(DISPATCH_LEVEL)
NTSTATUS
ReceiverSetHashAlgorithm(
IN PXENVIF_RECEIVER Receiver,
IN XENVIF_PACKET_HASH_ALGORITHM Algorithm
);
+_IRQL_requires_(DISPATCH_LEVEL)
NTSTATUS
ReceiverQueryHashCapabilities(
IN PXENVIF_RECEIVER Receiver,
OUT PULONG Types
);
+_IRQL_requires_(DISPATCH_LEVEL)
NTSTATUS
ReceiverUpdateHashParameters(
IN PXENVIF_RECEIVER Receiver,
@@ -138,6 +155,7 @@ ReceiverUpdateHashParameters(
IN PUCHAR Key
);
+_IRQL_requires_(DISPATCH_LEVEL)
NTSTATUS
ReceiverUpdateHashMapping(
IN PXENVIF_RECEIVER Receiver,
diff --git a/src/xenvif/transmitter.c b/src/xenvif/transmitter.c
index b46ccc3..bac3286 100644
--- a/src/xenvif/transmitter.c
+++ b/src/xenvif/transmitter.c
@@ -1,32 +1,32 @@
/* 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
+ *
+ * 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
+ *
+ * * 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
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the
* following disclaimer in the documetation 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
+ *
+ * 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.
*/
@@ -943,7 +943,7 @@ fail2:
Error("fail2\n");
ASSERT3P(Buffer->Context, ==, Packet);
- Buffer->Context = NULL;
+ Buffer->Context = NULL;
--Packet->Reference;
@@ -986,7 +986,7 @@ fail1:
__TransmitterPutFragment(Ring, Fragment);
ASSERT3P(Buffer->Context, ==, Packet);
- Buffer->Context = NULL;
+ Buffer->Context = NULL;
--Packet->Reference;
@@ -1218,7 +1218,7 @@ __TransmitterRingPrepareHeader(
Fragment->Type = XENVIF_TRANSMITTER_FRAGMENT_TYPE_BUFFER;
Fragment->Context = Buffer;
-
+
Buffer->Reference++;
Pfn = MmGetMdlPfnArray(Mdl)[0];
@@ -1297,9 +1297,9 @@ __TransmitterRingPrepareHeader(
// Fix up the IP packet length
Length = Info->IpHeader.Length +
- Info->IpOptions.Length +
- Info->TcpHeader.Length +
- Info->TcpOptions.Length +
+ Info->IpOptions.Length +
+ Info->TcpHeader.Length +
+ Info->TcpOptions.Length +
Payload->Length;
ASSERT3U((USHORT)Length, ==, Length);
@@ -1320,7 +1320,7 @@ __TransmitterRingPrepareHeader(
if (Packet->MaximumSegmentSize == Payload->Length)
Packet->OffloadOptions.OffloadIpVersion4LargePacket = 0;
}
-
+
if (Packet->OffloadOptions.OffloadIpVersion6LargePacket) {
PIP_HEADER IpHeader;
PTCP_HEADER TcpHeader;
@@ -1335,9 +1335,9 @@ __TransmitterRingPrepareHeader(
TcpHeader = (PTCP_HEADER)(BaseVa + Info->TcpHeader.Offset);
// Fix up the IP payload length
- Length = Info->IpOptions.Length +
- Info->TcpHeader.Length +
- Info->TcpOptions.Length +
+ Length = Info->IpOptions.Length +
+ Info->TcpHeader.Length +
+ Info->TcpOptions.Length +
Payload->Length;
ASSERT3U((USHORT)Length, ==, Length);
@@ -1362,7 +1362,7 @@ __TransmitterRingPrepareHeader(
ULONG MaximumFrameSize;
MacQueryMaximumFrameSize(Mac, &MaximumFrameSize);
-
+
if (Fragment->Length > MaximumFrameSize) {
status = STATUS_INVALID_PARAMETER;
SquashError = TRUE;
@@ -1958,7 +1958,7 @@ __TransmitterRingPrepareNeighbourAdvertisement(
IpHeader->NextHeader = IPPROTO_ICMPV6;
IpHeader->HopLimit = 255;
- RtlCopyMemory(IpHeader->SourceAddress.Byte,
+ RtlCopyMemory(IpHeader->SourceAddress.Byte,
Address,
IPV6_ADDRESS_LENGTH);
@@ -2633,6 +2633,7 @@ done:
return Count;
}
+_IRQL_requires_(DISPATCH_LEVEL)
static FORCEINLINE VOID
__TransmitterRingTrigger(
IN PXENVIF_TRANSMITTER_RING Ring
@@ -2713,6 +2714,7 @@ __TransmitterRingPushRequests(
#define XENVIF_TRANSMITTER_LOCK_BIT ((ULONG_PTR)1)
+_IRQL_requires_(DISPATCH_LEVEL)
static DECLSPEC_NOINLINE VOID
TransmitterRingSwizzle(
IN PXENVIF_TRANSMITTER_RING Ring
@@ -2728,7 +2730,7 @@ TransmitterRingSwizzle(
InitializeListHead(&List);
- New = XENVIF_TRANSMITTER_LOCK_BIT;
+ New = XENVIF_TRANSMITTER_LOCK_BIT;
Old = (ULONG_PTR)InterlockedExchangePointer(&Ring->Lock, (PVOID)New);
ASSERT(Old & XENVIF_TRANSMITTER_LOCK_BIT);
@@ -2762,6 +2764,7 @@ TransmitterRingSwizzle(
}
}
+_IRQL_requires_(DISPATCH_LEVEL)
static DECLSPEC_NOINLINE VOID
TransmitterRingSchedule(
IN PXENVIF_TRANSMITTER_RING Ring
@@ -3052,6 +3055,7 @@ __TransmitterSetCompletionInfo(
Packet->Completion.PayloadLength = (USHORT)Payload->Length;
}
+_IRQL_requires_(DISPATCH_LEVEL)
static FORCEINLINE VOID
__TransmitterReturnPackets(
IN PXENVIF_TRANSMITTER Transmitter,
@@ -3087,8 +3091,8 @@ __TransmitterReturnPackets(
}
}
+_IRQL_requires_(DISPATCH_LEVEL)
static FORCEINLINE BOOLEAN
-__drv_requiresIRQL(DISPATCH_LEVEL)
__TransmitterRingTryAcquireLock(
IN PXENVIF_TRANSMITTER_RING Ring
)
@@ -3119,8 +3123,8 @@ __TransmitterRingTryAcquireLock(
return Acquired;
}
+_IRQL_requires_(DISPATCH_LEVEL)
static FORCEINLINE VOID
-__drv_requiresIRQL(DISPATCH_LEVEL)
__TransmitterRingAcquireLock(
IN PXENVIF_TRANSMITTER_RING Ring
)
@@ -3135,6 +3139,7 @@ __TransmitterRingAcquireLock(
}
}
+_IRQL_requires_(DISPATCH_LEVEL)
static VOID
TransmitterRingAcquireLock(
IN PXENVIF_TRANSMITTER_RING Ring
@@ -3143,8 +3148,8 @@ TransmitterRingAcquireLock(
__TransmitterRingAcquireLock(Ring);
}
+_IRQL_requires_(DISPATCH_LEVEL)
static FORCEINLINE BOOLEAN
-__drv_requiresIRQL(DISPATCH_LEVEL)
__TransmitterRingTryReleaseLock(
IN PXENVIF_TRANSMITTER_RING Ring
)
@@ -3178,8 +3183,8 @@ __TransmitterRingTryReleaseLock(
return Released;
}
+_IRQL_requires_(DISPATCH_LEVEL)
static FORCEINLINE VOID
-__drv_requiresIRQL(DISPATCH_LEVEL)
__TransmitterRingReleaseLock(
IN PXENVIF_TRANSMITTER_RING Ring
)
@@ -3217,6 +3222,7 @@ __TransmitterRingReleaseLock(
}
}
+_IRQL_requires_(DISPATCH_LEVEL)
static DECLSPEC_NOINLINE VOID
TransmitterRingReleaseLock(
IN PXENVIF_TRANSMITTER_RING Ring
@@ -3225,6 +3231,7 @@ TransmitterRingReleaseLock(
__TransmitterRingReleaseLock(Ring);
}
+_IRQL_requires_(DISPATCH_LEVEL)
static FORCEINLINE BOOLEAN
__TransmitterRingUnmask(
IN PXENVIF_TRANSMITTER_RING Ring,
@@ -3247,11 +3254,8 @@ __TransmitterRingUnmask(
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_(DISPATCH_LEVEL)
static VOID
TransmitterRingPollDpc(
IN PKDPC Dpc,
@@ -3284,6 +3288,7 @@ TransmitterRingPollDpc(
KSERVICE_ROUTINE TransmitterRingEvtchnCallback;
+_Use_decl_annotations_
BOOLEAN
TransmitterRingEvtchnCallback(
IN PKINTERRUPT InterruptObject,
@@ -3318,6 +3323,7 @@ TransmitterRingEvtchnCallback(
#define XENVIF_TRANSMITTER_WATCHDOG_PERIOD 30
+_IRQL_requires_(PASSIVE_LEVEL)
static NTSTATUS
TransmitterRingWatchdog(
IN PXENVIF_THREAD Self,
@@ -3344,7 +3350,7 @@ TransmitterRingWatchdog(
Timeout.QuadPart =
TIME_RELATIVE(TIME_S(XENVIF_TRANSMITTER_WATCHDOG_PERIOD));
PacketsQueued = 0;
- for (;;) {
+ for (;;) {
PKEVENT Event;
KIRQL Irql;
@@ -3391,6 +3397,7 @@ TransmitterRingWatchdog(
return STATUS_SUCCESS;
}
+_IRQL_requires_(PASSIVE_LEVEL)
static FORCEINLINE NTSTATUS
__TransmitterRingInitialize(
IN PXENVIF_TRANSMITTER Transmitter,
@@ -3653,6 +3660,7 @@ fail1:
return status;
}
+_IRQL_requires_(DISPATCH_LEVEL)
static FORCEINLINE NTSTATUS
__TransmitterRingConnect(
IN PXENVIF_TRANSMITTER_RING Ring
@@ -3824,6 +3832,7 @@ fail1:
return status;
}
+_IRQL_requires_(DISPATCH_LEVEL)
static FORCEINLINE NTSTATUS
__TransmitterRingStoreWrite(
IN PXENVIF_TRANSMITTER_RING Ring,
@@ -3884,6 +3893,7 @@ fail1:
return status;
}
+_IRQL_requires_(DISPATCH_LEVEL)
static FORCEINLINE NTSTATUS
__TransmitterRingEnable(
IN PXENVIF_TRANSMITTER_RING Ring
@@ -3915,11 +3925,12 @@ __TransmitterRingEnable(
return STATUS_SUCCESS;
}
+_IRQL_requires_(DISPATCH_LEVEL)
static FORCEINLINE VOID
__TransmitterRingDisable(
IN PXENVIF_TRANSMITTER_RING Ring
)
-{
+{
PXENVIF_TRANSMITTER Transmitter;
PXENVIF_FRONTEND Frontend;
PXENVIF_TRANSMITTER_PACKET Packet;
@@ -4024,6 +4035,7 @@ __TransmitterRingDisable(
Ring->Index);
}
+_IRQL_requires_(DISPATCH_LEVEL)
static FORCEINLINE VOID
__TransmitterRingDisconnect(
IN PXENVIF_TRANSMITTER_RING Ring
@@ -4081,6 +4093,7 @@ __TransmitterRingDisconnect(
Ring->GnttabCache = NULL;
}
+_IRQL_requires_(PASSIVE_LEVEL)
static FORCEINLINE VOID
__TransmitterRingTeardown(
IN PXENVIF_TRANSMITTER_RING Ring
@@ -4164,6 +4177,7 @@ __TransmitterRingTeardown(
__TransmitterFree(Ring);
}
+_IRQL_requires_(DISPATCH_LEVEL)
static FORCEINLINE VOID
__TransmitterRingQueuePacket(
IN PXENVIF_TRANSMITTER_RING Ring,
@@ -4200,6 +4214,7 @@ __TransmitterRingQueuePacket(
__TransmitterRingReleaseLock(Ring);
}
+_IRQL_requires_(DISPATCH_LEVEL)
static FORCEINLINE VOID
__TransmitterRingAbortPackets(
IN PXENVIF_TRANSMITTER_RING Ring
@@ -4220,7 +4235,7 @@ __TransmitterRingAbortPackets(
while (!IsListEmpty(&Ring->PacketQueue)) {
PLIST_ENTRY ListEntry;
PXENVIF_TRANSMITTER_PACKET Packet;
-
+
ListEntry = RemoveHeadList(&Ring->PacketQueue);
ASSERT3P(ListEntry, !=, &Ring->PacketQueue);
@@ -4251,6 +4266,7 @@ __TransmitterRingAbortPackets(
__TransmitterRingReleaseLock(Ring);
}
+_IRQL_requires_(DISPATCH_LEVEL)
static FORCEINLINE NTSTATUS
__TransmitterRingQueueArp(
IN PXENVIF_TRANSMITTER_RING Ring,
@@ -4301,6 +4317,7 @@ fail1:
return status;
}
+_IRQL_requires_(DISPATCH_LEVEL)
static FORCEINLINE NTSTATUS
__TransmitterRingQueueNeighbourAdvertisement(
IN PXENVIF_TRANSMITTER_RING Ring,
@@ -4355,6 +4372,7 @@ fail1:
return status;
}
+_IRQL_requires_(DISPATCH_LEVEL)
static FORCEINLINE BOOLEAN
__TransmitterHasMulticastControl(
IN PXENVIF_TRANSMITTER Transmitter
@@ -4363,6 +4381,7 @@ __TransmitterHasMulticastControl(
return Transmitter->MulticastControl;
}
+_IRQL_requires_(DISPATCH_LEVEL)
BOOLEAN
TransmitterHasMulticastControl(
IN PXENVIF_TRANSMITTER Transmitter
@@ -4442,6 +4461,7 @@ TransmitterDebugCallback(
UNREFERENCED_PARAMETER(Crashing);
}
+_IRQL_requires_(PASSIVE_LEVEL)
NTSTATUS
TransmitterInitialize(
IN PXENVIF_FRONTEND Frontend,
@@ -4645,7 +4665,7 @@ fail2:
(*Transmitter)->AlwaysCopy = 0;
(*Transmitter)->ValidateChecksums = 0;
(*Transmitter)->DisableMulticastControl = 0;
-
+
ASSERT(IsZeroMemory(*Transmitter, sizeof (XENVIF_TRANSMITTER)));
__TransmitterFree(*Transmitter);
@@ -4655,6 +4675,7 @@ fail1:
return status;
}
+_IRQL_requires_(DISPATCH_LEVEL)
NTSTATUS
TransmitterConnect(
IN PXENVIF_TRANSMITTER Transmitter
@@ -4710,7 +4731,7 @@ TransmitterConnect(
goto fail5;
Index++;
- }
+ }
status = XENBUS_DEBUG(Register,
&Transmitter->DebugInterface,
@@ -4765,6 +4786,7 @@ fail1:
return status;
}
+_IRQL_requires_(DISPATCH_LEVEL)
static FORCEINLINE NTSTATUS
__TransmitterRequestMulticastControl(
IN PXENVIF_TRANSMITTER Transmitter,
@@ -4795,6 +4817,7 @@ fail1:
return status;
}
+_IRQL_requires_(DISPATCH_LEVEL)
NTSTATUS
TransmitterRequestMulticastControl(
IN PXENVIF_TRANSMITTER Transmitter,
@@ -4819,6 +4842,7 @@ fail1:
return status;
}
+_IRQL_requires_(DISPATCH_LEVEL)
NTSTATUS
TransmitterStoreWrite(
IN PXENVIF_TRANSMITTER Transmitter,
@@ -4848,7 +4872,7 @@ TransmitterStoreWrite(
goto fail2;
Index++;
- }
+ }
return STATUS_SUCCESS;
@@ -4861,6 +4885,7 @@ fail1:
return status;
}
+_IRQL_requires_(DISPATCH_LEVEL)
NTSTATUS
TransmitterEnable(
IN PXENVIF_TRANSMITTER Transmitter
@@ -4879,12 +4904,13 @@ TransmitterEnable(
__TransmitterRingEnable(Ring);
Index++;
- }
+ }
Trace("<====\n");
return STATUS_SUCCESS;
}
+_IRQL_requires_(DISPATCH_LEVEL)
VOID
TransmitterDisable(
IN PXENVIF_TRANSMITTER Transmitter
@@ -4907,6 +4933,7 @@ TransmitterDisable(
Trace("<====\n");
}
+_IRQL_requires_(DISPATCH_LEVEL)
VOID
TransmitterDisconnect(
IN PXENVIF_TRANSMITTER Transmitter
@@ -4944,6 +4971,7 @@ TransmitterDisconnect(
Trace("<====\n");
}
+_IRQL_requires_(PASSIVE_LEVEL)
VOID
TransmitterTeardown(
IN PXENVIF_TRANSMITTER Transmitter
@@ -5118,6 +5146,7 @@ done:
return Value;
}
+_IRQL_requires_(DISPATCH_LEVEL)
NTSTATUS
TransmitterQueuePacket(
IN PXENVIF_TRANSMITTER Transmitter,
@@ -5209,6 +5238,7 @@ fail1:
return status;
}
+_IRQL_requires_max_(APC_LEVEL)
VOID
TransmitterAbortPackets(
IN PXENVIF_TRANSMITTER Transmitter
@@ -5227,11 +5257,12 @@ TransmitterAbortPackets(
PXENVIF_TRANSMITTER_RING Ring = Transmitter->Ring[Index];
__TransmitterRingAbortPackets(Ring);
- }
+ }
KeLowerIrql(Irql);
}
+_IRQL_requires_(DISPATCH_LEVEL)
VOID
TransmitterQueueArp(
IN PXENVIF_TRANSMITTER Transmitter,
@@ -5243,6 +5274,7 @@ TransmitterQueueArp(
(VOID) __TransmitterRingQueueArp(Ring, Address);
}
+_IRQL_requires_(DISPATCH_LEVEL)
VOID
TransmitterQueueNeighbourAdvertisement(
IN PXENVIF_TRANSMITTER Transmitter,
@@ -5254,6 +5286,7 @@ TransmitterQueueNeighbourAdvertisement(
(VOID) __TransmitterRingQueueNeighbourAdvertisement(Ring, Address);
}
+_IRQL_requires_(DISPATCH_LEVEL)
VOID
TransmitterQueueMulticastControl(
IN PXENVIF_TRANSMITTER Transmitter,
@@ -5266,6 +5299,7 @@ TransmitterQueueMulticastControl(
(VOID) __TransmitterRingQueueMulticastControl(Ring, Address, Add);
}
+_IRQL_requires_(DISPATCH_LEVEL)
VOID
TransmitterQueryRingSize(
IN PXENVIF_TRANSMITTER Transmitter,
@@ -5296,6 +5330,7 @@ TransmitterNotify(
Ring->PollDpcs++;
}
+_IRQL_requires_(DISPATCH_LEVEL)
VOID
TransmitterQueryOffloadOptions(
IN PXENVIF_TRANSMITTER Transmitter,
@@ -5416,6 +5451,7 @@ TransmitterQueryOffloadOptions(
MAXIMUM_IPV6_OPTIONS_LENGTH - \
MAXIMUM_TCP_HEADER_LENGTH)
+_IRQL_requires_(DISPATCH_LEVEL)
VOID
TransmitterQueryLargePacketSize(
IN PXENVIF_TRANSMITTER Transmitter,
diff --git a/src/xenvif/transmitter.h b/src/xenvif/transmitter.h
index f7f65dd..a5d9e4c 100644
--- a/src/xenvif/transmitter.h
+++ b/src/xenvif/transmitter.h
@@ -1,32 +1,32 @@
/* 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
+ *
+ * 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
+ *
+ * * 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
+ * * 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
+ *
+ * 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.
*/
@@ -43,38 +43,45 @@
typedef struct _XENVIF_TRANSMITTER XENVIF_TRANSMITTER, *PXENVIF_TRANSMITTER;
+_IRQL_requires_(PASSIVE_LEVEL)
extern NTSTATUS
TransmitterInitialize(
IN PXENVIF_FRONTEND Frontend,
OUT PXENVIF_TRANSMITTER *Transmitter
);
+_IRQL_requires_(DISPATCH_LEVEL)
extern NTSTATUS
TransmitterConnect(
IN PXENVIF_TRANSMITTER Transmitter
);
+_IRQL_requires_(DISPATCH_LEVEL)
extern NTSTATUS
TransmitterStoreWrite(
IN PXENVIF_TRANSMITTER Transmitter,
IN PXENBUS_STORE_TRANSACTION Transaction
);
+_IRQL_requires_(DISPATCH_LEVEL)
extern NTSTATUS
TransmitterEnable(
IN PXENVIF_TRANSMITTER Transmitter
);
+_IRQL_requires_(DISPATCH_LEVEL)
extern VOID
TransmitterDisable(
IN PXENVIF_TRANSMITTER Transmitter
);
+_IRQL_requires_(DISPATCH_LEVEL)
extern VOID
TransmitterDisconnect(
IN PXENVIF_TRANSMITTER Transmitter
);
+_IRQL_requires_(PASSIVE_LEVEL)
extern VOID
TransmitterTeardown(
IN PXENVIF_TRANSMITTER Transmitter
@@ -86,23 +93,27 @@ TransmitterNotify(
IN ULONG Index
);
+_IRQL_requires_max_(APC_LEVEL)
extern VOID
TransmitterAbortPackets(
IN PXENVIF_TRANSMITTER Transmitter
);
+_IRQL_requires_(DISPATCH_LEVEL)
extern VOID
TransmitterQueueArp(
IN PXENVIF_TRANSMITTER Transmitter,
IN PIPV4_ADDRESS Address
);
+_IRQL_requires_(DISPATCH_LEVEL)
extern VOID
TransmitterQueueNeighbourAdvertisement(
IN PXENVIF_TRANSMITTER Transmitter,
IN PIPV6_ADDRESS Address
);
+_IRQL_requires_(DISPATCH_LEVEL)
extern VOID
TransmitterQueueMulticastControl(
IN PXENVIF_TRANSMITTER Transmitter,
@@ -110,12 +121,14 @@ TransmitterQueueMulticastControl(
IN BOOLEAN Add
);
+_IRQL_requires_(DISPATCH_LEVEL)
extern VOID
TransmitterQueryRingSize(
IN PXENVIF_TRANSMITTER Transmitter,
OUT PULONG Size
);
+_IRQL_requires_(DISPATCH_LEVEL)
extern NTSTATUS
TransmitterQueuePacket(
IN PXENVIF_TRANSMITTER Transmitter,
@@ -130,12 +143,14 @@ TransmitterQueuePacket(
IN PVOID Cookie
);
+_IRQL_requires_(DISPATCH_LEVEL)
extern VOID
TransmitterQueryOffloadOptions(
IN PXENVIF_TRANSMITTER Transmitter,
OUT PXENVIF_VIF_OFFLOAD_OPTIONS Options
);
+_IRQL_requires_(DISPATCH_LEVEL)
extern VOID
TransmitterQueryLargePacketSize(
IN PXENVIF_TRANSMITTER Transmitter,
@@ -143,11 +158,13 @@ TransmitterQueryLargePacketSize(
OUT PULONG Size
);
+_IRQL_requires_(DISPATCH_LEVEL)
BOOLEAN
TransmitterHasMulticastControl(
IN PXENVIF_TRANSMITTER Transmitter
);
+_IRQL_requires_(DISPATCH_LEVEL)
NTSTATUS
TransmitterRequestMulticastControl(
IN PXENVIF_TRANSMITTER Transmitter,
diff --git a/src/xenvif/vif.c b/src/xenvif/vif.c
index 6f468ee..2cfd2f9 100644
--- a/src/xenvif/vif.c
+++ b/src/xenvif/vif.c
@@ -1,32 +1,32 @@
/* 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
+ *
+ * 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
+ *
+ * * 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
+ * * 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
+ *
+ * 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.
*/
@@ -122,6 +122,7 @@ VifMac(
return STATUS_SUCCESS;
}
+_IRQL_requires_(DISPATCH_LEVEL)
static DECLSPEC_NOINLINE VOID
VifSuspendCallbackLate(
IN PVOID Argument
@@ -142,6 +143,8 @@ VifSuspendCallbackLate(
FrontendAdvertiseIpAddresses(Context->Frontend);
}
+_IRQL_requires_min_(PASSIVE_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
static NTSTATUS
VifEnable(
IN PINTERFACE Interface,
@@ -381,6 +384,8 @@ VifCallbackVersion9(
#undef XENVIF_RECEIVER_QUEUE_MAX
}
+_IRQL_requires_min_(PASSIVE_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
static NTSTATUS
VifEnableVersion9(
IN PINTERFACE Interface,
@@ -408,6 +413,8 @@ VifEnableVersion9(
return status;
}
+_IRQL_requires_min_(PASSIVE_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
static NTSTATUS
VifEnableVersion8(
IN PINTERFACE Interface,
@@ -435,6 +442,8 @@ VifEnableVersion8(
return status;
}
+_IRQL_requires_min_(PASSIVE_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
static VOID
VifDisable(
IN PINTERFACE Interface
@@ -511,7 +520,7 @@ VifQueryStatistic(
status = STATUS_INVALID_PARAMETER;
if (Index >= XENVIF_VIF_STATISTIC_COUNT)
goto done;
-
+
AcquireMrswLockShared(&Context->Lock);
FrontendQueryStatistic(Context->Frontend, Index, Value);
@@ -1205,7 +1214,7 @@ VifGetInterface(
}
return status;
-}
+}
VOID
VifTeardown(
@@ -1236,6 +1245,8 @@ VifTeardown(
Trace("<====\n");
}
+_IRQL_requires_min_(PASSIVE_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
VOID
VifReceiverQueuePacket(
IN PXENVIF_VIF_CONTEXT Context,
diff --git a/src/xenvif/vif.h b/src/xenvif/vif.h
index e9d38a5..379ccc3 100644
--- a/src/xenvif/vif.h
+++ b/src/xenvif/vif.h
@@ -1,32 +1,32 @@
/* 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
+ *
+ * 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
+ *
+ * * 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
+ * * 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
+ *
+ * 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.
*/
@@ -63,6 +63,8 @@ VifTeardown(
// CALLBACKS
+_IRQL_requires_min_(PASSIVE_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
extern VOID
VifReceiverQueuePacket(
IN PXENVIF_VIF_CONTEXT Context,
--
2.51.0.windows.1
--
Ngoc Tu Dinh | Vates XCP-ng Developer
XCP-ng & Xen Orchestra - Vates solutions
web: https://vates.tech
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |