XP: Whether probably to use "Queued Spin Lock" with "Cancel-Safe IRP Queue" ?

Whether probably to use “Queued Spin Lock” with “Cancel-Safe IRP Queue” ?

e.g.

typedef struct _MY_DEV_EXT {
// …
IO_CSQ MyCsq;
KSPIN_LOCK MySpinLock;
// …
} MY_DEV_EXT, *PMY_DEV_EXT;

void MyCsqAcquireLock(PIO_CSQ pCsq, PKIRQL pIrql)
{
PLOCK_QUEUE_HANDLE SpinHandle;
PMY_DEV_EXT DevExt;

SpinHandle = CONTAINING_RECORD(pIrql, KLOCK_QUEUE_HANDLE, OldIrql);
DevExt = CONTAINING_RECORD(pCsq, MY_DEV_EXT, MyCsq);

KeAcquireInStackQueuedSpinLock(&DevExt->MyLock, SpinHandle);
}

IoCsqInitialize(
&MyCsq,
MyCsqInsertIrp,
MyCsqRemoveIrp,
MyCsqPeekNextIrp,
MyCsqAcquireLock, // <–
MyCsqReleaseLock,
MyCsqCompleteCanceledIrp
);

// …


You are currently subscribed to ntdev as: $subst(‘Recip.EmailAddr’)
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com

“Leo Yuriev” wrote in message news:xxxxx@ntdev…
>
> Whether probably to use “Queued Spin Lock” with “Cancel-Safe IRP Queue” ?
>

Looks fine to me.

In general, on locks where there’s lots of contention (i.e. commonly many
waiters) it may better in terms of performance to use a queued spin lock
(than a regular spin lock).

Peter
OSR


You are currently subscribed to ntdev as: $subst(‘Recip.EmailAddr’)
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com