Update SpinLock and DPC to use C++ helpers
This commit is contained in:
@@ -114,7 +114,7 @@ XTAPI
|
|||||||
VOID
|
VOID
|
||||||
Dpc::SignalCallDone(IN PVOID SystemArgument)
|
Dpc::SignalCallDone(IN PVOID SystemArgument)
|
||||||
{
|
{
|
||||||
RtlAtomicDecrement32((PLONG)SystemArgument);
|
RTL::Atomic::Decrement32((PLONG)SystemArgument);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -28,7 +28,7 @@ VOID
|
|||||||
SpinLock::AcquireQueuedSpinLock(IN KSPIN_LOCK_QUEUE_LEVEL LockLevel)
|
SpinLock::AcquireQueuedSpinLock(IN KSPIN_LOCK_QUEUE_LEVEL LockLevel)
|
||||||
{
|
{
|
||||||
/* Acquire the queued spinlock */
|
/* Acquire the queued spinlock */
|
||||||
AcquireSpinLock(KeGetCurrentProcessorControlBlock()->LockQueue[LockLevel].Lock);
|
AcquireSpinLock(KE::Processor::GetCurrentProcessorControlBlock()->LockQueue[LockLevel].Lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -46,18 +46,18 @@ VOID
|
|||||||
SpinLock::AcquireSpinLock(IN OUT PKSPIN_LOCK SpinLock)
|
SpinLock::AcquireSpinLock(IN OUT PKSPIN_LOCK SpinLock)
|
||||||
{
|
{
|
||||||
/* Try to acquire the lock */
|
/* Try to acquire the lock */
|
||||||
while(RtlAtomicBitTestAndSet((PLONG)SpinLock, 0))
|
while(RTL::Atomic::BitTestAndSet((PLONG)SpinLock, 0))
|
||||||
{
|
{
|
||||||
/* Wait until locked is cleared */
|
/* Wait until locked is cleared */
|
||||||
while(*(VOLATILE PKSPIN_LOCK)SpinLock & 1)
|
while(*(VOLATILE PKSPIN_LOCK)SpinLock & 1)
|
||||||
{
|
{
|
||||||
/* Yield processor and keep waiting */
|
/* Yield processor and keep waiting */
|
||||||
ArYieldProcessor();
|
AR::CpuFunc::YieldProcessor();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Add an explicit memory barrier */
|
/* Add an explicit memory barrier */
|
||||||
ArReadWriteBarrier();
|
AR::CpuFunc::ReadWriteBarrier();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -93,7 +93,7 @@ VOID
|
|||||||
SpinLock::ReleaseQueuedSpinLock(IN KSPIN_LOCK_QUEUE_LEVEL LockLevel)
|
SpinLock::ReleaseQueuedSpinLock(IN KSPIN_LOCK_QUEUE_LEVEL LockLevel)
|
||||||
{
|
{
|
||||||
/* Clear the lock */
|
/* Clear the lock */
|
||||||
ReleaseSpinLock(KeGetCurrentProcessorControlBlock()->LockQueue[LockLevel].Lock);
|
ReleaseSpinLock(KE::Processor::GetCurrentProcessorControlBlock()->LockQueue[LockLevel].Lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -111,10 +111,10 @@ VOID
|
|||||||
SpinLock::ReleaseSpinLock(IN OUT PKSPIN_LOCK SpinLock)
|
SpinLock::ReleaseSpinLock(IN OUT PKSPIN_LOCK SpinLock)
|
||||||
{
|
{
|
||||||
/* Clear the lock */
|
/* Clear the lock */
|
||||||
RtlAtomicAnd32((PLONG)SpinLock, 0);
|
RTL::Atomic::And32((PLONG)SpinLock, 0);
|
||||||
|
|
||||||
/* Add an explicit memory barrier */
|
/* Add an explicit memory barrier */
|
||||||
ArReadWriteBarrier();
|
AR::CpuFunc::ReadWriteBarrier();
|
||||||
}
|
}
|
||||||
|
|
||||||
} /* namespace */
|
} /* namespace */
|
||||||
|
Reference in New Issue
Block a user