sys: remove wait group (Wgroup) functionality

This commit is contained in:
Bill Zissimopoulos 2022-01-17 14:30:06 +00:00
parent a3b98634de
commit 04c2f0120c
No known key found for this signature in database
GPG Key ID: 3D4F95D52C7B3EA3
2 changed files with 0 additions and 88 deletions

View File

@ -686,28 +686,6 @@ VOID FspIrpHookReset(PIRP Irp);
PVOID FspIrpHookContext(PVOID Context);
NTSTATUS FspIrpHookNext(PDEVICE_OBJECT DeviceObject, PIRP Irp, PVOID Context);
/* utility: wait groups
*
* A Wait Group is a synchronization primitive that encapsulates a counter.
* A Wait Group is considered signaled when the counter is 0 and non-signaled
* when the counter is non-0. (Wait Group functionality is similar to Golang's
* sync.WaitGroup.)
*
* Wait Groups must always be allocated in non-paged storage.
*/
typedef struct
{
KEVENT Event;
LONG Count;
KSPIN_LOCK SpinLock;
} FSP_WGROUP;
VOID FspWgroupInitialize(FSP_WGROUP *Wgroup);
VOID FspWgroupIncrement(FSP_WGROUP *Wgroup);
VOID FspWgroupDecrement(FSP_WGROUP *Wgroup);
VOID FspWgroupSignalPermanently(FSP_WGROUP *Wgroup);
NTSTATUS FspWgroupWait(FSP_WGROUP *Wgroup,
KPROCESSOR_MODE WaitMode, BOOLEAN Alertable, PLARGE_INTEGER PTimeout);
/* silos */
typedef struct
{

View File

@ -131,12 +131,6 @@ NTSTATUS FspIrpHook(PIRP Irp, PIO_COMPLETION_ROUTINE CompletionRoutine, PVOID Ow
VOID FspIrpHookReset(PIRP Irp);
PVOID FspIrpHookContext(PVOID Context);
NTSTATUS FspIrpHookNext(PDEVICE_OBJECT DeviceObject, PIRP Irp, PVOID Context);
VOID FspWgroupInitialize(FSP_WGROUP *Wgroup);
VOID FspWgroupIncrement(FSP_WGROUP *Wgroup);
VOID FspWgroupDecrement(FSP_WGROUP *Wgroup);
VOID FspWgroupSignalPermanently(FSP_WGROUP *Wgroup);
NTSTATUS FspWgroupWait(FSP_WGROUP *Wgroup,
KPROCESSOR_MODE WaitMode, BOOLEAN Alertable, PLARGE_INTEGER PTimeout);
#ifdef ALLOC_PRAGMA
#pragma alloc_text(PAGE, FspIsNtDdiVersionAvailable)
@ -180,13 +174,6 @@ NTSTATUS FspWgroupWait(FSP_WGROUP *Wgroup,
#pragma alloc_text(PAGE, FspSafeMdlDelete)
#pragma alloc_text(PAGE, FspIrpHook)
#pragma alloc_text(PAGE, FspIrpHookReset)
// !#pragma alloc_text(PAGE, FspIrpHookContext)
// !#pragma alloc_text(PAGE, FspIrpHookNext)
// !#pragma alloc_text(PAGE, FspWgroupInitialize)
// !#pragma alloc_text(PAGE, FspWgroupIncrement)
// !#pragma alloc_text(PAGE, FspWgroupDecrement)
// !#pragma alloc_text(PAGE, FspWgroupSignalPermanently)
// !#pragma alloc_text(PAGE, FspWgroupWait)
#endif
static const LONG Delays[] =
@ -1506,56 +1493,3 @@ NTSTATUS FspIrpHookNext(PDEVICE_OBJECT DeviceObject, PIRP Irp, PVOID Context)
return Result;
}
VOID FspWgroupInitialize(FSP_WGROUP *Wgroup)
{
// !PAGED_CODE();
KeInitializeEvent(&Wgroup->Event, NotificationEvent, TRUE);
Wgroup->Count = 0;
KeInitializeSpinLock(&Wgroup->SpinLock);
}
VOID FspWgroupIncrement(FSP_WGROUP *Wgroup)
{
// !PAGED_CODE();
KIRQL Irql;
KeAcquireSpinLock(&Wgroup->SpinLock, &Irql);
if (0 <= Wgroup->Count && 1 == ++Wgroup->Count)
KeClearEvent(&Wgroup->Event);
KeReleaseSpinLock(&Wgroup->SpinLock, Irql);
}
VOID FspWgroupDecrement(FSP_WGROUP *Wgroup)
{
// !PAGED_CODE();
KIRQL Irql;
KeAcquireSpinLock(&Wgroup->SpinLock, &Irql);
if (0 < Wgroup->Count && 0 == --Wgroup->Count)
KeSetEvent(&Wgroup->Event, 1, FALSE);
KeReleaseSpinLock(&Wgroup->SpinLock, Irql);
}
VOID FspWgroupSignalPermanently(FSP_WGROUP *Wgroup)
{
// !PAGED_CODE();
KIRQL Irql;
KeAcquireSpinLock(&Wgroup->SpinLock, &Irql);
Wgroup->Count = -1;
KeSetEvent(&Wgroup->Event, 1, FALSE);
KeReleaseSpinLock(&Wgroup->SpinLock, Irql);
}
NTSTATUS FspWgroupWait(FSP_WGROUP *Wgroup,
KPROCESSOR_MODE WaitMode, BOOLEAN Alertable, PLARGE_INTEGER PTimeout)
{
// !PAGED_CODE();
return KeWaitForSingleObject(&Wgroup->Event, Executive, WaitMode, Alertable, PTimeout);
}