[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




 


Rackspace

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