[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[win-pv-devel] [PATCH 5/7] Tidy up GranterDebugCallback



From: Owen Smith <owen.smith@xxxxxxxxxx>

Dont chain debug callback from FrontendDebugCallback,
register a debug callback internally to the Granter

Signed-off-by: Owen Smith <owen.smith@xxxxxxxxxx>
---
 src/xenvbd/frontend.c |   6 +--
 src/xenvbd/granter.c  | 146 +++++++++++++++++++++++++++++++++-----------------
 src/xenvbd/granter.h  |  46 +++++++---------
 3 files changed, 117 insertions(+), 81 deletions(-)

diff --git a/src/xenvbd/frontend.c b/src/xenvbd/frontend.c
index bffe3d7..33dfd18 100644
--- a/src/xenvbd/frontend.c
+++ b/src/xenvbd/frontend.c
@@ -1067,7 +1067,7 @@ FrontendConnect(
     XenbusState     BackendState;
 
     // Alloc Ring, Create Evtchn, Gnttab map
-    Status = GranterConnect(Frontend->Granter, Frontend->BackendDomain);
+    Status = GranterConnect(Frontend->Granter);
     if (!NT_SUCCESS(Status))
         goto fail1;
 
@@ -1089,7 +1089,7 @@ FrontendConnect(
         if (!NT_SUCCESS(Status))
             goto abort;
 
-        Status = GranterStoreWrite(Frontend->Granter, Transaction, 
Frontend->FrontendPath);
+        Status = GranterStoreWrite(Frontend->Granter, Transaction);
         if (!NT_SUCCESS(Status))
             goto abort;
 
@@ -1495,8 +1495,6 @@ FrontendDebugCallback(
                  Frontend->DiskInfo.SectorSize,
                  Frontend->DiskInfo.PhysSectorSize,
                  Frontend->DiskInfo.DiskInfo);
-
-    GranterDebugCallback(Frontend->Granter, &Frontend->DebugInterface);
 }
 
 __checkReturn
diff --git a/src/xenvbd/granter.c b/src/xenvbd/granter.c
index ff7a575..89040ac 100644
--- a/src/xenvbd/granter.c
+++ b/src/xenvbd/granter.c
@@ -29,25 +29,32 @@
  * SUCH DAMAGE.
  */ 
 
+#include <ntddk.h>
+#include <ntstrsafe.h>
+
+#include <debug_interface.h>
+#include <gnttab_interface.h>
+
+#include "granter.h"
 #include "frontend.h"
 #include "target.h"
 #include "adapter.h"
+
 #include "util.h"
 #include "debug.h"
-#include "thread.h"
-#include <gnttab_interface.h>
-#include <ntstrsafe.h>
+#include "assert.h"
 
 struct _XENVBD_GRANTER {
     PXENVBD_FRONTEND                Frontend;
     BOOLEAN                         Connected;
     BOOLEAN                         Enabled;
 
+    XENBUS_DEBUG_INTERFACE          DebugInterface;
     XENBUS_GNTTAB_INTERFACE         GnttabInterface;
+    PXENBUS_DEBUG_CALLBACK          DebugCallback;
     PXENBUS_GNTTAB_CACHE            Cache;
     KSPIN_LOCK                      Lock;
 
-    USHORT                          BackendDomain;
     LONG                            Current;
     LONG                            Maximum;
 };
@@ -55,7 +62,7 @@ struct _XENVBD_GRANTER {
 
 static FORCEINLINE PVOID
 __GranterAllocate(
-    IN  ULONG                       Length
+    IN  ULONG   Length
     )
 {
     return __AllocatePoolWithTag(NonPagedPool, Length, GRANTER_POOL_TAG);
@@ -63,7 +70,7 @@ __GranterAllocate(
 
 static FORCEINLINE VOID
 __GranterFree(
-    IN  PVOID                       Buffer
+    IN  PVOID   Buffer
     )
 {
     if (Buffer)
@@ -72,11 +79,11 @@ __GranterFree(
 
 NTSTATUS
 GranterCreate(
-    IN  PXENVBD_FRONTEND            Frontend,
-    OUT PXENVBD_GRANTER*            Granter
+    IN  PXENVBD_FRONTEND    Frontend,
+    OUT PXENVBD_GRANTER     *Granter
     )
 {
-    NTSTATUS    status;
+    NTSTATUS                status;
 
     status = STATUS_NO_MEMORY;
     *Granter = __GranterAllocate(sizeof(XENVBD_GRANTER));
@@ -94,7 +101,7 @@ fail1:
 
 VOID
 GranterDestroy(
-    IN  PXENVBD_GRANTER             Granter
+    IN  PXENVBD_GRANTER Granter
     )
 {
     Granter->Frontend = NULL;
@@ -108,10 +115,10 @@ GranterDestroy(
 static VOID
 __drv_requiresIRQL(DISPATCH_LEVEL)
 GranterAcquireLock(
-    IN  PVOID               Argument
+    IN  PVOID       Argument
     )
 {
-    PXENVBD_GRANTER         Granter = Argument;
+    PXENVBD_GRANTER Granter = Argument;
 
     ASSERT3U(KeGetCurrentIrql(), ==, DISPATCH_LEVEL);
 
@@ -121,10 +128,10 @@ GranterAcquireLock(
 static VOID
 __drv_requiresIRQL(DISPATCH_LEVEL)
 GranterReleaseLock(
-    IN  PVOID               Argument
+    IN  PVOID       Argument
     )
 {
-    PXENVBD_GRANTER         Granter = Argument;
+    PXENVBD_GRANTER Granter = Argument;
 
     ASSERT3U(KeGetCurrentIrql(), ==, DISPATCH_LEVEL);
 
@@ -132,34 +139,60 @@ GranterReleaseLock(
     KeReleaseSpinLockFromDpcLevel(&Granter->Lock);
 }
 
+static DECLSPEC_NOINLINE VOID
+GranterDebugCallback(
+    IN  PVOID       Argument,
+    IN  BOOLEAN     Crashing
+    )
+{
+    PXENVBD_GRANTER Granter = Argument;
+
+    UNREFERENCED_PARAMETER(Crashing);
+
+    XENBUS_DEBUG(Printf,
+                 &Granter->DebugInterface,
+                 "%s %s\n", 
+                 Granter->Connected ? "CONNECTED" : "DISCONNECTED",
+                 Granter->Enabled ? "ENABLED" : "DISABLED");
+    XENBUS_DEBUG(Printf,
+                 &Granter->DebugInterface,
+                 "%d / %d\n",
+                 Granter->Current,
+                 Granter->Maximum);
+
+    Granter->Maximum = Granter->Current;
+}
+
 #define MAXNAMELEN  32
 
 NTSTATUS
 GranterConnect(
-    IN  PXENVBD_GRANTER             Granter,
-    IN  USHORT                      BackendDomain
+    IN  PXENVBD_GRANTER Granter
     )
 {
-    PXENVBD_ADAPTER Adapter = 
TargetGetAdapter(FrontendGetTarget(Granter->Frontend));
-    CHAR        Name[MAXNAMELEN];
-    NTSTATUS    status;
+    PXENVBD_ADAPTER     Adapter = 
TargetGetAdapter(FrontendGetTarget(Granter->Frontend));
+    CHAR                Name[MAXNAMELEN];
+    NTSTATUS            status;
 
     ASSERT(Granter->Connected == FALSE);
 
     AdapterGetGnttabInterface(Adapter, &Granter->GnttabInterface);
+    AdapterGetDebugInterface(Adapter, &Granter->DebugInterface);
 
     status = XENBUS_GNTTAB(Acquire, &Granter->GnttabInterface);
     if (!NT_SUCCESS(status))
         goto fail1;
 
-    Granter->BackendDomain = BackendDomain;
+    status = XENBUS_DEBUG(Acquire, &Granter->DebugInterface);
+    if (!NT_SUCCESS(status))
+        goto fail2;
 
     status = RtlStringCbPrintfA(Name,
                                 sizeof (Name),
                                 "disk_%u",
                                 FrontendGetTargetId(Granter->Frontend));
     if (!NT_SUCCESS(status))
-        goto fail2;
+        goto fail3;
 
     status = XENBUS_GNTTAB(CreateCache,
                            &Granter->GnttabInterface,
@@ -170,37 +203,58 @@ GranterConnect(
                            Granter,
                            &Granter->Cache);
     if (!NT_SUCCESS(status))
-        goto fail3;
+        goto fail4;
+
+    status = XENBUS_DEBUG(Register,
+                          &Granter->DebugInterface,
+                          __MODULE__"|GRANTER",
+                          GranterDebugCallback,
+                          Granter,
+                          &Granter->DebugCallback);
+    if (!NT_SUCCESS(status))
+        goto fail5;
 
     Granter->Connected = TRUE;
     return STATUS_SUCCESS;
 
+fail5:
+    Error("fail5\n");
+    XENBUS_GNTTAB(DestroyCache,
+                  &Granter->GnttabInterface,
+                  Granter->Cache);
+    Granter->Cache = NULL;
+fail4:
+    Error("fail4\n");
 fail3:
+    Error("fail3\n");
+    XENBUS_DEBUG(Release, &Granter->DebugInterface);
 fail2:
-    Granter->BackendDomain = 0;
+    Error("fail2\n");
     XENBUS_GNTTAB(Release, &Granter->GnttabInterface);
-    RtlZeroMemory(&Granter->GnttabInterface, sizeof(XENBUS_GNTTAB_INTERFACE));
 fail1:
+    Error("fail1 %08x\n", status);
+
+    RtlZeroMemory(&Granter->DebugInterface, sizeof(XENBUS_DEBUG_INTERFACE));
+    RtlZeroMemory(&Granter->GnttabInterface, sizeof(XENBUS_GNTTAB_INTERFACE));
+
     return status;
 }
 
 NTSTATUS
 GranterStoreWrite(
-    IN  PXENVBD_GRANTER             Granter,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction,
-    IN  PCHAR                       FrontendPath
+    IN  PXENVBD_GRANTER Granter,
+    IN  PVOID           Transaction
     )
 {
     UNREFERENCED_PARAMETER(Granter);
     UNREFERENCED_PARAMETER(Transaction);
-    UNREFERENCED_PARAMETER(FrontendPath);
 
     return STATUS_SUCCESS;
 }
 
 VOID
 GranterEnable(
-    IN  PXENVBD_GRANTER             Granter
+    IN  PXENVBD_GRANTER Granter
     )
 {
     ASSERT(Granter->Enabled == FALSE);
@@ -210,7 +264,7 @@ GranterEnable(
 
 VOID
 GranterDisable(
-    IN  PXENVBD_GRANTER             Granter
+    IN  PXENVBD_GRANTER Granter
     )
 {
     ASSERT(Granter->Enabled == TRUE);
@@ -220,7 +274,7 @@ GranterDisable(
 
 VOID
 GranterDisconnect(
-    IN  PXENVBD_GRANTER             Granter
+    IN  PXENVBD_GRANTER Granter
     )
 {
     ASSERT(Granter->Connected == TRUE);
@@ -228,35 +282,25 @@ GranterDisconnect(
     ASSERT3S(Granter->Current, ==, 0);
     Granter->Maximum = 0;
 
+    XENBUS_DEBUG(Deregister,
+                 &Granter->DebugInterface,
+                 Granter->DebugCallback);
+    Granter->DebugCallback = NULL;
+
     XENBUS_GNTTAB(DestroyCache,
                   &Granter->GnttabInterface,
                   Granter->Cache);
     Granter->Cache = NULL;
 
+    XENBUS_DEBUG(Release, &Granter->DebugInterface);
     XENBUS_GNTTAB(Release, &Granter->GnttabInterface);
+
+    RtlZeroMemory(&Granter->DebugInterface, sizeof(XENBUS_DEBUG_INTERFACE));
     RtlZeroMemory(&Granter->GnttabInterface, sizeof(XENBUS_GNTTAB_INTERFACE));
 
-    Granter->BackendDomain = 0;
     Granter->Connected = FALSE;
 }
 
-VOID
-GranterDebugCallback(
-    IN  PXENVBD_GRANTER             Granter,
-    IN  PXENBUS_DEBUG_INTERFACE     Debug
-    )
-{
-    XENBUS_DEBUG(Printf, Debug,
-                 "GRANTER: %s %s\n", 
-                 Granter->Connected ? "CONNECTED" : "DISCONNECTED",
-                 Granter->Enabled ? "ENABLED" : "DISABLED");
-    XENBUS_DEBUG(Printf, Debug,
-                 "GRANTER: %d / %d\n",
-                 Granter->Current,
-                 Granter->Maximum);
-    Granter->Maximum = Granter->Current;
-}
-
 NTSTATUS
 GranterGet(
     IN  PXENVBD_GRANTER     Granter,
@@ -277,7 +321,7 @@ GranterGet(
                            &Granter->GnttabInterface,
                            Granter->Cache,
                            FALSE,
-                           Granter->BackendDomain,
+                           (USHORT)FrontendGetBackendDomain(Granter->Frontend),
                            Pfn,
                            ReadOnly,
                            &Entry);
@@ -292,7 +336,9 @@ GranterGet(
     return STATUS_SUCCESS;
 
 fail2:
+    Error("fail2\n");
 fail1:
+    Error("fail1 %08x\n", status);
     return status;
 }
 
diff --git a/src/xenvbd/granter.h b/src/xenvbd/granter.h
index de7701c..b840c13 100644
--- a/src/xenvbd/granter.h
+++ b/src/xenvbd/granter.h
@@ -32,75 +32,67 @@
 #ifndef _XENVBD_GRANTER_H
 #define _XENVBD_GRANTER_H
 
+#include <ntddk.h>
+
 typedef struct _XENVBD_GRANTER XENVBD_GRANTER, *PXENVBD_GRANTER;
 
-#include <debug_interface.h>
-#include <store_interface.h>
 #include "frontend.h"
 
 extern NTSTATUS
 GranterCreate(
-    IN  PXENVBD_FRONTEND            Frontend,
-    OUT PXENVBD_GRANTER*            Granter
+    IN  PXENVBD_FRONTEND    Frontend,
+    OUT PXENVBD_GRANTER     *Granter
     );
 
 extern VOID
 GranterDestroy(
-    IN  PXENVBD_GRANTER             Granter
+    IN  PXENVBD_GRANTER     Granter
     );
 
 extern NTSTATUS
 GranterConnect(
-    IN  PXENVBD_GRANTER             Granter,
-    IN  USHORT                      BackendDomain
+    IN  PXENVBD_GRANTER     Granter
     );
 
 extern NTSTATUS
 GranterStoreWrite(
-    IN  PXENVBD_GRANTER             Granter,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction,
-    IN  PCHAR                       FrontendPath
+    IN  PXENVBD_GRANTER Granter,
+    IN  PVOID           Transaction
     );
 
 extern VOID
 GranterEnable(
-    IN  PXENVBD_GRANTER             Granter
+    IN  PXENVBD_GRANTER Granter
     );
 
 extern VOID
 GranterDisable(
-    IN  PXENVBD_GRANTER             Granter
+    IN  PXENVBD_GRANTER Granter
     );
 
 extern VOID
 GranterDisconnect(
-    IN  PXENVBD_GRANTER             Granter
-    );
-
-extern VOID
-GranterDebugCallback(
-    IN  PXENVBD_GRANTER             Granter,
-    IN  PXENBUS_DEBUG_INTERFACE     Debug
+    IN  PXENVBD_GRANTER Granter
     );
 
 extern NTSTATUS
 GranterGet(
-    IN  PXENVBD_GRANTER             Granter,
-    IN  PFN_NUMBER                  Pfn,
-    IN  BOOLEAN                     ReadOnly,
-    OUT PVOID                       *Handle
+    IN  PXENVBD_GRANTER Granter,
+    IN  PFN_NUMBER      Pfn,
+    IN  BOOLEAN         ReadOnly,
+    OUT PVOID           *Handle
     );
 
 extern VOID
 GranterPut(
-    IN  PXENVBD_GRANTER             Granter,
-    IN  PVOID                       Handle
+    IN  PXENVBD_GRANTER Granter,
+    IN  PVOID           Handle
     );
 
 extern ULONG
 GranterReference(
-    IN  PXENVBD_GRANTER             Granter,
-    IN  PVOID                       Handle
+    IN  PXENVBD_GRANTER Granter,
+    IN  PVOID           Handle
     );
 
 #endif // _XENVBD_GRANTER_H
-- 
2.8.3


_______________________________________________
win-pv-devel mailing list
win-pv-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.