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

Re: [win-pv-devel] [PATCH] Fix missing imports for NTDDI < WIN7



> -----Original Message-----
> From: win-pv-devel-bounces@xxxxxxxxxxxxxxxxxxxx [mailto:win-pv-devel-
> bounces@xxxxxxxxxxxxxxxxxxxx] On Behalf Of Owen Smith
> Sent: 27 October 2015 17:55
> To: win-pv-devel@xxxxxxxxxxxxxxxxxxxx
> Cc: Owen Smith
> Subject: [win-pv-devel] [PATCH] Fix missing imports for NTDDI < WIN7
> 
> Some APIs are used that are not available before Win7.
> Use preprocessor to substitute equivilent calls when NTDDI_VERSION
> is less than NTDDI_WIN7
> 
> Signed-off-by: Owen Smith <owen.smith@xxxxxxxxxx>

I think there's less icky macro magic for this. XENBUS uses the new APIs all 
over the place and there's no problem with pre-Win7 OS.

  Paul

> ---
>  src/xeniface/fdo.c          | 13 +++++++++++++
>  src/xeniface/ioctl_evtchn.c |  9 +++++++--
>  2 files changed, 20 insertions(+), 2 deletions(-)
> 
> diff --git a/src/xeniface/fdo.c b/src/xeniface/fdo.c
> index 71ffbe2..d6b006e 100644
> --- a/src/xeniface/fdo.c
> +++ b/src/xeniface/fdo.c
> @@ -2385,7 +2385,11 @@ FdoCreate(
>      if (!NT_SUCCESS(status))
>          goto fail14;
> 
> +#if (NTDDI_VERSION >= NTDDI_WIN7)
>      ProcessorCount =
> KeQueryMaximumProcessorCountEx(ALL_PROCESSOR_GROUPS);
> +#else // NTDDI_VISTA / NTDDI_VISTASP1 / NTDDI_WS08
> +    ProcessorCount = KeQueryMaximumProcessorCount();
> +#endif
> 
>      status = STATUS_NO_MEMORY;
>      Fdo->EvtchnDpc = __FdoAllocate(sizeof (KDPC) * ProcessorCount);
> @@ -2393,6 +2397,7 @@ FdoCreate(
>          goto fail15;
> 
>      for (Index = 0; Index < ProcessorCount; Index++) {
> +#if (NTDDI_VERSION >= NTDDI_WIN7)
>          PROCESSOR_NUMBER ProcNumber;
> 
>          status = KeGetProcessorNumberFromIndex(Index, &ProcNumber);
> @@ -2401,6 +2406,10 @@ FdoCreate(
>          KeInitializeDpc(&Fdo->EvtchnDpc[Index], EvtchnNotificationDpc, NULL);
>          status = KeSetTargetProcessorDpcEx(&Fdo->EvtchnDpc[Index],
> &ProcNumber);
>          ASSERT(NT_SUCCESS(status));
> +#else // NTDDI_VISTA / NTDDI_VISTASP1 / NTDDI_WS08
> +        KeInitializeDpc(&Fdo->EvtchnDpc[Index], EvtchnNotificationDpc,
> NULL);
> +        KeSetTargetProcessorDpc(&Fdo->EvtchnDpc[Index], (CCHAR)Index);
> +#endif
>      }
> 
>      Info("%p (%s)\n",
> @@ -2525,7 +2534,11 @@ FdoDestroy(
> 
>      Dx->Fdo = NULL;
> 
> +#if (NTDDI_VERSION >= NTDDI_WIN7)
>      ProcessorCount =
> KeQueryMaximumProcessorCountEx(ALL_PROCESSOR_GROUPS);
> +#else // NTDDI_VISTA / NTDDI_VISTASP1 / NTDDI_WS08
> +    ProcessorCount = KeQueryMaximumProcessorCount();
> +#endif
>      RtlZeroMemory(Fdo->EvtchnDpc, sizeof (KDPC) * ProcessorCount);
>      __FdoFree(Fdo->EvtchnDpc);
> 
> diff --git a/src/xeniface/ioctl_evtchn.c b/src/xeniface/ioctl_evtchn.c
> index 93f1931..1501157 100644
> --- a/src/xeniface/ioctl_evtchn.c
> +++ b/src/xeniface/ioctl_evtchn.c
> @@ -51,7 +51,7 @@ EvtchnNotificationDpc(
>      UNREFERENCED_PARAMETER(_Context);
>      UNREFERENCED_PARAMETER(Argument2);
> 
> -    ASSERT(Context);
> +    ASSERT(Context != NULL);
> 
>  #if DBG
>      XenIfaceDebugPrint(INFO, "Channel %p, LocalPort %d, Cpu %lu\n",
> @@ -80,10 +80,15 @@ EvtchnInterruptHandler(
>      ULONG ProcIndex;
> 
>      UNREFERENCED_PARAMETER(Interrupt);
> -    ASSERT(Context);
> +    ASSERT(Context != NULL);
> 
> +#if (NTDD_VERSION >= NTDDI_WIN7)
>      KeGetCurrentProcessorNumberEx(&ProcNumber);
>      ProcIndex = KeGetProcessorIndexFromNumber(&ProcNumber);
> +#else // NTDDI_VISTA / NTDDI_VISTASP1 / NTDDI_WS08
> +    UNREFERENCED_PARAMETER(ProcNumber); // keep compiler happy
> +    ProcIndex = KeGetCurrentProcessorNumber();
> +#endif
>      if (!KeInsertQueueDpc(&Context->Fdo->EvtchnDpc[ProcIndex], Context,
> NULL)) {
>          XenIfaceDebugPrint(TRACE, "NOT INSERTED: Context %p, Port %lu, FO
> %p, Cpu %lu\n",
>                             Context, Context->LocalPort, Context->FileObject, 
> ProcIndex);
> --
> 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®.