[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [win-pv-devel] [PATCH 5/9] Dont create Pdo for emulated devices
Signed-off-by: Owen Smith <owen.smith@xxxxxxxxxx> --- src/xenvbd/fdo.c | 29 +++++++++++++++-------------- src/xenvbd/pdo.c | 54 +++++++++++++++--------------------------------------- src/xenvbd/pdo.h | 3 +-- 3 files changed, 31 insertions(+), 55 deletions(-) diff --git a/src/xenvbd/fdo.c b/src/xenvbd/fdo.c index dadf395..dab7ae1 100644 --- a/src/xenvbd/fdo.c +++ b/src/xenvbd/fdo.c @@ -583,7 +583,6 @@ __FdoEnumerate( ULONG TargetId; PCHAR Device; PXENVBD_PDO Pdo; - NTSTATUS Status; *NeedInvalidate = FALSE; *NeedReboot = FALSE; @@ -621,7 +620,6 @@ __FdoEnumerate( // add new targets for (Device = Devices; *Device; Device = __NextSz(Device)) { - BOOLEAN EmulatedUnplugged; XENVBD_DEVICE_TYPE DeviceType; TargetId = __ParseVbd(Device); @@ -639,18 +637,21 @@ __FdoEnumerate( continue; } - EmulatedUnplugged = __FdoIsPdoUnplugged(Fdo, - FdoEnum(Fdo), - Device, - TargetId); - *NeedReboot |= !EmulatedUnplugged; - - Status = PdoCreate(Fdo, - Device, - TargetId, - EmulatedUnplugged, - ThreadGetEvent(Fdo->FrontendThread), DeviceType); - *NeedInvalidate |= (NT_SUCCESS(Status)) ? TRUE : FALSE; + if (!__FdoIsPdoUnplugged(Fdo, + FdoEnum(Fdo), + Device, + TargetId)) { + *NeedReboot = TRUE; + continue; + } + + if (PdoCreate(Fdo, + Device, + TargetId, + ThreadGetEvent(Fdo->FrontendThread), + DeviceType)) { + *NeedInvalidate = TRUE; + } } } static DECLSPEC_NOINLINE VOID diff --git a/src/xenvbd/pdo.c b/src/xenvbd/pdo.c index 67800e4..c7d8b2b 100644 --- a/src/xenvbd/pdo.c +++ b/src/xenvbd/pdo.c @@ -87,7 +87,6 @@ struct _XENVBD_PDO { XENVBD_DEVICE_TYPE DeviceType; // State - BOOLEAN EmulatedUnplugged; LONG Paused; // Eject @@ -285,8 +284,7 @@ PdoDebugCallback( "PDO: DevicePowerState %s\n", PowerDeviceStateName(Pdo->DevicePowerState)); XENBUS_DEBUG(Printf, DebugInterface, - "PDO: %s %s\n", - Pdo->EmulatedUnplugged ? "PV" : "EMULATED", + "PDO: %s\n", Pdo->Missing ? Pdo->Reason : "Not Missing"); XENBUS_DEBUG(Printf, DebugInterface, @@ -400,15 +398,6 @@ PdoMissingReason( return Reason; } -__checkReturn -FORCEINLINE BOOLEAN -PdoIsEmulatedUnplugged( - __in PXENVBD_PDO Pdo - ) -{ - return Pdo->EmulatedUnplugged; -} - FORCEINLINE VOID PdoSetDevicePnpState( __in PXENVBD_PDO Pdo, @@ -2161,13 +2150,6 @@ __ValidateSrbForPdo( return FALSE; } - if (!Pdo->EmulatedUnplugged) { - Error("Target[%d] : Disk is Emulated (%02x:%s)\n", - PdoGetTargetId(Pdo), Operation, Cdb_OperationName(Operation)); - Srb->SrbStatus = SRB_STATUS_NO_DEVICE; - return FALSE; - } - return TRUE; } @@ -2498,7 +2480,7 @@ PdoD3ToD0( return STATUS_SUCCESS; Trace("Target[%d] @ (%d) =====>\n", TargetId, KeGetCurrentIrql()); - Verbose("Target[%d] : D3->D0 (%s)\n", TargetId, Pdo->EmulatedUnplugged ? "PV" : "Emulated"); + Verbose("Target[%d] : D3->D0\n", TargetId); // power up frontend Status = FrontendD3ToD0(Pdo->Frontend); @@ -2506,12 +2488,10 @@ PdoD3ToD0( goto fail1; // connect frontend - if (Pdo->EmulatedUnplugged) { - Status = FrontendSetState(Pdo->Frontend, XENVBD_ENABLED); - if (!NT_SUCCESS(Status)) - goto fail2; - __PdoUnpauseDataPath(Pdo); - } + Status = FrontendSetState(Pdo->Frontend, XENVBD_ENABLED); + if (!NT_SUCCESS(Status)) + goto fail2; + __PdoUnpauseDataPath(Pdo); Trace("Target[%d] @ (%d) <=====\n", TargetId, KeGetCurrentIrql()); return STATUS_SUCCESS; @@ -2539,14 +2519,12 @@ PdoD0ToD3( return; Trace("Target[%d] @ (%d) =====>\n", TargetId, KeGetCurrentIrql()); - Verbose("Target[%d] : D0->D3 (%s)\n", TargetId, Pdo->EmulatedUnplugged ? "PV" : "Emulated"); + Verbose("Target[%d] : D0->D3\n", TargetId); // close frontend - if (Pdo->EmulatedUnplugged) { - __PdoPauseDataPath(Pdo, FALSE); - (VOID) FrontendSetState(Pdo->Frontend, XENVBD_CLOSED); - ASSERT3U(QueueCount(&Pdo->SubmittedReqs), ==, 0); - } + __PdoPauseDataPath(Pdo, FALSE); + (VOID) FrontendSetState(Pdo->Frontend, XENVBD_CLOSED); + ASSERT3U(QueueCount(&Pdo->SubmittedReqs), ==, 0); // power down frontend FrontendD0ToD3(Pdo->Frontend); @@ -2555,12 +2533,11 @@ PdoD0ToD3( } __checkReturn -NTSTATUS +BOOLEAN PdoCreate( __in PXENVBD_FDO Fdo, __in __nullterminated PCHAR DeviceId, __in ULONG TargetId, - __in BOOLEAN EmulatedUnplugged, __in PKEVENT FrontendEvent, __in XENVBD_DEVICE_TYPE DeviceType ) @@ -2576,7 +2553,7 @@ PdoCreate( if (!Pdo) goto fail1; - Verbose("Target[%d] : Creating (%s)\n", TargetId, EmulatedUnplugged ? "PV" : "Emulated"); + Verbose("Target[%d] : Creating\n", TargetId); Pdo->Signature = PDO_SIGNATURE; Pdo->Fdo = Fdo; Pdo->DeviceObject = NULL; // filled in later @@ -2585,7 +2562,6 @@ PdoCreate( Pdo->Paused = 1; // Paused until D3->D0 transition Pdo->DevicePnpState = Present; Pdo->DevicePowerState = PowerDeviceD3; - Pdo->EmulatedUnplugged = EmulatedUnplugged; Pdo->DeviceType = DeviceType; KeInitializeSpinLock(&Pdo->Lock); @@ -2609,9 +2585,9 @@ PdoCreate( if (!FdoLinkPdo(Fdo, Pdo)) goto fail4; - Verbose("Target[%d] : Created (%s)\n", TargetId, EmulatedUnplugged ? "PV" : "Emulated"); + Verbose("Target[%d] : Created (%s)\n", TargetId); Trace("Target[%d] @ (%d) <=====\n", TargetId, KeGetCurrentIrql()); - return STATUS_SUCCESS; + return TRUE; fail4: Error("Fail4\n"); @@ -2631,7 +2607,7 @@ fail2: fail1: Error("Fail1 (%08x)\n", Status); - return Status; + return FALSE; } VOID diff --git a/src/xenvbd/pdo.h b/src/xenvbd/pdo.h index 1211174..3bff743 100644 --- a/src/xenvbd/pdo.h +++ b/src/xenvbd/pdo.h @@ -50,12 +50,11 @@ PdoDebugCallback( // Creation/Deletion __checkReturn -extern NTSTATUS +extern BOOLEAN PdoCreate( __in PXENVBD_FDO Fdo, __in __nullterminated PCHAR DeviceId, __in ULONG TargetId, - __in BOOLEAN EmulatedMasked, __in PKEVENT FrontendEvent, __in XENVBD_DEVICE_TYPE DeviceType ); -- 1.9.4.msysgit.1 _______________________________________________ win-pv-devel mailing list win-pv-devel@xxxxxxxxxxxxxxxxxxxx http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |