From adeb847c7e22ea5d391e3b0a970e81579ef07622 Mon Sep 17 00:00:00 2001 From: Bill Zissimopoulos Date: Tue, 8 Nov 2016 14:18:52 -0800 Subject: [PATCH] sys: request work item refactoring --- src/sys/driver.h | 36 ++++++++++++++++++------------------ src/sys/iop.c | 4 ++-- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/sys/driver.h b/src/sys/driver.h index 3f3b1630..2e68312d 100644 --- a/src/sys/driver.h +++ b/src/sys/driver.h @@ -676,28 +676,12 @@ VOID FspMetaCacheInvalidateItem(FSP_META_CACHE *MetaCache, UINT64 ItemIndex); CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 0x800 + 'W', METHOD_NEITHER, FILE_ANY_ACCESS) #define FSP_FSCTL_WORK_BEST_EFFORT \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 0x800 + 'w', METHOD_NEITHER, FILE_ANY_ACCESS) +#define FSP_FSCTL_TRANSACT_REQ_ALIGNMENT 16 enum { FspIopRequestMustSucceed = 0x01, FspIopRequestNonPaged = 0x02, }; -#define FspIopCreateRequest(I, F, E, P) \ - FspIopCreateRequestFunnel(I, F, E, 0, 0, P) -#define FspIopCreateRequestMustSucceed(I, F, E, P)\ - FspIopCreateRequestFunnel(I, F, E, 0, FspIopRequestMustSucceed, P) -#define FspIopCreateRequestEx(I, F, E, RF, P)\ - FspIopCreateRequestFunnel(I, F, E, RF, 0, P) -#define FspIopCreateRequestMustSucceedEx(I, F, E, RF, P)\ - FspIopCreateRequestFunnel(I, F, E, RF, FspIopRequestMustSucceed, P) -#define FspIopCreateRequestWorkItem(I, E, RF, P)\ - FspIopCreateRequestFunnel(I, 0, E, RF, FspIopRequestNonPaged, P) -#define FspIopRequestContext(Request, I)\ - (*FspIopRequestContextAddress(Request, I)) -#define FspIopPostWorkRequest(D, R) FspIopPostWorkRequestFunnel(D, R, FALSE) -#define FspIopPostWorkRequestBestEffort(D, R)\ - FspIopPostWorkRequestFunnel(D, R, TRUE) -#define FspIopCompleteIrp(I, R) FspIopCompleteIrpEx(I, R, TRUE) -#define REQ_ALIGN_SIZE 16 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, @@ -707,7 +691,7 @@ typedef struct FSP_IOP_REQUEST_FINI *RequestFini; PVOID Context[4]; FSP_FSCTL_TRANSACT_RSP *Response; - __declspec(align(REQ_ALIGN_SIZE)) UINT8 RequestBuf[]; + __declspec(align(FSP_FSCTL_TRANSACT_REQ_ALIGNMENT)) UINT8 RequestBuf[]; } FSP_FSCTL_TRANSACT_REQ_HEADER; FSP_FSCTL_STATIC_ASSERT(sizeof(FSP_FSCTL_TRANSACT_REQ_HEADER) <= 64, "sizeof(FSP_FSCTL_TRANSACT_REQ_HEADER) assumed less or equal to 64; " @@ -742,6 +726,22 @@ VOID FspIrpDeleteRequest(PIRP Irp) FspIrpSetRequest(Irp, 0); } } +#define FspIopCreateRequest(I, F, E, P) \ + FspIopCreateRequestFunnel(I, F, E, 0, 0, P) +#define FspIopCreateRequestMustSucceed(I, F, E, P)\ + FspIopCreateRequestFunnel(I, F, E, 0, FspIopRequestMustSucceed, P) +#define FspIopCreateRequestEx(I, F, E, RF, P)\ + FspIopCreateRequestFunnel(I, F, E, RF, 0, P) +#define FspIopCreateRequestMustSucceedEx(I, F, E, RF, P)\ + FspIopCreateRequestFunnel(I, F, E, RF, FspIopRequestMustSucceed, P) +#define FspIopCreateRequestWorkItem(I, E, RF, P)\ + FspIopCreateRequestFunnel(I, 0, E, RF, FspIopRequestNonPaged, P) +#define FspIopRequestContext(Request, I)\ + (*FspIopRequestContextAddress(Request, I)) +#define FspIopPostWorkRequest(D, R) FspIopPostWorkRequestFunnel(D, R, FALSE) +#define FspIopPostWorkRequestBestEffort(D, R)\ + FspIopPostWorkRequestFunnel(D, R, TRUE) +#define FspIopCompleteIrp(I, R) FspIopCompleteIrpEx(I, R, TRUE) /* work queue processing */ enum diff --git a/src/sys/iop.c b/src/sys/iop.c index 12a39d38..5529d149 100644 --- a/src/sys/iop.c +++ b/src/sys/iop.c @@ -48,11 +48,11 @@ NTSTATUS FspIopDispatchComplete(PIRP Irp, const FSP_FSCTL_TRANSACT_RSP *Response #endif /* Requests (and RequestHeaders) must be 16-byte aligned, because we use the low 4 bits for flags */ -#if REQ_ALIGN_SIZE <= MEMORY_ALLOCATION_ALIGNMENT +#if FSP_FSCTL_TRANSACT_REQ_ALIGNMENT <= MEMORY_ALLOCATION_ALIGNMENT #define REQ_HEADER_ALIGN_MASK 0 #define REQ_HEADER_ALIGN_OVERHEAD 0 #else -#define REQ_HEADER_ALIGN_MASK (REQ_ALIGN_SIZE - 1) +#define REQ_HEADER_ALIGN_MASK (FSP_FSCTL_TRANSACT_REQ_ALIGNMENT - 1) #define REQ_HEADER_ALIGN_OVERHEAD (sizeof(PVOID) + REQ_HEADER_ALIGN_MASK) #endif