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

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



> -----Original Message-----
> From: win-pv-devel [mailto:win-pv-devel-bounces@xxxxxxxxxxxxxxxxxxxx] On
> Behalf Of Owen Smith
> Sent: 22 April 2016 15:16
> To: win-pv-devel@xxxxxxxxxxxxxxxxxxxx
> Cc: Owen Smith
> Subject: [win-pv-devel] [PATCH 7/9] Wrap all driver.c globals in a struct
> 
> Signed-off-by: Owen Smith <owen.smith@xxxxxxxxxx>

Acked-by: Paul Durrant <paul.durrant@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
_______________________________________________
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®.