[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [XENCONS PATCH 11/11] Fix CSQ lock annotations
Signed-off-by: Tu Dinh <ngoc-tu.dinh@xxxxxxxxxx> --- src/xencons/ring.c | 16 +++++++++++++++- src/xencons/stream.c | 13 ++++++++----- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/xencons/ring.c b/src/xencons/ring.c index b7e033c..afa9311 100644 --- a/src/xencons/ring.c +++ b/src/xencons/ring.c @@ -173,6 +173,10 @@ RingCsqPeekNextIrp( #pragma warning(disable:28167) // function changes IRQL _Function_class_(IO_CSQ_ACQUIRE_LOCK) +_Requires_lock_not_held_(Csq) +_Acquires_lock_(Csq) +_IRQL_requires_max_(DISPATCH_LEVEL) +_IRQL_raises_(DISPATCH_LEVEL) VOID RingCsqAcquireLock( _In_ PIO_CSQ Csq, @@ -187,6 +191,9 @@ RingCsqAcquireLock( } _Function_class_(IO_CSQ_RELEASE_LOCK) +_Requires_lock_held_(Csq) +_Releases_lock_(Csq) +_IRQL_requires_(DISPATCH_LEVEL) VOID RingCsqReleaseLock( _In_ PIO_CSQ Csq, @@ -197,6 +204,7 @@ RingCsqReleaseLock( Queue = CONTAINING_RECORD(Csq, XENCONS_QUEUE, Csq); + _Analysis_assume_lock_held_(Queue->Lock); KeReleaseSpinLock(&Queue->Lock, Irql); } @@ -253,6 +261,9 @@ __RingCancelRequests( } } +_Requires_lock_not_held_(*Argument) +_Acquires_lock_(*Argument) +_IRQL_requires_min_(DISPATCH_LEVEL) static VOID RingAcquireLock( _In_ PVOID Argument @@ -263,6 +274,9 @@ RingAcquireLock( KeAcquireSpinLockAtDpcLevel(&Ring->Lock); } +_Requires_lock_held_(*Argument) +_Releases_lock_(*Argument) +_IRQL_requires_min_(DISPATCH_LEVEL) static VOID RingReleaseLock( _In_ PVOID Argument @@ -270,7 +284,7 @@ RingReleaseLock( { PXENCONS_RING Ring = Argument; -#pragma prefast(suppress:26110) + _Analysis_assume_lock_held_(Ring->Lock); KeReleaseSpinLockFromDpcLevel(&Ring->Lock); } diff --git a/src/xencons/stream.c b/src/xencons/stream.c index 37cd423..8760e7e 100644 --- a/src/xencons/stream.c +++ b/src/xencons/stream.c @@ -135,10 +135,11 @@ StreamCsqPeekNextIrp( return NextIrp; } -#pragma warning(push) -#pragma warning(disable:28167) // function changes IRQL - _Function_class_(IO_CSQ_ACQUIRE_LOCK) +_Requires_lock_not_held_(Csq) +_Acquires_lock_(Csq) +_IRQL_requires_max_(DISPATCH_LEVEL) +_IRQL_raises_(DISPATCH_LEVEL) VOID StreamCsqAcquireLock( _In_ PIO_CSQ Csq, @@ -153,6 +154,9 @@ StreamCsqAcquireLock( } _Function_class_(IO_CSQ_RELEASE_LOCK) +_Requires_lock_held_(Csq) +_Releases_lock_(Csq) +_IRQL_requires_(DISPATCH_LEVEL) VOID StreamCsqReleaseLock( _In_ PIO_CSQ Csq, @@ -163,11 +167,10 @@ StreamCsqReleaseLock( Stream = CONTAINING_RECORD(Csq, XENCONS_STREAM, Csq); + _Analysis_assume_lock_held_(Stream->Lock); KeReleaseSpinLock(&Stream->Lock, Irql); } -#pragma warning(pop) - IO_CSQ_COMPLETE_CANCELED_IRP StreamCsqCompleteCanceledIrp; VOID -- 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 |