diff --git a/src/sys/driver.h b/src/sys/driver.h index 45a2a434..89ab6e3b 100644 --- a/src/sys/driver.h +++ b/src/sys/driver.h @@ -347,6 +347,8 @@ VOID FspQueueDelayedWorkItem(FSP_DELAYED_WORK_ITEM *DelayedWorkItem, LARGE_INTEG /* I/O queue */ #define FspIoqTimeout ((PIRP)1) +#define FspIoqPostIrp(Q, I, R) FspIoqPostIrpEx(Q, I, TRUE, R) +#define FspIoqPostIrpNoCap(Q, I, R) FspIoqPostIrpEx(Q, I, FALSE, R) typedef struct { KSPIN_LOCK SpinLock; @@ -367,7 +369,7 @@ VOID FspIoqDelete(FSP_IOQ *Ioq); VOID FspIoqStop(FSP_IOQ *Ioq); BOOLEAN FspIoqStopped(FSP_IOQ *Ioq); VOID FspIoqRemoveExpired(FSP_IOQ *Ioq); -BOOLEAN FspIoqPostIrp(FSP_IOQ *Ioq, PIRP Irp, NTSTATUS *PResult); +BOOLEAN FspIoqPostIrpEx(FSP_IOQ *Ioq, PIRP Irp, BOOLEAN CheckCapacity, NTSTATUS *PResult); PIRP FspIoqNextPendingIrp(FSP_IOQ *Ioq, PLARGE_INTEGER Timeout); BOOLEAN FspIoqStartProcessingIrp(FSP_IOQ *Ioq, PIRP Irp); PIRP FspIoqEndProcessingIrp(FSP_IOQ *Ioq, UINT_PTR IrpHint); diff --git a/src/sys/ioq.c b/src/sys/ioq.c index 83015ba5..6cc91148 100644 --- a/src/sys/ioq.c +++ b/src/sys/ioq.c @@ -299,11 +299,11 @@ VOID FspIoqRemoveExpired(FSP_IOQ *Ioq) Ioq->CompleteCanceledIrp(Irp); } -BOOLEAN FspIoqPostIrp(FSP_IOQ *Ioq, PIRP Irp, NTSTATUS *PResult) +BOOLEAN FspIoqPostIrpEx(FSP_IOQ *Ioq, PIRP Irp, BOOLEAN CheckCapacity, NTSTATUS *PResult) { NTSTATUS Result; FspIrpTimestamp(Irp) = QueryInterruptTimeInSec() + Ioq->IrpTimeout; - Result = IoCsqInsertIrpEx(&Ioq->PendingIoCsq, Irp, 0, (PVOID)1); + Result = IoCsqInsertIrpEx(&Ioq->PendingIoCsq, Irp, 0, (PVOID)CheckCapacity); if (NT_SUCCESS(Result)) return TRUE; if (0 != PResult)