sys: request work item refactoring

This commit is contained in:
Bill Zissimopoulos 2016-11-08 13:53:11 -08:00
parent 9d176643c3
commit 5a83c68f56
2 changed files with 19 additions and 19 deletions

View File

@ -699,6 +699,9 @@ enum
#define FspIopCompleteIrp(I, R) FspIopCompleteIrpEx(I, R, TRUE) #define FspIopCompleteIrp(I, R) FspIopCompleteIrpEx(I, R, TRUE)
#define REQ_ALIGN_SIZE 16 #define REQ_ALIGN_SIZE 16
typedef VOID FSP_IOP_REQUEST_FINI(FSP_FSCTL_TRANSACT_REQ *Request, PVOID Context[4]); typedef VOID FSP_IOP_REQUEST_FINI(FSP_FSCTL_TRANSACT_REQ *Request, PVOID Context[4]);
typedef NTSTATUS FSP_IOP_REQUEST_WORK(
PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp,
BOOLEAN CanWait);
typedef struct typedef struct
{ {
FSP_IOP_REQUEST_FINI *RequestFini; FSP_IOP_REQUEST_FINI *RequestFini;
@ -745,11 +748,8 @@ enum
{ {
FspWqRequestWorkRoutine = 3, FspWqRequestWorkRoutine = 3,
}; };
typedef NTSTATUS FSP_WQ_REQUEST_WORK(
PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp,
BOOLEAN CanWait);
NTSTATUS FspWqCreateAndPostIrpWorkItem(PIRP Irp, NTSTATUS FspWqCreateAndPostIrpWorkItem(PIRP Irp,
FSP_WQ_REQUEST_WORK *WorkRoutine, FSP_IOP_REQUEST_FINI *RequestFini, FSP_IOP_REQUEST_WORK *WorkRoutine, FSP_IOP_REQUEST_FINI *RequestFini,
BOOLEAN CreateAndPost); BOOLEAN CreateAndPost);
VOID FspWqPostIrpWorkItem(PIRP Irp); VOID FspWqPostIrpWorkItem(PIRP Irp);
#define FspWqCreateIrpWorkItem(I, RW, RF)\ #define FspWqCreateIrpWorkItem(I, RW, RF)\

View File

@ -20,12 +20,12 @@
static VOID FspWqWorkRoutine(PVOID Context); static VOID FspWqWorkRoutine(PVOID Context);
NTSTATUS FspWqCreateAndPostIrpWorkItem(PIRP Irp, NTSTATUS FspWqCreateAndPostIrpWorkItem(PIRP Irp,
FSP_WQ_REQUEST_WORK *WorkRoutine, FSP_IOP_REQUEST_FINI *RequestFini, FSP_IOP_REQUEST_WORK *WorkRoutine, FSP_IOP_REQUEST_FINI *RequestFini,
BOOLEAN CreateAndPost) BOOLEAN CreateAndPost)
{ {
FSP_FSCTL_TRANSACT_REQ *RequestWorkItem = FspIrpRequest(Irp); FSP_FSCTL_TRANSACT_REQ *Request = FspIrpRequest(Irp);
if (0 == RequestWorkItem) if (0 == Request)
{ {
NTSTATUS Result; NTSTATUS Result;
PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp); PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp);
@ -43,15 +43,15 @@ NTSTATUS FspWqCreateAndPostIrpWorkItem(PIRP Irp,
} }
Result = FspIopCreateRequestWorkItem(Irp, sizeof(WORK_QUEUE_ITEM), Result = FspIopCreateRequestWorkItem(Irp, sizeof(WORK_QUEUE_ITEM),
RequestFini, &RequestWorkItem); RequestFini, &Request);
if (!NT_SUCCESS(Result)) if (!NT_SUCCESS(Result))
return Result; return Result;
ASSERT(sizeof(FSP_WQ_REQUEST_WORK *) == sizeof(PVOID)); ASSERT(sizeof(FSP_IOP_REQUEST_WORK *) == sizeof(PVOID));
FspIopRequestContext(RequestWorkItem, FspWqRequestWorkRoutine) = FspIopRequestContext(Request, FspWqRequestWorkRoutine) =
(PVOID)(UINT_PTR)WorkRoutine; (PVOID)(UINT_PTR)WorkRoutine;
ExInitializeWorkItem((PWORK_QUEUE_ITEM)&RequestWorkItem->Buffer, FspWqWorkRoutine, Irp); ExInitializeWorkItem((PWORK_QUEUE_ITEM)&Request->Buffer, FspWqWorkRoutine, Irp);
} }
if (!CreateAndPost) if (!CreateAndPost)
@ -63,14 +63,14 @@ NTSTATUS FspWqCreateAndPostIrpWorkItem(PIRP Irp,
VOID FspWqPostIrpWorkItem(PIRP Irp) VOID FspWqPostIrpWorkItem(PIRP Irp)
{ {
FSP_FSCTL_TRANSACT_REQ *RequestWorkItem = FspIrpRequest(Irp); FSP_FSCTL_TRANSACT_REQ *Request = FspIrpRequest(Irp);
ASSERT(RequestWorkItem->Kind == FspFsctlTransactReservedKind); ASSERT(Request->Kind == FspFsctlTransactReservedKind);
ASSERT(RequestWorkItem->Size == sizeof *RequestWorkItem + sizeof(WORK_QUEUE_ITEM)); ASSERT(Request->Size == sizeof *Request + sizeof(WORK_QUEUE_ITEM));
ASSERT(RequestWorkItem->Hint == (UINT_PTR)Irp); ASSERT(Request->Hint == (UINT_PTR)Irp);
IoMarkIrpPending(Irp); IoMarkIrpPending(Irp);
ExQueueWorkItem((PWORK_QUEUE_ITEM)&RequestWorkItem->Buffer, CriticalWorkQueue); ExQueueWorkItem((PWORK_QUEUE_ITEM)&Request->Buffer, CriticalWorkQueue);
} }
static VOID FspWqWorkRoutine(PVOID Context) static VOID FspWqWorkRoutine(PVOID Context)
@ -78,9 +78,9 @@ static VOID FspWqWorkRoutine(PVOID Context)
PIRP Irp = Context; PIRP Irp = Context;
PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp); PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp);
PDEVICE_OBJECT DeviceObject = IrpSp->DeviceObject; PDEVICE_OBJECT DeviceObject = IrpSp->DeviceObject;
FSP_FSCTL_TRANSACT_REQ *RequestWorkItem = FspIrpRequest(Irp); FSP_FSCTL_TRANSACT_REQ *Request = FspIrpRequest(Irp);
FSP_WQ_REQUEST_WORK *WorkRoutine = (FSP_WQ_REQUEST_WORK *)(UINT_PTR) FSP_IOP_REQUEST_WORK *WorkRoutine = (FSP_IOP_REQUEST_WORK *)(UINT_PTR)
FspIopRequestContext(RequestWorkItem, FspWqRequestWorkRoutine); FspIopRequestContext(Request, FspWqRequestWorkRoutine);
NTSTATUS Result; NTSTATUS Result;
IoSetTopLevelIrp(Irp); IoSetTopLevelIrp(Irp);