[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [win-pv-devel] [PATCH 08/10] Scope TargetDebugCallback in target.c
From: Owen Smith <owen.smith@xxxxxxxxxx> Signed-off-by: Owen Smith <owen.smith@xxxxxxxxxx> --- src/xenvbd/adapter.c | 19 ----- src/xenvbd/target.c | 193 ++++++++++++++++++++++++++++++++++----------------- src/xenvbd/target.h | 10 --- 3 files changed, 130 insertions(+), 92 deletions(-) diff --git a/src/xenvbd/adapter.c b/src/xenvbd/adapter.c index 659dd22..55a1962 100644 --- a/src/xenvbd/adapter.c +++ b/src/xenvbd/adapter.c @@ -881,7 +881,6 @@ AdapterDebugCallback( ) { PXENVBD_ADAPTER Adapter = Context; - ULONG TargetId; XENBUS_DEBUG(Printf, &Adapter->DebugInterface, @@ -911,24 +910,6 @@ AdapterDebugCallback( Adapter->Completed); BufferDebugCallback(&Adapter->DebugInterface); - - for (TargetId = 0; TargetId < XENVBD_MAX_TARGETS; ++TargetId) { - // no need to use AdapterGetTarget (which is locked at DISPATCH) as called at HIGH_LEVEL - PXENVBD_TARGET Target = Adapter->TargetList[TargetId]; - if (Target == NULL) - continue; - - XENBUS_DEBUG(Printf, &Adapter->DebugInterface, - "ADAPTER: ====> Target[%-3d] : 0x%p\n", - TargetId, Target); - - // call Target's debug callback directly - TargetDebugCallback(Target, &Adapter->DebugInterface); - - XENBUS_DEBUG(Printf, &Adapter->DebugInterface, - "ADAPTER: <==== Target[%-3d] : 0x%p\n", - TargetId, Target); - } } static NTSTATUS diff --git a/src/xenvbd/target.c b/src/xenvbd/target.c index 4e59e80..e6cab35 100644 --- a/src/xenvbd/target.c +++ b/src/xenvbd/target.c @@ -71,6 +71,8 @@ struct _XENVBD_TARGET { // Frontend (Ring, includes XenBus interfaces) PXENVBD_FRONTEND Frontend; + XENBUS_DEBUG_INTERFACE DebugInterface; + PXENBUS_DEBUG_CALLBACK DebugCallback; // State LONG Paused; @@ -242,66 +244,6 @@ __PnpStateName( } } -DECLSPEC_NOINLINE VOID -TargetDebugCallback( - __in PXENVBD_TARGET Target, - __in PXENBUS_DEBUG_INTERFACE DebugInterface - ) -{ - if (Target == NULL || DebugInterface == NULL) - return; - if (Target->Signature != TARGET_SIGNATURE) - return; - - XENBUS_DEBUG(Printf, DebugInterface, - "TARGET: Adapter 0x%p DeviceObject 0x%p\n", - Target->Adapter, - Target->DeviceObject); - XENBUS_DEBUG(Printf, DebugInterface, - "TARGET: DevicePnpState %s (%s)\n", - __PnpStateName(Target->DevicePnpState), - __PnpStateName(Target->PrevPnpState)); - XENBUS_DEBUG(Printf, DebugInterface, - "TARGET: DevicePowerState %s\n", - PowerDeviceStateName(Target->DevicePowerState)); - XENBUS_DEBUG(Printf, DebugInterface, - "TARGET: %s\n", - Target->Missing ? Target->Reason : "Not Missing"); - - XENBUS_DEBUG(Printf, DebugInterface, - "TARGET: BLKIF_OPs: READ=%u WRITE=%u\n", - Target->BlkOpRead, Target->BlkOpWrite); - XENBUS_DEBUG(Printf, DebugInterface, - "TARGET: BLKIF_OPs: INDIRECT_READ=%u INDIRECT_WRITE=%u\n", - Target->BlkOpIndirectRead, Target->BlkOpIndirectWrite); - XENBUS_DEBUG(Printf, DebugInterface, - "TARGET: BLKIF_OPs: BARRIER=%u DISCARD=%u FLUSH=%u\n", - Target->BlkOpBarrier, Target->BlkOpDiscard, Target->BlkOpFlush); - XENBUS_DEBUG(Printf, DebugInterface, - "TARGET: Failed: Maps=%u Bounces=%u Grants=%u\n", - Target->FailedMaps, Target->FailedBounces, Target->FailedGrants); - XENBUS_DEBUG(Printf, DebugInterface, - "TARGET: Segments Granted=%llu Bounced=%llu\n", - Target->SegsGranted, Target->SegsBounced); - - __LookasideDebug(&Target->RequestList, DebugInterface, "REQUESTs"); - __LookasideDebug(&Target->SegmentList, DebugInterface, "SEGMENTs"); - __LookasideDebug(&Target->IndirectList, DebugInterface, "INDIRECTs"); - - QueueDebugCallback(&Target->FreshSrbs, "Fresh ", DebugInterface); - QueueDebugCallback(&Target->PreparedReqs, "Prepared ", DebugInterface); - QueueDebugCallback(&Target->SubmittedReqs, "Submitted", DebugInterface); - QueueDebugCallback(&Target->ShutdownSrbs, "Shutdown ", DebugInterface); - - FrontendDebugCallback(Target->Frontend, DebugInterface); - - Target->BlkOpRead = Target->BlkOpWrite = 0; - Target->BlkOpIndirectRead = Target->BlkOpIndirectWrite = 0; - Target->BlkOpBarrier = Target->BlkOpDiscard = Target->BlkOpFlush = 0; - Target->FailedMaps = Target->FailedBounces = Target->FailedGrants = 0; - Target->SegsGranted = Target->SegsBounced = 0; -} - //============================================================================= // Power States __checkReturn @@ -2273,6 +2215,89 @@ TargetDispatchPnp( return DriverDispatchPnp(DeviceObject, Irp); } +static DECLSPEC_NOINLINE VOID +TargetDebugCallback( + IN PVOID Argument, + IN BOOLEAN Crashing + ) +{ + PXENVBD_TARGET Target = Argument; + + UNREFERENCED_PARAMETER(Crashing); + + XENBUS_DEBUG(Printf, + &Target->DebugInterface, + "TARGET: Adapter 0x%p DeviceObject 0x%p\n", + Target->Adapter, + Target->DeviceObject); + XENBUS_DEBUG(Printf, + &Target->DebugInterface, + "TARGET: DevicePnpState %s (%s)\n", + __PnpStateName(Target->DevicePnpState), + __PnpStateName(Target->PrevPnpState)); + XENBUS_DEBUG(Printf, + &Target->DebugInterface, + "TARGET: DevicePowerState %s\n", + PowerDeviceStateName(Target->DevicePowerState)); + XENBUS_DEBUG(Printf, + &Target->DebugInterface, + "TARGET: %s\n", + Target->Missing ? Target->Reason : "Not Missing"); + + XENBUS_DEBUG(Printf, + &Target->DebugInterface, + "TARGET: BLKIF_OPs: READ=%u WRITE=%u\n", + Target->BlkOpRead, Target->BlkOpWrite); + XENBUS_DEBUG(Printf, + &Target->DebugInterface, + "TARGET: BLKIF_OPs: INDIRECT_READ=%u INDIRECT_WRITE=%u\n", + Target->BlkOpIndirectRead, Target->BlkOpIndirectWrite); + XENBUS_DEBUG(Printf, + &Target->DebugInterface, + "TARGET: BLKIF_OPs: BARRIER=%u DISCARD=%u FLUSH=%u\n", + Target->BlkOpBarrier, Target->BlkOpDiscard, Target->BlkOpFlush); + XENBUS_DEBUG(Printf, + &Target->DebugInterface, + "TARGET: Failed: Maps=%u Bounces=%u Grants=%u\n", + Target->FailedMaps, Target->FailedBounces, Target->FailedGrants); + XENBUS_DEBUG(Printf, + &Target->DebugInterface, + "TARGET: Segments Granted=%llu Bounced=%llu\n", + Target->SegsGranted, Target->SegsBounced); + + __LookasideDebug(&Target->RequestList, + &Target->DebugInterface, + "REQUESTs"); + __LookasideDebug(&Target->SegmentList, + &Target->DebugInterface, + "SEGMENTs"); + __LookasideDebug(&Target->IndirectList, + &Target->DebugInterface, + "INDIRECTs"); + + QueueDebugCallback(&Target->FreshSrbs, + "Fresh ", + &Target->DebugInterface); + QueueDebugCallback(&Target->PreparedReqs, + "Prepared ", + &Target->DebugInterface); + QueueDebugCallback(&Target->SubmittedReqs, + "Submitted", + &Target->DebugInterface); + QueueDebugCallback(&Target->ShutdownSrbs, + "Shutdown ", + &Target->DebugInterface); + + FrontendDebugCallback(Target->Frontend, + &Target->DebugInterface); + + Target->BlkOpRead = Target->BlkOpWrite = 0; + Target->BlkOpIndirectRead = Target->BlkOpIndirectWrite = 0; + Target->BlkOpBarrier = Target->BlkOpDiscard = Target->BlkOpFlush = 0; + Target->FailedMaps = Target->FailedBounces = Target->FailedGrants = 0; + Target->SegsGranted = Target->SegsBounced = 0; +} + NTSTATUS TargetD3ToD0( IN PXENVBD_TARGET Target @@ -2286,25 +2311,55 @@ TargetD3ToD0( Verbose("Target[%d] : D3->D0\n", TargetId); - status = FrontendD3ToD0(Target->Frontend); + AdapterGetDebugInterface(TargetGetAdapter(Target), + &Target->DebugInterface); + + status = XENBUS_DEBUG(Acquire, &Target->DebugInterface); if (!NT_SUCCESS(status)) goto fail1; - status = FrontendSetState(Target->Frontend, XENVBD_ENABLED); + status = XENBUS_DEBUG(Register, + &Target->DebugInterface, + __MODULE__, + TargetDebugCallback, + Target, + &Target->DebugCallback); if (!NT_SUCCESS(status)) goto fail2; + status = FrontendD3ToD0(Target->Frontend); + if (!NT_SUCCESS(status)) + goto fail3; + + status = FrontendSetState(Target->Frontend, XENVBD_ENABLED); + if (!NT_SUCCESS(status)) + goto fail4; + __TargetUnpauseDataPath(Target); return STATUS_SUCCESS; +fail4: + Error("fail4\n"); + FrontendD0ToD3(Target->Frontend); + +fail3: + Error("fail3\n"); + XENBUS_DEBUG(Deregister, + &Target->DebugInterface, + Target->DebugCallback); + Target->DebugCallback = NULL; + fail2: Error("Fail2\n"); - FrontendD0ToD3(Target->Frontend); + XENBUS_DEBUG(Release, + &Target->DebugInterface); fail1: Error("Fail1 (%08x)\n", status); + RtlZeroMemory(&Target->DebugInterface, + sizeof(XENBUS_DEBUG_INTERFACE)); Target->DevicePowerState = PowerDeviceD3; return status; @@ -2323,9 +2378,21 @@ TargetD0ToD3( Verbose("Target[%d] : D0->D3\n", TargetId); __TargetPauseDataPath(Target, FALSE); + (VOID) FrontendSetState(Target->Frontend, XENVBD_CLOSED); FrontendD0ToD3(Target->Frontend); + + XENBUS_DEBUG(Deregister, + &Target->DebugInterface, + Target->DebugCallback); + Target->DebugCallback = NULL; + + XENBUS_DEBUG(Release, + &Target->DebugInterface); + + RtlZeroMemory(&Target->DebugInterface, + sizeof(XENBUS_DEBUG_INTERFACE)); } static FORCEINLINE ULONG diff --git a/src/xenvbd/target.h b/src/xenvbd/target.h index 7f664a5..30738fc 100644 --- a/src/xenvbd/target.h +++ b/src/xenvbd/target.h @@ -36,10 +36,6 @@ typedef struct _XENVBD_TARGET XENVBD_TARGET, *PXENVBD_TARGET; -#include <storport.h> - -#include <debug_interface.h> - #include "adapter.h" #include "srbext.h" #include "types.h" @@ -79,12 +75,6 @@ TargetIssueDeviceEject( IN const CHAR *Reason ); -extern VOID -TargetDebugCallback( - __in PXENVBD_TARGET Target, - __in PXENBUS_DEBUG_INTERFACE Debug - ); - // PnP States extern VOID TargetSetMissing( -- 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 |