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

[win-pv-devel] [PATCH 7/9] Wrap all driver.c globals in a struct



Signed-off-by: Owen Smith <owen.smith@xxxxxxxxxx>
---
 src/xenvbd/driver.c | 64 +++++++++++++++++++++++++++--------------------------
 1 file changed, 33 insertions(+), 31 deletions(-)

diff --git a/src/xenvbd/driver.c b/src/xenvbd/driver.c
index c5352d0..8f0aeb8 100644
--- a/src/xenvbd/driver.c
+++ b/src/xenvbd/driver.c
@@ -42,8 +42,18 @@
 #include <xencrsh_interface.h>
 #include <xenvbd-ntstrsafe.h>
 
+typedef struct _XENVBD_DRIVER {
+    HANDLE              StatusKey;
+    PDRIVER_DISPATCH    StorPortDispatchPnp;
+    PDRIVER_DISPATCH    StorPortDispatchPower;
+    PDRIVER_UNLOAD      StorPortDriverUnload;
+    PXENVBD_FDO         Fdo;
+    KSPIN_LOCK          Lock;
+} XENVBD_DRIVER;
+
+static XENVBD_DRIVER Driver;
+
 XENVBD_PARAMETERS   DriverParameters;
-HANDLE              DriverStatusKey;
 
 #define XENVBD_POOL_TAG     'dbvX'
 
@@ -203,18 +213,13 @@ __DriverParseParameterKey(
             DriverParameters.PVCDRom ? "PV_CDROM " : "");
 }
 
-//=============================================================================
-static PDRIVER_DISPATCH     StorPortDispatchPnp;
-static PDRIVER_DISPATCH     StorPortDispatchPower;
-static PDRIVER_UNLOAD       StorPortDriverUnload;
-
 NTSTATUS
 DriverDispatchPnp(
     IN  PDEVICE_OBJECT  DeviceObject,
     IN  PIRP            Irp
     )
 {
-    return StorPortDispatchPnp(DeviceObject, Irp);
+    return Driver.StorPortDispatchPnp(DeviceObject, Irp);
 }
 
 NTSTATUS
@@ -223,14 +228,9 @@ DriverDispatchPower(
     IN  PIRP            Irp
     )
 {
-    return StorPortDispatchPower(DeviceObject, Irp);
+    return Driver.StorPortDispatchPower(DeviceObject, Irp);
 }
 
-//=============================================================================
-// Fdo Device Extension management
-static PXENVBD_FDO              __XenvbdFdo;
-static KSPIN_LOCK               __XenvbdLock;
-
 VOID
 DriverLinkFdo(
     __in PXENVBD_FDO             Fdo
@@ -238,9 +238,9 @@ DriverLinkFdo(
 {
     KIRQL       Irql;
 
-    KeAcquireSpinLock(&__XenvbdLock, &Irql);
-    __XenvbdFdo = Fdo;
-    KeReleaseSpinLock(&__XenvbdLock, Irql);
+    KeAcquireSpinLock(&Driver.Lock, &Irql);
+    Driver.Fdo = Fdo;
+    KeReleaseSpinLock(&Driver.Lock, Irql);
 }
 
 VOID
@@ -252,9 +252,9 @@ DriverUnlinkFdo(
 
     UNREFERENCED_PARAMETER(Fdo);
 
-    KeAcquireSpinLock(&__XenvbdLock, &Irql);
-    __XenvbdFdo = NULL;
-    KeReleaseSpinLock(&__XenvbdLock, Irql);
+    KeAcquireSpinLock(&Driver.Lock, &Irql);
+    Driver.Fdo = NULL;
+    KeReleaseSpinLock(&Driver.Lock, Irql);
 }
 
 static FORCEINLINE BOOLEAN
@@ -266,15 +266,15 @@ __DriverGetFdo(
     KIRQL       Irql;
     BOOLEAN     IsFdo = FALSE;
 
-    KeAcquireSpinLock(&__XenvbdLock, &Irql);
-    *Fdo = __XenvbdFdo;
+    KeAcquireSpinLock(&Driver.Lock, &Irql);
+    *Fdo = Driver.Fdo;
     if (*Fdo) {
         FdoReference(*Fdo);
         if (FdoGetDeviceObject(*Fdo) == DeviceObject) {
             IsFdo = TRUE;
         }
     }
-    KeReleaseSpinLock(&__XenvbdLock, Irql);
+    KeReleaseSpinLock(&Driver.Lock, Irql);
 
     return IsFdo;
 }
@@ -306,7 +306,7 @@ DriverNotifyInstaller(
 
     RtlInitUnicodeString(&Unicode, L"NeedReboot");
 
-    status = ZwSetValueKey(DriverStatusKey,
+    status = ZwSetValueKey(Driver.StatusKey,
                            &Unicode,
                            Partial->TitleIndex,
                            Partial->Type,
@@ -571,9 +571,11 @@ DriverUnload(
     Verbose("%s (%s)\n",
          MAJOR_VERSION_STR "." MINOR_VERSION_STR "." MICRO_VERSION_STR "." 
BUILD_NUMBER_STR,
          DAY_STR "/" MONTH_STR "/" YEAR_STR);
-    StorPortDriverUnload(_DriverObject);
+
+    Driver.StorPortDriverUnload(_DriverObject);
     BufferTerminate();
-    ZwClose(DriverStatusKey);
+    ZwClose(Driver.StatusKey);
+
     Trace("<=== (Irql=%d)\n", KeGetCurrentIrql());
 }
 
@@ -623,7 +625,7 @@ DriverEntry(
                                ServiceKey,
                                NULL);
 
-    Status = ZwCreateKey(&DriverStatusKey,
+    Status = ZwCreateKey(&Driver.StatusKey,
                          KEY_ALL_ACCESS,
                          &Attributes,
                          0,
@@ -637,8 +639,8 @@ DriverEntry(
     if (!NT_SUCCESS(Status))
         goto done;
 
-    KeInitializeSpinLock(&__XenvbdLock);
-    __XenvbdFdo = NULL;
+    KeInitializeSpinLock(&Driver.Lock);
+    Driver.Fdo = NULL;
     BufferInitialize();
     __DriverParseParameterKey();
 
@@ -668,9 +670,9 @@ DriverEntry(
 
     Status = StorPortInitialize(_DriverObject, RegistryPath, &InitData, NULL);
     if (NT_SUCCESS(Status)) {
-        StorPortDispatchPnp     = _DriverObject->MajorFunction[IRP_MJ_PNP];
-        StorPortDispatchPower   = _DriverObject->MajorFunction[IRP_MJ_POWER];
-        StorPortDriverUnload    = _DriverObject->DriverUnload;
+        Driver.StorPortDispatchPnp     = 
_DriverObject->MajorFunction[IRP_MJ_PNP];
+        Driver.StorPortDispatchPower   = 
_DriverObject->MajorFunction[IRP_MJ_POWER];
+        Driver.StorPortDriverUnload    = _DriverObject->DriverUnload;
 
         _DriverObject->MajorFunction[IRP_MJ_PNP]    = DispatchPnp;
         _DriverObject->MajorFunction[IRP_MJ_POWER]  = DispatchPower;
-- 
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

 


Rackspace

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