[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [win-pv-devel] [PATCH 1/4] Replace XENVBD_SRB_STATE with LIST_ENTRY
Dont treat the prepared queue differently to any other list. Signed-off-by: Owen Smith <owen.smith@xxxxxxxxxx> --- src/xenvbd/ring.c | 52 +++++++++++++++++++--------------------------------- 1 file changed, 19 insertions(+), 33 deletions(-) diff --git a/src/xenvbd/ring.c b/src/xenvbd/ring.c index 2b3538e..52eaca5 100644 --- a/src/xenvbd/ring.c +++ b/src/xenvbd/ring.c @@ -58,11 +58,6 @@ #define xen_mb KeMemoryBarrier #define xen_wmb KeMemoryBarrier -typedef struct _XENVBD_SRB_STATE { - LIST_ENTRY List; - ULONG Count; -} XENVBD_SRB_STATE, *PXENVBD_SRB_STATE; - typedef struct _XENVBD_BLKIF_RING { PXENVBD_RING Ring; ULONG Index; @@ -83,8 +78,8 @@ typedef struct _XENVBD_BLKIF_RING { BOOLEAN Stopped; PVOID Lock; PKTHREAD LockThread; - XENVBD_SRB_STATE State; LIST_ENTRY SrbQueue; + LIST_ENTRY PreparedQueue; LIST_ENTRY SubmittedList; LIST_ENTRY ShutdownQueue; ULONG SrbsQueued; @@ -613,8 +608,6 @@ BlkifRingQueueRequests( IN PLIST_ENTRY List ) { - PXENVBD_SRB_STATE State = &BlkifRing->State; - for (;;) { PLIST_ENTRY ListEntry; PXENVBD_REQUEST Request; @@ -627,8 +620,7 @@ BlkifRingQueueRequests( XENVBD_REQUEST, ListEntry); - InsertTailList(&State->List, ListEntry); - State->Count++; + InsertTailList(&BlkifRing->PreparedQueue, ListEntry); } } @@ -1089,25 +1081,19 @@ __BlkifRingPostRequests( IN PXENVBD_BLKIF_RING BlkifRing ) { - PXENVBD_SRB_STATE State; - - State = &BlkifRing->State; - for (;;) { blkif_request_t *req; PXENVBD_REQUEST Request; PLIST_ENTRY ListEntry; - if (State->Count == 0) + if (IsListEmpty(&BlkifRing->PreparedQueue)) return STATUS_SUCCESS; if (RING_FULL(&BlkifRing->Front)) return STATUS_ALLOTTED_SPACE_EXCEEDED; - --State->Count; - - ListEntry = RemoveHeadList(&State->List); - ASSERT3P(ListEntry, != , &State->List); + ListEntry = RemoveHeadList(&BlkifRing->PreparedQueue); + ASSERT3P(ListEntry, != , &BlkifRing->PreparedQueue); RtlZeroMemory(ListEntry, sizeof(LIST_ENTRY)); @@ -1376,13 +1362,11 @@ BlkifRingSchedule( IN PXENVBD_BLKIF_RING BlkifRing ) { - PXENVBD_SRB_STATE State; BOOLEAN Polled; if (!BlkifRing->Enabled) return; - State = &BlkifRing->State; Polled = FALSE; while (!BlkifRing->Stopped) { @@ -1390,7 +1374,7 @@ BlkifRingSchedule( PXENVBD_SRBEXT SrbExt; NTSTATUS status; - if (State->Count != 0) { + if (!IsListEmpty(&BlkifRing->PreparedQueue)) { status = __BlkifRingPostRequests(BlkifRing); if (!NT_SUCCESS(status)) BlkifRing->Stopped = TRUE; @@ -1685,7 +1669,7 @@ BlkifRingCreate( InitializeListHead(&(*BlkifRing)->SrbQueue); InitializeListHead(&(*BlkifRing)->ShutdownQueue); InitializeListHead(&(*BlkifRing)->SubmittedList); - InitializeListHead(&(*BlkifRing)->State.List); + InitializeListHead(&(*BlkifRing)->PreparedQueue); KeInitializeThreadedDpc(&(*BlkifRing)->Dpc, BlkifRingDpc, *BlkifRing); @@ -1780,7 +1764,7 @@ fail4: RtlZeroMemory(&(*BlkifRing)->Dpc, sizeof(KDPC)); - RtlZeroMemory(&(*BlkifRing)->State.List, sizeof(LIST_ENTRY)); + RtlZeroMemory(&(*BlkifRing)->PreparedQueue, sizeof(LIST_ENTRY)); RtlZeroMemory(&(*BlkifRing)->SubmittedList, sizeof(LIST_ENTRY)); RtlZeroMemory(&(*BlkifRing)->ShutdownQueue, sizeof(LIST_ENTRY)); RtlZeroMemory(&(*BlkifRing)->SrbQueue, sizeof(LIST_ENTRY)); @@ -1827,12 +1811,16 @@ BlkifRingDestroy( RtlZeroMemory(&BlkifRing->Dpc, sizeof(KDPC)); - ASSERT3U(BlkifRing->State.Count, == , 0); - ASSERT(IsListEmpty(&BlkifRing->State.List)); - RtlZeroMemory(&BlkifRing->State.List, sizeof(LIST_ENTRY)); + ASSERT(IsListEmpty(&BlkifRing->PreparedQueue)); + RtlZeroMemory(&BlkifRing->PreparedQueue, sizeof(LIST_ENTRY)); + ASSERT(IsListEmpty(&BlkifRing->SubmittedList)); RtlZeroMemory(&BlkifRing->SubmittedList, sizeof(LIST_ENTRY)); + + ASSERT(IsListEmpty(&BlkifRing->SrbQueue)); RtlZeroMemory(&BlkifRing->SrbQueue, sizeof(LIST_ENTRY)); + + ASSERT(IsListEmpty(&BlkifRing->ShutdownQueue)); RtlZeroMemory(&BlkifRing->ShutdownQueue, sizeof(LIST_ENTRY)); __RingFree(BlkifRing->Path); @@ -2065,15 +2053,15 @@ BlkifRingDisable( ASSERT(BlkifRing->Enabled); // Discard any pending requests - while (!IsListEmpty(&BlkifRing->State.List)) { + for (;;) { PLIST_ENTRY ListEntry; PXENVBD_REQUEST Request; PXENVBD_SRBEXT SrbExt; PSCSI_REQUEST_BLOCK Srb; - ListEntry = RemoveHeadList(&BlkifRing->State.List); - ASSERT3P(ListEntry, != , &BlkifRing->State.List); - --BlkifRing->State.Count; + ListEntry = RemoveHeadList(&BlkifRing->PreparedQueue); + if (ListEntry == &BlkifRing->PreparedQueue) + break; Request = CONTAINING_RECORD(ListEntry, XENVBD_REQUEST, @@ -2089,8 +2077,6 @@ BlkifRingDisable( __BlkifRingCompleteSrb(BlkifRing, SrbExt); } - ASSERT3U(BlkifRing->State.Count, == , 0); - Attempt = 0; ASSERT3U(BlkifRing->RequestsPushed, == , BlkifRing->RequestsPosted); while (BlkifRing->ResponsesProcessed != BlkifRing->RequestsPushed) { -- 2.16.2.windows.1 _______________________________________________ win-pv-devel mailing list win-pv-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/win-pv-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |