From 2c9cd46e4bba6de640e2338daa755774dfd76cc3 Mon Sep 17 00:00:00 2001 From: Bill Zissimopoulos Date: Wed, 17 Feb 2016 17:01:07 -0800 Subject: [PATCH] sys: ioq: FspIoqRemoveExpired: add InterruptTime parameter --- src/sys/device.c | 4 +++- src/sys/driver.h | 2 +- src/sys/ioq.c | 4 ++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/sys/device.c b/src/sys/device.c index b30139d1..0c056334 100644 --- a/src/sys/device.c +++ b/src/sys/device.c @@ -442,9 +442,11 @@ static VOID FspFsvolDeviceExpirationRoutine(PVOID Context) PDEVICE_OBJECT DeviceObject = Context; FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension = FspFsvolDeviceExtension(DeviceObject); + UINT64 InterruptTime; KIRQL Irql; - FspIoqRemoveExpired(FsvolDeviceExtension->Ioq); + InterruptTime = KeQueryInterruptTime(); + FspIoqRemoveExpired(FsvolDeviceExtension->Ioq, InterruptTime); KeAcquireSpinLock(&FsvolDeviceExtension->ExpirationLock, &Irql); FsvolDeviceExtension->ExpirationInProgress = FALSE; diff --git a/src/sys/driver.h b/src/sys/driver.h index 1b8baaa1..5d9463b7 100644 --- a/src/sys/driver.h +++ b/src/sys/driver.h @@ -375,7 +375,7 @@ NTSTATUS FspIoqCreate( VOID FspIoqDelete(FSP_IOQ *Ioq); VOID FspIoqStop(FSP_IOQ *Ioq); BOOLEAN FspIoqStopped(FSP_IOQ *Ioq); -VOID FspIoqRemoveExpired(FSP_IOQ *Ioq); +VOID FspIoqRemoveExpired(FSP_IOQ *Ioq, UINT64 InterruptTime); BOOLEAN FspIoqPostIrpEx(FSP_IOQ *Ioq, PIRP Irp, BOOLEAN BestEffort, NTSTATUS *PResult); PIRP FspIoqNextPendingIrp(FSP_IOQ *Ioq, PIRP BoundaryIrp, PLARGE_INTEGER Timeout, PIRP CancellableIrp); diff --git a/src/sys/ioq.c b/src/sys/ioq.c index f084287a..109b076d 100644 --- a/src/sys/ioq.c +++ b/src/sys/ioq.c @@ -509,11 +509,11 @@ BOOLEAN FspIoqStopped(FSP_IOQ *Ioq) return Result; } -VOID FspIoqRemoveExpired(FSP_IOQ *Ioq) +VOID FspIoqRemoveExpired(FSP_IOQ *Ioq, UINT64 InterruptTime) { FSP_IOQ_PEEK_CONTEXT PeekContext; PeekContext.IrpHint = 0; - PeekContext.ExpirationTime = QueryInterruptTimeInSec(); + PeekContext.ExpirationTime = ConvertInterruptTimeToSec(InterruptTime); PIRP Irp; while (0 != (Irp = IoCsqRemoveNextIrp(&Ioq->PendingIoCsq, &PeekContext))) Ioq->CompleteCanceledIrp(Irp);