sys: ioq: FspIoqRemoveExpired: add InterruptTime parameter

This commit is contained in:
Bill Zissimopoulos 2016-02-17 17:01:07 -08:00
parent 990955ff61
commit 2c9cd46e4b
3 changed files with 6 additions and 4 deletions

View File

@ -442,9 +442,11 @@ static VOID FspFsvolDeviceExpirationRoutine(PVOID Context)
PDEVICE_OBJECT DeviceObject = Context; PDEVICE_OBJECT DeviceObject = Context;
FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension = FspFsvolDeviceExtension(DeviceObject); FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension = FspFsvolDeviceExtension(DeviceObject);
UINT64 InterruptTime;
KIRQL Irql; KIRQL Irql;
FspIoqRemoveExpired(FsvolDeviceExtension->Ioq); InterruptTime = KeQueryInterruptTime();
FspIoqRemoveExpired(FsvolDeviceExtension->Ioq, InterruptTime);
KeAcquireSpinLock(&FsvolDeviceExtension->ExpirationLock, &Irql); KeAcquireSpinLock(&FsvolDeviceExtension->ExpirationLock, &Irql);
FsvolDeviceExtension->ExpirationInProgress = FALSE; FsvolDeviceExtension->ExpirationInProgress = FALSE;

View File

@ -375,7 +375,7 @@ NTSTATUS FspIoqCreate(
VOID FspIoqDelete(FSP_IOQ *Ioq); VOID FspIoqDelete(FSP_IOQ *Ioq);
VOID FspIoqStop(FSP_IOQ *Ioq); VOID FspIoqStop(FSP_IOQ *Ioq);
BOOLEAN FspIoqStopped(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); BOOLEAN FspIoqPostIrpEx(FSP_IOQ *Ioq, PIRP Irp, BOOLEAN BestEffort, NTSTATUS *PResult);
PIRP FspIoqNextPendingIrp(FSP_IOQ *Ioq, PIRP BoundaryIrp, PLARGE_INTEGER Timeout, PIRP FspIoqNextPendingIrp(FSP_IOQ *Ioq, PIRP BoundaryIrp, PLARGE_INTEGER Timeout,
PIRP CancellableIrp); PIRP CancellableIrp);

View File

@ -509,11 +509,11 @@ BOOLEAN FspIoqStopped(FSP_IOQ *Ioq)
return Result; return Result;
} }
VOID FspIoqRemoveExpired(FSP_IOQ *Ioq) VOID FspIoqRemoveExpired(FSP_IOQ *Ioq, UINT64 InterruptTime)
{ {
FSP_IOQ_PEEK_CONTEXT PeekContext; FSP_IOQ_PEEK_CONTEXT PeekContext;
PeekContext.IrpHint = 0; PeekContext.IrpHint = 0;
PeekContext.ExpirationTime = QueryInterruptTimeInSec(); PeekContext.ExpirationTime = ConvertInterruptTimeToSec(InterruptTime);
PIRP Irp; PIRP Irp;
while (0 != (Irp = IoCsqRemoveNextIrp(&Ioq->PendingIoCsq, &PeekContext))) while (0 != (Irp = IoCsqRemoveNextIrp(&Ioq->PendingIoCsq, &PeekContext)))
Ioq->CompleteCanceledIrp(Irp); Ioq->CompleteCanceledIrp(Irp);