|
[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 |