[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [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 |