[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [win-pv-devel] [PATCH 1/5] Remove RingReQueueRequests
From: Owen Smith <owen.smith@xxxxxxxxxx> Since the Frontend transitions the ring through Closed and back to Enabled on a resume from suspend, which aborts all queued and prepared requests, de-queueing and re-queuing all requests from the Target suspend callback is unneccessary. Also removes the Target suspend callback and interface which is now unused. Signed-off-by: Owen Smith <owen.smith@xxxxxxxxxx> --- src/xenvbd/ring.c | 68 ----------------------------------------------------- src/xenvbd/ring.h | 5 ---- src/xenvbd/target.c | 64 +++---------------------------------------------- 3 files changed, 3 insertions(+), 134 deletions(-) diff --git a/src/xenvbd/ring.c b/src/xenvbd/ring.c index cbb408d..7008938 100644 --- a/src/xenvbd/ring.c +++ b/src/xenvbd/ring.c @@ -2220,71 +2220,3 @@ RingQueueShutdown( if (KeInsertQueueDpc(&Ring->Dpc, NULL, NULL)) ++Ring->Dpcs; } - -VOID -RingReQueueRequests( - IN PXENVBD_RING Ring - ) -{ - LIST_ENTRY List; - - InitializeListHead(&List); - - // pop all submitted requests, cleanup and add associated SRB to a list - for (;;) { - PXENVBD_SRBEXT SrbExt; - PXENVBD_REQUEST Request; - PLIST_ENTRY ListEntry; - - ListEntry = QueuePop(&Ring->SubmittedReqs); - if (ListEntry == NULL) - break; - Request = CONTAINING_RECORD(ListEntry, XENVBD_REQUEST, ListEntry); - SrbExt = Request->SrbExt; - - RingPutRequest(Ring, Request); - - if (InterlockedDecrement(&SrbExt->RequestCount) == 0) { - InsertTailList(&List, &SrbExt->ListEntry); - } - } - - // pop all prepared requests, cleanup and add associated SRB to a list - for (;;) { - PXENVBD_SRBEXT SrbExt; - PXENVBD_REQUEST Request; - PLIST_ENTRY ListEntry; - - ListEntry = QueuePop(&Ring->PreparedReqs); - if (ListEntry == NULL) - break; - Request = CONTAINING_RECORD(ListEntry, XENVBD_REQUEST, ListEntry); - SrbExt = Request->SrbExt; - - RingPutRequest(Ring, Request); - - if (InterlockedDecrement(&SrbExt->RequestCount) == 0) { - InsertTailList(&List, &SrbExt->ListEntry); - } - } - - // foreach SRB in list, put on start of FreshSrbs - for (;;) { - PXENVBD_SRBEXT SrbExt; - PLIST_ENTRY ListEntry; - - ListEntry = RemoveTailList(&List); - if (ListEntry == &List) - break; - SrbExt = CONTAINING_RECORD(ListEntry, XENVBD_SRBEXT, ListEntry); - - QueueUnPop(&Ring->FreshSrbs, &SrbExt->ListEntry); - } - - // now the first set of requests popped off submitted list is the next SRB - // to be popped off the fresh list - - Verbose("Target[%d] : %d Fresh SRBs\n", - FrontendGetTargetId(Ring->Frontend), - QueueCount(&Ring->FreshSrbs)); -} diff --git a/src/xenvbd/ring.h b/src/xenvbd/ring.h index 003f1ea..81f4e99 100644 --- a/src/xenvbd/ring.h +++ b/src/xenvbd/ring.h @@ -91,9 +91,4 @@ RingQueueShutdown( IN PXENVBD_SRBEXT SrbExt ); -extern VOID -RingReQueueRequests( - IN PXENVBD_RING Ring - ); - #endif // _XENVBD_RING_H diff --git a/src/xenvbd/target.c b/src/xenvbd/target.c index e46459b..4407c70 100644 --- a/src/xenvbd/target.c +++ b/src/xenvbd/target.c @@ -67,9 +67,7 @@ struct _XENVBD_TARGET { // Frontend (Ring, includes XenBus interfaces) PXENVBD_FRONTEND Frontend; XENBUS_DEBUG_INTERFACE DebugInterface; - XENBUS_SUSPEND_INTERFACE SuspendInterface; PXENBUS_DEBUG_CALLBACK DebugCallback; - PXENBUS_SUSPEND_CALLBACK SuspendCallback; // Eject BOOLEAN WrittenEjected; @@ -1159,23 +1157,6 @@ TargetDebugCallback( Target->Missing ? Target->Reason : "Not Missing"); } -static DECLSPEC_NOINLINE VOID -TargetSuspendCallback( - IN PVOID Argument - ) -{ - PXENVBD_TARGET Target = Argument; - - RingReQueueRequests(FrontendGetRing(Target->Frontend)); - - Verbose("Target[%d] : %s (%s)\n", - TargetGetTargetId(Target), - Target->Missing ? "MISSING" : "NOT_MISSING", - Target->Reason); - Target->Missing = FALSE; - Target->Reason = NULL; -} - NTSTATUS TargetD3ToD0( IN PXENVBD_TARGET Target @@ -1191,8 +1172,6 @@ TargetD3ToD0( AdapterGetDebugInterface(TargetGetAdapter(Target), &Target->DebugInterface); - AdapterGetSuspendInterface(TargetGetAdapter(Target), - &Target->SuspendInterface); status = XENBUS_DEBUG(Acquire, &Target->DebugInterface); if (!NT_SUCCESS(status)) @@ -1207,44 +1186,19 @@ TargetD3ToD0( if (!NT_SUCCESS(status)) goto fail2; - status = XENBUS_SUSPEND(Acquire, &Target->SuspendInterface); - if (!NT_SUCCESS(status)) - goto fail3; - - status = XENBUS_SUSPEND(Register, - &Target->SuspendInterface, - SUSPEND_CALLBACK_LATE, - TargetSuspendCallback, - Target, - &Target->SuspendCallback); - if (!NT_SUCCESS(status)) - goto fail4; - status = FrontendD3ToD0(Target->Frontend); if (!NT_SUCCESS(status)) - goto fail5; + goto fail3; status = FrontendSetState(Target->Frontend, XENVBD_ENABLED); if (!NT_SUCCESS(status)) - goto fail6; + goto fail4; return STATUS_SUCCESS; -fail6: - Error("fail6\n"); - FrontendD0ToD3(Target->Frontend); - -fail5: - Error("fail5\n"); - XENBUS_SUSPEND(Deregister, - &Target->SuspendInterface, - Target->SuspendCallback); - Target->SuspendCallback = NULL; - fail4: Error("fail4\n"); - XENBUS_SUSPEND(Release, - &Target->SuspendInterface); + FrontendD0ToD3(Target->Frontend); fail3: Error("fail3\n"); @@ -1261,8 +1215,6 @@ fail2: fail1: Error("Fail1 (%08x)\n", status); - RtlZeroMemory(&Target->SuspendInterface, - sizeof(XENBUS_SUSPEND_INTERFACE)); RtlZeroMemory(&Target->DebugInterface, sizeof(XENBUS_DEBUG_INTERFACE)); Target->DevicePowerState = PowerDeviceD3; @@ -1286,14 +1238,6 @@ TargetD0ToD3( FrontendD0ToD3(Target->Frontend); - XENBUS_SUSPEND(Deregister, - &Target->SuspendInterface, - Target->SuspendCallback); - Target->SuspendCallback = NULL; - - XENBUS_SUSPEND(Release, - &Target->SuspendInterface); - XENBUS_DEBUG(Deregister, &Target->DebugInterface, Target->DebugCallback); @@ -1302,8 +1246,6 @@ TargetD0ToD3( XENBUS_DEBUG(Release, &Target->DebugInterface); - RtlZeroMemory(&Target->SuspendInterface, - sizeof(XENBUS_SUSPEND_INTERFACE)); RtlZeroMemory(&Target->DebugInterface, sizeof(XENBUS_DEBUG_INTERFACE)); } -- 2.8.3 _______________________________________________ win-pv-devel mailing list win-pv-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |