From win-pv-devel-bounces@lists.xenproject.org Mon Nov 02 09:58:38 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 02 Nov 2015 09:58:38 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZtBsq-0007Mn-D1; Mon, 02 Nov 2015 09:58:36 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=74177c93e=Paul.Durrant@citrix.com>)
	id 1ZtBsp-0007Mi-84
	for win-pv-devel@lists.xenproject.org; Mon, 02 Nov 2015 09:58:35 +0000
Received: from [85.158.137.68] by server-1.bemta-3.messagelabs.com id
	B7/9F-01421-AC337365; Mon, 02 Nov 2015 09:58:34 +0000
X-Env-Sender: prvs=74177c93e=Paul.Durrant@citrix.com
X-Msg-Ref: server-7.tower-31.messagelabs.com!1446458311!142090!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 11035 invoked from network); 2 Nov 2015 09:58:31 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-7.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	2 Nov 2015 09:58:31 -0000
X-IronPort-AV: E=Sophos;i="5.20,234,1444694400"; 
   d="scan'208";a="6682171"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Owen Smith <owen.smith@citrix.com>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [PATCH v2] Define NT_PROCESSOR_GROUPS for
	VS2012	project
Thread-Index: AQHREzoVRkCcMugoaUK8osr8ogutr56Ig5DA
Date: Mon, 2 Nov 2015 09:58:30 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F6441E1@AMSPEX01CL01.citrite.net>
References: <1446226763-29200-1-git-send-email-owen.smith@citrix.com>
In-Reply-To: <1446226763-29200-1-git-send-email-owen.smith@citrix.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Cc: Owen Smith <owen.smith@citrix.com>
Subject: Re: [win-pv-devel] [PATCH v2] Define NT_PROCESSOR_GROUPS for
	VS2012	project
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> bounces@lists.xenproject.org] On Behalf Of Owen Smith
> Sent: 30 October 2015 17:39
> To: win-pv-devel@lists.xenproject.org
> Cc: Owen Smith
> Subject: [win-pv-devel] [PATCH v2] Define NT_PROCESSOR_GROUPS for
> VS2012 project
> 
> Previous patch missed the obvious compatability macros provided
> and used by xenbus.
> Also fixes a few badly formed ASSERTions
> 
> Signed-off-by: Owen Smith <owen.smith@citrix.com>
> ---
>  src/xeniface/driver.c            | 2 ++
>  src/xeniface/fdo.c               | 1 +
>  src/xeniface/ioctl_evtchn.c      | 6 ++++--
>  src/xeniface/ioctls.c            | 4 +++-
>  vs2012/xeniface/xeniface.vcxproj | 4 ++--
>  5 files changed, 12 insertions(+), 5 deletions(-)
> 
> diff --git a/src/xeniface/driver.c b/src/xeniface/driver.c
> index f4e8240..a843d00 100644
> --- a/src/xeniface/driver.c
> +++ b/src/xeniface/driver.c
> @@ -30,6 +30,7 @@
>   */
> 
>  #include <ntifs.h>
> +#include <procgrp.h>
>  #include <version.h>
> 
>  #include "fdo.h"
> @@ -149,6 +150,7 @@ DriverEntry(
>      ASSERT3P(DriverObject, ==, NULL);
> 
>      ExInitializeDriverRuntime(DrvRtPoolNxOptIn);
> +    WdmlibProcgrpInitialize();
> 
>      Trace("====>\n");
> 
> diff --git a/src/xeniface/fdo.c b/src/xeniface/fdo.c
> index 71ffbe2..fdb3edf 100644
> --- a/src/xeniface/fdo.c
> +++ b/src/xeniface/fdo.c
> @@ -31,6 +31,7 @@
> 
> 
>  #include <ntifs.h>
> +#include <procgrp.h>
>  #include <wdmguid.h>
>  #include <ntstrsafe.h>
>  #include <stdlib.h>
> diff --git a/src/xeniface/ioctl_evtchn.c b/src/xeniface/ioctl_evtchn.c
> index 93f1931..3b8ecb5 100644
> --- a/src/xeniface/ioctl_evtchn.c
> +++ b/src/xeniface/ioctl_evtchn.c
> @@ -29,6 +29,8 @@
>   * SUCH DAMAGE.
>   */
> 
> +#include <ntifs.h>
> +#include <procgrp.h>
>  #include "driver.h"
>  #include "ioctls.h"
>  #include "xeniface_ioctls.h"
> @@ -51,7 +53,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,7 +82,7 @@ EvtchnInterruptHandler(
>      ULONG ProcIndex;
> 
>      UNREFERENCED_PARAMETER(Interrupt);
> -    ASSERT(Context);
> +    ASSERT(Context != NULL);
> 
>      KeGetCurrentProcessorNumberEx(&ProcNumber);
>      ProcIndex = KeGetProcessorIndexFromNumber(&ProcNumber);
> diff --git a/src/xeniface/ioctls.c b/src/xeniface/ioctls.c
> index b306a45..b93fd56 100644
> --- a/src/xeniface/ioctls.c
> +++ b/src/xeniface/ioctls.c
> @@ -30,6 +30,8 @@
>   * SUCH DAMAGE.
>   */
> 
> +#include <ntifs.h>
> +#include <procgrp.h>
>  #include "driver.h"
>  #include "ioctls.h"
>  #include "xeniface_ioctls.h"
> @@ -97,7 +99,7 @@ XenIfaceCleanup(
>      KIRQL Irql;
>      LIST_ENTRY ToFree;
> 
> -    XenIfaceDebugPrint(TRACE, "FO %p, IRQL %d, Cpu %lu\n", FileObject,
> KeGetCurrentIrql(), KeGetCurrentProcessorNumber());
> +    //XenIfaceDebugPrint(TRACE, "FO %p, IRQL %d, Cpu %lu\n", FileObject,
> KeGetCurrentIrql(), KeGetCurrentProcessorNumber());
> 

This hunk looks unrelated. I'll drop it when I commit.

  Paul

>      // store watches
>      KeAcquireSpinLock(&Fdo->StoreWatchLock, &Irql);
> diff --git a/vs2012/xeniface/xeniface.vcxproj
> b/vs2012/xeniface/xeniface.vcxproj
> index fadc1d1..c57e2a2 100644
> --- a/vs2012/xeniface/xeniface.vcxproj
> +++ b/vs2012/xeniface/xeniface.vcxproj
> @@ -32,7 +32,7 @@
> 
>      <ItemDefinitionGroup>
>  		<ClCompile>
> -
> 	<PreprocessorDefinitions>__MODULE__="XENIFACE";POOL_NX_OP
> TIN=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
> +
> 	<PreprocessorDefinitions>__MODULE__="XENIFACE";POOL_NX_OP
> TIN=1;NT_PROCESSOR_GROUPS;%(PreprocessorDefinitions)</Preprocessor
> Definitions>
>  			<WarningLevel>EnableAllWarnings</WarningLevel>
> 
> 	<DisableSpecificWarnings>4711;4548;4820;4668;4255;6001;6054;%(Dis
> ableSpecificWarnings)</DisableSpecificWarnings>
> 
> 	<MultiProcessorCompilation>true</MultiProcessorCompilation>
> @@ -40,7 +40,7 @@
>  		</ClCompile>
>  		<Link>
> 
> 	<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionH
> andlers>
> -
> 	<AdditionalDependencies>$(DDK_LIB_PATH)\ntstrsafe.lib;%(Additio
> nalDependencies)</AdditionalDependencies>
> +
> 	<AdditionalDependencies>$(DDK_LIB_PATH)\ntstrsafe.lib;$(DDK_LI
> B_PATH)\procgrp.lib;%(AdditionalDependencies)</AdditionalDependencies
> >
> 
> 	<EnableCOMDATFolding>false</EnableCOMDATFolding>
>  		</Link>
>  		<Inf>
> --
> 1.9.4.msysgit.1
> 
> 
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

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

From win-pv-devel-bounces@lists.xenproject.org Mon Nov 02 09:58:38 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 02 Nov 2015 09:58:38 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZtBsq-0007Mn-D1; Mon, 02 Nov 2015 09:58:36 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=74177c93e=Paul.Durrant@citrix.com>)
	id 1ZtBsp-0007Mi-84
	for win-pv-devel@lists.xenproject.org; Mon, 02 Nov 2015 09:58:35 +0000
Received: from [85.158.137.68] by server-1.bemta-3.messagelabs.com id
	B7/9F-01421-AC337365; Mon, 02 Nov 2015 09:58:34 +0000
X-Env-Sender: prvs=74177c93e=Paul.Durrant@citrix.com
X-Msg-Ref: server-7.tower-31.messagelabs.com!1446458311!142090!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 11035 invoked from network); 2 Nov 2015 09:58:31 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-7.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	2 Nov 2015 09:58:31 -0000
X-IronPort-AV: E=Sophos;i="5.20,234,1444694400"; 
   d="scan'208";a="6682171"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Owen Smith <owen.smith@citrix.com>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [PATCH v2] Define NT_PROCESSOR_GROUPS for
	VS2012	project
Thread-Index: AQHREzoVRkCcMugoaUK8osr8ogutr56Ig5DA
Date: Mon, 2 Nov 2015 09:58:30 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F6441E1@AMSPEX01CL01.citrite.net>
References: <1446226763-29200-1-git-send-email-owen.smith@citrix.com>
In-Reply-To: <1446226763-29200-1-git-send-email-owen.smith@citrix.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Cc: Owen Smith <owen.smith@citrix.com>
Subject: Re: [win-pv-devel] [PATCH v2] Define NT_PROCESSOR_GROUPS for
	VS2012	project
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> bounces@lists.xenproject.org] On Behalf Of Owen Smith
> Sent: 30 October 2015 17:39
> To: win-pv-devel@lists.xenproject.org
> Cc: Owen Smith
> Subject: [win-pv-devel] [PATCH v2] Define NT_PROCESSOR_GROUPS for
> VS2012 project
> 
> Previous patch missed the obvious compatability macros provided
> and used by xenbus.
> Also fixes a few badly formed ASSERTions
> 
> Signed-off-by: Owen Smith <owen.smith@citrix.com>
> ---
>  src/xeniface/driver.c            | 2 ++
>  src/xeniface/fdo.c               | 1 +
>  src/xeniface/ioctl_evtchn.c      | 6 ++++--
>  src/xeniface/ioctls.c            | 4 +++-
>  vs2012/xeniface/xeniface.vcxproj | 4 ++--
>  5 files changed, 12 insertions(+), 5 deletions(-)
> 
> diff --git a/src/xeniface/driver.c b/src/xeniface/driver.c
> index f4e8240..a843d00 100644
> --- a/src/xeniface/driver.c
> +++ b/src/xeniface/driver.c
> @@ -30,6 +30,7 @@
>   */
> 
>  #include <ntifs.h>
> +#include <procgrp.h>
>  #include <version.h>
> 
>  #include "fdo.h"
> @@ -149,6 +150,7 @@ DriverEntry(
>      ASSERT3P(DriverObject, ==, NULL);
> 
>      ExInitializeDriverRuntime(DrvRtPoolNxOptIn);
> +    WdmlibProcgrpInitialize();
> 
>      Trace("====>\n");
> 
> diff --git a/src/xeniface/fdo.c b/src/xeniface/fdo.c
> index 71ffbe2..fdb3edf 100644
> --- a/src/xeniface/fdo.c
> +++ b/src/xeniface/fdo.c
> @@ -31,6 +31,7 @@
> 
> 
>  #include <ntifs.h>
> +#include <procgrp.h>
>  #include <wdmguid.h>
>  #include <ntstrsafe.h>
>  #include <stdlib.h>
> diff --git a/src/xeniface/ioctl_evtchn.c b/src/xeniface/ioctl_evtchn.c
> index 93f1931..3b8ecb5 100644
> --- a/src/xeniface/ioctl_evtchn.c
> +++ b/src/xeniface/ioctl_evtchn.c
> @@ -29,6 +29,8 @@
>   * SUCH DAMAGE.
>   */
> 
> +#include <ntifs.h>
> +#include <procgrp.h>
>  #include "driver.h"
>  #include "ioctls.h"
>  #include "xeniface_ioctls.h"
> @@ -51,7 +53,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,7 +82,7 @@ EvtchnInterruptHandler(
>      ULONG ProcIndex;
> 
>      UNREFERENCED_PARAMETER(Interrupt);
> -    ASSERT(Context);
> +    ASSERT(Context != NULL);
> 
>      KeGetCurrentProcessorNumberEx(&ProcNumber);
>      ProcIndex = KeGetProcessorIndexFromNumber(&ProcNumber);
> diff --git a/src/xeniface/ioctls.c b/src/xeniface/ioctls.c
> index b306a45..b93fd56 100644
> --- a/src/xeniface/ioctls.c
> +++ b/src/xeniface/ioctls.c
> @@ -30,6 +30,8 @@
>   * SUCH DAMAGE.
>   */
> 
> +#include <ntifs.h>
> +#include <procgrp.h>
>  #include "driver.h"
>  #include "ioctls.h"
>  #include "xeniface_ioctls.h"
> @@ -97,7 +99,7 @@ XenIfaceCleanup(
>      KIRQL Irql;
>      LIST_ENTRY ToFree;
> 
> -    XenIfaceDebugPrint(TRACE, "FO %p, IRQL %d, Cpu %lu\n", FileObject,
> KeGetCurrentIrql(), KeGetCurrentProcessorNumber());
> +    //XenIfaceDebugPrint(TRACE, "FO %p, IRQL %d, Cpu %lu\n", FileObject,
> KeGetCurrentIrql(), KeGetCurrentProcessorNumber());
> 

This hunk looks unrelated. I'll drop it when I commit.

  Paul

>      // store watches
>      KeAcquireSpinLock(&Fdo->StoreWatchLock, &Irql);
> diff --git a/vs2012/xeniface/xeniface.vcxproj
> b/vs2012/xeniface/xeniface.vcxproj
> index fadc1d1..c57e2a2 100644
> --- a/vs2012/xeniface/xeniface.vcxproj
> +++ b/vs2012/xeniface/xeniface.vcxproj
> @@ -32,7 +32,7 @@
> 
>      <ItemDefinitionGroup>
>  		<ClCompile>
> -
> 	<PreprocessorDefinitions>__MODULE__="XENIFACE";POOL_NX_OP
> TIN=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
> +
> 	<PreprocessorDefinitions>__MODULE__="XENIFACE";POOL_NX_OP
> TIN=1;NT_PROCESSOR_GROUPS;%(PreprocessorDefinitions)</Preprocessor
> Definitions>
>  			<WarningLevel>EnableAllWarnings</WarningLevel>
> 
> 	<DisableSpecificWarnings>4711;4548;4820;4668;4255;6001;6054;%(Dis
> ableSpecificWarnings)</DisableSpecificWarnings>
> 
> 	<MultiProcessorCompilation>true</MultiProcessorCompilation>
> @@ -40,7 +40,7 @@
>  		</ClCompile>
>  		<Link>
> 
> 	<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionH
> andlers>
> -
> 	<AdditionalDependencies>$(DDK_LIB_PATH)\ntstrsafe.lib;%(Additio
> nalDependencies)</AdditionalDependencies>
> +
> 	<AdditionalDependencies>$(DDK_LIB_PATH)\ntstrsafe.lib;$(DDK_LI
> B_PATH)\procgrp.lib;%(AdditionalDependencies)</AdditionalDependencies
> >
> 
> 	<EnableCOMDATFolding>false</EnableCOMDATFolding>
>  		</Link>
>  		<Inf>
> --
> 1.9.4.msysgit.1
> 
> 
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

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

From win-pv-devel-bounces@lists.xenproject.org Mon Nov 02 13:35:36 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 02 Nov 2015 13:35:36 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZtFGo-00063r-U9; Mon, 02 Nov 2015 13:35:34 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=74177c93e=Paul.Durrant@citrix.com>)
	id 1ZtFGn-00063k-Qm
	for win-pv-devel@lists.xenproject.org; Mon, 02 Nov 2015 13:35:34 +0000
Received: from [193.109.254.147] by server-5.bemta-14.messagelabs.com id
	42/1A-00475-5A667365; Mon, 02 Nov 2015 13:35:33 +0000
X-Env-Sender: prvs=74177c93e=Paul.Durrant@citrix.com
X-Msg-Ref: server-3.tower-27.messagelabs.com!1446471331!63543371!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 28343 invoked from network); 2 Nov 2015 13:35:31 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-3.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	2 Nov 2015 13:35:31 -0000
X-IronPort-AV: E=Sophos;i="5.20,234,1444694400"; 
   d="scan'208";a="6698185"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Owen Smith <owen.smith@citrix.com>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [PATCH 1/6] Cleanup fdo dispatch entry points
Thread-Index: AQHREllwOYxQwR45+kWGccmnYeF3dZ6IwgwQ
Date: Mon, 2 Nov 2015 13:35:30 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F644CA6@AMSPEX01CL01.citrite.net>
References: <1446130187-30460-1-git-send-email-owen.smith@citrix.com>
	<1446130187-30460-2-git-send-email-owen.smith@citrix.com>
In-Reply-To: <1446130187-30460-2-git-send-email-owen.smith@citrix.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Cc: Owen Smith <owen.smith@citrix.com>
Subject: Re: [win-pv-devel] [PATCH 1/6] Cleanup fdo dispatch entry points
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> bounces@lists.xenproject.org] On Behalf Of Owen Smith
> Sent: 29 October 2015 14:50
> To: win-pv-devel@lists.xenproject.org
> Cc: Owen Smith
> Subject: [win-pv-devel] [PATCH 1/6] Cleanup fdo dispatch entry points
> 
> Signed-off-by: Owen Smith <owen.smith@citrix.com>

Acked-by: Paul Durrant <paul.durrant@citrix.com>

> ---
>  src/xeniface/fdo.c | 98 ++++++++++++++++--------------------------------------
>  src/xeniface/wmi.c | 82 +++++++++++++++------------------------------
>  src/xeniface/wmi.h | 13 +++-----
>  3 files changed, 59 insertions(+), 134 deletions(-)
> 
> diff --git a/src/xeniface/fdo.c b/src/xeniface/fdo.c
> index d6b006e..f7aa542 100644
> --- a/src/xeniface/fdo.c
> +++ b/src/xeniface/fdo.c
> @@ -1234,7 +1234,7 @@ done:
> 
>  static DECLSPEC_NOINLINE NTSTATUS
>  FdoDispatchPnp(
> -    IN  PXENIFACE_FDO     Fdo,
> +    IN  PXENIFACE_FDO   Fdo,
>      IN  PIRP            Irp
>      )
>  {
> @@ -1945,7 +1945,7 @@ FdoSystemPower(
> 
>  static DECLSPEC_NOINLINE NTSTATUS
>  FdoDispatchPower(
> -    IN  PXENIFACE_FDO     Fdo,
> +    IN  PXENIFACE_FDO   Fdo,
>      IN  PIRP            Irp
>      )
>  {
> @@ -2013,7 +2013,7 @@ done:
> 
>  static DECLSPEC_NOINLINE NTSTATUS
>  FdoDispatchDefault(
> -    IN  PXENIFACE_FDO     Fdo,
> +    IN  PXENIFACE_FDO   Fdo,
>      IN  PIRP            Irp
>      )
>  {
> @@ -2025,80 +2025,44 @@ FdoDispatchDefault(
>      return status;
>  }
> 
> -NTSTATUS
> -FdoCreateFile (
> -    __in PXENIFACE_FDO  Fdo,
> -    __inout PIRP        Irp
> +static DECLSPEC_NOINLINE NTSTATUS
> +FdoDispatchComplete(
> +    IN  PXENIFACE_FDO   Fdo,
> +    IN  PIRP            Irp
>      )
>  {
> -    PIO_STACK_LOCATION  Stack = IoGetCurrentIrpStackLocation(Irp);
> -    NTSTATUS            status;
> -
> -    XenIfaceDebugPrint(TRACE, "FO %p, Process %p\n", Stack->FileObject,
> PsGetCurrentProcess());
> +    UNREFERENCED_PARAMETER(Fdo);
> 
> -    if (Deleted == Fdo->Dx->DevicePnpState) {
> -        Irp->IoStatus.Status = STATUS_NO_SUCH_DEVICE;
> -        IoCompleteRequest(Irp, IO_NO_INCREMENT);
> -        return STATUS_NO_SUCH_DEVICE;
> -    }
> -
> -    status = STATUS_SUCCESS;
>      Irp->IoStatus.Information = 0;
> -    Irp->IoStatus.Status = status;
> -    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +    Irp->IoStatus.Status = STATUS_SUCCESS;
> +    IoCompleteRequest (Irp, IO_NO_INCREMENT);
> 
> -    return status;
> +    return STATUS_SUCCESS;
>  }
> 
> -
> -NTSTATUS
> -FdoClose (
> -    __in PXENIFACE_FDO  Fdo,
> -    __inout PIRP        Irp
> +static DECLSPEC_NOINLINE NTSTATUS
> +FdoDispatchSystemControl(
> +    IN  PXENIFACE_FDO   Fdo,
> +    IN  PIRP            Irp
>      )
> -
>  {
> -    PIO_STACK_LOCATION  Stack = IoGetCurrentIrpStackLocation(Irp);
>      NTSTATUS            status;
> 
> -    XenIfaceDebugPrint(TRACE, "FO %p, Process %p\n", Stack->FileObject,
> PsGetCurrentProcess());
> -
> -    XenIfaceCleanup(Fdo, Stack->FileObject);
> -
> -    status = STATUS_SUCCESS;
> -    Irp->IoStatus.Information = 0;
> -    Irp->IoStatus.Status = status;
> -    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> -
> -    return status;
> -}
> -
> -
> -NTSTATUS
> -FdoReadWrite (
> -    __in PXENIFACE_FDO fdoData,
> -    __inout PIRP Irp
> -    )
> -
> -{
> -
> -    NTSTATUS     status;
> -
> -    XenIfaceDebugPrint(TRACE, "ReadWrite called\n");
> -
> -    status = STATUS_SUCCESS;
> -    Irp->IoStatus.Information = 0;
> -    Irp->IoStatus.Status = status;
> -    IoCompleteRequest (Irp, IO_NO_INCREMENT);
> +    status = WmiProcessMinorFunction(Fdo, Irp);
> +    if (status == STATUS_NOT_SUPPORTED) {
> +        IoSkipCurrentIrpStackLocation(Irp);
> +        status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
> +    } else {
> +        Irp->IoStatus.Status = status;
> +        IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +    }
> 
>      return status;
>  }
> 
> -
> -
>  NTSTATUS
>  FdoDispatch(
> -    IN  PXENIFACE_FDO     Fdo,
> +    IN  PXENIFACE_FDO   Fdo,
>      IN  PIRP            Irp
>      )
>  {
> @@ -2121,20 +2085,14 @@ FdoDispatch(
>          break;
> 
>      case IRP_MJ_SYSTEM_CONTROL:
> -        status = XenIfaceSystemControl(Fdo, Irp);
> -        break;
> -
> -    case IRP_MJ_READ:
> -    case IRP_MJ_WRITE:
> -        status = FdoReadWrite(Fdo, Irp);
> +        status = FdoDispatchSystemControl(Fdo, Irp);
>          break;
> 
>      case IRP_MJ_CREATE:
> -        status = FdoCreateFile(Fdo, Irp);
> -        break;
> -
>      case IRP_MJ_CLOSE:
> -        status = FdoClose(Fdo, Irp);
> +    case IRP_MJ_READ:
> +    case IRP_MJ_WRITE:
> +        status = FdoDispatchComplete(Fdo, Irp);
>          break;
> 
>      default:
> diff --git a/src/xeniface/wmi.c b/src/xeniface/wmi.c
> index 82592e3..0b14e9b 100644
> --- a/src/xeniface/wmi.c
> +++ b/src/xeniface/wmi.c
> @@ -2995,85 +2995,57 @@ WmiRegInfoEx(
>      return WmiRegInfo(fdoData, stack, byteswritten);
>  }
> 
> -
> -
>  NTSTATUS
>  WmiProcessMinorFunction(
> -    IN PXENIFACE_FDO fdoData,
> -    IN PIRP Irp
> -)
> +    IN  PXENIFACE_FDO   Fdo,
> +    IN  PIRP            Irp
> +    )
>  {
> -    PIO_STACK_LOCATION stack;
> -    UCHAR MinorFunction;
> -
> -
> +    PIO_STACK_LOCATION  Stack;
> 
> -    stack = IoGetCurrentIrpStackLocation(Irp);
> +    Stack = IoGetCurrentIrpStackLocation(Irp);
> 
> -    if (stack->Parameters.WMI.ProviderId != (ULONG_PTR)fdoData->Dx-
> >DeviceObject) {
> -        XenIfaceDebugPrint(TRACE,"ProviderID %p %p", stack-
> >Parameters.WMI.ProviderId, fdoData->PhysicalDeviceObject);
> +    if (Stack->Parameters.WMI.ProviderId != (ULONG_PTR)Fdo->Dx-
> >DeviceObject) {
> +        XenIfaceDebugPrint(TRACE,
> +                           "ProviderID %p %p",
> +                           Stack->Parameters.WMI.ProviderId,
> +                           Fdo->PhysicalDeviceObject);
>          return STATUS_NOT_SUPPORTED;
> +    } else {
> +        XenIfaceDebugPrint(TRACE,
> +                           "ProviderID Match %p %p",
> +                           Stack->Parameters.WMI.ProviderId,
> +                           Fdo->PhysicalDeviceObject);
>      }
> -    else {
> -        XenIfaceDebugPrint(TRACE,"ProviderID Match %p %p", stack-
> >Parameters.WMI.ProviderId, fdoData->PhysicalDeviceObject);
> -    }
> -    MinorFunction = stack->MinorFunction;
> 
> -    switch (MinorFunction)
> -    {
> +    switch (Stack->MinorFunction) {
>      case IRP_MN_CHANGE_SINGLE_INSTANCE:
> -        return WmiChangeSingleInstance(fdoData, stack);
> +        return WmiChangeSingleInstance(Fdo, Stack);
>      case IRP_MN_CHANGE_SINGLE_ITEM:
> -        return WmiChangeSingleItem(fdoData, stack);
> +        return WmiChangeSingleItem(Fdo, Stack);
>      case IRP_MN_DISABLE_COLLECTION:
> -        return WmiDisableCollection(fdoData, stack);
> +        return WmiDisableCollection(Fdo, Stack);
>      case IRP_MN_DISABLE_EVENTS:
> -        return WmiDisableEvents(fdoData, stack);
> +        return WmiDisableEvents(Fdo, Stack);
>      case IRP_MN_ENABLE_COLLECTION:
> -        return WmiEnableCollection(fdoData, stack);
> +        return WmiEnableCollection(Fdo, Stack);
>      case IRP_MN_ENABLE_EVENTS:
> -        return WmiEnableEvents(fdoData, stack);
> +        return WmiEnableEvents(Fdo, Stack);
>      case IRP_MN_EXECUTE_METHOD:
> -        return WmiExecuteMethod(fdoData, stack,  &Irp-
> >IoStatus.Information);
> +        return WmiExecuteMethod(Fdo, Stack,  &Irp->IoStatus.Information);
>      case IRP_MN_QUERY_ALL_DATA:
> -        return WmiQueryAllData(fdoData, stack, &Irp->IoStatus.Information);
> +        return WmiQueryAllData(Fdo, Stack, &Irp->IoStatus.Information);
>      case IRP_MN_QUERY_SINGLE_INSTANCE:
> -        return WmiQuerySingleInstance(fdoData, stack, &Irp-
> >IoStatus.Information);
> +        return WmiQuerySingleInstance(Fdo, Stack, &Irp-
> >IoStatus.Information);
>      case IRP_MN_REGINFO:
> -        return WmiRegInfo(fdoData, stack, &Irp->IoStatus.Information);
> +        return WmiRegInfo(Fdo, Stack, &Irp->IoStatus.Information);
>      case IRP_MN_REGINFO_EX:
> -        return WmiRegInfoEx(fdoData, stack, &Irp->IoStatus.Information);
> +        return WmiRegInfoEx(Fdo, Stack, &Irp->IoStatus.Information);
>      default:
>          return STATUS_NOT_SUPPORTED;
>      }
>  }
> 
> -NTSTATUS XenIfaceSystemControl(
> -    __in PXENIFACE_FDO		fdoData,
> -    __inout PIRP Irp
> -    )
> -{
> -    NTSTATUS            status;
> -
> -
> -
> -    status = WmiProcessMinorFunction(fdoData, Irp);
> -
> -    if (status != STATUS_NOT_SUPPORTED) {
> -        Irp->IoStatus.Status = status;
> -        IoCompleteRequest(Irp, IO_NO_INCREMENT);
> -
> -    }
> -    else {
> -        IoSkipCurrentIrpStackLocation(Irp);
> -        status = IoCallDriver(fdoData->LowerDeviceObject, Irp);
> -    }
> -
> -    return(status);
> -
> -}
> -
> -
>  PCHAR
>  WMIMinorFunctionString (
>      __in UCHAR MinorFunction
> diff --git a/src/xeniface/wmi.h b/src/xeniface/wmi.h
> index a49f1b3..f677ee3 100644
> --- a/src/xeniface/wmi.h
> +++ b/src/xeniface/wmi.h
> @@ -37,11 +37,11 @@
>  #include "driver.h"
>  #include "wmi_generated.h"
> 
> -NTSTATUS
> +extern NTSTATUS
>  WmiProcessMinorFunction(
> -    IN PXENIFACE_FDO Fdo,
> -    IN PIRP Irp
> -);
> +    IN  PXENIFACE_FDO   Fdo,
> +    IN  PIRP            Irp
> +    );
> 
>  NTSTATUS
>  WmiInit(
> @@ -54,11 +54,6 @@ WmiFinalise(
>      PXENIFACE_FDO FdoData
>  );
> 
> -NTSTATUS XenIfaceSystemControl(
> -    __in PXENIFACE_FDO		fdoData,
> -    __inout PIRP Irp
> -    );
> -
>  void FireSuspendEvent(
>      IN OUT PXENIFACE_FDO fdoData
>      );
> --
> 1.9.4.msysgit.1
> 
> 
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

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

From win-pv-devel-bounces@lists.xenproject.org Mon Nov 02 13:35:36 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 02 Nov 2015 13:35:36 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZtFGo-00063r-U9; Mon, 02 Nov 2015 13:35:34 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=74177c93e=Paul.Durrant@citrix.com>)
	id 1ZtFGn-00063k-Qm
	for win-pv-devel@lists.xenproject.org; Mon, 02 Nov 2015 13:35:34 +0000
Received: from [193.109.254.147] by server-5.bemta-14.messagelabs.com id
	42/1A-00475-5A667365; Mon, 02 Nov 2015 13:35:33 +0000
X-Env-Sender: prvs=74177c93e=Paul.Durrant@citrix.com
X-Msg-Ref: server-3.tower-27.messagelabs.com!1446471331!63543371!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 28343 invoked from network); 2 Nov 2015 13:35:31 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-3.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	2 Nov 2015 13:35:31 -0000
X-IronPort-AV: E=Sophos;i="5.20,234,1444694400"; 
   d="scan'208";a="6698185"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Owen Smith <owen.smith@citrix.com>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [PATCH 1/6] Cleanup fdo dispatch entry points
Thread-Index: AQHREllwOYxQwR45+kWGccmnYeF3dZ6IwgwQ
Date: Mon, 2 Nov 2015 13:35:30 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F644CA6@AMSPEX01CL01.citrite.net>
References: <1446130187-30460-1-git-send-email-owen.smith@citrix.com>
	<1446130187-30460-2-git-send-email-owen.smith@citrix.com>
In-Reply-To: <1446130187-30460-2-git-send-email-owen.smith@citrix.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Cc: Owen Smith <owen.smith@citrix.com>
Subject: Re: [win-pv-devel] [PATCH 1/6] Cleanup fdo dispatch entry points
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> bounces@lists.xenproject.org] On Behalf Of Owen Smith
> Sent: 29 October 2015 14:50
> To: win-pv-devel@lists.xenproject.org
> Cc: Owen Smith
> Subject: [win-pv-devel] [PATCH 1/6] Cleanup fdo dispatch entry points
> 
> Signed-off-by: Owen Smith <owen.smith@citrix.com>

Acked-by: Paul Durrant <paul.durrant@citrix.com>

> ---
>  src/xeniface/fdo.c | 98 ++++++++++++++++--------------------------------------
>  src/xeniface/wmi.c | 82 +++++++++++++++------------------------------
>  src/xeniface/wmi.h | 13 +++-----
>  3 files changed, 59 insertions(+), 134 deletions(-)
> 
> diff --git a/src/xeniface/fdo.c b/src/xeniface/fdo.c
> index d6b006e..f7aa542 100644
> --- a/src/xeniface/fdo.c
> +++ b/src/xeniface/fdo.c
> @@ -1234,7 +1234,7 @@ done:
> 
>  static DECLSPEC_NOINLINE NTSTATUS
>  FdoDispatchPnp(
> -    IN  PXENIFACE_FDO     Fdo,
> +    IN  PXENIFACE_FDO   Fdo,
>      IN  PIRP            Irp
>      )
>  {
> @@ -1945,7 +1945,7 @@ FdoSystemPower(
> 
>  static DECLSPEC_NOINLINE NTSTATUS
>  FdoDispatchPower(
> -    IN  PXENIFACE_FDO     Fdo,
> +    IN  PXENIFACE_FDO   Fdo,
>      IN  PIRP            Irp
>      )
>  {
> @@ -2013,7 +2013,7 @@ done:
> 
>  static DECLSPEC_NOINLINE NTSTATUS
>  FdoDispatchDefault(
> -    IN  PXENIFACE_FDO     Fdo,
> +    IN  PXENIFACE_FDO   Fdo,
>      IN  PIRP            Irp
>      )
>  {
> @@ -2025,80 +2025,44 @@ FdoDispatchDefault(
>      return status;
>  }
> 
> -NTSTATUS
> -FdoCreateFile (
> -    __in PXENIFACE_FDO  Fdo,
> -    __inout PIRP        Irp
> +static DECLSPEC_NOINLINE NTSTATUS
> +FdoDispatchComplete(
> +    IN  PXENIFACE_FDO   Fdo,
> +    IN  PIRP            Irp
>      )
>  {
> -    PIO_STACK_LOCATION  Stack = IoGetCurrentIrpStackLocation(Irp);
> -    NTSTATUS            status;
> -
> -    XenIfaceDebugPrint(TRACE, "FO %p, Process %p\n", Stack->FileObject,
> PsGetCurrentProcess());
> +    UNREFERENCED_PARAMETER(Fdo);
> 
> -    if (Deleted == Fdo->Dx->DevicePnpState) {
> -        Irp->IoStatus.Status = STATUS_NO_SUCH_DEVICE;
> -        IoCompleteRequest(Irp, IO_NO_INCREMENT);
> -        return STATUS_NO_SUCH_DEVICE;
> -    }
> -
> -    status = STATUS_SUCCESS;
>      Irp->IoStatus.Information = 0;
> -    Irp->IoStatus.Status = status;
> -    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +    Irp->IoStatus.Status = STATUS_SUCCESS;
> +    IoCompleteRequest (Irp, IO_NO_INCREMENT);
> 
> -    return status;
> +    return STATUS_SUCCESS;
>  }
> 
> -
> -NTSTATUS
> -FdoClose (
> -    __in PXENIFACE_FDO  Fdo,
> -    __inout PIRP        Irp
> +static DECLSPEC_NOINLINE NTSTATUS
> +FdoDispatchSystemControl(
> +    IN  PXENIFACE_FDO   Fdo,
> +    IN  PIRP            Irp
>      )
> -
>  {
> -    PIO_STACK_LOCATION  Stack = IoGetCurrentIrpStackLocation(Irp);
>      NTSTATUS            status;
> 
> -    XenIfaceDebugPrint(TRACE, "FO %p, Process %p\n", Stack->FileObject,
> PsGetCurrentProcess());
> -
> -    XenIfaceCleanup(Fdo, Stack->FileObject);
> -
> -    status = STATUS_SUCCESS;
> -    Irp->IoStatus.Information = 0;
> -    Irp->IoStatus.Status = status;
> -    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> -
> -    return status;
> -}
> -
> -
> -NTSTATUS
> -FdoReadWrite (
> -    __in PXENIFACE_FDO fdoData,
> -    __inout PIRP Irp
> -    )
> -
> -{
> -
> -    NTSTATUS     status;
> -
> -    XenIfaceDebugPrint(TRACE, "ReadWrite called\n");
> -
> -    status = STATUS_SUCCESS;
> -    Irp->IoStatus.Information = 0;
> -    Irp->IoStatus.Status = status;
> -    IoCompleteRequest (Irp, IO_NO_INCREMENT);
> +    status = WmiProcessMinorFunction(Fdo, Irp);
> +    if (status == STATUS_NOT_SUPPORTED) {
> +        IoSkipCurrentIrpStackLocation(Irp);
> +        status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
> +    } else {
> +        Irp->IoStatus.Status = status;
> +        IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +    }
> 
>      return status;
>  }
> 
> -
> -
>  NTSTATUS
>  FdoDispatch(
> -    IN  PXENIFACE_FDO     Fdo,
> +    IN  PXENIFACE_FDO   Fdo,
>      IN  PIRP            Irp
>      )
>  {
> @@ -2121,20 +2085,14 @@ FdoDispatch(
>          break;
> 
>      case IRP_MJ_SYSTEM_CONTROL:
> -        status = XenIfaceSystemControl(Fdo, Irp);
> -        break;
> -
> -    case IRP_MJ_READ:
> -    case IRP_MJ_WRITE:
> -        status = FdoReadWrite(Fdo, Irp);
> +        status = FdoDispatchSystemControl(Fdo, Irp);
>          break;
> 
>      case IRP_MJ_CREATE:
> -        status = FdoCreateFile(Fdo, Irp);
> -        break;
> -
>      case IRP_MJ_CLOSE:
> -        status = FdoClose(Fdo, Irp);
> +    case IRP_MJ_READ:
> +    case IRP_MJ_WRITE:
> +        status = FdoDispatchComplete(Fdo, Irp);
>          break;
> 
>      default:
> diff --git a/src/xeniface/wmi.c b/src/xeniface/wmi.c
> index 82592e3..0b14e9b 100644
> --- a/src/xeniface/wmi.c
> +++ b/src/xeniface/wmi.c
> @@ -2995,85 +2995,57 @@ WmiRegInfoEx(
>      return WmiRegInfo(fdoData, stack, byteswritten);
>  }
> 
> -
> -
>  NTSTATUS
>  WmiProcessMinorFunction(
> -    IN PXENIFACE_FDO fdoData,
> -    IN PIRP Irp
> -)
> +    IN  PXENIFACE_FDO   Fdo,
> +    IN  PIRP            Irp
> +    )
>  {
> -    PIO_STACK_LOCATION stack;
> -    UCHAR MinorFunction;
> -
> -
> +    PIO_STACK_LOCATION  Stack;
> 
> -    stack = IoGetCurrentIrpStackLocation(Irp);
> +    Stack = IoGetCurrentIrpStackLocation(Irp);
> 
> -    if (stack->Parameters.WMI.ProviderId != (ULONG_PTR)fdoData->Dx-
> >DeviceObject) {
> -        XenIfaceDebugPrint(TRACE,"ProviderID %p %p", stack-
> >Parameters.WMI.ProviderId, fdoData->PhysicalDeviceObject);
> +    if (Stack->Parameters.WMI.ProviderId != (ULONG_PTR)Fdo->Dx-
> >DeviceObject) {
> +        XenIfaceDebugPrint(TRACE,
> +                           "ProviderID %p %p",
> +                           Stack->Parameters.WMI.ProviderId,
> +                           Fdo->PhysicalDeviceObject);
>          return STATUS_NOT_SUPPORTED;
> +    } else {
> +        XenIfaceDebugPrint(TRACE,
> +                           "ProviderID Match %p %p",
> +                           Stack->Parameters.WMI.ProviderId,
> +                           Fdo->PhysicalDeviceObject);
>      }
> -    else {
> -        XenIfaceDebugPrint(TRACE,"ProviderID Match %p %p", stack-
> >Parameters.WMI.ProviderId, fdoData->PhysicalDeviceObject);
> -    }
> -    MinorFunction = stack->MinorFunction;
> 
> -    switch (MinorFunction)
> -    {
> +    switch (Stack->MinorFunction) {
>      case IRP_MN_CHANGE_SINGLE_INSTANCE:
> -        return WmiChangeSingleInstance(fdoData, stack);
> +        return WmiChangeSingleInstance(Fdo, Stack);
>      case IRP_MN_CHANGE_SINGLE_ITEM:
> -        return WmiChangeSingleItem(fdoData, stack);
> +        return WmiChangeSingleItem(Fdo, Stack);
>      case IRP_MN_DISABLE_COLLECTION:
> -        return WmiDisableCollection(fdoData, stack);
> +        return WmiDisableCollection(Fdo, Stack);
>      case IRP_MN_DISABLE_EVENTS:
> -        return WmiDisableEvents(fdoData, stack);
> +        return WmiDisableEvents(Fdo, Stack);
>      case IRP_MN_ENABLE_COLLECTION:
> -        return WmiEnableCollection(fdoData, stack);
> +        return WmiEnableCollection(Fdo, Stack);
>      case IRP_MN_ENABLE_EVENTS:
> -        return WmiEnableEvents(fdoData, stack);
> +        return WmiEnableEvents(Fdo, Stack);
>      case IRP_MN_EXECUTE_METHOD:
> -        return WmiExecuteMethod(fdoData, stack,  &Irp-
> >IoStatus.Information);
> +        return WmiExecuteMethod(Fdo, Stack,  &Irp->IoStatus.Information);
>      case IRP_MN_QUERY_ALL_DATA:
> -        return WmiQueryAllData(fdoData, stack, &Irp->IoStatus.Information);
> +        return WmiQueryAllData(Fdo, Stack, &Irp->IoStatus.Information);
>      case IRP_MN_QUERY_SINGLE_INSTANCE:
> -        return WmiQuerySingleInstance(fdoData, stack, &Irp-
> >IoStatus.Information);
> +        return WmiQuerySingleInstance(Fdo, Stack, &Irp-
> >IoStatus.Information);
>      case IRP_MN_REGINFO:
> -        return WmiRegInfo(fdoData, stack, &Irp->IoStatus.Information);
> +        return WmiRegInfo(Fdo, Stack, &Irp->IoStatus.Information);
>      case IRP_MN_REGINFO_EX:
> -        return WmiRegInfoEx(fdoData, stack, &Irp->IoStatus.Information);
> +        return WmiRegInfoEx(Fdo, Stack, &Irp->IoStatus.Information);
>      default:
>          return STATUS_NOT_SUPPORTED;
>      }
>  }
> 
> -NTSTATUS XenIfaceSystemControl(
> -    __in PXENIFACE_FDO		fdoData,
> -    __inout PIRP Irp
> -    )
> -{
> -    NTSTATUS            status;
> -
> -
> -
> -    status = WmiProcessMinorFunction(fdoData, Irp);
> -
> -    if (status != STATUS_NOT_SUPPORTED) {
> -        Irp->IoStatus.Status = status;
> -        IoCompleteRequest(Irp, IO_NO_INCREMENT);
> -
> -    }
> -    else {
> -        IoSkipCurrentIrpStackLocation(Irp);
> -        status = IoCallDriver(fdoData->LowerDeviceObject, Irp);
> -    }
> -
> -    return(status);
> -
> -}
> -
> -
>  PCHAR
>  WMIMinorFunctionString (
>      __in UCHAR MinorFunction
> diff --git a/src/xeniface/wmi.h b/src/xeniface/wmi.h
> index a49f1b3..f677ee3 100644
> --- a/src/xeniface/wmi.h
> +++ b/src/xeniface/wmi.h
> @@ -37,11 +37,11 @@
>  #include "driver.h"
>  #include "wmi_generated.h"
> 
> -NTSTATUS
> +extern NTSTATUS
>  WmiProcessMinorFunction(
> -    IN PXENIFACE_FDO Fdo,
> -    IN PIRP Irp
> -);
> +    IN  PXENIFACE_FDO   Fdo,
> +    IN  PIRP            Irp
> +    );
> 
>  NTSTATUS
>  WmiInit(
> @@ -54,11 +54,6 @@ WmiFinalise(
>      PXENIFACE_FDO FdoData
>  );
> 
> -NTSTATUS XenIfaceSystemControl(
> -    __in PXENIFACE_FDO		fdoData,
> -    __inout PIRP Irp
> -    );
> -
>  void FireSuspendEvent(
>      IN OUT PXENIFACE_FDO fdoData
>      );
> --
> 1.9.4.msysgit.1
> 
> 
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

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

From win-pv-devel-bounces@lists.xenproject.org Mon Nov 02 13:37:07 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 02 Nov 2015 13:37:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZtFIJ-00066I-2Q; Mon, 02 Nov 2015 13:37:07 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=74177c93e=Paul.Durrant@citrix.com>)
	id 1ZtFIH-00066B-SG
	for win-pv-devel@lists.xenproject.org; Mon, 02 Nov 2015 13:37:05 +0000
Received: from [85.158.137.68] by server-12.bemta-3.messagelabs.com id
	5A/6C-14900-10767365; Mon, 02 Nov 2015 13:37:05 +0000
X-Env-Sender: prvs=74177c93e=Paul.Durrant@citrix.com
X-Msg-Ref: server-11.tower-31.messagelabs.com!1446471424!228700!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 55265 invoked from network); 2 Nov 2015 13:37:04 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-11.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	2 Nov 2015 13:37:04 -0000
X-IronPort-AV: E=Sophos;i="5.20,234,1444694400"; 
   d="scan'208";a="6698330"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Owen Smith <owen.smith@citrix.com>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [PATCH 2/6] Refactor WmiFireSuspendEvent
Thread-Index: AQHREllizeoYbDcQlEOJ56UdhRXsDJ6Iwncw
Date: Mon, 2 Nov 2015 13:37:04 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F644CC0@AMSPEX01CL01.citrite.net>
References: <1446130187-30460-1-git-send-email-owen.smith@citrix.com>
	<1446130187-30460-3-git-send-email-owen.smith@citrix.com>
In-Reply-To: <1446130187-30460-3-git-send-email-owen.smith@citrix.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Cc: Owen Smith <owen.smith@citrix.com>
Subject: Re: [win-pv-devel] [PATCH 2/6] Refactor WmiFireSuspendEvent
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> bounces@lists.xenproject.org] On Behalf Of Owen Smith
> Sent: 29 October 2015 14:50
> To: win-pv-devel@lists.xenproject.org
> Cc: Owen Smith
> Subject: [win-pv-devel] [PATCH 2/6] Refactor WmiFireSuspendEvent
> 
> Signed-off-by: Owen Smith <owen.smith@citrix.com>

Acked-by: Paul Durrant <paul.durrant@citrix.com>

> ---
>  src/xeniface/fdo.c |  2 +-
>  src/xeniface/wmi.c | 29 ++++++++++++++++++-----------
>  src/xeniface/wmi.h |  9 +++++----
>  3 files changed, 24 insertions(+), 16 deletions(-)
> 
> diff --git a/src/xeniface/fdo.c b/src/xeniface/fdo.c
> index f7aa542..b32e506 100644
> --- a/src/xeniface/fdo.c
> +++ b/src/xeniface/fdo.c
> @@ -782,7 +782,7 @@ FdoD3ToD0(
>      status = XENBUS_SUSPEND(Register,
>                              &Fdo->SuspendInterface,
>                              SUSPEND_CALLBACK_LATE,
> -                            FireSuspendEvent,
> +                            WmiFireSuspendEvent,
>                              Fdo,
>                              &Fdo->SuspendCallbackLate);
>      if (!NT_SUCCESS(status))
> diff --git a/src/xeniface/wmi.c b/src/xeniface/wmi.c
> index 0b14e9b..0ae87d4 100644
> --- a/src/xeniface/wmi.c
> +++ b/src/xeniface/wmi.c
> @@ -753,18 +753,25 @@ SessionFindWatchLocked(XenStoreSession
> *session,
> 
>  }
> 
> -void FireSuspendEvent(PXENIFACE_FDO fdoData) {
> -    XenIfaceDebugPrint(ERROR,"Ready to unsuspend Event\n");
> -    KeSetEvent(&fdoData->registryWriteEvent, IO_NO_INCREMENT, FALSE);
> -    if (fdoData->WmiReady) {
> -        XenIfaceDebugPrint(TRACE,"Fire Suspend Event\n");
> -        WmiFireEvent(fdoData->Dx->DeviceObject,
> -                     (LPGUID)&OBJECT_GUID(XenStoreUnsuspendedEvent),
> -                     0,
> -                     0,
> -                     NULL);
> -    }
> +VOID
> +WmiFireSuspendEvent(
> +    IN  PXENIFACE_FDO   Fdo
> +    )
> +{
> +    XenIfaceDebugPrint(ERROR, "Ready to unsuspend Event\n");
> +    KeSetEvent(&Fdo->registryWriteEvent, IO_NO_INCREMENT, FALSE);
> +
> +    if (!Fdo->WmiReady)
> +        return;
> +
> +    XenIfaceDebugPrint(TRACE, "Fire Suspend Event\n");
> +    WmiFireEvent(Fdo->Dx->DeviceObject,
> +                 (LPGUID)&OBJECT_GUID(XenStoreUnsuspendedEvent),
> +                 0,
> +                 0,
> +                 NULL);
>  }
> +
>  void FireWatch(XenStoreWatch* watch) {
>      UCHAR * eventdata;
>      ULONG RequiredSize;
> diff --git a/src/xeniface/wmi.h b/src/xeniface/wmi.h
> index f677ee3..b9dd256 100644
> --- a/src/xeniface/wmi.h
> +++ b/src/xeniface/wmi.h
> @@ -43,6 +43,11 @@ WmiProcessMinorFunction(
>      IN  PIRP            Irp
>      );
> 
> +extern VOID
> +WmiFireSuspendEvent(
> +    IN  PXENIFACE_FDO   Fdo
> +    );
> +
>  NTSTATUS
>  WmiInit(
>      PXENIFACE_FDO FdoData
> @@ -54,10 +59,6 @@ WmiFinalise(
>      PXENIFACE_FDO FdoData
>  );
> 
> -void FireSuspendEvent(
> -    IN OUT PXENIFACE_FDO fdoData
> -    );
> -
>  void SessionsResumeAll(
>      XENIFACE_FDO *fdoData
>  );
> --
> 1.9.4.msysgit.1
> 
> 
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

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

From win-pv-devel-bounces@lists.xenproject.org Mon Nov 02 13:37:07 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 02 Nov 2015 13:37:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZtFIJ-00066I-2Q; Mon, 02 Nov 2015 13:37:07 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=74177c93e=Paul.Durrant@citrix.com>)
	id 1ZtFIH-00066B-SG
	for win-pv-devel@lists.xenproject.org; Mon, 02 Nov 2015 13:37:05 +0000
Received: from [85.158.137.68] by server-12.bemta-3.messagelabs.com id
	5A/6C-14900-10767365; Mon, 02 Nov 2015 13:37:05 +0000
X-Env-Sender: prvs=74177c93e=Paul.Durrant@citrix.com
X-Msg-Ref: server-11.tower-31.messagelabs.com!1446471424!228700!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 55265 invoked from network); 2 Nov 2015 13:37:04 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-11.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	2 Nov 2015 13:37:04 -0000
X-IronPort-AV: E=Sophos;i="5.20,234,1444694400"; 
   d="scan'208";a="6698330"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Owen Smith <owen.smith@citrix.com>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [PATCH 2/6] Refactor WmiFireSuspendEvent
Thread-Index: AQHREllizeoYbDcQlEOJ56UdhRXsDJ6Iwncw
Date: Mon, 2 Nov 2015 13:37:04 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F644CC0@AMSPEX01CL01.citrite.net>
References: <1446130187-30460-1-git-send-email-owen.smith@citrix.com>
	<1446130187-30460-3-git-send-email-owen.smith@citrix.com>
In-Reply-To: <1446130187-30460-3-git-send-email-owen.smith@citrix.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Cc: Owen Smith <owen.smith@citrix.com>
Subject: Re: [win-pv-devel] [PATCH 2/6] Refactor WmiFireSuspendEvent
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> bounces@lists.xenproject.org] On Behalf Of Owen Smith
> Sent: 29 October 2015 14:50
> To: win-pv-devel@lists.xenproject.org
> Cc: Owen Smith
> Subject: [win-pv-devel] [PATCH 2/6] Refactor WmiFireSuspendEvent
> 
> Signed-off-by: Owen Smith <owen.smith@citrix.com>

Acked-by: Paul Durrant <paul.durrant@citrix.com>

> ---
>  src/xeniface/fdo.c |  2 +-
>  src/xeniface/wmi.c | 29 ++++++++++++++++++-----------
>  src/xeniface/wmi.h |  9 +++++----
>  3 files changed, 24 insertions(+), 16 deletions(-)
> 
> diff --git a/src/xeniface/fdo.c b/src/xeniface/fdo.c
> index f7aa542..b32e506 100644
> --- a/src/xeniface/fdo.c
> +++ b/src/xeniface/fdo.c
> @@ -782,7 +782,7 @@ FdoD3ToD0(
>      status = XENBUS_SUSPEND(Register,
>                              &Fdo->SuspendInterface,
>                              SUSPEND_CALLBACK_LATE,
> -                            FireSuspendEvent,
> +                            WmiFireSuspendEvent,
>                              Fdo,
>                              &Fdo->SuspendCallbackLate);
>      if (!NT_SUCCESS(status))
> diff --git a/src/xeniface/wmi.c b/src/xeniface/wmi.c
> index 0b14e9b..0ae87d4 100644
> --- a/src/xeniface/wmi.c
> +++ b/src/xeniface/wmi.c
> @@ -753,18 +753,25 @@ SessionFindWatchLocked(XenStoreSession
> *session,
> 
>  }
> 
> -void FireSuspendEvent(PXENIFACE_FDO fdoData) {
> -    XenIfaceDebugPrint(ERROR,"Ready to unsuspend Event\n");
> -    KeSetEvent(&fdoData->registryWriteEvent, IO_NO_INCREMENT, FALSE);
> -    if (fdoData->WmiReady) {
> -        XenIfaceDebugPrint(TRACE,"Fire Suspend Event\n");
> -        WmiFireEvent(fdoData->Dx->DeviceObject,
> -                     (LPGUID)&OBJECT_GUID(XenStoreUnsuspendedEvent),
> -                     0,
> -                     0,
> -                     NULL);
> -    }
> +VOID
> +WmiFireSuspendEvent(
> +    IN  PXENIFACE_FDO   Fdo
> +    )
> +{
> +    XenIfaceDebugPrint(ERROR, "Ready to unsuspend Event\n");
> +    KeSetEvent(&Fdo->registryWriteEvent, IO_NO_INCREMENT, FALSE);
> +
> +    if (!Fdo->WmiReady)
> +        return;
> +
> +    XenIfaceDebugPrint(TRACE, "Fire Suspend Event\n");
> +    WmiFireEvent(Fdo->Dx->DeviceObject,
> +                 (LPGUID)&OBJECT_GUID(XenStoreUnsuspendedEvent),
> +                 0,
> +                 0,
> +                 NULL);
>  }
> +
>  void FireWatch(XenStoreWatch* watch) {
>      UCHAR * eventdata;
>      ULONG RequiredSize;
> diff --git a/src/xeniface/wmi.h b/src/xeniface/wmi.h
> index f677ee3..b9dd256 100644
> --- a/src/xeniface/wmi.h
> +++ b/src/xeniface/wmi.h
> @@ -43,6 +43,11 @@ WmiProcessMinorFunction(
>      IN  PIRP            Irp
>      );
> 
> +extern VOID
> +WmiFireSuspendEvent(
> +    IN  PXENIFACE_FDO   Fdo
> +    );
> +
>  NTSTATUS
>  WmiInit(
>      PXENIFACE_FDO FdoData
> @@ -54,10 +59,6 @@ WmiFinalise(
>      PXENIFACE_FDO FdoData
>  );
> 
> -void FireSuspendEvent(
> -    IN OUT PXENIFACE_FDO fdoData
> -    );
> -
>  void SessionsResumeAll(
>      XENIFACE_FDO *fdoData
>  );
> --
> 1.9.4.msysgit.1
> 
> 
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

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

From win-pv-devel-bounces@lists.xenproject.org Mon Nov 02 13:39:14 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 02 Nov 2015 13:39:14 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZtFKM-0006Et-8C; Mon, 02 Nov 2015 13:39:14 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=74177c93e=Paul.Durrant@citrix.com>)
	id 1ZtFKK-0006En-NV
	for win-pv-devel@lists.xenproject.org; Mon, 02 Nov 2015 13:39:12 +0000
Received: from [85.158.139.211] by server-1.bemta-5.messagelabs.com id
	F3/C3-32615-08767365; Mon, 02 Nov 2015 13:39:12 +0000
X-Env-Sender: prvs=74177c93e=Paul.Durrant@citrix.com
X-Msg-Ref: server-9.tower-206.messagelabs.com!1446471551!262820!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 57627 invoked from network); 2 Nov 2015 13:39:11 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-9.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	2 Nov 2015 13:39:11 -0000
X-IronPort-AV: E=Sophos;i="5.20,234,1444694400"; 
   d="scan'208";a="6698456"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Owen Smith <owen.smith@citrix.com>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [PATCH 3/6] Refactor Wmi header,	split
	initialize/teardown and register/deregister
Thread-Index: AQHREllb+BUSSxirOkmx6+Mt9TCaw56Iwxfg
Date: Mon, 2 Nov 2015 13:39:10 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F644CD0@AMSPEX01CL01.citrite.net>
References: <1446130187-30460-1-git-send-email-owen.smith@citrix.com>
	<1446130187-30460-4-git-send-email-owen.smith@citrix.com>
In-Reply-To: <1446130187-30460-4-git-send-email-owen.smith@citrix.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Cc: Owen Smith <owen.smith@citrix.com>
Subject: Re: [win-pv-devel] [PATCH 3/6] Refactor Wmi header,
 split initialize/teardown and register/deregister
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> bounces@lists.xenproject.org] On Behalf Of Owen Smith
> Sent: 29 October 2015 14:50
> To: win-pv-devel@lists.xenproject.org
> Cc: Owen Smith
> Subject: [win-pv-devel] [PATCH 3/6] Refactor Wmi header, split
> initialize/teardown and register/deregister
> 
> Signed-off-by: Owen Smith <owen.smith@citrix.com>

Acked-by: Paul Durrant <paul.durrant@citrix.com>

> ---
>  src/xeniface/fdo.c |  44 +++++++++++++------
>  src/xeniface/wmi.c | 124 +++++++++++++++++++++++++++++++++++------
> ------------
>  src/xeniface/wmi.h |  47 ++++++++++++--------
>  3 files changed, 143 insertions(+), 72 deletions(-)
> 
> diff --git a/src/xeniface/fdo.c b/src/xeniface/fdo.c
> index b32e506..10ead15 100644
> --- a/src/xeniface/fdo.c
> +++ b/src/xeniface/fdo.c
> @@ -896,7 +896,7 @@ FdoStartDevice(
> 
> 
>      if (__FdoGetDevicePnpState(Fdo) != Stopped) {
> -        status = WmiInit(Fdo);
> +        status = WmiRegister(Fdo);
>          if (!NT_SUCCESS(status))
>              goto fail5;
>      }
> @@ -1046,7 +1046,7 @@ FdoSurpriseRemoval(
>      Irp->IoStatus.Status = STATUS_SUCCESS;
>  #pragma warning(suppress : 6031)
>      IoSetDeviceInterfaceState(&Fdo->InterfaceName, FALSE);
> -    WmiFinalise(Fdo);
> +    WmiDeregister(Fdo);
> 
>      IoSkipCurrentIrpStackLocation(Irp);
>      status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
> @@ -1081,7 +1081,7 @@ done:
>      Irp->IoStatus.Status = STATUS_SUCCESS;
>  #pragma warning(suppress : 6031)
>      IoSetDeviceInterfaceState(&Fdo->InterfaceName, FALSE);
> -    WmiFinalise(Fdo);
> +    WmiDeregister(Fdo);
> 
>      IoSkipCurrentIrpStackLocation(Irp);
>      status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
> @@ -1335,7 +1335,7 @@ __FdoSetDevicePowerUp(
> 
>      ASSERT3U(DeviceState, ==, PowerDeviceD0);
>      status = FdoD3ToD0(Fdo);
> -    SessionsResumeAll(Fdo);
> +    WmiSessionsResumeAll(Fdo);
>      ASSERT(NT_SUCCESS(status));
> 
>  done:
> @@ -1368,7 +1368,7 @@ __FdoSetDevicePowerDown(
>      ASSERT3U(DeviceState, ==, PowerDeviceD3);
> 
>      if (__FdoGetDevicePowerState(Fdo) == PowerDeviceD0){
> -        SessionsSuspendAll(Fdo);
> +        WmiSessionsSuspendAll(Fdo);
>          FdoD0ToD3(Fdo);
>      }
> 
> @@ -2322,6 +2322,10 @@ FdoCreate(
>      if (!NT_SUCCESS(status))
>          goto fail13;
> 
> +    status = WmiInitialize(Fdo);
> +    if (!NT_SUCCESS(status))
> +        goto fail14;
> +
>      KeInitializeSpinLock(&Fdo->StoreWatchLock);
>      InitializeListHead(&Fdo->StoreWatchList);
> 
> @@ -2341,7 +2345,7 @@ FdoCreate(
>                                 CsqReleaseLock,
>                                 CsqCompleteCanceledIrp);
>      if (!NT_SUCCESS(status))
> -        goto fail14;
> +        goto fail15;
> 
>  #if (NTDDI_VERSION >= NTDDI_WIN7)
>      ProcessorCount =
> KeQueryMaximumProcessorCountEx(ALL_PROCESSOR_GROUPS);
> @@ -2352,7 +2356,7 @@ FdoCreate(
>      status = STATUS_NO_MEMORY;
>      Fdo->EvtchnDpc = __FdoAllocate(sizeof (KDPC) * ProcessorCount);
>      if (Fdo->EvtchnDpc == NULL)
> -        goto fail15;
> +        goto fail16;
> 
>      for (Index = 0; Index < ProcessorCount; Index++) {
>  #if (NTDDI_VERSION >= NTDDI_WIN7)
> @@ -2379,9 +2383,29 @@ FdoCreate(
> 
>      return STATUS_SUCCESS;
> 
> +fail16:
> +    Error("fail6\n");
> +
> +    RtlZeroMemory(&Fdo->IrpQueue, sizeof (IO_CSQ));
> +
>  fail15:
>      Error("fail15\n");
> 
> +    RtlZeroMemory(&Fdo->GnttabCacheLock, sizeof (KSPIN_LOCK));
> +    ASSERT(IsListEmpty(&Fdo->IrpList));
> +    RtlZeroMemory(&Fdo->IrpList, sizeof (LIST_ENTRY));
> +    RtlZeroMemory(&Fdo->IrpQueueLock, sizeof (KSPIN_LOCK));
> +
> +    ASSERT(IsListEmpty(&Fdo->EvtchnList));
> +    RtlZeroMemory(&Fdo->EvtchnList, sizeof (LIST_ENTRY));
> +    RtlZeroMemory(&Fdo->EvtchnLock, sizeof (KSPIN_LOCK));
> +
> +    ASSERT(IsListEmpty(&Fdo->StoreWatchList));
> +    RtlZeroMemory(&Fdo->StoreWatchList, sizeof (LIST_ENTRY));
> +    RtlZeroMemory(&Fdo->StoreWatchLock, sizeof (KSPIN_LOCK));
> +
> +    WmiTeardown(Fdo);
> +
>  fail14:
>      Error("fail14\n");
> 
> @@ -2468,9 +2492,6 @@ fail1:
>      return status;
>  }
> 
> -
> -
> -
>  VOID
>  FdoDestroy(
>      IN  PXENIFACE_FDO     Fdo
> @@ -2552,8 +2573,7 @@ FdoDestroy(
>      Fdo->PhysicalDeviceObject = NULL;
>      Fdo->Dx = NULL;
> 
> -    RtlZeroMemory(&Fdo->SessionLock, sizeof(FAST_MUTEX));
> -    RtlZeroMemory(&Fdo->SessionHead, sizeof(LIST_ENTRY));
> +    WmiTeardown(Fdo);
>      RtlZeroMemory(&Fdo->registryWriteEvent, sizeof(KEVENT));
> 
>      RtlFreeUnicodeString(&Fdo->InterfaceName);
> diff --git a/src/xeniface/wmi.c b/src/xeniface/wmi.c
> index 0ae87d4..1ae84e1 100644
> --- a/src/xeniface/wmi.c
> +++ b/src/xeniface/wmi.c
> @@ -1255,20 +1255,23 @@ void SuspendSessionLocked(XENIFACE_FDO
> *fdoData,
>      }
>  }
> 
> -
> -void SessionsSuspendAll(XENIFACE_FDO *fdoData) {
> +VOID
> +WmiSessionsSuspendAll(
> +    IN  PXENIFACE_FDO   Fdo
> +    )
> +{
>      XenStoreSession *session;
> -    LockSessions(fdoData);
> +
> +    LockSessions(Fdo);
>      XenIfaceDebugPrint(TRACE,"Suspend all sessions\n");
> -    session = (XenStoreSession *)fdoData->SessionHead.Flink;
> -    while (session != (XenStoreSession *)&fdoData->SessionHead) {
> -        SuspendSessionLocked(fdoData, session);
> +    session = (XenStoreSession *)Fdo->SessionHead.Flink;
> +    while (session != (XenStoreSession *)&Fdo->SessionHead) {
> +        SuspendSessionLocked(Fdo, session);
>          session = (XenStoreSession *)session->listentry.Flink;
>      }
> -    UnlockSessions(fdoData);
> +    UnlockSessions(Fdo);
>  }
> 
> -
>  void SessionRenewWatchesLocked(XenStoreSession *session) {
>      int i;
>      XenStoreWatch *watch;
> @@ -1300,61 +1303,61 @@ void ResumeSessionLocked(XENIFACE_FDO
> *fdoData,
>      SessionRenewWatchesLocked(session);
>  }
> 
> -void SessionsResumeAll(XENIFACE_FDO *fdoData) {
> +VOID
> +WmiSessionsResumeAll(
> +    IN  PXENIFACE_FDO   Fdo
> +    )
> +{
>      XenStoreSession *session;
> 
> -    LockSessions(fdoData);
> +    LockSessions(Fdo);
>      XenIfaceDebugPrint(TRACE,"Resume all sessions\n");
> -    session = (XenStoreSession *)fdoData->SessionHead.Flink;
> -    while (session != (XenStoreSession *)&fdoData->SessionHead) {
> -        ResumeSessionLocked(fdoData, session );
> -        session=(XenStoreSession *)session->listentry.Flink;
> +    session = (XenStoreSession *)Fdo->SessionHead.Flink;
> +    while (session != (XenStoreSession *)&Fdo->SessionHead) {
> +        ResumeSessionLocked(Fdo, session);
> +        session = (XenStoreSession *)session->listentry.Flink;
>      }
> -    UnlockSessions(fdoData);
> +    UnlockSessions(Fdo);
>  }
> 
> -
>  NTSTATUS
> -WmiInit(
> -        PXENIFACE_FDO FdoData
> +WmiRegister(
> +    IN  PXENIFACE_FDO   Fdo
>      )
>  {
> -    NTSTATUS status = STATUS_SUCCESS;
> +    NTSTATUS            status;
> +
>      XenIfaceDebugPrint(TRACE,"%s\n",__FUNCTION__);
>      XenIfaceDebugPrint(INFO,"DRV: XenIface WMI Initialisation\n");
> 
> +    status = IoWMIRegistrationControl(Fdo->Dx->DeviceObject,
> +                                      WMIREG_ACTION_REGISTER);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> 
> +    Fdo->WmiReady = 1;
> +    return STATUS_SUCCESS;
> 
> -
> -    IoWMISuggestInstanceName(FdoData->PhysicalDeviceObject, NULL,
> FALSE,
> -                             &FdoData->SuggestedInstanceName);
> -    InitializeListHead(&FdoData->SessionHead);
> -    FdoData->Sessions = 0;
> -    ExInitializeFastMutex(&FdoData->SessionLock);
> -
> -    status = IoWMIRegistrationControl(FdoData->Dx->DeviceObject,
> WMIREG_ACTION_REGISTER);
> -    FdoData->WmiReady = 1;
> +fail1:
> +    Error("fail1 (%08x)\n", status);
>      return status;
>  }
> 
> -NTSTATUS
> -WmiFinalise(
> -    PXENIFACE_FDO FdoData
> +VOID
> +WmiDeregister(
> +    IN  PXENIFACE_FDO   Fdo
>      )
>  {
> -    NTSTATUS status = STATUS_SUCCESS;
> -    if (FdoData->WmiReady) {
> -        XenIfaceDebugPrint(INFO,"DRV: XenIface WMI Finalisation\n");
> -        XenIfaceDebugPrint(TRACE,"%s\n",__FUNCTION__);
> -        SessionsRemoveAll(FdoData);
> +    if (!Fdo->WmiReady)
> +        return;
> 
> -        status =IoWMIRegistrationControl(FdoData->Dx->DeviceObject,
> WMIREG_ACTION_DEREGISTER);
> -        RtlFreeUnicodeString(&FdoData->SuggestedInstanceName);
> -        RtlZeroBytes(&FdoData->SuggestedInstanceName,
> sizeof(UNICODE_STRING));
> +    XenIfaceDebugPrint(INFO,"DRV: XenIface WMI Finalisation\n");
> +    XenIfaceDebugPrint(TRACE,"%s\n",__FUNCTION__);
> 
> -        FdoData->WmiReady = 0;
> -    }
> -    return status;
> +    SessionsRemoveAll(Fdo);
> +    (VOID) IoWMIRegistrationControl(Fdo->Dx->DeviceObject,
> +                                    WMIREG_ACTION_DEREGISTER);
> +    Fdo->WmiReady = 0;
>  }
> 
>  NTSTATUS
> @@ -3090,4 +3093,41 @@ Updated Routine Description:
>      }
>  }
> 
> +NTSTATUS
> +WmiInitialize(
> +    IN  PXENIFACE_FDO   Fdo
> +    )
> +{
> +    NTSTATUS            status;
> +
> +    status = IoWMISuggestInstanceName(Fdo->PhysicalDeviceObject,
> +                                      NULL,
> +                                      FALSE,
> +                                      &Fdo->SuggestedInstanceName);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    Fdo->Sessions = 0;
> +    InitializeListHead(&Fdo->SessionHead);
> +    ExInitializeFastMutex(&Fdo->SessionLock);
> +
> +    return STATUS_SUCCESS;
> +
> +fail1:
> +    Error("fail1 (%08x)\n", status);
> +    return status;
> +}
> +
> +VOID
> +WmiTeardown(
> +    IN  PXENIFACE_FDO   Fdo
> +    )
> +{
> +    ASSERT(Fdo->Sessions == 0);
> +
> +    RtlZeroMemory(&Fdo->SessionLock, sizeof(FAST_MUTEX));
> +    RtlZeroMemory(&Fdo->SessionHead, sizeof(LIST_ENTRY));
> 
> +    RtlFreeUnicodeString(&Fdo->SuggestedInstanceName);
> +    RtlZeroMemory(&Fdo->SuggestedInstanceName,
> sizeof(UNICODE_STRING));
> +}
> diff --git a/src/xeniface/wmi.h b/src/xeniface/wmi.h
> index b9dd256..2656b46 100644
> --- a/src/xeniface/wmi.h
> +++ b/src/xeniface/wmi.h
> @@ -38,33 +38,44 @@
>  #include "wmi_generated.h"
> 
>  extern NTSTATUS
> -WmiProcessMinorFunction(
> -    IN  PXENIFACE_FDO   Fdo,
> -    IN  PIRP            Irp
> +WmiInitialize(
> +    IN  PXENIFACE_FDO   Fdo
>      );
> 
>  extern VOID
> -WmiFireSuspendEvent(
> +WmiTeardown(
>      IN  PXENIFACE_FDO   Fdo
>      );
> 
> -NTSTATUS
> -WmiInit(
> -    PXENIFACE_FDO FdoData
> -);
> +extern NTSTATUS
> +WmiRegister(
> +    IN  PXENIFACE_FDO   Fdo
> +    );
> 
> +extern VOID
> +WmiDeregister(
> +    IN  PXENIFACE_FDO   Fdo
> +    );
> 
> -NTSTATUS
> -WmiFinalise(
> -    PXENIFACE_FDO FdoData
> -);
> +extern VOID
> +WmiSessionsResumeAll(
> +    IN  PXENIFACE_FDO   Fdo
> +    );
> 
> -void SessionsResumeAll(
> -    XENIFACE_FDO *fdoData
> -);
> +extern VOID
> +WmiSessionsSuspendAll(
> +    IN  PXENIFACE_FDO   Fdo
> +    );
> 
> -void SessionsSuspendAll(
> -    XENIFACE_FDO *fdoData
> -);
> +extern NTSTATUS
> +WmiProcessMinorFunction(
> +    IN  PXENIFACE_FDO   Fdo,
> +    IN  PIRP            Irp
> +    );
> +
> +extern VOID
> +WmiFireSuspendEvent(
> +    IN  PXENIFACE_FDO   Fdo
> +    );
> 
>  #endif
> --
> 1.9.4.msysgit.1
> 
> 
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

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

From win-pv-devel-bounces@lists.xenproject.org Mon Nov 02 13:39:14 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 02 Nov 2015 13:39:14 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZtFKM-0006Et-8C; Mon, 02 Nov 2015 13:39:14 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=74177c93e=Paul.Durrant@citrix.com>)
	id 1ZtFKK-0006En-NV
	for win-pv-devel@lists.xenproject.org; Mon, 02 Nov 2015 13:39:12 +0000
Received: from [85.158.139.211] by server-1.bemta-5.messagelabs.com id
	F3/C3-32615-08767365; Mon, 02 Nov 2015 13:39:12 +0000
X-Env-Sender: prvs=74177c93e=Paul.Durrant@citrix.com
X-Msg-Ref: server-9.tower-206.messagelabs.com!1446471551!262820!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 57627 invoked from network); 2 Nov 2015 13:39:11 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-9.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	2 Nov 2015 13:39:11 -0000
X-IronPort-AV: E=Sophos;i="5.20,234,1444694400"; 
   d="scan'208";a="6698456"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Owen Smith <owen.smith@citrix.com>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [PATCH 3/6] Refactor Wmi header,	split
	initialize/teardown and register/deregister
Thread-Index: AQHREllb+BUSSxirOkmx6+Mt9TCaw56Iwxfg
Date: Mon, 2 Nov 2015 13:39:10 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F644CD0@AMSPEX01CL01.citrite.net>
References: <1446130187-30460-1-git-send-email-owen.smith@citrix.com>
	<1446130187-30460-4-git-send-email-owen.smith@citrix.com>
In-Reply-To: <1446130187-30460-4-git-send-email-owen.smith@citrix.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Cc: Owen Smith <owen.smith@citrix.com>
Subject: Re: [win-pv-devel] [PATCH 3/6] Refactor Wmi header,
 split initialize/teardown and register/deregister
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> bounces@lists.xenproject.org] On Behalf Of Owen Smith
> Sent: 29 October 2015 14:50
> To: win-pv-devel@lists.xenproject.org
> Cc: Owen Smith
> Subject: [win-pv-devel] [PATCH 3/6] Refactor Wmi header, split
> initialize/teardown and register/deregister
> 
> Signed-off-by: Owen Smith <owen.smith@citrix.com>

Acked-by: Paul Durrant <paul.durrant@citrix.com>

> ---
>  src/xeniface/fdo.c |  44 +++++++++++++------
>  src/xeniface/wmi.c | 124 +++++++++++++++++++++++++++++++++++------
> ------------
>  src/xeniface/wmi.h |  47 ++++++++++++--------
>  3 files changed, 143 insertions(+), 72 deletions(-)
> 
> diff --git a/src/xeniface/fdo.c b/src/xeniface/fdo.c
> index b32e506..10ead15 100644
> --- a/src/xeniface/fdo.c
> +++ b/src/xeniface/fdo.c
> @@ -896,7 +896,7 @@ FdoStartDevice(
> 
> 
>      if (__FdoGetDevicePnpState(Fdo) != Stopped) {
> -        status = WmiInit(Fdo);
> +        status = WmiRegister(Fdo);
>          if (!NT_SUCCESS(status))
>              goto fail5;
>      }
> @@ -1046,7 +1046,7 @@ FdoSurpriseRemoval(
>      Irp->IoStatus.Status = STATUS_SUCCESS;
>  #pragma warning(suppress : 6031)
>      IoSetDeviceInterfaceState(&Fdo->InterfaceName, FALSE);
> -    WmiFinalise(Fdo);
> +    WmiDeregister(Fdo);
> 
>      IoSkipCurrentIrpStackLocation(Irp);
>      status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
> @@ -1081,7 +1081,7 @@ done:
>      Irp->IoStatus.Status = STATUS_SUCCESS;
>  #pragma warning(suppress : 6031)
>      IoSetDeviceInterfaceState(&Fdo->InterfaceName, FALSE);
> -    WmiFinalise(Fdo);
> +    WmiDeregister(Fdo);
> 
>      IoSkipCurrentIrpStackLocation(Irp);
>      status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
> @@ -1335,7 +1335,7 @@ __FdoSetDevicePowerUp(
> 
>      ASSERT3U(DeviceState, ==, PowerDeviceD0);
>      status = FdoD3ToD0(Fdo);
> -    SessionsResumeAll(Fdo);
> +    WmiSessionsResumeAll(Fdo);
>      ASSERT(NT_SUCCESS(status));
> 
>  done:
> @@ -1368,7 +1368,7 @@ __FdoSetDevicePowerDown(
>      ASSERT3U(DeviceState, ==, PowerDeviceD3);
> 
>      if (__FdoGetDevicePowerState(Fdo) == PowerDeviceD0){
> -        SessionsSuspendAll(Fdo);
> +        WmiSessionsSuspendAll(Fdo);
>          FdoD0ToD3(Fdo);
>      }
> 
> @@ -2322,6 +2322,10 @@ FdoCreate(
>      if (!NT_SUCCESS(status))
>          goto fail13;
> 
> +    status = WmiInitialize(Fdo);
> +    if (!NT_SUCCESS(status))
> +        goto fail14;
> +
>      KeInitializeSpinLock(&Fdo->StoreWatchLock);
>      InitializeListHead(&Fdo->StoreWatchList);
> 
> @@ -2341,7 +2345,7 @@ FdoCreate(
>                                 CsqReleaseLock,
>                                 CsqCompleteCanceledIrp);
>      if (!NT_SUCCESS(status))
> -        goto fail14;
> +        goto fail15;
> 
>  #if (NTDDI_VERSION >= NTDDI_WIN7)
>      ProcessorCount =
> KeQueryMaximumProcessorCountEx(ALL_PROCESSOR_GROUPS);
> @@ -2352,7 +2356,7 @@ FdoCreate(
>      status = STATUS_NO_MEMORY;
>      Fdo->EvtchnDpc = __FdoAllocate(sizeof (KDPC) * ProcessorCount);
>      if (Fdo->EvtchnDpc == NULL)
> -        goto fail15;
> +        goto fail16;
> 
>      for (Index = 0; Index < ProcessorCount; Index++) {
>  #if (NTDDI_VERSION >= NTDDI_WIN7)
> @@ -2379,9 +2383,29 @@ FdoCreate(
> 
>      return STATUS_SUCCESS;
> 
> +fail16:
> +    Error("fail6\n");
> +
> +    RtlZeroMemory(&Fdo->IrpQueue, sizeof (IO_CSQ));
> +
>  fail15:
>      Error("fail15\n");
> 
> +    RtlZeroMemory(&Fdo->GnttabCacheLock, sizeof (KSPIN_LOCK));
> +    ASSERT(IsListEmpty(&Fdo->IrpList));
> +    RtlZeroMemory(&Fdo->IrpList, sizeof (LIST_ENTRY));
> +    RtlZeroMemory(&Fdo->IrpQueueLock, sizeof (KSPIN_LOCK));
> +
> +    ASSERT(IsListEmpty(&Fdo->EvtchnList));
> +    RtlZeroMemory(&Fdo->EvtchnList, sizeof (LIST_ENTRY));
> +    RtlZeroMemory(&Fdo->EvtchnLock, sizeof (KSPIN_LOCK));
> +
> +    ASSERT(IsListEmpty(&Fdo->StoreWatchList));
> +    RtlZeroMemory(&Fdo->StoreWatchList, sizeof (LIST_ENTRY));
> +    RtlZeroMemory(&Fdo->StoreWatchLock, sizeof (KSPIN_LOCK));
> +
> +    WmiTeardown(Fdo);
> +
>  fail14:
>      Error("fail14\n");
> 
> @@ -2468,9 +2492,6 @@ fail1:
>      return status;
>  }
> 
> -
> -
> -
>  VOID
>  FdoDestroy(
>      IN  PXENIFACE_FDO     Fdo
> @@ -2552,8 +2573,7 @@ FdoDestroy(
>      Fdo->PhysicalDeviceObject = NULL;
>      Fdo->Dx = NULL;
> 
> -    RtlZeroMemory(&Fdo->SessionLock, sizeof(FAST_MUTEX));
> -    RtlZeroMemory(&Fdo->SessionHead, sizeof(LIST_ENTRY));
> +    WmiTeardown(Fdo);
>      RtlZeroMemory(&Fdo->registryWriteEvent, sizeof(KEVENT));
> 
>      RtlFreeUnicodeString(&Fdo->InterfaceName);
> diff --git a/src/xeniface/wmi.c b/src/xeniface/wmi.c
> index 0ae87d4..1ae84e1 100644
> --- a/src/xeniface/wmi.c
> +++ b/src/xeniface/wmi.c
> @@ -1255,20 +1255,23 @@ void SuspendSessionLocked(XENIFACE_FDO
> *fdoData,
>      }
>  }
> 
> -
> -void SessionsSuspendAll(XENIFACE_FDO *fdoData) {
> +VOID
> +WmiSessionsSuspendAll(
> +    IN  PXENIFACE_FDO   Fdo
> +    )
> +{
>      XenStoreSession *session;
> -    LockSessions(fdoData);
> +
> +    LockSessions(Fdo);
>      XenIfaceDebugPrint(TRACE,"Suspend all sessions\n");
> -    session = (XenStoreSession *)fdoData->SessionHead.Flink;
> -    while (session != (XenStoreSession *)&fdoData->SessionHead) {
> -        SuspendSessionLocked(fdoData, session);
> +    session = (XenStoreSession *)Fdo->SessionHead.Flink;
> +    while (session != (XenStoreSession *)&Fdo->SessionHead) {
> +        SuspendSessionLocked(Fdo, session);
>          session = (XenStoreSession *)session->listentry.Flink;
>      }
> -    UnlockSessions(fdoData);
> +    UnlockSessions(Fdo);
>  }
> 
> -
>  void SessionRenewWatchesLocked(XenStoreSession *session) {
>      int i;
>      XenStoreWatch *watch;
> @@ -1300,61 +1303,61 @@ void ResumeSessionLocked(XENIFACE_FDO
> *fdoData,
>      SessionRenewWatchesLocked(session);
>  }
> 
> -void SessionsResumeAll(XENIFACE_FDO *fdoData) {
> +VOID
> +WmiSessionsResumeAll(
> +    IN  PXENIFACE_FDO   Fdo
> +    )
> +{
>      XenStoreSession *session;
> 
> -    LockSessions(fdoData);
> +    LockSessions(Fdo);
>      XenIfaceDebugPrint(TRACE,"Resume all sessions\n");
> -    session = (XenStoreSession *)fdoData->SessionHead.Flink;
> -    while (session != (XenStoreSession *)&fdoData->SessionHead) {
> -        ResumeSessionLocked(fdoData, session );
> -        session=(XenStoreSession *)session->listentry.Flink;
> +    session = (XenStoreSession *)Fdo->SessionHead.Flink;
> +    while (session != (XenStoreSession *)&Fdo->SessionHead) {
> +        ResumeSessionLocked(Fdo, session);
> +        session = (XenStoreSession *)session->listentry.Flink;
>      }
> -    UnlockSessions(fdoData);
> +    UnlockSessions(Fdo);
>  }
> 
> -
>  NTSTATUS
> -WmiInit(
> -        PXENIFACE_FDO FdoData
> +WmiRegister(
> +    IN  PXENIFACE_FDO   Fdo
>      )
>  {
> -    NTSTATUS status = STATUS_SUCCESS;
> +    NTSTATUS            status;
> +
>      XenIfaceDebugPrint(TRACE,"%s\n",__FUNCTION__);
>      XenIfaceDebugPrint(INFO,"DRV: XenIface WMI Initialisation\n");
> 
> +    status = IoWMIRegistrationControl(Fdo->Dx->DeviceObject,
> +                                      WMIREG_ACTION_REGISTER);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> 
> +    Fdo->WmiReady = 1;
> +    return STATUS_SUCCESS;
> 
> -
> -    IoWMISuggestInstanceName(FdoData->PhysicalDeviceObject, NULL,
> FALSE,
> -                             &FdoData->SuggestedInstanceName);
> -    InitializeListHead(&FdoData->SessionHead);
> -    FdoData->Sessions = 0;
> -    ExInitializeFastMutex(&FdoData->SessionLock);
> -
> -    status = IoWMIRegistrationControl(FdoData->Dx->DeviceObject,
> WMIREG_ACTION_REGISTER);
> -    FdoData->WmiReady = 1;
> +fail1:
> +    Error("fail1 (%08x)\n", status);
>      return status;
>  }
> 
> -NTSTATUS
> -WmiFinalise(
> -    PXENIFACE_FDO FdoData
> +VOID
> +WmiDeregister(
> +    IN  PXENIFACE_FDO   Fdo
>      )
>  {
> -    NTSTATUS status = STATUS_SUCCESS;
> -    if (FdoData->WmiReady) {
> -        XenIfaceDebugPrint(INFO,"DRV: XenIface WMI Finalisation\n");
> -        XenIfaceDebugPrint(TRACE,"%s\n",__FUNCTION__);
> -        SessionsRemoveAll(FdoData);
> +    if (!Fdo->WmiReady)
> +        return;
> 
> -        status =IoWMIRegistrationControl(FdoData->Dx->DeviceObject,
> WMIREG_ACTION_DEREGISTER);
> -        RtlFreeUnicodeString(&FdoData->SuggestedInstanceName);
> -        RtlZeroBytes(&FdoData->SuggestedInstanceName,
> sizeof(UNICODE_STRING));
> +    XenIfaceDebugPrint(INFO,"DRV: XenIface WMI Finalisation\n");
> +    XenIfaceDebugPrint(TRACE,"%s\n",__FUNCTION__);
> 
> -        FdoData->WmiReady = 0;
> -    }
> -    return status;
> +    SessionsRemoveAll(Fdo);
> +    (VOID) IoWMIRegistrationControl(Fdo->Dx->DeviceObject,
> +                                    WMIREG_ACTION_DEREGISTER);
> +    Fdo->WmiReady = 0;
>  }
> 
>  NTSTATUS
> @@ -3090,4 +3093,41 @@ Updated Routine Description:
>      }
>  }
> 
> +NTSTATUS
> +WmiInitialize(
> +    IN  PXENIFACE_FDO   Fdo
> +    )
> +{
> +    NTSTATUS            status;
> +
> +    status = IoWMISuggestInstanceName(Fdo->PhysicalDeviceObject,
> +                                      NULL,
> +                                      FALSE,
> +                                      &Fdo->SuggestedInstanceName);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    Fdo->Sessions = 0;
> +    InitializeListHead(&Fdo->SessionHead);
> +    ExInitializeFastMutex(&Fdo->SessionLock);
> +
> +    return STATUS_SUCCESS;
> +
> +fail1:
> +    Error("fail1 (%08x)\n", status);
> +    return status;
> +}
> +
> +VOID
> +WmiTeardown(
> +    IN  PXENIFACE_FDO   Fdo
> +    )
> +{
> +    ASSERT(Fdo->Sessions == 0);
> +
> +    RtlZeroMemory(&Fdo->SessionLock, sizeof(FAST_MUTEX));
> +    RtlZeroMemory(&Fdo->SessionHead, sizeof(LIST_ENTRY));
> 
> +    RtlFreeUnicodeString(&Fdo->SuggestedInstanceName);
> +    RtlZeroMemory(&Fdo->SuggestedInstanceName,
> sizeof(UNICODE_STRING));
> +}
> diff --git a/src/xeniface/wmi.h b/src/xeniface/wmi.h
> index b9dd256..2656b46 100644
> --- a/src/xeniface/wmi.h
> +++ b/src/xeniface/wmi.h
> @@ -38,33 +38,44 @@
>  #include "wmi_generated.h"
> 
>  extern NTSTATUS
> -WmiProcessMinorFunction(
> -    IN  PXENIFACE_FDO   Fdo,
> -    IN  PIRP            Irp
> +WmiInitialize(
> +    IN  PXENIFACE_FDO   Fdo
>      );
> 
>  extern VOID
> -WmiFireSuspendEvent(
> +WmiTeardown(
>      IN  PXENIFACE_FDO   Fdo
>      );
> 
> -NTSTATUS
> -WmiInit(
> -    PXENIFACE_FDO FdoData
> -);
> +extern NTSTATUS
> +WmiRegister(
> +    IN  PXENIFACE_FDO   Fdo
> +    );
> 
> +extern VOID
> +WmiDeregister(
> +    IN  PXENIFACE_FDO   Fdo
> +    );
> 
> -NTSTATUS
> -WmiFinalise(
> -    PXENIFACE_FDO FdoData
> -);
> +extern VOID
> +WmiSessionsResumeAll(
> +    IN  PXENIFACE_FDO   Fdo
> +    );
> 
> -void SessionsResumeAll(
> -    XENIFACE_FDO *fdoData
> -);
> +extern VOID
> +WmiSessionsSuspendAll(
> +    IN  PXENIFACE_FDO   Fdo
> +    );
> 
> -void SessionsSuspendAll(
> -    XENIFACE_FDO *fdoData
> -);
> +extern NTSTATUS
> +WmiProcessMinorFunction(
> +    IN  PXENIFACE_FDO   Fdo,
> +    IN  PIRP            Irp
> +    );
> +
> +extern VOID
> +WmiFireSuspendEvent(
> +    IN  PXENIFACE_FDO   Fdo
> +    );
> 
>  #endif
> --
> 1.9.4.msysgit.1
> 
> 
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

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

From win-pv-devel-bounces@lists.xenproject.org Mon Nov 02 13:40:43 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 02 Nov 2015 13:40:43 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZtFLm-0006Hb-DQ; Mon, 02 Nov 2015 13:40:42 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=74177c93e=Paul.Durrant@citrix.com>)
	id 1ZtFLl-0006HW-JB
	for win-pv-devel@lists.xenproject.org; Mon, 02 Nov 2015 13:40:41 +0000
Received: from [85.158.137.68] by server-16.bemta-3.messagelabs.com id
	06/4D-03763-8D767365; Mon, 02 Nov 2015 13:40:40 +0000
X-Env-Sender: prvs=74177c93e=Paul.Durrant@citrix.com
X-Msg-Ref: server-10.tower-31.messagelabs.com!1446471640!231210!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 47809 invoked from network); 2 Nov 2015 13:40:40 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-10.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	2 Nov 2015 13:40:40 -0000
X-IronPort-AV: E=Sophos;i="5.20,234,1444694400"; 
   d="scan'208";a="6698539"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Owen Smith <owen.smith@citrix.com>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [PATCH 4/6] Rework Wmi setup/cleanup to always
	Resume/Suspend sessions
Thread-Index: AQHREll0hhlggBNjgECI2CGU/t9sW56Iw39w
Date: Mon, 2 Nov 2015 13:40:39 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F644CE6@AMSPEX01CL01.citrite.net>
References: <1446130187-30460-1-git-send-email-owen.smith@citrix.com>
	<1446130187-30460-5-git-send-email-owen.smith@citrix.com>
In-Reply-To: <1446130187-30460-5-git-send-email-owen.smith@citrix.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Cc: Owen Smith <owen.smith@citrix.com>
Subject: Re: [win-pv-devel] [PATCH 4/6] Rework Wmi setup/cleanup to
	always	Resume/Suspend sessions
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> bounces@lists.xenproject.org] On Behalf Of Owen Smith
> Sent: 29 October 2015 14:50
> To: win-pv-devel@lists.xenproject.org
> Cc: Owen Smith
> Subject: [win-pv-devel] [PATCH 4/6] Rework Wmi setup/cleanup to always
> Resume/Suspend sessions
> 
> Signed-off-by: Owen Smith <owen.smith@citrix.com>

Acked-by: Paul Durrant <paul.durrant@citrix.com>

> ---
>  src/xeniface/fdo.c | 47 ++++++++++++++++-------------------------------
>  src/xeniface/wmi.c |  3 +++
>  2 files changed, 19 insertions(+), 31 deletions(-)
> 
> diff --git a/src/xeniface/fdo.c b/src/xeniface/fdo.c
> index 10ead15..2b3e44d 100644
> --- a/src/xeniface/fdo.c
> +++ b/src/xeniface/fdo.c
> @@ -741,20 +741,6 @@ __FdoD0ToD3(
>      Trace("<====\n");
>  }
> 
> -static DECLSPEC_NOINLINE VOID
> -FdoSuspendCallbackLate(
> -    IN  PVOID   Argument
> -    )
> -{
> -    PXENIFACE_FDO Fdo = (PXENIFACE_FDO) Argument;
> -    NTSTATUS    status;
> -
> -    __FdoD0ToD3(Fdo);
> -
> -    status = __FdoD3ToD0(Fdo);
> -    ASSERT(NT_SUCCESS(status));
> -}
> -
>  static DECLSPEC_NOINLINE NTSTATUS
>  FdoD3ToD0(
>      IN  PXENIFACE_FDO Fdo
> @@ -791,6 +777,8 @@ FdoD3ToD0(
>      Fdo->InterfacesAcquired = TRUE;
>      KeLowerIrql(Irql);
> 
> +    WmiSessionsResumeAll(Fdo);
> +
>      return STATUS_SUCCESS;
> 
>  fail4:
> @@ -824,8 +812,11 @@ FdoD0ToD3(
>      KIRQL           Irql;
> 
>      ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
> -    Fdo->InterfacesAcquired = FALSE;
> +
> +    WmiSessionsSuspendAll(Fdo);
> +
>      KeRaiseIrql(DISPATCH_LEVEL, &Irql);
> +    Fdo->InterfacesAcquired = FALSE;
> 
>      XENBUS_SUSPEND(Deregister,
>                     &Fdo->SuspendInterface,
> @@ -886,24 +877,20 @@ FdoStartDevice(
>       FdoS4ToS3(Fdo);
>      __FdoSetSystemPowerState(Fdo, PowerSystemWorking);
> 
> -    status = FdoD3ToD0(Fdo);
> +    status = WmiRegister(Fdo);
>      if (!NT_SUCCESS(status))
>          goto fail3;
> 
> -    status =  IoSetDeviceInterfaceState(&Fdo->InterfaceName, TRUE);
> +    status = FdoD3ToD0(Fdo);
>      if (!NT_SUCCESS(status))
>          goto fail4;
> 
> -
> -    if (__FdoGetDevicePnpState(Fdo) != Stopped) {
> -        status = WmiRegister(Fdo);
> -        if (!NT_SUCCESS(status))
> -            goto fail5;
> -    }
> +    status =  IoSetDeviceInterfaceState(&Fdo->InterfaceName, TRUE);
> +    if (!NT_SUCCESS(status))
> +        goto fail5;
> 
>      __FdoSetDevicePnpState(Fdo, Started);
> 
> -
>      status = Irp->IoStatus.Status;
>      IoCompleteRequest(Irp, IO_NO_INCREMENT);
> 
> @@ -911,12 +898,12 @@ FdoStartDevice(
> 
>  fail5:
>      Error("fail5\n");
> -#pragma warning(suppress : 6031)
> -    IoSetDeviceInterfaceState(&Fdo->InterfaceName, FALSE);
> +    FdoD0ToD3(Fdo);
> 
>  fail4:
>      Error("fail4\n");
> -    FdoD0ToD3(Fdo);
> +
> +    WmiDeregister(Fdo);
> 
>  fail3:
>      Error("fail3\n");
> @@ -981,6 +968,7 @@ FdoStopDevice(
>      NTSTATUS        status;
> 
>      FdoD0ToD3(Fdo);
> +    WmiDeregister(Fdo);
> 
>      __FdoSetSystemPowerState(Fdo, PowerSystemSleeping3);
>      FdoS3ToS4(Fdo);
> @@ -1335,7 +1323,6 @@ __FdoSetDevicePowerUp(
> 
>      ASSERT3U(DeviceState, ==, PowerDeviceD0);
>      status = FdoD3ToD0(Fdo);
> -    WmiSessionsResumeAll(Fdo);
>      ASSERT(NT_SUCCESS(status));
> 
>  done:
> @@ -1367,10 +1354,8 @@ __FdoSetDevicePowerDown(
> 
>      ASSERT3U(DeviceState, ==, PowerDeviceD3);
> 
> -    if (__FdoGetDevicePowerState(Fdo) == PowerDeviceD0){
> -        WmiSessionsSuspendAll(Fdo);
> +    if (__FdoGetDevicePowerState(Fdo) == PowerDeviceD0)
>          FdoD0ToD3(Fdo);
> -    }
> 
>      IoSkipCurrentIrpStackLocation(Irp);
>      status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
> diff --git a/src/xeniface/wmi.c b/src/xeniface/wmi.c
> index 1ae84e1..0f63ef5 100644
> --- a/src/xeniface/wmi.c
> +++ b/src/xeniface/wmi.c
> @@ -1327,6 +1327,9 @@ WmiRegister(
>  {
>      NTSTATUS            status;
> 
> +    if (Fdo->WmiReady)
> +        return STATUS_SUCCESS;
> +
>      XenIfaceDebugPrint(TRACE,"%s\n",__FUNCTION__);
>      XenIfaceDebugPrint(INFO,"DRV: XenIface WMI Initialisation\n");
> 
> --
> 1.9.4.msysgit.1
> 
> 
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

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

From win-pv-devel-bounces@lists.xenproject.org Mon Nov 02 13:40:43 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 02 Nov 2015 13:40:43 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZtFLm-0006Hb-DQ; Mon, 02 Nov 2015 13:40:42 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=74177c93e=Paul.Durrant@citrix.com>)
	id 1ZtFLl-0006HW-JB
	for win-pv-devel@lists.xenproject.org; Mon, 02 Nov 2015 13:40:41 +0000
Received: from [85.158.137.68] by server-16.bemta-3.messagelabs.com id
	06/4D-03763-8D767365; Mon, 02 Nov 2015 13:40:40 +0000
X-Env-Sender: prvs=74177c93e=Paul.Durrant@citrix.com
X-Msg-Ref: server-10.tower-31.messagelabs.com!1446471640!231210!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 47809 invoked from network); 2 Nov 2015 13:40:40 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-10.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	2 Nov 2015 13:40:40 -0000
X-IronPort-AV: E=Sophos;i="5.20,234,1444694400"; 
   d="scan'208";a="6698539"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Owen Smith <owen.smith@citrix.com>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [PATCH 4/6] Rework Wmi setup/cleanup to always
	Resume/Suspend sessions
Thread-Index: AQHREll0hhlggBNjgECI2CGU/t9sW56Iw39w
Date: Mon, 2 Nov 2015 13:40:39 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F644CE6@AMSPEX01CL01.citrite.net>
References: <1446130187-30460-1-git-send-email-owen.smith@citrix.com>
	<1446130187-30460-5-git-send-email-owen.smith@citrix.com>
In-Reply-To: <1446130187-30460-5-git-send-email-owen.smith@citrix.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Cc: Owen Smith <owen.smith@citrix.com>
Subject: Re: [win-pv-devel] [PATCH 4/6] Rework Wmi setup/cleanup to
	always	Resume/Suspend sessions
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> bounces@lists.xenproject.org] On Behalf Of Owen Smith
> Sent: 29 October 2015 14:50
> To: win-pv-devel@lists.xenproject.org
> Cc: Owen Smith
> Subject: [win-pv-devel] [PATCH 4/6] Rework Wmi setup/cleanup to always
> Resume/Suspend sessions
> 
> Signed-off-by: Owen Smith <owen.smith@citrix.com>

Acked-by: Paul Durrant <paul.durrant@citrix.com>

> ---
>  src/xeniface/fdo.c | 47 ++++++++++++++++-------------------------------
>  src/xeniface/wmi.c |  3 +++
>  2 files changed, 19 insertions(+), 31 deletions(-)
> 
> diff --git a/src/xeniface/fdo.c b/src/xeniface/fdo.c
> index 10ead15..2b3e44d 100644
> --- a/src/xeniface/fdo.c
> +++ b/src/xeniface/fdo.c
> @@ -741,20 +741,6 @@ __FdoD0ToD3(
>      Trace("<====\n");
>  }
> 
> -static DECLSPEC_NOINLINE VOID
> -FdoSuspendCallbackLate(
> -    IN  PVOID   Argument
> -    )
> -{
> -    PXENIFACE_FDO Fdo = (PXENIFACE_FDO) Argument;
> -    NTSTATUS    status;
> -
> -    __FdoD0ToD3(Fdo);
> -
> -    status = __FdoD3ToD0(Fdo);
> -    ASSERT(NT_SUCCESS(status));
> -}
> -
>  static DECLSPEC_NOINLINE NTSTATUS
>  FdoD3ToD0(
>      IN  PXENIFACE_FDO Fdo
> @@ -791,6 +777,8 @@ FdoD3ToD0(
>      Fdo->InterfacesAcquired = TRUE;
>      KeLowerIrql(Irql);
> 
> +    WmiSessionsResumeAll(Fdo);
> +
>      return STATUS_SUCCESS;
> 
>  fail4:
> @@ -824,8 +812,11 @@ FdoD0ToD3(
>      KIRQL           Irql;
> 
>      ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
> -    Fdo->InterfacesAcquired = FALSE;
> +
> +    WmiSessionsSuspendAll(Fdo);
> +
>      KeRaiseIrql(DISPATCH_LEVEL, &Irql);
> +    Fdo->InterfacesAcquired = FALSE;
> 
>      XENBUS_SUSPEND(Deregister,
>                     &Fdo->SuspendInterface,
> @@ -886,24 +877,20 @@ FdoStartDevice(
>       FdoS4ToS3(Fdo);
>      __FdoSetSystemPowerState(Fdo, PowerSystemWorking);
> 
> -    status = FdoD3ToD0(Fdo);
> +    status = WmiRegister(Fdo);
>      if (!NT_SUCCESS(status))
>          goto fail3;
> 
> -    status =  IoSetDeviceInterfaceState(&Fdo->InterfaceName, TRUE);
> +    status = FdoD3ToD0(Fdo);
>      if (!NT_SUCCESS(status))
>          goto fail4;
> 
> -
> -    if (__FdoGetDevicePnpState(Fdo) != Stopped) {
> -        status = WmiRegister(Fdo);
> -        if (!NT_SUCCESS(status))
> -            goto fail5;
> -    }
> +    status =  IoSetDeviceInterfaceState(&Fdo->InterfaceName, TRUE);
> +    if (!NT_SUCCESS(status))
> +        goto fail5;
> 
>      __FdoSetDevicePnpState(Fdo, Started);
> 
> -
>      status = Irp->IoStatus.Status;
>      IoCompleteRequest(Irp, IO_NO_INCREMENT);
> 
> @@ -911,12 +898,12 @@ FdoStartDevice(
> 
>  fail5:
>      Error("fail5\n");
> -#pragma warning(suppress : 6031)
> -    IoSetDeviceInterfaceState(&Fdo->InterfaceName, FALSE);
> +    FdoD0ToD3(Fdo);
> 
>  fail4:
>      Error("fail4\n");
> -    FdoD0ToD3(Fdo);
> +
> +    WmiDeregister(Fdo);
> 
>  fail3:
>      Error("fail3\n");
> @@ -981,6 +968,7 @@ FdoStopDevice(
>      NTSTATUS        status;
> 
>      FdoD0ToD3(Fdo);
> +    WmiDeregister(Fdo);
> 
>      __FdoSetSystemPowerState(Fdo, PowerSystemSleeping3);
>      FdoS3ToS4(Fdo);
> @@ -1335,7 +1323,6 @@ __FdoSetDevicePowerUp(
> 
>      ASSERT3U(DeviceState, ==, PowerDeviceD0);
>      status = FdoD3ToD0(Fdo);
> -    WmiSessionsResumeAll(Fdo);
>      ASSERT(NT_SUCCESS(status));
> 
>  done:
> @@ -1367,10 +1354,8 @@ __FdoSetDevicePowerDown(
> 
>      ASSERT3U(DeviceState, ==, PowerDeviceD3);
> 
> -    if (__FdoGetDevicePowerState(Fdo) == PowerDeviceD0){
> -        WmiSessionsSuspendAll(Fdo);
> +    if (__FdoGetDevicePowerState(Fdo) == PowerDeviceD0)
>          FdoD0ToD3(Fdo);
> -    }
> 
>      IoSkipCurrentIrpStackLocation(Irp);
>      status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
> diff --git a/src/xeniface/wmi.c b/src/xeniface/wmi.c
> index 1ae84e1..0f63ef5 100644
> --- a/src/xeniface/wmi.c
> +++ b/src/xeniface/wmi.c
> @@ -1327,6 +1327,9 @@ WmiRegister(
>  {
>      NTSTATUS            status;
> 
> +    if (Fdo->WmiReady)
> +        return STATUS_SUCCESS;
> +
>      XenIfaceDebugPrint(TRACE,"%s\n",__FUNCTION__);
>      XenIfaceDebugPrint(INFO,"DRV: XenIface WMI Initialisation\n");
> 
> --
> 1.9.4.msysgit.1
> 
> 
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

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

From win-pv-devel-bounces@lists.xenproject.org Mon Nov 02 13:41:36 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 02 Nov 2015 13:41:36 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZtFMe-0006Iv-GR; Mon, 02 Nov 2015 13:41:36 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=74177c93e=Paul.Durrant@citrix.com>)
	id 1ZtFMd-0006Ip-PB
	for win-pv-devel@lists.xenproject.org; Mon, 02 Nov 2015 13:41:35 +0000
Received: from [85.158.139.211] by server-17.bemta-5.messagelabs.com id
	4A/F4-18107-F0867365; Mon, 02 Nov 2015 13:41:35 +0000
X-Env-Sender: prvs=74177c93e=Paul.Durrant@citrix.com
X-Msg-Ref: server-11.tower-206.messagelabs.com!1446471694!263709!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 51124 invoked from network); 2 Nov 2015 13:41:34 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-11.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	2 Nov 2015 13:41:34 -0000
X-IronPort-AV: E=Sophos;i="5.20,234,1444694400"; 
   d="scan'208";a="6698585"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Owen Smith <owen.smith@citrix.com>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [PATCH 5/6] Fold __FdoD0ToD3/__FdoD3ToD0 into
	caller	Remove redundant functions
Thread-Index: AQHREll39WNrKONg2kiewB6+ExaRap6Iw75Q
Date: Mon, 2 Nov 2015 13:41:33 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F644D03@AMSPEX01CL01.citrite.net>
References: <1446130187-30460-1-git-send-email-owen.smith@citrix.com>
	<1446130187-30460-6-git-send-email-owen.smith@citrix.com>
In-Reply-To: <1446130187-30460-6-git-send-email-owen.smith@citrix.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Cc: Owen Smith <owen.smith@citrix.com>
Subject: Re: [win-pv-devel] [PATCH 5/6] Fold __FdoD0ToD3/__FdoD3ToD0 into
 caller	Remove redundant functions
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> bounces@lists.xenproject.org] On Behalf Of Owen Smith
> Sent: 29 October 2015 14:50
> To: win-pv-devel@lists.xenproject.org
> Cc: Owen Smith
> Subject: [win-pv-devel] [PATCH 5/6] Fold __FdoD0ToD3/__FdoD3ToD0 into
> caller Remove redundant functions
> 
> Signed-off-by: Owen Smith <owen.smith@citrix.com>

Acked-by: Paul Durrant <paul.durrant@citrix.com>

> ---
>  src/xeniface/fdo.c | 221 +++++++++++++----------------------------------------
>  1 file changed, 55 insertions(+), 166 deletions(-)
> 
> diff --git a/src/xeniface/fdo.c b/src/xeniface/fdo.c
> index 2b3e44d..c1a9a8f 100644
> --- a/src/xeniface/fdo.c
> +++ b/src/xeniface/fdo.c
> @@ -522,86 +522,6 @@ FdoReleaseMutex(
>          FdoDestroy(Fdo);
>  }
> 
> -
> -static FORCEINLINE PANSI_STRING
> -__FdoMultiSzToUpcaseAnsi(
> -    IN  PCHAR       Buffer
> -    )
> -{
> -    PANSI_STRING    Ansi;
> -    LONG            Index;
> -    LONG            Count;
> -    NTSTATUS        status;
> -
> -    Index = 0;
> -    Count = 0;
> -    for (;;) {
> -        if (Buffer[Index] == '\0') {
> -            Count++;
> -            Index++;
> -
> -            // Check for double NUL
> -            if (Buffer[Index] == '\0')
> -                break;
> -        } else {
> -            Buffer[Index] = (CHAR)toupper(Buffer[Index]);
> -            Index++;
> -        }
> -    }
> -
> -    Ansi = (PANSI_STRING)__FdoAllocate(sizeof (ANSI_STRING) * (Count +
> 1));
> -
> -    status = STATUS_NO_MEMORY;
> -    if (Ansi == NULL)
> -        goto fail1;
> -
> -    for (Index = 0; Index < Count; Index++) {
> -        ULONG   Length;
> -
> -        Length = (ULONG)strlen(Buffer);
> -        Ansi[Index].MaximumLength = (USHORT)(Length + 1);
> -        Ansi[Index].Buffer =
> (PCHAR)__FdoAllocate(Ansi[Index].MaximumLength);
> -
> -        status = STATUS_NO_MEMORY;
> -        if (Ansi[Index].Buffer == NULL)
> -            goto fail2;
> -
> -        RtlCopyMemory(Ansi[Index].Buffer, Buffer, Length);
> -        Ansi[Index].Length = (USHORT)Length;
> -
> -        Buffer += Length + 1;
> -    }
> -
> -    return Ansi;
> -
> -fail2:
> -    Error("fail2\n");
> -
> -    while (--Index >= 0)
> -        __FdoFree(Ansi[Index].Buffer);
> -
> -    __FdoFree(Ansi);
> -
> -fail1:
> -    Error("fail1 (%08x)\n", status);
> -
> -    return NULL;
> -}
> -
> -static FORCEINLINE VOID
> -__FdoFreeAnsi(
> -    IN  PANSI_STRING    Ansi
> -    )
> -{
> -    ULONG               Index;
> -
> -    for (Index = 0; Ansi[Index].Buffer != NULL; Index++)
> -        __FdoFree(Ansi[Index].Buffer);
> -
> -    __FdoFree(Ansi);
> -}
> -
> -
>  static DECLSPEC_NOINLINE VOID
>  FdoParseResources(
>      IN  PXENIFACE_FDO             Fdo,
> @@ -649,17 +569,19 @@ FdoParseResources(
>      }
>  }
> 
> -static FORCEINLINE NTSTATUS
> -__FdoD3ToD0(
> +static DECLSPEC_NOINLINE NTSTATUS
> +FdoD3ToD0(
>      IN  PXENIFACE_FDO Fdo
>      )
>  {
> -    POWER_STATE     PowerState;
> +    KIRQL           Irql;
>      NTSTATUS        status;
> +    POWER_STATE     PowerState;
> 
> -    Trace("====>\n");
> +    ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
> +
> +    KeRaiseIrql(DISPATCH_LEVEL, &Irql);
> 
> -    ASSERT3U(KeGetCurrentIrql(), ==, DISPATCH_LEVEL);
>      ASSERT3U(__FdoGetDevicePowerState(Fdo), ==, PowerDeviceD3);
> 
>      status = XENBUS_STORE(Acquire, &Fdo->StoreInterface);
> @@ -685,85 +607,13 @@ __FdoD3ToD0(
>      if (!NT_SUCCESS(status))
>          goto fail4;
> 
> -    __FdoSetDevicePowerState(Fdo, PowerDeviceD0);
> -
> -    PowerState.DeviceState = PowerDeviceD0;
> -    PoSetPowerState(Fdo->Dx->DeviceObject,
> -                    DevicePowerState,
> -                    PowerState);
> -
> -    Trace("<====\n");
> -
> -    return STATUS_SUCCESS;
> -
> -fail4:
> -    Error("fail4\n");
> -    XENBUS_GNTTAB(Release, &Fdo->GnttabInterface);
> -
> -fail3:
> -    Error("fail3\n");
> -    XENBUS_EVTCHN(Release, &Fdo->EvtchnInterface);
> -
> -fail2:
> -    Error("fail2\n");
> -    XENBUS_STORE(Release, &Fdo->StoreInterface);
> -
> -fail1:
> -    Error("fail1 (%08x)\n", status);
> -
> -    return status;
> -}
> -
> -static FORCEINLINE VOID
> -__FdoD0ToD3(
> -    IN  PXENIFACE_FDO Fdo
> -    )
> -{
> -    POWER_STATE     PowerState;
> -
> -    Trace("====>\n");
> -
> -    ASSERT3U(KeGetCurrentIrql(), ==, DISPATCH_LEVEL);
> -    ASSERT3U(__FdoGetDevicePowerState(Fdo), ==, PowerDeviceD0);
> -
> -    PowerState.DeviceState = PowerDeviceD3;
> -    PoSetPowerState(Fdo->Dx->DeviceObject,
> -                    DevicePowerState,
> -                    PowerState);
> -
> -    __FdoSetDevicePowerState(Fdo, PowerDeviceD3);
> -
> -    XENBUS_GNTTAB(DestroyCache, &Fdo->GnttabInterface, Fdo-
> >GnttabCache);
> -    XENBUS_GNTTAB(Release, &Fdo->GnttabInterface);
> -    XENBUS_EVTCHN(Release, &Fdo->EvtchnInterface);
> -    XENBUS_STORE(Release, &Fdo->StoreInterface);
> -
> -    Trace("<====\n");
> -}
> -
> -static DECLSPEC_NOINLINE NTSTATUS
> -FdoD3ToD0(
> -    IN  PXENIFACE_FDO Fdo
> -    )
> -{
> -    KIRQL           Irql;
> -    NTSTATUS        status;
> -
> -    ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
> -
> -    KeRaiseIrql(DISPATCH_LEVEL, &Irql);
> -
> -    status = __FdoD3ToD0(Fdo);
> -    if (!NT_SUCCESS(status))
> -        goto fail1;
> -
>      status = XENBUS_SUSPEND(Acquire, &Fdo->SuspendInterface);
>      if (!NT_SUCCESS(status))
> -        goto fail2;
> +        goto fail5;
> 
>      status = XENBUS_SHARED_INFO(Acquire, &Fdo->SharedInfoInterface);
>      if (!NT_SUCCESS(status))
> -        goto fail3;
> +        goto fail6;
> 
>      status = XENBUS_SUSPEND(Register,
>                              &Fdo->SuspendInterface,
> @@ -772,7 +622,14 @@ FdoD3ToD0(
>                              Fdo,
>                              &Fdo->SuspendCallbackLate);
>      if (!NT_SUCCESS(status))
> -        goto fail4;
> +        goto fail7;
> +
> +    __FdoSetDevicePowerState(Fdo, PowerDeviceD0);
> +
> +    PowerState.DeviceState = PowerDeviceD0;
> +    PoSetPowerState(Fdo->Dx->DeviceObject,
> +                    DevicePowerState,
> +                    PowerState);
> 
>      Fdo->InterfacesAcquired = TRUE;
>      KeLowerIrql(Irql);
> @@ -781,20 +638,38 @@ FdoD3ToD0(
> 
>      return STATUS_SUCCESS;
> 
> +fail7:
> +    Error("fail7\n");
> +
> +    XENBUS_SHARED_INFO(Release, &Fdo->SharedInfoInterface);
> +
> +fail6:
> +    Error("fail6\n");
> +
> +    XENBUS_SUSPEND(Release, &Fdo->SuspendInterface);
> +
> +fail5:
> +    Error("fail5\n");
> +
> +    XENBUS_GNTTAB(DestroyCache,
> +                  &Fdo->GnttabInterface,
> +                  Fdo->GnttabCache);
> +    Fdo->GnttabCache = NULL;
> +
>  fail4:
>      Error("fail4\n");
> 
> -    XENBUS_SHARED_INFO(Release, &Fdo->SharedInfoInterface);
> +    XENBUS_GNTTAB(Release, &Fdo->GnttabInterface);
> 
>  fail3:
>      Error("fail3\n");
> 
> -    XENBUS_SUSPEND(Release, &Fdo->SuspendInterface);
> +    XENBUS_EVTCHN(Release, &Fdo->EvtchnInterface);
> 
>  fail2:
>      Error("fail2\n");
> 
> -    __FdoD0ToD3(Fdo);
> +    XENBUS_STORE(Release, &Fdo->StoreInterface);
> 
>  fail1:
>      Error("fail1 (%08x)\n", status);
> @@ -810,12 +685,14 @@ FdoD0ToD3(
>      )
>  {
>      KIRQL           Irql;
> +    POWER_STATE     PowerState;
> 
>      ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
> 
>      WmiSessionsSuspendAll(Fdo);
> 
>      KeRaiseIrql(DISPATCH_LEVEL, &Irql);
> +
>      Fdo->InterfacesAcquired = FALSE;
> 
>      XENBUS_SUSPEND(Deregister,
> @@ -824,10 +701,23 @@ FdoD0ToD3(
>      Fdo->SuspendCallbackLate = NULL;
> 
>      XENBUS_SHARED_INFO(Release, &Fdo->SharedInfoInterface);
> -
>      XENBUS_SUSPEND(Release, &Fdo->SuspendInterface);
> 
> -    __FdoD0ToD3(Fdo);
> +    XENBUS_GNTTAB(DestroyCache,
> +                  &Fdo->GnttabInterface,
> +                  Fdo->GnttabCache);
> +    Fdo->GnttabCache = NULL;
> +
> +    XENBUS_GNTTAB(Release, &Fdo->GnttabInterface);
> +    XENBUS_EVTCHN(Release, &Fdo->EvtchnInterface);
> +    XENBUS_STORE(Release, &Fdo->StoreInterface);
> +
> +    PowerState.DeviceState = PowerDeviceD3;
> +    PoSetPowerState(Fdo->Dx->DeviceObject,
> +                    DevicePowerState,
> +                    PowerState);
> +
> +    __FdoSetDevicePowerState(Fdo, PowerDeviceD3);
> 
>      KeLowerIrql(Irql);
>  }
> @@ -912,7 +802,6 @@ fail3:
>      FdoS3ToS4(Fdo);
>      __FdoSetSystemPowerState(Fdo, PowerSystemShutdown);
> 
> -
>      RtlZeroMemory(&Fdo->Resource, sizeof (FDO_RESOURCE) *
> RESOURCE_COUNT);
> 
>  fail1:
> --
> 1.9.4.msysgit.1
> 
> 
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

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

From win-pv-devel-bounces@lists.xenproject.org Mon Nov 02 13:41:36 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 02 Nov 2015 13:41:36 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZtFMe-0006Iv-GR; Mon, 02 Nov 2015 13:41:36 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=74177c93e=Paul.Durrant@citrix.com>)
	id 1ZtFMd-0006Ip-PB
	for win-pv-devel@lists.xenproject.org; Mon, 02 Nov 2015 13:41:35 +0000
Received: from [85.158.139.211] by server-17.bemta-5.messagelabs.com id
	4A/F4-18107-F0867365; Mon, 02 Nov 2015 13:41:35 +0000
X-Env-Sender: prvs=74177c93e=Paul.Durrant@citrix.com
X-Msg-Ref: server-11.tower-206.messagelabs.com!1446471694!263709!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 51124 invoked from network); 2 Nov 2015 13:41:34 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-11.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	2 Nov 2015 13:41:34 -0000
X-IronPort-AV: E=Sophos;i="5.20,234,1444694400"; 
   d="scan'208";a="6698585"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Owen Smith <owen.smith@citrix.com>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [PATCH 5/6] Fold __FdoD0ToD3/__FdoD3ToD0 into
	caller	Remove redundant functions
Thread-Index: AQHREll39WNrKONg2kiewB6+ExaRap6Iw75Q
Date: Mon, 2 Nov 2015 13:41:33 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F644D03@AMSPEX01CL01.citrite.net>
References: <1446130187-30460-1-git-send-email-owen.smith@citrix.com>
	<1446130187-30460-6-git-send-email-owen.smith@citrix.com>
In-Reply-To: <1446130187-30460-6-git-send-email-owen.smith@citrix.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Cc: Owen Smith <owen.smith@citrix.com>
Subject: Re: [win-pv-devel] [PATCH 5/6] Fold __FdoD0ToD3/__FdoD3ToD0 into
 caller	Remove redundant functions
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> bounces@lists.xenproject.org] On Behalf Of Owen Smith
> Sent: 29 October 2015 14:50
> To: win-pv-devel@lists.xenproject.org
> Cc: Owen Smith
> Subject: [win-pv-devel] [PATCH 5/6] Fold __FdoD0ToD3/__FdoD3ToD0 into
> caller Remove redundant functions
> 
> Signed-off-by: Owen Smith <owen.smith@citrix.com>

Acked-by: Paul Durrant <paul.durrant@citrix.com>

> ---
>  src/xeniface/fdo.c | 221 +++++++++++++----------------------------------------
>  1 file changed, 55 insertions(+), 166 deletions(-)
> 
> diff --git a/src/xeniface/fdo.c b/src/xeniface/fdo.c
> index 2b3e44d..c1a9a8f 100644
> --- a/src/xeniface/fdo.c
> +++ b/src/xeniface/fdo.c
> @@ -522,86 +522,6 @@ FdoReleaseMutex(
>          FdoDestroy(Fdo);
>  }
> 
> -
> -static FORCEINLINE PANSI_STRING
> -__FdoMultiSzToUpcaseAnsi(
> -    IN  PCHAR       Buffer
> -    )
> -{
> -    PANSI_STRING    Ansi;
> -    LONG            Index;
> -    LONG            Count;
> -    NTSTATUS        status;
> -
> -    Index = 0;
> -    Count = 0;
> -    for (;;) {
> -        if (Buffer[Index] == '\0') {
> -            Count++;
> -            Index++;
> -
> -            // Check for double NUL
> -            if (Buffer[Index] == '\0')
> -                break;
> -        } else {
> -            Buffer[Index] = (CHAR)toupper(Buffer[Index]);
> -            Index++;
> -        }
> -    }
> -
> -    Ansi = (PANSI_STRING)__FdoAllocate(sizeof (ANSI_STRING) * (Count +
> 1));
> -
> -    status = STATUS_NO_MEMORY;
> -    if (Ansi == NULL)
> -        goto fail1;
> -
> -    for (Index = 0; Index < Count; Index++) {
> -        ULONG   Length;
> -
> -        Length = (ULONG)strlen(Buffer);
> -        Ansi[Index].MaximumLength = (USHORT)(Length + 1);
> -        Ansi[Index].Buffer =
> (PCHAR)__FdoAllocate(Ansi[Index].MaximumLength);
> -
> -        status = STATUS_NO_MEMORY;
> -        if (Ansi[Index].Buffer == NULL)
> -            goto fail2;
> -
> -        RtlCopyMemory(Ansi[Index].Buffer, Buffer, Length);
> -        Ansi[Index].Length = (USHORT)Length;
> -
> -        Buffer += Length + 1;
> -    }
> -
> -    return Ansi;
> -
> -fail2:
> -    Error("fail2\n");
> -
> -    while (--Index >= 0)
> -        __FdoFree(Ansi[Index].Buffer);
> -
> -    __FdoFree(Ansi);
> -
> -fail1:
> -    Error("fail1 (%08x)\n", status);
> -
> -    return NULL;
> -}
> -
> -static FORCEINLINE VOID
> -__FdoFreeAnsi(
> -    IN  PANSI_STRING    Ansi
> -    )
> -{
> -    ULONG               Index;
> -
> -    for (Index = 0; Ansi[Index].Buffer != NULL; Index++)
> -        __FdoFree(Ansi[Index].Buffer);
> -
> -    __FdoFree(Ansi);
> -}
> -
> -
>  static DECLSPEC_NOINLINE VOID
>  FdoParseResources(
>      IN  PXENIFACE_FDO             Fdo,
> @@ -649,17 +569,19 @@ FdoParseResources(
>      }
>  }
> 
> -static FORCEINLINE NTSTATUS
> -__FdoD3ToD0(
> +static DECLSPEC_NOINLINE NTSTATUS
> +FdoD3ToD0(
>      IN  PXENIFACE_FDO Fdo
>      )
>  {
> -    POWER_STATE     PowerState;
> +    KIRQL           Irql;
>      NTSTATUS        status;
> +    POWER_STATE     PowerState;
> 
> -    Trace("====>\n");
> +    ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
> +
> +    KeRaiseIrql(DISPATCH_LEVEL, &Irql);
> 
> -    ASSERT3U(KeGetCurrentIrql(), ==, DISPATCH_LEVEL);
>      ASSERT3U(__FdoGetDevicePowerState(Fdo), ==, PowerDeviceD3);
> 
>      status = XENBUS_STORE(Acquire, &Fdo->StoreInterface);
> @@ -685,85 +607,13 @@ __FdoD3ToD0(
>      if (!NT_SUCCESS(status))
>          goto fail4;
> 
> -    __FdoSetDevicePowerState(Fdo, PowerDeviceD0);
> -
> -    PowerState.DeviceState = PowerDeviceD0;
> -    PoSetPowerState(Fdo->Dx->DeviceObject,
> -                    DevicePowerState,
> -                    PowerState);
> -
> -    Trace("<====\n");
> -
> -    return STATUS_SUCCESS;
> -
> -fail4:
> -    Error("fail4\n");
> -    XENBUS_GNTTAB(Release, &Fdo->GnttabInterface);
> -
> -fail3:
> -    Error("fail3\n");
> -    XENBUS_EVTCHN(Release, &Fdo->EvtchnInterface);
> -
> -fail2:
> -    Error("fail2\n");
> -    XENBUS_STORE(Release, &Fdo->StoreInterface);
> -
> -fail1:
> -    Error("fail1 (%08x)\n", status);
> -
> -    return status;
> -}
> -
> -static FORCEINLINE VOID
> -__FdoD0ToD3(
> -    IN  PXENIFACE_FDO Fdo
> -    )
> -{
> -    POWER_STATE     PowerState;
> -
> -    Trace("====>\n");
> -
> -    ASSERT3U(KeGetCurrentIrql(), ==, DISPATCH_LEVEL);
> -    ASSERT3U(__FdoGetDevicePowerState(Fdo), ==, PowerDeviceD0);
> -
> -    PowerState.DeviceState = PowerDeviceD3;
> -    PoSetPowerState(Fdo->Dx->DeviceObject,
> -                    DevicePowerState,
> -                    PowerState);
> -
> -    __FdoSetDevicePowerState(Fdo, PowerDeviceD3);
> -
> -    XENBUS_GNTTAB(DestroyCache, &Fdo->GnttabInterface, Fdo-
> >GnttabCache);
> -    XENBUS_GNTTAB(Release, &Fdo->GnttabInterface);
> -    XENBUS_EVTCHN(Release, &Fdo->EvtchnInterface);
> -    XENBUS_STORE(Release, &Fdo->StoreInterface);
> -
> -    Trace("<====\n");
> -}
> -
> -static DECLSPEC_NOINLINE NTSTATUS
> -FdoD3ToD0(
> -    IN  PXENIFACE_FDO Fdo
> -    )
> -{
> -    KIRQL           Irql;
> -    NTSTATUS        status;
> -
> -    ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
> -
> -    KeRaiseIrql(DISPATCH_LEVEL, &Irql);
> -
> -    status = __FdoD3ToD0(Fdo);
> -    if (!NT_SUCCESS(status))
> -        goto fail1;
> -
>      status = XENBUS_SUSPEND(Acquire, &Fdo->SuspendInterface);
>      if (!NT_SUCCESS(status))
> -        goto fail2;
> +        goto fail5;
> 
>      status = XENBUS_SHARED_INFO(Acquire, &Fdo->SharedInfoInterface);
>      if (!NT_SUCCESS(status))
> -        goto fail3;
> +        goto fail6;
> 
>      status = XENBUS_SUSPEND(Register,
>                              &Fdo->SuspendInterface,
> @@ -772,7 +622,14 @@ FdoD3ToD0(
>                              Fdo,
>                              &Fdo->SuspendCallbackLate);
>      if (!NT_SUCCESS(status))
> -        goto fail4;
> +        goto fail7;
> +
> +    __FdoSetDevicePowerState(Fdo, PowerDeviceD0);
> +
> +    PowerState.DeviceState = PowerDeviceD0;
> +    PoSetPowerState(Fdo->Dx->DeviceObject,
> +                    DevicePowerState,
> +                    PowerState);
> 
>      Fdo->InterfacesAcquired = TRUE;
>      KeLowerIrql(Irql);
> @@ -781,20 +638,38 @@ FdoD3ToD0(
> 
>      return STATUS_SUCCESS;
> 
> +fail7:
> +    Error("fail7\n");
> +
> +    XENBUS_SHARED_INFO(Release, &Fdo->SharedInfoInterface);
> +
> +fail6:
> +    Error("fail6\n");
> +
> +    XENBUS_SUSPEND(Release, &Fdo->SuspendInterface);
> +
> +fail5:
> +    Error("fail5\n");
> +
> +    XENBUS_GNTTAB(DestroyCache,
> +                  &Fdo->GnttabInterface,
> +                  Fdo->GnttabCache);
> +    Fdo->GnttabCache = NULL;
> +
>  fail4:
>      Error("fail4\n");
> 
> -    XENBUS_SHARED_INFO(Release, &Fdo->SharedInfoInterface);
> +    XENBUS_GNTTAB(Release, &Fdo->GnttabInterface);
> 
>  fail3:
>      Error("fail3\n");
> 
> -    XENBUS_SUSPEND(Release, &Fdo->SuspendInterface);
> +    XENBUS_EVTCHN(Release, &Fdo->EvtchnInterface);
> 
>  fail2:
>      Error("fail2\n");
> 
> -    __FdoD0ToD3(Fdo);
> +    XENBUS_STORE(Release, &Fdo->StoreInterface);
> 
>  fail1:
>      Error("fail1 (%08x)\n", status);
> @@ -810,12 +685,14 @@ FdoD0ToD3(
>      )
>  {
>      KIRQL           Irql;
> +    POWER_STATE     PowerState;
> 
>      ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
> 
>      WmiSessionsSuspendAll(Fdo);
> 
>      KeRaiseIrql(DISPATCH_LEVEL, &Irql);
> +
>      Fdo->InterfacesAcquired = FALSE;
> 
>      XENBUS_SUSPEND(Deregister,
> @@ -824,10 +701,23 @@ FdoD0ToD3(
>      Fdo->SuspendCallbackLate = NULL;
> 
>      XENBUS_SHARED_INFO(Release, &Fdo->SharedInfoInterface);
> -
>      XENBUS_SUSPEND(Release, &Fdo->SuspendInterface);
> 
> -    __FdoD0ToD3(Fdo);
> +    XENBUS_GNTTAB(DestroyCache,
> +                  &Fdo->GnttabInterface,
> +                  Fdo->GnttabCache);
> +    Fdo->GnttabCache = NULL;
> +
> +    XENBUS_GNTTAB(Release, &Fdo->GnttabInterface);
> +    XENBUS_EVTCHN(Release, &Fdo->EvtchnInterface);
> +    XENBUS_STORE(Release, &Fdo->StoreInterface);
> +
> +    PowerState.DeviceState = PowerDeviceD3;
> +    PoSetPowerState(Fdo->Dx->DeviceObject,
> +                    DevicePowerState,
> +                    PowerState);
> +
> +    __FdoSetDevicePowerState(Fdo, PowerDeviceD3);
> 
>      KeLowerIrql(Irql);
>  }
> @@ -912,7 +802,6 @@ fail3:
>      FdoS3ToS4(Fdo);
>      __FdoSetSystemPowerState(Fdo, PowerSystemShutdown);
> 
> -
>      RtlZeroMemory(&Fdo->Resource, sizeof (FDO_RESOURCE) *
> RESOURCE_COUNT);
> 
>  fail1:
> --
> 1.9.4.msysgit.1
> 
> 
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

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

From win-pv-devel-bounces@lists.xenproject.org Mon Nov 02 13:42:18 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 02 Nov 2015 13:42:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZtFNK-0006Jq-J9; Mon, 02 Nov 2015 13:42:18 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=74177c93e=Paul.Durrant@citrix.com>)
	id 1ZtFNI-0006Jj-Uh
	for win-pv-devel@lists.xenproject.org; Mon, 02 Nov 2015 13:42:17 +0000
Received: from [85.158.137.68] by server-10.bemta-3.messagelabs.com id
	E9/8D-02804-83867365; Mon, 02 Nov 2015 13:42:16 +0000
X-Env-Sender: prvs=74177c93e=Paul.Durrant@citrix.com
X-Msg-Ref: server-14.tower-31.messagelabs.com!1446471735!232375!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 18909 invoked from network); 2 Nov 2015 13:42:15 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-14.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	2 Nov 2015 13:42:15 -0000
X-IronPort-AV: E=Sophos;i="5.20,234,1444694400"; 
   d="scan'208";a="6698642"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Owen Smith <owen.smith@citrix.com>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [PATCH 6/6] Ensure defunct watches have NULL
	handles
Thread-Index: AQHREllwwxzRDNR+EkOmY2ClgrACG56Iw+9A
Date: Mon, 2 Nov 2015 13:42:15 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F644D17@AMSPEX01CL01.citrite.net>
References: <1446130187-30460-1-git-send-email-owen.smith@citrix.com>
	<1446130187-30460-7-git-send-email-owen.smith@citrix.com>
In-Reply-To: <1446130187-30460-7-git-send-email-owen.smith@citrix.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Cc: Owen Smith <owen.smith@citrix.com>
Subject: Re: [win-pv-devel] [PATCH 6/6] Ensure defunct watches have NULL
 handles
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> bounces@lists.xenproject.org] On Behalf Of Owen Smith
> Sent: 29 October 2015 14:50
> To: win-pv-devel@lists.xenproject.org
> Cc: Owen Smith
> Subject: [win-pv-devel] [PATCH 6/6] Ensure defunct watches have NULL
> handles
> 
> Signed-off-by: Owen Smith <owen.smith@citrix.com>

Acked-by: Paul Durrant <paul.durrant@citrix.com>

> ---
>  src/xeniface/wmi.c | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/src/xeniface/wmi.c b/src/xeniface/wmi.c
> index 0f63ef5..c73e990 100644
> --- a/src/xeniface/wmi.c
> +++ b/src/xeniface/wmi.c
> @@ -884,6 +884,7 @@ VOID WatchCallbackThread(__in PVOID StartContext)
> {
> 
> XenIfaceDebugPrint(WARNING,"SessionSuspendResumeUnwatch %p\n",
> watch->watchhandle);
> 
>                          XENBUS_STORE(WatchRemove, &watch->fdoData-
> >StoreInterface, watch->watchhandle);
> +                        watch->watchhandle = NULL;
>                          StartWatch(watch->fdoData, watch);
>                      }
>                  }
> @@ -1187,6 +1188,7 @@ RemoveSessionLocked(XENIFACE_FDO *fdoData,
>      SessionRemoveWatchesLocked(session);
>      if (session->transaction != NULL) {
>          XENBUS_STORE(TransactionEnd, &fdoData->StoreInterface, session-
> >transaction, FALSE);
> +        session->transaction = NULL;
>      }
>      session->closing = TRUE;
>      KeSetEvent(&session->SessionChangedEvent, IO_NO_INCREMENT,
> FALSE);
> @@ -1230,6 +1232,7 @@ void
> SessionUnwatchWatchesLocked(XenStoreSession *session)
>          XenIfaceDebugPrint(TRACE,"Suspend unwatch %p\n", watch-
> >watchhandle);
> 
>          XENBUS_STORE(WatchRemove, &watch->fdoData->StoreInterface,
> watch->watchhandle);
> +        watch->watchhandle = NULL;
>          watch = (XenStoreWatch *)watch->listentry.Flink;
>      }
>      XenIfaceDebugPrint(TRACE, "WATCHLIST for session %p-----------
> \n",session);
> --
> 1.9.4.msysgit.1
> 
> 
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

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

From win-pv-devel-bounces@lists.xenproject.org Mon Nov 02 13:42:18 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 02 Nov 2015 13:42:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZtFNK-0006Jq-J9; Mon, 02 Nov 2015 13:42:18 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=74177c93e=Paul.Durrant@citrix.com>)
	id 1ZtFNI-0006Jj-Uh
	for win-pv-devel@lists.xenproject.org; Mon, 02 Nov 2015 13:42:17 +0000
Received: from [85.158.137.68] by server-10.bemta-3.messagelabs.com id
	E9/8D-02804-83867365; Mon, 02 Nov 2015 13:42:16 +0000
X-Env-Sender: prvs=74177c93e=Paul.Durrant@citrix.com
X-Msg-Ref: server-14.tower-31.messagelabs.com!1446471735!232375!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 18909 invoked from network); 2 Nov 2015 13:42:15 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-14.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	2 Nov 2015 13:42:15 -0000
X-IronPort-AV: E=Sophos;i="5.20,234,1444694400"; 
   d="scan'208";a="6698642"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Owen Smith <owen.smith@citrix.com>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [PATCH 6/6] Ensure defunct watches have NULL
	handles
Thread-Index: AQHREllwwxzRDNR+EkOmY2ClgrACG56Iw+9A
Date: Mon, 2 Nov 2015 13:42:15 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F644D17@AMSPEX01CL01.citrite.net>
References: <1446130187-30460-1-git-send-email-owen.smith@citrix.com>
	<1446130187-30460-7-git-send-email-owen.smith@citrix.com>
In-Reply-To: <1446130187-30460-7-git-send-email-owen.smith@citrix.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Cc: Owen Smith <owen.smith@citrix.com>
Subject: Re: [win-pv-devel] [PATCH 6/6] Ensure defunct watches have NULL
 handles
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> bounces@lists.xenproject.org] On Behalf Of Owen Smith
> Sent: 29 October 2015 14:50
> To: win-pv-devel@lists.xenproject.org
> Cc: Owen Smith
> Subject: [win-pv-devel] [PATCH 6/6] Ensure defunct watches have NULL
> handles
> 
> Signed-off-by: Owen Smith <owen.smith@citrix.com>

Acked-by: Paul Durrant <paul.durrant@citrix.com>

> ---
>  src/xeniface/wmi.c | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/src/xeniface/wmi.c b/src/xeniface/wmi.c
> index 0f63ef5..c73e990 100644
> --- a/src/xeniface/wmi.c
> +++ b/src/xeniface/wmi.c
> @@ -884,6 +884,7 @@ VOID WatchCallbackThread(__in PVOID StartContext)
> {
> 
> XenIfaceDebugPrint(WARNING,"SessionSuspendResumeUnwatch %p\n",
> watch->watchhandle);
> 
>                          XENBUS_STORE(WatchRemove, &watch->fdoData-
> >StoreInterface, watch->watchhandle);
> +                        watch->watchhandle = NULL;
>                          StartWatch(watch->fdoData, watch);
>                      }
>                  }
> @@ -1187,6 +1188,7 @@ RemoveSessionLocked(XENIFACE_FDO *fdoData,
>      SessionRemoveWatchesLocked(session);
>      if (session->transaction != NULL) {
>          XENBUS_STORE(TransactionEnd, &fdoData->StoreInterface, session-
> >transaction, FALSE);
> +        session->transaction = NULL;
>      }
>      session->closing = TRUE;
>      KeSetEvent(&session->SessionChangedEvent, IO_NO_INCREMENT,
> FALSE);
> @@ -1230,6 +1232,7 @@ void
> SessionUnwatchWatchesLocked(XenStoreSession *session)
>          XenIfaceDebugPrint(TRACE,"Suspend unwatch %p\n", watch-
> >watchhandle);
> 
>          XENBUS_STORE(WatchRemove, &watch->fdoData->StoreInterface,
> watch->watchhandle);
> +        watch->watchhandle = NULL;
>          watch = (XenStoreWatch *)watch->listentry.Flink;
>      }
>      XenIfaceDebugPrint(TRACE, "WATCHLIST for session %p-----------
> \n",session);
> --
> 1.9.4.msysgit.1
> 
> 
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

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

From win-pv-devel-bounces@lists.xenproject.org Tue Nov 03 11:39:48 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 03 Nov 2015 11:39:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZtZwJ-0006RZ-58; Tue, 03 Nov 2015 11:39:47 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=7427643a7=Paul.Durrant@citrix.com>)
	id 1ZtZwH-0006RR-Gk
	for win-pv-devel@lists.xenproject.org; Tue, 03 Nov 2015 11:39:45 +0000
Received: from [85.158.139.211] by server-7.bemta-5.messagelabs.com id
	8D/4B-13905-00D98365; Tue, 03 Nov 2015 11:39:44 +0000
X-Env-Sender: prvs=7427643a7=Paul.Durrant@citrix.com
X-Msg-Ref: server-10.tower-206.messagelabs.com!1446550312!595745!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=1.7 required=7.0 tests=BIZ_TLD,received_headers: 
	No Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 30723 invoked from network); 3 Nov 2015 11:31:52 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-10.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	3 Nov 2015 11:31:52 -0000
X-IronPort-AV: E=Sophos;i="5.20,238,1444694400"; 
   d="scan'208";a="6780842"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Fabio Fantoni <fabio.fantoni@m2r.biz>, =?utf-8?B?w4lsacOhcyBUYW3DoXM=?=
	<et@etit.hu>
Thread-Topic: [win-pv-devel] [Xen-users] Removing old glpv windows drivers
	to install new -> inaccessible boot device
Thread-Index: AQHREi2hjyog60o340+Ks5/BzOr7hZ6C7wOAgADd5wCAAXNkAIAE8c0g
Date: Tue, 3 Nov 2015 11:31:51 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F6468C8@AMSPEX01CL01.citrite.net>
References: <562F93F5.9070505@etit.hu>
	<CABoYbGryR=rupt2DUROLeaCoYJqxVBC0VMpSiM1bjH4H2p-KZg@mail.gmail.com>
	<56308C66.1030806@etit.hu>
	<CAFLBxZZSO_re+Wt4_b1pnmgS33hXJS_SRhnvse9QW-NRpSTQ1A@mail.gmail.com>
	<563291B1.9080800@etit.hu>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F63DAEF@AMSPEX01CL01.citrite.net>
	<56348362.7050608@m2r.biz>
In-Reply-To: <56348362.7050608@m2r.biz>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Cc: "xen-users@lists.xen.org" <xen-users@lists.xen.org>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Subject: Re: [win-pv-devel] [Xen-users] Removing old glpv windows drivers to
 install new -> inaccessible boot device
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBGYWJpbyBGYW50b25pIFttYWls
dG86ZmFiaW8uZmFudG9uaUBtMnIuYml6XQ0KPiBTZW50OiAzMSBPY3RvYmVyIDIwMTUgMDk6MDEN
Cj4gVG86IFBhdWwgRHVycmFudDsgw4lsacOhcyBUYW3DoXMNCj4gQ2M6IHhlbi11c2Vyc0BsaXN0
cy54ZW4ub3JnOyB3aW4tcHYtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcNCj4gU3ViamVjdDog
UmU6IFt3aW4tcHYtZGV2ZWxdIFtYZW4tdXNlcnNdIFJlbW92aW5nIG9sZCBnbHB2IHdpbmRvd3Mg
ZHJpdmVycw0KPiB0byBpbnN0YWxsIG5ldyAtPiBpbmFjY2Vzc2libGUgYm9vdCBkZXZpY2UNCj4g
DQo+IElsIDMwLzEwLzIwMTUgMTA6NTQsIFBhdWwgRHVycmFudCBoYSBzY3JpdHRvOg0KPiA+PiAt
LS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+PiBGcm9tOiB3aW4tcHYtZGV2ZWwtYm91bmNl
c0BsaXN0cy54ZW5wcm9qZWN0Lm9yZyBbbWFpbHRvOndpbi1wdi1kZXZlbC0NCj4gPj4gYm91bmNl
c0BsaXN0cy54ZW5wcm9qZWN0Lm9yZ10gT24gQmVoYWxmIE9mIMOJbGnDoXMgVGFtw6FzDQo+ID4+
IFNlbnQ6IDI5IE9jdG9iZXIgMjAxNSAyMTozOA0KPiA+PiBDYzogeGVuLXVzZXJzQGxpc3RzLnhl
bi5vcmc7IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZw0KPiA+PiBTdWJqZWN0OiBS
ZTogW3dpbi1wdi1kZXZlbF0gW1hlbi11c2Vyc10gUmVtb3Zpbmcgb2xkIGdscHYgd2luZG93cw0K
PiBkcml2ZXJzDQo+ID4+IHRvIGluc3RhbGwgbmV3IC0+IGluYWNjZXNzaWJsZSBib290IGRldmlj
ZQ0KPiA+Pg0KPiA+PiBIaSBhbGwuIFRoYW5rIHlvdSBmb3IgdGhlIHRpcHMuDQo+ID4+DQo+ID4+
IEhlcmUgaXMgd2hhdCBuZWVkZWQgdG8gYmUgZG9uZS4NCj4gPj4NCj4gPj4gLSBCb290IGluIHNh
ZmUgbW9kZS4NCj4gPj4gLSB1c2UgdW5pbnN0YWxsLmJhdCB0byByZW1vdmUgb2xkIGRyaXZlcnMu
DQo+ID4+IC0gdXNlIGNjbGVhbmVyIG9yIHNpbWlsYXIgYXBwbGljYXRpb24gdG8gcmVtb3ZlIG9s
ZCBkcml2ZXIgaW5zdGFsbCBlbnRyaWVzLg0KPiA+PiAtIHNjYW4gdGhyb3VnaCB0aGUgZmlsZSBz
eXN0ZW0gZW5kIGRlbGV0ZSB4ZW4qDQo+ID4+IC0gYmNkZWRpdCAtc2V0IFRFU1RTSUdOSU5HIE9O
DQo+ID4+IC0gaW5zdGFsbCBwZnggZmlsZXMgdG8gbG9jYWwgY29tcHV0ZXIgY2VydCBzdG9yZS4N
Cj4gPj4gLSByZWJvb3QgaW50byBzYWZlIG1vZGUNCj4gPj4gLSBpbnN0YWxsIG5ldyBkcml2ZXJz
ICh4ZW5idXMsIHhlbnZpZiwgZXRjKSB1c2luZyBkcGluc3QuZXhlIChhZG1pbiBtb2RlKQ0KPiA+
PiAtIHJlYm9vdCB0byBub3JtYWwgbW9kZSAodGhlcmUgd2lsbCBiZSBubyBuZXR3b3JrLCBubyB4
ZW4gZGV2aWNlcyBjYW4gYmUNCj4gPj4gc2VlbiwgZXRjIGZvciBzb21lIHJlYXNvbikNCj4gPj4g
LSBnbyB0byBoYXJkd2FyZSwgY2hlY2sgdW5rbm93biBQQ0kgZGV2aWNlIGFuZCBtYW51YWxseSBp
bnN0YWxsIHhlbmJ1cw0KPiA+PiBmb3IgdGhhdC4NCj4gPj4gLSBhZnRlciB0aGlzLCBhbGwgb3Ro
ZXIgZHJpdmVycyBhcHBlYXIgc3VkZGVubHkuDQo+ID4+IC0gcmVib290LCBkb25lLg0KPiA+Pg0K
PiA+PiBJdCB3b3VsZCBiZSBuaWNlIHRvIHJlbW92ZSB0aGUgdGVzdHNpZ25pbmcgdGhvdWdoLCBi
dXQgYXQgbGVzdCBpdCBpcw0KPiA+PiB3b3JraW5nIG5vdy4NCj4gPiBUbyBnZXQgcmlkIG9mIHRo
ZSBuZWVkIGZvciB0ZXN0c2lnbmluZyBpdCdzIG5lY2Vzc2FyeSBmb3IgZHJpdmVycyB0byBiZQ0K
PiAncmVhbGVhc2Ugc2lnbmVkJyBhbmQgaW4gdGhlIGNhc2Ugb2YgV2luZG93cyAxMCB0aGlzIG1l
YW5zIHRoYXQgdGhleSBoYXZlIHRvDQo+IGJlIHNpZ25lZCBkaXJlY3RseSBieSBNaWNyb3NvZnQu
IFRvIGFjaGlldmUgYWxsIHRoaXMgY2VydGlmaWNhdGVzIG11c3QgYmUNCj4gcHVyY2hhc2VkIGFu
ZCBmZWVzIG11c3QgYmUgcGFpZCB0byBNaWNyb3NvZnQgc28gYnVkZ2V0IGlzIHJlcXVpcmVkIGZy
b20NCj4gc29tZXdoZXJlLg0KPiA+DQo+ID4gICAgUGF1bA0KPiANCj4gQWJvdXQgYnV5aW5nIHRo
ZSBjZXJ0aWZpY2F0ZXMgYW5kIGFueSB0aGluZ3MgcmVsYXRlZCBzdGFydGluZyBhDQo+IGNyb3dk
ZnVuZGluZyB3b3VsZCBiZSByZWFsbHkgd2VsY29tZSwgaXNuJ3QgaXQ/IChpbiBzaXRlIGxpa2Ug
a2lja3N0YXJ0ZXIpDQo+IFNvIGFueW9uZSB3aG8gd2FudHMgY2FuIGNvbnRyaWJ1dGUgLSBJIHdp
bGwgY29udHJpYnV0ZSAtIG1vc3QgbGlrZWx5DQo+IGFsc28gdGhlIGNvbXBhbnkgd2hlcmUgSSdt
IHdvcmtpbmcgYW5kIEkgc3VwcG9zZSBvdGhlciBwZW9wbGUgd291bGQgaGVscA0KPiB0byBoYXZl
IG9mZmljaWFsIHNpZ25lZCBkcml2ZXJzIHRvby4NCj4gDQoNCldlIG1heSAgYmUgYWJsZSB0byBn
ZXQgZnVuZGluZyBmcm9tIHRoZSBYZW4gcHJvamVjdCBmb3IgdGhpcy4gSSdtIHdvcmtpbmcgb24g
aXQuDQoNCiAgUGF1bA0KDQo+IFRoYW5rcyBmb3IgYW55IHJlcGx5IGFuZCBzb3JyeSBmb3IgbXkg
YmFkIGVuZ2xpc2guDQo+IA0KPiA+DQo+ID4+IDIwMTUtMTAtMjkgMTA6Mzgga2VsdGV6w6lzc2Vs
LCBHZW9yZ2UgRHVubGFwIMOtcnRhOg0KPiA+Pj4gT24gV2VkLCBPY3QgMjgsIDIwMTUgYXQgODo1
MCBBTSwgw4lsacOhcyBUYW3DoXMgPGV0QGV0aXQuaHU+IHdyb3RlOg0KPiA+Pj4+IEhpLiBZZXMs
IEkgY29uZmlybSwgdGhhdCBib290aW5nIGludG8gc2FmZSBtb2RlIGlzIHBvc3NpYmxlLiBJIHR1
cm5lZCBvbg0KPiA+Pj4+IHRlc3RzaWduaW5nIHdpdGggYmNkZWRpdCwgYW5kIHRyaWVkIGluc3Rh
bGxpbmcgdGhlIGRyaXZlcnMgYWdhaW4uDQo+ID4+Pj4NCj4gPj4+PiBUaGUgaXNudGFsbCB3ZW50
IGZpbmUsIEkgY291bGQgcmVib290LiBVbmZvcnR1bmF0ZWx5IHNpbmNlIHRoZW4gKGl0IGlzDQo+
ID4+Pj4gbW9yZSB0aGVuIDggaG91cnMgbm93KSBJJ20gZmFjaW5nIHRoZSBhdHRhY2hlZCBzY3Jl
ZW4uIFRoZSBhbmltYXRpb24NCj4gaXMNCj4gPj4+PiBqdXN0IHJvbGxpbmcsIHJvbGxpbmcgcm9s
bGluZyBhbmQgbm90aGluZyBoYXBwZW5zLiBDUFUgdGlja3MgYXJlIHVzZWQsDQo+ID4+Pj4gc28g
SSBhc3N1bWUgc29tZXRoaW5nIGlzIGhhcHBlbmluZywgYnV0IGl0IHNlZW1lcyBwcmV0dHkgbXVj
aCBzdHVjay4NCj4gPj4+Pg0KPiA+Pj4+IEFueSBpZGVhcz8NCj4gPj4+IEkgKnRoaW5rKiB0aGUg
WGVuU2VydmVyIFBWIGRyaXZlcnMgYXJlIHVzaW5nIG1pbmlwb3J0OyBpbiB3aGljaCBjYXNlDQo+
ID4+PiB0aGlzIEtCIGFydGljbGUgbWlnaHQgYmUgb2YgdXNlOg0KPiA+Pj4NCj4gPj4+IGh0dHBz
Oi8vc3VwcG9ydC5taWNyb3NvZnQuY29tL2VuLXVzL2tiLzI3OTUzOTcNCj4gPj4+DQo+ID4+PiBQ
YXVsIER1cnJhbnQgY2FuIGNvcnJlY3QgbWUgaWYgSSdtIHdyb25nIGFib3V0IG1pbmlwb3J0IChh
bmQgbWF5IGJlDQo+ID4+PiBhYmxlIHRvIHBvaW50IHlvdSB0byBhIG1vcmUgdXNlZnVsIGZpeCBp
ZiBzbykuDQo+ID4+Pg0KPiA+Pj4gICAtR2VvcmdlDQo+ID4+Pg0KPiA+PiAtLQ0KPiA+Pg0KPiA+
Pg0KPiA+PiDDiWxpw6FzIFRhbcOhcw0KPiA+PiBUaG9tYXMgRWxpYXMNCj4gPj4NCj4gPj4gRVRJ
VFtud3Byb10gS0ZULCDDnGd5dmV6ZXTFkS1Iw6Fsw7N6YXRiaXp0b25zw6FnaSBzcGVjaWFsaXN0
YQ0KPiA+PiBFVElUW253cHJvXSBMdGQsIEdlbmVyYWwgTWFuYWdlci1OZXR3b3JrIHNlY3VyaXR5
IHNwZWNpYWxpc3QNCj4gPj4NCj4gPj4gVGVsLiBIVTogKzM2LzMwLTQ5Ny0xNjI2DQo+ID4+IFRl
bC4gREU6ICs0OS8xNjAtNjUxLTg3MjMNCj4gPj4gT3BlblBHUCBwdWJrZXk6IGh0dHA6Ly9ldGl0
Lmh1L2RvYy9ldC1wdWIuYXNjDQo+ID4+DQo+ID4+IE9rbGV2ZWxlcyBtw6lybsO2ay1pbmZvcm1h
dGlrdXMgKE1TQykNCj4gPj4gTWFzdGVyIG9mIFNjaWVuY2UgaW4gSW5mb3JtYXRpb24gVGVjaG5v
bG9neSAoTVNDKQ0KPiA+Pg0KPiA+PiBLYXBjc29sYXQ6IGh0dHA6Ly9ldGl0Lmh1L2luZGV4LnBo
cC9odS9rYXBjc29sYXQNCj4gPj4gSm9naSBueWlsYXRrb3phdDogaHR0cDovL2V0aXQuaHUvZGlz
Y2xhaW1lci1lbWFpbC1odS50eHQNCj4gPj4gQ29udGFjdDogaHR0cDovL2V0aXQuaHUvaW5kZXgu
cGhwL2VuL2NvbnRhY3QNCj4gPj4gRGlzY2xhaW1lcjogaHR0cDovL2V0aXQuaHUvZGlzY2xhaW1l
ci1lbWFpbC1lbi50eHQNCj4gPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXw0KPiA+IHdpbi1wdi1kZXZlbCBtYWlsaW5nIGxpc3QNCj4gPiB3aW4tcHYtZGV2
ZWxAbGlzdHMueGVucHJvamVjdC5vcmcNCj4gPiBodHRwOi8vbGlzdHMueGVucHJvamVjdC5vcmcv
Y2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL3dpbi1wdi1kZXZlbA0KDQpfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwp3aW4tcHYtZGV2ZWwgbWFpbGluZyBsaXN0
Cndpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwOi8vbGlzdHMueGVucHJvamVj
dC5vcmcvY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL3dpbi1wdi1kZXZlbA==

From win-pv-devel-bounces@lists.xenproject.org Tue Nov 03 11:39:48 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 03 Nov 2015 11:39:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZtZwJ-0006RZ-58; Tue, 03 Nov 2015 11:39:47 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=7427643a7=Paul.Durrant@citrix.com>)
	id 1ZtZwH-0006RR-Gk
	for win-pv-devel@lists.xenproject.org; Tue, 03 Nov 2015 11:39:45 +0000
Received: from [85.158.139.211] by server-7.bemta-5.messagelabs.com id
	8D/4B-13905-00D98365; Tue, 03 Nov 2015 11:39:44 +0000
X-Env-Sender: prvs=7427643a7=Paul.Durrant@citrix.com
X-Msg-Ref: server-10.tower-206.messagelabs.com!1446550312!595745!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=1.7 required=7.0 tests=BIZ_TLD,received_headers: 
	No Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 30723 invoked from network); 3 Nov 2015 11:31:52 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-10.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	3 Nov 2015 11:31:52 -0000
X-IronPort-AV: E=Sophos;i="5.20,238,1444694400"; 
   d="scan'208";a="6780842"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Fabio Fantoni <fabio.fantoni@m2r.biz>, =?utf-8?B?w4lsacOhcyBUYW3DoXM=?=
	<et@etit.hu>
Thread-Topic: [win-pv-devel] [Xen-users] Removing old glpv windows drivers
	to install new -> inaccessible boot device
Thread-Index: AQHREi2hjyog60o340+Ks5/BzOr7hZ6C7wOAgADd5wCAAXNkAIAE8c0g
Date: Tue, 3 Nov 2015 11:31:51 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F6468C8@AMSPEX01CL01.citrite.net>
References: <562F93F5.9070505@etit.hu>
	<CABoYbGryR=rupt2DUROLeaCoYJqxVBC0VMpSiM1bjH4H2p-KZg@mail.gmail.com>
	<56308C66.1030806@etit.hu>
	<CAFLBxZZSO_re+Wt4_b1pnmgS33hXJS_SRhnvse9QW-NRpSTQ1A@mail.gmail.com>
	<563291B1.9080800@etit.hu>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F63DAEF@AMSPEX01CL01.citrite.net>
	<56348362.7050608@m2r.biz>
In-Reply-To: <56348362.7050608@m2r.biz>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Cc: "xen-users@lists.xen.org" <xen-users@lists.xen.org>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Subject: Re: [win-pv-devel] [Xen-users] Removing old glpv windows drivers to
 install new -> inaccessible boot device
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBGYWJpbyBGYW50b25pIFttYWls
dG86ZmFiaW8uZmFudG9uaUBtMnIuYml6XQ0KPiBTZW50OiAzMSBPY3RvYmVyIDIwMTUgMDk6MDEN
Cj4gVG86IFBhdWwgRHVycmFudDsgw4lsacOhcyBUYW3DoXMNCj4gQ2M6IHhlbi11c2Vyc0BsaXN0
cy54ZW4ub3JnOyB3aW4tcHYtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcNCj4gU3ViamVjdDog
UmU6IFt3aW4tcHYtZGV2ZWxdIFtYZW4tdXNlcnNdIFJlbW92aW5nIG9sZCBnbHB2IHdpbmRvd3Mg
ZHJpdmVycw0KPiB0byBpbnN0YWxsIG5ldyAtPiBpbmFjY2Vzc2libGUgYm9vdCBkZXZpY2UNCj4g
DQo+IElsIDMwLzEwLzIwMTUgMTA6NTQsIFBhdWwgRHVycmFudCBoYSBzY3JpdHRvOg0KPiA+PiAt
LS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+PiBGcm9tOiB3aW4tcHYtZGV2ZWwtYm91bmNl
c0BsaXN0cy54ZW5wcm9qZWN0Lm9yZyBbbWFpbHRvOndpbi1wdi1kZXZlbC0NCj4gPj4gYm91bmNl
c0BsaXN0cy54ZW5wcm9qZWN0Lm9yZ10gT24gQmVoYWxmIE9mIMOJbGnDoXMgVGFtw6FzDQo+ID4+
IFNlbnQ6IDI5IE9jdG9iZXIgMjAxNSAyMTozOA0KPiA+PiBDYzogeGVuLXVzZXJzQGxpc3RzLnhl
bi5vcmc7IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZw0KPiA+PiBTdWJqZWN0OiBS
ZTogW3dpbi1wdi1kZXZlbF0gW1hlbi11c2Vyc10gUmVtb3Zpbmcgb2xkIGdscHYgd2luZG93cw0K
PiBkcml2ZXJzDQo+ID4+IHRvIGluc3RhbGwgbmV3IC0+IGluYWNjZXNzaWJsZSBib290IGRldmlj
ZQ0KPiA+Pg0KPiA+PiBIaSBhbGwuIFRoYW5rIHlvdSBmb3IgdGhlIHRpcHMuDQo+ID4+DQo+ID4+
IEhlcmUgaXMgd2hhdCBuZWVkZWQgdG8gYmUgZG9uZS4NCj4gPj4NCj4gPj4gLSBCb290IGluIHNh
ZmUgbW9kZS4NCj4gPj4gLSB1c2UgdW5pbnN0YWxsLmJhdCB0byByZW1vdmUgb2xkIGRyaXZlcnMu
DQo+ID4+IC0gdXNlIGNjbGVhbmVyIG9yIHNpbWlsYXIgYXBwbGljYXRpb24gdG8gcmVtb3ZlIG9s
ZCBkcml2ZXIgaW5zdGFsbCBlbnRyaWVzLg0KPiA+PiAtIHNjYW4gdGhyb3VnaCB0aGUgZmlsZSBz
eXN0ZW0gZW5kIGRlbGV0ZSB4ZW4qDQo+ID4+IC0gYmNkZWRpdCAtc2V0IFRFU1RTSUdOSU5HIE9O
DQo+ID4+IC0gaW5zdGFsbCBwZnggZmlsZXMgdG8gbG9jYWwgY29tcHV0ZXIgY2VydCBzdG9yZS4N
Cj4gPj4gLSByZWJvb3QgaW50byBzYWZlIG1vZGUNCj4gPj4gLSBpbnN0YWxsIG5ldyBkcml2ZXJz
ICh4ZW5idXMsIHhlbnZpZiwgZXRjKSB1c2luZyBkcGluc3QuZXhlIChhZG1pbiBtb2RlKQ0KPiA+
PiAtIHJlYm9vdCB0byBub3JtYWwgbW9kZSAodGhlcmUgd2lsbCBiZSBubyBuZXR3b3JrLCBubyB4
ZW4gZGV2aWNlcyBjYW4gYmUNCj4gPj4gc2VlbiwgZXRjIGZvciBzb21lIHJlYXNvbikNCj4gPj4g
LSBnbyB0byBoYXJkd2FyZSwgY2hlY2sgdW5rbm93biBQQ0kgZGV2aWNlIGFuZCBtYW51YWxseSBp
bnN0YWxsIHhlbmJ1cw0KPiA+PiBmb3IgdGhhdC4NCj4gPj4gLSBhZnRlciB0aGlzLCBhbGwgb3Ro
ZXIgZHJpdmVycyBhcHBlYXIgc3VkZGVubHkuDQo+ID4+IC0gcmVib290LCBkb25lLg0KPiA+Pg0K
PiA+PiBJdCB3b3VsZCBiZSBuaWNlIHRvIHJlbW92ZSB0aGUgdGVzdHNpZ25pbmcgdGhvdWdoLCBi
dXQgYXQgbGVzdCBpdCBpcw0KPiA+PiB3b3JraW5nIG5vdy4NCj4gPiBUbyBnZXQgcmlkIG9mIHRo
ZSBuZWVkIGZvciB0ZXN0c2lnbmluZyBpdCdzIG5lY2Vzc2FyeSBmb3IgZHJpdmVycyB0byBiZQ0K
PiAncmVhbGVhc2Ugc2lnbmVkJyBhbmQgaW4gdGhlIGNhc2Ugb2YgV2luZG93cyAxMCB0aGlzIG1l
YW5zIHRoYXQgdGhleSBoYXZlIHRvDQo+IGJlIHNpZ25lZCBkaXJlY3RseSBieSBNaWNyb3NvZnQu
IFRvIGFjaGlldmUgYWxsIHRoaXMgY2VydGlmaWNhdGVzIG11c3QgYmUNCj4gcHVyY2hhc2VkIGFu
ZCBmZWVzIG11c3QgYmUgcGFpZCB0byBNaWNyb3NvZnQgc28gYnVkZ2V0IGlzIHJlcXVpcmVkIGZy
b20NCj4gc29tZXdoZXJlLg0KPiA+DQo+ID4gICAgUGF1bA0KPiANCj4gQWJvdXQgYnV5aW5nIHRo
ZSBjZXJ0aWZpY2F0ZXMgYW5kIGFueSB0aGluZ3MgcmVsYXRlZCBzdGFydGluZyBhDQo+IGNyb3dk
ZnVuZGluZyB3b3VsZCBiZSByZWFsbHkgd2VsY29tZSwgaXNuJ3QgaXQ/IChpbiBzaXRlIGxpa2Ug
a2lja3N0YXJ0ZXIpDQo+IFNvIGFueW9uZSB3aG8gd2FudHMgY2FuIGNvbnRyaWJ1dGUgLSBJIHdp
bGwgY29udHJpYnV0ZSAtIG1vc3QgbGlrZWx5DQo+IGFsc28gdGhlIGNvbXBhbnkgd2hlcmUgSSdt
IHdvcmtpbmcgYW5kIEkgc3VwcG9zZSBvdGhlciBwZW9wbGUgd291bGQgaGVscA0KPiB0byBoYXZl
IG9mZmljaWFsIHNpZ25lZCBkcml2ZXJzIHRvby4NCj4gDQoNCldlIG1heSAgYmUgYWJsZSB0byBn
ZXQgZnVuZGluZyBmcm9tIHRoZSBYZW4gcHJvamVjdCBmb3IgdGhpcy4gSSdtIHdvcmtpbmcgb24g
aXQuDQoNCiAgUGF1bA0KDQo+IFRoYW5rcyBmb3IgYW55IHJlcGx5IGFuZCBzb3JyeSBmb3IgbXkg
YmFkIGVuZ2xpc2guDQo+IA0KPiA+DQo+ID4+IDIwMTUtMTAtMjkgMTA6Mzgga2VsdGV6w6lzc2Vs
LCBHZW9yZ2UgRHVubGFwIMOtcnRhOg0KPiA+Pj4gT24gV2VkLCBPY3QgMjgsIDIwMTUgYXQgODo1
MCBBTSwgw4lsacOhcyBUYW3DoXMgPGV0QGV0aXQuaHU+IHdyb3RlOg0KPiA+Pj4+IEhpLiBZZXMs
IEkgY29uZmlybSwgdGhhdCBib290aW5nIGludG8gc2FmZSBtb2RlIGlzIHBvc3NpYmxlLiBJIHR1
cm5lZCBvbg0KPiA+Pj4+IHRlc3RzaWduaW5nIHdpdGggYmNkZWRpdCwgYW5kIHRyaWVkIGluc3Rh
bGxpbmcgdGhlIGRyaXZlcnMgYWdhaW4uDQo+ID4+Pj4NCj4gPj4+PiBUaGUgaXNudGFsbCB3ZW50
IGZpbmUsIEkgY291bGQgcmVib290LiBVbmZvcnR1bmF0ZWx5IHNpbmNlIHRoZW4gKGl0IGlzDQo+
ID4+Pj4gbW9yZSB0aGVuIDggaG91cnMgbm93KSBJJ20gZmFjaW5nIHRoZSBhdHRhY2hlZCBzY3Jl
ZW4uIFRoZSBhbmltYXRpb24NCj4gaXMNCj4gPj4+PiBqdXN0IHJvbGxpbmcsIHJvbGxpbmcgcm9s
bGluZyBhbmQgbm90aGluZyBoYXBwZW5zLiBDUFUgdGlja3MgYXJlIHVzZWQsDQo+ID4+Pj4gc28g
SSBhc3N1bWUgc29tZXRoaW5nIGlzIGhhcHBlbmluZywgYnV0IGl0IHNlZW1lcyBwcmV0dHkgbXVj
aCBzdHVjay4NCj4gPj4+Pg0KPiA+Pj4+IEFueSBpZGVhcz8NCj4gPj4+IEkgKnRoaW5rKiB0aGUg
WGVuU2VydmVyIFBWIGRyaXZlcnMgYXJlIHVzaW5nIG1pbmlwb3J0OyBpbiB3aGljaCBjYXNlDQo+
ID4+PiB0aGlzIEtCIGFydGljbGUgbWlnaHQgYmUgb2YgdXNlOg0KPiA+Pj4NCj4gPj4+IGh0dHBz
Oi8vc3VwcG9ydC5taWNyb3NvZnQuY29tL2VuLXVzL2tiLzI3OTUzOTcNCj4gPj4+DQo+ID4+PiBQ
YXVsIER1cnJhbnQgY2FuIGNvcnJlY3QgbWUgaWYgSSdtIHdyb25nIGFib3V0IG1pbmlwb3J0IChh
bmQgbWF5IGJlDQo+ID4+PiBhYmxlIHRvIHBvaW50IHlvdSB0byBhIG1vcmUgdXNlZnVsIGZpeCBp
ZiBzbykuDQo+ID4+Pg0KPiA+Pj4gICAtR2VvcmdlDQo+ID4+Pg0KPiA+PiAtLQ0KPiA+Pg0KPiA+
Pg0KPiA+PiDDiWxpw6FzIFRhbcOhcw0KPiA+PiBUaG9tYXMgRWxpYXMNCj4gPj4NCj4gPj4gRVRJ
VFtud3Byb10gS0ZULCDDnGd5dmV6ZXTFkS1Iw6Fsw7N6YXRiaXp0b25zw6FnaSBzcGVjaWFsaXN0
YQ0KPiA+PiBFVElUW253cHJvXSBMdGQsIEdlbmVyYWwgTWFuYWdlci1OZXR3b3JrIHNlY3VyaXR5
IHNwZWNpYWxpc3QNCj4gPj4NCj4gPj4gVGVsLiBIVTogKzM2LzMwLTQ5Ny0xNjI2DQo+ID4+IFRl
bC4gREU6ICs0OS8xNjAtNjUxLTg3MjMNCj4gPj4gT3BlblBHUCBwdWJrZXk6IGh0dHA6Ly9ldGl0
Lmh1L2RvYy9ldC1wdWIuYXNjDQo+ID4+DQo+ID4+IE9rbGV2ZWxlcyBtw6lybsO2ay1pbmZvcm1h
dGlrdXMgKE1TQykNCj4gPj4gTWFzdGVyIG9mIFNjaWVuY2UgaW4gSW5mb3JtYXRpb24gVGVjaG5v
bG9neSAoTVNDKQ0KPiA+Pg0KPiA+PiBLYXBjc29sYXQ6IGh0dHA6Ly9ldGl0Lmh1L2luZGV4LnBo
cC9odS9rYXBjc29sYXQNCj4gPj4gSm9naSBueWlsYXRrb3phdDogaHR0cDovL2V0aXQuaHUvZGlz
Y2xhaW1lci1lbWFpbC1odS50eHQNCj4gPj4gQ29udGFjdDogaHR0cDovL2V0aXQuaHUvaW5kZXgu
cGhwL2VuL2NvbnRhY3QNCj4gPj4gRGlzY2xhaW1lcjogaHR0cDovL2V0aXQuaHUvZGlzY2xhaW1l
ci1lbWFpbC1lbi50eHQNCj4gPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXw0KPiA+IHdpbi1wdi1kZXZlbCBtYWlsaW5nIGxpc3QNCj4gPiB3aW4tcHYtZGV2
ZWxAbGlzdHMueGVucHJvamVjdC5vcmcNCj4gPiBodHRwOi8vbGlzdHMueGVucHJvamVjdC5vcmcv
Y2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL3dpbi1wdi1kZXZlbA0KDQpfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwp3aW4tcHYtZGV2ZWwgbWFpbGluZyBsaXN0
Cndpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwOi8vbGlzdHMueGVucHJvamVj
dC5vcmcvY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL3dpbi1wdi1kZXZlbA==

From win-pv-devel-bounces@lists.xenproject.org Tue Nov 03 11:55:18 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 03 Nov 2015 11:55:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZtaBJ-0006hc-8y; Tue, 03 Nov 2015 11:55:17 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1ZtaBH-0006hX-96
	for win-pv-devel@lists.xenproject.org; Tue, 03 Nov 2015 11:55:15 +0000
Received: from [193.109.254.147] by server-9.bemta-14.messagelabs.com id
	25/1D-26043-2A0A8365; Tue, 03 Nov 2015 11:55:14 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-7.tower-27.messagelabs.com!1446551707!17861!1
X-Originating-IP: [209.85.213.45]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 40268 invoked from network); 3 Nov 2015 11:55:09 -0000
Received: from mail-vk0-f45.google.com (HELO mail-vk0-f45.google.com)
	(209.85.213.45)
	by server-7.tower-27.messagelabs.com with AES128-GCM-SHA256 encrypted
	SMTP; 3 Nov 2015 11:55:09 -0000
Received: by vkex70 with SMTP id x70so7571273vke.3
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 03 Nov 2015 03:55:07 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=sCligFo9QS4VfIueW3QvXsQIL4xSPJZqWrJwYymM46g=;
	b=NNvkFmg8aDKXtW97ITPRErMKvyAWsADcKIZ2i+SGVY4xv771KrIgfoJDZaKCRTFru/
	EUDXHuEdEdgK8gAyZkLHif7sDznNlCdUuKiuZpD0rbeSL3JD0ppk4B1Vzvu1upnki8LL
	96BwFvFx4WKcs5SqUHitJQvyDrYtbg6IDFkaHqs1DWCc2NHO0FB7rgez2qKAv2vjN04T
	NiFjp4wnJdWpkcmZmQVwkNcTqWJsiV2/xFN//WQPSpJW4TebAucD/dgOA55qLDY9ZwOa
	a6/ysaafxQ5j5+G/0JHUnRMz/RHe14yKDY3yCQWN7bMCxSx7ff8AabDNwit9SQx0Cg0K
	ZRlA==
X-Received: by 10.31.142.142 with SMTP id q136mr18851801vkd.41.1446551707418; 
	Tue, 03 Nov 2015 03:55:07 -0800 (PST)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id f63sm7365049vka.0.2015.11.03.03.55.06
	(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Tue, 03 Nov 2015 03:55:07 -0800 (PST)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Tue,  3 Nov 2015 11:55:30 +0000
Message-Id: <1446551730-6896-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH] Add STORE watchdog
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

There have been occasions during testing when xenstored has apparently
missed sending notification to the frontend that data is on the ring.
This patch adds a watchdog to the code to notice when either of the rings
has stalled and try to move things along.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/xenbus/store.c | 134 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 134 insertions(+)

diff --git a/src/xenbus/store.c b/src/xenbus/store.c
index 127bb98..dc4e7f3 100644
--- a/src/xenbus/store.c
+++ b/src/xenbus/store.c
@@ -37,6 +37,7 @@
 
 #include "store.h"
 #include "evtchn.h"
+#include "thread.h"
 #include "fdo.h"
 #include "dbg_print.h"
 #include "assert.h"
@@ -143,6 +144,8 @@ struct _XENBUS_STORE_CONTEXT {
     PXENBUS_SUSPEND_CALLBACK            SuspendCallbackEarly;
     PXENBUS_SUSPEND_CALLBACK            SuspendCallbackLate;
     PXENBUS_DEBUG_CALLBACK              DebugCallback;
+    PXENBUS_THREAD                      WatchdogThread;
+    BOOLEAN                             Enabled;
 };
 
 C_ASSERT(sizeof (struct xenstore_domain_interface) <= PAGE_SIZE);
@@ -1816,6 +1819,93 @@ StorePoll(
     KeReleaseSpinLockFromDpcLevel(&Context->Lock);
 }
 
+#define TIME_US(_us)        ((_us) * 10)
+#define TIME_MS(_ms)        (TIME_US((_ms) * 1000))
+#define TIME_S(_s)          (TIME_MS((_s) * 1000))
+#define TIME_RELATIVE(_t)   (-(_t))
+
+#define XENBUS_STORE_WATCHDOG_PERIOD 15
+
+static NTSTATUS
+StoreWatchdog(
+    IN  PXENBUS_THREAD                  Self,
+    IN  PVOID                           _Context
+    )
+{
+    PXENBUS_STORE_CONTEXT               Context = _Context;
+    LARGE_INTEGER                       Timeout;
+    XENSTORE_RING_IDX                   req_prod;
+    XENSTORE_RING_IDX                   req_cons;
+    XENSTORE_RING_IDX                   rsp_prod;
+    XENSTORE_RING_IDX                   rsp_cons;
+
+    Trace("====>\n");
+
+    Timeout.QuadPart = TIME_RELATIVE(TIME_S(XENBUS_STORE_WATCHDOG_PERIOD));
+
+    req_prod = 0;
+    req_cons = 0;
+    rsp_prod = 0;
+    rsp_cons = 0;
+
+    for (;;) {
+        PKEVENT Event;
+        KIRQL   Irql;
+
+        Event = ThreadGetEvent(Self);
+
+        (VOID) KeWaitForSingleObject(Event,
+                                     Executive,
+                                     KernelMode,
+                                     FALSE,
+                                     &Timeout);
+        KeClearEvent(Event);
+
+        if (ThreadIsAlerted(Self))
+            break;
+
+        KeRaiseIrql(DISPATCH_LEVEL, &Irql);
+        KeAcquireSpinLockAtDpcLevel(&Context->Lock);
+
+        if (Context->Enabled) {
+            struct xenstore_domain_interface    *Shared;
+
+            Shared = Context->Shared;
+
+            KeMemoryBarrier();
+
+            if ((Shared->rsp_prod != rsp_prod &&
+                 Shared->rsp_cons == rsp_cons) ||
+                (Shared->req_prod != req_prod &&
+                 Shared->req_cons == req_cons)) {
+                XENBUS_DEBUG(Trigger,
+                             &Context->DebugInterface,
+                             Context->DebugCallback);
+
+                // Try to move things along
+                (VOID) XENBUS_EVTCHN(Send,
+                                     &Context->EvtchnInterface,
+                                     Context->Channel);
+                StorePollLocked(Context);
+            }
+
+            KeMemoryBarrier();
+
+            req_prod = Shared->req_prod;
+            req_cons = Shared->req_cons;
+            rsp_prod = Shared->rsp_prod;
+            rsp_cons = Shared->rsp_cons;
+        }
+
+        KeReleaseSpinLockFromDpcLevel(&Context->Lock);
+        KeLowerIrql(Irql);
+    }
+
+    Trace("<====\n");
+
+    return STATUS_SUCCESS;
+}
+
 static NTSTATUS
 StorePermissionToString(
     IN  PXENBUS_STORE_PERMISSION    Permission,
@@ -2017,6 +2107,8 @@ StoreDisable(
     IN PXENBUS_STORE_CONTEXT    Context
     )
 {
+    Context->Enabled = FALSE;
+
     XENBUS_EVTCHN(Close,
                   &Context->EvtchnInterface,
                   Context->Channel);
@@ -2055,6 +2147,8 @@ StoreEnable(
                   Context->Channel,
                   FALSE);
 
+    Context->Enabled = TRUE;
+
     // Trigger an initial poll
     KeInsertQueueDpc(&Context->Dpc, NULL, NULL);
 }
@@ -2573,12 +2667,48 @@ StoreInitialize(
 
     KeInitializeDpc(&(*Context)->Dpc, StoreDpc, *Context);
 
+    status = ThreadCreate(StoreWatchdog,
+                          *Context,
+                          &(*Context)->WatchdogThread);
+    if (!NT_SUCCESS(status))
+        goto fail2;
+
     (*Context)->Fdo = Fdo;
 
     Trace("<====\n");
 
     return STATUS_SUCCESS;
 
+fail2:
+    Error("fail2\n");
+
+    RtlZeroMemory(&(*Context)->Dpc, sizeof (KDPC));
+
+    RtlZeroMemory(&(*Context)->BufferList, sizeof (LIST_ENTRY));
+
+    RtlZeroMemory(&(*Context)->WatchList, sizeof (LIST_ENTRY));
+    (*Context)->WatchId = 0;
+
+    RtlZeroMemory(&(*Context)->TransactionList, sizeof (LIST_ENTRY));
+
+    RtlZeroMemory(&(*Context)->PendingList, sizeof (LIST_ENTRY));
+    RtlZeroMemory(&(*Context)->SubmittedList, sizeof (LIST_ENTRY));
+    (*Context)->RequestId = 0;
+
+    RtlZeroMemory(&(*Context)->Lock, sizeof (KSPIN_LOCK));
+
+    RtlZeroMemory(&(*Context)->DebugInterface,
+                  sizeof (XENBUS_DEBUG_INTERFACE));
+
+    RtlZeroMemory(&(*Context)->SuspendInterface,
+                  sizeof (XENBUS_SUSPEND_INTERFACE));
+
+    RtlZeroMemory(&(*Context)->EvtchnInterface,
+                  sizeof (XENBUS_EVTCHN_INTERFACE));
+
+    ASSERT(IsZeroMemory(*Context, sizeof (XENBUS_STORE_CONTEXT)));
+    __StoreFree(*Context);
+
 fail1:
     Error("fail1 (%08x)\n", status);
 
@@ -2647,6 +2777,10 @@ StoreTeardown(
 {
     Trace("====>\n");
 
+    ThreadAlert(Context->WatchdogThread);
+    ThreadJoin(Context->WatchdogThread);
+    Context->WatchdogThread = NULL;
+
     ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
     KeFlushQueuedDpcs();
 
-- 
2.1.1


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

From win-pv-devel-bounces@lists.xenproject.org Tue Nov 03 11:55:18 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 03 Nov 2015 11:55:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZtaBJ-0006hc-8y; Tue, 03 Nov 2015 11:55:17 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1ZtaBH-0006hX-96
	for win-pv-devel@lists.xenproject.org; Tue, 03 Nov 2015 11:55:15 +0000
Received: from [193.109.254.147] by server-9.bemta-14.messagelabs.com id
	25/1D-26043-2A0A8365; Tue, 03 Nov 2015 11:55:14 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-7.tower-27.messagelabs.com!1446551707!17861!1
X-Originating-IP: [209.85.213.45]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 40268 invoked from network); 3 Nov 2015 11:55:09 -0000
Received: from mail-vk0-f45.google.com (HELO mail-vk0-f45.google.com)
	(209.85.213.45)
	by server-7.tower-27.messagelabs.com with AES128-GCM-SHA256 encrypted
	SMTP; 3 Nov 2015 11:55:09 -0000
Received: by vkex70 with SMTP id x70so7571273vke.3
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 03 Nov 2015 03:55:07 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=sCligFo9QS4VfIueW3QvXsQIL4xSPJZqWrJwYymM46g=;
	b=NNvkFmg8aDKXtW97ITPRErMKvyAWsADcKIZ2i+SGVY4xv771KrIgfoJDZaKCRTFru/
	EUDXHuEdEdgK8gAyZkLHif7sDznNlCdUuKiuZpD0rbeSL3JD0ppk4B1Vzvu1upnki8LL
	96BwFvFx4WKcs5SqUHitJQvyDrYtbg6IDFkaHqs1DWCc2NHO0FB7rgez2qKAv2vjN04T
	NiFjp4wnJdWpkcmZmQVwkNcTqWJsiV2/xFN//WQPSpJW4TebAucD/dgOA55qLDY9ZwOa
	a6/ysaafxQ5j5+G/0JHUnRMz/RHe14yKDY3yCQWN7bMCxSx7ff8AabDNwit9SQx0Cg0K
	ZRlA==
X-Received: by 10.31.142.142 with SMTP id q136mr18851801vkd.41.1446551707418; 
	Tue, 03 Nov 2015 03:55:07 -0800 (PST)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id f63sm7365049vka.0.2015.11.03.03.55.06
	(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Tue, 03 Nov 2015 03:55:07 -0800 (PST)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Tue,  3 Nov 2015 11:55:30 +0000
Message-Id: <1446551730-6896-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH] Add STORE watchdog
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

There have been occasions during testing when xenstored has apparently
missed sending notification to the frontend that data is on the ring.
This patch adds a watchdog to the code to notice when either of the rings
has stalled and try to move things along.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/xenbus/store.c | 134 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 134 insertions(+)

diff --git a/src/xenbus/store.c b/src/xenbus/store.c
index 127bb98..dc4e7f3 100644
--- a/src/xenbus/store.c
+++ b/src/xenbus/store.c
@@ -37,6 +37,7 @@
 
 #include "store.h"
 #include "evtchn.h"
+#include "thread.h"
 #include "fdo.h"
 #include "dbg_print.h"
 #include "assert.h"
@@ -143,6 +144,8 @@ struct _XENBUS_STORE_CONTEXT {
     PXENBUS_SUSPEND_CALLBACK            SuspendCallbackEarly;
     PXENBUS_SUSPEND_CALLBACK            SuspendCallbackLate;
     PXENBUS_DEBUG_CALLBACK              DebugCallback;
+    PXENBUS_THREAD                      WatchdogThread;
+    BOOLEAN                             Enabled;
 };
 
 C_ASSERT(sizeof (struct xenstore_domain_interface) <= PAGE_SIZE);
@@ -1816,6 +1819,93 @@ StorePoll(
     KeReleaseSpinLockFromDpcLevel(&Context->Lock);
 }
 
+#define TIME_US(_us)        ((_us) * 10)
+#define TIME_MS(_ms)        (TIME_US((_ms) * 1000))
+#define TIME_S(_s)          (TIME_MS((_s) * 1000))
+#define TIME_RELATIVE(_t)   (-(_t))
+
+#define XENBUS_STORE_WATCHDOG_PERIOD 15
+
+static NTSTATUS
+StoreWatchdog(
+    IN  PXENBUS_THREAD                  Self,
+    IN  PVOID                           _Context
+    )
+{
+    PXENBUS_STORE_CONTEXT               Context = _Context;
+    LARGE_INTEGER                       Timeout;
+    XENSTORE_RING_IDX                   req_prod;
+    XENSTORE_RING_IDX                   req_cons;
+    XENSTORE_RING_IDX                   rsp_prod;
+    XENSTORE_RING_IDX                   rsp_cons;
+
+    Trace("====>\n");
+
+    Timeout.QuadPart = TIME_RELATIVE(TIME_S(XENBUS_STORE_WATCHDOG_PERIOD));
+
+    req_prod = 0;
+    req_cons = 0;
+    rsp_prod = 0;
+    rsp_cons = 0;
+
+    for (;;) {
+        PKEVENT Event;
+        KIRQL   Irql;
+
+        Event = ThreadGetEvent(Self);
+
+        (VOID) KeWaitForSingleObject(Event,
+                                     Executive,
+                                     KernelMode,
+                                     FALSE,
+                                     &Timeout);
+        KeClearEvent(Event);
+
+        if (ThreadIsAlerted(Self))
+            break;
+
+        KeRaiseIrql(DISPATCH_LEVEL, &Irql);
+        KeAcquireSpinLockAtDpcLevel(&Context->Lock);
+
+        if (Context->Enabled) {
+            struct xenstore_domain_interface    *Shared;
+
+            Shared = Context->Shared;
+
+            KeMemoryBarrier();
+
+            if ((Shared->rsp_prod != rsp_prod &&
+                 Shared->rsp_cons == rsp_cons) ||
+                (Shared->req_prod != req_prod &&
+                 Shared->req_cons == req_cons)) {
+                XENBUS_DEBUG(Trigger,
+                             &Context->DebugInterface,
+                             Context->DebugCallback);
+
+                // Try to move things along
+                (VOID) XENBUS_EVTCHN(Send,
+                                     &Context->EvtchnInterface,
+                                     Context->Channel);
+                StorePollLocked(Context);
+            }
+
+            KeMemoryBarrier();
+
+            req_prod = Shared->req_prod;
+            req_cons = Shared->req_cons;
+            rsp_prod = Shared->rsp_prod;
+            rsp_cons = Shared->rsp_cons;
+        }
+
+        KeReleaseSpinLockFromDpcLevel(&Context->Lock);
+        KeLowerIrql(Irql);
+    }
+
+    Trace("<====\n");
+
+    return STATUS_SUCCESS;
+}
+
 static NTSTATUS
 StorePermissionToString(
     IN  PXENBUS_STORE_PERMISSION    Permission,
@@ -2017,6 +2107,8 @@ StoreDisable(
     IN PXENBUS_STORE_CONTEXT    Context
     )
 {
+    Context->Enabled = FALSE;
+
     XENBUS_EVTCHN(Close,
                   &Context->EvtchnInterface,
                   Context->Channel);
@@ -2055,6 +2147,8 @@ StoreEnable(
                   Context->Channel,
                   FALSE);
 
+    Context->Enabled = TRUE;
+
     // Trigger an initial poll
     KeInsertQueueDpc(&Context->Dpc, NULL, NULL);
 }
@@ -2573,12 +2667,48 @@ StoreInitialize(
 
     KeInitializeDpc(&(*Context)->Dpc, StoreDpc, *Context);
 
+    status = ThreadCreate(StoreWatchdog,
+                          *Context,
+                          &(*Context)->WatchdogThread);
+    if (!NT_SUCCESS(status))
+        goto fail2;
+
     (*Context)->Fdo = Fdo;
 
     Trace("<====\n");
 
     return STATUS_SUCCESS;
 
+fail2:
+    Error("fail2\n");
+
+    RtlZeroMemory(&(*Context)->Dpc, sizeof (KDPC));
+
+    RtlZeroMemory(&(*Context)->BufferList, sizeof (LIST_ENTRY));
+
+    RtlZeroMemory(&(*Context)->WatchList, sizeof (LIST_ENTRY));
+    (*Context)->WatchId = 0;
+
+    RtlZeroMemory(&(*Context)->TransactionList, sizeof (LIST_ENTRY));
+
+    RtlZeroMemory(&(*Context)->PendingList, sizeof (LIST_ENTRY));
+    RtlZeroMemory(&(*Context)->SubmittedList, sizeof (LIST_ENTRY));
+    (*Context)->RequestId = 0;
+
+    RtlZeroMemory(&(*Context)->Lock, sizeof (KSPIN_LOCK));
+
+    RtlZeroMemory(&(*Context)->DebugInterface,
+                  sizeof (XENBUS_DEBUG_INTERFACE));
+
+    RtlZeroMemory(&(*Context)->SuspendInterface,
+                  sizeof (XENBUS_SUSPEND_INTERFACE));
+
+    RtlZeroMemory(&(*Context)->EvtchnInterface,
+                  sizeof (XENBUS_EVTCHN_INTERFACE));
+
+    ASSERT(IsZeroMemory(*Context, sizeof (XENBUS_STORE_CONTEXT)));
+    __StoreFree(*Context);
+
 fail1:
     Error("fail1 (%08x)\n", status);
 
@@ -2647,6 +2777,10 @@ StoreTeardown(
 {
     Trace("====>\n");
 
+    ThreadAlert(Context->WatchdogThread);
+    ThreadJoin(Context->WatchdogThread);
+    Context->WatchdogThread = NULL;
+
     ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
     KeFlushQueuedDpcs();
 
-- 
2.1.1


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

From win-pv-devel-bounces@lists.xenproject.org Tue Nov 03 13:13:10 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 03 Nov 2015 13:13:10 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZtbOf-0000hK-Jf; Tue, 03 Nov 2015 13:13:09 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <xennewbie@gmail.com>) id 1ZtbOe-0000hF-IF
	for win-pv-devel@lists.xenproject.org; Tue, 03 Nov 2015 13:13:08 +0000
Received: from [85.158.139.211] by server-15.bemta-5.messagelabs.com id
	E3/E5-16870-3E2B8365; Tue, 03 Nov 2015 13:13:07 +0000
X-Env-Sender: xennewbie@gmail.com
X-Msg-Ref: server-10.tower-206.messagelabs.com!1446556383!635058!1
X-Originating-IP: [209.85.214.176]
X-SpamReason: No, hits=1.7 required=7.0 tests=BODY_RANDOM_LONG,
	HTML_20_30,HTML_MESSAGE,RCVD_BY_IP
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 12466 invoked from network); 3 Nov 2015 13:13:04 -0000
Received: from mail-ob0-f176.google.com (HELO mail-ob0-f176.google.com)
	(209.85.214.176)
	by server-10.tower-206.messagelabs.com with AES128-GCM-SHA256 encrypted
	SMTP; 3 Nov 2015 13:13:04 -0000
Received: by obbwb3 with SMTP id wb3so11775871obb.0
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 03 Nov 2015 05:13:03 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=mime-version:in-reply-to:references:date:message-id:subject:from:to
	:cc:content-type;
	bh=r2TQD307cnXHxwh7p2lGkmI0Oo4o6G6OQsF55rs/TXs=;
	b=yJi88x8vmgMQhXHkLUNI6BZe3XH//Eo/AgAbQJT1jYepu7lW9V/1v81/6XPHkO2XZ9
	66tdbscwwajt5wBsoUNZdwFllIZxHTAHOongjpraaB4ay07lRNypjTobEE5Spj07+Z6/
	aXsCT5m2MHcbsQoWkbdKn2D20Ulq5WMalEH1EQVqt5EpeFVg7zfgVfmLSdN973USoRnb
	oMngHyv5rG28uac0McvHZrcbVAf4CRKDYcdnGFsu3d3MGrnw6QR3CFDblpRAZu7HOMRB
	EMVEn591ikgVFfaUgnj5Mh20PDxvTRj4KuKKfQNj8rxhES8m7pF1Q9+hmeymjHEJBulB
	2IuQ==
MIME-Version: 1.0
X-Received: by 10.60.23.70 with SMTP id k6mr17666381oef.5.1446556383374; Tue,
	03 Nov 2015 05:13:03 -0800 (PST)
Received: by 10.76.37.200 with HTTP; Tue, 3 Nov 2015 05:13:03 -0800 (PST)
In-Reply-To: <56329260.9070805@etit.hu>
References: <1AD33E34BA5E3649B4F6C7FE476686F4211C6848@AMSPEX01CL03.citrite.net>
	<CANXFt06TCJ2aqOy7Fjkd+64FZqjWjs5pDq_wAkOtXZ2Af_ecfg@mail.gmail.com>
	<56329260.9070805@etit.hu>
Date: Tue, 3 Nov 2015 21:13:03 +0800
Message-ID: <CANXFt06pamASXebuGLU7+y8ez92cucHAmW_ne=1mWmoTuu0qsg@mail.gmail.com>
From: Xen Newbie <xennewbie@gmail.com>
To: =?UTF-8?B?w4lsacOhcyBUYW3DoXM=?= <et@etit.hu>
Cc: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Subject: Re: [win-pv-devel] Signed Windows PV Driver
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============2832367304651803164=="
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

--===============2832367304651803164==
Content-Type: multipart/alternative; boundary=047d7b33d4f660f23c0523a2a738

--047d7b33d4f660f23c0523a2a738
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Thomas, thank for your information.

As said by Ben, I may try to use the signed PV drivers from Xenserver for a
trial.

Regards
Lok

=C3=89li=C3=A1s Tam=C3=A1s <et@etit.hu> =E6=96=BC 2015=E5=B9=B410=E6=9C=883=
0=E6=97=A5=E6=98=9F=E6=9C=9F=E4=BA=94 =E5=AF=AB=E9=81=93=EF=BC=9A

> Hi.
>
> > So if I have a self signed certificate and import it to Windows's
> > Trusted Root CA in the certificate store, I can properly install self
> > compiled PV drivers signed by that certificate to that Windows guest.
> > Is my understanding correct?
> This should be the way, in my understandig too, but unfortunately after
> installing the pfx certificates to my windows10 local machine cert
> store, the drivers were still not working.
>
> I had to stay with TESTSIGNING to make it work. I wonder what the
> problem could be.
>
> >
> > I saw a lot mails in this mailing list discussing failure of PV drivers
> > working under Windows 10.  Does it mean the PV drivers are not yet
> > stable enough to work under Windows 10?
> >
> PV drivers are working well, I'm using it on several Windows 10
> machines. I just posted a message about how to install them,
>
> The only issue is now that they work only when TESTSIGNING is on.
>
> > Regards
> > Terry
> >
> > On Thu, Oct 29, 2015 at 4:52 PM, Ben Chalmers <ben.chalmers@citrix.com
> <javascript:;>
> > <mailto:ben.chalmers@citrix.com <javascript:;>>> wrote:
> >
> >     Those statements are correct.
> >
> >     __ __
> >
> >     The drivers provided by Citrix XenServer are from the same code bas=
e
> >     as the Xen project PV drivers =E2=80=93 but are currently older (an=
d taken
> >     from a point before the drivers were handed over from the XenServer
> >     project to the Xen project).  Those drivers have BSD licensed sourc=
e
> >     code (as do the Xen project drivers) so there shouldn=E2=80=99t be =
a
> >     conflict (but don=E2=80=99t trust me =E2=80=93 I=E2=80=99m not a la=
wyer and not speaking for
> >     Citrix here)
> >
> >     __ __
> >
> >     I would expect the Citrix drivers to work with Xen (but no promises=
,
> >     YMMV!).  And going forwards (as Citrix PV drivers are increasingly
> >     built from Xen project rather then the XenServer project code) this
> >     will be more and more likely.
> >
> >     __ __
> >
> >     (incidentally, if you have a code signing cert with a chain of trus=
t
> >     back to a root provider, you can sign any drivers you build =E2=80=
=93 and
> >     then install those certificates into Windows =E2=80=93 avoiding wor=
rying
> >     about needing to turn test signing on.  Not sure if that helps)
> >
> >     __ __
> >
> >     Ben Chalmers
> >
> >     __ __
> >
> >     __ __
> >
> >
> >     *From: *Xen Newbie
> >     *Sent: *29 October 2015 05:55
> >     *To: *Xen Windows PV Drivers Development Mailing List
> >     *Subject: *[win-pv-devel] Signed Windows PV Driver
> >
> >     __ __
> >
> >     __ __
> >
> >     I've asked the questions at the Xen users mailing list but nobody
> >     has interest to offer me a help.  If the questions are too basic an=
d
> >     should not be raised in this devel mailing list, please forgive
> me.____
> >
> >     __ __
> >
> >     I want to install a signed PV drivers in my HVM windows guest since
> >     I learnt from the web that a test signed driver may lead to
> >     conflicts with some Windows applications.____
> >
> >     __ __
> >
> >     I studied a lot from the Xen project pages and Xen mailing list for
> >     users and pv driver development. I am confused since some of the
> >     information seems to be out-dated. ____
> >
> >     __ __
> >
> >     I consolidated what I learnt so far and would like to seek for help
> >     to clarify the following conecpts before I make my next move:____
> >
> >     __ __
> >
> >     1) Those signed Windows drivers resided on univention seemed to be
> >     already out-dated.____
> >
> >     2) Those PV drivers provided on
> >     http://www.xenproject.org/developers/teams/windows-pv-drivers.html
> >     requires my own compilation. The drivers compiled are test signed
> >     and requires setting the Windows to test mode.____
> >
> >     3) The PV drivers provided by Citrix XenServer seems to work also
> >     with Xen Hypervisor but I'm not sure whether there is any license
> >     conflict.____
> >
> >     4) There are Microsoft signed PV drivers provided by Oracle VM but =
I
> >     need to use Oracle VM as my Domain 0 in order to use them.____
> >
> >     __ __
> >
> >     Can anyone confirm my understanding as fore-mentioned?____
> >
> >     __ __
> >
> >     I want to make a PC as a HTPC/NAS combo with HTPC part played by a
> >     Windows 7 (Windows 10 preferred if feasible) PV HVM guest.____
> >
> >     __ __
> >
> >     I'm now stuck at the planning stage of Windows PV drivers. I don't
> >     want to compile anything and set the Windows to test mode.____
> >
> >     __ __
> >
> >     So can I just download the PV drivers from Citrix and installed to
> >     the guest? Will it work with my Xen 4.5/4.6 Hypervisor with Ubuntu
> >     15.04 Domain 0?____
> >
> >     __ __
> >
> >     I'll be very grateful if anyone can help me.____
> >
> >     __ __
> >
> >     Regards____
> >
> >     Lok____
> >
> >     __ __
> >
> >     __ __
> >
> >
> >
> >
> > _______________________________________________
> > win-pv-devel mailing list
> > win-pv-devel@lists.xenproject.org <javascript:;>
> > http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
> >
>
> --
>
>
> =C3=89li=C3=A1s Tam=C3=A1s
> Thomas Elias
>
> ETIT[nwpro] KFT, =C3=9Cgyvezet=C5=91-H=C3=A1l=C3=B3zatbiztons=C3=A1gi spe=
cialista
> ETIT[nwpro] Ltd, General Manager-Network security specialist
>
> Tel. HU: +36/30-497-1626
> Tel. DE: +49/160-651-8723
> OpenPGP pubkey: http://etit.hu/doc/et-pub.asc
>
> Okleveles m=C3=A9rn=C3=B6k-informatikus (MSC)
> Master of Science in Information Technology (MSC)
>
> Kapcsolat: http://etit.hu/index.php/hu/kapcsolat
> Jogi nyilatkozat: http://etit.hu/disclaimer-email-hu.txt
> Contact: http://etit.hu/index.php/en/contact
> Disclaimer: http://etit.hu/disclaimer-email-en.txt
>
>

--047d7b33d4f660f23c0523a2a738
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Thomas, thank for your information.<div><br></div><div>As said by Ben, I ma=
y try to use the signed=C2=A0PV drivers from Xenserver for a trial.</div><d=
iv><br></div><div>Regards</div><div>Lok<br><br>=C3=89li=C3=A1s Tam=C3=A1s &=
lt;<a href=3D"mailto:et@etit.hu">et@etit.hu</a>&gt; =E6=96=BC 2015=E5=B9=B4=
10=E6=9C=8830=E6=97=A5=E6=98=9F=E6=9C=9F=E4=BA=94 =E5=AF=AB=E9=81=93=EF=BC=
=9A<br><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-=
left:1px #ccc solid;padding-left:1ex">Hi.<br>
<br>
&gt; So if I have a self signed certificate and import it to Windows&#39;s<=
br>
&gt; Trusted Root CA in the certificate store, I can properly install self<=
br>
&gt; compiled PV drivers signed by that certificate to that Windows guest.<=
br>
&gt; Is my understanding correct?<br>
This should be the way, in my understandig too, but unfortunately after<br>
installing the pfx certificates to my windows10 local machine cert<br>
store, the drivers were still not working.<br>
<br>
I had to stay with TESTSIGNING to make it work. I wonder what the<br>
problem could be.<br>
<br>
&gt;<br>
&gt; I saw a lot mails in this mailing list discussing failure of PV driver=
s<br>
&gt; working under Windows 10.=C2=A0 Does it mean the PV drivers are not ye=
t<br>
&gt; stable enough to work under Windows 10?<br>
&gt;<br>
PV drivers are working well, I&#39;m using it on several Windows 10<br>
machines. I just posted a message about how to install them,<br>
<br>
The only issue is now that they work only when TESTSIGNING is on.<br>
<br>
&gt; Regards<br>
&gt; Terry<br>
&gt;<br>
&gt; On Thu, Oct 29, 2015 at 4:52 PM, Ben Chalmers &lt;<a href=3D"javascrip=
t:;" onclick=3D"_e(event, &#39;cvml&#39;, &#39;ben.chalmers@citrix.com&#39;=
)">ben.chalmers@citrix.com</a><br>
&gt; &lt;mailto:<a href=3D"javascript:;" onclick=3D"_e(event, &#39;cvml&#39=
;, &#39;ben.chalmers@citrix.com&#39;)">ben.chalmers@citrix.com</a>&gt;&gt; =
wrote:<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0Those statements are correct.<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0__ __<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0The drivers provided by Citrix XenServer are from t=
he same code base<br>
&gt;=C2=A0 =C2=A0 =C2=A0as the Xen project PV drivers =E2=80=93 but are cur=
rently older (and taken<br>
&gt;=C2=A0 =C2=A0 =C2=A0from a point before the drivers were handed over fr=
om the XenServer<br>
&gt;=C2=A0 =C2=A0 =C2=A0project to the Xen project).=C2=A0 Those drivers ha=
ve BSD licensed source<br>
&gt;=C2=A0 =C2=A0 =C2=A0code (as do the Xen project drivers) so there shoul=
dn=E2=80=99t be a<br>
&gt;=C2=A0 =C2=A0 =C2=A0conflict (but don=E2=80=99t trust me =E2=80=93 I=E2=
=80=99m not a lawyer and not speaking for<br>
&gt;=C2=A0 =C2=A0 =C2=A0Citrix here)<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0__ __<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0I would expect the Citrix drivers to work with Xen =
(but no promises,<br>
&gt;=C2=A0 =C2=A0 =C2=A0YMMV!).=C2=A0 And going forwards (as Citrix PV driv=
ers are increasingly<br>
&gt;=C2=A0 =C2=A0 =C2=A0built from Xen project rather then the XenServer pr=
oject code) this<br>
&gt;=C2=A0 =C2=A0 =C2=A0will be more and more likely.<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0__ __<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0(incidentally, if you have a code signing cert with=
 a chain of trust<br>
&gt;=C2=A0 =C2=A0 =C2=A0back to a root provider, you can sign any drivers y=
ou build =E2=80=93 and<br>
&gt;=C2=A0 =C2=A0 =C2=A0then install those certificates into Windows =E2=80=
=93 avoiding worrying<br>
&gt;=C2=A0 =C2=A0 =C2=A0about needing to turn test signing on.=C2=A0 Not su=
re if that helps)<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0__ __<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0Ben Chalmers<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0__ __<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0__ __<br>
&gt;<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0*From: *Xen Newbie<br>
&gt;=C2=A0 =C2=A0 =C2=A0*Sent: *29 October 2015 05:55<br>
&gt;=C2=A0 =C2=A0 =C2=A0*To: *Xen Windows PV Drivers Development Mailing Li=
st<br>
&gt;=C2=A0 =C2=A0 =C2=A0*Subject: *[win-pv-devel] Signed Windows PV Driver<=
br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0__ __<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0__ __<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0I&#39;ve asked the questions at the Xen users maili=
ng list but nobody<br>
&gt;=C2=A0 =C2=A0 =C2=A0has interest to offer me a help.=C2=A0 If the quest=
ions are too basic and<br>
&gt;=C2=A0 =C2=A0 =C2=A0should not be raised in this devel mailing list, pl=
ease forgive me.____<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0__ __<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0I want to install a signed PV drivers in my HVM win=
dows guest since<br>
&gt;=C2=A0 =C2=A0 =C2=A0I learnt from the web that a test signed driver may=
 lead to<br>
&gt;=C2=A0 =C2=A0 =C2=A0conflicts with some Windows applications.____<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0__ __<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0I studied a lot from the Xen project pages and Xen =
mailing list for<br>
&gt;=C2=A0 =C2=A0 =C2=A0users and pv driver development. I am confused sinc=
e some of the<br>
&gt;=C2=A0 =C2=A0 =C2=A0information seems to be out-dated. ____<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0__ __<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0I consolidated what I learnt so far and would like =
to seek for help<br>
&gt;=C2=A0 =C2=A0 =C2=A0to clarify the following conecpts before I make my =
next move:____<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0__ __<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A01) Those signed Windows drivers resided on univenti=
on seemed to be<br>
&gt;=C2=A0 =C2=A0 =C2=A0already out-dated.____<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A02) Those PV drivers provided on<br>
&gt;=C2=A0 =C2=A0 =C2=A0<a href=3D"http://www.xenproject.org/developers/tea=
ms/windows-pv-drivers.html" target=3D"_blank">http://www.xenproject.org/dev=
elopers/teams/windows-pv-drivers.html</a><br>
&gt;=C2=A0 =C2=A0 =C2=A0requires my own compilation. The drivers compiled a=
re test signed<br>
&gt;=C2=A0 =C2=A0 =C2=A0and requires setting the Windows to test mode.____<=
br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A03) The PV drivers provided by Citrix XenServer seem=
s to work also<br>
&gt;=C2=A0 =C2=A0 =C2=A0with Xen Hypervisor but I&#39;m not sure whether th=
ere is any license<br>
&gt;=C2=A0 =C2=A0 =C2=A0conflict.____<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A04) There are Microsoft signed PV drivers provided b=
y Oracle VM but I<br>
&gt;=C2=A0 =C2=A0 =C2=A0need to use Oracle VM as my Domain 0 in order to us=
e them.____<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0__ __<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0Can anyone confirm my understanding as fore-mention=
ed?____<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0__ __<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0I want to make a PC as a HTPC/NAS combo with HTPC p=
art played by a<br>
&gt;=C2=A0 =C2=A0 =C2=A0Windows 7 (Windows 10 preferred if feasible) PV HVM=
 guest.____<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0__ __<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0I&#39;m now stuck at the planning stage of Windows =
PV drivers. I don&#39;t<br>
&gt;=C2=A0 =C2=A0 =C2=A0want to compile anything and set the Windows to tes=
t mode.____<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0__ __<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0So can I just download the PV drivers from Citrix a=
nd installed to<br>
&gt;=C2=A0 =C2=A0 =C2=A0the guest? Will it work with my Xen 4.5/4.6 Hypervi=
sor with Ubuntu<br>
&gt;=C2=A0 =C2=A0 =C2=A015.04 Domain 0?____<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0__ __<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0I&#39;ll be very grateful if anyone can help me.___=
_<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0__ __<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0Regards____<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0Lok____<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0__ __<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0__ __<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; win-pv-devel mailing list<br>
&gt; <a href=3D"javascript:;" onclick=3D"_e(event, &#39;cvml&#39;, &#39;win=
-pv-devel@lists.xenproject.org&#39;)">win-pv-devel@lists.xenproject.org</a>=
<br>
&gt; <a href=3D"http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv=
-devel" target=3D"_blank">http://lists.xenproject.org/cgi-bin/mailman/listi=
nfo/win-pv-devel</a><br>
&gt;<br>
<br>
--<br>
<br>
<br>
=C3=89li=C3=A1s Tam=C3=A1s<br>
Thomas Elias<br>
<br>
ETIT[nwpro] KFT, =C3=9Cgyvezet=C5=91-H=C3=A1l=C3=B3zatbiztons=C3=A1gi speci=
alista<br>
ETIT[nwpro] Ltd, General Manager-Network security specialist<br>
<br>
Tel. HU: +36/30-497-1626<br>
Tel. DE: +49/160-651-8723<br>
OpenPGP pubkey: <a href=3D"http://etit.hu/doc/et-pub.asc" target=3D"_blank"=
>http://etit.hu/doc/et-pub.asc</a><br>
<br>
Okleveles m=C3=A9rn=C3=B6k-informatikus (MSC)<br>
Master of Science in Information Technology (MSC)<br>
<br>
Kapcsolat: <a href=3D"http://etit.hu/index.php/hu/kapcsolat" target=3D"_bla=
nk">http://etit.hu/index.php/hu/kapcsolat</a><br>
Jogi nyilatkozat: <a href=3D"http://etit.hu/disclaimer-email-hu.txt" target=
=3D"_blank">http://etit.hu/disclaimer-email-hu.txt</a><br>
Contact: <a href=3D"http://etit.hu/index.php/en/contact" target=3D"_blank">=
http://etit.hu/index.php/en/contact</a><br>
Disclaimer: <a href=3D"http://etit.hu/disclaimer-email-en.txt" target=3D"_b=
lank">http://etit.hu/disclaimer-email-en.txt</a><br>
<br>
</blockquote></div>

--047d7b33d4f660f23c0523a2a738--


--===============2832367304651803164==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--===============2832367304651803164==--


From win-pv-devel-bounces@lists.xenproject.org Tue Nov 03 13:13:10 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 03 Nov 2015 13:13:10 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZtbOf-0000hK-Jf; Tue, 03 Nov 2015 13:13:09 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <xennewbie@gmail.com>) id 1ZtbOe-0000hF-IF
	for win-pv-devel@lists.xenproject.org; Tue, 03 Nov 2015 13:13:08 +0000
Received: from [85.158.139.211] by server-15.bemta-5.messagelabs.com id
	E3/E5-16870-3E2B8365; Tue, 03 Nov 2015 13:13:07 +0000
X-Env-Sender: xennewbie@gmail.com
X-Msg-Ref: server-10.tower-206.messagelabs.com!1446556383!635058!1
X-Originating-IP: [209.85.214.176]
X-SpamReason: No, hits=1.7 required=7.0 tests=BODY_RANDOM_LONG,
	HTML_20_30,HTML_MESSAGE,RCVD_BY_IP
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 12466 invoked from network); 3 Nov 2015 13:13:04 -0000
Received: from mail-ob0-f176.google.com (HELO mail-ob0-f176.google.com)
	(209.85.214.176)
	by server-10.tower-206.messagelabs.com with AES128-GCM-SHA256 encrypted
	SMTP; 3 Nov 2015 13:13:04 -0000
Received: by obbwb3 with SMTP id wb3so11775871obb.0
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 03 Nov 2015 05:13:03 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=mime-version:in-reply-to:references:date:message-id:subject:from:to
	:cc:content-type;
	bh=r2TQD307cnXHxwh7p2lGkmI0Oo4o6G6OQsF55rs/TXs=;
	b=yJi88x8vmgMQhXHkLUNI6BZe3XH//Eo/AgAbQJT1jYepu7lW9V/1v81/6XPHkO2XZ9
	66tdbscwwajt5wBsoUNZdwFllIZxHTAHOongjpraaB4ay07lRNypjTobEE5Spj07+Z6/
	aXsCT5m2MHcbsQoWkbdKn2D20Ulq5WMalEH1EQVqt5EpeFVg7zfgVfmLSdN973USoRnb
	oMngHyv5rG28uac0McvHZrcbVAf4CRKDYcdnGFsu3d3MGrnw6QR3CFDblpRAZu7HOMRB
	EMVEn591ikgVFfaUgnj5Mh20PDxvTRj4KuKKfQNj8rxhES8m7pF1Q9+hmeymjHEJBulB
	2IuQ==
MIME-Version: 1.0
X-Received: by 10.60.23.70 with SMTP id k6mr17666381oef.5.1446556383374; Tue,
	03 Nov 2015 05:13:03 -0800 (PST)
Received: by 10.76.37.200 with HTTP; Tue, 3 Nov 2015 05:13:03 -0800 (PST)
In-Reply-To: <56329260.9070805@etit.hu>
References: <1AD33E34BA5E3649B4F6C7FE476686F4211C6848@AMSPEX01CL03.citrite.net>
	<CANXFt06TCJ2aqOy7Fjkd+64FZqjWjs5pDq_wAkOtXZ2Af_ecfg@mail.gmail.com>
	<56329260.9070805@etit.hu>
Date: Tue, 3 Nov 2015 21:13:03 +0800
Message-ID: <CANXFt06pamASXebuGLU7+y8ez92cucHAmW_ne=1mWmoTuu0qsg@mail.gmail.com>
From: Xen Newbie <xennewbie@gmail.com>
To: =?UTF-8?B?w4lsacOhcyBUYW3DoXM=?= <et@etit.hu>
Cc: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Subject: Re: [win-pv-devel] Signed Windows PV Driver
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============2832367304651803164=="
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

--===============2832367304651803164==
Content-Type: multipart/alternative; boundary=047d7b33d4f660f23c0523a2a738

--047d7b33d4f660f23c0523a2a738
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Thomas, thank for your information.

As said by Ben, I may try to use the signed PV drivers from Xenserver for a
trial.

Regards
Lok

=C3=89li=C3=A1s Tam=C3=A1s <et@etit.hu> =E6=96=BC 2015=E5=B9=B410=E6=9C=883=
0=E6=97=A5=E6=98=9F=E6=9C=9F=E4=BA=94 =E5=AF=AB=E9=81=93=EF=BC=9A

> Hi.
>
> > So if I have a self signed certificate and import it to Windows's
> > Trusted Root CA in the certificate store, I can properly install self
> > compiled PV drivers signed by that certificate to that Windows guest.
> > Is my understanding correct?
> This should be the way, in my understandig too, but unfortunately after
> installing the pfx certificates to my windows10 local machine cert
> store, the drivers were still not working.
>
> I had to stay with TESTSIGNING to make it work. I wonder what the
> problem could be.
>
> >
> > I saw a lot mails in this mailing list discussing failure of PV drivers
> > working under Windows 10.  Does it mean the PV drivers are not yet
> > stable enough to work under Windows 10?
> >
> PV drivers are working well, I'm using it on several Windows 10
> machines. I just posted a message about how to install them,
>
> The only issue is now that they work only when TESTSIGNING is on.
>
> > Regards
> > Terry
> >
> > On Thu, Oct 29, 2015 at 4:52 PM, Ben Chalmers <ben.chalmers@citrix.com
> <javascript:;>
> > <mailto:ben.chalmers@citrix.com <javascript:;>>> wrote:
> >
> >     Those statements are correct.
> >
> >     __ __
> >
> >     The drivers provided by Citrix XenServer are from the same code bas=
e
> >     as the Xen project PV drivers =E2=80=93 but are currently older (an=
d taken
> >     from a point before the drivers were handed over from the XenServer
> >     project to the Xen project).  Those drivers have BSD licensed sourc=
e
> >     code (as do the Xen project drivers) so there shouldn=E2=80=99t be =
a
> >     conflict (but don=E2=80=99t trust me =E2=80=93 I=E2=80=99m not a la=
wyer and not speaking for
> >     Citrix here)
> >
> >     __ __
> >
> >     I would expect the Citrix drivers to work with Xen (but no promises=
,
> >     YMMV!).  And going forwards (as Citrix PV drivers are increasingly
> >     built from Xen project rather then the XenServer project code) this
> >     will be more and more likely.
> >
> >     __ __
> >
> >     (incidentally, if you have a code signing cert with a chain of trus=
t
> >     back to a root provider, you can sign any drivers you build =E2=80=
=93 and
> >     then install those certificates into Windows =E2=80=93 avoiding wor=
rying
> >     about needing to turn test signing on.  Not sure if that helps)
> >
> >     __ __
> >
> >     Ben Chalmers
> >
> >     __ __
> >
> >     __ __
> >
> >
> >     *From: *Xen Newbie
> >     *Sent: *29 October 2015 05:55
> >     *To: *Xen Windows PV Drivers Development Mailing List
> >     *Subject: *[win-pv-devel] Signed Windows PV Driver
> >
> >     __ __
> >
> >     __ __
> >
> >     I've asked the questions at the Xen users mailing list but nobody
> >     has interest to offer me a help.  If the questions are too basic an=
d
> >     should not be raised in this devel mailing list, please forgive
> me.____
> >
> >     __ __
> >
> >     I want to install a signed PV drivers in my HVM windows guest since
> >     I learnt from the web that a test signed driver may lead to
> >     conflicts with some Windows applications.____
> >
> >     __ __
> >
> >     I studied a lot from the Xen project pages and Xen mailing list for
> >     users and pv driver development. I am confused since some of the
> >     information seems to be out-dated. ____
> >
> >     __ __
> >
> >     I consolidated what I learnt so far and would like to seek for help
> >     to clarify the following conecpts before I make my next move:____
> >
> >     __ __
> >
> >     1) Those signed Windows drivers resided on univention seemed to be
> >     already out-dated.____
> >
> >     2) Those PV drivers provided on
> >     http://www.xenproject.org/developers/teams/windows-pv-drivers.html
> >     requires my own compilation. The drivers compiled are test signed
> >     and requires setting the Windows to test mode.____
> >
> >     3) The PV drivers provided by Citrix XenServer seems to work also
> >     with Xen Hypervisor but I'm not sure whether there is any license
> >     conflict.____
> >
> >     4) There are Microsoft signed PV drivers provided by Oracle VM but =
I
> >     need to use Oracle VM as my Domain 0 in order to use them.____
> >
> >     __ __
> >
> >     Can anyone confirm my understanding as fore-mentioned?____
> >
> >     __ __
> >
> >     I want to make a PC as a HTPC/NAS combo with HTPC part played by a
> >     Windows 7 (Windows 10 preferred if feasible) PV HVM guest.____
> >
> >     __ __
> >
> >     I'm now stuck at the planning stage of Windows PV drivers. I don't
> >     want to compile anything and set the Windows to test mode.____
> >
> >     __ __
> >
> >     So can I just download the PV drivers from Citrix and installed to
> >     the guest? Will it work with my Xen 4.5/4.6 Hypervisor with Ubuntu
> >     15.04 Domain 0?____
> >
> >     __ __
> >
> >     I'll be very grateful if anyone can help me.____
> >
> >     __ __
> >
> >     Regards____
> >
> >     Lok____
> >
> >     __ __
> >
> >     __ __
> >
> >
> >
> >
> > _______________________________________________
> > win-pv-devel mailing list
> > win-pv-devel@lists.xenproject.org <javascript:;>
> > http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
> >
>
> --
>
>
> =C3=89li=C3=A1s Tam=C3=A1s
> Thomas Elias
>
> ETIT[nwpro] KFT, =C3=9Cgyvezet=C5=91-H=C3=A1l=C3=B3zatbiztons=C3=A1gi spe=
cialista
> ETIT[nwpro] Ltd, General Manager-Network security specialist
>
> Tel. HU: +36/30-497-1626
> Tel. DE: +49/160-651-8723
> OpenPGP pubkey: http://etit.hu/doc/et-pub.asc
>
> Okleveles m=C3=A9rn=C3=B6k-informatikus (MSC)
> Master of Science in Information Technology (MSC)
>
> Kapcsolat: http://etit.hu/index.php/hu/kapcsolat
> Jogi nyilatkozat: http://etit.hu/disclaimer-email-hu.txt
> Contact: http://etit.hu/index.php/en/contact
> Disclaimer: http://etit.hu/disclaimer-email-en.txt
>
>

--047d7b33d4f660f23c0523a2a738
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Thomas, thank for your information.<div><br></div><div>As said by Ben, I ma=
y try to use the signed=C2=A0PV drivers from Xenserver for a trial.</div><d=
iv><br></div><div>Regards</div><div>Lok<br><br>=C3=89li=C3=A1s Tam=C3=A1s &=
lt;<a href=3D"mailto:et@etit.hu">et@etit.hu</a>&gt; =E6=96=BC 2015=E5=B9=B4=
10=E6=9C=8830=E6=97=A5=E6=98=9F=E6=9C=9F=E4=BA=94 =E5=AF=AB=E9=81=93=EF=BC=
=9A<br><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-=
left:1px #ccc solid;padding-left:1ex">Hi.<br>
<br>
&gt; So if I have a self signed certificate and import it to Windows&#39;s<=
br>
&gt; Trusted Root CA in the certificate store, I can properly install self<=
br>
&gt; compiled PV drivers signed by that certificate to that Windows guest.<=
br>
&gt; Is my understanding correct?<br>
This should be the way, in my understandig too, but unfortunately after<br>
installing the pfx certificates to my windows10 local machine cert<br>
store, the drivers were still not working.<br>
<br>
I had to stay with TESTSIGNING to make it work. I wonder what the<br>
problem could be.<br>
<br>
&gt;<br>
&gt; I saw a lot mails in this mailing list discussing failure of PV driver=
s<br>
&gt; working under Windows 10.=C2=A0 Does it mean the PV drivers are not ye=
t<br>
&gt; stable enough to work under Windows 10?<br>
&gt;<br>
PV drivers are working well, I&#39;m using it on several Windows 10<br>
machines. I just posted a message about how to install them,<br>
<br>
The only issue is now that they work only when TESTSIGNING is on.<br>
<br>
&gt; Regards<br>
&gt; Terry<br>
&gt;<br>
&gt; On Thu, Oct 29, 2015 at 4:52 PM, Ben Chalmers &lt;<a href=3D"javascrip=
t:;" onclick=3D"_e(event, &#39;cvml&#39;, &#39;ben.chalmers@citrix.com&#39;=
)">ben.chalmers@citrix.com</a><br>
&gt; &lt;mailto:<a href=3D"javascript:;" onclick=3D"_e(event, &#39;cvml&#39=
;, &#39;ben.chalmers@citrix.com&#39;)">ben.chalmers@citrix.com</a>&gt;&gt; =
wrote:<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0Those statements are correct.<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0__ __<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0The drivers provided by Citrix XenServer are from t=
he same code base<br>
&gt;=C2=A0 =C2=A0 =C2=A0as the Xen project PV drivers =E2=80=93 but are cur=
rently older (and taken<br>
&gt;=C2=A0 =C2=A0 =C2=A0from a point before the drivers were handed over fr=
om the XenServer<br>
&gt;=C2=A0 =C2=A0 =C2=A0project to the Xen project).=C2=A0 Those drivers ha=
ve BSD licensed source<br>
&gt;=C2=A0 =C2=A0 =C2=A0code (as do the Xen project drivers) so there shoul=
dn=E2=80=99t be a<br>
&gt;=C2=A0 =C2=A0 =C2=A0conflict (but don=E2=80=99t trust me =E2=80=93 I=E2=
=80=99m not a lawyer and not speaking for<br>
&gt;=C2=A0 =C2=A0 =C2=A0Citrix here)<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0__ __<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0I would expect the Citrix drivers to work with Xen =
(but no promises,<br>
&gt;=C2=A0 =C2=A0 =C2=A0YMMV!).=C2=A0 And going forwards (as Citrix PV driv=
ers are increasingly<br>
&gt;=C2=A0 =C2=A0 =C2=A0built from Xen project rather then the XenServer pr=
oject code) this<br>
&gt;=C2=A0 =C2=A0 =C2=A0will be more and more likely.<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0__ __<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0(incidentally, if you have a code signing cert with=
 a chain of trust<br>
&gt;=C2=A0 =C2=A0 =C2=A0back to a root provider, you can sign any drivers y=
ou build =E2=80=93 and<br>
&gt;=C2=A0 =C2=A0 =C2=A0then install those certificates into Windows =E2=80=
=93 avoiding worrying<br>
&gt;=C2=A0 =C2=A0 =C2=A0about needing to turn test signing on.=C2=A0 Not su=
re if that helps)<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0__ __<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0Ben Chalmers<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0__ __<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0__ __<br>
&gt;<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0*From: *Xen Newbie<br>
&gt;=C2=A0 =C2=A0 =C2=A0*Sent: *29 October 2015 05:55<br>
&gt;=C2=A0 =C2=A0 =C2=A0*To: *Xen Windows PV Drivers Development Mailing Li=
st<br>
&gt;=C2=A0 =C2=A0 =C2=A0*Subject: *[win-pv-devel] Signed Windows PV Driver<=
br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0__ __<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0__ __<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0I&#39;ve asked the questions at the Xen users maili=
ng list but nobody<br>
&gt;=C2=A0 =C2=A0 =C2=A0has interest to offer me a help.=C2=A0 If the quest=
ions are too basic and<br>
&gt;=C2=A0 =C2=A0 =C2=A0should not be raised in this devel mailing list, pl=
ease forgive me.____<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0__ __<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0I want to install a signed PV drivers in my HVM win=
dows guest since<br>
&gt;=C2=A0 =C2=A0 =C2=A0I learnt from the web that a test signed driver may=
 lead to<br>
&gt;=C2=A0 =C2=A0 =C2=A0conflicts with some Windows applications.____<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0__ __<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0I studied a lot from the Xen project pages and Xen =
mailing list for<br>
&gt;=C2=A0 =C2=A0 =C2=A0users and pv driver development. I am confused sinc=
e some of the<br>
&gt;=C2=A0 =C2=A0 =C2=A0information seems to be out-dated. ____<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0__ __<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0I consolidated what I learnt so far and would like =
to seek for help<br>
&gt;=C2=A0 =C2=A0 =C2=A0to clarify the following conecpts before I make my =
next move:____<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0__ __<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A01) Those signed Windows drivers resided on univenti=
on seemed to be<br>
&gt;=C2=A0 =C2=A0 =C2=A0already out-dated.____<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A02) Those PV drivers provided on<br>
&gt;=C2=A0 =C2=A0 =C2=A0<a href=3D"http://www.xenproject.org/developers/tea=
ms/windows-pv-drivers.html" target=3D"_blank">http://www.xenproject.org/dev=
elopers/teams/windows-pv-drivers.html</a><br>
&gt;=C2=A0 =C2=A0 =C2=A0requires my own compilation. The drivers compiled a=
re test signed<br>
&gt;=C2=A0 =C2=A0 =C2=A0and requires setting the Windows to test mode.____<=
br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A03) The PV drivers provided by Citrix XenServer seem=
s to work also<br>
&gt;=C2=A0 =C2=A0 =C2=A0with Xen Hypervisor but I&#39;m not sure whether th=
ere is any license<br>
&gt;=C2=A0 =C2=A0 =C2=A0conflict.____<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A04) There are Microsoft signed PV drivers provided b=
y Oracle VM but I<br>
&gt;=C2=A0 =C2=A0 =C2=A0need to use Oracle VM as my Domain 0 in order to us=
e them.____<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0__ __<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0Can anyone confirm my understanding as fore-mention=
ed?____<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0__ __<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0I want to make a PC as a HTPC/NAS combo with HTPC p=
art played by a<br>
&gt;=C2=A0 =C2=A0 =C2=A0Windows 7 (Windows 10 preferred if feasible) PV HVM=
 guest.____<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0__ __<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0I&#39;m now stuck at the planning stage of Windows =
PV drivers. I don&#39;t<br>
&gt;=C2=A0 =C2=A0 =C2=A0want to compile anything and set the Windows to tes=
t mode.____<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0__ __<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0So can I just download the PV drivers from Citrix a=
nd installed to<br>
&gt;=C2=A0 =C2=A0 =C2=A0the guest? Will it work with my Xen 4.5/4.6 Hypervi=
sor with Ubuntu<br>
&gt;=C2=A0 =C2=A0 =C2=A015.04 Domain 0?____<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0__ __<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0I&#39;ll be very grateful if anyone can help me.___=
_<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0__ __<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0Regards____<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0Lok____<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0__ __<br>
&gt;<br>
&gt;=C2=A0 =C2=A0 =C2=A0__ __<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; win-pv-devel mailing list<br>
&gt; <a href=3D"javascript:;" onclick=3D"_e(event, &#39;cvml&#39;, &#39;win=
-pv-devel@lists.xenproject.org&#39;)">win-pv-devel@lists.xenproject.org</a>=
<br>
&gt; <a href=3D"http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv=
-devel" target=3D"_blank">http://lists.xenproject.org/cgi-bin/mailman/listi=
nfo/win-pv-devel</a><br>
&gt;<br>
<br>
--<br>
<br>
<br>
=C3=89li=C3=A1s Tam=C3=A1s<br>
Thomas Elias<br>
<br>
ETIT[nwpro] KFT, =C3=9Cgyvezet=C5=91-H=C3=A1l=C3=B3zatbiztons=C3=A1gi speci=
alista<br>
ETIT[nwpro] Ltd, General Manager-Network security specialist<br>
<br>
Tel. HU: +36/30-497-1626<br>
Tel. DE: +49/160-651-8723<br>
OpenPGP pubkey: <a href=3D"http://etit.hu/doc/et-pub.asc" target=3D"_blank"=
>http://etit.hu/doc/et-pub.asc</a><br>
<br>
Okleveles m=C3=A9rn=C3=B6k-informatikus (MSC)<br>
Master of Science in Information Technology (MSC)<br>
<br>
Kapcsolat: <a href=3D"http://etit.hu/index.php/hu/kapcsolat" target=3D"_bla=
nk">http://etit.hu/index.php/hu/kapcsolat</a><br>
Jogi nyilatkozat: <a href=3D"http://etit.hu/disclaimer-email-hu.txt" target=
=3D"_blank">http://etit.hu/disclaimer-email-hu.txt</a><br>
Contact: <a href=3D"http://etit.hu/index.php/en/contact" target=3D"_blank">=
http://etit.hu/index.php/en/contact</a><br>
Disclaimer: <a href=3D"http://etit.hu/disclaimer-email-en.txt" target=3D"_b=
lank">http://etit.hu/disclaimer-email-en.txt</a><br>
<br>
</blockquote></div>

--047d7b33d4f660f23c0523a2a738--


--===============2832367304651803164==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--===============2832367304651803164==--


From win-pv-devel-bounces@lists.xenproject.org Wed Nov 04 04:38:11 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 04 Nov 2015 04:38:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1Ztppq-00027I-1C; Wed, 04 Nov 2015 04:38:10 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1Ztppp-00027D-7C
	for win-pv-devel@lists.xenproject.org; Wed, 04 Nov 2015 04:38:09 +0000
Received: from [85.158.137.68] by server-6.bemta-3.messagelabs.com id
	BA/FA-29649-0BB89365; Wed, 04 Nov 2015 04:38:08 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-10.tower-31.messagelabs.com!1446611886!761669!1
X-Originating-IP: [66.111.4.28]
X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 17891 invoked from network); 4 Nov 2015 04:38:07 -0000
Received: from out4-smtp.messagingengine.com (HELO
	out4-smtp.messagingengine.com) (66.111.4.28)
	by server-10.tower-31.messagelabs.com with AES256-GCM-SHA384 encrypted
	SMTP; 4 Nov 2015 04:38:07 -0000
Received: from compute4.internal (compute4.nyi.internal [10.202.2.44])
	by mailout.nyi.internal (Postfix) with ESMTP id 45C37205DE
	for <win-pv-devel@lists.xenproject.org>;
	Tue,  3 Nov 2015 23:38:06 -0500 (EST)
Received: from frontend1 ([10.202.2.160])
	by compute4.internal (MEProxy); Tue, 03 Nov 2015 23:38:06 -0500
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=mesmtp; bh=TtqdwJ+YJPtv0lHVO594FVSP6nU=; b=Fp6Cye
	ikrPZmQpuedpzQpi6Wl9eVSW3jE5Xgwm3enHZms2wVeg/vemNPm3sxhd2LDGidlo
	EwFP+5dsuR5PGeqly2RDSBZ5+GLIM8cWG4KHtXeJHVjgFIGQWqTQ8rHBIxgs7lJ9
	m3l+ZD4fWcKFAZjecn1O6qtUlTLWll7OsQwRY=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=smtpout; bh=TtqdwJ+YJPtv0lHVO594FVSP6nU=; b=VnZ+4
	Zt85H0D8Gtvsr60PNl/jc50+Tr6sEXb0ig/cs4PX9CBT1tmyjVf1yleP746uIJnn
	1l9L5Nxk/IwkVTb4zBy3+U6NFtcyfPlGa9wjwCn1T0IgeFbyKsOju4ejqvipwUyE
	13j1nNM7tjMUPoKDjD2D+6mVH0UQqGa6o3ZM9A=
X-Sasl-enc: 4/gn4LylGKfNcIRPzJ4kKA5rs9H66LYHe3Fy2ffwO4Cu 1446611885
Received: from [192.168.0.3] (89-72-164-138.dynamic.chello.pl [89.72.164.138])
	by mail.messagingengine.com (Postfix) with ESMTPA id 4CD3AC016DB
	for <win-pv-devel@lists.xenproject.org>;
	Tue,  3 Nov 2015 23:38:05 -0500 (EST)
To: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
X-Enigmail-Draft-Status: N1010
Message-ID: <56398BB6.9030109@invisiblethingslab.com>
Date: Wed, 4 Nov 2015 05:38:14 +0100
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.3.0
MIME-Version: 1.0
Subject: [win-pv-devel] [PATCH 1/2] Remove unused Visual Studio solution
	configurations
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

Signed-off-by: Rafal Wojdyla <omeg@invisiblethingslab.com>
---
 vs2012/xeniface.sln | 45 ---------------------------------------------
 vs2013/xeniface.sln | 48 ++----------------------------------------------
 2 files changed, 2 insertions(+), 91 deletions(-)

diff --git a/vs2012/xeniface.sln b/vs2012/xeniface.sln
index cb6becf..a61a1ff 100644
--- a/vs2012/xeniface.sln
+++ b/vs2012/xeniface.sln
@@ -14,10 +14,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "package", "package\package.
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|Win32 = Debug|Win32
-		Debug|x64 = Debug|x64
-		Release|Win32 = Release|Win32
-		Release|x64 = Release|x64
 		Windows 7 Debug|Win32 = Windows 7 Debug|Win32
 		Windows 7 Debug|x64 = Windows 7 Debug|x64
 		Windows 7 Release|Win32 = Windows 7 Release|Win32
@@ -32,18 +28,6 @@ Global
 		Windows Vista Release|x64 = Windows Vista Release|x64
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Debug|Win32.ActiveCfg = Windows 8 Debug|Win32
-		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Debug|Win32.Build.0 = Windows 8 Debug|Win32
-		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Debug|Win32.Deploy.0 = Windows 8 Debug|Win32
-		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Debug|x64.ActiveCfg = Windows 7 Debug|x64
-		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Debug|x64.Build.0 = Windows 7 Debug|x64
-		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Debug|x64.Deploy.0 = Windows 7 Debug|x64
-		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Release|Win32.ActiveCfg = Windows 7 Release|Win32
-		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Release|Win32.Build.0 = Windows 7 Release|Win32
-		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Release|Win32.Deploy.0 = Windows 7 Release|Win32
-		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Release|x64.ActiveCfg = Windows 7 Release|x64
-		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Release|x64.Build.0 = Windows 7 Release|x64
-		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Release|x64.Deploy.0 = Windows 7 Release|x64
 		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Windows 7 Debug|Win32.ActiveCfg = Windows 7 Debug|Win32
 		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Windows 7 Debug|Win32.Build.0 = Windows 7 Debug|Win32
 		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Windows 7 Debug|Win32.Deploy.0 = Windows 7 Debug|Win32
@@ -80,17 +64,6 @@ Global
 		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Windows Vista Release|x64.ActiveCfg = Windows Vista Release|x64
 		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Windows Vista Release|x64.Build.0 = Windows Vista Release|x64
 		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Windows Vista Release|x64.Deploy.0 = Windows Vista Release|x64
-		{22166290-65D8-49D2-BB88-33201797C7D8}.Debug|Win32.ActiveCfg = Windows 8 Debug|Win32
-		{22166290-65D8-49D2-BB88-33201797C7D8}.Debug|Win32.Build.0 = Windows 8 Debug|Win32
-		{22166290-65D8-49D2-BB88-33201797C7D8}.Debug|Win32.Deploy.0 = Windows 8 Debug|Win32
-		{22166290-65D8-49D2-BB88-33201797C7D8}.Debug|x64.ActiveCfg = Windows8 Debug|x64
-		{22166290-65D8-49D2-BB88-33201797C7D8}.Debug|x64.Build.0 = Windows8 Debug|x64
-		{22166290-65D8-49D2-BB88-33201797C7D8}.Debug|x64.Deploy.0 = Windows8 Debug|x64
-		{22166290-65D8-49D2-BB88-33201797C7D8}.Release|Win32.ActiveCfg = Windows 8 Release|Win32
-		{22166290-65D8-49D2-BB88-33201797C7D8}.Release|Win32.Build.0 = Windows 8 Release|Win32
-		{22166290-65D8-49D2-BB88-33201797C7D8}.Release|Win32.Deploy.0 = Windows 8 Release|Win32
-		{22166290-65D8-49D2-BB88-33201797C7D8}.Release|x64.ActiveCfg = Windows 8 Release|x64
-		{22166290-65D8-49D2-BB88-33201797C7D8}.Release|x64.Build.0 = Windows 8 Release|x64
 		{22166290-65D8-49D2-BB88-33201797C7D8}.Windows 7 Debug|Win32.ActiveCfg = Windows 7 Debug|Win32
 		{22166290-65D8-49D2-BB88-33201797C7D8}.Windows 7 Debug|Win32.Build.0 = Windows 7 Debug|Win32
 		{22166290-65D8-49D2-BB88-33201797C7D8}.Windows 7 Debug|Win32.Deploy.0 = Windows 7 Debug|Win32
@@ -127,14 +100,6 @@ Global
 		{22166290-65D8-49D2-BB88-33201797C7D8}.Windows Vista Release|x64.ActiveCfg = Windows Vista Release|x64
 		{22166290-65D8-49D2-BB88-33201797C7D8}.Windows Vista Release|x64.Build.0 = Windows Vista Release|x64
 		{22166290-65D8-49D2-BB88-33201797C7D8}.Windows Vista Release|x64.Deploy.0 = Windows Vista Release|x64
-		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Debug|Win32.ActiveCfg = Debug|Win32
-		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Debug|Win32.Build.0 = Debug|Win32
-		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Debug|Win32.Deploy.0 = Debug|Win32
-		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Debug|x64.ActiveCfg = Debug|Win32
-		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Release|Win32.ActiveCfg = Release|Win32
-		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Release|Win32.Build.0 = Release|Win32
-		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Release|Win32.Deploy.0 = Release|Win32
-		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Release|x64.ActiveCfg = Release|Win32
 		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Windows 7 Debug|Win32.ActiveCfg = Debug|Win32
 		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Windows 7 Debug|Win32.Build.0 = Debug|Win32
 		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Windows 7 Debug|Win32.Deploy.0 = Debug|Win32
@@ -163,16 +128,6 @@ Global
 		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Windows Vista Release|x64.ActiveCfg = Release|x64
 		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Windows Vista Release|x64.Build.0 = Release|x64
 		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Windows Vista Release|x64.Deploy.0 = Release|x64
-		{9B071A35-897C-477A-AEB7-95F77618A21D}.Debug|Win32.ActiveCfg = Windows Vista Debug|Win32
-		{9B071A35-897C-477A-AEB7-95F77618A21D}.Debug|Win32.Build.0 = Windows Vista Debug|Win32
-		{9B071A35-897C-477A-AEB7-95F77618A21D}.Debug|Win32.Deploy.0 = Windows Vista Debug|Win32
-		{9B071A35-897C-477A-AEB7-95F77618A21D}.Debug|x64.ActiveCfg = Windows Vista Debug|x64
-		{9B071A35-897C-477A-AEB7-95F77618A21D}.Debug|x64.Build.0 = Windows Vista Debug|x64
-		{9B071A35-897C-477A-AEB7-95F77618A21D}.Release|Win32.ActiveCfg = Windows Vista Release|Win32
-		{9B071A35-897C-477A-AEB7-95F77618A21D}.Release|Win32.Build.0 = Windows Vista Release|Win32
-		{9B071A35-897C-477A-AEB7-95F77618A21D}.Release|Win32.Deploy.0 = Windows Vista Release|Win32
-		{9B071A35-897C-477A-AEB7-95F77618A21D}.Release|x64.ActiveCfg = Windows Vista Release|x64
-		{9B071A35-897C-477A-AEB7-95F77618A21D}.Release|x64.Build.0 = Windows Vista Release|x64
 		{9B071A35-897C-477A-AEB7-95F77618A21D}.Windows 7 Debug|Win32.ActiveCfg = Windows 7 Debug|Win32
 		{9B071A35-897C-477A-AEB7-95F77618A21D}.Windows 7 Debug|Win32.Build.0 = Windows 7 Debug|Win32
 		{9B071A35-897C-477A-AEB7-95F77618A21D}.Windows 7 Debug|Win32.Deploy.0 = Windows 7 Debug|Win32
diff --git a/vs2013/xeniface.sln b/vs2013/xeniface.sln
index 413b86a..3c74c79 100644
--- a/vs2013/xeniface.sln
+++ b/vs2013/xeniface.sln
@@ -1,6 +1,6 @@
 Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Express 2013 for Windows Desktop
-VisualStudioVersion = 12.0.30723.0
+# Visual Studio 2013
+VisualStudioVersion = 12.0.40629.0
 MinimumVisualStudioVersion = 10.0.40219.1
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xeniface_coinst", "xeniface_coinst\xeniface_coinst.vcxproj", "{85C731AD-2EA2-4049-A542-D2D38EDE938C}"
 EndProject
@@ -19,10 +19,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "package", "package\package.
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|Win32 = Debug|Win32
-		Debug|x64 = Debug|x64
-		Release|Win32 = Release|Win32
-		Release|x64 = Release|x64
 		Windows 7 Debug|Win32 = Windows 7 Debug|Win32
 		Windows 7 Debug|x64 = Windows 7 Debug|x64
 		Windows 7 Release|Win32 = Windows 7 Release|Win32
@@ -37,18 +33,6 @@ Global
 		Windows Vista Release|x64 = Windows Vista Release|x64
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Debug|Win32.ActiveCfg = Windows 8 Debug|Win32
-		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Debug|Win32.Build.0 = Windows 8 Debug|Win32
-		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Debug|Win32.Deploy.0 = Windows 8 Debug|Win32
-		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Debug|x64.ActiveCfg = Windows 8 Debug|x64
-		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Debug|x64.Build.0 = Windows 8 Debug|x64
-		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Debug|x64.Deploy.0 = Windows 8 Debug|x64
-		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Release|Win32.ActiveCfg = Windows 7 Release|Win32
-		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Release|Win32.Build.0 = Windows 7 Release|Win32
-		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Release|Win32.Deploy.0 = Windows 7 Release|Win32
-		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Release|x64.ActiveCfg = Windows 7 Release|x64
-		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Release|x64.Build.0 = Windows 7 Release|x64
-		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Release|x64.Deploy.0 = Windows 7 Release|x64
 		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Windows 7 Debug|Win32.ActiveCfg = Windows 7 Debug|Win32
 		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Windows 7 Debug|Win32.Build.0 = Windows 7 Debug|Win32
 		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Windows 7 Debug|Win32.Deploy.0 = Windows 7 Debug|Win32
@@ -85,16 +69,6 @@ Global
 		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Windows Vista Release|x64.ActiveCfg = Windows Vista Release|x64
 		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Windows Vista Release|x64.Build.0 = Windows Vista Release|x64
 		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Windows Vista Release|x64.Deploy.0 = Windows Vista Release|x64
-		{22166290-65D8-49D2-BB88-33201797C7D8}.Debug|Win32.ActiveCfg = Windows 8 Debug|Win32
-		{22166290-65D8-49D2-BB88-33201797C7D8}.Debug|Win32.Build.0 = Windows 8 Debug|Win32
-		{22166290-65D8-49D2-BB88-33201797C7D8}.Debug|Win32.Deploy.0 = Windows 8 Debug|Win32
-		{22166290-65D8-49D2-BB88-33201797C7D8}.Debug|x64.ActiveCfg = Windows 8 Debug|x64
-		{22166290-65D8-49D2-BB88-33201797C7D8}.Debug|x64.Build.0 = Windows 8 Debug|x64
-		{22166290-65D8-49D2-BB88-33201797C7D8}.Release|Win32.ActiveCfg = Windows 8 Release|Win32
-		{22166290-65D8-49D2-BB88-33201797C7D8}.Release|Win32.Build.0 = Windows 8 Release|Win32
-		{22166290-65D8-49D2-BB88-33201797C7D8}.Release|Win32.Deploy.0 = Windows 8 Release|Win32
-		{22166290-65D8-49D2-BB88-33201797C7D8}.Release|x64.ActiveCfg = Windows 8 Release|x64
-		{22166290-65D8-49D2-BB88-33201797C7D8}.Release|x64.Build.0 = Windows 8 Release|x64
 		{22166290-65D8-49D2-BB88-33201797C7D8}.Windows 7 Debug|Win32.ActiveCfg = Windows 7 Debug|Win32
 		{22166290-65D8-49D2-BB88-33201797C7D8}.Windows 7 Debug|Win32.Build.0 = Windows 7 Debug|Win32
 		{22166290-65D8-49D2-BB88-33201797C7D8}.Windows 7 Debug|Win32.Deploy.0 = Windows 7 Debug|Win32
@@ -127,14 +101,6 @@ Global
 		{22166290-65D8-49D2-BB88-33201797C7D8}.Windows Vista Release|x64.ActiveCfg = Windows Vista Release|x64
 		{22166290-65D8-49D2-BB88-33201797C7D8}.Windows Vista Release|x64.Build.0 = Windows Vista Release|x64
 		{22166290-65D8-49D2-BB88-33201797C7D8}.Windows Vista Release|x64.Deploy.0 = Windows Vista Release|x64
-		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Debug|Win32.ActiveCfg = Debug|Win32
-		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Debug|Win32.Build.0 = Debug|Win32
-		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Debug|Win32.Deploy.0 = Debug|Win32
-		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Debug|x64.ActiveCfg = Debug|Win32
-		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Release|Win32.ActiveCfg = Release|Win32
-		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Release|Win32.Build.0 = Release|Win32
-		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Release|Win32.Deploy.0 = Release|Win32
-		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Release|x64.ActiveCfg = Release|Win32
 		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Windows 7 Debug|Win32.ActiveCfg = Debug|Win32
 		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Windows 7 Debug|Win32.Build.0 = Debug|Win32
 		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Windows 7 Debug|Win32.Deploy.0 = Debug|Win32
@@ -167,16 +133,6 @@ Global
 		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Windows Vista Release|x64.ActiveCfg = Release|x64
 		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Windows Vista Release|x64.Build.0 = Release|x64
 		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Windows Vista Release|x64.Deploy.0 = Release|x64
-		{9B071A35-897C-477A-AEB7-95F77618A21D}.Debug|Win32.ActiveCfg = Windows Vista Debug|Win32
-		{9B071A35-897C-477A-AEB7-95F77618A21D}.Debug|Win32.Build.0 = Windows Vista Debug|Win32
-		{9B071A35-897C-477A-AEB7-95F77618A21D}.Debug|Win32.Deploy.0 = Windows Vista Debug|Win32
-		{9B071A35-897C-477A-AEB7-95F77618A21D}.Debug|x64.ActiveCfg = Windows Vista Debug|x64
-		{9B071A35-897C-477A-AEB7-95F77618A21D}.Debug|x64.Build.0 = Windows Vista Debug|x64
-		{9B071A35-897C-477A-AEB7-95F77618A21D}.Release|Win32.ActiveCfg = Windows Vista Release|Win32
-		{9B071A35-897C-477A-AEB7-95F77618A21D}.Release|Win32.Build.0 = Windows Vista Release|Win32
-		{9B071A35-897C-477A-AEB7-95F77618A21D}.Release|Win32.Deploy.0 = Windows Vista Release|Win32
-		{9B071A35-897C-477A-AEB7-95F77618A21D}.Release|x64.ActiveCfg = Windows Vista Release|x64
-		{9B071A35-897C-477A-AEB7-95F77618A21D}.Release|x64.Build.0 = Windows Vista Release|x64
 		{9B071A35-897C-477A-AEB7-95F77618A21D}.Windows 7 Debug|Win32.ActiveCfg = Windows 7 Debug|Win32
 		{9B071A35-897C-477A-AEB7-95F77618A21D}.Windows 7 Debug|Win32.Build.0 = Windows 7 Debug|Win32
 		{9B071A35-897C-477A-AEB7-95F77618A21D}.Windows 7 Debug|Win32.Deploy.0 = Windows 7 Debug|Win32
-- 
1.8.1.msysgit.1


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

From win-pv-devel-bounces@lists.xenproject.org Wed Nov 04 04:38:11 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 04 Nov 2015 04:38:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1Ztppq-00027I-1C; Wed, 04 Nov 2015 04:38:10 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1Ztppp-00027D-7C
	for win-pv-devel@lists.xenproject.org; Wed, 04 Nov 2015 04:38:09 +0000
Received: from [85.158.137.68] by server-6.bemta-3.messagelabs.com id
	BA/FA-29649-0BB89365; Wed, 04 Nov 2015 04:38:08 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-10.tower-31.messagelabs.com!1446611886!761669!1
X-Originating-IP: [66.111.4.28]
X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 17891 invoked from network); 4 Nov 2015 04:38:07 -0000
Received: from out4-smtp.messagingengine.com (HELO
	out4-smtp.messagingengine.com) (66.111.4.28)
	by server-10.tower-31.messagelabs.com with AES256-GCM-SHA384 encrypted
	SMTP; 4 Nov 2015 04:38:07 -0000
Received: from compute4.internal (compute4.nyi.internal [10.202.2.44])
	by mailout.nyi.internal (Postfix) with ESMTP id 45C37205DE
	for <win-pv-devel@lists.xenproject.org>;
	Tue,  3 Nov 2015 23:38:06 -0500 (EST)
Received: from frontend1 ([10.202.2.160])
	by compute4.internal (MEProxy); Tue, 03 Nov 2015 23:38:06 -0500
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=mesmtp; bh=TtqdwJ+YJPtv0lHVO594FVSP6nU=; b=Fp6Cye
	ikrPZmQpuedpzQpi6Wl9eVSW3jE5Xgwm3enHZms2wVeg/vemNPm3sxhd2LDGidlo
	EwFP+5dsuR5PGeqly2RDSBZ5+GLIM8cWG4KHtXeJHVjgFIGQWqTQ8rHBIxgs7lJ9
	m3l+ZD4fWcKFAZjecn1O6qtUlTLWll7OsQwRY=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=smtpout; bh=TtqdwJ+YJPtv0lHVO594FVSP6nU=; b=VnZ+4
	Zt85H0D8Gtvsr60PNl/jc50+Tr6sEXb0ig/cs4PX9CBT1tmyjVf1yleP746uIJnn
	1l9L5Nxk/IwkVTb4zBy3+U6NFtcyfPlGa9wjwCn1T0IgeFbyKsOju4ejqvipwUyE
	13j1nNM7tjMUPoKDjD2D+6mVH0UQqGa6o3ZM9A=
X-Sasl-enc: 4/gn4LylGKfNcIRPzJ4kKA5rs9H66LYHe3Fy2ffwO4Cu 1446611885
Received: from [192.168.0.3] (89-72-164-138.dynamic.chello.pl [89.72.164.138])
	by mail.messagingengine.com (Postfix) with ESMTPA id 4CD3AC016DB
	for <win-pv-devel@lists.xenproject.org>;
	Tue,  3 Nov 2015 23:38:05 -0500 (EST)
To: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
X-Enigmail-Draft-Status: N1010
Message-ID: <56398BB6.9030109@invisiblethingslab.com>
Date: Wed, 4 Nov 2015 05:38:14 +0100
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.3.0
MIME-Version: 1.0
Subject: [win-pv-devel] [PATCH 1/2] Remove unused Visual Studio solution
	configurations
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

Signed-off-by: Rafal Wojdyla <omeg@invisiblethingslab.com>
---
 vs2012/xeniface.sln | 45 ---------------------------------------------
 vs2013/xeniface.sln | 48 ++----------------------------------------------
 2 files changed, 2 insertions(+), 91 deletions(-)

diff --git a/vs2012/xeniface.sln b/vs2012/xeniface.sln
index cb6becf..a61a1ff 100644
--- a/vs2012/xeniface.sln
+++ b/vs2012/xeniface.sln
@@ -14,10 +14,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "package", "package\package.
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|Win32 = Debug|Win32
-		Debug|x64 = Debug|x64
-		Release|Win32 = Release|Win32
-		Release|x64 = Release|x64
 		Windows 7 Debug|Win32 = Windows 7 Debug|Win32
 		Windows 7 Debug|x64 = Windows 7 Debug|x64
 		Windows 7 Release|Win32 = Windows 7 Release|Win32
@@ -32,18 +28,6 @@ Global
 		Windows Vista Release|x64 = Windows Vista Release|x64
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Debug|Win32.ActiveCfg = Windows 8 Debug|Win32
-		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Debug|Win32.Build.0 = Windows 8 Debug|Win32
-		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Debug|Win32.Deploy.0 = Windows 8 Debug|Win32
-		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Debug|x64.ActiveCfg = Windows 7 Debug|x64
-		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Debug|x64.Build.0 = Windows 7 Debug|x64
-		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Debug|x64.Deploy.0 = Windows 7 Debug|x64
-		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Release|Win32.ActiveCfg = Windows 7 Release|Win32
-		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Release|Win32.Build.0 = Windows 7 Release|Win32
-		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Release|Win32.Deploy.0 = Windows 7 Release|Win32
-		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Release|x64.ActiveCfg = Windows 7 Release|x64
-		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Release|x64.Build.0 = Windows 7 Release|x64
-		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Release|x64.Deploy.0 = Windows 7 Release|x64
 		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Windows 7 Debug|Win32.ActiveCfg = Windows 7 Debug|Win32
 		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Windows 7 Debug|Win32.Build.0 = Windows 7 Debug|Win32
 		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Windows 7 Debug|Win32.Deploy.0 = Windows 7 Debug|Win32
@@ -80,17 +64,6 @@ Global
 		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Windows Vista Release|x64.ActiveCfg = Windows Vista Release|x64
 		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Windows Vista Release|x64.Build.0 = Windows Vista Release|x64
 		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Windows Vista Release|x64.Deploy.0 = Windows Vista Release|x64
-		{22166290-65D8-49D2-BB88-33201797C7D8}.Debug|Win32.ActiveCfg = Windows 8 Debug|Win32
-		{22166290-65D8-49D2-BB88-33201797C7D8}.Debug|Win32.Build.0 = Windows 8 Debug|Win32
-		{22166290-65D8-49D2-BB88-33201797C7D8}.Debug|Win32.Deploy.0 = Windows 8 Debug|Win32
-		{22166290-65D8-49D2-BB88-33201797C7D8}.Debug|x64.ActiveCfg = Windows8 Debug|x64
-		{22166290-65D8-49D2-BB88-33201797C7D8}.Debug|x64.Build.0 = Windows8 Debug|x64
-		{22166290-65D8-49D2-BB88-33201797C7D8}.Debug|x64.Deploy.0 = Windows8 Debug|x64
-		{22166290-65D8-49D2-BB88-33201797C7D8}.Release|Win32.ActiveCfg = Windows 8 Release|Win32
-		{22166290-65D8-49D2-BB88-33201797C7D8}.Release|Win32.Build.0 = Windows 8 Release|Win32
-		{22166290-65D8-49D2-BB88-33201797C7D8}.Release|Win32.Deploy.0 = Windows 8 Release|Win32
-		{22166290-65D8-49D2-BB88-33201797C7D8}.Release|x64.ActiveCfg = Windows 8 Release|x64
-		{22166290-65D8-49D2-BB88-33201797C7D8}.Release|x64.Build.0 = Windows 8 Release|x64
 		{22166290-65D8-49D2-BB88-33201797C7D8}.Windows 7 Debug|Win32.ActiveCfg = Windows 7 Debug|Win32
 		{22166290-65D8-49D2-BB88-33201797C7D8}.Windows 7 Debug|Win32.Build.0 = Windows 7 Debug|Win32
 		{22166290-65D8-49D2-BB88-33201797C7D8}.Windows 7 Debug|Win32.Deploy.0 = Windows 7 Debug|Win32
@@ -127,14 +100,6 @@ Global
 		{22166290-65D8-49D2-BB88-33201797C7D8}.Windows Vista Release|x64.ActiveCfg = Windows Vista Release|x64
 		{22166290-65D8-49D2-BB88-33201797C7D8}.Windows Vista Release|x64.Build.0 = Windows Vista Release|x64
 		{22166290-65D8-49D2-BB88-33201797C7D8}.Windows Vista Release|x64.Deploy.0 = Windows Vista Release|x64
-		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Debug|Win32.ActiveCfg = Debug|Win32
-		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Debug|Win32.Build.0 = Debug|Win32
-		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Debug|Win32.Deploy.0 = Debug|Win32
-		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Debug|x64.ActiveCfg = Debug|Win32
-		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Release|Win32.ActiveCfg = Release|Win32
-		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Release|Win32.Build.0 = Release|Win32
-		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Release|Win32.Deploy.0 = Release|Win32
-		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Release|x64.ActiveCfg = Release|Win32
 		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Windows 7 Debug|Win32.ActiveCfg = Debug|Win32
 		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Windows 7 Debug|Win32.Build.0 = Debug|Win32
 		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Windows 7 Debug|Win32.Deploy.0 = Debug|Win32
@@ -163,16 +128,6 @@ Global
 		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Windows Vista Release|x64.ActiveCfg = Release|x64
 		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Windows Vista Release|x64.Build.0 = Release|x64
 		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Windows Vista Release|x64.Deploy.0 = Release|x64
-		{9B071A35-897C-477A-AEB7-95F77618A21D}.Debug|Win32.ActiveCfg = Windows Vista Debug|Win32
-		{9B071A35-897C-477A-AEB7-95F77618A21D}.Debug|Win32.Build.0 = Windows Vista Debug|Win32
-		{9B071A35-897C-477A-AEB7-95F77618A21D}.Debug|Win32.Deploy.0 = Windows Vista Debug|Win32
-		{9B071A35-897C-477A-AEB7-95F77618A21D}.Debug|x64.ActiveCfg = Windows Vista Debug|x64
-		{9B071A35-897C-477A-AEB7-95F77618A21D}.Debug|x64.Build.0 = Windows Vista Debug|x64
-		{9B071A35-897C-477A-AEB7-95F77618A21D}.Release|Win32.ActiveCfg = Windows Vista Release|Win32
-		{9B071A35-897C-477A-AEB7-95F77618A21D}.Release|Win32.Build.0 = Windows Vista Release|Win32
-		{9B071A35-897C-477A-AEB7-95F77618A21D}.Release|Win32.Deploy.0 = Windows Vista Release|Win32
-		{9B071A35-897C-477A-AEB7-95F77618A21D}.Release|x64.ActiveCfg = Windows Vista Release|x64
-		{9B071A35-897C-477A-AEB7-95F77618A21D}.Release|x64.Build.0 = Windows Vista Release|x64
 		{9B071A35-897C-477A-AEB7-95F77618A21D}.Windows 7 Debug|Win32.ActiveCfg = Windows 7 Debug|Win32
 		{9B071A35-897C-477A-AEB7-95F77618A21D}.Windows 7 Debug|Win32.Build.0 = Windows 7 Debug|Win32
 		{9B071A35-897C-477A-AEB7-95F77618A21D}.Windows 7 Debug|Win32.Deploy.0 = Windows 7 Debug|Win32
diff --git a/vs2013/xeniface.sln b/vs2013/xeniface.sln
index 413b86a..3c74c79 100644
--- a/vs2013/xeniface.sln
+++ b/vs2013/xeniface.sln
@@ -1,6 +1,6 @@
 Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Express 2013 for Windows Desktop
-VisualStudioVersion = 12.0.30723.0
+# Visual Studio 2013
+VisualStudioVersion = 12.0.40629.0
 MinimumVisualStudioVersion = 10.0.40219.1
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xeniface_coinst", "xeniface_coinst\xeniface_coinst.vcxproj", "{85C731AD-2EA2-4049-A542-D2D38EDE938C}"
 EndProject
@@ -19,10 +19,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "package", "package\package.
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|Win32 = Debug|Win32
-		Debug|x64 = Debug|x64
-		Release|Win32 = Release|Win32
-		Release|x64 = Release|x64
 		Windows 7 Debug|Win32 = Windows 7 Debug|Win32
 		Windows 7 Debug|x64 = Windows 7 Debug|x64
 		Windows 7 Release|Win32 = Windows 7 Release|Win32
@@ -37,18 +33,6 @@ Global
 		Windows Vista Release|x64 = Windows Vista Release|x64
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Debug|Win32.ActiveCfg = Windows 8 Debug|Win32
-		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Debug|Win32.Build.0 = Windows 8 Debug|Win32
-		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Debug|Win32.Deploy.0 = Windows 8 Debug|Win32
-		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Debug|x64.ActiveCfg = Windows 8 Debug|x64
-		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Debug|x64.Build.0 = Windows 8 Debug|x64
-		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Debug|x64.Deploy.0 = Windows 8 Debug|x64
-		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Release|Win32.ActiveCfg = Windows 7 Release|Win32
-		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Release|Win32.Build.0 = Windows 7 Release|Win32
-		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Release|Win32.Deploy.0 = Windows 7 Release|Win32
-		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Release|x64.ActiveCfg = Windows 7 Release|x64
-		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Release|x64.Build.0 = Windows 7 Release|x64
-		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Release|x64.Deploy.0 = Windows 7 Release|x64
 		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Windows 7 Debug|Win32.ActiveCfg = Windows 7 Debug|Win32
 		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Windows 7 Debug|Win32.Build.0 = Windows 7 Debug|Win32
 		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Windows 7 Debug|Win32.Deploy.0 = Windows 7 Debug|Win32
@@ -85,16 +69,6 @@ Global
 		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Windows Vista Release|x64.ActiveCfg = Windows Vista Release|x64
 		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Windows Vista Release|x64.Build.0 = Windows Vista Release|x64
 		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Windows Vista Release|x64.Deploy.0 = Windows Vista Release|x64
-		{22166290-65D8-49D2-BB88-33201797C7D8}.Debug|Win32.ActiveCfg = Windows 8 Debug|Win32
-		{22166290-65D8-49D2-BB88-33201797C7D8}.Debug|Win32.Build.0 = Windows 8 Debug|Win32
-		{22166290-65D8-49D2-BB88-33201797C7D8}.Debug|Win32.Deploy.0 = Windows 8 Debug|Win32
-		{22166290-65D8-49D2-BB88-33201797C7D8}.Debug|x64.ActiveCfg = Windows 8 Debug|x64
-		{22166290-65D8-49D2-BB88-33201797C7D8}.Debug|x64.Build.0 = Windows 8 Debug|x64
-		{22166290-65D8-49D2-BB88-33201797C7D8}.Release|Win32.ActiveCfg = Windows 8 Release|Win32
-		{22166290-65D8-49D2-BB88-33201797C7D8}.Release|Win32.Build.0 = Windows 8 Release|Win32
-		{22166290-65D8-49D2-BB88-33201797C7D8}.Release|Win32.Deploy.0 = Windows 8 Release|Win32
-		{22166290-65D8-49D2-BB88-33201797C7D8}.Release|x64.ActiveCfg = Windows 8 Release|x64
-		{22166290-65D8-49D2-BB88-33201797C7D8}.Release|x64.Build.0 = Windows 8 Release|x64
 		{22166290-65D8-49D2-BB88-33201797C7D8}.Windows 7 Debug|Win32.ActiveCfg = Windows 7 Debug|Win32
 		{22166290-65D8-49D2-BB88-33201797C7D8}.Windows 7 Debug|Win32.Build.0 = Windows 7 Debug|Win32
 		{22166290-65D8-49D2-BB88-33201797C7D8}.Windows 7 Debug|Win32.Deploy.0 = Windows 7 Debug|Win32
@@ -127,14 +101,6 @@ Global
 		{22166290-65D8-49D2-BB88-33201797C7D8}.Windows Vista Release|x64.ActiveCfg = Windows Vista Release|x64
 		{22166290-65D8-49D2-BB88-33201797C7D8}.Windows Vista Release|x64.Build.0 = Windows Vista Release|x64
 		{22166290-65D8-49D2-BB88-33201797C7D8}.Windows Vista Release|x64.Deploy.0 = Windows Vista Release|x64
-		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Debug|Win32.ActiveCfg = Debug|Win32
-		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Debug|Win32.Build.0 = Debug|Win32
-		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Debug|Win32.Deploy.0 = Debug|Win32
-		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Debug|x64.ActiveCfg = Debug|Win32
-		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Release|Win32.ActiveCfg = Release|Win32
-		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Release|Win32.Build.0 = Release|Win32
-		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Release|Win32.Deploy.0 = Release|Win32
-		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Release|x64.ActiveCfg = Release|Win32
 		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Windows 7 Debug|Win32.ActiveCfg = Debug|Win32
 		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Windows 7 Debug|Win32.Build.0 = Debug|Win32
 		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Windows 7 Debug|Win32.Deploy.0 = Debug|Win32
@@ -167,16 +133,6 @@ Global
 		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Windows Vista Release|x64.ActiveCfg = Release|x64
 		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Windows Vista Release|x64.Build.0 = Release|x64
 		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Windows Vista Release|x64.Deploy.0 = Release|x64
-		{9B071A35-897C-477A-AEB7-95F77618A21D}.Debug|Win32.ActiveCfg = Windows Vista Debug|Win32
-		{9B071A35-897C-477A-AEB7-95F77618A21D}.Debug|Win32.Build.0 = Windows Vista Debug|Win32
-		{9B071A35-897C-477A-AEB7-95F77618A21D}.Debug|Win32.Deploy.0 = Windows Vista Debug|Win32
-		{9B071A35-897C-477A-AEB7-95F77618A21D}.Debug|x64.ActiveCfg = Windows Vista Debug|x64
-		{9B071A35-897C-477A-AEB7-95F77618A21D}.Debug|x64.Build.0 = Windows Vista Debug|x64
-		{9B071A35-897C-477A-AEB7-95F77618A21D}.Release|Win32.ActiveCfg = Windows Vista Release|Win32
-		{9B071A35-897C-477A-AEB7-95F77618A21D}.Release|Win32.Build.0 = Windows Vista Release|Win32
-		{9B071A35-897C-477A-AEB7-95F77618A21D}.Release|Win32.Deploy.0 = Windows Vista Release|Win32
-		{9B071A35-897C-477A-AEB7-95F77618A21D}.Release|x64.ActiveCfg = Windows Vista Release|x64
-		{9B071A35-897C-477A-AEB7-95F77618A21D}.Release|x64.Build.0 = Windows Vista Release|x64
 		{9B071A35-897C-477A-AEB7-95F77618A21D}.Windows 7 Debug|Win32.ActiveCfg = Windows 7 Debug|Win32
 		{9B071A35-897C-477A-AEB7-95F77618A21D}.Windows 7 Debug|Win32.Build.0 = Windows 7 Debug|Win32
 		{9B071A35-897C-477A-AEB7-95F77618A21D}.Windows 7 Debug|Win32.Deploy.0 = Windows 7 Debug|Win32
-- 
1.8.1.msysgit.1


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

From win-pv-devel-bounces@lists.xenproject.org Wed Nov 04 04:38:20 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 04 Nov 2015 04:38:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1Ztpq0-00027x-3u; Wed, 04 Nov 2015 04:38:20 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1Ztppy-00027p-TQ
	for win-pv-devel@lists.xenproject.org; Wed, 04 Nov 2015 04:38:19 +0000
Received: from [85.158.137.68] by server-4.bemta-3.messagelabs.com id
	AB/C0-09570-ABB89365; Wed, 04 Nov 2015 04:38:18 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-8.tower-31.messagelabs.com!1446611895!885719!1
X-Originating-IP: [66.111.4.28]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 47951 invoked from network); 4 Nov 2015 04:38:16 -0000
Received: from out4-smtp.messagingengine.com (HELO
	out4-smtp.messagingengine.com) (66.111.4.28)
	by server-8.tower-31.messagelabs.com with AES256-GCM-SHA384 encrypted
	SMTP; 4 Nov 2015 04:38:16 -0000
Received: from compute5.internal (compute5.nyi.internal [10.202.2.45])
	by mailout.nyi.internal (Postfix) with ESMTP id A5C9720AA1
	for <win-pv-devel@lists.xenproject.org>;
	Tue,  3 Nov 2015 23:38:15 -0500 (EST)
Received: from frontend1 ([10.202.2.160])
	by compute5.internal (MEProxy); Tue, 03 Nov 2015 23:38:15 -0500
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=mesmtp; bh=lNNpzeyLeyXYwr2K0qH2Fm/cNq0=; b=LtL7T+
	LYV4dqbch8mZvUNhbFr0/c+CXy0797UyagZzcMXSMNcpOZ9TK/SSdCBNGDFHqQgj
	av8WjiLEUJXChuWnknAYYCF0GKaDwdVpm82JbbLfVdXw1QV9KIyGKPpoM9h12GmW
	wugceQuN5d6gl3sbHHI9P/Cy5pV4pBX5f0bHk=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=smtpout; bh=lNNpzeyLeyXYwr2K0qH2Fm/cNq0=; b=DhFRJ
	twukjt4kn8FItVsXJC9clwNHw5/bLpxr4MtykzW0HmEdasnR0GaBV6+jL4QpUHqr
	NcVFZMTsdRzPsJmZrVEF1GpCl4i/4JXJUne2zgV7YnJ+Twl+u3RJaGefGb1p2nPj
	Inqnl7sTPvgoWpr3ZZWSQeMB/X0kNMK125ztps=
X-Sasl-enc: Pnng0ZA+Zr/ror6JmflE8LjR/cNmqOi+41Fi8/gCUQC0 1446611894
Received: from [192.168.0.3] (89-72-164-138.dynamic.chello.pl [89.72.164.138])
	by mail.messagingengine.com (Postfix) with ESMTPA id 2469DC016D5
	for <win-pv-devel@lists.xenproject.org>;
	Tue,  3 Nov 2015 23:38:14 -0500 (EST)
To: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
Message-ID: <56398BC0.1040909@invisiblethingslab.com>
Date: Wed, 4 Nov 2015 05:38:24 +0100
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.3.0
MIME-Version: 1.0
Content-Length: 68000
Subject: [win-pv-devel] [PATCH 2/2] Add a user mode library wrapper for
	XENIFACE IOCTLs
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

U2lnbmVkLW9mZi1ieTogUmFmYWwgV29qZHlsYSA8b21lZ0BpbnZpc2libGV0aGluZ3NsYWIuY29t
PgotLS0KIGluY2x1ZGUveGVuY29udHJvbC5oICAgICAgICAgICAgICAgICAgICAgICAgIHwgMzQy
ICsrKysrKysrKysKIHNyYy94ZW5jb250cm9sL3hlbmNvbnRyb2wuYyAgICAgICAgICAgICAgICAg
IHwgOTE1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL3hlbmNvbnRyb2wveGVuY29u
dHJvbC5yYyAgICAgICAgICAgICAgICAgfCAgMjQgKwogc3JjL3hlbmNvbnRyb2wveGVuY29udHJv
bF9wcml2YXRlLmggICAgICAgICAgfCAgNDkgKysKIHZzMjAxMy94ZW5jb250cm9sLnByb3BzICAg
ICAgICAgICAgICAgICAgICAgIHwgIDg0ICsrKwogdnMyMDEzL3hlbmNvbnRyb2wveGVuY29udHJv
bC52Y3hwcm9qICAgICAgICAgfCAgNjIgKysKIHZzMjAxMy94ZW5jb250cm9sL3hlbmNvbnRyb2wu
dmN4cHJvai5maWx0ZXJzIHwgIDEzICsKIHZzMjAxMy94ZW5pZmFjZS5zbG4gICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgIDM4ICsrCiA4IGZpbGVzIGNoYW5nZWQsIDE1MjcgaW5zZXJ0aW9ucygr
KQogY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUveGVuY29udHJvbC5oCiBjcmVhdGUgbW9kZSAx
MDA2NDQgc3JjL3hlbmNvbnRyb2wveGVuY29udHJvbC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3Jj
L3hlbmNvbnRyb2wveGVuY29udHJvbC5yYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy94ZW5jb250
cm9sL3hlbmNvbnRyb2xfcHJpdmF0ZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgdnMyMDEzL3hlbmNv
bnRyb2wucHJvcHMKIGNyZWF0ZSBtb2RlIDEwMDY0NCB2czIwMTMveGVuY29udHJvbC94ZW5jb250
cm9sLnZjeHByb2oKIGNyZWF0ZSBtb2RlIDEwMDY0NCB2czIwMTMveGVuY29udHJvbC94ZW5jb250
cm9sLnZjeHByb2ouZmlsdGVycwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUveGVuY29udHJvbC5oIGIv
aW5jbHVkZS94ZW5jb250cm9sLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MGEyZjhmMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUveGVuY29udHJvbC5oCkBAIC0wLDAg
KzEsMzQyIEBACisjaWZuZGVmIF9YRU5DT05UUk9MX0hfCisjZGVmaW5lIF9YRU5DT05UUk9MX0hf
CisKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8dmFyYXJncy5oPgorI2luY2x1ZGUg
InhlbmlmYWNlX2lvY3Rscy5oIgorCisjaWZkZWYgWEVOQ09OVFJPTF9FWFBPUlRTCisjICAgIGRl
ZmluZSBYRU5DT05UUk9MX0FQSSBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKKyNlbHNlCisjICAgIGRl
ZmluZSBYRU5DT05UUk9MX0FQSSBfX2RlY2xzcGVjKGRsbGltcG9ydCkKKyNlbmRpZgorCisjaWZk
ZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qISBcdHlwZWRlZiBQWEVO
Q09OVFJPTF9DT05URVhUCisgICAgXGJyaWVmIExpYnJhcnkgaGFuZGxlIHJlcHJlc2VudGluZyBh
IFhlbiBJbnRlcmZhY2Ugc2Vzc2lvbgorKi8KK3N0cnVjdCBfWEVOQ09OVFJPTF9DT05URVhUOwor
dHlwZWRlZiBzdHJ1Y3QgX1hFTkNPTlRST0xfQ09OVEVYVCAqUFhFTkNPTlRST0xfQ09OVEVYVDsK
KworLyohIFx0eXBlZGVmIFhFTkNPTlRST0xfTE9HX0xFVkVMCisgICAgXGJyaWVmIExvZyBsZXZl
bHMgdXNlZCBieSB0aGUgbGlicmFyeQorKi8KK3R5cGVkZWYgZW51bQorX1hFTkNPTlRST0xfTE9H
X0xFVkVMIHsKKyAgICBYTExfRVJST1IgPSAxLAorICAgIFhMTF9XQVJOSU5HLAorICAgIFhMTF9J
TkZPLAorICAgIFhMTF9ERUJVRywKKyAgICBYTExfVFJBQ0UsCit9IFhFTkNPTlRST0xfTE9HX0xF
VkVMOworCisvKiEgXHR5cGVkZWYgWEVOQ09OVFJPTF9MT0dHRVIKKyAgICBcYnJpZWYgQ2FsbGJh
Y2sgZm9yIHJlY2VpdmluZyBkaWFnbm9zdGljIG1lc3NhZ2VzIGZyb20gdGhlIGxpYnJhcnkKKyov
Cit0eXBlZGVmIHZvaWQKK1hFTkNPTlRST0xfTE9HR0VSKAorICAgIElOICBYRU5DT05UUk9MX0xP
R19MRVZFTCBMb2dMZXZlbCwKKyAgICBJTiAgY29uc3QgQ0hBUiAqRnVuY3Rpb24sCisgICAgSU4g
IGNvbnN0IFdDSEFSICpNZXNzYWdlLAorICAgIElOICB2YV9saXN0IEFyZ3MKKyAgICApOworCisv
KiEgXGJyaWVmIFJlZ2lzdGVyIGEgY2FsbGJhY2sgZm9yIHJlY2VpdmluZyBsaWJyYXJ5J3MgZGlh
Z25vc3RpYyBtZXNzYWdlcworICAgIFxwYXJhbSBYYyBYZW5jb250cm9sIGhhbmRsZSByZXR1cm5l
ZCBieSBYY09wZW4oKQorICAgIFxwYXJhbSBMb2dnZXIgQ2FsbGJhY2sgdG8gcmVnaXN0ZXIKKyov
CitYRU5DT05UUk9MX0FQSQordm9pZAorWGNSZWdpc3RlckxvZ2dlcigKKyAgICBJTiAgUFhFTkNP
TlRST0xfQ09OVEVYVCBYYywKKyAgICBJTiAgWEVOQ09OVFJPTF9MT0dHRVIgKkxvZ2dlcgorICAg
ICk7CisKKy8qISBcYnJpZWYgU2V0IGxvZyBsZXZlbCB0aHJlc2hvbGQgZm9yIGxpYnJhcnkncyBk
aWFnbm9zdGljIG1lc3NhZ2VzCisgICAgXHBhcmFtIFhjIFhlbmNvbnRyb2wgaGFuZGxlIHJldHVy
bmVkIGJ5IFhjT3BlbigpCisgICAgXHBhcmFtIExvZ0xldmVsIE9ubHkgbWVzc2FnZXMgd2l0aCB0
aGlzIGxldmVsIGFuZCBhYm92ZSB3aWxsIGJlIHNlbnQgdG8gdGhlIGxvZ2dlciBjYWxsYmFjawor
Ki8KK1hFTkNPTlRST0xfQVBJCit2b2lkCitYY1NldExvZ0xldmVsKAorICAgIElOICBQWEVOQ09O
VFJPTF9DT05URVhUIFhjLAorICAgIElOICBYRU5DT05UUk9MX0xPR19MRVZFTCBMb2dMZXZlbAor
ICAgICk7CisKKy8qISBcYnJpZWYgT3BlbiB0aGUgWGVuIEludGVyZmFjZSBkZXZpY2UKKyAgICBc
cGFyYW0gTG9nZ2VyIENhbGxiYWNrIGZvciByZWNlaXZpbmcgbGlicmFyeSdzIGRpYWdub3N0aWMg
bWVzc2FnZXMKKyAgICBccGFyYW0gWGMgWGVuY29udHJvbCBoYW5kbGUgcmVwcmVzZW50aW5nIGEg
WGVuIEludGVyZmFjZSBzZXNzaW9uCisgICAgXHJldHVybiBFcnJvciBjb2RlCisqLworWEVOQ09O
VFJPTF9BUEkKK0RXT1JECitYY09wZW4oCisgICAgSU4gIFhFTkNPTlRST0xfTE9HR0VSICpMb2dn
ZXIsCisgICAgT1VUIFBYRU5DT05UUk9MX0NPTlRFWFQgKlhjCisgICAgKTsKKworLyohIFxicmll
ZiBDbG9zZSB0aGUgWGVuIEludGVyZmFjZSBkZXZpY2UKKyAgICBccGFyYW0gWGMgWGVuY29udHJv
bCBoYW5kbGUgcmV0dXJuZWQgYnkgWGNPcGVuKCkKKyovCitYRU5DT05UUk9MX0FQSQordm9pZAor
WGNDbG9zZSgKKyAgICBJTiAgUFhFTkNPTlRST0xfQ09OVEVYVCBYYworICAgICk7CisKKy8qISBc
YnJpZWYgT3BlbiBhbiB1bmJvdW5kIGV2ZW50IGNoYW5uZWwKKyAgICBccGFyYW0gWGMgWGVuY29u
dHJvbCBoYW5kbGUgcmV0dXJuZWQgYnkgWGNPcGVuKCkKKyAgICBccGFyYW0gUmVtb3RlRG9tYWlu
IElEIG9mIGEgcmVtb3RlIGRvbWFpbiB0aGF0IHdpbGwgYmluZCB0aGUgY2hhbm5lbAorICAgIFxw
YXJhbSBFdmVudCBIYW5kbGUgdG8gYW4gZXZlbnQgb2JqZWN0IHRoYXQgd2lsbCByZWNlaXZlIGV2
ZW50IGNoYW5uZWwgbm90aWZpY2F0aW9ucworICAgIFxwYXJhbSBNYXNrIFNldCB0byBUUlVFIGlm
IHRoZSBldmVudCBjaGFubmVsIHNob3VsZCBiZSBpbml0aWFsbHkgbWFza2VkCisgICAgXHBhcmFt
IExvY2FsUG9ydCBQb3J0IG51bWJlciB0aGF0IGlzIGFzc2lnbmVkIHRvIHRoZSBldmVudCBjaGFu
bmVsCisgICAgXHJldHVybiBFcnJvciBjb2RlCisqLworWEVOQ09OVFJPTF9BUEkKK0RXT1JECitY
Y0V2dGNobkJpbmRVbmJvdW5kKAorICAgIElOICBQWEVOQ09OVFJPTF9DT05URVhUIFhjLAorICAg
IElOICBVU0hPUlQgUmVtb3RlRG9tYWluLAorICAgIElOICBIQU5ETEUgRXZlbnQsCisgICAgSU4g
IEJPT0wgTWFzaywKKyAgICBPVVQgVUxPTkcgKkxvY2FsUG9ydAorICAgICk7CisKKy8qISBcYnJp
ZWYgT3BlbiBhbiBldmVudCBjaGFubmVsIHRoYXQgd2FzIGFscmVhZHkgYm91bmQgYnkgYSByZW1v
dGUgZG9tYWluCisgICAgXHBhcmFtIFhjIFhlbmNvbnRyb2wgaGFuZGxlIHJldHVybmVkIGJ5IFhj
T3BlbigpCisgICAgXHBhcmFtIFJlbW90ZURvbWFpbiBJRCBvZiBhIHJlbW90ZSBkb21haW4gdGhh
dCBoYXMgYWxyZWFkeSBib3VuZCB0aGUgY2hhbm5lbAorICAgIFxwYXJhbSBSZW1vdGVQb3J0IFBv
cnQgbnVtYmVyIHRoYXQgaXMgYXNzaWduZWQgdG8gdGhlIGV2ZW50IGNoYW5uZWwgaW4gdGhlIFxh
IFJlbW90ZURvbWFpbgorICAgIFxwYXJhbSBFdmVudCBIYW5kbGUgdG8gYW4gZXZlbnQgdGhhdCB3
aWxsIHJlY2VpdmUgZXZlbnQgY2hhbm5lbCBub3RpZmljYXRpb25zCisgICAgXHBhcmFtIE1hc2sg
U2V0IHRvIFRSVUUgaWYgdGhlIGV2ZW50IG9iamVjdCBjaGFubmVsIHNob3VsZCBiZSBpbml0aWFs
bHkgbWFza2VkCisgICAgXHBhcmFtIExvY2FsUG9ydCBQb3J0IG51bWJlciB0aGF0IGlzIGFzc2ln
bmVkIHRvIHRoZSBldmVudCBjaGFubmVsCisgICAgXHJldHVybiBFcnJvciBjb2RlCisqLworWEVO
Q09OVFJPTF9BUEkKK0RXT1JECitYY0V2dGNobkJpbmRJbnRlcmRvbWFpbigKKyAgICBJTiAgUFhF
TkNPTlRST0xfQ09OVEVYVCBYYywKKyAgICBJTiAgVVNIT1JUIFJlbW90ZURvbWFpbiwKKyAgICBJ
TiAgVUxPTkcgUmVtb3RlUG9ydCwKKyAgICBJTiAgSEFORExFIEV2ZW50LAorICAgIElOICBCT09M
IE1hc2ssCisgICAgT1VUIFVMT05HICpMb2NhbFBvcnQKKyAgICApOworCisvKiEgXGJyaWVmIENs
b3NlIGFuIGV2ZW50IGNoYW5uZWwKKyAgICBccGFyYW0gWGMgWGVuY29udHJvbCBoYW5kbGUgcmV0
dXJuZWQgYnkgWGNPcGVuKCkKKyAgICBccGFyYW0gTG9jYWxQb3J0IFBvcnQgbnVtYmVyIHRoYXQg
aXMgYXNzaWduZWQgdG8gdGhlIGV2ZW50IGNoYW5uZWwKKyAgICBccmV0dXJuIEVycm9yIGNvZGUK
KyovCitYRU5DT05UUk9MX0FQSQorRFdPUkQKK1hjRXZ0Y2huQ2xvc2UoCisgICAgSU4gIFBYRU5D
T05UUk9MX0NPTlRFWFQgWGMsCisgICAgSU4gIFVMT05HIExvY2FsUG9ydAorICAgICk7CisKKy8q
ISBcYnJpZWYgTm90aWZ5IHRoZSByZW1vdGUgZW5kIG9mIGFuIGV2ZW50IGNoYW5uZWwKKyAgICBc
cGFyYW0gWGMgWGVuY29udHJvbCBoYW5kbGUgcmV0dXJuZWQgYnkgWGNPcGVuKCkKKyAgICBccGFy
YW0gTG9jYWxQb3J0IFBvcnQgbnVtYmVyIHRoYXQgaXMgYXNzaWduZWQgdG8gdGhlIGV2ZW50IGNo
YW5uZWwKKyAgICBccmV0dXJuIEVycm9yIGNvZGUKKyovCitYRU5DT05UUk9MX0FQSQorRFdPUkQK
K1hjRXZ0Y2huTm90aWZ5KAorICAgIElOICBQWEVOQ09OVFJPTF9DT05URVhUIFhjLAorICAgIElO
ICBVTE9ORyBMb2NhbFBvcnQKKyAgICApOworCisvKiEgXGJyaWVmIFVubWFzayBhbiBldmVudCBj
aGFubmVsCisgICAgXHBhcmFtIFhjIFhlbmNvbnRyb2wgaGFuZGxlIHJldHVybmVkIGJ5IFhjT3Bl
bigpCisgICAgXHBhcmFtIExvY2FsUG9ydCBQb3J0IG51bWJlciB0aGF0IGlzIGFzc2lnbmVkIHRv
IHRoZSBldmVudCBjaGFubmVsCisgICAgXHJldHVybiBFcnJvciBjb2RlCisqLworWEVOQ09OVFJP
TF9BUEkKK0RXT1JECitYY0V2dGNoblVubWFzaygKKyAgICBJTiAgUFhFTkNPTlRST0xfQ09OVEVY
VCBYYywKKyAgICBJTiAgVUxPTkcgTG9jYWxQb3J0CisgICAgKTsKKworLyohIFxicmllZiBHcmFu
dCBhIFxhIFJlbW90ZURvbWFpbiBwZXJtaXNzaW9uIHRvIGFjY2VzcyBsb2NhbCBtZW1vcnkgcGFn
ZXMKKyAgICBccGFyYW0gWGMgWGVuY29udHJvbCBoYW5kbGUgcmV0dXJuZWQgYnkgWGNPcGVuKCkK
KyAgICBccGFyYW0gUmVtb3RlRG9tYWluIElEIG9mIGEgcmVtb3RlIGRvbWFpbiB0aGF0IGlzIGJl
aW5nIGdyYW50ZWQgYWNjZXNzCisgICAgXHBhcmFtIE51bWJlclBhZ2VzIE51bWJlciBvZiA0ayBw
YWdlcyB0byBncmFudCBhY2Nlc3MgdG8KKyAgICBccGFyYW0gTm90aWZ5T2Zmc2V0IE9mZnNldCBv
ZiBhIGJ5dGUgaW4gdGhlIGdyYW50ZWQgcmVnaW9uIHRoYXQgd2lsbCBiZSBzZXQgdG8gMCB3aGVu
IHRoZSBncmFudCBpcyByZXZva2VkCisgICAgXHBhcmFtIE5vdGlmeVBvcnQgTG9jYWwgcG9ydCBu
dW1iZXIgb2YgYW4gb3BlbiBldmVudCBjaGFubmVsIHRoYXQgd2lsbCBiZSBub3RpZmllZCB3aGVu
IHRoZSBncmFudCBpcyByZXZva2VkCisgICAgXHBhcmFtIEZsYWdzIEdyYW50IG9wdGlvbnMKKyAg
ICBccGFyYW0gQWRkcmVzcyBMb2NhbCB1c2VyIG1vZGUgYWRkcmVzcyBvZiB0aGUgZ3JhbnRlZCBt
ZW1vcnkgcmVnaW9uCisgICAgXHBhcmFtIFJlZmVyZW5jZXMgQW4gYXJyYXkgb2YgWGVuIGdyYW50
IG51bWJlcnMgZm9yIGV2ZXJ5IGdyYW50ZWQgcGFnZQorICAgIFxyZXR1cm4gRXJyb3IgY29kZQor
Ki8KK1hFTkNPTlRST0xfQVBJCitEV09SRAorWGNHbnR0YWJQZXJtaXRGb3JlaWduQWNjZXNzKAor
ICAgIElOICBQWEVOQ09OVFJPTF9DT05URVhUIFhjLAorICAgIElOICBVU0hPUlQgUmVtb3RlRG9t
YWluLAorICAgIElOICBVTE9ORyBOdW1iZXJQYWdlcywKKyAgICBJTiAgVUxPTkcgTm90aWZ5T2Zm
c2V0LAorICAgIElOICBVTE9ORyBOb3RpZnlQb3J0LAorICAgIElOICBYRU5JRkFDRV9HTlRUQUJf
UEFHRV9GTEFHUyBGbGFncywKKyAgICBPVVQgUFZPSUQgKkFkZHJlc3MsCisgICAgT1VUIFVMT05H
ICpSZWZlcmVuY2VzCisgICAgKTsKKworLyohIFxicmllZiBSZXZva2UgYSBmb3JlaWduIGRvbWFp
biBhY2Nlc3MgdG8gcHJldmlvdXNseSBncmFudGVkIG1lbW9yeSByZWdpb24KKyAgICBccGFyYW0g
WGMgWGVuY29udHJvbCBoYW5kbGUgcmV0dXJuZWQgYnkgWGNPcGVuKCkKKyAgICBccGFyYW0gQWRk
cmVzcyBMb2NhbCB1c2VyIG1vZGUgYWRkcmVzcyBvZiB0aGUgZ3JhbnRlZCBtZW1vcnkgcmVnaW9u
CisgICAgXHJldHVybiBFcnJvciBjb2RlCisqLworWEVOQ09OVFJPTF9BUEkKK0RXT1JECitYY0du
dHRhYlJldm9rZUZvcmVpZ25BY2Nlc3MoCisgICAgSU4gIFBYRU5DT05UUk9MX0NPTlRFWFQgWGMs
CisgICAgSU4gIFBWT0lEIEFkZHJlc3MKKyAgICApOworCisvKiEgXGJyaWVmIE1hcCBhIGZvcmVp
Z24gbWVtb3J5IHJlZ2lvbiBpbnRvIHRoZSBjdXJyZW50IGFkZHJlc3Mgc3BhY2UKKyAgICBccGFy
YW0gWGMgWGVuY29udHJvbCBoYW5kbGUgcmV0dXJuZWQgYnkgWGNPcGVuKCkKKyAgICBccGFyYW0g
UmVtb3RlRG9tYWluIElEIG9mIGEgcmVtb3RlIGRvbWFpbiB0aGF0IGhhcyBncmFudGVkIGFjY2Vz
cyB0byB0aGUgcGFnZXMKKyAgICBccGFyYW0gTnVtYmVyUGFnZXMgTnVtYmVyIG9mIDRrIHBhZ2Vz
IHRvIG1hcAorICAgIFxwYXJhbSBSZWZlcmVuY2VzIEFuIGFycmF5IG9mIFhlbiBncmFudCBudW1i
ZXJzIGZvciBldmVyeSBncmFudGVkIHBhZ2UKKyAgICBccGFyYW0gTm90aWZ5T2Zmc2V0IE9mZnNl
dCBvZiBhIGJ5dGUgaW4gdGhlIG1hcHBlZCByZWdpb24gdGhhdCB3aWxsIGJlIHNldCB0byAwIHdo
ZW4gdGhlIHJlZ2lvbiBpcyB1bm1hcHBlZAorICAgIFxwYXJhbSBOb3RpZnlQb3J0IExvY2FsIHBv
cnQgbnVtYmVyIG9mIGFuIG9wZW4gZXZlbnQgY2hhbm5lbCB0aGF0IHdpbGwgYmUgbm90aWZpZWQg
d2hlbiB0aGUgcmVnaW9uIGlzIHVubWFwcGVkCisgICAgXHBhcmFtIEZsYWdzIE1hcCBvcHRpb25z
CisgICAgXHBhcmFtIEFkZHJlc3MgTG9jYWwgdXNlciBtb2RlIGFkZHJlc3Mgb2YgdGhlIG1hcHBl
ZCBtZW1vcnkgcmVnaW9uCisgICAgXHJldHVybiBFcnJvciBjb2RlCisqLworWEVOQ09OVFJPTF9B
UEkKK0RXT1JECitYY0dudHRhYk1hcEZvcmVpZ25QYWdlcygKKyAgICBJTiAgUFhFTkNPTlRST0xf
Q09OVEVYVCBYYywKKyAgICBJTiAgVVNIT1JUIFJlbW90ZURvbWFpbiwKKyAgICBJTiAgVUxPTkcg
TnVtYmVyUGFnZXMsCisgICAgSU4gIFBVTE9ORyBSZWZlcmVuY2VzLAorICAgIElOICBVTE9ORyBO
b3RpZnlPZmZzZXQsCisgICAgSU4gIFVMT05HIE5vdGlmeVBvcnQsCisgICAgSU4gIFhFTklGQUNF
X0dOVFRBQl9QQUdFX0ZMQUdTIEZsYWdzLAorICAgIE9VVCBQVk9JRCAqQWRkcmVzcworICAgICk7
CisKKy8qISBcYnJpZWYgVW5tYXAgYSBmb3JlaWduIG1lbW9yeSByZWdpb24gZnJvbSB0aGUgY3Vy
cmVudCBhZGRyZXNzIHNwYWNlCisgICAgXHBhcmFtIFhjIFhlbmNvbnRyb2wgaGFuZGxlIHJldHVy
bmVkIGJ5IFhjT3BlbigpCisgICAgXHBhcmFtIEFkZHJlc3MgTG9jYWwgdXNlciBtb2RlIGFkZHJl
c3Mgb2YgdGhlIG1hcHBlZCBtZW1vcnkgcmVnaW9uCisgICAgXHJldHVybiBFcnJvciBjb2RlCisq
LworWEVOQ09OVFJPTF9BUEkKK0RXT1JECitYY0dudHRhYlVubWFwRm9yZWlnblBhZ2VzKAorICAg
IElOICBQWEVOQ09OVFJPTF9DT05URVhUIFhjLAorICAgIElOICBQVk9JRCBBZGRyZXNzCisgICAg
KTsKKworLyohIFxicmllZiBSZWFkIGEgWGVuU3RvcmUga2V5CisgICAgXHBhcmFtIFhjIFhlbmNv
bnRyb2wgaGFuZGxlIHJldHVybmVkIGJ5IFhjT3BlbigpCisgICAgXHBhcmFtIFBhdGggUGF0aCB0
byB0aGUga2V5CisgICAgXHBhcmFtIGNiVmFsdWUgU2l6ZSBvZiB0aGUgXGEgVmFsdWUgYnVmZmVy
LCBpbiBieXRlcworICAgIFxwYXJhbSBWYWx1ZSBCdWZmZXIgdGhhdCByZWNlaXZlcyB0aGUgdmFs
dWUKKyAgICBccmV0dXJuIEVycm9yIGNvZGUKKyovCitYRU5DT05UUk9MX0FQSQorRFdPUkQKK1hj
U3RvcmVSZWFkKAorICAgIElOICBQWEVOQ09OVFJPTF9DT05URVhUIFhjLAorICAgIElOICBQQ0hB
UiBQYXRoLAorICAgIElOICBEV09SRCBjYlZhbHVlLAorICAgIE9VVCBDSEFSICpWYWx1ZQorICAg
ICk7CisKKy8qISBcYnJpZWYgV3JpdGUgYSB2YWx1ZSB0byBhIFhlblN0b3JlIGtleQorICAgIFxw
YXJhbSBYYyBYZW5jb250cm9sIGhhbmRsZSByZXR1cm5lZCBieSBYY09wZW4oKQorICAgIFxwYXJh
bSBQYXRoIFBhdGggdG8gdGhlIGtleQorICAgIFxwYXJhbSBWYWx1ZSBWYWx1ZSB0byB3cml0ZQor
ICAgIFxyZXR1cm4gRXJyb3IgY29kZQorKi8KK1hFTkNPTlRST0xfQVBJCitEV09SRAorWGNTdG9y
ZVdyaXRlKAorICAgIElOICBQWEVOQ09OVFJPTF9DT05URVhUIFhjLAorICAgIElOICBQQ0hBUiBQ
YXRoLAorICAgIElOICBQQ0hBUiBWYWx1ZQorICAgICk7CisKKy8qISBcYnJpZWYgRW51bWVyYXRl
IGFsbCBpbW1lZGlhdGUgY2hpbGQga2V5cyBvZiBhIFhlblN0b3JlIGtleQorICAgIFxwYXJhbSBY
YyBYZW5jb250cm9sIGhhbmRsZSByZXR1cm5lZCBieSBYY09wZW4oKQorICAgIFxwYXJhbSBQYXRo
IFBhdGggdG8gdGhlIGtleQorICAgIFxwYXJhbSBjYk91dHB1dCBTaXplIG9mIHRoZSBcYSBPdXRw
dXQgYnVmZmVyLCBpbiBieXRlcworICAgIFxwYXJhbSBPdXRwdXQgQnVmZmVyIHRoYXQgcmVjZWl2
ZXMgYSBOVUwtc2VwYXJhdGVkIGNoaWxkIGtleSBuYW1lcworICAgIFxyZXR1cm4gRXJyb3IgY29k
ZQorKi8KK1hFTkNPTlRST0xfQVBJCitEV09SRAorWGNTdG9yZURpcmVjdG9yeSgKKyAgICBJTiAg
UFhFTkNPTlRST0xfQ09OVEVYVCBYYywKKyAgICBJTiAgUENIQVIgUGF0aCwKKyAgICBJTiAgRFdP
UkQgY2JPdXRwdXQsCisgICAgT1VUIENIQVIgKk91dHB1dAorICAgICk7CisKKy8qISBcYnJpZWYg
UmVtb3ZlIGEgWGVuU3RvcmUga2V5CisgICAgXHBhcmFtIFhjIFhlbmNvbnRyb2wgaGFuZGxlIHJl
dHVybmVkIGJ5IFhjT3BlbigpCisgICAgXHBhcmFtIFBhdGggUGF0aCB0byB0aGUga2V5CisgICAg
XHJldHVybiBFcnJvciBjb2RlCisqLworWEVOQ09OVFJPTF9BUEkKK0RXT1JECitYY1N0b3JlUmVt
b3ZlKAorICAgIElOICBQWEVOQ09OVFJPTF9DT05URVhUIFhjLAorICAgIElOICBQQ0hBUiBQYXRo
CisgICAgKTsKKworLyohIFxicmllZiBTZXQgcGVybWlzc2lvbnMgb2YgYSBYZW5TdG9yZSBrZXkK
KyAgICBccGFyYW0gWGMgWGVuY29udHJvbCBoYW5kbGUgcmV0dXJuZWQgYnkgWGNPcGVuKCkKKyAg
ICBccGFyYW0gUGF0aCBQYXRoIHRvIHRoZSBrZXkKKyAgICBccGFyYW0gQ291bnQgTnVtYmVyIG9m
IHBlcm1pc3Npb25zCisgICAgXHBhcmFtIFBlcm1pc3Npb25zIEFycmF5IG9mIHBlcm1pc3Npb25z
IHRvIHNldAorICAgIFxyZXR1cm4gRXJyb3IgY29kZQorKi8KK1hFTkNPTlRST0xfQVBJCitEV09S
RAorWGNTdG9yZVNldFBlcm1pc3Npb25zKAorICAgIElOICBQWEVOQ09OVFJPTF9DT05URVhUIFhj
LAorICAgIElOICBQQ0hBUiBQYXRoLAorICAgIElOICBVTE9ORyBDb3VudCwKKyAgICBJTiAgUFhF
TklGQUNFX1NUT1JFX1BFUk1JU1NJT04gUGVybWlzc2lvbnMKKyAgICApOworCisvKiEgXGJyaWVm
IEFkZCBhIFhlblN0b3JlIGtleSB3YXRjaAorICAgIFxwYXJhbSBYYyBYZW5jb250cm9sIGhhbmRs
ZSByZXR1cm5lZCBieSBYY09wZW4oKQorICAgIFxwYXJhbSBQYXRoIFBhdGggdG8gdGhlIGtleSB0
byBiZSB3YXRjaGVkCisgICAgXHBhcmFtIEV2ZW50IEhhbmRsZSB0byBhbiBldmVudCB0aGF0IHdp
bGwgYmUgc2lnbmFsZWQgd2hlbiB0aGUgd2F0Y2ggZmlyZXMKKyAgICBccGFyYW0gSGFuZGxlIEFu
IG9wYXF1ZSB2YWx1ZSByZXByZXNlbnRpbmcgdGhlIHdhdGNoCisgICAgXHJldHVybiBFcnJvciBj
b2RlCisqLworWEVOQ09OVFJPTF9BUEkKK0RXT1JECitYY1N0b3JlQWRkV2F0Y2goCisgICAgSU4g
IFBYRU5DT05UUk9MX0NPTlRFWFQgWGMsCisgICAgSU4gIFBDSEFSIFBhdGgsCisgICAgSU4gIEhB
TkRMRSBFdmVudCwKKyAgICBPVVQgUFZPSUQgKkhhbmRsZQorICAgICk7CisKKy8qISBcYnJpZWYg
UmVtb3ZlIGEgWGVuU3RvcmUgd2F0Y2gKKyAgICBccGFyYW0gWGMgWGVuY29udHJvbCBoYW5kbGUg
cmV0dXJuZWQgYnkgWGNPcGVuKCkKKyAgICBccGFyYW0gSGFuZGxlIFdhdGNoIGhhbmRsZSByZXR1
cm5lZCBieSBYY1N0b3JlQWRkV2F0Y2goKQorICAgIFxyZXR1cm4gRXJyb3IgY29kZQorKi8KK1hF
TkNPTlRST0xfQVBJCitEV09SRAorWGNTdG9yZVJlbW92ZVdhdGNoKAorICAgIElOICBQWEVOQ09O
VFJPTF9DT05URVhUIFhjLAorICAgIElOICBQVk9JRCBIYW5kbGUKKyAgICApOworCisjaWZkZWYg
X19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gX1hFTkNPTlRST0xfSF8KZGlmZiAt
LWdpdCBhL3NyYy94ZW5jb250cm9sL3hlbmNvbnRyb2wuYyBiL3NyYy94ZW5jb250cm9sL3hlbmNv
bnRyb2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmFjOWQwCi0tLSAv
ZGV2L251bGwKKysrIGIvc3JjL3hlbmNvbnRyb2wveGVuY29udHJvbC5jCkBAIC0wLDAgKzEsOTE1
IEBACisjZGVmaW5lIElOSVRHVUlECisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPHNl
dHVwYXBpLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKyNp
bmNsdWRlICJ4ZW5jb250cm9sLmgiCisjaW5jbHVkZSAieGVuY29udHJvbF9wcml2YXRlLmgiCisK
K0JPT0wgQVBJRU5UUlkKK0RsbE1haW4oCisgICAgSU4gIEhNT0RVTEUgTW9kdWxlLAorICAgIElO
ICBEV09SRCBSZWFzb25Gb3JDYWxsLAorICAgIElOICBMUFZPSUQgUmVzZXJ2ZWQKKykKK3sKKyAg
ICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQKK19Mb2coCisgICAgSU4gIFhFTkNPTlRS
T0xfTE9HR0VSICpMb2dnZXIsCisgICAgSU4gIFhFTkNPTlRST0xfTE9HX0xFVkVMIExvZ0xldmVs
LAorICAgIElOICBYRU5DT05UUk9MX0xPR19MRVZFTCBDdXJyZW50TG9nTGV2ZWwsCisgICAgSU4g
IFBDSEFSIEZ1bmN0aW9uLAorICAgIElOICBQV0NIQVIgRm9ybWF0LAorICAgIC4uLgorICAgICkK
K3sKKyAgICB2YV9saXN0IEFyZ3M7CisgICAgRFdPUkQgTGFzdEVycm9yOworCisgICAgaWYgKExv
Z2dlciA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoTG9nTGV2ZWwgPiBDdXJy
ZW50TG9nTGV2ZWwpCisgICAgICAgIHJldHVybjsKKworICAgIExhc3RFcnJvciA9IEdldExhc3RF
cnJvcigpOworICAgIHZhX3N0YXJ0KEFyZ3MsIEZvcm1hdCk7CisgICAgTG9nZ2VyKExvZ0xldmVs
LCBGdW5jdGlvbiwgRm9ybWF0LCBBcmdzKTsKKyAgICB2YV9lbmQoQXJncyk7CisgICAgU2V0TGFz
dEVycm9yKExhc3RFcnJvcik7Cit9CisKK3N0YXRpYyB2b2lkCitfTG9nTXVsdGlTeigKKyAgICBJ
TiAgUFhFTkNPTlRST0xfQ09OVEVYVCBYYywKKyAgICBJTiAgUENIQVIgQ2FsbGVyLAorICAgIElO
ICBYRU5DT05UUk9MX0xPR19MRVZFTCBMZXZlbCwKKyAgICBJTiAgUENIQVIgTXVsdGlTegorICAg
ICkKK3sKKyAgICBQQ0hBUiBQdHI7CisgICAgVUxPTkcgTGVuOworCisgICAgZm9yIChQdHIgPSBN
dWx0aVN6OyAqUHRyOykgeworICAgICAgICBMZW4gPSAoVUxPTkcpc3RybGVuKFB0cik7CisgICAg
ICAgIF9Mb2coWGMtPkxvZ2dlciwgTGV2ZWwsIFhjLT5Mb2dMZXZlbCwgQ2FsbGVyLCBMIiVTIiwg
UHRyKTsKKyAgICAgICAgUHRyICs9IChMZW4gKyAxKTsKKyAgICB9Cit9CisKK3ZvaWQKK1hjUmVn
aXN0ZXJMb2dnZXIoCisgICAgSU4gIFBYRU5DT05UUk9MX0NPTlRFWFQgWGMsCisgICAgSU4gIFhF
TkNPTlRST0xfTE9HR0VSICpMb2dnZXIKKyAgICApCit7CisgICAgWGMtPkxvZ2dlciA9IExvZ2dl
cjsKK30KKwordm9pZAorWGNTZXRMb2dMZXZlbCgKKyAgICBJTiAgUFhFTkNPTlRST0xfQ09OVEVY
VCBYYywKKyAgICBJTiAgWEVOQ09OVFJPTF9MT0dfTEVWRUwgTG9nTGV2ZWwKKyAgICApCit7Cisg
ICAgWGMtPkxvZ0xldmVsID0gTG9nTGV2ZWw7Cit9CisKK0RXT1JECitYY09wZW4oCisgICAgSU4g
IFhFTkNPTlRST0xfTE9HR0VSICpMb2dnZXIsCisgICAgT1VUIFBYRU5DT05UUk9MX0NPTlRFWFQg
KlhjCisgICAgKQoreworICAgIEhERVZJTkZPIERldkluZm87CisgICAgU1BfREVWSUNFX0lOVEVS
RkFDRV9EQVRBIEludGVyZmFjZURhdGE7CisgICAgU1BfREVWSUNFX0lOVEVSRkFDRV9ERVRBSUxf
REFUQSAqRGV0YWlsRGF0YSA9IE5VTEw7CisgICAgRFdPUkQgQnVmZmVyU2l6ZTsKKyAgICBQWEVO
Q09OVFJPTF9DT05URVhUIENvbnRleHQ7CisKKyAgICBDb250ZXh0ID0gbWFsbG9jKHNpemVvZigq
Q29udGV4dCkpOworICAgIGlmIChDb250ZXh0ID09IE5VTEwpCisgICAgICAgIHJldHVybiBFUlJP
Ul9OT1RfRU5PVUdIX01FTU9SWTsKKworICAgIENvbnRleHQtPkxvZ2dlciA9IExvZ2dlcjsKKyAg
ICBDb250ZXh0LT5Mb2dMZXZlbCA9IFhMTF9JTkZPOworICAgIENvbnRleHQtPlJlcXVlc3RJZCA9
IDE7CisgICAgSW5pdGlhbGl6ZUxpc3RIZWFkKCZDb250ZXh0LT5SZXF1ZXN0TGlzdCk7CisgICAg
SW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbigmQ29udGV4dC0+UmVxdWVzdExpc3RMb2NrKTsKKwor
ICAgIERldkluZm8gPSBTZXR1cERpR2V0Q2xhc3NEZXZzKCZHVUlEX0lOVEVSRkFDRV9YRU5JRkFD
RSwgMCwgTlVMTCwgRElHQ0ZfUFJFU0VOVCB8IERJR0NGX0RFVklDRUlOVEVSRkFDRSk7CisgICAg
aWYgKERldkluZm8gPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKKyAgICAgICAgX0xvZyhMb2dn
ZXIsIFhMTF9FUlJPUiwgQ29udGV4dC0+TG9nTGV2ZWwsIF9fRlVOQ1RJT05fXywKKyAgICAgICAg
ICAgICBMIlhFTklGQUNFIGRldmljZSBjbGFzcyBkb2Vzbid0IGV4aXN0Iik7CisgICAgICAgIGdv
dG8gZmFpbDsKKyAgICB9CisKKyAgICBJbnRlcmZhY2VEYXRhLmNiU2l6ZSA9IHNpemVvZihJbnRl
cmZhY2VEYXRhKTsKKyAgICBpZiAoIVNldHVwRGlFbnVtRGV2aWNlSW50ZXJmYWNlcyhEZXZJbmZv
LCBOVUxMLCAmR1VJRF9JTlRFUkZBQ0VfWEVOSUZBQ0UsIDAsICZJbnRlcmZhY2VEYXRhKSkgewor
ICAgICAgICBfTG9nKExvZ2dlciwgWExMX0VSUk9SLCBDb250ZXh0LT5Mb2dMZXZlbCwgX19GVU5D
VElPTl9fLAorICAgICAgICAgICAgIEwiRmFpbGVkIHRvIGVudW1lcmF0ZSBYRU5JRkFDRSBkZXZp
Y2VzIik7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBTZXR1cERpR2V0RGV2aWNl
SW50ZXJmYWNlRGV0YWlsKERldkluZm8sICZJbnRlcmZhY2VEYXRhLCBOVUxMLCAwLCAmQnVmZmVy
U2l6ZSwgTlVMTCk7CisgICAgaWYgKEdldExhc3RFcnJvcigpICE9IEVSUk9SX0lOU1VGRklDSUVO
VF9CVUZGRVIpIHsKKyAgICAgICAgX0xvZyhMb2dnZXIsIFhMTF9FUlJPUiwgQ29udGV4dC0+TG9n
TGV2ZWwsIF9fRlVOQ1RJT05fXywKKyAgICAgICAgICAgICBMIkZhaWxlZCB0byBnZXQgYnVmZmVy
IHNpemUgZm9yIGRldmljZSBkZXRhaWxzIik7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisK
KyAgICAvLyBVc2luZyAnQnVmZmVyU2l6ZScgZnJvbSBmYWlsZWQgZnVuY3Rpb24gY2FsbAorI3By
YWdtYSB3YXJuaW5nKHN1cHByZXNzOiA2MTAyKQorICAgIERldGFpbERhdGEgPSAoU1BfREVWSUNF
X0lOVEVSRkFDRV9ERVRBSUxfREFUQSAqKW1hbGxvYyhCdWZmZXJTaXplKTsKKyAgICBpZiAoIURl
dGFpbERhdGEpIHsKKyAgICAgICAgU2V0TGFzdEVycm9yKEVSUk9SX09VVE9GTUVNT1JZKTsKKyAg
ICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIERldGFpbERhdGEtPmNiU2l6ZSA9IHNpemVv
ZihTUF9ERVZJQ0VfSU5URVJGQUNFX0RFVEFJTF9EQVRBKTsKKworICAgIGlmICghU2V0dXBEaUdl
dERldmljZUludGVyZmFjZURldGFpbChEZXZJbmZvLCAmSW50ZXJmYWNlRGF0YSwgRGV0YWlsRGF0
YSwgQnVmZmVyU2l6ZSwgTlVMTCwgTlVMTCkpIHsKKyAgICAgICAgX0xvZyhMb2dnZXIsIFhMTF9F
UlJPUiwgQ29udGV4dC0+TG9nTGV2ZWwsIF9fRlVOQ1RJT05fXywKKyAgICAgICAgICAgICBMIkZh
aWxlZCB0byBnZXQgWEVOSUZBQ0UgZGV2aWNlIHBhdGgiKTsKKyAgICAgICAgZ290byBmYWlsOwor
ICAgIH0KKworICAgIENvbnRleHQtPlhlbklmYWNlID0gQ3JlYXRlRmlsZShEZXRhaWxEYXRhLT5E
ZXZpY2VQYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFX0dFTkVS
SUNfUkVBRCB8IEZJTEVfR0VORVJJQ19XUklURSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1BFTl9FWElTVElORywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRV9BVFRSSUJVVEVfTk9STUFMIHwgRklMRV9G
TEFHX09WRVJMQVBQRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwp
OworCisgICAgaWYgKENvbnRleHQtPlhlbklmYWNlID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7
CisgICAgICAgIF9Mb2coTG9nZ2VyLCBYTExfRVJST1IsIENvbnRleHQtPkxvZ0xldmVsLCBfX0ZV
TkNUSU9OX18sCisgICAgICAgICAgICAgTCJGYWlsZWQgdG8gb3BlbiBYRU5JRkFDRSBkZXZpY2Us
IHBhdGg6ICVzIiwgRGV0YWlsRGF0YS0+RGV2aWNlUGF0aCk7CisgICAgICAgIGdvdG8gZmFpbDsK
KyAgICB9CisKKyAgICBfTG9nKExvZ2dlciwgWExMX0VSUk9SLCBDb250ZXh0LT5Mb2dMZXZlbCwg
X19GVU5DVElPTl9fLAorICAgICAgICAgTCJYZW5JZmFjZSBoYW5kbGU6ICVwIiwgQ29udGV4dC0+
WGVuSWZhY2UpOworCisgICAgZnJlZShEZXRhaWxEYXRhKTsKKyAgICAqWGMgPSBDb250ZXh0Owor
ICAgIHJldHVybiBFUlJPUl9TVUNDRVNTOworCitmYWlsOgorICAgIF9Mb2coTG9nZ2VyLCBYTExf
RVJST1IsIENvbnRleHQtPkxvZ0xldmVsLCBfX0ZVTkNUSU9OX18sCisgICAgICAgICBMIkVycm9y
OiAweCV4IiwgR2V0TGFzdEVycm9yKCkpOworCisgICAgZnJlZShEZXRhaWxEYXRhKTsKKyAgICBy
ZXR1cm4gR2V0TGFzdEVycm9yKCk7Cit9CisKK3ZvaWQKK1hjQ2xvc2UoCisgICAgSU4gIFBYRU5D
T05UUk9MX0NPTlRFWFQgWGMKKyAgICApCit7CisgICAgQ2xvc2VIYW5kbGUoWGMtPlhlbklmYWNl
KTsKKyAgICBEZWxldGVDcml0aWNhbFNlY3Rpb24oJlhjLT5SZXF1ZXN0TGlzdExvY2spOworICAg
IGZyZWUoWGMpOworfQorCitEV09SRAorWGNFdnRjaG5CaW5kVW5ib3VuZCgKKyAgICBJTiAgUFhF
TkNPTlRST0xfQ09OVEVYVCBYYywKKyAgICBJTiAgVVNIT1JUIFJlbW90ZURvbWFpbiwKKyAgICBJ
TiAgSEFORExFIEV2ZW50LAorICAgIElOICBCT09MIE1hc2ssCisgICAgT1VUIFVMT05HICpMb2Nh
bFBvcnQKKyAgICApCit7CisgICAgWEVOSUZBQ0VfRVZUQ0hOX0JJTkRfVU5CT1VORF9JTiBJbjsK
KyAgICBYRU5JRkFDRV9FVlRDSE5fQklORF9VTkJPVU5EX09VVCBPdXQ7CisgICAgRFdPUkQgUmV0
dXJuZWQ7CisgICAgQk9PTCBTdWNjZXNzOworCisgICAgSW4uUmVtb3RlRG9tYWluID0gUmVtb3Rl
RG9tYWluOworICAgIEluLkV2ZW50ID0gRXZlbnQ7CisgICAgSW4uTWFzayA9ICEhTWFzazsKKwor
ICAgIExvZyhYTExfREVCVUcsIEwiUmVtb3RlRG9tYWluOiAlZCwgRXZlbnQ6ICVwLCBNYXNrOiAl
ZCIsIFJlbW90ZURvbWFpbiwgRXZlbnQsIE1hc2spOworICAgIFN1Y2Nlc3MgPSBEZXZpY2VJb0Nv
bnRyb2woWGMtPlhlbklmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9DVExf
WEVOSUZBQ0VfRVZUQ0hOX0JJTkRfVU5CT1VORCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICZJbiwgc2l6ZW9mKEluKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZPdXQs
IHNpemVvZihPdXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlJldHVybmVkLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICBpZiAoIVN1Y2Nlc3Mp
IHsKKyAgICAgICAgTG9nKFhMTF9FUlJPUiwgTCJJT0NUTF9YRU5JRkFDRV9FVlRDSE5fQklORF9V
TkJPVU5EX1BPUlQgZmFpbGVkIik7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICAq
TG9jYWxQb3J0ID0gT3V0LkxvY2FsUG9ydDsKKyAgICBMb2coWExMX0RFQlVHLCBMIkxvY2FsUG9y
dDogJWx1IiwgKkxvY2FsUG9ydCk7CisKKyAgICByZXR1cm4gRVJST1JfU1VDQ0VTUzsKKworZmFp
bDoKKyAgICBMb2coWExMX0VSUk9SLCBMIkVycm9yOiAweCV4IiwgR2V0TGFzdEVycm9yKCkpOwor
ICAgIHJldHVybiBHZXRMYXN0RXJyb3IoKTsKK30KKworRFdPUkQKK1hjRXZ0Y2huQmluZEludGVy
ZG9tYWluKAorICAgIElOICBQWEVOQ09OVFJPTF9DT05URVhUIFhjLAorICAgIElOICBVU0hPUlQg
UmVtb3RlRG9tYWluLAorICAgIElOICBVTE9ORyBSZW1vdGVQb3J0LAorICAgIElOICBIQU5ETEUg
RXZlbnQsCisgICAgSU4gIEJPT0wgTWFzaywKKyAgICBPVVQgVUxPTkcgKkxvY2FsUG9ydAorICAg
ICkKK3sKKyAgICBYRU5JRkFDRV9FVlRDSE5fQklORF9JTlRFUkRPTUFJTl9JTiBJbjsKKyAgICBY
RU5JRkFDRV9FVlRDSE5fQklORF9JTlRFUkRPTUFJTl9PVVQgT3V0OworICAgIERXT1JEIFJldHVy
bmVkOworICAgIEJPT0wgU3VjY2VzczsKKworICAgIEluLlJlbW90ZURvbWFpbiA9IFJlbW90ZURv
bWFpbjsKKyAgICBJbi5SZW1vdGVQb3J0ID0gUmVtb3RlUG9ydDsKKyAgICBJbi5FdmVudCA9IEV2
ZW50OworICAgIEluLk1hc2sgPSAhIU1hc2s7CisKKyAgICBMb2coWExMX0RFQlVHLCBMIlJlbW90
ZURvbWFpbjogJWQsIFJlbW90ZVBvcnQgJWx1LCBFdmVudDogJXAsIE1hc2s6ICVkIiwKKyAgICAg
ICAgUmVtb3RlRG9tYWluLCBSZW1vdGVQb3J0LCBFdmVudCwgTWFzayk7CisgICAgU3VjY2VzcyA9
IERldmljZUlvQ29udHJvbChYYy0+WGVuSWZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBJT0NUTF9YRU5JRkFDRV9FVlRDSE5fQklORF9JTlRFUkRPTUFJTiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZJbiwgc2l6ZW9mKEluKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICZPdXQsIHNpemVvZihPdXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJlJldHVybmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAg
ICBpZiAoIVN1Y2Nlc3MpIHsKKyAgICAgICAgTG9nKFhMTF9FUlJPUiwgTCJJT0NUTF9YRU5JRkFD
RV9FVlRDSE5fQklORF9JTlRFUkRPTUFJTiBmYWlsZWQiKTsKKyAgICAgICAgZ290byBmYWlsOwor
ICAgIH0KKworICAgICpMb2NhbFBvcnQgPSBPdXQuTG9jYWxQb3J0OworICAgIExvZyhYTExfREVC
VUcsIEwiTG9jYWxQb3J0OiAlbHUiLCAqTG9jYWxQb3J0KTsKKworICAgIHJldHVybiBFUlJPUl9T
VUNDRVNTOworCitmYWlsOgorICAgIExvZyhYTExfRVJST1IsIEwiRXJyb3I6IDB4JXgiLCBHZXRM
YXN0RXJyb3IoKSk7CisgICAgcmV0dXJuIEdldExhc3RFcnJvcigpOworfQorCitEV09SRAorWGNF
dnRjaG5DbG9zZSgKKyAgICBJTiAgUFhFTkNPTlRST0xfQ09OVEVYVCBYYywKKyAgICBJTiAgVUxP
TkcgTG9jYWxQb3J0CisgICAgKQoreworICAgIFhFTklGQUNFX0VWVENITl9DTE9TRV9JTiBJbjsK
KyAgICBEV09SRCBSZXR1cm5lZDsKKyAgICBCT09MIFN1Y2Nlc3M7CisKKyAgICBJbi5Mb2NhbFBv
cnQgPSBMb2NhbFBvcnQ7CisKKyAgICBMb2coWExMX0RFQlVHLCBMIkxvY2FsUG9ydDogJWx1Iiwg
TG9jYWxQb3J0KTsKKyAgICBTdWNjZXNzID0gRGV2aWNlSW9Db250cm9sKFhjLT5YZW5JZmFjZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElPQ1RMX1hFTklGQUNFX0VWVENITl9DTE9T
RSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZJbiwgc2l6ZW9mKEluKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmUmV0dXJuZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsK
KworICAgIGlmICghU3VjY2VzcykgeworICAgICAgICBMb2coWExMX0VSUk9SLCBMIklPQ1RMX1hF
TklGQUNFX0VWVENITl9DTE9TRSBmYWlsZWQiKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0K
KworICAgIHJldHVybiBFUlJPUl9TVUNDRVNTOworCitmYWlsOgorICAgIExvZyhYTExfRVJST1Is
IEwiRXJyb3I6IDB4JXgiLCBHZXRMYXN0RXJyb3IoKSk7CisgICAgcmV0dXJuIEdldExhc3RFcnJv
cigpOworfQorCitEV09SRAorWGNFdnRjaG5Ob3RpZnkoCisgICAgSU4gIFBYRU5DT05UUk9MX0NP
TlRFWFQgWGMsCisgICAgSU4gIFVMT05HIExvY2FsUG9ydAorICAgICkKK3sKKyAgICBYRU5JRkFD
RV9FVlRDSE5fTk9USUZZX0lOIEluOworICAgIERXT1JEIFJldHVybmVkOworICAgIEJPT0wgU3Vj
Y2VzczsKKworICAgIEluLkxvY2FsUG9ydCA9IExvY2FsUG9ydDsKKworICAgIExvZyhYTExfREVC
VUcsIEwiTG9jYWxQb3J0OiAlbHUiLCBMb2NhbFBvcnQpOworICAgIFN1Y2Nlc3MgPSBEZXZpY2VJ
b0NvbnRyb2woWGMtPlhlbklmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9D
VExfWEVOSUZBQ0VfRVZUQ0hOX05PVElGWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZJbiwgc2l6ZW9mKEluKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUmV0dXJuZWQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBOVUxMKTsKKworICAgIGlmICghU3VjY2VzcykgeworICAgICAgICBM
b2coWExMX0VSUk9SLCBMIklPQ1RMX1hFTklGQUNFX0VWVENITl9OT1RJRlkgZmFpbGVkIik7Cisg
ICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICByZXR1cm4gRVJST1JfU1VDQ0VTUzsKKwor
ZmFpbDoKKyAgICBMb2coWExMX0VSUk9SLCBMIkVycm9yOiAweCV4IiwgR2V0TGFzdEVycm9yKCkp
OworICAgIHJldHVybiBHZXRMYXN0RXJyb3IoKTsKK30KKworRFdPUkQKK1hjRXZ0Y2huVW5tYXNr
KAorICAgIElOICBQWEVOQ09OVFJPTF9DT05URVhUIFhjLAorICAgIElOICBVTE9ORyBMb2NhbFBv
cnQKKyAgICApCit7CisgICAgWEVOSUZBQ0VfRVZUQ0hOX1VOTUFTS19JTiBJbjsKKyAgICBEV09S
RCBSZXR1cm5lZDsKKyAgICBCT09MIFN1Y2Nlc3M7CisKKyAgICBJbi5Mb2NhbFBvcnQgPSBMb2Nh
bFBvcnQ7CisKKyAgICBMb2coWExMX0RFQlVHLCBMIkxvY2FsUG9ydDogJWx1IiwgTG9jYWxQb3J0
KTsKKyAgICBTdWNjZXNzID0gRGV2aWNlSW9Db250cm9sKFhjLT5YZW5JZmFjZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIElPQ1RMX1hFTklGQUNFX0VWVENITl9VTk1BU0ssCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmSW4sIHNpemVvZihJbiksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBOVUxMLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JlJldHVybmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICBp
ZiAoIVN1Y2Nlc3MpIHsKKyAgICAgICAgTG9nKFhMTF9FUlJPUiwgTCJJT0NUTF9YRU5JRkFDRV9F
VlRDSE5fVU5NQVNLIGZhaWxlZCIpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAg
cmV0dXJuIEVSUk9SX1NVQ0NFU1M7CisKK2ZhaWw6CisgICAgTG9nKFhMTF9FUlJPUiwgTCJFcnJv
cjogMHgleCIsIEdldExhc3RFcnJvcigpKTsKKyAgICByZXR1cm4gR2V0TGFzdEVycm9yKCk7Cit9
CisKK3N0YXRpYyBQWEVOQ09OVFJPTF9HTlRUQUJfUkVRVUVTVAorRmluZFJlcXVlc3QoCisgICAg
SU4gIFBYRU5DT05UUk9MX0NPTlRFWFQgWGMsCisgICAgSU4gIFBWT0lEIEFkZHJlc3MKKyAgICAp
Cit7CisgICAgUExJU1RfRU5UUlkgRW50cnk7CisgICAgUFhFTkNPTlRST0xfR05UVEFCX1JFUVVF
U1QgUmV0dXJuUmVxdWVzdCA9IE5VTEw7CisKKyAgICBFbnRlckNyaXRpY2FsU2VjdGlvbigmWGMt
PlJlcXVlc3RMaXN0TG9jayk7CisgICAgRW50cnkgPSBYYy0+UmVxdWVzdExpc3QuRmxpbms7Cisg
ICAgd2hpbGUgKEVudHJ5ICE9ICZYYy0+UmVxdWVzdExpc3QpIHsKKyAgICAgICAgUFhFTkNPTlRS
T0xfR05UVEFCX1JFUVVFU1QgUmVxdWVzdCA9IENPTlRBSU5JTkdfUkVDT1JEKEVudHJ5LCBYRU5D
T05UUk9MX0dOVFRBQl9SRVFVRVNULCBMaXN0RW50cnkpOworCisgICAgICAgIGlmIChSZXF1ZXN0
LT5BZGRyZXNzID09IEFkZHJlc3MpIHsKKyAgICAgICAgICAgIFJldHVyblJlcXVlc3QgPSBSZXF1
ZXN0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBFbnRyeSA9IEVu
dHJ5LT5GbGluazsKKyAgICB9CisgICAgTGVhdmVDcml0aWNhbFNlY3Rpb24oJlhjLT5SZXF1ZXN0
TGlzdExvY2spOworCisgICAgcmV0dXJuIFJldHVyblJlcXVlc3Q7Cit9CisKK0RXT1JECitYY0du
dHRhYlBlcm1pdEZvcmVpZ25BY2Nlc3MoCisgICAgSU4gIFBYRU5DT05UUk9MX0NPTlRFWFQgWGMs
CisgICAgSU4gIFVTSE9SVCBSZW1vdGVEb21haW4sCisgICAgSU4gIFVMT05HIE51bWJlclBhZ2Vz
LAorICAgIElOICBVTE9ORyBOb3RpZnlPZmZzZXQsCisgICAgSU4gIFVMT05HIE5vdGlmeVBvcnQs
CisgICAgSU4gIFhFTklGQUNFX0dOVFRBQl9QQUdFX0ZMQUdTIEZsYWdzLAorICAgIE9VVCBQVk9J
RCAqQWRkcmVzcywKKyAgICBPVVQgVUxPTkcgKlJlZmVyZW5jZXMKKyAgICApCit7CisgICAgWEVO
SUZBQ0VfR05UVEFCX1BFUk1JVF9GT1JFSUdOX0FDQ0VTU19JTiBJbjsKKyAgICBYRU5JRkFDRV9H
TlRUQUJfUEVSTUlUX0ZPUkVJR05fQUNDRVNTX09VVCAqT3V0OworICAgIFBYRU5DT05UUk9MX0dO
VFRBQl9SRVFVRVNUIFJlcXVlc3Q7CisgICAgRFdPUkQgUmV0dXJuZWQsIFNpemU7CisgICAgQk9P
TCBTdWNjZXNzOworICAgIERXT1JEIFN0YXR1czsKKworICAgIC8vIGxvY2sgdGhlIHdob2xlIG9w
ZXJhdGlvbiB0byBub3QgZ2VuZXJhdGUgZHVwbGljYXRlIElEcworICAgIEVudGVyQ3JpdGljYWxT
ZWN0aW9uKCZYYy0+UmVxdWVzdExpc3RMb2NrKTsKKworICAgIEluLlJlcXVlc3RJZCA9IFhjLT5S
ZXF1ZXN0SWQ7CisgICAgSW4uUmVtb3RlRG9tYWluID0gUmVtb3RlRG9tYWluOworICAgIEluLk51
bWJlclBhZ2VzID0gTnVtYmVyUGFnZXM7CisgICAgSW4uTm90aWZ5T2Zmc2V0ID0gTm90aWZ5T2Zm
c2V0OworICAgIEluLk5vdGlmeVBvcnQgPSBOb3RpZnlQb3J0OworICAgIEluLkZsYWdzID0gRmxh
Z3M7CisKKyAgICBTaXplID0gKFVMT05HKUZJRUxEX09GRlNFVChYRU5JRkFDRV9HTlRUQUJfUEVS
TUlUX0ZPUkVJR05fQUNDRVNTX09VVCwgUmVmZXJlbmNlc1tOdW1iZXJQYWdlc10pOworICAgIE91
dCA9IG1hbGxvYyhTaXplKTsKKyAgICBSZXF1ZXN0ID0gbWFsbG9jKHNpemVvZigqUmVxdWVzdCkp
OworCisgICAgU3RhdHVzID0gRVJST1JfT1VUT0ZNRU1PUlk7CisgICAgaWYgKCFSZXF1ZXN0IHx8
ICFPdXQpCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIFplcm9NZW1vcnkoUmVxdWVzdCwgc2l6
ZW9mKCpSZXF1ZXN0KSk7CisgICAgUmVxdWVzdC0+SWQgPSBJbi5SZXF1ZXN0SWQ7CisKKyAgICBM
b2coWExMX0RFQlVHLCBMIklkICVsdSwgUmVtb3RlRG9tYWluOiAlZCwgTnVtYmVyUGFnZXM6ICVs
dSwgTm90aWZ5T2Zmc2V0OiAweCV4LCBOb3RpZnlQb3J0OiAlbHUsIEZsYWdzOiAweCV4IiwKKyAg
ICAgICAgSW4uUmVxdWVzdElkLCBSZW1vdGVEb21haW4sIE51bWJlclBhZ2VzLCBOb3RpZnlPZmZz
ZXQsIE5vdGlmeVBvcnQsIEZsYWdzKTsKKworICAgIFN1Y2Nlc3MgPSBEZXZpY2VJb0NvbnRyb2wo
WGMtPlhlbklmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9DVExfWEVOSUZB
Q0VfR05UVEFCX1BFUk1JVF9GT1JFSUdOX0FDQ0VTUywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZJbiwgc2l6ZW9mKEluKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91
dCwgU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZSZXR1cm5lZCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZSZXF1ZXN0LT5PdmVybGFwcGVkKTsKKworICAgIFN0
YXR1cyA9IEdldExhc3RFcnJvcigpOworICAgIC8vIHRoaXMgSU9DVEwgaXMgZXhwZWN0ZWQgdG8g
YmUgcGVuZGluZyBvbiBzdWNjZXNzCisgICAgaWYgKCFTdWNjZXNzKSB7CisgICAgICAgIGlmIChT
dGF0dXMgIT0gRVJST1JfSU9fUEVORElORykgeworICAgICAgICAgICAgTG9nKFhMTF9FUlJPUiwg
TCJJT0NUTF9YRU5JRkFDRV9HTlRUQUJfR1JBTlRfUEFHRVMgZmFpbGVkIik7CisgICAgICAgICAg
ICBnb3RvIGZhaWw7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBMb2coWExMX0VS
Uk9SLCBMIklPQ1RMX1hFTklGQUNFX0dOVFRBQl9HUkFOVF9QQUdFUyBub3QgcGVuZGluZyIpOwor
ICAgICAgICBTdGF0dXMgPSBFUlJPUl9VTklERU5USUZJRURfRVJST1I7CisgICAgICAgIGdvdG8g
ZmFpbDsKKyAgICB9CisKKyAgICBSZXF1ZXN0LT5BZGRyZXNzID0gT3V0LT5BZGRyZXNzOworCisg
ICAgSW5zZXJ0VGFpbExpc3QoJlhjLT5SZXF1ZXN0TGlzdCwgJlJlcXVlc3QtPkxpc3RFbnRyeSk7
CisgICAgWGMtPlJlcXVlc3RJZCsrOworICAgIExlYXZlQ3JpdGljYWxTZWN0aW9uKCZYYy0+UmVx
dWVzdExpc3RMb2NrKTsKKworICAgICpBZGRyZXNzID0gT3V0LT5BZGRyZXNzOworICAgIG1lbWNw
eShSZWZlcmVuY2VzLCAmT3V0LT5SZWZlcmVuY2VzLCBOdW1iZXJQYWdlcyAqIHNpemVvZihVTE9O
RykpOworICAgIExvZyhYTExfREVCVUcsIEwiQWRkcmVzczogJXAiLCAqQWRkcmVzcyk7CisgICAg
Zm9yIChVTE9ORyBpID0gMDsgaSA8IE51bWJlclBhZ2VzOyBpKyspCisgICAgICAgIExvZyhYTExf
REVCVUcsIEwiR3JhbnQgcmVmWyVsdV06ICVsdSIsIGksIE91dC0+UmVmZXJlbmNlc1tpXSk7CisK
KyAgICBmcmVlKE91dCk7CisgICAgcmV0dXJuIEVSUk9SX1NVQ0NFU1M7CisKK2ZhaWw6CisgICAg
TGVhdmVDcml0aWNhbFNlY3Rpb24oJlhjLT5SZXF1ZXN0TGlzdExvY2spOworICAgIExvZyhYTExf
RVJST1IsIEwiRXJyb3I6IDB4JXgiLCBTdGF0dXMpOworICAgIGZyZWUoT3V0KTsKKyAgICBmcmVl
KFJlcXVlc3QpOworICAgIHJldHVybiBTdGF0dXM7Cit9CisKK0RXT1JECitYY0dudHRhYlJldm9r
ZUZvcmVpZ25BY2Nlc3MoCisgICAgSU4gIFBYRU5DT05UUk9MX0NPTlRFWFQgWGMsCisgICAgSU4g
IFBWT0lEIEFkZHJlc3MKKyAgICApCit7CisgICAgWEVOSUZBQ0VfR05UVEFCX1JFVk9LRV9GT1JF
SUdOX0FDQ0VTU19JTiBJbjsKKyAgICBQWEVOQ09OVFJPTF9HTlRUQUJfUkVRVUVTVCBSZXF1ZXN0
OworICAgIERXT1JEIFJldHVybmVkOworICAgIEJPT0wgU3VjY2VzczsKKyAgICBEV09SRCBTdGF0
dXM7CisKKyAgICBMb2coWExMX0RFQlVHLCBMIkFkZHJlc3M6ICVwIiwgQWRkcmVzcyk7CisKKyAg
ICBTdGF0dXMgPSBFUlJPUl9OT1RfRk9VTkQ7CisgICAgUmVxdWVzdCA9IEZpbmRSZXF1ZXN0KFhj
LCBBZGRyZXNzKTsKKyAgICBpZiAoIVJlcXVlc3QpIHsKKyAgICAgICAgTG9nKFhMTF9FUlJPUiwg
TCJBZGRyZXNzICVwIG5vdCBncmFudGVkIiwgQWRkcmVzcyk7CisgICAgICAgIGdvdG8gZmFpbDsK
KyAgICB9CisKKyAgICBJbi5SZXF1ZXN0SWQgPSBSZXF1ZXN0LT5JZDsKKworICAgIFN1Y2Nlc3Mg
PSBEZXZpY2VJb0NvbnRyb2woWGMtPlhlbklmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgSU9DVExfWEVOSUZBQ0VfR05UVEFCX1JFVk9LRV9GT1JFSUdOX0FDQ0VTUywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZJbiwgc2l6ZW9mKEluKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE5VTEwsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
UmV0dXJuZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKworICAgIFN0
YXR1cyA9IEdldExhc3RFcnJvcigpOworICAgIGlmICghU3VjY2VzcykgeworICAgICAgICBMb2co
WExMX0VSUk9SLCBMIklPQ1RMX1hFTklGQUNFX0dOVFRBQl9VTkdSQU5UX1BBR0VTIGZhaWxlZCIp
OworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgRW50ZXJDcml0aWNhbFNlY3Rpb24o
JlhjLT5SZXF1ZXN0TGlzdExvY2spOworICAgIFJlbW92ZUVudHJ5TGlzdCgmUmVxdWVzdC0+TGlz
dEVudHJ5KTsKKyAgICBMZWF2ZUNyaXRpY2FsU2VjdGlvbigmWGMtPlJlcXVlc3RMaXN0TG9jayk7
CisgICAgZnJlZShSZXF1ZXN0KTsKKworICAgIHJldHVybiBTdGF0dXM7CisKK2ZhaWw6CisgICAg
TG9nKFhMTF9FUlJPUiwgTCJFcnJvcjogJWQgMHgleCIsIFN0YXR1cywgU3RhdHVzKTsKKyAgICBy
ZXR1cm4gU3RhdHVzOworfQorCitEV09SRAorWGNHbnR0YWJNYXBGb3JlaWduUGFnZXMoCisgICAg
SU4gIFBYRU5DT05UUk9MX0NPTlRFWFQgWGMsCisgICAgSU4gIFVTSE9SVCBSZW1vdGVEb21haW4s
CisgICAgSU4gIFVMT05HIE51bWJlclBhZ2VzLAorICAgIElOICBQVUxPTkcgUmVmZXJlbmNlcywK
KyAgICBJTiAgVUxPTkcgTm90aWZ5T2Zmc2V0LAorICAgIElOICBVTE9ORyBOb3RpZnlQb3J0LAor
ICAgIElOICBYRU5JRkFDRV9HTlRUQUJfUEFHRV9GTEFHUyBGbGFncywKKyAgICBPVVQgUFZPSUQg
KkFkZHJlc3MKKyAgICApCit7CisgICAgWEVOSUZBQ0VfR05UVEFCX01BUF9GT1JFSUdOX1BBR0VT
X0lOICpJbjsKKyAgICBYRU5JRkFDRV9HTlRUQUJfTUFQX0ZPUkVJR05fUEFHRVNfT1VUIE91dDsK
KyAgICBQWEVOQ09OVFJPTF9HTlRUQUJfUkVRVUVTVCBSZXF1ZXN0OworICAgIERXT1JEIFJldHVy
bmVkLCBTaXplOworICAgIEJPT0wgU3VjY2VzczsKKyAgICBEV09SRCBTdGF0dXM7CisKKyAgICAv
LyBsb2NrIHRoZSB3aG9sZSBvcGVyYXRpb24gdG8gbm90IGdlbmVyYXRlIGR1cGxpY2F0ZSBJRHMK
KyAgICBFbnRlckNyaXRpY2FsU2VjdGlvbigmWGMtPlJlcXVlc3RMaXN0TG9jayk7CisKKyAgICBT
dGF0dXMgPSBFUlJPUl9PVVRPRk1FTU9SWTsKKyAgICBTaXplID0gKFVMT05HKUZJRUxEX09GRlNF
VChYRU5JRkFDRV9HTlRUQUJfTUFQX0ZPUkVJR05fUEFHRVNfSU4sIFJlZmVyZW5jZXNbTnVtYmVy
UGFnZXNdKTsKKyAgICBJbiA9IG1hbGxvYyhTaXplKTsKKyAgICBSZXF1ZXN0ID0gbWFsbG9jKHNp
emVvZigqUmVxdWVzdCkpOworICAgIGlmICghSW4gfHwgIVJlcXVlc3QpCisgICAgICAgIGdvdG8g
ZmFpbDsKKworICAgIEluLT5SZXF1ZXN0SWQgPSBYYy0+UmVxdWVzdElkOworICAgIEluLT5SZW1v
dGVEb21haW4gPSBSZW1vdGVEb21haW47CisgICAgSW4tPk51bWJlclBhZ2VzID0gTnVtYmVyUGFn
ZXM7CisgICAgSW4tPk5vdGlmeU9mZnNldCA9IE5vdGlmeU9mZnNldDsKKyAgICBJbi0+Tm90aWZ5
UG9ydCA9IE5vdGlmeVBvcnQ7CisgICAgSW4tPkZsYWdzID0gRmxhZ3M7CisgICAgbWVtY3B5KCZJ
bi0+UmVmZXJlbmNlcywgUmVmZXJlbmNlcywgTnVtYmVyUGFnZXMgKiBzaXplb2YoVUxPTkcpKTsK
KworICAgIFplcm9NZW1vcnkoUmVxdWVzdCwgc2l6ZW9mKCpSZXF1ZXN0KSk7CisgICAgUmVxdWVz
dC0+SWQgPSBJbi0+UmVxdWVzdElkOworCisgICAgTG9nKFhMTF9ERUJVRywgTCJJZCAlbHUsIFJl
bW90ZURvbWFpbjogJWQsIE51bWJlclBhZ2VzOiAlbHUsIE5vdGlmeU9mZnNldDogMHgleCwgTm90
aWZ5UG9ydDogJWx1LCBGbGFnczogMHgleCIsCisgICAgICAgIEluLT5SZXF1ZXN0SWQsIFJlbW90
ZURvbWFpbiwgTnVtYmVyUGFnZXMsIE5vdGlmeU9mZnNldCwgTm90aWZ5UG9ydCwgRmxhZ3MpOwor
CisgICAgZm9yIChVTE9ORyBpID0gMDsgaSA8IE51bWJlclBhZ2VzOyBpKyspCisgICAgICAgIExv
ZyhYTExfREVCVUcsIEwiR3JhbnQgcmVmWyVsdV06ICVsdSIsIGksIFJlZmVyZW5jZXNbaV0pOwor
CisgICAgU3VjY2VzcyA9IERldmljZUlvQ29udHJvbChYYy0+WGVuSWZhY2UsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBJT0NUTF9YRU5JRkFDRV9HTlRUQUJfTUFQX0ZPUkVJR05fUEFH
RVMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiwgU2l6ZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZPdXQsIHNpemVvZihPdXQpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJlJldHVybmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlJl
cXVlc3QtPk92ZXJsYXBwZWQpOworCisgICAgU3RhdHVzID0gR2V0TGFzdEVycm9yKCk7CisgICAg
Ly8gdGhpcyBJT0NUTCBpcyBleHBlY3RlZCB0byBiZSBwZW5kaW5nIG9uIHN1Y2Nlc3MKKyAgICBp
ZiAoIVN1Y2Nlc3MpIHsKKyAgICAgICAgaWYgKFN0YXR1cyAhPSBFUlJPUl9JT19QRU5ESU5HKSB7
CisgICAgICAgICAgICBMb2coWExMX0VSUk9SLCBMIklPQ1RMX1hFTklGQUNFX0dOVFRBQl9NQVBf
Rk9SRUlHTl9QQUdFUyBmYWlsZWQiKTsKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAg
fQorICAgIH0gZWxzZSB7CisgICAgICAgIExvZyhYTExfRVJST1IsIEwiSU9DVExfWEVOSUZBQ0Vf
R05UVEFCX01BUF9GT1JFSUdOX1BBR0VTIG5vdCBwZW5kaW5nIik7CisgICAgICAgIFN0YXR1cyA9
IEVSUk9SX1VOSURFTlRJRklFRF9FUlJPUjsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKwor
ICAgIFJlcXVlc3QtPkFkZHJlc3MgPSBPdXQuQWRkcmVzczsKKyAgICBJbnNlcnRUYWlsTGlzdCgm
WGMtPlJlcXVlc3RMaXN0LCAmUmVxdWVzdC0+TGlzdEVudHJ5KTsKKyAgICBYYy0+UmVxdWVzdElk
Kys7CisgICAgTGVhdmVDcml0aWNhbFNlY3Rpb24oJlhjLT5SZXF1ZXN0TGlzdExvY2spOworCisg
ICAgKkFkZHJlc3MgPSBPdXQuQWRkcmVzczsKKworICAgIExvZyhYTExfREVCVUcsIEwiQWRkcmVz
czogJXAiLCAqQWRkcmVzcyk7CisKKyAgICBmcmVlKEluKTsKKyAgICByZXR1cm4gRVJST1JfU1VD
Q0VTUzsKKworZmFpbDoKKyAgICBMZWF2ZUNyaXRpY2FsU2VjdGlvbigmWGMtPlJlcXVlc3RMaXN0
TG9jayk7CisgICAgTG9nKFhMTF9FUlJPUiwgTCJFcnJvcjogMHgleCIsIFN0YXR1cyk7CisgICAg
ZnJlZShJbik7CisgICAgZnJlZShSZXF1ZXN0KTsKKyAgICByZXR1cm4gU3RhdHVzOworfQorCitE
V09SRAorWGNHbnR0YWJVbm1hcEZvcmVpZ25QYWdlcygKKyAgICBJTiAgUFhFTkNPTlRST0xfQ09O
VEVYVCBYYywKKyAgICBJTiAgUFZPSUQgQWRkcmVzcworICAgICkKK3sKKyAgICBYRU5JRkFDRV9H
TlRUQUJfVU5NQVBfRk9SRUlHTl9QQUdFU19JTiBJbjsKKyAgICBQWEVOQ09OVFJPTF9HTlRUQUJf
UkVRVUVTVCBSZXF1ZXN0OworICAgIERXT1JEIFJldHVybmVkOworICAgIEJPT0wgU3VjY2VzczsK
KyAgICBEV09SRCBTdGF0dXM7CisKKyAgICBMb2coWExMX0RFQlVHLCBMIkFkZHJlc3M6ICVwIiwg
QWRkcmVzcyk7CisKKyAgICBTdGF0dXMgPSBFUlJPUl9OT1RfRk9VTkQ7CisgICAgUmVxdWVzdCA9
IEZpbmRSZXF1ZXN0KFhjLCBBZGRyZXNzKTsKKyAgICBpZiAoIVJlcXVlc3QpIHsKKyAgICAgICAg
TG9nKFhMTF9FUlJPUiwgTCJBZGRyZXNzICVwIG5vdCBtYXBwZWQiLCBBZGRyZXNzKTsKKyAgICAg
ICAgZ290byBmYWlsOworICAgIH0KKworICAgIEluLlJlcXVlc3RJZCA9IFJlcXVlc3QtPklkOwor
CisgICAgU3VjY2VzcyA9IERldmljZUlvQ29udHJvbChYYy0+WGVuSWZhY2UsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBJT0NUTF9YRU5JRkFDRV9HTlRUQUJfVU5NQVBfRk9SRUlHTl9Q
QUdFUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZJbiwgc2l6ZW9mKEluKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmUmV0dXJuZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxM
KTsKKworICAgIFN0YXR1cyA9IEdldExhc3RFcnJvcigpOworICAgIGlmICghU3VjY2Vzcykgewor
ICAgICAgICBMb2coWExMX0VSUk9SLCBMIklPQ1RMX1hFTklGQUNFX0dOVFRBQl9VTk1BUF9GT1JF
SUdOX1BBR0VTIGZhaWxlZCIpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgRW50
ZXJDcml0aWNhbFNlY3Rpb24oJlhjLT5SZXF1ZXN0TGlzdExvY2spOworICAgIFJlbW92ZUVudHJ5
TGlzdCgmUmVxdWVzdC0+TGlzdEVudHJ5KTsKKyAgICBMZWF2ZUNyaXRpY2FsU2VjdGlvbigmWGMt
PlJlcXVlc3RMaXN0TG9jayk7CisgICAgZnJlZShSZXF1ZXN0KTsKKworICAgIHJldHVybiBTdGF0
dXM7CisKK2ZhaWw6CisgICAgTG9nKFhMTF9FUlJPUiwgTCJFcnJvcjogMHgleCIsIFN0YXR1cyk7
CisgICAgcmV0dXJuIFN0YXR1czsKK30KKworRFdPUkQKK1hjU3RvcmVSZWFkKAorICAgIElOICBQ
WEVOQ09OVFJPTF9DT05URVhUIFhjLAorICAgIElOICBQU1RSIFBhdGgsCisgICAgSU4gIERXT1JE
IGNiVmFsdWUsCisgICAgT1VUIENIQVIgKlZhbHVlCisgICAgKQoreworICAgIERXT1JEIFJldHVy
bmVkOworICAgIEJPT0wgU3VjY2VzczsKKworICAgIExvZyhYTExfREVCVUcsIEwiUGF0aDogJyVT
JyIsIFBhdGgpOworICAgIFN1Y2Nlc3MgPSBEZXZpY2VJb0NvbnRyb2woWGMtPlhlbklmYWNlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9DVExfWEVOSUZBQ0VfU1RPUkVfUkVBRCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhdGgsIChEV09SRClzdHJsZW4oUGF0aCkg
KyAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUsIGNiVmFsdWUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmUmV0dXJuZWQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBOVUxMKTsKKworICAgIGlmICghU3VjY2VzcykgeworICAgICAgICBMb2coWExM
X0VSUk9SLCBMIklPQ1RMX1hFTklGQUNFX1NUT1JFX1JFQUQgZmFpbGVkIik7CisgICAgICAgIGdv
dG8gZmFpbDsKKyAgICB9CisKKyAgICBMb2coWExMX0RFQlVHLCBMIlZhbHVlOiAnJVMnIiwgVmFs
dWUpOworCisgICAgcmV0dXJuIEVSUk9SX1NVQ0NFU1M7CisKK2ZhaWw6CisgICAgTG9nKFhMTF9F
UlJPUiwgTCJFcnJvcjogMHgleCIsIEdldExhc3RFcnJvcigpKTsKKyAgICByZXR1cm4gR2V0TGFz
dEVycm9yKCk7Cit9CisKK0RXT1JECitYY1N0b3JlV3JpdGUoCisgICAgSU4gIFBYRU5DT05UUk9M
X0NPTlRFWFQgWGMsCisgICAgSU4gIFBDSEFSIFBhdGgsCisgICAgSU4gIFBDSEFSIFZhbHVlCisg
ICAgKQoreworICAgIFBDSEFSIEJ1ZmZlcjsKKyAgICBEV09SRCBjYkJ1ZmZlcjsKKyAgICBEV09S
RCBSZXR1cm5lZDsKKyAgICBCT09MIFN1Y2Nlc3M7CisKKyAgICBjYkJ1ZmZlciA9IChEV09SRCko
c3RybGVuKFBhdGgpICsgMSArIHN0cmxlbihWYWx1ZSkgKyAxICsgMSk7CisgICAgQnVmZmVyID0g
bWFsbG9jKGNiQnVmZmVyKTsKKyAgICBpZiAoIUJ1ZmZlcikgeworICAgICAgICBTZXRMYXN0RXJy
b3IoRVJST1JfT1VUT0ZNRU1PUlkpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAg
WmVyb01lbW9yeShCdWZmZXIsIGNiQnVmZmVyKTsKKyAgICBtZW1jcHkoQnVmZmVyLCBQYXRoLCBz
dHJsZW4oUGF0aCkpOworICAgIG1lbWNweShCdWZmZXIgKyBzdHJsZW4oUGF0aCkgKyAxLCBWYWx1
ZSwgc3RybGVuKFZhbHVlKSk7CisKKyAgICBMb2coWExMX0RFQlVHLCBMIlBhdGg6ICclUycsIFZh
bHVlOiAnJVMnIiwgUGF0aCwgVmFsdWUpOworICAgIFN1Y2Nlc3MgPSBEZXZpY2VJb0NvbnRyb2wo
WGMtPlhlbklmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9DVExfWEVOSUZB
Q0VfU1RPUkVfV1JJVEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXIsIGNi
QnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICZSZXR1cm5lZCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE5VTEwpOworCisgICAgaWYgKCFTdWNjZXNzKSB7CisgICAgICAgIExvZyhYTExfRVJS
T1IsIEwiSU9DVExfWEVOSUZBQ0VfU1RPUkVfV1JJVEUgZmFpbGVkIik7CisgICAgICAgIGdvdG8g
ZmFpbDsKKyAgICB9CisKKyAgICBmcmVlKEJ1ZmZlcik7CisgICAgcmV0dXJuIEVSUk9SX1NVQ0NF
U1M7CisKK2ZhaWw6CisgICAgTG9nKFhMTF9FUlJPUiwgTCJFcnJvcjogMHgleCIsIEdldExhc3RF
cnJvcigpKTsKKyAgICBmcmVlKEJ1ZmZlcik7CisgICAgcmV0dXJuIEdldExhc3RFcnJvcigpOwor
fQorCitEV09SRAorWGNTdG9yZURpcmVjdG9yeSgKKyAgICBJTiAgUFhFTkNPTlRST0xfQ09OVEVY
VCBYYywKKyAgICBJTiAgUENIQVIgUGF0aCwKKyAgICBJTiAgRFdPUkQgY2JPdXRwdXQsCisgICAg
T1VUIENIQVIgKk91dHB1dAorICAgICkKK3sKKyAgICBEV09SRCBSZXR1cm5lZDsKKyAgICBCT09M
IFN1Y2Nlc3M7CisKKyAgICBMb2coWExMX0RFQlVHLCBMIlBhdGg6ICclUyciLCBQYXRoKTsKKyAg
ICBTdWNjZXNzID0gRGV2aWNlSW9Db250cm9sKFhjLT5YZW5JZmFjZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIElPQ1RMX1hFTklGQUNFX1NUT1JFX0RJUkVDVE9SWSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBhdGgsIChEV09SRClzdHJsZW4oUGF0aCkgKyAxLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0LCBjYk91dHB1dCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZSZXR1cm5lZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE5VTEwpOworCisgICAgaWYgKCFTdWNjZXNzKSB7CisgICAgICAgIExvZyhYTExfRVJST1Is
IEwiSU9DVExfWEVOSUZBQ0VfU1RPUkVfRElSRUNUT1JZIGZhaWxlZCIpOworICAgICAgICBnb3Rv
IGZhaWw7CisgICAgfQorCisgICAgX0xvZ011bHRpU3ooWGMsIF9fRlVOQ1RJT05fXywgWExMX0RF
QlVHLCBPdXRwdXQpOworCisgICAgcmV0dXJuIEVSUk9SX1NVQ0NFU1M7CisKK2ZhaWw6CisgICAg
TG9nKFhMTF9FUlJPUiwgTCJFcnJvcjogMHgleCIsIEdldExhc3RFcnJvcigpKTsKKyAgICByZXR1
cm4gR2V0TGFzdEVycm9yKCk7Cit9CisKK0RXT1JECitYY1N0b3JlUmVtb3ZlKAorICAgIElOICBQ
WEVOQ09OVFJPTF9DT05URVhUIFhjLAorICAgIElOICBQQ0hBUiBQYXRoCisgICAgKQoreworICAg
IERXT1JEIFJldHVybmVkOworICAgIEJPT0wgU3VjY2VzczsKKworICAgIExvZyhYTExfREVCVUcs
IEwiUGF0aDogJyVTJyIsIFBhdGgpOworICAgIFN1Y2Nlc3MgPSBEZXZpY2VJb0NvbnRyb2woWGMt
PlhlbklmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9DVExfWEVOSUZBQ0Vf
U1RPUkVfUkVNT1ZFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGF0aCwgKERXT1JE
KXN0cmxlbihQYXRoKSArIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAw
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlJldHVybmVkLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICBpZiAoIVN1Y2Nlc3MpIHsKKyAgICAgICAg
TG9nKFhMTF9FUlJPUiwgTCJJT0NUTF9YRU5JRkFDRV9TVE9SRV9SRU1PVkUgZmFpbGVkIik7Cisg
ICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICByZXR1cm4gRVJST1JfU1VDQ0VTUzsKKwor
ZmFpbDoKKyAgICBMb2coWExMX0VSUk9SLCBMIkVycm9yOiAweCV4IiwgR2V0TGFzdEVycm9yKCkp
OworICAgIHJldHVybiBHZXRMYXN0RXJyb3IoKTsKK30KKworRFdPUkQKK1hjU3RvcmVTZXRQZXJt
aXNzaW9ucygKKyAgICBJTiAgUFhFTkNPTlRST0xfQ09OVEVYVCBYYywKKyAgICBJTiAgUENIQVIg
UGF0aCwKKyAgICBJTiAgVUxPTkcgQ291bnQsCisgICAgSU4gIFBYRU5JRkFDRV9TVE9SRV9QRVJN
SVNTSU9OIFBlcm1pc3Npb25zCisgICAgKQoreworICAgIERXT1JEIFJldHVybmVkLCBTaXplOwor
ICAgIEJPT0wgU3VjY2VzczsKKyAgICBYRU5JRkFDRV9TVE9SRV9TRVRfUEVSTUlTU0lPTlNfSU4g
KkluID0gTlVMTDsKKworICAgIExvZyhYTExfREVCVUcsIEwiUGF0aDogJyVTJywgQ291bnQ6ICVs
dSIsIFBhdGgsIENvdW50KTsKKyAgICBmb3IgKFVMT05HIGkgPSAwOyBpIDwgQ291bnQ7IGkrKykK
KyAgICAgICAgTG9nKFhMTF9ERUJVRywgTCJEb21haW46ICVkLCBNYXNrOiAweCV4IiwgUGVybWlz
c2lvbnNbaV0uRG9tYWluLCBQZXJtaXNzaW9uc1tpXS5NYXNrKTsKKworICAgIFNpemUgPSAoVUxP
TkcpRklFTERfT0ZGU0VUKFhFTklGQUNFX1NUT1JFX1NFVF9QRVJNSVNTSU9OU19JTiwgUGVybWlz
c2lvbnNbQ291bnRdKTsKKyAgICBJbiA9IG1hbGxvYyhTaXplKTsKKyAgICBpZiAoIUluKSB7Cisg
ICAgICAgIFNldExhc3RFcnJvcihFUlJPUl9PVVRPRk1FTU9SWSk7CisgICAgICAgIGdvdG8gZmFp
bDsKKyAgICB9CisKKyAgICBJbi0+UGF0aCA9IFBhdGg7CisgICAgSW4tPlBhdGhMZW5ndGggPSAo
RFdPUkQpc3RybGVuKEluLT5QYXRoKSArIDE7CisgICAgSW4tPk51bWJlclBlcm1pc3Npb25zID0g
Q291bnQ7CisgICAgbWVtY3B5KCZJbi0+UGVybWlzc2lvbnMsIFBlcm1pc3Npb25zLCBDb3VudCAq
IHNpemVvZihYRU5JRkFDRV9TVE9SRV9QRVJNSVNTSU9OKSk7CisKKyAgICBTdWNjZXNzID0gRGV2
aWNlSW9Db250cm9sKFhjLT5YZW5JZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IElPQ1RMX1hFTklGQUNFX1NUT1JFX1NFVF9QRVJNSVNTSU9OUywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEluLCBTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVM
TCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZSZXR1cm5lZCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAgaWYgKCFTdWNjZXNzKSB7CisgICAg
ICAgIExvZyhYTExfRVJST1IsIEwiSU9DVExfWEVOSUZBQ0VfU1RPUkVfU0VUX1BFUk1JU1NJT05T
IGZhaWxlZCIpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgZnJlZShJbik7Cisg
ICAgcmV0dXJuIEVSUk9SX1NVQ0NFU1M7CisKK2ZhaWw6CisgICAgTG9nKFhMTF9FUlJPUiwgTCJF
cnJvcjogMHgleCIsIEdldExhc3RFcnJvcigpKTsKKyAgICBmcmVlKEluKTsKKyAgICByZXR1cm4g
R2V0TGFzdEVycm9yKCk7Cit9CisKK0RXT1JECitYY1N0b3JlQWRkV2F0Y2goCisgICAgSU4gIFBY
RU5DT05UUk9MX0NPTlRFWFQgWGMsCisgICAgSU4gIFBDSEFSIFBhdGgsCisgICAgSU4gIEhBTkRM
RSBFdmVudCwKKyAgICBPVVQgUFZPSUQgKkhhbmRsZQorICAgICkKK3sKKyAgICBEV09SRCBSZXR1
cm5lZDsKKyAgICBCT09MIFN1Y2Nlc3M7CisgICAgWEVOSUZBQ0VfU1RPUkVfQUREX1dBVENIX0lO
IEluOworICAgIFhFTklGQUNFX1NUT1JFX0FERF9XQVRDSF9PVVQgT3V0OworCisgICAgTG9nKFhM
TF9ERUJVRywgTCJQYXRoOiAnJVMnLCBFdmVudDogJXAiLCBQYXRoLCBFdmVudCk7CisKKyAgICBJ
bi5QYXRoID0gUGF0aDsKKyAgICBJbi5QYXRoTGVuZ3RoID0gKERXT1JEKXN0cmxlbihQYXRoKSAr
IDE7CisgICAgSW4uRXZlbnQgPSBFdmVudDsKKyAgICBTdWNjZXNzID0gRGV2aWNlSW9Db250cm9s
KFhjLT5YZW5JZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElPQ1RMX1hFTklG
QUNFX1NUT1JFX0FERF9XQVRDSCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZJbiwg
c2l6ZW9mKEluKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZPdXQsIHNpemVvZihP
dXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlJldHVybmVkLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICBpZiAoIVN1Y2Nlc3MpIHsKKyAgICAg
ICAgTG9nKFhMTF9FUlJPUiwgTCJJT0NUTF9YRU5JRkFDRV9TVE9SRV9BRERfV0FUQ0ggZmFpbGVk
Iik7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICAqSGFuZGxlID0gT3V0LkNvbnRl
eHQ7CisKKyAgICBMb2coWExMX0RFQlVHLCBMIkhhbmRsZTogJXAiLCAqSGFuZGxlKTsKKworICAg
IHJldHVybiBFUlJPUl9TVUNDRVNTOworCitmYWlsOgorICAgIExvZyhYTExfRVJST1IsIEwiRXJy
b3I6IDB4JXgiLCBHZXRMYXN0RXJyb3IoKSk7CisgICAgcmV0dXJuIEdldExhc3RFcnJvcigpOwor
fQorCitEV09SRAorWGNTdG9yZVJlbW92ZVdhdGNoKAorICAgIElOICBQWEVOQ09OVFJPTF9DT05U
RVhUIFhjLAorICAgIElOICBQVk9JRCBIYW5kbGUKKyAgICApCit7CisgICAgRFdPUkQgUmV0dXJu
ZWQ7CisgICAgQk9PTCBTdWNjZXNzOworICAgIFhFTklGQUNFX1NUT1JFX1JFTU9WRV9XQVRDSF9J
TiBJbjsKKworICAgIExvZyhYTExfREVCVUcsIEwiSGFuZGxlOiAlcCIsIEhhbmRsZSk7CisKKyAg
ICBJbi5Db250ZXh0ID0gSGFuZGxlOworICAgIFN1Y2Nlc3MgPSBEZXZpY2VJb0NvbnRyb2woWGMt
PlhlbklmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9DVExfWEVOSUZBQ0Vf
U1RPUkVfUkVNT1ZFX1dBVENILAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkluLCBz
aXplb2YoSW4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZSZXR1cm5lZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE5VTEwpOworCisgICAgaWYgKCFTdWNjZXNzKSB7CisgICAgICAgIExvZyhYTExf
RVJST1IsIEwiSU9DVExfWEVOSUZBQ0VfU1RPUkVfUkVNT1ZFX1dBVENIIGZhaWxlZCIpOworICAg
ICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgcmV0dXJuIEVSUk9SX1NVQ0NFU1M7CisKK2Zh
aWw6CisgICAgTG9nKFhMTF9FUlJPUiwgTCJFcnJvcjogMHgleCIsIEdldExhc3RFcnJvcigpKTsK
KyAgICByZXR1cm4gR2V0TGFzdEVycm9yKCk7Cit9CmRpZmYgLS1naXQgYS9zcmMveGVuY29udHJv
bC94ZW5jb250cm9sLnJjIGIvc3JjL3hlbmNvbnRyb2wveGVuY29udHJvbC5yYwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzMzZTg0Ci0tLSAvZGV2L251bGwKKysrIGIvc3Jj
L3hlbmNvbnRyb2wveGVuY29udHJvbC5yYwpAQCAtMCwwICsxLDI0IEBACisjaW5jbHVkZSA8d2lu
ZG93cy5oPgorI2luY2x1ZGUgPG50dmVycC5oPgorCisjdW5kZWYgVkVSX0NPTVBBTllOQU1FX1NU
UgorI3VuZGVmIFZFUl9QUk9EVUNUTkFNRV9TVFIKKyN1bmRlZiBWRVJfUFJPRFVDVFZFUlNJT04K
KyN1bmRlZiBWRVJfUFJPRFVDVFZFUlNJT05fU1RSCisKKyNpbmNsdWRlIDx2ZXJzaW9uLmg+CisK
KyNkZWZpbmUgVkVSX0NPTVBBTllOQU1FX1NUUiAgICAgICAgIFZFTkRPUl9OQU1FX1NUUgorI2Rl
ZmluZSBWRVJfTEVHQUxDT1BZUklHSFRfU1RSICAgICAgIkNvcHlyaWdodCAoYykgSW52aXNpYmxl
IFRoaW5ncyBMYWIiCisKKyNkZWZpbmUgVkVSX1BST0RVQ1ROQU1FX1NUUiAgICAgICAgICJYRU5J
RkFDRSIKKyNkZWZpbmUgVkVSX1BST0RVQ1RWRVJTSU9OICAgICAgICAgIE1BSk9SX1ZFUlNJT04s
TUlOT1JfVkVSU0lPTixNSUNST19WRVJTSU9OLEJVSUxEX05VTUJFUgorI2RlZmluZSBWRVJfUFJP
RFVDVFZFUlNJT05fU1RSICAgICAgTUFKT1JfVkVSU0lPTl9TVFIgIi4iIE1JTk9SX1ZFUlNJT05f
U1RSICIuIiBNSUNST19WRVJTSU9OX1NUUiAiLiIgQlVJTERfTlVNQkVSX1NUUgorCisjZGVmaW5l
IFZFUl9JTlRFUk5BTE5BTUVfU1RSICAgICAgICAiWEVOQ09OVFJPTC5ETEwiCisjZGVmaW5lIFZF
Ul9GSUxFREVTQ1JJUFRJT05fU1RSICAgICAiWGVuIGludGVyZmFjZSB1c2VyIGxpYnJhcnkiCisK
KyNkZWZpbmUgVkVSX0ZJTEVUWVBFICAgICAgICAgICAgICAgIFZGVF9ETEwKKyNkZWZpbmUgVkVS
X0ZJTEVTVUJUWVBFICAgICAgICAgICAgIDAKKworI2luY2x1ZGUgPGNvbW1vbi52ZXI+CmRpZmYg
LS1naXQgYS9zcmMveGVuY29udHJvbC94ZW5jb250cm9sX3ByaXZhdGUuaCBiL3NyYy94ZW5jb250
cm9sL3hlbmNvbnRyb2xfcHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjY4NWJjZmEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMveGVuY29udHJvbC94ZW5jb250cm9s
X3ByaXZhdGUuaApAQCAtMCwwICsxLDQ5IEBACisjaWZuZGVmIF9YRU5DT05UUk9MX1BSSVZBVEVf
SF8KKyNkZWZpbmUgX1hFTkNPTlRST0xfUFJJVkFURV9IXworCisjaW5jbHVkZSA8d2luZG93cy5o
PgorI2luY2x1ZGUgInhlbmNvbnRyb2wuaCIKKworI2RlZmluZSBMb2cobGV2ZWwsIGZvcm1hdCwg
Li4uKSBcCisgICAgICAgIF9Mb2coWGMtPkxvZ2dlciwgbGV2ZWwsIFhjLT5Mb2dMZXZlbCwgX19G
VU5DVElPTl9fLCBmb3JtYXQsIF9fVkFfQVJHU19fKQorCisjZGVmaW5lIEluaXRpYWxpemVMaXN0
SGVhZChMaXN0SGVhZCkgKCBcCisgICAgKExpc3RIZWFkKS0+RmxpbmsgPSAoTGlzdEhlYWQpLT5C
bGluayA9IChMaXN0SGVhZCkpCisKKyNkZWZpbmUgSW5zZXJ0VGFpbExpc3QoTGlzdEhlYWQsIEVu
dHJ5KSB7IFwKKyAgICBQTElTVF9FTlRSWSBfRVhfQmxpbms7IFwKKyAgICBQTElTVF9FTlRSWSBf
RVhfTGlzdEhlYWQ7IFwKKyAgICBfRVhfTGlzdEhlYWQgPSAoTGlzdEhlYWQpOyBcCisgICAgX0VY
X0JsaW5rID0gX0VYX0xpc3RIZWFkLT5CbGluazsgXAorICAgIChFbnRyeSktPkZsaW5rID0gX0VY
X0xpc3RIZWFkOyBcCisgICAgKEVudHJ5KS0+QmxpbmsgPSBfRVhfQmxpbms7IFwKKyAgICBfRVhf
QmxpbmstPkZsaW5rID0gKEVudHJ5KTsgXAorICAgIF9FWF9MaXN0SGVhZC0+QmxpbmsgPSAoRW50
cnkpOyBcCisgICAgfQorCisjZGVmaW5lIFJlbW92ZUVudHJ5TGlzdChFbnRyeSkgeyBcCisgICAg
UExJU1RfRU5UUlkgX0VYX0JsaW5rOyBcCisgICAgUExJU1RfRU5UUlkgX0VYX0ZsaW5rOyBcCisg
ICAgX0VYX0ZsaW5rID0gKEVudHJ5KS0+Rmxpbms7IFwKKyAgICBfRVhfQmxpbmsgPSAoRW50cnkp
LT5CbGluazsgXAorICAgIF9FWF9CbGluay0+RmxpbmsgPSBfRVhfRmxpbms7IFwKKyAgICBfRVhf
RmxpbmstPkJsaW5rID0gX0VYX0JsaW5rOyBcCisgICAgfQorCit0eXBlZGVmIHN0cnVjdCBfWEVO
Q09OVFJPTF9DT05URVhUIHsKKyAgICBIQU5ETEUgWGVuSWZhY2U7CisgICAgWEVOQ09OVFJPTF9M
T0dHRVIgKkxvZ2dlcjsKKyAgICBYRU5DT05UUk9MX0xPR19MRVZFTCBMb2dMZXZlbDsKKyAgICBV
TE9ORyBSZXF1ZXN0SWQ7CisgICAgTElTVF9FTlRSWSBSZXF1ZXN0TGlzdDsKKyAgICBDUklUSUNB
TF9TRUNUSU9OIFJlcXVlc3RMaXN0TG9jazsKK30gWEVOQ09OVFJPTF9DT05URVhULCAqUFhFTkNP
TlRST0xfQ09OVEVYVDsKKwordHlwZWRlZiBzdHJ1Y3QgX1hFTkNPTlRST0xfR05UVEFCX1JFUVVF
U1QgeworICAgIExJU1RfRU5UUlkgIExpc3RFbnRyeTsKKyAgICBPVkVSTEFQUEVEICBPdmVybGFw
cGVkOworICAgIFVMT05HICAgICAgIElkOworICAgIFBWT0lEICAgICAgIEFkZHJlc3M7Cit9IFhF
TkNPTlRST0xfR05UVEFCX1JFUVVFU1QsICpQWEVOQ09OVFJPTF9HTlRUQUJfUkVRVUVTVDsKKwor
I2VuZGlmIC8vIF9YRU5DT05UUk9MX1BSSVZBVEVfSF8KZGlmZiAtLWdpdCBhL3ZzMjAxMy94ZW5j
b250cm9sLnByb3BzIGIvdnMyMDEzL3hlbmNvbnRyb2wucHJvcHMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMjJjMTcwNAotLS0gL2Rldi9udWxsCisrKyBiL3ZzMjAxMy94ZW5j
b250cm9sLnByb3BzCkBAIC0wLDAgKzEsODQgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5j
b2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6
Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisKKyAgPElt
cG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgLz4KKworICA8UHJvcGVydHlHcm91cCBM
YWJlbD0iVXNlck1hY3JvcyIgLz4KKworICA8UHJvcGVydHlHcm91cD4KKyAgICA8SW5jbHVkZVBh
dGg+JChTb2x1dGlvbkRpcilcLi5caW5jbHVkZTskKEluY2x1ZGVQYXRoKTwvSW5jbHVkZVBhdGg+
CisgICAgPExpYnJhcnlQYXRoPiQoU29sdXRpb25EaXIpXCQoQ29uZmlndXJhdGlvbilcJChQbGF0
Zm9ybSk7JChMaWJyYXJ5UGF0aCk8L0xpYnJhcnlQYXRoPgorICAgIDxPdXREaXI+JChTb2x1dGlv
bkRpcilcJChDb25maWd1cmF0aW9uKVwkKFBsYXRmb3JtKVw8L091dERpcj4KKyAgICA8SW50RGly
PiQoU29sdXRpb25EaXIpXCQoUHJvamVjdE5hbWUpXCQoQ29uZmlndXJhdGlvbilcJChQbGF0Zm9y
bSlcPC9JbnREaXI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFs
PgorICA8L1Byb3BlcnR5R3JvdXA+CisKKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IkNvbmZpZ3Vy
YXRpb24iPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAg
ICA8UGxhdGZvcm1Ub29sc2V0PnYxMjA8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdy
b3VwPgorCisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbiknPT0n
RGVidWcnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPFJ1bkNvZGVBbmFseXNpcz50cnVl
PC9SdW5Db2RlQW5hbHlzaXM+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVn
TGlicmFyaWVzPgorICA8L1Byb3BlcnR5R3JvdXA+CisKKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0
aW9uPSInJChDb25maWd1cmF0aW9uKSc9PSdSZWxlYXNlJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24i
PgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAg
PFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+
CisgIDwvUHJvcGVydHlHcm91cD4KKworICA8SXRlbURlZmluaXRpb25Hcm91cD4KKyAgICA8TGlu
az4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPnNldHVwYXBpLmxpYjt3czJfMzIubGli
O3NobHdhcGkubGliO3d0c2FwaTMyLmxpYjt1c2VyZW52LmxpYjt2ZXJzaW9uLmxpYjtudGRsbC5s
aWI7a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO2NvbWRsZzMyLmxpYjthZHZhcGkz
Mi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjslKEFkZGl0
aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEdlbmVy
YXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAg
PC9MaW5rPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+
V0lOMzI7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25z
PgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVj
b21waWxlZEhlYWRlcj5Ob3RVc2luZzwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8U0RMQ2hl
Y2s+dHJ1ZTwvU0RMQ2hlY2s+CisgICAgICA8RXhjZXB0aW9uSGFuZGxpbmc+ZmFsc2U8L0V4Y2Vw
dGlvbkhhbmRsaW5nPgorICAgICAgPFRyZWF0V2FybmluZ0FzRXJyb3I+dHJ1ZTwvVHJlYXRXYXJu
aW5nQXNFcnJvcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q3VzdG9tQnVpbGRTdGVwPgorICAg
ICAgPENvbW1hbmQ+eGNvcHkgL3kgJChUYXJnZXRQYXRoKSAkKFNvbHV0aW9uRGlyKVwuLlx4ZW5p
ZmFjZVwkKFBsYXRmb3JtVGFyZ2V0KVwKK3hjb3B5IC95ICQoVGFyZ2V0RGlyKSQoVGFyZ2V0TmFt
ZSkucGRiICQoU29sdXRpb25EaXIpXC4uXHhlbmlmYWNlXCQoUGxhdGZvcm1UYXJnZXQpXAoraWYg
ZXhpc3QgJChUYXJnZXREaXIpJChUYXJnZXROYW1lKS5saWIgeGNvcHkgL3kgJChUYXJnZXREaXIp
JChUYXJnZXROYW1lKS5saWIgJChTb2x1dGlvbkRpcilcLi5ceGVuaWZhY2VcJChQbGF0Zm9ybVRh
cmdldClcPC9Db21tYW5kPgorICAgIDwvQ3VzdG9tQnVpbGRTdGVwPgorICAgIDxDdXN0b21CdWls
ZFN0ZXA+CisgICAgICA8TWVzc2FnZT5Db3B5aW5nIG91dHB1dCBmaWxlczwvTWVzc2FnZT4KKyAg
ICA8L0N1c3RvbUJ1aWxkU3RlcD4KKyAgICA8Q3VzdG9tQnVpbGRTdGVwPgorICAgICAgPE91dHB1
dHM+JChTb2x1dGlvbkRpcilcLi5ceGVuaWZhY2VcJChQbGF0Zm9ybVRhcmdldCkkKFRhcmdldEZp
bGVOYW1lKTskKFNvbHV0aW9uRGlyKVwuLlx4ZW5pZmFjZVwkKFBsYXRmb3JtVGFyZ2V0KSQoVGFy
Z2V0TmFtZSkucGRiOyQoU29sdXRpb25EaXIpXC4uXHhlbmlmYWNlXCQoUGxhdGZvcm1UYXJnZXQp
JChUYXJnZXROYW1lKS5saWI7JShPdXRwdXRzKTwvT3V0cHV0cz4KKyAgICA8L0N1c3RvbUJ1aWxk
U3RlcD4KKyAgICA8Q3VzdG9tQnVpbGRTdGVwPgorICAgICAgPElucHV0cz4kKFRhcmdldFBhdGgp
OyQoVGFyZ2V0RGlyKSQoVGFyZ2V0TmFtZSkucGRiOyQoVGFyZ2V0RGlyKSQoVGFyZ2V0TmFtZSku
bGliPC9JbnB1dHM+CisgICAgPC9DdXN0b21CdWlsZFN0ZXA+CisgIDwvSXRlbURlZmluaXRpb25H
cm91cD4KKworICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRp
b24pJz09J0RlYnVnJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZp
bml0aW9ucz5fREVCVUc7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRl
ZmluaXRpb25zPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgor
ICAgICAgPEVuYWJsZVBSRWZhc3Q+dHJ1ZTwvRW5hYmxlUFJFZmFzdD4KKyAgICAgIDxSdW50aW1l
TGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWdETEw8L1J1bnRpbWVMaWJyYXJ5PgorICAgIDwvQ2xD
b21waWxlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisKKyAgPEl0ZW1EZWZpbml0aW9uR3Jv
dXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKSc9PSdSZWxlYXNlJyI+CisgICAgPENsQ29t
cGlsZT4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5OREVCVUc7JShQcmVwcm9jZXNz
b3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPE9wdGltaXph
dGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5n
PnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50
cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJl
YWRlZERMTDwvUnVudGltZUxpYnJhcnk+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+Cisg
ICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAg
ICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgPC9M
aW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisKKyAgPEl0ZW1Hcm91cCAvPgorPC9Qcm9q
ZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3ZzMjAxMy94ZW5j
b250cm9sL3hlbmNvbnRyb2wudmN4cHJvaiBiL3ZzMjAxMy94ZW5jb250cm9sL3hlbmNvbnRyb2wu
dmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDkxYTM4Ci0tLSAv
ZGV2L251bGwKKysrIGIvdnMyMDEzL3hlbmNvbnRyb2wveGVuY29udHJvbC52Y3hwcm9qCkBAIC0w
LDAgKzEsNjIgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8
UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iMTIuMCIgeG1sbnM9
Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+Cisg
IDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CisgICAgPFByb2plY3RD
b25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9u
PkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4K
KyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJ
bmNsdWRlPSJEZWJ1Z3x4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3Vy
YXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25m
aWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdp
bjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAg
ICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+
CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4KKyAgICAg
IDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+
eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICA8L0l0ZW1Hcm91
cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57
RDM4NkQ4RTktRDAxNS00QUQyLUE1QzItNEY4NDVBODAzRkEyfTwvUHJvamVjdEd1aWQ+CisgICAg
PEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPnhlbmNvbnRy
b2w8L1Jvb3ROYW1lc3BhY2U+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0
PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKyAgPFBy
b3BlcnR5R3JvdXAgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlw
ZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5V
bmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9q
ZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRH
cm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2Vy
Um9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249
ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnBy
b3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgICA8SW1wb3J0IFByb2pl
Y3Q9Ii4uXHhlbmNvbnRyb2wucHJvcHMiIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJdGVtRGVm
aW5pdGlvbkdyb3VwPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5p
dGlvbnM+X1dJTkRPV1M7X1VTUkRMTDtYRU5DT05UUk9MX0VYUE9SVFM7JShQcmVwcm9jZXNzb3JE
ZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgIDwvQ2xDb21waWxlPgor
ICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5XaW5kb3dzPC9TdWJTeXN0ZW0+CisgICAgPC9M
aW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNceGVuY29udHJvbFx4ZW5jb250cm9sLmMiIC8+CisgIDwv
SXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5c
aW5jbHVkZVx4ZW5jb250cm9sLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxz
cmNceGVuY29udHJvbFx4ZW5jb250cm9sX3ByaXZhdGUuaCIgLz4KKyAgPC9JdGVtR3JvdXA+Cisg
IDxJdGVtR3JvdXA+CisgICAgPFJlc291cmNlQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNceGVu
Y29udHJvbFx4ZW5jb250cm9sLnJjIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEltcG9ydCBQcm9q
ZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KKyAgPEltcG9y
dEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFBy
b2plY3RFeHRlbnNpb25zPgorICAgIDxWaXN1YWxTdHVkaW8+CisgICAgICA8VXNlclByb3BlcnRp
ZXMgLz4KKyAgICA8L1Zpc3VhbFN0dWRpbz4KKyAgPC9Qcm9qZWN0RXh0ZW5zaW9ucz4KKzwvUHJv
amVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS92czIwMTMveGVu
Y29udHJvbC94ZW5jb250cm9sLnZjeHByb2ouZmlsdGVycyBiL3ZzMjAxMy94ZW5jb250cm9sL3hl
bmNvbnRyb2wudmN4cHJvai5maWx0ZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmM2ZGUwOTkKLS0tIC9kZXYvbnVsbAorKysgYi92czIwMTMveGVuY29udHJvbC94ZW5jb250
cm9sLnZjeHByb2ouZmlsdGVycwpAQCAtMCwwICsxLDEzIEBACivvu788P3htbCB2ZXJzaW9uPSIx
LjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5z
PSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgor
ICA8SXRlbUdyb3VwPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVx4ZW5j
b250cm9sLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNceGVuY29udHJv
bFx4ZW5jb250cm9sX3ByaXZhdGUuaCIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+
CisgICAgPFJlc291cmNlQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNceGVuY29udHJvbFx4ZW5j
b250cm9sLnJjIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1x4ZW5jb250cm9sXHhlbmNvbnRyb2wuYyIgLz4KKyAgPC9J
dGVtR3JvdXA+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0t
Z2l0IGEvdnMyMDEzL3hlbmlmYWNlLnNsbiBiL3ZzMjAxMy94ZW5pZmFjZS5zbG4KaW5kZXggM2M3
NGM3OS4uNzZkMDZiNCAxMDA2NDQKLS0tIGEvdnMyMDEzL3hlbmlmYWNlLnNsbgorKysgYi92czIw
MTMveGVuaWZhY2Uuc2xuCkBAIC0xNyw2ICsxNyw4IEBAIFByb2plY3QoIns4QkM5Q0VCOC04QjRB
LTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAicGFja2FnZSIsICJwYWNrYWdlXHBhY2thZ2Uu
CiAJCXsyRTYxRDJDQy04NjVFLTQ0MkMtOEM4My1COERBRkQ3QkJEM0J9ID0gezJFNjFEMkNDLTg2
NUUtNDQyQy04QzgzLUI4REFGRDdCQkQzQn0KIAlFbmRQcm9qZWN0U2VjdGlvbgogRW5kUHJvamVj
dAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJ4
ZW5jb250cm9sIiwgInhlbmNvbnRyb2xceGVuY29udHJvbC52Y3hwcm9qIiwgIntEMzg2RDhFOS1E
MDE1LTRBRDItQTVDMi00Rjg0NUE4MDNGQTJ9IgorRW5kUHJvamVjdAogR2xvYmFsCiAJR2xvYmFs
U2VjdGlvbihTb2x1dGlvbkNvbmZpZ3VyYXRpb25QbGF0Zm9ybXMpID0gcHJlU29sdXRpb24KIAkJ
V2luZG93cyA3IERlYnVnfFdpbjMyID0gV2luZG93cyA3IERlYnVnfFdpbjMyCkBAIC0xNjUsNiAr
MTY3LDQyIEBAIEdsb2JhbAogCQl7OUIwNzFBMzUtODk3Qy00NzdBLUFFQjctOTVGNzc2MThBMjFE
fS5XaW5kb3dzIFZpc3RhIFJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFdpbmRvd3MgVmlzdGEgUmVs
ZWFzZXx4NjQKIAkJezlCMDcxQTM1LTg5N0MtNDc3QS1BRUI3LTk1Rjc3NjE4QTIxRH0uV2luZG93
cyBWaXN0YSBSZWxlYXNlfHg2NC5CdWlsZC4wID0gV2luZG93cyBWaXN0YSBSZWxlYXNlfHg2NAog
CQl7OUIwNzFBMzUtODk3Qy00NzdBLUFFQjctOTVGNzc2MThBMjFEfS5XaW5kb3dzIFZpc3RhIFJl
bGVhc2V8eDY0LkRlcGxveS4wID0gV2luZG93cyBWaXN0YSBSZWxlYXNlfHg2NAorCQl7RDM4NkQ4
RTktRDAxNS00QUQyLUE1QzItNEY4NDVBODAzRkEyfS5XaW5kb3dzIDcgRGVidWd8V2luMzIuQWN0
aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJe0QzODZEOEU5LUQwMTUtNEFEMi1BNUMyLTRGODQ1QTgw
M0ZBMn0uV2luZG93cyA3IERlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7RDM4
NkQ4RTktRDAxNS00QUQyLUE1QzItNEY4NDVBODAzRkEyfS5XaW5kb3dzIDcgRGVidWd8V2luMzIu
RGVwbG95LjAgPSBEZWJ1Z3xXaW4zMgorCQl7RDM4NkQ4RTktRDAxNS00QUQyLUE1QzItNEY4NDVB
ODAzRkEyfS5XaW5kb3dzIDcgRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7RDM4
NkQ4RTktRDAxNS00QUQyLUE1QzItNEY4NDVBODAzRkEyfS5XaW5kb3dzIDcgRGVidWd8eDY0LkJ1
aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJe0QzODZEOEU5LUQwMTUtNEFEMi1BNUMyLTRGODQ1QTgwM0ZB
Mn0uV2luZG93cyA3IERlYnVnfHg2NC5EZXBsb3kuMCA9IERlYnVnfHg2NAorCQl7RDM4NkQ4RTkt
RDAxNS00QUQyLUE1QzItNEY4NDVBODAzRkEyfS5XaW5kb3dzIDcgUmVsZWFzZXxXaW4zMi5BY3Rp
dmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXtEMzg2RDhFOS1EMDE1LTRBRDItQTVDMi00Rjg0NUE4
MDNGQTJ9LldpbmRvd3MgNyBSZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJ
CXtEMzg2RDhFOS1EMDE1LTRBRDItQTVDMi00Rjg0NUE4MDNGQTJ9LldpbmRvd3MgNyBSZWxlYXNl
fFdpbjMyLkRlcGxveS4wID0gUmVsZWFzZXxXaW4zMgorCQl7RDM4NkQ4RTktRDAxNS00QUQyLUE1
QzItNEY4NDVBODAzRkEyfS5XaW5kb3dzIDcgUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFz
ZXx4NjQKKwkJe0QzODZEOEU5LUQwMTUtNEFEMi1BNUMyLTRGODQ1QTgwM0ZBMn0uV2luZG93cyA3
IFJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7RDM4NkQ4RTktRDAxNS00QUQy
LUE1QzItNEY4NDVBODAzRkEyfS5XaW5kb3dzIDcgUmVsZWFzZXx4NjQuRGVwbG95LjAgPSBSZWxl
YXNlfHg2NAorCQl7RDM4NkQ4RTktRDAxNS00QUQyLUE1QzItNEY4NDVBODAzRkEyfS5XaW5kb3dz
IERldmVsb3BlciBQcmV2aWV3IERlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJ
CXtEMzg2RDhFOS1EMDE1LTRBRDItQTVDMi00Rjg0NUE4MDNGQTJ9LldpbmRvd3MgRGV2ZWxvcGVy
IFByZXZpZXcgRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXtEMzg2RDhFOS1E
MDE1LTRBRDItQTVDMi00Rjg0NUE4MDNGQTJ9LldpbmRvd3MgRGV2ZWxvcGVyIFByZXZpZXcgRGVi
dWd8V2luMzIuRGVwbG95LjAgPSBEZWJ1Z3xXaW4zMgorCQl7RDM4NkQ4RTktRDAxNS00QUQyLUE1
QzItNEY4NDVBODAzRkEyfS5XaW5kb3dzIERldmVsb3BlciBQcmV2aWV3IERlYnVnfHg2NC5BY3Rp
dmVDZmcgPSBEZWJ1Z3x4NjQKKwkJe0QzODZEOEU5LUQwMTUtNEFEMi1BNUMyLTRGODQ1QTgwM0ZB
Mn0uV2luZG93cyBEZXZlbG9wZXIgUHJldmlldyBEZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2
NAorCQl7RDM4NkQ4RTktRDAxNS00QUQyLUE1QzItNEY4NDVBODAzRkEyfS5XaW5kb3dzIERldmVs
b3BlciBQcmV2aWV3IERlYnVnfHg2NC5EZXBsb3kuMCA9IERlYnVnfHg2NAorCQl7RDM4NkQ4RTkt
RDAxNS00QUQyLUE1QzItNEY4NDVBODAzRkEyfS5XaW5kb3dzIERldmVsb3BlciBQcmV2aWV3IFJl
bGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7RDM4NkQ4RTktRDAxNS00
QUQyLUE1QzItNEY4NDVBODAzRkEyfS5XaW5kb3dzIERldmVsb3BlciBQcmV2aWV3IFJlbGVhc2V8
V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJe0QzODZEOEU5LUQwMTUtNEFEMi1BNUMy
LTRGODQ1QTgwM0ZBMn0uV2luZG93cyBEZXZlbG9wZXIgUHJldmlldyBSZWxlYXNlfFdpbjMyLkRl
cGxveS4wID0gUmVsZWFzZXxXaW4zMgorCQl7RDM4NkQ4RTktRDAxNS00QUQyLUE1QzItNEY4NDVB
ODAzRkEyfS5XaW5kb3dzIERldmVsb3BlciBQcmV2aWV3IFJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9
IFJlbGVhc2V8eDY0CisJCXtEMzg2RDhFOS1EMDE1LTRBRDItQTVDMi00Rjg0NUE4MDNGQTJ9Lldp
bmRvd3MgRGV2ZWxvcGVyIFByZXZpZXcgUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0
CisJCXtEMzg2RDhFOS1EMDE1LTRBRDItQTVDMi00Rjg0NUE4MDNGQTJ9LldpbmRvd3MgRGV2ZWxv
cGVyIFByZXZpZXcgUmVsZWFzZXx4NjQuRGVwbG95LjAgPSBSZWxlYXNlfHg2NAorCQl7RDM4NkQ4
RTktRDAxNS00QUQyLUE1QzItNEY4NDVBODAzRkEyfS5XaW5kb3dzIFZpc3RhIERlYnVnfFdpbjMy
LkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXtEMzg2RDhFOS1EMDE1LTRBRDItQTVDMi00Rjg0
NUE4MDNGQTJ9LldpbmRvd3MgVmlzdGEgRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMy
CisJCXtEMzg2RDhFOS1EMDE1LTRBRDItQTVDMi00Rjg0NUE4MDNGQTJ9LldpbmRvd3MgVmlzdGEg
RGVidWd8V2luMzIuRGVwbG95LjAgPSBEZWJ1Z3xXaW4zMgorCQl7RDM4NkQ4RTktRDAxNS00QUQy
LUE1QzItNEY4NDVBODAzRkEyfS5XaW5kb3dzIFZpc3RhIERlYnVnfHg2NC5BY3RpdmVDZmcgPSBE
ZWJ1Z3x4NjQKKwkJe0QzODZEOEU5LUQwMTUtNEFEMi1BNUMyLTRGODQ1QTgwM0ZBMn0uV2luZG93
cyBWaXN0YSBEZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7RDM4NkQ4RTktRDAxNS00
QUQyLUE1QzItNEY4NDVBODAzRkEyfS5XaW5kb3dzIFZpc3RhIERlYnVnfHg2NC5EZXBsb3kuMCA9
IERlYnVnfHg2NAorCQl7RDM4NkQ4RTktRDAxNS00QUQyLUE1QzItNEY4NDVBODAzRkEyfS5XaW5k
b3dzIFZpc3RhIFJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7RDM4
NkQ4RTktRDAxNS00QUQyLUE1QzItNEY4NDVBODAzRkEyfS5XaW5kb3dzIFZpc3RhIFJlbGVhc2V8
V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJe0QzODZEOEU5LUQwMTUtNEFEMi1BNUMy
LTRGODQ1QTgwM0ZBMn0uV2luZG93cyBWaXN0YSBSZWxlYXNlfFdpbjMyLkRlcGxveS4wID0gUmVs
ZWFzZXxXaW4zMgorCQl7RDM4NkQ4RTktRDAxNS00QUQyLUE1QzItNEY4NDVBODAzRkEyfS5XaW5k
b3dzIFZpc3RhIFJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXtEMzg2RDhF
OS1EMDE1LTRBRDItQTVDMi00Rjg0NUE4MDNGQTJ9LldpbmRvd3MgVmlzdGEgUmVsZWFzZXx4NjQu
QnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXtEMzg2RDhFOS1EMDE1LTRBRDItQTVDMi00Rjg0NUE4
MDNGQTJ9LldpbmRvd3MgVmlzdGEgUmVsZWFzZXx4NjQuRGVwbG95LjAgPSBSZWxlYXNlfHg2NAog
CUVuZEdsb2JhbFNlY3Rpb24KIAlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uUHJvcGVydGllcykgPSBw
cmVTb2x1dGlvbgogCQlIaWRlU29sdXRpb25Ob2RlID0gRkFMU0UKLS0gCjEuOC4xLm1zeXNnaXQu
MQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCndpbi1w
di1kZXZlbCBtYWlsaW5nIGxpc3QKd2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0
dHA6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8vd2luLXB2
LWRldmVs

From win-pv-devel-bounces@lists.xenproject.org Wed Nov 04 04:38:20 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 04 Nov 2015 04:38:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1Ztpq0-00027x-3u; Wed, 04 Nov 2015 04:38:20 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1Ztppy-00027p-TQ
	for win-pv-devel@lists.xenproject.org; Wed, 04 Nov 2015 04:38:19 +0000
Received: from [85.158.137.68] by server-4.bemta-3.messagelabs.com id
	AB/C0-09570-ABB89365; Wed, 04 Nov 2015 04:38:18 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-8.tower-31.messagelabs.com!1446611895!885719!1
X-Originating-IP: [66.111.4.28]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 47951 invoked from network); 4 Nov 2015 04:38:16 -0000
Received: from out4-smtp.messagingengine.com (HELO
	out4-smtp.messagingengine.com) (66.111.4.28)
	by server-8.tower-31.messagelabs.com with AES256-GCM-SHA384 encrypted
	SMTP; 4 Nov 2015 04:38:16 -0000
Received: from compute5.internal (compute5.nyi.internal [10.202.2.45])
	by mailout.nyi.internal (Postfix) with ESMTP id A5C9720AA1
	for <win-pv-devel@lists.xenproject.org>;
	Tue,  3 Nov 2015 23:38:15 -0500 (EST)
Received: from frontend1 ([10.202.2.160])
	by compute5.internal (MEProxy); Tue, 03 Nov 2015 23:38:15 -0500
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=mesmtp; bh=lNNpzeyLeyXYwr2K0qH2Fm/cNq0=; b=LtL7T+
	LYV4dqbch8mZvUNhbFr0/c+CXy0797UyagZzcMXSMNcpOZ9TK/SSdCBNGDFHqQgj
	av8WjiLEUJXChuWnknAYYCF0GKaDwdVpm82JbbLfVdXw1QV9KIyGKPpoM9h12GmW
	wugceQuN5d6gl3sbHHI9P/Cy5pV4pBX5f0bHk=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=smtpout; bh=lNNpzeyLeyXYwr2K0qH2Fm/cNq0=; b=DhFRJ
	twukjt4kn8FItVsXJC9clwNHw5/bLpxr4MtykzW0HmEdasnR0GaBV6+jL4QpUHqr
	NcVFZMTsdRzPsJmZrVEF1GpCl4i/4JXJUne2zgV7YnJ+Twl+u3RJaGefGb1p2nPj
	Inqnl7sTPvgoWpr3ZZWSQeMB/X0kNMK125ztps=
X-Sasl-enc: Pnng0ZA+Zr/ror6JmflE8LjR/cNmqOi+41Fi8/gCUQC0 1446611894
Received: from [192.168.0.3] (89-72-164-138.dynamic.chello.pl [89.72.164.138])
	by mail.messagingengine.com (Postfix) with ESMTPA id 2469DC016D5
	for <win-pv-devel@lists.xenproject.org>;
	Tue,  3 Nov 2015 23:38:14 -0500 (EST)
To: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
Message-ID: <56398BC0.1040909@invisiblethingslab.com>
Date: Wed, 4 Nov 2015 05:38:24 +0100
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.3.0
MIME-Version: 1.0
Content-Length: 68000
Subject: [win-pv-devel] [PATCH 2/2] Add a user mode library wrapper for
	XENIFACE IOCTLs
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

U2lnbmVkLW9mZi1ieTogUmFmYWwgV29qZHlsYSA8b21lZ0BpbnZpc2libGV0aGluZ3NsYWIuY29t
PgotLS0KIGluY2x1ZGUveGVuY29udHJvbC5oICAgICAgICAgICAgICAgICAgICAgICAgIHwgMzQy
ICsrKysrKysrKysKIHNyYy94ZW5jb250cm9sL3hlbmNvbnRyb2wuYyAgICAgICAgICAgICAgICAg
IHwgOTE1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL3hlbmNvbnRyb2wveGVuY29u
dHJvbC5yYyAgICAgICAgICAgICAgICAgfCAgMjQgKwogc3JjL3hlbmNvbnRyb2wveGVuY29udHJv
bF9wcml2YXRlLmggICAgICAgICAgfCAgNDkgKysKIHZzMjAxMy94ZW5jb250cm9sLnByb3BzICAg
ICAgICAgICAgICAgICAgICAgIHwgIDg0ICsrKwogdnMyMDEzL3hlbmNvbnRyb2wveGVuY29udHJv
bC52Y3hwcm9qICAgICAgICAgfCAgNjIgKysKIHZzMjAxMy94ZW5jb250cm9sL3hlbmNvbnRyb2wu
dmN4cHJvai5maWx0ZXJzIHwgIDEzICsKIHZzMjAxMy94ZW5pZmFjZS5zbG4gICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgIDM4ICsrCiA4IGZpbGVzIGNoYW5nZWQsIDE1MjcgaW5zZXJ0aW9ucygr
KQogY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUveGVuY29udHJvbC5oCiBjcmVhdGUgbW9kZSAx
MDA2NDQgc3JjL3hlbmNvbnRyb2wveGVuY29udHJvbC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3Jj
L3hlbmNvbnRyb2wveGVuY29udHJvbC5yYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy94ZW5jb250
cm9sL3hlbmNvbnRyb2xfcHJpdmF0ZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgdnMyMDEzL3hlbmNv
bnRyb2wucHJvcHMKIGNyZWF0ZSBtb2RlIDEwMDY0NCB2czIwMTMveGVuY29udHJvbC94ZW5jb250
cm9sLnZjeHByb2oKIGNyZWF0ZSBtb2RlIDEwMDY0NCB2czIwMTMveGVuY29udHJvbC94ZW5jb250
cm9sLnZjeHByb2ouZmlsdGVycwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUveGVuY29udHJvbC5oIGIv
aW5jbHVkZS94ZW5jb250cm9sLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MGEyZjhmMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUveGVuY29udHJvbC5oCkBAIC0wLDAg
KzEsMzQyIEBACisjaWZuZGVmIF9YRU5DT05UUk9MX0hfCisjZGVmaW5lIF9YRU5DT05UUk9MX0hf
CisKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8dmFyYXJncy5oPgorI2luY2x1ZGUg
InhlbmlmYWNlX2lvY3Rscy5oIgorCisjaWZkZWYgWEVOQ09OVFJPTF9FWFBPUlRTCisjICAgIGRl
ZmluZSBYRU5DT05UUk9MX0FQSSBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKKyNlbHNlCisjICAgIGRl
ZmluZSBYRU5DT05UUk9MX0FQSSBfX2RlY2xzcGVjKGRsbGltcG9ydCkKKyNlbmRpZgorCisjaWZk
ZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qISBcdHlwZWRlZiBQWEVO
Q09OVFJPTF9DT05URVhUCisgICAgXGJyaWVmIExpYnJhcnkgaGFuZGxlIHJlcHJlc2VudGluZyBh
IFhlbiBJbnRlcmZhY2Ugc2Vzc2lvbgorKi8KK3N0cnVjdCBfWEVOQ09OVFJPTF9DT05URVhUOwor
dHlwZWRlZiBzdHJ1Y3QgX1hFTkNPTlRST0xfQ09OVEVYVCAqUFhFTkNPTlRST0xfQ09OVEVYVDsK
KworLyohIFx0eXBlZGVmIFhFTkNPTlRST0xfTE9HX0xFVkVMCisgICAgXGJyaWVmIExvZyBsZXZl
bHMgdXNlZCBieSB0aGUgbGlicmFyeQorKi8KK3R5cGVkZWYgZW51bQorX1hFTkNPTlRST0xfTE9H
X0xFVkVMIHsKKyAgICBYTExfRVJST1IgPSAxLAorICAgIFhMTF9XQVJOSU5HLAorICAgIFhMTF9J
TkZPLAorICAgIFhMTF9ERUJVRywKKyAgICBYTExfVFJBQ0UsCit9IFhFTkNPTlRST0xfTE9HX0xF
VkVMOworCisvKiEgXHR5cGVkZWYgWEVOQ09OVFJPTF9MT0dHRVIKKyAgICBcYnJpZWYgQ2FsbGJh
Y2sgZm9yIHJlY2VpdmluZyBkaWFnbm9zdGljIG1lc3NhZ2VzIGZyb20gdGhlIGxpYnJhcnkKKyov
Cit0eXBlZGVmIHZvaWQKK1hFTkNPTlRST0xfTE9HR0VSKAorICAgIElOICBYRU5DT05UUk9MX0xP
R19MRVZFTCBMb2dMZXZlbCwKKyAgICBJTiAgY29uc3QgQ0hBUiAqRnVuY3Rpb24sCisgICAgSU4g
IGNvbnN0IFdDSEFSICpNZXNzYWdlLAorICAgIElOICB2YV9saXN0IEFyZ3MKKyAgICApOworCisv
KiEgXGJyaWVmIFJlZ2lzdGVyIGEgY2FsbGJhY2sgZm9yIHJlY2VpdmluZyBsaWJyYXJ5J3MgZGlh
Z25vc3RpYyBtZXNzYWdlcworICAgIFxwYXJhbSBYYyBYZW5jb250cm9sIGhhbmRsZSByZXR1cm5l
ZCBieSBYY09wZW4oKQorICAgIFxwYXJhbSBMb2dnZXIgQ2FsbGJhY2sgdG8gcmVnaXN0ZXIKKyov
CitYRU5DT05UUk9MX0FQSQordm9pZAorWGNSZWdpc3RlckxvZ2dlcigKKyAgICBJTiAgUFhFTkNP
TlRST0xfQ09OVEVYVCBYYywKKyAgICBJTiAgWEVOQ09OVFJPTF9MT0dHRVIgKkxvZ2dlcgorICAg
ICk7CisKKy8qISBcYnJpZWYgU2V0IGxvZyBsZXZlbCB0aHJlc2hvbGQgZm9yIGxpYnJhcnkncyBk
aWFnbm9zdGljIG1lc3NhZ2VzCisgICAgXHBhcmFtIFhjIFhlbmNvbnRyb2wgaGFuZGxlIHJldHVy
bmVkIGJ5IFhjT3BlbigpCisgICAgXHBhcmFtIExvZ0xldmVsIE9ubHkgbWVzc2FnZXMgd2l0aCB0
aGlzIGxldmVsIGFuZCBhYm92ZSB3aWxsIGJlIHNlbnQgdG8gdGhlIGxvZ2dlciBjYWxsYmFjawor
Ki8KK1hFTkNPTlRST0xfQVBJCit2b2lkCitYY1NldExvZ0xldmVsKAorICAgIElOICBQWEVOQ09O
VFJPTF9DT05URVhUIFhjLAorICAgIElOICBYRU5DT05UUk9MX0xPR19MRVZFTCBMb2dMZXZlbAor
ICAgICk7CisKKy8qISBcYnJpZWYgT3BlbiB0aGUgWGVuIEludGVyZmFjZSBkZXZpY2UKKyAgICBc
cGFyYW0gTG9nZ2VyIENhbGxiYWNrIGZvciByZWNlaXZpbmcgbGlicmFyeSdzIGRpYWdub3N0aWMg
bWVzc2FnZXMKKyAgICBccGFyYW0gWGMgWGVuY29udHJvbCBoYW5kbGUgcmVwcmVzZW50aW5nIGEg
WGVuIEludGVyZmFjZSBzZXNzaW9uCisgICAgXHJldHVybiBFcnJvciBjb2RlCisqLworWEVOQ09O
VFJPTF9BUEkKK0RXT1JECitYY09wZW4oCisgICAgSU4gIFhFTkNPTlRST0xfTE9HR0VSICpMb2dn
ZXIsCisgICAgT1VUIFBYRU5DT05UUk9MX0NPTlRFWFQgKlhjCisgICAgKTsKKworLyohIFxicmll
ZiBDbG9zZSB0aGUgWGVuIEludGVyZmFjZSBkZXZpY2UKKyAgICBccGFyYW0gWGMgWGVuY29udHJv
bCBoYW5kbGUgcmV0dXJuZWQgYnkgWGNPcGVuKCkKKyovCitYRU5DT05UUk9MX0FQSQordm9pZAor
WGNDbG9zZSgKKyAgICBJTiAgUFhFTkNPTlRST0xfQ09OVEVYVCBYYworICAgICk7CisKKy8qISBc
YnJpZWYgT3BlbiBhbiB1bmJvdW5kIGV2ZW50IGNoYW5uZWwKKyAgICBccGFyYW0gWGMgWGVuY29u
dHJvbCBoYW5kbGUgcmV0dXJuZWQgYnkgWGNPcGVuKCkKKyAgICBccGFyYW0gUmVtb3RlRG9tYWlu
IElEIG9mIGEgcmVtb3RlIGRvbWFpbiB0aGF0IHdpbGwgYmluZCB0aGUgY2hhbm5lbAorICAgIFxw
YXJhbSBFdmVudCBIYW5kbGUgdG8gYW4gZXZlbnQgb2JqZWN0IHRoYXQgd2lsbCByZWNlaXZlIGV2
ZW50IGNoYW5uZWwgbm90aWZpY2F0aW9ucworICAgIFxwYXJhbSBNYXNrIFNldCB0byBUUlVFIGlm
IHRoZSBldmVudCBjaGFubmVsIHNob3VsZCBiZSBpbml0aWFsbHkgbWFza2VkCisgICAgXHBhcmFt
IExvY2FsUG9ydCBQb3J0IG51bWJlciB0aGF0IGlzIGFzc2lnbmVkIHRvIHRoZSBldmVudCBjaGFu
bmVsCisgICAgXHJldHVybiBFcnJvciBjb2RlCisqLworWEVOQ09OVFJPTF9BUEkKK0RXT1JECitY
Y0V2dGNobkJpbmRVbmJvdW5kKAorICAgIElOICBQWEVOQ09OVFJPTF9DT05URVhUIFhjLAorICAg
IElOICBVU0hPUlQgUmVtb3RlRG9tYWluLAorICAgIElOICBIQU5ETEUgRXZlbnQsCisgICAgSU4g
IEJPT0wgTWFzaywKKyAgICBPVVQgVUxPTkcgKkxvY2FsUG9ydAorICAgICk7CisKKy8qISBcYnJp
ZWYgT3BlbiBhbiBldmVudCBjaGFubmVsIHRoYXQgd2FzIGFscmVhZHkgYm91bmQgYnkgYSByZW1v
dGUgZG9tYWluCisgICAgXHBhcmFtIFhjIFhlbmNvbnRyb2wgaGFuZGxlIHJldHVybmVkIGJ5IFhj
T3BlbigpCisgICAgXHBhcmFtIFJlbW90ZURvbWFpbiBJRCBvZiBhIHJlbW90ZSBkb21haW4gdGhh
dCBoYXMgYWxyZWFkeSBib3VuZCB0aGUgY2hhbm5lbAorICAgIFxwYXJhbSBSZW1vdGVQb3J0IFBv
cnQgbnVtYmVyIHRoYXQgaXMgYXNzaWduZWQgdG8gdGhlIGV2ZW50IGNoYW5uZWwgaW4gdGhlIFxh
IFJlbW90ZURvbWFpbgorICAgIFxwYXJhbSBFdmVudCBIYW5kbGUgdG8gYW4gZXZlbnQgdGhhdCB3
aWxsIHJlY2VpdmUgZXZlbnQgY2hhbm5lbCBub3RpZmljYXRpb25zCisgICAgXHBhcmFtIE1hc2sg
U2V0IHRvIFRSVUUgaWYgdGhlIGV2ZW50IG9iamVjdCBjaGFubmVsIHNob3VsZCBiZSBpbml0aWFs
bHkgbWFza2VkCisgICAgXHBhcmFtIExvY2FsUG9ydCBQb3J0IG51bWJlciB0aGF0IGlzIGFzc2ln
bmVkIHRvIHRoZSBldmVudCBjaGFubmVsCisgICAgXHJldHVybiBFcnJvciBjb2RlCisqLworWEVO
Q09OVFJPTF9BUEkKK0RXT1JECitYY0V2dGNobkJpbmRJbnRlcmRvbWFpbigKKyAgICBJTiAgUFhF
TkNPTlRST0xfQ09OVEVYVCBYYywKKyAgICBJTiAgVVNIT1JUIFJlbW90ZURvbWFpbiwKKyAgICBJ
TiAgVUxPTkcgUmVtb3RlUG9ydCwKKyAgICBJTiAgSEFORExFIEV2ZW50LAorICAgIElOICBCT09M
IE1hc2ssCisgICAgT1VUIFVMT05HICpMb2NhbFBvcnQKKyAgICApOworCisvKiEgXGJyaWVmIENs
b3NlIGFuIGV2ZW50IGNoYW5uZWwKKyAgICBccGFyYW0gWGMgWGVuY29udHJvbCBoYW5kbGUgcmV0
dXJuZWQgYnkgWGNPcGVuKCkKKyAgICBccGFyYW0gTG9jYWxQb3J0IFBvcnQgbnVtYmVyIHRoYXQg
aXMgYXNzaWduZWQgdG8gdGhlIGV2ZW50IGNoYW5uZWwKKyAgICBccmV0dXJuIEVycm9yIGNvZGUK
KyovCitYRU5DT05UUk9MX0FQSQorRFdPUkQKK1hjRXZ0Y2huQ2xvc2UoCisgICAgSU4gIFBYRU5D
T05UUk9MX0NPTlRFWFQgWGMsCisgICAgSU4gIFVMT05HIExvY2FsUG9ydAorICAgICk7CisKKy8q
ISBcYnJpZWYgTm90aWZ5IHRoZSByZW1vdGUgZW5kIG9mIGFuIGV2ZW50IGNoYW5uZWwKKyAgICBc
cGFyYW0gWGMgWGVuY29udHJvbCBoYW5kbGUgcmV0dXJuZWQgYnkgWGNPcGVuKCkKKyAgICBccGFy
YW0gTG9jYWxQb3J0IFBvcnQgbnVtYmVyIHRoYXQgaXMgYXNzaWduZWQgdG8gdGhlIGV2ZW50IGNo
YW5uZWwKKyAgICBccmV0dXJuIEVycm9yIGNvZGUKKyovCitYRU5DT05UUk9MX0FQSQorRFdPUkQK
K1hjRXZ0Y2huTm90aWZ5KAorICAgIElOICBQWEVOQ09OVFJPTF9DT05URVhUIFhjLAorICAgIElO
ICBVTE9ORyBMb2NhbFBvcnQKKyAgICApOworCisvKiEgXGJyaWVmIFVubWFzayBhbiBldmVudCBj
aGFubmVsCisgICAgXHBhcmFtIFhjIFhlbmNvbnRyb2wgaGFuZGxlIHJldHVybmVkIGJ5IFhjT3Bl
bigpCisgICAgXHBhcmFtIExvY2FsUG9ydCBQb3J0IG51bWJlciB0aGF0IGlzIGFzc2lnbmVkIHRv
IHRoZSBldmVudCBjaGFubmVsCisgICAgXHJldHVybiBFcnJvciBjb2RlCisqLworWEVOQ09OVFJP
TF9BUEkKK0RXT1JECitYY0V2dGNoblVubWFzaygKKyAgICBJTiAgUFhFTkNPTlRST0xfQ09OVEVY
VCBYYywKKyAgICBJTiAgVUxPTkcgTG9jYWxQb3J0CisgICAgKTsKKworLyohIFxicmllZiBHcmFu
dCBhIFxhIFJlbW90ZURvbWFpbiBwZXJtaXNzaW9uIHRvIGFjY2VzcyBsb2NhbCBtZW1vcnkgcGFn
ZXMKKyAgICBccGFyYW0gWGMgWGVuY29udHJvbCBoYW5kbGUgcmV0dXJuZWQgYnkgWGNPcGVuKCkK
KyAgICBccGFyYW0gUmVtb3RlRG9tYWluIElEIG9mIGEgcmVtb3RlIGRvbWFpbiB0aGF0IGlzIGJl
aW5nIGdyYW50ZWQgYWNjZXNzCisgICAgXHBhcmFtIE51bWJlclBhZ2VzIE51bWJlciBvZiA0ayBw
YWdlcyB0byBncmFudCBhY2Nlc3MgdG8KKyAgICBccGFyYW0gTm90aWZ5T2Zmc2V0IE9mZnNldCBv
ZiBhIGJ5dGUgaW4gdGhlIGdyYW50ZWQgcmVnaW9uIHRoYXQgd2lsbCBiZSBzZXQgdG8gMCB3aGVu
IHRoZSBncmFudCBpcyByZXZva2VkCisgICAgXHBhcmFtIE5vdGlmeVBvcnQgTG9jYWwgcG9ydCBu
dW1iZXIgb2YgYW4gb3BlbiBldmVudCBjaGFubmVsIHRoYXQgd2lsbCBiZSBub3RpZmllZCB3aGVu
IHRoZSBncmFudCBpcyByZXZva2VkCisgICAgXHBhcmFtIEZsYWdzIEdyYW50IG9wdGlvbnMKKyAg
ICBccGFyYW0gQWRkcmVzcyBMb2NhbCB1c2VyIG1vZGUgYWRkcmVzcyBvZiB0aGUgZ3JhbnRlZCBt
ZW1vcnkgcmVnaW9uCisgICAgXHBhcmFtIFJlZmVyZW5jZXMgQW4gYXJyYXkgb2YgWGVuIGdyYW50
IG51bWJlcnMgZm9yIGV2ZXJ5IGdyYW50ZWQgcGFnZQorICAgIFxyZXR1cm4gRXJyb3IgY29kZQor
Ki8KK1hFTkNPTlRST0xfQVBJCitEV09SRAorWGNHbnR0YWJQZXJtaXRGb3JlaWduQWNjZXNzKAor
ICAgIElOICBQWEVOQ09OVFJPTF9DT05URVhUIFhjLAorICAgIElOICBVU0hPUlQgUmVtb3RlRG9t
YWluLAorICAgIElOICBVTE9ORyBOdW1iZXJQYWdlcywKKyAgICBJTiAgVUxPTkcgTm90aWZ5T2Zm
c2V0LAorICAgIElOICBVTE9ORyBOb3RpZnlQb3J0LAorICAgIElOICBYRU5JRkFDRV9HTlRUQUJf
UEFHRV9GTEFHUyBGbGFncywKKyAgICBPVVQgUFZPSUQgKkFkZHJlc3MsCisgICAgT1VUIFVMT05H
ICpSZWZlcmVuY2VzCisgICAgKTsKKworLyohIFxicmllZiBSZXZva2UgYSBmb3JlaWduIGRvbWFp
biBhY2Nlc3MgdG8gcHJldmlvdXNseSBncmFudGVkIG1lbW9yeSByZWdpb24KKyAgICBccGFyYW0g
WGMgWGVuY29udHJvbCBoYW5kbGUgcmV0dXJuZWQgYnkgWGNPcGVuKCkKKyAgICBccGFyYW0gQWRk
cmVzcyBMb2NhbCB1c2VyIG1vZGUgYWRkcmVzcyBvZiB0aGUgZ3JhbnRlZCBtZW1vcnkgcmVnaW9u
CisgICAgXHJldHVybiBFcnJvciBjb2RlCisqLworWEVOQ09OVFJPTF9BUEkKK0RXT1JECitYY0du
dHRhYlJldm9rZUZvcmVpZ25BY2Nlc3MoCisgICAgSU4gIFBYRU5DT05UUk9MX0NPTlRFWFQgWGMs
CisgICAgSU4gIFBWT0lEIEFkZHJlc3MKKyAgICApOworCisvKiEgXGJyaWVmIE1hcCBhIGZvcmVp
Z24gbWVtb3J5IHJlZ2lvbiBpbnRvIHRoZSBjdXJyZW50IGFkZHJlc3Mgc3BhY2UKKyAgICBccGFy
YW0gWGMgWGVuY29udHJvbCBoYW5kbGUgcmV0dXJuZWQgYnkgWGNPcGVuKCkKKyAgICBccGFyYW0g
UmVtb3RlRG9tYWluIElEIG9mIGEgcmVtb3RlIGRvbWFpbiB0aGF0IGhhcyBncmFudGVkIGFjY2Vz
cyB0byB0aGUgcGFnZXMKKyAgICBccGFyYW0gTnVtYmVyUGFnZXMgTnVtYmVyIG9mIDRrIHBhZ2Vz
IHRvIG1hcAorICAgIFxwYXJhbSBSZWZlcmVuY2VzIEFuIGFycmF5IG9mIFhlbiBncmFudCBudW1i
ZXJzIGZvciBldmVyeSBncmFudGVkIHBhZ2UKKyAgICBccGFyYW0gTm90aWZ5T2Zmc2V0IE9mZnNl
dCBvZiBhIGJ5dGUgaW4gdGhlIG1hcHBlZCByZWdpb24gdGhhdCB3aWxsIGJlIHNldCB0byAwIHdo
ZW4gdGhlIHJlZ2lvbiBpcyB1bm1hcHBlZAorICAgIFxwYXJhbSBOb3RpZnlQb3J0IExvY2FsIHBv
cnQgbnVtYmVyIG9mIGFuIG9wZW4gZXZlbnQgY2hhbm5lbCB0aGF0IHdpbGwgYmUgbm90aWZpZWQg
d2hlbiB0aGUgcmVnaW9uIGlzIHVubWFwcGVkCisgICAgXHBhcmFtIEZsYWdzIE1hcCBvcHRpb25z
CisgICAgXHBhcmFtIEFkZHJlc3MgTG9jYWwgdXNlciBtb2RlIGFkZHJlc3Mgb2YgdGhlIG1hcHBl
ZCBtZW1vcnkgcmVnaW9uCisgICAgXHJldHVybiBFcnJvciBjb2RlCisqLworWEVOQ09OVFJPTF9B
UEkKK0RXT1JECitYY0dudHRhYk1hcEZvcmVpZ25QYWdlcygKKyAgICBJTiAgUFhFTkNPTlRST0xf
Q09OVEVYVCBYYywKKyAgICBJTiAgVVNIT1JUIFJlbW90ZURvbWFpbiwKKyAgICBJTiAgVUxPTkcg
TnVtYmVyUGFnZXMsCisgICAgSU4gIFBVTE9ORyBSZWZlcmVuY2VzLAorICAgIElOICBVTE9ORyBO
b3RpZnlPZmZzZXQsCisgICAgSU4gIFVMT05HIE5vdGlmeVBvcnQsCisgICAgSU4gIFhFTklGQUNF
X0dOVFRBQl9QQUdFX0ZMQUdTIEZsYWdzLAorICAgIE9VVCBQVk9JRCAqQWRkcmVzcworICAgICk7
CisKKy8qISBcYnJpZWYgVW5tYXAgYSBmb3JlaWduIG1lbW9yeSByZWdpb24gZnJvbSB0aGUgY3Vy
cmVudCBhZGRyZXNzIHNwYWNlCisgICAgXHBhcmFtIFhjIFhlbmNvbnRyb2wgaGFuZGxlIHJldHVy
bmVkIGJ5IFhjT3BlbigpCisgICAgXHBhcmFtIEFkZHJlc3MgTG9jYWwgdXNlciBtb2RlIGFkZHJl
c3Mgb2YgdGhlIG1hcHBlZCBtZW1vcnkgcmVnaW9uCisgICAgXHJldHVybiBFcnJvciBjb2RlCisq
LworWEVOQ09OVFJPTF9BUEkKK0RXT1JECitYY0dudHRhYlVubWFwRm9yZWlnblBhZ2VzKAorICAg
IElOICBQWEVOQ09OVFJPTF9DT05URVhUIFhjLAorICAgIElOICBQVk9JRCBBZGRyZXNzCisgICAg
KTsKKworLyohIFxicmllZiBSZWFkIGEgWGVuU3RvcmUga2V5CisgICAgXHBhcmFtIFhjIFhlbmNv
bnRyb2wgaGFuZGxlIHJldHVybmVkIGJ5IFhjT3BlbigpCisgICAgXHBhcmFtIFBhdGggUGF0aCB0
byB0aGUga2V5CisgICAgXHBhcmFtIGNiVmFsdWUgU2l6ZSBvZiB0aGUgXGEgVmFsdWUgYnVmZmVy
LCBpbiBieXRlcworICAgIFxwYXJhbSBWYWx1ZSBCdWZmZXIgdGhhdCByZWNlaXZlcyB0aGUgdmFs
dWUKKyAgICBccmV0dXJuIEVycm9yIGNvZGUKKyovCitYRU5DT05UUk9MX0FQSQorRFdPUkQKK1hj
U3RvcmVSZWFkKAorICAgIElOICBQWEVOQ09OVFJPTF9DT05URVhUIFhjLAorICAgIElOICBQQ0hB
UiBQYXRoLAorICAgIElOICBEV09SRCBjYlZhbHVlLAorICAgIE9VVCBDSEFSICpWYWx1ZQorICAg
ICk7CisKKy8qISBcYnJpZWYgV3JpdGUgYSB2YWx1ZSB0byBhIFhlblN0b3JlIGtleQorICAgIFxw
YXJhbSBYYyBYZW5jb250cm9sIGhhbmRsZSByZXR1cm5lZCBieSBYY09wZW4oKQorICAgIFxwYXJh
bSBQYXRoIFBhdGggdG8gdGhlIGtleQorICAgIFxwYXJhbSBWYWx1ZSBWYWx1ZSB0byB3cml0ZQor
ICAgIFxyZXR1cm4gRXJyb3IgY29kZQorKi8KK1hFTkNPTlRST0xfQVBJCitEV09SRAorWGNTdG9y
ZVdyaXRlKAorICAgIElOICBQWEVOQ09OVFJPTF9DT05URVhUIFhjLAorICAgIElOICBQQ0hBUiBQ
YXRoLAorICAgIElOICBQQ0hBUiBWYWx1ZQorICAgICk7CisKKy8qISBcYnJpZWYgRW51bWVyYXRl
IGFsbCBpbW1lZGlhdGUgY2hpbGQga2V5cyBvZiBhIFhlblN0b3JlIGtleQorICAgIFxwYXJhbSBY
YyBYZW5jb250cm9sIGhhbmRsZSByZXR1cm5lZCBieSBYY09wZW4oKQorICAgIFxwYXJhbSBQYXRo
IFBhdGggdG8gdGhlIGtleQorICAgIFxwYXJhbSBjYk91dHB1dCBTaXplIG9mIHRoZSBcYSBPdXRw
dXQgYnVmZmVyLCBpbiBieXRlcworICAgIFxwYXJhbSBPdXRwdXQgQnVmZmVyIHRoYXQgcmVjZWl2
ZXMgYSBOVUwtc2VwYXJhdGVkIGNoaWxkIGtleSBuYW1lcworICAgIFxyZXR1cm4gRXJyb3IgY29k
ZQorKi8KK1hFTkNPTlRST0xfQVBJCitEV09SRAorWGNTdG9yZURpcmVjdG9yeSgKKyAgICBJTiAg
UFhFTkNPTlRST0xfQ09OVEVYVCBYYywKKyAgICBJTiAgUENIQVIgUGF0aCwKKyAgICBJTiAgRFdP
UkQgY2JPdXRwdXQsCisgICAgT1VUIENIQVIgKk91dHB1dAorICAgICk7CisKKy8qISBcYnJpZWYg
UmVtb3ZlIGEgWGVuU3RvcmUga2V5CisgICAgXHBhcmFtIFhjIFhlbmNvbnRyb2wgaGFuZGxlIHJl
dHVybmVkIGJ5IFhjT3BlbigpCisgICAgXHBhcmFtIFBhdGggUGF0aCB0byB0aGUga2V5CisgICAg
XHJldHVybiBFcnJvciBjb2RlCisqLworWEVOQ09OVFJPTF9BUEkKK0RXT1JECitYY1N0b3JlUmVt
b3ZlKAorICAgIElOICBQWEVOQ09OVFJPTF9DT05URVhUIFhjLAorICAgIElOICBQQ0hBUiBQYXRo
CisgICAgKTsKKworLyohIFxicmllZiBTZXQgcGVybWlzc2lvbnMgb2YgYSBYZW5TdG9yZSBrZXkK
KyAgICBccGFyYW0gWGMgWGVuY29udHJvbCBoYW5kbGUgcmV0dXJuZWQgYnkgWGNPcGVuKCkKKyAg
ICBccGFyYW0gUGF0aCBQYXRoIHRvIHRoZSBrZXkKKyAgICBccGFyYW0gQ291bnQgTnVtYmVyIG9m
IHBlcm1pc3Npb25zCisgICAgXHBhcmFtIFBlcm1pc3Npb25zIEFycmF5IG9mIHBlcm1pc3Npb25z
IHRvIHNldAorICAgIFxyZXR1cm4gRXJyb3IgY29kZQorKi8KK1hFTkNPTlRST0xfQVBJCitEV09S
RAorWGNTdG9yZVNldFBlcm1pc3Npb25zKAorICAgIElOICBQWEVOQ09OVFJPTF9DT05URVhUIFhj
LAorICAgIElOICBQQ0hBUiBQYXRoLAorICAgIElOICBVTE9ORyBDb3VudCwKKyAgICBJTiAgUFhF
TklGQUNFX1NUT1JFX1BFUk1JU1NJT04gUGVybWlzc2lvbnMKKyAgICApOworCisvKiEgXGJyaWVm
IEFkZCBhIFhlblN0b3JlIGtleSB3YXRjaAorICAgIFxwYXJhbSBYYyBYZW5jb250cm9sIGhhbmRs
ZSByZXR1cm5lZCBieSBYY09wZW4oKQorICAgIFxwYXJhbSBQYXRoIFBhdGggdG8gdGhlIGtleSB0
byBiZSB3YXRjaGVkCisgICAgXHBhcmFtIEV2ZW50IEhhbmRsZSB0byBhbiBldmVudCB0aGF0IHdp
bGwgYmUgc2lnbmFsZWQgd2hlbiB0aGUgd2F0Y2ggZmlyZXMKKyAgICBccGFyYW0gSGFuZGxlIEFu
IG9wYXF1ZSB2YWx1ZSByZXByZXNlbnRpbmcgdGhlIHdhdGNoCisgICAgXHJldHVybiBFcnJvciBj
b2RlCisqLworWEVOQ09OVFJPTF9BUEkKK0RXT1JECitYY1N0b3JlQWRkV2F0Y2goCisgICAgSU4g
IFBYRU5DT05UUk9MX0NPTlRFWFQgWGMsCisgICAgSU4gIFBDSEFSIFBhdGgsCisgICAgSU4gIEhB
TkRMRSBFdmVudCwKKyAgICBPVVQgUFZPSUQgKkhhbmRsZQorICAgICk7CisKKy8qISBcYnJpZWYg
UmVtb3ZlIGEgWGVuU3RvcmUgd2F0Y2gKKyAgICBccGFyYW0gWGMgWGVuY29udHJvbCBoYW5kbGUg
cmV0dXJuZWQgYnkgWGNPcGVuKCkKKyAgICBccGFyYW0gSGFuZGxlIFdhdGNoIGhhbmRsZSByZXR1
cm5lZCBieSBYY1N0b3JlQWRkV2F0Y2goKQorICAgIFxyZXR1cm4gRXJyb3IgY29kZQorKi8KK1hF
TkNPTlRST0xfQVBJCitEV09SRAorWGNTdG9yZVJlbW92ZVdhdGNoKAorICAgIElOICBQWEVOQ09O
VFJPTF9DT05URVhUIFhjLAorICAgIElOICBQVk9JRCBIYW5kbGUKKyAgICApOworCisjaWZkZWYg
X19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gX1hFTkNPTlRST0xfSF8KZGlmZiAt
LWdpdCBhL3NyYy94ZW5jb250cm9sL3hlbmNvbnRyb2wuYyBiL3NyYy94ZW5jb250cm9sL3hlbmNv
bnRyb2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmFjOWQwCi0tLSAv
ZGV2L251bGwKKysrIGIvc3JjL3hlbmNvbnRyb2wveGVuY29udHJvbC5jCkBAIC0wLDAgKzEsOTE1
IEBACisjZGVmaW5lIElOSVRHVUlECisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPHNl
dHVwYXBpLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKyNp
bmNsdWRlICJ4ZW5jb250cm9sLmgiCisjaW5jbHVkZSAieGVuY29udHJvbF9wcml2YXRlLmgiCisK
K0JPT0wgQVBJRU5UUlkKK0RsbE1haW4oCisgICAgSU4gIEhNT0RVTEUgTW9kdWxlLAorICAgIElO
ICBEV09SRCBSZWFzb25Gb3JDYWxsLAorICAgIElOICBMUFZPSUQgUmVzZXJ2ZWQKKykKK3sKKyAg
ICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQKK19Mb2coCisgICAgSU4gIFhFTkNPTlRS
T0xfTE9HR0VSICpMb2dnZXIsCisgICAgSU4gIFhFTkNPTlRST0xfTE9HX0xFVkVMIExvZ0xldmVs
LAorICAgIElOICBYRU5DT05UUk9MX0xPR19MRVZFTCBDdXJyZW50TG9nTGV2ZWwsCisgICAgSU4g
IFBDSEFSIEZ1bmN0aW9uLAorICAgIElOICBQV0NIQVIgRm9ybWF0LAorICAgIC4uLgorICAgICkK
K3sKKyAgICB2YV9saXN0IEFyZ3M7CisgICAgRFdPUkQgTGFzdEVycm9yOworCisgICAgaWYgKExv
Z2dlciA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoTG9nTGV2ZWwgPiBDdXJy
ZW50TG9nTGV2ZWwpCisgICAgICAgIHJldHVybjsKKworICAgIExhc3RFcnJvciA9IEdldExhc3RF
cnJvcigpOworICAgIHZhX3N0YXJ0KEFyZ3MsIEZvcm1hdCk7CisgICAgTG9nZ2VyKExvZ0xldmVs
LCBGdW5jdGlvbiwgRm9ybWF0LCBBcmdzKTsKKyAgICB2YV9lbmQoQXJncyk7CisgICAgU2V0TGFz
dEVycm9yKExhc3RFcnJvcik7Cit9CisKK3N0YXRpYyB2b2lkCitfTG9nTXVsdGlTeigKKyAgICBJ
TiAgUFhFTkNPTlRST0xfQ09OVEVYVCBYYywKKyAgICBJTiAgUENIQVIgQ2FsbGVyLAorICAgIElO
ICBYRU5DT05UUk9MX0xPR19MRVZFTCBMZXZlbCwKKyAgICBJTiAgUENIQVIgTXVsdGlTegorICAg
ICkKK3sKKyAgICBQQ0hBUiBQdHI7CisgICAgVUxPTkcgTGVuOworCisgICAgZm9yIChQdHIgPSBN
dWx0aVN6OyAqUHRyOykgeworICAgICAgICBMZW4gPSAoVUxPTkcpc3RybGVuKFB0cik7CisgICAg
ICAgIF9Mb2coWGMtPkxvZ2dlciwgTGV2ZWwsIFhjLT5Mb2dMZXZlbCwgQ2FsbGVyLCBMIiVTIiwg
UHRyKTsKKyAgICAgICAgUHRyICs9IChMZW4gKyAxKTsKKyAgICB9Cit9CisKK3ZvaWQKK1hjUmVn
aXN0ZXJMb2dnZXIoCisgICAgSU4gIFBYRU5DT05UUk9MX0NPTlRFWFQgWGMsCisgICAgSU4gIFhF
TkNPTlRST0xfTE9HR0VSICpMb2dnZXIKKyAgICApCit7CisgICAgWGMtPkxvZ2dlciA9IExvZ2dl
cjsKK30KKwordm9pZAorWGNTZXRMb2dMZXZlbCgKKyAgICBJTiAgUFhFTkNPTlRST0xfQ09OVEVY
VCBYYywKKyAgICBJTiAgWEVOQ09OVFJPTF9MT0dfTEVWRUwgTG9nTGV2ZWwKKyAgICApCit7Cisg
ICAgWGMtPkxvZ0xldmVsID0gTG9nTGV2ZWw7Cit9CisKK0RXT1JECitYY09wZW4oCisgICAgSU4g
IFhFTkNPTlRST0xfTE9HR0VSICpMb2dnZXIsCisgICAgT1VUIFBYRU5DT05UUk9MX0NPTlRFWFQg
KlhjCisgICAgKQoreworICAgIEhERVZJTkZPIERldkluZm87CisgICAgU1BfREVWSUNFX0lOVEVS
RkFDRV9EQVRBIEludGVyZmFjZURhdGE7CisgICAgU1BfREVWSUNFX0lOVEVSRkFDRV9ERVRBSUxf
REFUQSAqRGV0YWlsRGF0YSA9IE5VTEw7CisgICAgRFdPUkQgQnVmZmVyU2l6ZTsKKyAgICBQWEVO
Q09OVFJPTF9DT05URVhUIENvbnRleHQ7CisKKyAgICBDb250ZXh0ID0gbWFsbG9jKHNpemVvZigq
Q29udGV4dCkpOworICAgIGlmIChDb250ZXh0ID09IE5VTEwpCisgICAgICAgIHJldHVybiBFUlJP
Ul9OT1RfRU5PVUdIX01FTU9SWTsKKworICAgIENvbnRleHQtPkxvZ2dlciA9IExvZ2dlcjsKKyAg
ICBDb250ZXh0LT5Mb2dMZXZlbCA9IFhMTF9JTkZPOworICAgIENvbnRleHQtPlJlcXVlc3RJZCA9
IDE7CisgICAgSW5pdGlhbGl6ZUxpc3RIZWFkKCZDb250ZXh0LT5SZXF1ZXN0TGlzdCk7CisgICAg
SW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbigmQ29udGV4dC0+UmVxdWVzdExpc3RMb2NrKTsKKwor
ICAgIERldkluZm8gPSBTZXR1cERpR2V0Q2xhc3NEZXZzKCZHVUlEX0lOVEVSRkFDRV9YRU5JRkFD
RSwgMCwgTlVMTCwgRElHQ0ZfUFJFU0VOVCB8IERJR0NGX0RFVklDRUlOVEVSRkFDRSk7CisgICAg
aWYgKERldkluZm8gPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKKyAgICAgICAgX0xvZyhMb2dn
ZXIsIFhMTF9FUlJPUiwgQ29udGV4dC0+TG9nTGV2ZWwsIF9fRlVOQ1RJT05fXywKKyAgICAgICAg
ICAgICBMIlhFTklGQUNFIGRldmljZSBjbGFzcyBkb2Vzbid0IGV4aXN0Iik7CisgICAgICAgIGdv
dG8gZmFpbDsKKyAgICB9CisKKyAgICBJbnRlcmZhY2VEYXRhLmNiU2l6ZSA9IHNpemVvZihJbnRl
cmZhY2VEYXRhKTsKKyAgICBpZiAoIVNldHVwRGlFbnVtRGV2aWNlSW50ZXJmYWNlcyhEZXZJbmZv
LCBOVUxMLCAmR1VJRF9JTlRFUkZBQ0VfWEVOSUZBQ0UsIDAsICZJbnRlcmZhY2VEYXRhKSkgewor
ICAgICAgICBfTG9nKExvZ2dlciwgWExMX0VSUk9SLCBDb250ZXh0LT5Mb2dMZXZlbCwgX19GVU5D
VElPTl9fLAorICAgICAgICAgICAgIEwiRmFpbGVkIHRvIGVudW1lcmF0ZSBYRU5JRkFDRSBkZXZp
Y2VzIik7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBTZXR1cERpR2V0RGV2aWNl
SW50ZXJmYWNlRGV0YWlsKERldkluZm8sICZJbnRlcmZhY2VEYXRhLCBOVUxMLCAwLCAmQnVmZmVy
U2l6ZSwgTlVMTCk7CisgICAgaWYgKEdldExhc3RFcnJvcigpICE9IEVSUk9SX0lOU1VGRklDSUVO
VF9CVUZGRVIpIHsKKyAgICAgICAgX0xvZyhMb2dnZXIsIFhMTF9FUlJPUiwgQ29udGV4dC0+TG9n
TGV2ZWwsIF9fRlVOQ1RJT05fXywKKyAgICAgICAgICAgICBMIkZhaWxlZCB0byBnZXQgYnVmZmVy
IHNpemUgZm9yIGRldmljZSBkZXRhaWxzIik7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisK
KyAgICAvLyBVc2luZyAnQnVmZmVyU2l6ZScgZnJvbSBmYWlsZWQgZnVuY3Rpb24gY2FsbAorI3By
YWdtYSB3YXJuaW5nKHN1cHByZXNzOiA2MTAyKQorICAgIERldGFpbERhdGEgPSAoU1BfREVWSUNF
X0lOVEVSRkFDRV9ERVRBSUxfREFUQSAqKW1hbGxvYyhCdWZmZXJTaXplKTsKKyAgICBpZiAoIURl
dGFpbERhdGEpIHsKKyAgICAgICAgU2V0TGFzdEVycm9yKEVSUk9SX09VVE9GTUVNT1JZKTsKKyAg
ICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIERldGFpbERhdGEtPmNiU2l6ZSA9IHNpemVv
ZihTUF9ERVZJQ0VfSU5URVJGQUNFX0RFVEFJTF9EQVRBKTsKKworICAgIGlmICghU2V0dXBEaUdl
dERldmljZUludGVyZmFjZURldGFpbChEZXZJbmZvLCAmSW50ZXJmYWNlRGF0YSwgRGV0YWlsRGF0
YSwgQnVmZmVyU2l6ZSwgTlVMTCwgTlVMTCkpIHsKKyAgICAgICAgX0xvZyhMb2dnZXIsIFhMTF9F
UlJPUiwgQ29udGV4dC0+TG9nTGV2ZWwsIF9fRlVOQ1RJT05fXywKKyAgICAgICAgICAgICBMIkZh
aWxlZCB0byBnZXQgWEVOSUZBQ0UgZGV2aWNlIHBhdGgiKTsKKyAgICAgICAgZ290byBmYWlsOwor
ICAgIH0KKworICAgIENvbnRleHQtPlhlbklmYWNlID0gQ3JlYXRlRmlsZShEZXRhaWxEYXRhLT5E
ZXZpY2VQYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFX0dFTkVS
SUNfUkVBRCB8IEZJTEVfR0VORVJJQ19XUklURSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1BFTl9FWElTVElORywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRV9BVFRSSUJVVEVfTk9STUFMIHwgRklMRV9G
TEFHX09WRVJMQVBQRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwp
OworCisgICAgaWYgKENvbnRleHQtPlhlbklmYWNlID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7
CisgICAgICAgIF9Mb2coTG9nZ2VyLCBYTExfRVJST1IsIENvbnRleHQtPkxvZ0xldmVsLCBfX0ZV
TkNUSU9OX18sCisgICAgICAgICAgICAgTCJGYWlsZWQgdG8gb3BlbiBYRU5JRkFDRSBkZXZpY2Us
IHBhdGg6ICVzIiwgRGV0YWlsRGF0YS0+RGV2aWNlUGF0aCk7CisgICAgICAgIGdvdG8gZmFpbDsK
KyAgICB9CisKKyAgICBfTG9nKExvZ2dlciwgWExMX0VSUk9SLCBDb250ZXh0LT5Mb2dMZXZlbCwg
X19GVU5DVElPTl9fLAorICAgICAgICAgTCJYZW5JZmFjZSBoYW5kbGU6ICVwIiwgQ29udGV4dC0+
WGVuSWZhY2UpOworCisgICAgZnJlZShEZXRhaWxEYXRhKTsKKyAgICAqWGMgPSBDb250ZXh0Owor
ICAgIHJldHVybiBFUlJPUl9TVUNDRVNTOworCitmYWlsOgorICAgIF9Mb2coTG9nZ2VyLCBYTExf
RVJST1IsIENvbnRleHQtPkxvZ0xldmVsLCBfX0ZVTkNUSU9OX18sCisgICAgICAgICBMIkVycm9y
OiAweCV4IiwgR2V0TGFzdEVycm9yKCkpOworCisgICAgZnJlZShEZXRhaWxEYXRhKTsKKyAgICBy
ZXR1cm4gR2V0TGFzdEVycm9yKCk7Cit9CisKK3ZvaWQKK1hjQ2xvc2UoCisgICAgSU4gIFBYRU5D
T05UUk9MX0NPTlRFWFQgWGMKKyAgICApCit7CisgICAgQ2xvc2VIYW5kbGUoWGMtPlhlbklmYWNl
KTsKKyAgICBEZWxldGVDcml0aWNhbFNlY3Rpb24oJlhjLT5SZXF1ZXN0TGlzdExvY2spOworICAg
IGZyZWUoWGMpOworfQorCitEV09SRAorWGNFdnRjaG5CaW5kVW5ib3VuZCgKKyAgICBJTiAgUFhF
TkNPTlRST0xfQ09OVEVYVCBYYywKKyAgICBJTiAgVVNIT1JUIFJlbW90ZURvbWFpbiwKKyAgICBJ
TiAgSEFORExFIEV2ZW50LAorICAgIElOICBCT09MIE1hc2ssCisgICAgT1VUIFVMT05HICpMb2Nh
bFBvcnQKKyAgICApCit7CisgICAgWEVOSUZBQ0VfRVZUQ0hOX0JJTkRfVU5CT1VORF9JTiBJbjsK
KyAgICBYRU5JRkFDRV9FVlRDSE5fQklORF9VTkJPVU5EX09VVCBPdXQ7CisgICAgRFdPUkQgUmV0
dXJuZWQ7CisgICAgQk9PTCBTdWNjZXNzOworCisgICAgSW4uUmVtb3RlRG9tYWluID0gUmVtb3Rl
RG9tYWluOworICAgIEluLkV2ZW50ID0gRXZlbnQ7CisgICAgSW4uTWFzayA9ICEhTWFzazsKKwor
ICAgIExvZyhYTExfREVCVUcsIEwiUmVtb3RlRG9tYWluOiAlZCwgRXZlbnQ6ICVwLCBNYXNrOiAl
ZCIsIFJlbW90ZURvbWFpbiwgRXZlbnQsIE1hc2spOworICAgIFN1Y2Nlc3MgPSBEZXZpY2VJb0Nv
bnRyb2woWGMtPlhlbklmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9DVExf
WEVOSUZBQ0VfRVZUQ0hOX0JJTkRfVU5CT1VORCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICZJbiwgc2l6ZW9mKEluKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZPdXQs
IHNpemVvZihPdXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlJldHVybmVkLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICBpZiAoIVN1Y2Nlc3Mp
IHsKKyAgICAgICAgTG9nKFhMTF9FUlJPUiwgTCJJT0NUTF9YRU5JRkFDRV9FVlRDSE5fQklORF9V
TkJPVU5EX1BPUlQgZmFpbGVkIik7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICAq
TG9jYWxQb3J0ID0gT3V0LkxvY2FsUG9ydDsKKyAgICBMb2coWExMX0RFQlVHLCBMIkxvY2FsUG9y
dDogJWx1IiwgKkxvY2FsUG9ydCk7CisKKyAgICByZXR1cm4gRVJST1JfU1VDQ0VTUzsKKworZmFp
bDoKKyAgICBMb2coWExMX0VSUk9SLCBMIkVycm9yOiAweCV4IiwgR2V0TGFzdEVycm9yKCkpOwor
ICAgIHJldHVybiBHZXRMYXN0RXJyb3IoKTsKK30KKworRFdPUkQKK1hjRXZ0Y2huQmluZEludGVy
ZG9tYWluKAorICAgIElOICBQWEVOQ09OVFJPTF9DT05URVhUIFhjLAorICAgIElOICBVU0hPUlQg
UmVtb3RlRG9tYWluLAorICAgIElOICBVTE9ORyBSZW1vdGVQb3J0LAorICAgIElOICBIQU5ETEUg
RXZlbnQsCisgICAgSU4gIEJPT0wgTWFzaywKKyAgICBPVVQgVUxPTkcgKkxvY2FsUG9ydAorICAg
ICkKK3sKKyAgICBYRU5JRkFDRV9FVlRDSE5fQklORF9JTlRFUkRPTUFJTl9JTiBJbjsKKyAgICBY
RU5JRkFDRV9FVlRDSE5fQklORF9JTlRFUkRPTUFJTl9PVVQgT3V0OworICAgIERXT1JEIFJldHVy
bmVkOworICAgIEJPT0wgU3VjY2VzczsKKworICAgIEluLlJlbW90ZURvbWFpbiA9IFJlbW90ZURv
bWFpbjsKKyAgICBJbi5SZW1vdGVQb3J0ID0gUmVtb3RlUG9ydDsKKyAgICBJbi5FdmVudCA9IEV2
ZW50OworICAgIEluLk1hc2sgPSAhIU1hc2s7CisKKyAgICBMb2coWExMX0RFQlVHLCBMIlJlbW90
ZURvbWFpbjogJWQsIFJlbW90ZVBvcnQgJWx1LCBFdmVudDogJXAsIE1hc2s6ICVkIiwKKyAgICAg
ICAgUmVtb3RlRG9tYWluLCBSZW1vdGVQb3J0LCBFdmVudCwgTWFzayk7CisgICAgU3VjY2VzcyA9
IERldmljZUlvQ29udHJvbChYYy0+WGVuSWZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBJT0NUTF9YRU5JRkFDRV9FVlRDSE5fQklORF9JTlRFUkRPTUFJTiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZJbiwgc2l6ZW9mKEluKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICZPdXQsIHNpemVvZihPdXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJlJldHVybmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAg
ICBpZiAoIVN1Y2Nlc3MpIHsKKyAgICAgICAgTG9nKFhMTF9FUlJPUiwgTCJJT0NUTF9YRU5JRkFD
RV9FVlRDSE5fQklORF9JTlRFUkRPTUFJTiBmYWlsZWQiKTsKKyAgICAgICAgZ290byBmYWlsOwor
ICAgIH0KKworICAgICpMb2NhbFBvcnQgPSBPdXQuTG9jYWxQb3J0OworICAgIExvZyhYTExfREVC
VUcsIEwiTG9jYWxQb3J0OiAlbHUiLCAqTG9jYWxQb3J0KTsKKworICAgIHJldHVybiBFUlJPUl9T
VUNDRVNTOworCitmYWlsOgorICAgIExvZyhYTExfRVJST1IsIEwiRXJyb3I6IDB4JXgiLCBHZXRM
YXN0RXJyb3IoKSk7CisgICAgcmV0dXJuIEdldExhc3RFcnJvcigpOworfQorCitEV09SRAorWGNF
dnRjaG5DbG9zZSgKKyAgICBJTiAgUFhFTkNPTlRST0xfQ09OVEVYVCBYYywKKyAgICBJTiAgVUxP
TkcgTG9jYWxQb3J0CisgICAgKQoreworICAgIFhFTklGQUNFX0VWVENITl9DTE9TRV9JTiBJbjsK
KyAgICBEV09SRCBSZXR1cm5lZDsKKyAgICBCT09MIFN1Y2Nlc3M7CisKKyAgICBJbi5Mb2NhbFBv
cnQgPSBMb2NhbFBvcnQ7CisKKyAgICBMb2coWExMX0RFQlVHLCBMIkxvY2FsUG9ydDogJWx1Iiwg
TG9jYWxQb3J0KTsKKyAgICBTdWNjZXNzID0gRGV2aWNlSW9Db250cm9sKFhjLT5YZW5JZmFjZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElPQ1RMX1hFTklGQUNFX0VWVENITl9DTE9T
RSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZJbiwgc2l6ZW9mKEluKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmUmV0dXJuZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsK
KworICAgIGlmICghU3VjY2VzcykgeworICAgICAgICBMb2coWExMX0VSUk9SLCBMIklPQ1RMX1hF
TklGQUNFX0VWVENITl9DTE9TRSBmYWlsZWQiKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0K
KworICAgIHJldHVybiBFUlJPUl9TVUNDRVNTOworCitmYWlsOgorICAgIExvZyhYTExfRVJST1Is
IEwiRXJyb3I6IDB4JXgiLCBHZXRMYXN0RXJyb3IoKSk7CisgICAgcmV0dXJuIEdldExhc3RFcnJv
cigpOworfQorCitEV09SRAorWGNFdnRjaG5Ob3RpZnkoCisgICAgSU4gIFBYRU5DT05UUk9MX0NP
TlRFWFQgWGMsCisgICAgSU4gIFVMT05HIExvY2FsUG9ydAorICAgICkKK3sKKyAgICBYRU5JRkFD
RV9FVlRDSE5fTk9USUZZX0lOIEluOworICAgIERXT1JEIFJldHVybmVkOworICAgIEJPT0wgU3Vj
Y2VzczsKKworICAgIEluLkxvY2FsUG9ydCA9IExvY2FsUG9ydDsKKworICAgIExvZyhYTExfREVC
VUcsIEwiTG9jYWxQb3J0OiAlbHUiLCBMb2NhbFBvcnQpOworICAgIFN1Y2Nlc3MgPSBEZXZpY2VJ
b0NvbnRyb2woWGMtPlhlbklmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9D
VExfWEVOSUZBQ0VfRVZUQ0hOX05PVElGWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZJbiwgc2l6ZW9mKEluKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUmV0dXJuZWQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBOVUxMKTsKKworICAgIGlmICghU3VjY2VzcykgeworICAgICAgICBM
b2coWExMX0VSUk9SLCBMIklPQ1RMX1hFTklGQUNFX0VWVENITl9OT1RJRlkgZmFpbGVkIik7Cisg
ICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICByZXR1cm4gRVJST1JfU1VDQ0VTUzsKKwor
ZmFpbDoKKyAgICBMb2coWExMX0VSUk9SLCBMIkVycm9yOiAweCV4IiwgR2V0TGFzdEVycm9yKCkp
OworICAgIHJldHVybiBHZXRMYXN0RXJyb3IoKTsKK30KKworRFdPUkQKK1hjRXZ0Y2huVW5tYXNr
KAorICAgIElOICBQWEVOQ09OVFJPTF9DT05URVhUIFhjLAorICAgIElOICBVTE9ORyBMb2NhbFBv
cnQKKyAgICApCit7CisgICAgWEVOSUZBQ0VfRVZUQ0hOX1VOTUFTS19JTiBJbjsKKyAgICBEV09S
RCBSZXR1cm5lZDsKKyAgICBCT09MIFN1Y2Nlc3M7CisKKyAgICBJbi5Mb2NhbFBvcnQgPSBMb2Nh
bFBvcnQ7CisKKyAgICBMb2coWExMX0RFQlVHLCBMIkxvY2FsUG9ydDogJWx1IiwgTG9jYWxQb3J0
KTsKKyAgICBTdWNjZXNzID0gRGV2aWNlSW9Db250cm9sKFhjLT5YZW5JZmFjZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIElPQ1RMX1hFTklGQUNFX0VWVENITl9VTk1BU0ssCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmSW4sIHNpemVvZihJbiksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBOVUxMLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JlJldHVybmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICBp
ZiAoIVN1Y2Nlc3MpIHsKKyAgICAgICAgTG9nKFhMTF9FUlJPUiwgTCJJT0NUTF9YRU5JRkFDRV9F
VlRDSE5fVU5NQVNLIGZhaWxlZCIpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAg
cmV0dXJuIEVSUk9SX1NVQ0NFU1M7CisKK2ZhaWw6CisgICAgTG9nKFhMTF9FUlJPUiwgTCJFcnJv
cjogMHgleCIsIEdldExhc3RFcnJvcigpKTsKKyAgICByZXR1cm4gR2V0TGFzdEVycm9yKCk7Cit9
CisKK3N0YXRpYyBQWEVOQ09OVFJPTF9HTlRUQUJfUkVRVUVTVAorRmluZFJlcXVlc3QoCisgICAg
SU4gIFBYRU5DT05UUk9MX0NPTlRFWFQgWGMsCisgICAgSU4gIFBWT0lEIEFkZHJlc3MKKyAgICAp
Cit7CisgICAgUExJU1RfRU5UUlkgRW50cnk7CisgICAgUFhFTkNPTlRST0xfR05UVEFCX1JFUVVF
U1QgUmV0dXJuUmVxdWVzdCA9IE5VTEw7CisKKyAgICBFbnRlckNyaXRpY2FsU2VjdGlvbigmWGMt
PlJlcXVlc3RMaXN0TG9jayk7CisgICAgRW50cnkgPSBYYy0+UmVxdWVzdExpc3QuRmxpbms7Cisg
ICAgd2hpbGUgKEVudHJ5ICE9ICZYYy0+UmVxdWVzdExpc3QpIHsKKyAgICAgICAgUFhFTkNPTlRS
T0xfR05UVEFCX1JFUVVFU1QgUmVxdWVzdCA9IENPTlRBSU5JTkdfUkVDT1JEKEVudHJ5LCBYRU5D
T05UUk9MX0dOVFRBQl9SRVFVRVNULCBMaXN0RW50cnkpOworCisgICAgICAgIGlmIChSZXF1ZXN0
LT5BZGRyZXNzID09IEFkZHJlc3MpIHsKKyAgICAgICAgICAgIFJldHVyblJlcXVlc3QgPSBSZXF1
ZXN0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBFbnRyeSA9IEVu
dHJ5LT5GbGluazsKKyAgICB9CisgICAgTGVhdmVDcml0aWNhbFNlY3Rpb24oJlhjLT5SZXF1ZXN0
TGlzdExvY2spOworCisgICAgcmV0dXJuIFJldHVyblJlcXVlc3Q7Cit9CisKK0RXT1JECitYY0du
dHRhYlBlcm1pdEZvcmVpZ25BY2Nlc3MoCisgICAgSU4gIFBYRU5DT05UUk9MX0NPTlRFWFQgWGMs
CisgICAgSU4gIFVTSE9SVCBSZW1vdGVEb21haW4sCisgICAgSU4gIFVMT05HIE51bWJlclBhZ2Vz
LAorICAgIElOICBVTE9ORyBOb3RpZnlPZmZzZXQsCisgICAgSU4gIFVMT05HIE5vdGlmeVBvcnQs
CisgICAgSU4gIFhFTklGQUNFX0dOVFRBQl9QQUdFX0ZMQUdTIEZsYWdzLAorICAgIE9VVCBQVk9J
RCAqQWRkcmVzcywKKyAgICBPVVQgVUxPTkcgKlJlZmVyZW5jZXMKKyAgICApCit7CisgICAgWEVO
SUZBQ0VfR05UVEFCX1BFUk1JVF9GT1JFSUdOX0FDQ0VTU19JTiBJbjsKKyAgICBYRU5JRkFDRV9H
TlRUQUJfUEVSTUlUX0ZPUkVJR05fQUNDRVNTX09VVCAqT3V0OworICAgIFBYRU5DT05UUk9MX0dO
VFRBQl9SRVFVRVNUIFJlcXVlc3Q7CisgICAgRFdPUkQgUmV0dXJuZWQsIFNpemU7CisgICAgQk9P
TCBTdWNjZXNzOworICAgIERXT1JEIFN0YXR1czsKKworICAgIC8vIGxvY2sgdGhlIHdob2xlIG9w
ZXJhdGlvbiB0byBub3QgZ2VuZXJhdGUgZHVwbGljYXRlIElEcworICAgIEVudGVyQ3JpdGljYWxT
ZWN0aW9uKCZYYy0+UmVxdWVzdExpc3RMb2NrKTsKKworICAgIEluLlJlcXVlc3RJZCA9IFhjLT5S
ZXF1ZXN0SWQ7CisgICAgSW4uUmVtb3RlRG9tYWluID0gUmVtb3RlRG9tYWluOworICAgIEluLk51
bWJlclBhZ2VzID0gTnVtYmVyUGFnZXM7CisgICAgSW4uTm90aWZ5T2Zmc2V0ID0gTm90aWZ5T2Zm
c2V0OworICAgIEluLk5vdGlmeVBvcnQgPSBOb3RpZnlQb3J0OworICAgIEluLkZsYWdzID0gRmxh
Z3M7CisKKyAgICBTaXplID0gKFVMT05HKUZJRUxEX09GRlNFVChYRU5JRkFDRV9HTlRUQUJfUEVS
TUlUX0ZPUkVJR05fQUNDRVNTX09VVCwgUmVmZXJlbmNlc1tOdW1iZXJQYWdlc10pOworICAgIE91
dCA9IG1hbGxvYyhTaXplKTsKKyAgICBSZXF1ZXN0ID0gbWFsbG9jKHNpemVvZigqUmVxdWVzdCkp
OworCisgICAgU3RhdHVzID0gRVJST1JfT1VUT0ZNRU1PUlk7CisgICAgaWYgKCFSZXF1ZXN0IHx8
ICFPdXQpCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIFplcm9NZW1vcnkoUmVxdWVzdCwgc2l6
ZW9mKCpSZXF1ZXN0KSk7CisgICAgUmVxdWVzdC0+SWQgPSBJbi5SZXF1ZXN0SWQ7CisKKyAgICBM
b2coWExMX0RFQlVHLCBMIklkICVsdSwgUmVtb3RlRG9tYWluOiAlZCwgTnVtYmVyUGFnZXM6ICVs
dSwgTm90aWZ5T2Zmc2V0OiAweCV4LCBOb3RpZnlQb3J0OiAlbHUsIEZsYWdzOiAweCV4IiwKKyAg
ICAgICAgSW4uUmVxdWVzdElkLCBSZW1vdGVEb21haW4sIE51bWJlclBhZ2VzLCBOb3RpZnlPZmZz
ZXQsIE5vdGlmeVBvcnQsIEZsYWdzKTsKKworICAgIFN1Y2Nlc3MgPSBEZXZpY2VJb0NvbnRyb2wo
WGMtPlhlbklmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9DVExfWEVOSUZB
Q0VfR05UVEFCX1BFUk1JVF9GT1JFSUdOX0FDQ0VTUywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZJbiwgc2l6ZW9mKEluKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91
dCwgU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZSZXR1cm5lZCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZSZXF1ZXN0LT5PdmVybGFwcGVkKTsKKworICAgIFN0
YXR1cyA9IEdldExhc3RFcnJvcigpOworICAgIC8vIHRoaXMgSU9DVEwgaXMgZXhwZWN0ZWQgdG8g
YmUgcGVuZGluZyBvbiBzdWNjZXNzCisgICAgaWYgKCFTdWNjZXNzKSB7CisgICAgICAgIGlmIChT
dGF0dXMgIT0gRVJST1JfSU9fUEVORElORykgeworICAgICAgICAgICAgTG9nKFhMTF9FUlJPUiwg
TCJJT0NUTF9YRU5JRkFDRV9HTlRUQUJfR1JBTlRfUEFHRVMgZmFpbGVkIik7CisgICAgICAgICAg
ICBnb3RvIGZhaWw7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBMb2coWExMX0VS
Uk9SLCBMIklPQ1RMX1hFTklGQUNFX0dOVFRBQl9HUkFOVF9QQUdFUyBub3QgcGVuZGluZyIpOwor
ICAgICAgICBTdGF0dXMgPSBFUlJPUl9VTklERU5USUZJRURfRVJST1I7CisgICAgICAgIGdvdG8g
ZmFpbDsKKyAgICB9CisKKyAgICBSZXF1ZXN0LT5BZGRyZXNzID0gT3V0LT5BZGRyZXNzOworCisg
ICAgSW5zZXJ0VGFpbExpc3QoJlhjLT5SZXF1ZXN0TGlzdCwgJlJlcXVlc3QtPkxpc3RFbnRyeSk7
CisgICAgWGMtPlJlcXVlc3RJZCsrOworICAgIExlYXZlQ3JpdGljYWxTZWN0aW9uKCZYYy0+UmVx
dWVzdExpc3RMb2NrKTsKKworICAgICpBZGRyZXNzID0gT3V0LT5BZGRyZXNzOworICAgIG1lbWNw
eShSZWZlcmVuY2VzLCAmT3V0LT5SZWZlcmVuY2VzLCBOdW1iZXJQYWdlcyAqIHNpemVvZihVTE9O
RykpOworICAgIExvZyhYTExfREVCVUcsIEwiQWRkcmVzczogJXAiLCAqQWRkcmVzcyk7CisgICAg
Zm9yIChVTE9ORyBpID0gMDsgaSA8IE51bWJlclBhZ2VzOyBpKyspCisgICAgICAgIExvZyhYTExf
REVCVUcsIEwiR3JhbnQgcmVmWyVsdV06ICVsdSIsIGksIE91dC0+UmVmZXJlbmNlc1tpXSk7CisK
KyAgICBmcmVlKE91dCk7CisgICAgcmV0dXJuIEVSUk9SX1NVQ0NFU1M7CisKK2ZhaWw6CisgICAg
TGVhdmVDcml0aWNhbFNlY3Rpb24oJlhjLT5SZXF1ZXN0TGlzdExvY2spOworICAgIExvZyhYTExf
RVJST1IsIEwiRXJyb3I6IDB4JXgiLCBTdGF0dXMpOworICAgIGZyZWUoT3V0KTsKKyAgICBmcmVl
KFJlcXVlc3QpOworICAgIHJldHVybiBTdGF0dXM7Cit9CisKK0RXT1JECitYY0dudHRhYlJldm9r
ZUZvcmVpZ25BY2Nlc3MoCisgICAgSU4gIFBYRU5DT05UUk9MX0NPTlRFWFQgWGMsCisgICAgSU4g
IFBWT0lEIEFkZHJlc3MKKyAgICApCit7CisgICAgWEVOSUZBQ0VfR05UVEFCX1JFVk9LRV9GT1JF
SUdOX0FDQ0VTU19JTiBJbjsKKyAgICBQWEVOQ09OVFJPTF9HTlRUQUJfUkVRVUVTVCBSZXF1ZXN0
OworICAgIERXT1JEIFJldHVybmVkOworICAgIEJPT0wgU3VjY2VzczsKKyAgICBEV09SRCBTdGF0
dXM7CisKKyAgICBMb2coWExMX0RFQlVHLCBMIkFkZHJlc3M6ICVwIiwgQWRkcmVzcyk7CisKKyAg
ICBTdGF0dXMgPSBFUlJPUl9OT1RfRk9VTkQ7CisgICAgUmVxdWVzdCA9IEZpbmRSZXF1ZXN0KFhj
LCBBZGRyZXNzKTsKKyAgICBpZiAoIVJlcXVlc3QpIHsKKyAgICAgICAgTG9nKFhMTF9FUlJPUiwg
TCJBZGRyZXNzICVwIG5vdCBncmFudGVkIiwgQWRkcmVzcyk7CisgICAgICAgIGdvdG8gZmFpbDsK
KyAgICB9CisKKyAgICBJbi5SZXF1ZXN0SWQgPSBSZXF1ZXN0LT5JZDsKKworICAgIFN1Y2Nlc3Mg
PSBEZXZpY2VJb0NvbnRyb2woWGMtPlhlbklmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgSU9DVExfWEVOSUZBQ0VfR05UVEFCX1JFVk9LRV9GT1JFSUdOX0FDQ0VTUywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZJbiwgc2l6ZW9mKEluKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE5VTEwsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
UmV0dXJuZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKworICAgIFN0
YXR1cyA9IEdldExhc3RFcnJvcigpOworICAgIGlmICghU3VjY2VzcykgeworICAgICAgICBMb2co
WExMX0VSUk9SLCBMIklPQ1RMX1hFTklGQUNFX0dOVFRBQl9VTkdSQU5UX1BBR0VTIGZhaWxlZCIp
OworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgRW50ZXJDcml0aWNhbFNlY3Rpb24o
JlhjLT5SZXF1ZXN0TGlzdExvY2spOworICAgIFJlbW92ZUVudHJ5TGlzdCgmUmVxdWVzdC0+TGlz
dEVudHJ5KTsKKyAgICBMZWF2ZUNyaXRpY2FsU2VjdGlvbigmWGMtPlJlcXVlc3RMaXN0TG9jayk7
CisgICAgZnJlZShSZXF1ZXN0KTsKKworICAgIHJldHVybiBTdGF0dXM7CisKK2ZhaWw6CisgICAg
TG9nKFhMTF9FUlJPUiwgTCJFcnJvcjogJWQgMHgleCIsIFN0YXR1cywgU3RhdHVzKTsKKyAgICBy
ZXR1cm4gU3RhdHVzOworfQorCitEV09SRAorWGNHbnR0YWJNYXBGb3JlaWduUGFnZXMoCisgICAg
SU4gIFBYRU5DT05UUk9MX0NPTlRFWFQgWGMsCisgICAgSU4gIFVTSE9SVCBSZW1vdGVEb21haW4s
CisgICAgSU4gIFVMT05HIE51bWJlclBhZ2VzLAorICAgIElOICBQVUxPTkcgUmVmZXJlbmNlcywK
KyAgICBJTiAgVUxPTkcgTm90aWZ5T2Zmc2V0LAorICAgIElOICBVTE9ORyBOb3RpZnlQb3J0LAor
ICAgIElOICBYRU5JRkFDRV9HTlRUQUJfUEFHRV9GTEFHUyBGbGFncywKKyAgICBPVVQgUFZPSUQg
KkFkZHJlc3MKKyAgICApCit7CisgICAgWEVOSUZBQ0VfR05UVEFCX01BUF9GT1JFSUdOX1BBR0VT
X0lOICpJbjsKKyAgICBYRU5JRkFDRV9HTlRUQUJfTUFQX0ZPUkVJR05fUEFHRVNfT1VUIE91dDsK
KyAgICBQWEVOQ09OVFJPTF9HTlRUQUJfUkVRVUVTVCBSZXF1ZXN0OworICAgIERXT1JEIFJldHVy
bmVkLCBTaXplOworICAgIEJPT0wgU3VjY2VzczsKKyAgICBEV09SRCBTdGF0dXM7CisKKyAgICAv
LyBsb2NrIHRoZSB3aG9sZSBvcGVyYXRpb24gdG8gbm90IGdlbmVyYXRlIGR1cGxpY2F0ZSBJRHMK
KyAgICBFbnRlckNyaXRpY2FsU2VjdGlvbigmWGMtPlJlcXVlc3RMaXN0TG9jayk7CisKKyAgICBT
dGF0dXMgPSBFUlJPUl9PVVRPRk1FTU9SWTsKKyAgICBTaXplID0gKFVMT05HKUZJRUxEX09GRlNF
VChYRU5JRkFDRV9HTlRUQUJfTUFQX0ZPUkVJR05fUEFHRVNfSU4sIFJlZmVyZW5jZXNbTnVtYmVy
UGFnZXNdKTsKKyAgICBJbiA9IG1hbGxvYyhTaXplKTsKKyAgICBSZXF1ZXN0ID0gbWFsbG9jKHNp
emVvZigqUmVxdWVzdCkpOworICAgIGlmICghSW4gfHwgIVJlcXVlc3QpCisgICAgICAgIGdvdG8g
ZmFpbDsKKworICAgIEluLT5SZXF1ZXN0SWQgPSBYYy0+UmVxdWVzdElkOworICAgIEluLT5SZW1v
dGVEb21haW4gPSBSZW1vdGVEb21haW47CisgICAgSW4tPk51bWJlclBhZ2VzID0gTnVtYmVyUGFn
ZXM7CisgICAgSW4tPk5vdGlmeU9mZnNldCA9IE5vdGlmeU9mZnNldDsKKyAgICBJbi0+Tm90aWZ5
UG9ydCA9IE5vdGlmeVBvcnQ7CisgICAgSW4tPkZsYWdzID0gRmxhZ3M7CisgICAgbWVtY3B5KCZJ
bi0+UmVmZXJlbmNlcywgUmVmZXJlbmNlcywgTnVtYmVyUGFnZXMgKiBzaXplb2YoVUxPTkcpKTsK
KworICAgIFplcm9NZW1vcnkoUmVxdWVzdCwgc2l6ZW9mKCpSZXF1ZXN0KSk7CisgICAgUmVxdWVz
dC0+SWQgPSBJbi0+UmVxdWVzdElkOworCisgICAgTG9nKFhMTF9ERUJVRywgTCJJZCAlbHUsIFJl
bW90ZURvbWFpbjogJWQsIE51bWJlclBhZ2VzOiAlbHUsIE5vdGlmeU9mZnNldDogMHgleCwgTm90
aWZ5UG9ydDogJWx1LCBGbGFnczogMHgleCIsCisgICAgICAgIEluLT5SZXF1ZXN0SWQsIFJlbW90
ZURvbWFpbiwgTnVtYmVyUGFnZXMsIE5vdGlmeU9mZnNldCwgTm90aWZ5UG9ydCwgRmxhZ3MpOwor
CisgICAgZm9yIChVTE9ORyBpID0gMDsgaSA8IE51bWJlclBhZ2VzOyBpKyspCisgICAgICAgIExv
ZyhYTExfREVCVUcsIEwiR3JhbnQgcmVmWyVsdV06ICVsdSIsIGksIFJlZmVyZW5jZXNbaV0pOwor
CisgICAgU3VjY2VzcyA9IERldmljZUlvQ29udHJvbChYYy0+WGVuSWZhY2UsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBJT0NUTF9YRU5JRkFDRV9HTlRUQUJfTUFQX0ZPUkVJR05fUEFH
RVMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiwgU2l6ZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZPdXQsIHNpemVvZihPdXQpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJlJldHVybmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlJl
cXVlc3QtPk92ZXJsYXBwZWQpOworCisgICAgU3RhdHVzID0gR2V0TGFzdEVycm9yKCk7CisgICAg
Ly8gdGhpcyBJT0NUTCBpcyBleHBlY3RlZCB0byBiZSBwZW5kaW5nIG9uIHN1Y2Nlc3MKKyAgICBp
ZiAoIVN1Y2Nlc3MpIHsKKyAgICAgICAgaWYgKFN0YXR1cyAhPSBFUlJPUl9JT19QRU5ESU5HKSB7
CisgICAgICAgICAgICBMb2coWExMX0VSUk9SLCBMIklPQ1RMX1hFTklGQUNFX0dOVFRBQl9NQVBf
Rk9SRUlHTl9QQUdFUyBmYWlsZWQiKTsKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAg
fQorICAgIH0gZWxzZSB7CisgICAgICAgIExvZyhYTExfRVJST1IsIEwiSU9DVExfWEVOSUZBQ0Vf
R05UVEFCX01BUF9GT1JFSUdOX1BBR0VTIG5vdCBwZW5kaW5nIik7CisgICAgICAgIFN0YXR1cyA9
IEVSUk9SX1VOSURFTlRJRklFRF9FUlJPUjsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKwor
ICAgIFJlcXVlc3QtPkFkZHJlc3MgPSBPdXQuQWRkcmVzczsKKyAgICBJbnNlcnRUYWlsTGlzdCgm
WGMtPlJlcXVlc3RMaXN0LCAmUmVxdWVzdC0+TGlzdEVudHJ5KTsKKyAgICBYYy0+UmVxdWVzdElk
Kys7CisgICAgTGVhdmVDcml0aWNhbFNlY3Rpb24oJlhjLT5SZXF1ZXN0TGlzdExvY2spOworCisg
ICAgKkFkZHJlc3MgPSBPdXQuQWRkcmVzczsKKworICAgIExvZyhYTExfREVCVUcsIEwiQWRkcmVz
czogJXAiLCAqQWRkcmVzcyk7CisKKyAgICBmcmVlKEluKTsKKyAgICByZXR1cm4gRVJST1JfU1VD
Q0VTUzsKKworZmFpbDoKKyAgICBMZWF2ZUNyaXRpY2FsU2VjdGlvbigmWGMtPlJlcXVlc3RMaXN0
TG9jayk7CisgICAgTG9nKFhMTF9FUlJPUiwgTCJFcnJvcjogMHgleCIsIFN0YXR1cyk7CisgICAg
ZnJlZShJbik7CisgICAgZnJlZShSZXF1ZXN0KTsKKyAgICByZXR1cm4gU3RhdHVzOworfQorCitE
V09SRAorWGNHbnR0YWJVbm1hcEZvcmVpZ25QYWdlcygKKyAgICBJTiAgUFhFTkNPTlRST0xfQ09O
VEVYVCBYYywKKyAgICBJTiAgUFZPSUQgQWRkcmVzcworICAgICkKK3sKKyAgICBYRU5JRkFDRV9H
TlRUQUJfVU5NQVBfRk9SRUlHTl9QQUdFU19JTiBJbjsKKyAgICBQWEVOQ09OVFJPTF9HTlRUQUJf
UkVRVUVTVCBSZXF1ZXN0OworICAgIERXT1JEIFJldHVybmVkOworICAgIEJPT0wgU3VjY2VzczsK
KyAgICBEV09SRCBTdGF0dXM7CisKKyAgICBMb2coWExMX0RFQlVHLCBMIkFkZHJlc3M6ICVwIiwg
QWRkcmVzcyk7CisKKyAgICBTdGF0dXMgPSBFUlJPUl9OT1RfRk9VTkQ7CisgICAgUmVxdWVzdCA9
IEZpbmRSZXF1ZXN0KFhjLCBBZGRyZXNzKTsKKyAgICBpZiAoIVJlcXVlc3QpIHsKKyAgICAgICAg
TG9nKFhMTF9FUlJPUiwgTCJBZGRyZXNzICVwIG5vdCBtYXBwZWQiLCBBZGRyZXNzKTsKKyAgICAg
ICAgZ290byBmYWlsOworICAgIH0KKworICAgIEluLlJlcXVlc3RJZCA9IFJlcXVlc3QtPklkOwor
CisgICAgU3VjY2VzcyA9IERldmljZUlvQ29udHJvbChYYy0+WGVuSWZhY2UsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBJT0NUTF9YRU5JRkFDRV9HTlRUQUJfVU5NQVBfRk9SRUlHTl9Q
QUdFUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZJbiwgc2l6ZW9mKEluKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmUmV0dXJuZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxM
KTsKKworICAgIFN0YXR1cyA9IEdldExhc3RFcnJvcigpOworICAgIGlmICghU3VjY2Vzcykgewor
ICAgICAgICBMb2coWExMX0VSUk9SLCBMIklPQ1RMX1hFTklGQUNFX0dOVFRBQl9VTk1BUF9GT1JF
SUdOX1BBR0VTIGZhaWxlZCIpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgRW50
ZXJDcml0aWNhbFNlY3Rpb24oJlhjLT5SZXF1ZXN0TGlzdExvY2spOworICAgIFJlbW92ZUVudHJ5
TGlzdCgmUmVxdWVzdC0+TGlzdEVudHJ5KTsKKyAgICBMZWF2ZUNyaXRpY2FsU2VjdGlvbigmWGMt
PlJlcXVlc3RMaXN0TG9jayk7CisgICAgZnJlZShSZXF1ZXN0KTsKKworICAgIHJldHVybiBTdGF0
dXM7CisKK2ZhaWw6CisgICAgTG9nKFhMTF9FUlJPUiwgTCJFcnJvcjogMHgleCIsIFN0YXR1cyk7
CisgICAgcmV0dXJuIFN0YXR1czsKK30KKworRFdPUkQKK1hjU3RvcmVSZWFkKAorICAgIElOICBQ
WEVOQ09OVFJPTF9DT05URVhUIFhjLAorICAgIElOICBQU1RSIFBhdGgsCisgICAgSU4gIERXT1JE
IGNiVmFsdWUsCisgICAgT1VUIENIQVIgKlZhbHVlCisgICAgKQoreworICAgIERXT1JEIFJldHVy
bmVkOworICAgIEJPT0wgU3VjY2VzczsKKworICAgIExvZyhYTExfREVCVUcsIEwiUGF0aDogJyVT
JyIsIFBhdGgpOworICAgIFN1Y2Nlc3MgPSBEZXZpY2VJb0NvbnRyb2woWGMtPlhlbklmYWNlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9DVExfWEVOSUZBQ0VfU1RPUkVfUkVBRCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhdGgsIChEV09SRClzdHJsZW4oUGF0aCkg
KyAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUsIGNiVmFsdWUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmUmV0dXJuZWQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBOVUxMKTsKKworICAgIGlmICghU3VjY2VzcykgeworICAgICAgICBMb2coWExM
X0VSUk9SLCBMIklPQ1RMX1hFTklGQUNFX1NUT1JFX1JFQUQgZmFpbGVkIik7CisgICAgICAgIGdv
dG8gZmFpbDsKKyAgICB9CisKKyAgICBMb2coWExMX0RFQlVHLCBMIlZhbHVlOiAnJVMnIiwgVmFs
dWUpOworCisgICAgcmV0dXJuIEVSUk9SX1NVQ0NFU1M7CisKK2ZhaWw6CisgICAgTG9nKFhMTF9F
UlJPUiwgTCJFcnJvcjogMHgleCIsIEdldExhc3RFcnJvcigpKTsKKyAgICByZXR1cm4gR2V0TGFz
dEVycm9yKCk7Cit9CisKK0RXT1JECitYY1N0b3JlV3JpdGUoCisgICAgSU4gIFBYRU5DT05UUk9M
X0NPTlRFWFQgWGMsCisgICAgSU4gIFBDSEFSIFBhdGgsCisgICAgSU4gIFBDSEFSIFZhbHVlCisg
ICAgKQoreworICAgIFBDSEFSIEJ1ZmZlcjsKKyAgICBEV09SRCBjYkJ1ZmZlcjsKKyAgICBEV09S
RCBSZXR1cm5lZDsKKyAgICBCT09MIFN1Y2Nlc3M7CisKKyAgICBjYkJ1ZmZlciA9IChEV09SRCko
c3RybGVuKFBhdGgpICsgMSArIHN0cmxlbihWYWx1ZSkgKyAxICsgMSk7CisgICAgQnVmZmVyID0g
bWFsbG9jKGNiQnVmZmVyKTsKKyAgICBpZiAoIUJ1ZmZlcikgeworICAgICAgICBTZXRMYXN0RXJy
b3IoRVJST1JfT1VUT0ZNRU1PUlkpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAg
WmVyb01lbW9yeShCdWZmZXIsIGNiQnVmZmVyKTsKKyAgICBtZW1jcHkoQnVmZmVyLCBQYXRoLCBz
dHJsZW4oUGF0aCkpOworICAgIG1lbWNweShCdWZmZXIgKyBzdHJsZW4oUGF0aCkgKyAxLCBWYWx1
ZSwgc3RybGVuKFZhbHVlKSk7CisKKyAgICBMb2coWExMX0RFQlVHLCBMIlBhdGg6ICclUycsIFZh
bHVlOiAnJVMnIiwgUGF0aCwgVmFsdWUpOworICAgIFN1Y2Nlc3MgPSBEZXZpY2VJb0NvbnRyb2wo
WGMtPlhlbklmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9DVExfWEVOSUZB
Q0VfU1RPUkVfV1JJVEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXIsIGNi
QnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICZSZXR1cm5lZCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE5VTEwpOworCisgICAgaWYgKCFTdWNjZXNzKSB7CisgICAgICAgIExvZyhYTExfRVJS
T1IsIEwiSU9DVExfWEVOSUZBQ0VfU1RPUkVfV1JJVEUgZmFpbGVkIik7CisgICAgICAgIGdvdG8g
ZmFpbDsKKyAgICB9CisKKyAgICBmcmVlKEJ1ZmZlcik7CisgICAgcmV0dXJuIEVSUk9SX1NVQ0NF
U1M7CisKK2ZhaWw6CisgICAgTG9nKFhMTF9FUlJPUiwgTCJFcnJvcjogMHgleCIsIEdldExhc3RF
cnJvcigpKTsKKyAgICBmcmVlKEJ1ZmZlcik7CisgICAgcmV0dXJuIEdldExhc3RFcnJvcigpOwor
fQorCitEV09SRAorWGNTdG9yZURpcmVjdG9yeSgKKyAgICBJTiAgUFhFTkNPTlRST0xfQ09OVEVY
VCBYYywKKyAgICBJTiAgUENIQVIgUGF0aCwKKyAgICBJTiAgRFdPUkQgY2JPdXRwdXQsCisgICAg
T1VUIENIQVIgKk91dHB1dAorICAgICkKK3sKKyAgICBEV09SRCBSZXR1cm5lZDsKKyAgICBCT09M
IFN1Y2Nlc3M7CisKKyAgICBMb2coWExMX0RFQlVHLCBMIlBhdGg6ICclUyciLCBQYXRoKTsKKyAg
ICBTdWNjZXNzID0gRGV2aWNlSW9Db250cm9sKFhjLT5YZW5JZmFjZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIElPQ1RMX1hFTklGQUNFX1NUT1JFX0RJUkVDVE9SWSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBhdGgsIChEV09SRClzdHJsZW4oUGF0aCkgKyAxLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0LCBjYk91dHB1dCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZSZXR1cm5lZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE5VTEwpOworCisgICAgaWYgKCFTdWNjZXNzKSB7CisgICAgICAgIExvZyhYTExfRVJST1Is
IEwiSU9DVExfWEVOSUZBQ0VfU1RPUkVfRElSRUNUT1JZIGZhaWxlZCIpOworICAgICAgICBnb3Rv
IGZhaWw7CisgICAgfQorCisgICAgX0xvZ011bHRpU3ooWGMsIF9fRlVOQ1RJT05fXywgWExMX0RF
QlVHLCBPdXRwdXQpOworCisgICAgcmV0dXJuIEVSUk9SX1NVQ0NFU1M7CisKK2ZhaWw6CisgICAg
TG9nKFhMTF9FUlJPUiwgTCJFcnJvcjogMHgleCIsIEdldExhc3RFcnJvcigpKTsKKyAgICByZXR1
cm4gR2V0TGFzdEVycm9yKCk7Cit9CisKK0RXT1JECitYY1N0b3JlUmVtb3ZlKAorICAgIElOICBQ
WEVOQ09OVFJPTF9DT05URVhUIFhjLAorICAgIElOICBQQ0hBUiBQYXRoCisgICAgKQoreworICAg
IERXT1JEIFJldHVybmVkOworICAgIEJPT0wgU3VjY2VzczsKKworICAgIExvZyhYTExfREVCVUcs
IEwiUGF0aDogJyVTJyIsIFBhdGgpOworICAgIFN1Y2Nlc3MgPSBEZXZpY2VJb0NvbnRyb2woWGMt
PlhlbklmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9DVExfWEVOSUZBQ0Vf
U1RPUkVfUkVNT1ZFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGF0aCwgKERXT1JE
KXN0cmxlbihQYXRoKSArIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAw
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlJldHVybmVkLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICBpZiAoIVN1Y2Nlc3MpIHsKKyAgICAgICAg
TG9nKFhMTF9FUlJPUiwgTCJJT0NUTF9YRU5JRkFDRV9TVE9SRV9SRU1PVkUgZmFpbGVkIik7Cisg
ICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICByZXR1cm4gRVJST1JfU1VDQ0VTUzsKKwor
ZmFpbDoKKyAgICBMb2coWExMX0VSUk9SLCBMIkVycm9yOiAweCV4IiwgR2V0TGFzdEVycm9yKCkp
OworICAgIHJldHVybiBHZXRMYXN0RXJyb3IoKTsKK30KKworRFdPUkQKK1hjU3RvcmVTZXRQZXJt
aXNzaW9ucygKKyAgICBJTiAgUFhFTkNPTlRST0xfQ09OVEVYVCBYYywKKyAgICBJTiAgUENIQVIg
UGF0aCwKKyAgICBJTiAgVUxPTkcgQ291bnQsCisgICAgSU4gIFBYRU5JRkFDRV9TVE9SRV9QRVJN
SVNTSU9OIFBlcm1pc3Npb25zCisgICAgKQoreworICAgIERXT1JEIFJldHVybmVkLCBTaXplOwor
ICAgIEJPT0wgU3VjY2VzczsKKyAgICBYRU5JRkFDRV9TVE9SRV9TRVRfUEVSTUlTU0lPTlNfSU4g
KkluID0gTlVMTDsKKworICAgIExvZyhYTExfREVCVUcsIEwiUGF0aDogJyVTJywgQ291bnQ6ICVs
dSIsIFBhdGgsIENvdW50KTsKKyAgICBmb3IgKFVMT05HIGkgPSAwOyBpIDwgQ291bnQ7IGkrKykK
KyAgICAgICAgTG9nKFhMTF9ERUJVRywgTCJEb21haW46ICVkLCBNYXNrOiAweCV4IiwgUGVybWlz
c2lvbnNbaV0uRG9tYWluLCBQZXJtaXNzaW9uc1tpXS5NYXNrKTsKKworICAgIFNpemUgPSAoVUxP
TkcpRklFTERfT0ZGU0VUKFhFTklGQUNFX1NUT1JFX1NFVF9QRVJNSVNTSU9OU19JTiwgUGVybWlz
c2lvbnNbQ291bnRdKTsKKyAgICBJbiA9IG1hbGxvYyhTaXplKTsKKyAgICBpZiAoIUluKSB7Cisg
ICAgICAgIFNldExhc3RFcnJvcihFUlJPUl9PVVRPRk1FTU9SWSk7CisgICAgICAgIGdvdG8gZmFp
bDsKKyAgICB9CisKKyAgICBJbi0+UGF0aCA9IFBhdGg7CisgICAgSW4tPlBhdGhMZW5ndGggPSAo
RFdPUkQpc3RybGVuKEluLT5QYXRoKSArIDE7CisgICAgSW4tPk51bWJlclBlcm1pc3Npb25zID0g
Q291bnQ7CisgICAgbWVtY3B5KCZJbi0+UGVybWlzc2lvbnMsIFBlcm1pc3Npb25zLCBDb3VudCAq
IHNpemVvZihYRU5JRkFDRV9TVE9SRV9QRVJNSVNTSU9OKSk7CisKKyAgICBTdWNjZXNzID0gRGV2
aWNlSW9Db250cm9sKFhjLT5YZW5JZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IElPQ1RMX1hFTklGQUNFX1NUT1JFX1NFVF9QRVJNSVNTSU9OUywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEluLCBTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVM
TCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZSZXR1cm5lZCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAgaWYgKCFTdWNjZXNzKSB7CisgICAg
ICAgIExvZyhYTExfRVJST1IsIEwiSU9DVExfWEVOSUZBQ0VfU1RPUkVfU0VUX1BFUk1JU1NJT05T
IGZhaWxlZCIpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgZnJlZShJbik7Cisg
ICAgcmV0dXJuIEVSUk9SX1NVQ0NFU1M7CisKK2ZhaWw6CisgICAgTG9nKFhMTF9FUlJPUiwgTCJF
cnJvcjogMHgleCIsIEdldExhc3RFcnJvcigpKTsKKyAgICBmcmVlKEluKTsKKyAgICByZXR1cm4g
R2V0TGFzdEVycm9yKCk7Cit9CisKK0RXT1JECitYY1N0b3JlQWRkV2F0Y2goCisgICAgSU4gIFBY
RU5DT05UUk9MX0NPTlRFWFQgWGMsCisgICAgSU4gIFBDSEFSIFBhdGgsCisgICAgSU4gIEhBTkRM
RSBFdmVudCwKKyAgICBPVVQgUFZPSUQgKkhhbmRsZQorICAgICkKK3sKKyAgICBEV09SRCBSZXR1
cm5lZDsKKyAgICBCT09MIFN1Y2Nlc3M7CisgICAgWEVOSUZBQ0VfU1RPUkVfQUREX1dBVENIX0lO
IEluOworICAgIFhFTklGQUNFX1NUT1JFX0FERF9XQVRDSF9PVVQgT3V0OworCisgICAgTG9nKFhM
TF9ERUJVRywgTCJQYXRoOiAnJVMnLCBFdmVudDogJXAiLCBQYXRoLCBFdmVudCk7CisKKyAgICBJ
bi5QYXRoID0gUGF0aDsKKyAgICBJbi5QYXRoTGVuZ3RoID0gKERXT1JEKXN0cmxlbihQYXRoKSAr
IDE7CisgICAgSW4uRXZlbnQgPSBFdmVudDsKKyAgICBTdWNjZXNzID0gRGV2aWNlSW9Db250cm9s
KFhjLT5YZW5JZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElPQ1RMX1hFTklG
QUNFX1NUT1JFX0FERF9XQVRDSCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZJbiwg
c2l6ZW9mKEluKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZPdXQsIHNpemVvZihP
dXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlJldHVybmVkLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICBpZiAoIVN1Y2Nlc3MpIHsKKyAgICAg
ICAgTG9nKFhMTF9FUlJPUiwgTCJJT0NUTF9YRU5JRkFDRV9TVE9SRV9BRERfV0FUQ0ggZmFpbGVk
Iik7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICAqSGFuZGxlID0gT3V0LkNvbnRl
eHQ7CisKKyAgICBMb2coWExMX0RFQlVHLCBMIkhhbmRsZTogJXAiLCAqSGFuZGxlKTsKKworICAg
IHJldHVybiBFUlJPUl9TVUNDRVNTOworCitmYWlsOgorICAgIExvZyhYTExfRVJST1IsIEwiRXJy
b3I6IDB4JXgiLCBHZXRMYXN0RXJyb3IoKSk7CisgICAgcmV0dXJuIEdldExhc3RFcnJvcigpOwor
fQorCitEV09SRAorWGNTdG9yZVJlbW92ZVdhdGNoKAorICAgIElOICBQWEVOQ09OVFJPTF9DT05U
RVhUIFhjLAorICAgIElOICBQVk9JRCBIYW5kbGUKKyAgICApCit7CisgICAgRFdPUkQgUmV0dXJu
ZWQ7CisgICAgQk9PTCBTdWNjZXNzOworICAgIFhFTklGQUNFX1NUT1JFX1JFTU9WRV9XQVRDSF9J
TiBJbjsKKworICAgIExvZyhYTExfREVCVUcsIEwiSGFuZGxlOiAlcCIsIEhhbmRsZSk7CisKKyAg
ICBJbi5Db250ZXh0ID0gSGFuZGxlOworICAgIFN1Y2Nlc3MgPSBEZXZpY2VJb0NvbnRyb2woWGMt
PlhlbklmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9DVExfWEVOSUZBQ0Vf
U1RPUkVfUkVNT1ZFX1dBVENILAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkluLCBz
aXplb2YoSW4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZSZXR1cm5lZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE5VTEwpOworCisgICAgaWYgKCFTdWNjZXNzKSB7CisgICAgICAgIExvZyhYTExf
RVJST1IsIEwiSU9DVExfWEVOSUZBQ0VfU1RPUkVfUkVNT1ZFX1dBVENIIGZhaWxlZCIpOworICAg
ICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgcmV0dXJuIEVSUk9SX1NVQ0NFU1M7CisKK2Zh
aWw6CisgICAgTG9nKFhMTF9FUlJPUiwgTCJFcnJvcjogMHgleCIsIEdldExhc3RFcnJvcigpKTsK
KyAgICByZXR1cm4gR2V0TGFzdEVycm9yKCk7Cit9CmRpZmYgLS1naXQgYS9zcmMveGVuY29udHJv
bC94ZW5jb250cm9sLnJjIGIvc3JjL3hlbmNvbnRyb2wveGVuY29udHJvbC5yYwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzMzZTg0Ci0tLSAvZGV2L251bGwKKysrIGIvc3Jj
L3hlbmNvbnRyb2wveGVuY29udHJvbC5yYwpAQCAtMCwwICsxLDI0IEBACisjaW5jbHVkZSA8d2lu
ZG93cy5oPgorI2luY2x1ZGUgPG50dmVycC5oPgorCisjdW5kZWYgVkVSX0NPTVBBTllOQU1FX1NU
UgorI3VuZGVmIFZFUl9QUk9EVUNUTkFNRV9TVFIKKyN1bmRlZiBWRVJfUFJPRFVDVFZFUlNJT04K
KyN1bmRlZiBWRVJfUFJPRFVDVFZFUlNJT05fU1RSCisKKyNpbmNsdWRlIDx2ZXJzaW9uLmg+CisK
KyNkZWZpbmUgVkVSX0NPTVBBTllOQU1FX1NUUiAgICAgICAgIFZFTkRPUl9OQU1FX1NUUgorI2Rl
ZmluZSBWRVJfTEVHQUxDT1BZUklHSFRfU1RSICAgICAgIkNvcHlyaWdodCAoYykgSW52aXNpYmxl
IFRoaW5ncyBMYWIiCisKKyNkZWZpbmUgVkVSX1BST0RVQ1ROQU1FX1NUUiAgICAgICAgICJYRU5J
RkFDRSIKKyNkZWZpbmUgVkVSX1BST0RVQ1RWRVJTSU9OICAgICAgICAgIE1BSk9SX1ZFUlNJT04s
TUlOT1JfVkVSU0lPTixNSUNST19WRVJTSU9OLEJVSUxEX05VTUJFUgorI2RlZmluZSBWRVJfUFJP
RFVDVFZFUlNJT05fU1RSICAgICAgTUFKT1JfVkVSU0lPTl9TVFIgIi4iIE1JTk9SX1ZFUlNJT05f
U1RSICIuIiBNSUNST19WRVJTSU9OX1NUUiAiLiIgQlVJTERfTlVNQkVSX1NUUgorCisjZGVmaW5l
IFZFUl9JTlRFUk5BTE5BTUVfU1RSICAgICAgICAiWEVOQ09OVFJPTC5ETEwiCisjZGVmaW5lIFZF
Ul9GSUxFREVTQ1JJUFRJT05fU1RSICAgICAiWGVuIGludGVyZmFjZSB1c2VyIGxpYnJhcnkiCisK
KyNkZWZpbmUgVkVSX0ZJTEVUWVBFICAgICAgICAgICAgICAgIFZGVF9ETEwKKyNkZWZpbmUgVkVS
X0ZJTEVTVUJUWVBFICAgICAgICAgICAgIDAKKworI2luY2x1ZGUgPGNvbW1vbi52ZXI+CmRpZmYg
LS1naXQgYS9zcmMveGVuY29udHJvbC94ZW5jb250cm9sX3ByaXZhdGUuaCBiL3NyYy94ZW5jb250
cm9sL3hlbmNvbnRyb2xfcHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjY4NWJjZmEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMveGVuY29udHJvbC94ZW5jb250cm9s
X3ByaXZhdGUuaApAQCAtMCwwICsxLDQ5IEBACisjaWZuZGVmIF9YRU5DT05UUk9MX1BSSVZBVEVf
SF8KKyNkZWZpbmUgX1hFTkNPTlRST0xfUFJJVkFURV9IXworCisjaW5jbHVkZSA8d2luZG93cy5o
PgorI2luY2x1ZGUgInhlbmNvbnRyb2wuaCIKKworI2RlZmluZSBMb2cobGV2ZWwsIGZvcm1hdCwg
Li4uKSBcCisgICAgICAgIF9Mb2coWGMtPkxvZ2dlciwgbGV2ZWwsIFhjLT5Mb2dMZXZlbCwgX19G
VU5DVElPTl9fLCBmb3JtYXQsIF9fVkFfQVJHU19fKQorCisjZGVmaW5lIEluaXRpYWxpemVMaXN0
SGVhZChMaXN0SGVhZCkgKCBcCisgICAgKExpc3RIZWFkKS0+RmxpbmsgPSAoTGlzdEhlYWQpLT5C
bGluayA9IChMaXN0SGVhZCkpCisKKyNkZWZpbmUgSW5zZXJ0VGFpbExpc3QoTGlzdEhlYWQsIEVu
dHJ5KSB7IFwKKyAgICBQTElTVF9FTlRSWSBfRVhfQmxpbms7IFwKKyAgICBQTElTVF9FTlRSWSBf
RVhfTGlzdEhlYWQ7IFwKKyAgICBfRVhfTGlzdEhlYWQgPSAoTGlzdEhlYWQpOyBcCisgICAgX0VY
X0JsaW5rID0gX0VYX0xpc3RIZWFkLT5CbGluazsgXAorICAgIChFbnRyeSktPkZsaW5rID0gX0VY
X0xpc3RIZWFkOyBcCisgICAgKEVudHJ5KS0+QmxpbmsgPSBfRVhfQmxpbms7IFwKKyAgICBfRVhf
QmxpbmstPkZsaW5rID0gKEVudHJ5KTsgXAorICAgIF9FWF9MaXN0SGVhZC0+QmxpbmsgPSAoRW50
cnkpOyBcCisgICAgfQorCisjZGVmaW5lIFJlbW92ZUVudHJ5TGlzdChFbnRyeSkgeyBcCisgICAg
UExJU1RfRU5UUlkgX0VYX0JsaW5rOyBcCisgICAgUExJU1RfRU5UUlkgX0VYX0ZsaW5rOyBcCisg
ICAgX0VYX0ZsaW5rID0gKEVudHJ5KS0+Rmxpbms7IFwKKyAgICBfRVhfQmxpbmsgPSAoRW50cnkp
LT5CbGluazsgXAorICAgIF9FWF9CbGluay0+RmxpbmsgPSBfRVhfRmxpbms7IFwKKyAgICBfRVhf
RmxpbmstPkJsaW5rID0gX0VYX0JsaW5rOyBcCisgICAgfQorCit0eXBlZGVmIHN0cnVjdCBfWEVO
Q09OVFJPTF9DT05URVhUIHsKKyAgICBIQU5ETEUgWGVuSWZhY2U7CisgICAgWEVOQ09OVFJPTF9M
T0dHRVIgKkxvZ2dlcjsKKyAgICBYRU5DT05UUk9MX0xPR19MRVZFTCBMb2dMZXZlbDsKKyAgICBV
TE9ORyBSZXF1ZXN0SWQ7CisgICAgTElTVF9FTlRSWSBSZXF1ZXN0TGlzdDsKKyAgICBDUklUSUNB
TF9TRUNUSU9OIFJlcXVlc3RMaXN0TG9jazsKK30gWEVOQ09OVFJPTF9DT05URVhULCAqUFhFTkNP
TlRST0xfQ09OVEVYVDsKKwordHlwZWRlZiBzdHJ1Y3QgX1hFTkNPTlRST0xfR05UVEFCX1JFUVVF
U1QgeworICAgIExJU1RfRU5UUlkgIExpc3RFbnRyeTsKKyAgICBPVkVSTEFQUEVEICBPdmVybGFw
cGVkOworICAgIFVMT05HICAgICAgIElkOworICAgIFBWT0lEICAgICAgIEFkZHJlc3M7Cit9IFhF
TkNPTlRST0xfR05UVEFCX1JFUVVFU1QsICpQWEVOQ09OVFJPTF9HTlRUQUJfUkVRVUVTVDsKKwor
I2VuZGlmIC8vIF9YRU5DT05UUk9MX1BSSVZBVEVfSF8KZGlmZiAtLWdpdCBhL3ZzMjAxMy94ZW5j
b250cm9sLnByb3BzIGIvdnMyMDEzL3hlbmNvbnRyb2wucHJvcHMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMjJjMTcwNAotLS0gL2Rldi9udWxsCisrKyBiL3ZzMjAxMy94ZW5j
b250cm9sLnByb3BzCkBAIC0wLDAgKzEsODQgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5j
b2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6
Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisKKyAgPElt
cG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgLz4KKworICA8UHJvcGVydHlHcm91cCBM
YWJlbD0iVXNlck1hY3JvcyIgLz4KKworICA8UHJvcGVydHlHcm91cD4KKyAgICA8SW5jbHVkZVBh
dGg+JChTb2x1dGlvbkRpcilcLi5caW5jbHVkZTskKEluY2x1ZGVQYXRoKTwvSW5jbHVkZVBhdGg+
CisgICAgPExpYnJhcnlQYXRoPiQoU29sdXRpb25EaXIpXCQoQ29uZmlndXJhdGlvbilcJChQbGF0
Zm9ybSk7JChMaWJyYXJ5UGF0aCk8L0xpYnJhcnlQYXRoPgorICAgIDxPdXREaXI+JChTb2x1dGlv
bkRpcilcJChDb25maWd1cmF0aW9uKVwkKFBsYXRmb3JtKVw8L091dERpcj4KKyAgICA8SW50RGly
PiQoU29sdXRpb25EaXIpXCQoUHJvamVjdE5hbWUpXCQoQ29uZmlndXJhdGlvbilcJChQbGF0Zm9y
bSlcPC9JbnREaXI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFs
PgorICA8L1Byb3BlcnR5R3JvdXA+CisKKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IkNvbmZpZ3Vy
YXRpb24iPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAg
ICA8UGxhdGZvcm1Ub29sc2V0PnYxMjA8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdy
b3VwPgorCisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbiknPT0n
RGVidWcnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPFJ1bkNvZGVBbmFseXNpcz50cnVl
PC9SdW5Db2RlQW5hbHlzaXM+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVn
TGlicmFyaWVzPgorICA8L1Byb3BlcnR5R3JvdXA+CisKKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0
aW9uPSInJChDb25maWd1cmF0aW9uKSc9PSdSZWxlYXNlJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24i
PgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAg
PFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+
CisgIDwvUHJvcGVydHlHcm91cD4KKworICA8SXRlbURlZmluaXRpb25Hcm91cD4KKyAgICA8TGlu
az4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPnNldHVwYXBpLmxpYjt3czJfMzIubGli
O3NobHdhcGkubGliO3d0c2FwaTMyLmxpYjt1c2VyZW52LmxpYjt2ZXJzaW9uLmxpYjtudGRsbC5s
aWI7a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO2NvbWRsZzMyLmxpYjthZHZhcGkz
Mi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjslKEFkZGl0
aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEdlbmVy
YXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAg
PC9MaW5rPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+
V0lOMzI7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25z
PgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVj
b21waWxlZEhlYWRlcj5Ob3RVc2luZzwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8U0RMQ2hl
Y2s+dHJ1ZTwvU0RMQ2hlY2s+CisgICAgICA8RXhjZXB0aW9uSGFuZGxpbmc+ZmFsc2U8L0V4Y2Vw
dGlvbkhhbmRsaW5nPgorICAgICAgPFRyZWF0V2FybmluZ0FzRXJyb3I+dHJ1ZTwvVHJlYXRXYXJu
aW5nQXNFcnJvcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q3VzdG9tQnVpbGRTdGVwPgorICAg
ICAgPENvbW1hbmQ+eGNvcHkgL3kgJChUYXJnZXRQYXRoKSAkKFNvbHV0aW9uRGlyKVwuLlx4ZW5p
ZmFjZVwkKFBsYXRmb3JtVGFyZ2V0KVwKK3hjb3B5IC95ICQoVGFyZ2V0RGlyKSQoVGFyZ2V0TmFt
ZSkucGRiICQoU29sdXRpb25EaXIpXC4uXHhlbmlmYWNlXCQoUGxhdGZvcm1UYXJnZXQpXAoraWYg
ZXhpc3QgJChUYXJnZXREaXIpJChUYXJnZXROYW1lKS5saWIgeGNvcHkgL3kgJChUYXJnZXREaXIp
JChUYXJnZXROYW1lKS5saWIgJChTb2x1dGlvbkRpcilcLi5ceGVuaWZhY2VcJChQbGF0Zm9ybVRh
cmdldClcPC9Db21tYW5kPgorICAgIDwvQ3VzdG9tQnVpbGRTdGVwPgorICAgIDxDdXN0b21CdWls
ZFN0ZXA+CisgICAgICA8TWVzc2FnZT5Db3B5aW5nIG91dHB1dCBmaWxlczwvTWVzc2FnZT4KKyAg
ICA8L0N1c3RvbUJ1aWxkU3RlcD4KKyAgICA8Q3VzdG9tQnVpbGRTdGVwPgorICAgICAgPE91dHB1
dHM+JChTb2x1dGlvbkRpcilcLi5ceGVuaWZhY2VcJChQbGF0Zm9ybVRhcmdldCkkKFRhcmdldEZp
bGVOYW1lKTskKFNvbHV0aW9uRGlyKVwuLlx4ZW5pZmFjZVwkKFBsYXRmb3JtVGFyZ2V0KSQoVGFy
Z2V0TmFtZSkucGRiOyQoU29sdXRpb25EaXIpXC4uXHhlbmlmYWNlXCQoUGxhdGZvcm1UYXJnZXQp
JChUYXJnZXROYW1lKS5saWI7JShPdXRwdXRzKTwvT3V0cHV0cz4KKyAgICA8L0N1c3RvbUJ1aWxk
U3RlcD4KKyAgICA8Q3VzdG9tQnVpbGRTdGVwPgorICAgICAgPElucHV0cz4kKFRhcmdldFBhdGgp
OyQoVGFyZ2V0RGlyKSQoVGFyZ2V0TmFtZSkucGRiOyQoVGFyZ2V0RGlyKSQoVGFyZ2V0TmFtZSku
bGliPC9JbnB1dHM+CisgICAgPC9DdXN0b21CdWlsZFN0ZXA+CisgIDwvSXRlbURlZmluaXRpb25H
cm91cD4KKworICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRp
b24pJz09J0RlYnVnJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZp
bml0aW9ucz5fREVCVUc7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRl
ZmluaXRpb25zPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgor
ICAgICAgPEVuYWJsZVBSRWZhc3Q+dHJ1ZTwvRW5hYmxlUFJFZmFzdD4KKyAgICAgIDxSdW50aW1l
TGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWdETEw8L1J1bnRpbWVMaWJyYXJ5PgorICAgIDwvQ2xD
b21waWxlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisKKyAgPEl0ZW1EZWZpbml0aW9uR3Jv
dXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKSc9PSdSZWxlYXNlJyI+CisgICAgPENsQ29t
cGlsZT4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5OREVCVUc7JShQcmVwcm9jZXNz
b3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPE9wdGltaXph
dGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5n
PnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50
cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJl
YWRlZERMTDwvUnVudGltZUxpYnJhcnk+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+Cisg
ICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAg
ICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgPC9M
aW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisKKyAgPEl0ZW1Hcm91cCAvPgorPC9Qcm9q
ZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3ZzMjAxMy94ZW5j
b250cm9sL3hlbmNvbnRyb2wudmN4cHJvaiBiL3ZzMjAxMy94ZW5jb250cm9sL3hlbmNvbnRyb2wu
dmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDkxYTM4Ci0tLSAv
ZGV2L251bGwKKysrIGIvdnMyMDEzL3hlbmNvbnRyb2wveGVuY29udHJvbC52Y3hwcm9qCkBAIC0w
LDAgKzEsNjIgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8
UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iMTIuMCIgeG1sbnM9
Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+Cisg
IDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CisgICAgPFByb2plY3RD
b25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9u
PkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4K
KyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJ
bmNsdWRlPSJEZWJ1Z3x4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3Vy
YXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25m
aWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdp
bjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAg
ICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+
CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4KKyAgICAg
IDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+
eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICA8L0l0ZW1Hcm91
cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57
RDM4NkQ4RTktRDAxNS00QUQyLUE1QzItNEY4NDVBODAzRkEyfTwvUHJvamVjdEd1aWQ+CisgICAg
PEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPnhlbmNvbnRy
b2w8L1Jvb3ROYW1lc3BhY2U+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0
PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKyAgPFBy
b3BlcnR5R3JvdXAgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlw
ZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5V
bmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9q
ZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRH
cm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2Vy
Um9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249
ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnBy
b3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgICA8SW1wb3J0IFByb2pl
Y3Q9Ii4uXHhlbmNvbnRyb2wucHJvcHMiIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJdGVtRGVm
aW5pdGlvbkdyb3VwPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5p
dGlvbnM+X1dJTkRPV1M7X1VTUkRMTDtYRU5DT05UUk9MX0VYUE9SVFM7JShQcmVwcm9jZXNzb3JE
ZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgIDwvQ2xDb21waWxlPgor
ICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5XaW5kb3dzPC9TdWJTeXN0ZW0+CisgICAgPC9M
aW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNceGVuY29udHJvbFx4ZW5jb250cm9sLmMiIC8+CisgIDwv
SXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5c
aW5jbHVkZVx4ZW5jb250cm9sLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxz
cmNceGVuY29udHJvbFx4ZW5jb250cm9sX3ByaXZhdGUuaCIgLz4KKyAgPC9JdGVtR3JvdXA+Cisg
IDxJdGVtR3JvdXA+CisgICAgPFJlc291cmNlQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNceGVu
Y29udHJvbFx4ZW5jb250cm9sLnJjIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEltcG9ydCBQcm9q
ZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KKyAgPEltcG9y
dEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFBy
b2plY3RFeHRlbnNpb25zPgorICAgIDxWaXN1YWxTdHVkaW8+CisgICAgICA8VXNlclByb3BlcnRp
ZXMgLz4KKyAgICA8L1Zpc3VhbFN0dWRpbz4KKyAgPC9Qcm9qZWN0RXh0ZW5zaW9ucz4KKzwvUHJv
amVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS92czIwMTMveGVu
Y29udHJvbC94ZW5jb250cm9sLnZjeHByb2ouZmlsdGVycyBiL3ZzMjAxMy94ZW5jb250cm9sL3hl
bmNvbnRyb2wudmN4cHJvai5maWx0ZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmM2ZGUwOTkKLS0tIC9kZXYvbnVsbAorKysgYi92czIwMTMveGVuY29udHJvbC94ZW5jb250
cm9sLnZjeHByb2ouZmlsdGVycwpAQCAtMCwwICsxLDEzIEBACivvu788P3htbCB2ZXJzaW9uPSIx
LjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5z
PSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgor
ICA8SXRlbUdyb3VwPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVx4ZW5j
b250cm9sLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNceGVuY29udHJv
bFx4ZW5jb250cm9sX3ByaXZhdGUuaCIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+
CisgICAgPFJlc291cmNlQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNceGVuY29udHJvbFx4ZW5j
b250cm9sLnJjIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1x4ZW5jb250cm9sXHhlbmNvbnRyb2wuYyIgLz4KKyAgPC9J
dGVtR3JvdXA+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0t
Z2l0IGEvdnMyMDEzL3hlbmlmYWNlLnNsbiBiL3ZzMjAxMy94ZW5pZmFjZS5zbG4KaW5kZXggM2M3
NGM3OS4uNzZkMDZiNCAxMDA2NDQKLS0tIGEvdnMyMDEzL3hlbmlmYWNlLnNsbgorKysgYi92czIw
MTMveGVuaWZhY2Uuc2xuCkBAIC0xNyw2ICsxNyw4IEBAIFByb2plY3QoIns4QkM5Q0VCOC04QjRB
LTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAicGFja2FnZSIsICJwYWNrYWdlXHBhY2thZ2Uu
CiAJCXsyRTYxRDJDQy04NjVFLTQ0MkMtOEM4My1COERBRkQ3QkJEM0J9ID0gezJFNjFEMkNDLTg2
NUUtNDQyQy04QzgzLUI4REFGRDdCQkQzQn0KIAlFbmRQcm9qZWN0U2VjdGlvbgogRW5kUHJvamVj
dAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJ4
ZW5jb250cm9sIiwgInhlbmNvbnRyb2xceGVuY29udHJvbC52Y3hwcm9qIiwgIntEMzg2RDhFOS1E
MDE1LTRBRDItQTVDMi00Rjg0NUE4MDNGQTJ9IgorRW5kUHJvamVjdAogR2xvYmFsCiAJR2xvYmFs
U2VjdGlvbihTb2x1dGlvbkNvbmZpZ3VyYXRpb25QbGF0Zm9ybXMpID0gcHJlU29sdXRpb24KIAkJ
V2luZG93cyA3IERlYnVnfFdpbjMyID0gV2luZG93cyA3IERlYnVnfFdpbjMyCkBAIC0xNjUsNiAr
MTY3LDQyIEBAIEdsb2JhbAogCQl7OUIwNzFBMzUtODk3Qy00NzdBLUFFQjctOTVGNzc2MThBMjFE
fS5XaW5kb3dzIFZpc3RhIFJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFdpbmRvd3MgVmlzdGEgUmVs
ZWFzZXx4NjQKIAkJezlCMDcxQTM1LTg5N0MtNDc3QS1BRUI3LTk1Rjc3NjE4QTIxRH0uV2luZG93
cyBWaXN0YSBSZWxlYXNlfHg2NC5CdWlsZC4wID0gV2luZG93cyBWaXN0YSBSZWxlYXNlfHg2NAog
CQl7OUIwNzFBMzUtODk3Qy00NzdBLUFFQjctOTVGNzc2MThBMjFEfS5XaW5kb3dzIFZpc3RhIFJl
bGVhc2V8eDY0LkRlcGxveS4wID0gV2luZG93cyBWaXN0YSBSZWxlYXNlfHg2NAorCQl7RDM4NkQ4
RTktRDAxNS00QUQyLUE1QzItNEY4NDVBODAzRkEyfS5XaW5kb3dzIDcgRGVidWd8V2luMzIuQWN0
aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJe0QzODZEOEU5LUQwMTUtNEFEMi1BNUMyLTRGODQ1QTgw
M0ZBMn0uV2luZG93cyA3IERlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7RDM4
NkQ4RTktRDAxNS00QUQyLUE1QzItNEY4NDVBODAzRkEyfS5XaW5kb3dzIDcgRGVidWd8V2luMzIu
RGVwbG95LjAgPSBEZWJ1Z3xXaW4zMgorCQl7RDM4NkQ4RTktRDAxNS00QUQyLUE1QzItNEY4NDVB
ODAzRkEyfS5XaW5kb3dzIDcgRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7RDM4
NkQ4RTktRDAxNS00QUQyLUE1QzItNEY4NDVBODAzRkEyfS5XaW5kb3dzIDcgRGVidWd8eDY0LkJ1
aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJe0QzODZEOEU5LUQwMTUtNEFEMi1BNUMyLTRGODQ1QTgwM0ZB
Mn0uV2luZG93cyA3IERlYnVnfHg2NC5EZXBsb3kuMCA9IERlYnVnfHg2NAorCQl7RDM4NkQ4RTkt
RDAxNS00QUQyLUE1QzItNEY4NDVBODAzRkEyfS5XaW5kb3dzIDcgUmVsZWFzZXxXaW4zMi5BY3Rp
dmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXtEMzg2RDhFOS1EMDE1LTRBRDItQTVDMi00Rjg0NUE4
MDNGQTJ9LldpbmRvd3MgNyBSZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJ
CXtEMzg2RDhFOS1EMDE1LTRBRDItQTVDMi00Rjg0NUE4MDNGQTJ9LldpbmRvd3MgNyBSZWxlYXNl
fFdpbjMyLkRlcGxveS4wID0gUmVsZWFzZXxXaW4zMgorCQl7RDM4NkQ4RTktRDAxNS00QUQyLUE1
QzItNEY4NDVBODAzRkEyfS5XaW5kb3dzIDcgUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFz
ZXx4NjQKKwkJe0QzODZEOEU5LUQwMTUtNEFEMi1BNUMyLTRGODQ1QTgwM0ZBMn0uV2luZG93cyA3
IFJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7RDM4NkQ4RTktRDAxNS00QUQy
LUE1QzItNEY4NDVBODAzRkEyfS5XaW5kb3dzIDcgUmVsZWFzZXx4NjQuRGVwbG95LjAgPSBSZWxl
YXNlfHg2NAorCQl7RDM4NkQ4RTktRDAxNS00QUQyLUE1QzItNEY4NDVBODAzRkEyfS5XaW5kb3dz
IERldmVsb3BlciBQcmV2aWV3IERlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJ
CXtEMzg2RDhFOS1EMDE1LTRBRDItQTVDMi00Rjg0NUE4MDNGQTJ9LldpbmRvd3MgRGV2ZWxvcGVy
IFByZXZpZXcgRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXtEMzg2RDhFOS1E
MDE1LTRBRDItQTVDMi00Rjg0NUE4MDNGQTJ9LldpbmRvd3MgRGV2ZWxvcGVyIFByZXZpZXcgRGVi
dWd8V2luMzIuRGVwbG95LjAgPSBEZWJ1Z3xXaW4zMgorCQl7RDM4NkQ4RTktRDAxNS00QUQyLUE1
QzItNEY4NDVBODAzRkEyfS5XaW5kb3dzIERldmVsb3BlciBQcmV2aWV3IERlYnVnfHg2NC5BY3Rp
dmVDZmcgPSBEZWJ1Z3x4NjQKKwkJe0QzODZEOEU5LUQwMTUtNEFEMi1BNUMyLTRGODQ1QTgwM0ZB
Mn0uV2luZG93cyBEZXZlbG9wZXIgUHJldmlldyBEZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2
NAorCQl7RDM4NkQ4RTktRDAxNS00QUQyLUE1QzItNEY4NDVBODAzRkEyfS5XaW5kb3dzIERldmVs
b3BlciBQcmV2aWV3IERlYnVnfHg2NC5EZXBsb3kuMCA9IERlYnVnfHg2NAorCQl7RDM4NkQ4RTkt
RDAxNS00QUQyLUE1QzItNEY4NDVBODAzRkEyfS5XaW5kb3dzIERldmVsb3BlciBQcmV2aWV3IFJl
bGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7RDM4NkQ4RTktRDAxNS00
QUQyLUE1QzItNEY4NDVBODAzRkEyfS5XaW5kb3dzIERldmVsb3BlciBQcmV2aWV3IFJlbGVhc2V8
V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJe0QzODZEOEU5LUQwMTUtNEFEMi1BNUMy
LTRGODQ1QTgwM0ZBMn0uV2luZG93cyBEZXZlbG9wZXIgUHJldmlldyBSZWxlYXNlfFdpbjMyLkRl
cGxveS4wID0gUmVsZWFzZXxXaW4zMgorCQl7RDM4NkQ4RTktRDAxNS00QUQyLUE1QzItNEY4NDVB
ODAzRkEyfS5XaW5kb3dzIERldmVsb3BlciBQcmV2aWV3IFJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9
IFJlbGVhc2V8eDY0CisJCXtEMzg2RDhFOS1EMDE1LTRBRDItQTVDMi00Rjg0NUE4MDNGQTJ9Lldp
bmRvd3MgRGV2ZWxvcGVyIFByZXZpZXcgUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0
CisJCXtEMzg2RDhFOS1EMDE1LTRBRDItQTVDMi00Rjg0NUE4MDNGQTJ9LldpbmRvd3MgRGV2ZWxv
cGVyIFByZXZpZXcgUmVsZWFzZXx4NjQuRGVwbG95LjAgPSBSZWxlYXNlfHg2NAorCQl7RDM4NkQ4
RTktRDAxNS00QUQyLUE1QzItNEY4NDVBODAzRkEyfS5XaW5kb3dzIFZpc3RhIERlYnVnfFdpbjMy
LkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXtEMzg2RDhFOS1EMDE1LTRBRDItQTVDMi00Rjg0
NUE4MDNGQTJ9LldpbmRvd3MgVmlzdGEgRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMy
CisJCXtEMzg2RDhFOS1EMDE1LTRBRDItQTVDMi00Rjg0NUE4MDNGQTJ9LldpbmRvd3MgVmlzdGEg
RGVidWd8V2luMzIuRGVwbG95LjAgPSBEZWJ1Z3xXaW4zMgorCQl7RDM4NkQ4RTktRDAxNS00QUQy
LUE1QzItNEY4NDVBODAzRkEyfS5XaW5kb3dzIFZpc3RhIERlYnVnfHg2NC5BY3RpdmVDZmcgPSBE
ZWJ1Z3x4NjQKKwkJe0QzODZEOEU5LUQwMTUtNEFEMi1BNUMyLTRGODQ1QTgwM0ZBMn0uV2luZG93
cyBWaXN0YSBEZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7RDM4NkQ4RTktRDAxNS00
QUQyLUE1QzItNEY4NDVBODAzRkEyfS5XaW5kb3dzIFZpc3RhIERlYnVnfHg2NC5EZXBsb3kuMCA9
IERlYnVnfHg2NAorCQl7RDM4NkQ4RTktRDAxNS00QUQyLUE1QzItNEY4NDVBODAzRkEyfS5XaW5k
b3dzIFZpc3RhIFJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7RDM4
NkQ4RTktRDAxNS00QUQyLUE1QzItNEY4NDVBODAzRkEyfS5XaW5kb3dzIFZpc3RhIFJlbGVhc2V8
V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJe0QzODZEOEU5LUQwMTUtNEFEMi1BNUMy
LTRGODQ1QTgwM0ZBMn0uV2luZG93cyBWaXN0YSBSZWxlYXNlfFdpbjMyLkRlcGxveS4wID0gUmVs
ZWFzZXxXaW4zMgorCQl7RDM4NkQ4RTktRDAxNS00QUQyLUE1QzItNEY4NDVBODAzRkEyfS5XaW5k
b3dzIFZpc3RhIFJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXtEMzg2RDhF
OS1EMDE1LTRBRDItQTVDMi00Rjg0NUE4MDNGQTJ9LldpbmRvd3MgVmlzdGEgUmVsZWFzZXx4NjQu
QnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXtEMzg2RDhFOS1EMDE1LTRBRDItQTVDMi00Rjg0NUE4
MDNGQTJ9LldpbmRvd3MgVmlzdGEgUmVsZWFzZXx4NjQuRGVwbG95LjAgPSBSZWxlYXNlfHg2NAog
CUVuZEdsb2JhbFNlY3Rpb24KIAlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uUHJvcGVydGllcykgPSBw
cmVTb2x1dGlvbgogCQlIaWRlU29sdXRpb25Ob2RlID0gRkFMU0UKLS0gCjEuOC4xLm1zeXNnaXQu
MQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCndpbi1w
di1kZXZlbCBtYWlsaW5nIGxpc3QKd2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0
dHA6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8vd2luLXB2
LWRldmVs

From win-pv-devel-bounces@lists.xenproject.org Thu Nov 05 15:40:49 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Nov 2015 15:40:49 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZuMed-0000aQ-Mf; Thu, 05 Nov 2015 15:40:47 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <lars.kurth.xen@gmail.com>)
	id 1ZuMec-0000ZT-2k; Thu, 05 Nov 2015 15:40:46 +0000
Received: from [85.158.139.211] by server-17.bemta-5.messagelabs.com id
	E4/56-18107-4F37B365; Thu, 05 Nov 2015 15:21:24 +0000
X-Env-Sender: lars.kurth.xen@gmail.com
X-Msg-Ref: server-16.tower-206.messagelabs.com!1446736883!1316797!1
X-Originating-IP: [209.85.212.172]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 19358 invoked from network); 5 Nov 2015 15:21:23 -0000
Received: from mail-wi0-f172.google.com (HELO mail-wi0-f172.google.com)
	(209.85.212.172)
	by server-16.tower-206.messagelabs.com with AES128-GCM-SHA256 encrypted
	SMTP; 5 Nov 2015 15:21:23 -0000
Received: by wicfv8 with SMTP id fv8so11797017wic.0;
	Thu, 05 Nov 2015 07:21:23 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:content-type:content-transfer-encoding:subject:message-id:date
	:to:mime-version;
	bh=IKDwkazx7YwPHABEtsv7gk6KQTj2rY0LB5VxZAOgmDM=;
	b=rBDvFTEDc/x8apsElwOWazgxFTYlFEiuTpFx/iFzHwoQCEN0COQGs8RtMzMwuFfl4v
	RHmWMHZFdRlPfWme74lU1taR8srdrYH8ngwK0LjFvbhhv8WQkiO8bY4rF1WdJfPSZ9sW
	vwcuuCyPh2OFy0EG15f9QoIt/k/3UL+REOULXTh8rM2rhTf86d6LHpEz4I6qyBvrnQTv
	VhFJGXdR2+ufA1kONN6KtI9kfiHepei0ADzqN1i2MdPwLWyfcj5qPSsQI2afUAMYKcRo
	UfkaAWMHV9cSlE3fcKsLSmqhbiORmoXGBVwPuBM6unZPubonkynTkTTctR2VN4KZtHU5
	jppA==
X-Received: by 10.194.80.42 with SMTP id o10mr8825261wjx.31.1446736882794;
	Thu, 05 Nov 2015 07:21:22 -0800 (PST)
Received: from [192.168.0.12] (97e3cc8b.skybroadband.com. [151.227.204.139])
	by smtp.gmail.com with ESMTPSA id
	cr5sm7486279wjb.16.2015.11.05.07.21.19
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Thu, 05 Nov 2015 07:21:19 -0800 (PST)
From: Lars Kurth <lars.kurth.xen@gmail.com>
Message-Id: <B7204A9D-30E9-429A-B727-8199654981C8@gmail.com>
Date: Thu, 5 Nov 2015 15:21:18 +0000
To: Xen-devel <xen-devel@lists.xenproject.org>,
	mirageos-devel <mirageos-devel@lists.xenproject.org>,
	xen-api@lists.xenproject.org, Win-pv-devel@lists.xenproject.org
Mime-Version: 1.0 (Mac OS X Mail 8.2 \(2104\))
X-Mailer: Apple Mail (2.2104)
Subject: [win-pv-devel] Hackathon 2016 Location Preferences
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

Hi all,

I wanted to do quick straw-poll regarding Hackathon Locations for next year. Before I do this though, I wanted to let you know that the 2016 Developer Summit will most likely be in Berlin in October (I am in the process of finalising space, budget and contract details which will need to be approved by the Advisory Board).

We do have two options for a Hackathon: China (either Shanghai, Hangzhou or Beijing - details TBC) and Cambridge, UK. We are still in the early planning phase and the budget for the Hackathon has not yet been approved. 

Do let me know of your preference, and I will see whether I can work with the vendor(s) who are willing to host the 2016 Hackathon and choose a location, which suits a majority of developers.

Best Regards
Lars


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

From win-pv-devel-bounces@lists.xenproject.org Thu Nov 05 15:40:49 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Nov 2015 15:40:49 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZuMed-0000aQ-Mf; Thu, 05 Nov 2015 15:40:47 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <lars.kurth.xen@gmail.com>)
	id 1ZuMec-0000ZT-2k; Thu, 05 Nov 2015 15:40:46 +0000
Received: from [85.158.139.211] by server-17.bemta-5.messagelabs.com id
	E4/56-18107-4F37B365; Thu, 05 Nov 2015 15:21:24 +0000
X-Env-Sender: lars.kurth.xen@gmail.com
X-Msg-Ref: server-16.tower-206.messagelabs.com!1446736883!1316797!1
X-Originating-IP: [209.85.212.172]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 19358 invoked from network); 5 Nov 2015 15:21:23 -0000
Received: from mail-wi0-f172.google.com (HELO mail-wi0-f172.google.com)
	(209.85.212.172)
	by server-16.tower-206.messagelabs.com with AES128-GCM-SHA256 encrypted
	SMTP; 5 Nov 2015 15:21:23 -0000
Received: by wicfv8 with SMTP id fv8so11797017wic.0;
	Thu, 05 Nov 2015 07:21:23 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:content-type:content-transfer-encoding:subject:message-id:date
	:to:mime-version;
	bh=IKDwkazx7YwPHABEtsv7gk6KQTj2rY0LB5VxZAOgmDM=;
	b=rBDvFTEDc/x8apsElwOWazgxFTYlFEiuTpFx/iFzHwoQCEN0COQGs8RtMzMwuFfl4v
	RHmWMHZFdRlPfWme74lU1taR8srdrYH8ngwK0LjFvbhhv8WQkiO8bY4rF1WdJfPSZ9sW
	vwcuuCyPh2OFy0EG15f9QoIt/k/3UL+REOULXTh8rM2rhTf86d6LHpEz4I6qyBvrnQTv
	VhFJGXdR2+ufA1kONN6KtI9kfiHepei0ADzqN1i2MdPwLWyfcj5qPSsQI2afUAMYKcRo
	UfkaAWMHV9cSlE3fcKsLSmqhbiORmoXGBVwPuBM6unZPubonkynTkTTctR2VN4KZtHU5
	jppA==
X-Received: by 10.194.80.42 with SMTP id o10mr8825261wjx.31.1446736882794;
	Thu, 05 Nov 2015 07:21:22 -0800 (PST)
Received: from [192.168.0.12] (97e3cc8b.skybroadband.com. [151.227.204.139])
	by smtp.gmail.com with ESMTPSA id
	cr5sm7486279wjb.16.2015.11.05.07.21.19
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Thu, 05 Nov 2015 07:21:19 -0800 (PST)
From: Lars Kurth <lars.kurth.xen@gmail.com>
Message-Id: <B7204A9D-30E9-429A-B727-8199654981C8@gmail.com>
Date: Thu, 5 Nov 2015 15:21:18 +0000
To: Xen-devel <xen-devel@lists.xenproject.org>,
	mirageos-devel <mirageos-devel@lists.xenproject.org>,
	xen-api@lists.xenproject.org, Win-pv-devel@lists.xenproject.org
Mime-Version: 1.0 (Mac OS X Mail 8.2 \(2104\))
X-Mailer: Apple Mail (2.2104)
Subject: [win-pv-devel] Hackathon 2016 Location Preferences
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

Hi all,

I wanted to do quick straw-poll regarding Hackathon Locations for next year. Before I do this though, I wanted to let you know that the 2016 Developer Summit will most likely be in Berlin in October (I am in the process of finalising space, budget and contract details which will need to be approved by the Advisory Board).

We do have two options for a Hackathon: China (either Shanghai, Hangzhou or Beijing - details TBC) and Cambridge, UK. We are still in the early planning phase and the budget for the Hackathon has not yet been approved. 

Do let me know of your preference, and I will see whether I can work with the vendor(s) who are willing to host the 2016 Hackathon and choose a location, which suits a majority of developers.

Best Regards
Lars


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

From win-pv-devel-bounces@lists.xenproject.org Thu Nov 05 16:05:35 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Nov 2015 16:05:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZuN2c-0003nL-5a; Thu, 05 Nov 2015 16:05:34 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1ZuN2b-0003n7-2B
	for win-pv-devel@lists.xenproject.org; Thu, 05 Nov 2015 16:05:33 +0000
Received: from [193.109.254.147] by server-4.bemta-14.messagelabs.com id
	53/54-10715-A266B365; Thu, 05 Nov 2015 14:22:34 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-10.tower-27.messagelabs.com!1446733352!759316!1
X-Originating-IP: [66.111.4.27]
X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: 
	VHJ1c3RlZCBJUDogNjYuMTExLjQuMjcgPT4gODQ2Mw==\n
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 15990 invoked from network); 5 Nov 2015 14:22:33 -0000
Received: from out3-smtp.messagingengine.com (HELO
	out3-smtp.messagingengine.com) (66.111.4.27)
	by server-10.tower-27.messagelabs.com with DHE-RSA-AES256-GCM-SHA384
	encrypted SMTP; 5 Nov 2015 14:22:33 -0000
Received: from compute2.internal (compute2.nyi.internal [10.202.2.42])
	by mailout.nyi.internal (Postfix) with ESMTP id C85FC21C43
	for <win-pv-devel@lists.xenproject.org>;
	Thu,  5 Nov 2015 09:22:31 -0500 (EST)
Received: from frontend2 ([10.202.2.161])
	by compute2.internal (MEProxy); Thu, 05 Nov 2015 09:22:31 -0500
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:in-reply-to:message-id:mime-version:references
	:subject:to:x-sasl-enc:x-sasl-enc; s=mesmtp; bh=QJrALH66VIO/Max3
	MD18MwNyiO0=; b=bA1Ny0NY0lx4nkVyUY6Sou0vKwanG6kG9mX0vqguAOy64axo
	4jja2HRWpBZ8Z+O8luBDTb62nlpyL6l9iDihFH79d3OtpKmhqNLZBwT+jhd6qOWx
	8obgqqdst/f0IsMRVuGE8NfAsI9g1JddcRcIgDi3CqMMbAotN6+SWh3D5PU=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:in-reply-to:message-id:mime-version:references
	:subject:to:x-sasl-enc:x-sasl-enc; s=smtpout; bh=QJrALH66VIO/Max
	3MD18MwNyiO0=; b=RCpe1koHjxvqJp874jBTw50GjopmiZ3smZ4wYLAsqhceuv2
	qABmqktblFLPgmPjV8cL+jlcDCZ0dDTt6W7aND2QMi3hIA2zLUkIafYjkOmjR6Ak
	hy5eEyKqH0A/1cmIun3Ka/Y02YBNwEX9iwhvo+oAHzlOCeWMF2KoAE2Iokv8=
X-Sasl-enc: NlJvHne2YjZ+lK3KI5Dl7I5nkjlEs66T7leteeSisy9t 1446733351
Received: from [192.168.0.3] (89-72-164-138.dynamic.chello.pl [89.72.164.138])
	by mail.messagingengine.com (Postfix) with ESMTPA id 1D92368013E;
	Thu,  5 Nov 2015 09:22:30 -0500 (EST)
To: Paul Durrant <Paul.Durrant@citrix.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <56398BC0.1040909@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F660BB6@AMSPEX01CL01.citrite.net>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
Message-ID: <563B6633.9030901@invisiblethingslab.com>
Date: Thu, 5 Nov 2015 15:22:43 +0100
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.3.0
MIME-Version: 1.0
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F660BB6@AMSPEX01CL01.citrite.net>
Content-Length:1504
Subject: Re: [win-pv-devel] [PATCH 2/2] Add a user mode library wrapper for
 XENIFACE IOCTLs
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

T24gMjAxNS0xMS0wNSAxNDo0OSwgUGF1bCBEdXJyYW50IHdyb3RlOgo+PiAtLS0tLU9yaWdpbmFs
IE1lc3NhZ2UtLS0tLQo+PiBGcm9tOiB3aW4tcHYtZGV2ZWwtYm91bmNlc0BsaXN0cy54ZW5wcm9q
ZWN0Lm9yZyBbbWFpbHRvOndpbi1wdi1kZXZlbC0KPj4gYm91bmNlc0BsaXN0cy54ZW5wcm9qZWN0
Lm9yZ10gT24gQmVoYWxmIE9mIFJhZmFsIFdvamR5bGEKPj4gU2VudDogMDQgTm92ZW1iZXIgMjAx
NSAwNDozOAo+PiBUbzogd2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCj4+IFN1Ympl
Y3Q6IFt3aW4tcHYtZGV2ZWxdIFtQQVRDSCAyLzJdIEFkZCBhIHVzZXIgbW9kZSBsaWJyYXJ5IHdy
YXBwZXIgZm9yCj4+IFhFTklGQUNFIElPQ1RMcwo+Pgo+PiBTaWduZWQtb2ZmLWJ5OiBSYWZhbCBX
b2pkeWxhIDxvbWVnQGludmlzaWJsZXRoaW5nc2xhYi5jb20+Cj4gCj4gRm9yIHNvbWUgcmVhc29u
IHRoaXMgZ290IGJhc2U2NCBlbmNvZGVkIG9uIGdtYW5lIHNvIEkgY2FuJ3QgZWFzaWx5IGFwcGx5
LiBMb29rcyBsaWtlIHlvdSBoYXZlIG5vbi1hc2NpaSBpbiB0aGUgdmN4cHJvaiBmaWxlczoKPiAK
PiArPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPiAKPiBWaXN1YWwgU3R1
ZGlvIGRvZXMgdGhpcyBidXQgZG9lc24ndCBvYmplY3QgdG8gbG9hZGluZyB0aGUgZmlsZXMgaWYg
eW91IHJlbW92ZSBpdC4gU28sIGNvdWxkIHlvdSBjbGVhbiB0aGF0IG91dCBhbmQgcmUtc2VuZCB0
aGUgcGF0Y2g/Cj4gCj4gVGhhbmtzLAo+IAo+ICAgUGF1bAo+IApBaCByaWdodCwgSSBzYXcgdGhp
cyBidXQgZm9yZ290IHRvIHJlbW92ZSB0aGUgQk9NLiBSZXNlbnQgdGhlIGZpeGVkIHZlcnNpb24u
CgotLSAKUmFmYcWCIFdvamR5xYJhClF1YmVzIFRvb2xzIGZvciBXaW5kb3dzIGRldmVsb3Blcgpo
dHRwczovL3d3dy5xdWJlcy1vcy5vcmcvCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwp3aW4tcHYtZGV2ZWwgbWFpbGluZyBsaXN0Cndpbi1wdi1kZXZlbEBs
aXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwOi8vbGlzdHMueGVucHJvamVjdC5vcmcvY2dpLWJpbi9t
YWlsbWFuL2xpc3RpbmZvL3dpbi1wdi1kZXZlbA==

From win-pv-devel-bounces@lists.xenproject.org Thu Nov 05 16:05:35 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Nov 2015 16:05:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZuN2c-0003nH-1a; Thu, 05 Nov 2015 16:05:34 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1ZuN2a-0003n8-UG
	for win-pv-devel@lists.xenproject.org; Thu, 05 Nov 2015 16:05:33 +0000
Received: from [85.158.137.68] by server-12.bemta-3.messagelabs.com id
	CB/4C-14900-9E56B365; Thu, 05 Nov 2015 14:21:29 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-6.tower-31.messagelabs.com!1446733287!1259930!1
X-Originating-IP: [66.111.4.27]
X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: 
	VHJ1c3RlZCBJUDogNjYuMTExLjQuMjcgPT4gODQ2Mw==\n
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 44578 invoked from network); 5 Nov 2015 14:21:28 -0000
Received: from out3-smtp.messagingengine.com (HELO
	out3-smtp.messagingengine.com) (66.111.4.27)
	by server-6.tower-31.messagelabs.com with AES256-GCM-SHA384 encrypted
	SMTP; 5 Nov 2015 14:21:28 -0000
Received: from compute1.internal (compute1.nyi.internal [10.202.2.41])
	by mailout.nyi.internal (Postfix) with ESMTP id 1CC43221A1
	for <win-pv-devel@lists.xenproject.org>;
	Thu,  5 Nov 2015 09:21:26 -0500 (EST)
Received: from frontend2 ([10.202.2.161])
	by compute1.internal (MEProxy); Thu, 05 Nov 2015 09:21:27 -0500
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=mesmtp; bh=rGsIG6/4lKoqJT7MK2d8dyYszwc=; b=XORTGc
	pc+UqtcrCJ9YHoqZ+8RcS7bQAXfGhzNFVDIaDG4ZARduNMm6e3KSIRhbowQRwZiH
	COMREt3aOffjM9BS6kK1EN+XBJuXMXRwJUVmgf+yAUEzAeO82+gO9l0zFxfhat0m
	m7mLxfWBMYmbavXPWsmOieF6MNav4DlNLK+yc=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=smtpout; bh=rGsIG6/4lKoqJT7MK2d8dyYszwc=; b=u1co/
	SR4pr0HmTd6kiuLbTdq/S85T8TptkJ+dw5x2TPUqh8eiF9nTztbJpylb6c81uFaG
	BL9zNYrRmooNOodA6cQk8WhJJVTC55356L8xCB2qn3LpVZvaLXcwzEJH2N9FZki9
	1hY44+Z3rfVQzNxNUDyCvsDPdmo2Ie9fNCNMiU=
X-Sasl-enc: mdJLl94GuIwytKVMaSWO7DSVt1aTgAc8kyFiv7g247TY 1446733285
Received: from [192.168.0.3] (89-72-164-138.dynamic.chello.pl [89.72.164.138])
	by mail.messagingengine.com (Postfix) with ESMTPA id C6102680134
	for <win-pv-devel@lists.xenproject.org>;
	Thu,  5 Nov 2015 09:21:25 -0500 (EST)
To: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
X-Enigmail-Draft-Status: N1010
Message-ID: <563B65F1.2020606@invisiblethingslab.com>
Date: Thu, 5 Nov 2015 15:21:37 +0100
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.3.0
MIME-Version: 1.0
Subject: [win-pv-devel] [PATCH] Add a user mode library wrapper for XENIFACE
	IOCTLs
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

Signed-off-by: Rafal Wojdyla <omeg@invisiblethingslab.com>
---
 include/xencontrol.h                         | 342 ++++++++++
 src/xencontrol/xencontrol.c                  | 915 +++++++++++++++++++++++++++
 src/xencontrol/xencontrol.rc                 |  24 +
 src/xencontrol/xencontrol_private.h          |  49 ++
 vs2013/xencontrol.props                      |  84 +++
 vs2013/xencontrol/xencontrol.vcxproj         |  62 ++
 vs2013/xencontrol/xencontrol.vcxproj.filters |  13 +
 vs2013/xeniface.sln                          |  38 ++
 8 files changed, 1527 insertions(+)
 create mode 100644 include/xencontrol.h
 create mode 100644 src/xencontrol/xencontrol.c
 create mode 100644 src/xencontrol/xencontrol.rc
 create mode 100644 src/xencontrol/xencontrol_private.h
 create mode 100644 vs2013/xencontrol.props
 create mode 100644 vs2013/xencontrol/xencontrol.vcxproj
 create mode 100644 vs2013/xencontrol/xencontrol.vcxproj.filters

diff --git a/include/xencontrol.h b/include/xencontrol.h
new file mode 100644
index 0000000..0a2f8f2
--- /dev/null
+++ b/include/xencontrol.h
@@ -0,0 +1,342 @@
+#ifndef _XENCONTROL_H_
+#define _XENCONTROL_H_
+
+#include <windows.h>
+#include <varargs.h>
+#include "xeniface_ioctls.h"
+
+#ifdef XENCONTROL_EXPORTS
+#    define XENCONTROL_API __declspec(dllexport)
+#else
+#    define XENCONTROL_API __declspec(dllimport)
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*! \typedef PXENCONTROL_CONTEXT
+    \brief Library handle representing a Xen Interface session
+*/
+struct _XENCONTROL_CONTEXT;
+typedef struct _XENCONTROL_CONTEXT *PXENCONTROL_CONTEXT;
+
+/*! \typedef XENCONTROL_LOG_LEVEL
+    \brief Log levels used by the library
+*/
+typedef enum
+_XENCONTROL_LOG_LEVEL {
+    XLL_ERROR = 1,
+    XLL_WARNING,
+    XLL_INFO,
+    XLL_DEBUG,
+    XLL_TRACE,
+} XENCONTROL_LOG_LEVEL;
+
+/*! \typedef XENCONTROL_LOGGER
+    \brief Callback for receiving diagnostic messages from the library
+*/
+typedef void
+XENCONTROL_LOGGER(
+    IN  XENCONTROL_LOG_LEVEL LogLevel,
+    IN  const CHAR *Function,
+    IN  const WCHAR *Message,
+    IN  va_list Args
+    );
+
+/*! \brief Register a callback for receiving library's diagnostic messages
+    \param Xc Xencontrol handle returned by XcOpen()
+    \param Logger Callback to register
+*/
+XENCONTROL_API
+void
+XcRegisterLogger(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  XENCONTROL_LOGGER *Logger
+    );
+
+/*! \brief Set log level threshold for library's diagnostic messages
+    \param Xc Xencontrol handle returned by XcOpen()
+    \param LogLevel Only messages with this level and above will be sent to the logger callback
+*/
+XENCONTROL_API
+void
+XcSetLogLevel(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  XENCONTROL_LOG_LEVEL LogLevel
+    );
+
+/*! \brief Open the Xen Interface device
+    \param Logger Callback for receiving library's diagnostic messages
+    \param Xc Xencontrol handle representing a Xen Interface session
+    \return Error code
+*/
+XENCONTROL_API
+DWORD
+XcOpen(
+    IN  XENCONTROL_LOGGER *Logger,
+    OUT PXENCONTROL_CONTEXT *Xc
+    );
+
+/*! \brief Close the Xen Interface device
+    \param Xc Xencontrol handle returned by XcOpen()
+*/
+XENCONTROL_API
+void
+XcClose(
+    IN  PXENCONTROL_CONTEXT Xc
+    );
+
+/*! \brief Open an unbound event channel
+    \param Xc Xencontrol handle returned by XcOpen()
+    \param RemoteDomain ID of a remote domain that will bind the channel
+    \param Event Handle to an event object that will receive event channel notifications
+    \param Mask Set to TRUE if the event channel should be initially masked
+    \param LocalPort Port number that is assigned to the event channel
+    \return Error code
+*/
+XENCONTROL_API
+DWORD
+XcEvtchnBindUnbound(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  USHORT RemoteDomain,
+    IN  HANDLE Event,
+    IN  BOOL Mask,
+    OUT ULONG *LocalPort
+    );
+
+/*! \brief Open an event channel that was already bound by a remote domain
+    \param Xc Xencontrol handle returned by XcOpen()
+    \param RemoteDomain ID of a remote domain that has already bound the channel
+    \param RemotePort Port number that is assigned to the event channel in the \a RemoteDomain
+    \param Event Handle to an event that will receive event channel notifications
+    \param Mask Set to TRUE if the event object channel should be initially masked
+    \param LocalPort Port number that is assigned to the event channel
+    \return Error code
+*/
+XENCONTROL_API
+DWORD
+XcEvtchnBindInterdomain(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  USHORT RemoteDomain,
+    IN  ULONG RemotePort,
+    IN  HANDLE Event,
+    IN  BOOL Mask,
+    OUT ULONG *LocalPort
+    );
+
+/*! \brief Close an event channel
+    \param Xc Xencontrol handle returned by XcOpen()
+    \param LocalPort Port number that is assigned to the event channel
+    \return Error code
+*/
+XENCONTROL_API
+DWORD
+XcEvtchnClose(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  ULONG LocalPort
+    );
+
+/*! \brief Notify the remote end of an event channel
+    \param Xc Xencontrol handle returned by XcOpen()
+    \param LocalPort Port number that is assigned to the event channel
+    \return Error code
+*/
+XENCONTROL_API
+DWORD
+XcEvtchnNotify(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  ULONG LocalPort
+    );
+
+/*! \brief Unmask an event channel
+    \param Xc Xencontrol handle returned by XcOpen()
+    \param LocalPort Port number that is assigned to the event channel
+    \return Error code
+*/
+XENCONTROL_API
+DWORD
+XcEvtchnUnmask(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  ULONG LocalPort
+    );
+
+/*! \brief Grant a \a RemoteDomain permission to access local memory pages
+    \param Xc Xencontrol handle returned by XcOpen()
+    \param RemoteDomain ID of a remote domain that is being granted access
+    \param NumberPages Number of 4k pages to grant access to
+    \param NotifyOffset Offset of a byte in the granted region that will be set to 0 when the grant is revoked
+    \param NotifyPort Local port number of an open event channel that will be notified when the grant is revoked
+    \param Flags Grant options
+    \param Address Local user mode address of the granted memory region
+    \param References An array of Xen grant numbers for every granted page
+    \return Error code
+*/
+XENCONTROL_API
+DWORD
+XcGnttabPermitForeignAccess(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  USHORT RemoteDomain,
+    IN  ULONG NumberPages,
+    IN  ULONG NotifyOffset,
+    IN  ULONG NotifyPort,
+    IN  XENIFACE_GNTTAB_PAGE_FLAGS Flags,
+    OUT PVOID *Address,
+    OUT ULONG *References
+    );
+
+/*! \brief Revoke a foreign domain access to previously granted memory region
+    \param Xc Xencontrol handle returned by XcOpen()
+    \param Address Local user mode address of the granted memory region
+    \return Error code
+*/
+XENCONTROL_API
+DWORD
+XcGnttabRevokeForeignAccess(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  PVOID Address
+    );
+
+/*! \brief Map a foreign memory region into the current address space
+    \param Xc Xencontrol handle returned by XcOpen()
+    \param RemoteDomain ID of a remote domain that has granted access to the pages
+    \param NumberPages Number of 4k pages to map
+    \param References An array of Xen grant numbers for every granted page
+    \param NotifyOffset Offset of a byte in the mapped region that will be set to 0 when the region is unmapped
+    \param NotifyPort Local port number of an open event channel that will be notified when the region is unmapped
+    \param Flags Map options
+    \param Address Local user mode address of the mapped memory region
+    \return Error code
+*/
+XENCONTROL_API
+DWORD
+XcGnttabMapForeignPages(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  USHORT RemoteDomain,
+    IN  ULONG NumberPages,
+    IN  PULONG References,
+    IN  ULONG NotifyOffset,
+    IN  ULONG NotifyPort,
+    IN  XENIFACE_GNTTAB_PAGE_FLAGS Flags,
+    OUT PVOID *Address
+    );
+
+/*! \brief Unmap a foreign memory region from the current address space
+    \param Xc Xencontrol handle returned by XcOpen()
+    \param Address Local user mode address of the mapped memory region
+    \return Error code
+*/
+XENCONTROL_API
+DWORD
+XcGnttabUnmapForeignPages(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  PVOID Address
+    );
+
+/*! \brief Read a XenStore key
+    \param Xc Xencontrol handle returned by XcOpen()
+    \param Path Path to the key
+    \param cbValue Size of the \a Value buffer, in bytes
+    \param Value Buffer that receives the value
+    \return Error code
+*/
+XENCONTROL_API
+DWORD
+XcStoreRead(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  PCHAR Path,
+    IN  DWORD cbValue,
+    OUT CHAR *Value
+    );
+
+/*! \brief Write a value to a XenStore key
+    \param Xc Xencontrol handle returned by XcOpen()
+    \param Path Path to the key
+    \param Value Value to write
+    \return Error code
+*/
+XENCONTROL_API
+DWORD
+XcStoreWrite(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  PCHAR Path,
+    IN  PCHAR Value
+    );
+
+/*! \brief Enumerate all immediate child keys of a XenStore key
+    \param Xc Xencontrol handle returned by XcOpen()
+    \param Path Path to the key
+    \param cbOutput Size of the \a Output buffer, in bytes
+    \param Output Buffer that receives a NUL-separated child key names
+    \return Error code
+*/
+XENCONTROL_API
+DWORD
+XcStoreDirectory(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  PCHAR Path,
+    IN  DWORD cbOutput,
+    OUT CHAR *Output
+    );
+
+/*! \brief Remove a XenStore key
+    \param Xc Xencontrol handle returned by XcOpen()
+    \param Path Path to the key
+    \return Error code
+*/
+XENCONTROL_API
+DWORD
+XcStoreRemove(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  PCHAR Path
+    );
+
+/*! \brief Set permissions of a XenStore key
+    \param Xc Xencontrol handle returned by XcOpen()
+    \param Path Path to the key
+    \param Count Number of permissions
+    \param Permissions Array of permissions to set
+    \return Error code
+*/
+XENCONTROL_API
+DWORD
+XcStoreSetPermissions(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  PCHAR Path,
+    IN  ULONG Count,
+    IN  PXENIFACE_STORE_PERMISSION Permissions
+    );
+
+/*! \brief Add a XenStore key watch
+    \param Xc Xencontrol handle returned by XcOpen()
+    \param Path Path to the key to be watched
+    \param Event Handle to an event that will be signaled when the watch fires
+    \param Handle An opaque value representing the watch
+    \return Error code
+*/
+XENCONTROL_API
+DWORD
+XcStoreAddWatch(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  PCHAR Path,
+    IN  HANDLE Event,
+    OUT PVOID *Handle
+    );
+
+/*! \brief Remove a XenStore watch
+    \param Xc Xencontrol handle returned by XcOpen()
+    \param Handle Watch handle returned by XcStoreAddWatch()
+    \return Error code
+*/
+XENCONTROL_API
+DWORD
+XcStoreRemoveWatch(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  PVOID Handle
+    );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // _XENCONTROL_H_
diff --git a/src/xencontrol/xencontrol.c b/src/xencontrol/xencontrol.c
new file mode 100644
index 0000000..92ac9d0
--- /dev/null
+++ b/src/xencontrol/xencontrol.c
@@ -0,0 +1,915 @@
+#define INITGUID
+#include <windows.h>
+#include <setupapi.h>
+#include <stdlib.h>
+#include <assert.h>
+
+#include "xencontrol.h"
+#include "xencontrol_private.h"
+
+BOOL APIENTRY
+DllMain(
+    IN  HMODULE Module,
+    IN  DWORD ReasonForCall,
+    IN  LPVOID Reserved
+)
+{
+    return TRUE;
+}
+
+static void
+_Log(
+    IN  XENCONTROL_LOGGER *Logger,
+    IN  XENCONTROL_LOG_LEVEL LogLevel,
+    IN  XENCONTROL_LOG_LEVEL CurrentLogLevel,
+    IN  PCHAR Function,
+    IN  PWCHAR Format,
+    ...
+    )
+{
+    va_list Args;
+    DWORD LastError;
+
+    if (Logger == NULL)
+        return;
+
+    if (LogLevel > CurrentLogLevel)
+        return;
+
+    LastError = GetLastError();
+    va_start(Args, Format);
+    Logger(LogLevel, Function, Format, Args);
+    va_end(Args);
+    SetLastError(LastError);
+}
+
+static void
+_LogMultiSz(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  PCHAR Caller,
+    IN  XENCONTROL_LOG_LEVEL Level,
+    IN  PCHAR MultiSz
+    )
+{
+    PCHAR Ptr;
+    ULONG Len;
+
+    for (Ptr = MultiSz; *Ptr;) {
+        Len = (ULONG)strlen(Ptr);
+        _Log(Xc->Logger, Level, Xc->LogLevel, Caller, L"%S", Ptr);
+        Ptr += (Len + 1);
+    }
+}
+
+void
+XcRegisterLogger(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  XENCONTROL_LOGGER *Logger
+    )
+{
+    Xc->Logger = Logger;
+}
+
+void
+XcSetLogLevel(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  XENCONTROL_LOG_LEVEL LogLevel
+    )
+{
+    Xc->LogLevel = LogLevel;
+}
+
+DWORD
+XcOpen(
+    IN  XENCONTROL_LOGGER *Logger,
+    OUT PXENCONTROL_CONTEXT *Xc
+    )
+{
+    HDEVINFO DevInfo;
+    SP_DEVICE_INTERFACE_DATA InterfaceData;
+    SP_DEVICE_INTERFACE_DETAIL_DATA *DetailData = NULL;
+    DWORD BufferSize;
+    PXENCONTROL_CONTEXT Context;
+
+    Context = malloc(sizeof(*Context));
+    if (Context == NULL)
+        return ERROR_NOT_ENOUGH_MEMORY;
+
+    Context->Logger = Logger;
+    Context->LogLevel = XLL_INFO;
+    Context->RequestId = 1;
+    InitializeListHead(&Context->RequestList);
+    InitializeCriticalSection(&Context->RequestListLock);
+
+    DevInfo = SetupDiGetClassDevs(&GUID_INTERFACE_XENIFACE, 0, NULL, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
+    if (DevInfo == INVALID_HANDLE_VALUE) {
+        _Log(Logger, XLL_ERROR, Context->LogLevel, __FUNCTION__,
+             L"XENIFACE device class doesn't exist");
+        goto fail;
+    }
+
+    InterfaceData.cbSize = sizeof(InterfaceData);
+    if (!SetupDiEnumDeviceInterfaces(DevInfo, NULL, &GUID_INTERFACE_XENIFACE, 0, &InterfaceData)) {
+        _Log(Logger, XLL_ERROR, Context->LogLevel, __FUNCTION__,
+             L"Failed to enumerate XENIFACE devices");
+        goto fail;
+    }
+
+    SetupDiGetDeviceInterfaceDetail(DevInfo, &InterfaceData, NULL, 0, &BufferSize, NULL);
+    if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) {
+        _Log(Logger, XLL_ERROR, Context->LogLevel, __FUNCTION__,
+             L"Failed to get buffer size for device details");
+        goto fail;
+    }
+
+    // Using 'BufferSize' from failed function call
+#pragma warning(suppress: 6102)
+    DetailData = (SP_DEVICE_INTERFACE_DETAIL_DATA *)malloc(BufferSize);
+    if (!DetailData) {
+        SetLastError(ERROR_OUTOFMEMORY);
+        goto fail;
+    }
+
+    DetailData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
+
+    if (!SetupDiGetDeviceInterfaceDetail(DevInfo, &InterfaceData, DetailData, BufferSize, NULL, NULL)) {
+        _Log(Logger, XLL_ERROR, Context->LogLevel, __FUNCTION__,
+             L"Failed to get XENIFACE device path");
+        goto fail;
+    }
+
+    Context->XenIface = CreateFile(DetailData->DevicePath,
+                                   FILE_GENERIC_READ | FILE_GENERIC_WRITE,
+                                   0,
+                                   NULL,
+                                   OPEN_EXISTING,
+                                   FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
+                                   NULL);
+
+    if (Context->XenIface == INVALID_HANDLE_VALUE) {
+        _Log(Logger, XLL_ERROR, Context->LogLevel, __FUNCTION__,
+             L"Failed to open XENIFACE device, path: %s", DetailData->DevicePath);
+        goto fail;
+    }
+
+    _Log(Logger, XLL_ERROR, Context->LogLevel, __FUNCTION__,
+         L"XenIface handle: %p", Context->XenIface);
+
+    free(DetailData);
+    *Xc = Context;
+    return ERROR_SUCCESS;
+
+fail:
+    _Log(Logger, XLL_ERROR, Context->LogLevel, __FUNCTION__,
+         L"Error: 0x%x", GetLastError());
+
+    free(DetailData);
+    return GetLastError();
+}
+
+void
+XcClose(
+    IN  PXENCONTROL_CONTEXT Xc
+    )
+{
+    CloseHandle(Xc->XenIface);
+    DeleteCriticalSection(&Xc->RequestListLock);
+    free(Xc);
+}
+
+DWORD
+XcEvtchnBindUnbound(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  USHORT RemoteDomain,
+    IN  HANDLE Event,
+    IN  BOOL Mask,
+    OUT ULONG *LocalPort
+    )
+{
+    XENIFACE_EVTCHN_BIND_UNBOUND_IN In;
+    XENIFACE_EVTCHN_BIND_UNBOUND_OUT Out;
+    DWORD Returned;
+    BOOL Success;
+
+    In.RemoteDomain = RemoteDomain;
+    In.Event = Event;
+    In.Mask = !!Mask;
+
+    Log(XLL_DEBUG, L"RemoteDomain: %d, Event: %p, Mask: %d", RemoteDomain, Event, Mask);
+    Success = DeviceIoControl(Xc->XenIface,
+                              IOCTL_XENIFACE_EVTCHN_BIND_UNBOUND,
+                              &In, sizeof(In),
+                              &Out, sizeof(Out),
+                              &Returned,
+                              NULL);
+
+    if (!Success) {
+        Log(XLL_ERROR, L"IOCTL_XENIFACE_EVTCHN_BIND_UNBOUND_PORT failed");
+        goto fail;
+    }
+
+    *LocalPort = Out.LocalPort;
+    Log(XLL_DEBUG, L"LocalPort: %lu", *LocalPort);
+
+    return ERROR_SUCCESS;
+
+fail:
+    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
+    return GetLastError();
+}
+
+DWORD
+XcEvtchnBindInterdomain(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  USHORT RemoteDomain,
+    IN  ULONG RemotePort,
+    IN  HANDLE Event,
+    IN  BOOL Mask,
+    OUT ULONG *LocalPort
+    )
+{
+    XENIFACE_EVTCHN_BIND_INTERDOMAIN_IN In;
+    XENIFACE_EVTCHN_BIND_INTERDOMAIN_OUT Out;
+    DWORD Returned;
+    BOOL Success;
+
+    In.RemoteDomain = RemoteDomain;
+    In.RemotePort = RemotePort;
+    In.Event = Event;
+    In.Mask = !!Mask;
+
+    Log(XLL_DEBUG, L"RemoteDomain: %d, RemotePort %lu, Event: %p, Mask: %d",
+        RemoteDomain, RemotePort, Event, Mask);
+    Success = DeviceIoControl(Xc->XenIface,
+                              IOCTL_XENIFACE_EVTCHN_BIND_INTERDOMAIN,
+                              &In, sizeof(In),
+                              &Out, sizeof(Out),
+                              &Returned,
+                              NULL);
+
+    if (!Success) {
+        Log(XLL_ERROR, L"IOCTL_XENIFACE_EVTCHN_BIND_INTERDOMAIN failed");
+        goto fail;
+    }
+
+    *LocalPort = Out.LocalPort;
+    Log(XLL_DEBUG, L"LocalPort: %lu", *LocalPort);
+
+    return ERROR_SUCCESS;
+
+fail:
+    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
+    return GetLastError();
+}
+
+DWORD
+XcEvtchnClose(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  ULONG LocalPort
+    )
+{
+    XENIFACE_EVTCHN_CLOSE_IN In;
+    DWORD Returned;
+    BOOL Success;
+
+    In.LocalPort = LocalPort;
+
+    Log(XLL_DEBUG, L"LocalPort: %lu", LocalPort);
+    Success = DeviceIoControl(Xc->XenIface,
+                              IOCTL_XENIFACE_EVTCHN_CLOSE,
+                              &In, sizeof(In),
+                              NULL, 0,
+                              &Returned,
+                              NULL);
+
+    if (!Success) {
+        Log(XLL_ERROR, L"IOCTL_XENIFACE_EVTCHN_CLOSE failed");
+        goto fail;
+    }
+
+    return ERROR_SUCCESS;
+
+fail:
+    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
+    return GetLastError();
+}
+
+DWORD
+XcEvtchnNotify(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  ULONG LocalPort
+    )
+{
+    XENIFACE_EVTCHN_NOTIFY_IN In;
+    DWORD Returned;
+    BOOL Success;
+
+    In.LocalPort = LocalPort;
+
+    Log(XLL_DEBUG, L"LocalPort: %lu", LocalPort);
+    Success = DeviceIoControl(Xc->XenIface,
+                              IOCTL_XENIFACE_EVTCHN_NOTIFY,
+                              &In, sizeof(In),
+                              NULL, 0,
+                              &Returned,
+                              NULL);
+
+    if (!Success) {
+        Log(XLL_ERROR, L"IOCTL_XENIFACE_EVTCHN_NOTIFY failed");
+        goto fail;
+    }
+
+    return ERROR_SUCCESS;
+
+fail:
+    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
+    return GetLastError();
+}
+
+DWORD
+XcEvtchnUnmask(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  ULONG LocalPort
+    )
+{
+    XENIFACE_EVTCHN_UNMASK_IN In;
+    DWORD Returned;
+    BOOL Success;
+
+    In.LocalPort = LocalPort;
+
+    Log(XLL_DEBUG, L"LocalPort: %lu", LocalPort);
+    Success = DeviceIoControl(Xc->XenIface,
+                              IOCTL_XENIFACE_EVTCHN_UNMASK,
+                              &In, sizeof(In),
+                              NULL, 0,
+                              &Returned,
+                              NULL);
+
+    if (!Success) {
+        Log(XLL_ERROR, L"IOCTL_XENIFACE_EVTCHN_UNMASK failed");
+        goto fail;
+    }
+
+    return ERROR_SUCCESS;
+
+fail:
+    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
+    return GetLastError();
+}
+
+static PXENCONTROL_GNTTAB_REQUEST
+FindRequest(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  PVOID Address
+    )
+{
+    PLIST_ENTRY Entry;
+    PXENCONTROL_GNTTAB_REQUEST ReturnRequest = NULL;
+
+    EnterCriticalSection(&Xc->RequestListLock);
+    Entry = Xc->RequestList.Flink;
+    while (Entry != &Xc->RequestList) {
+        PXENCONTROL_GNTTAB_REQUEST Request = CONTAINING_RECORD(Entry, XENCONTROL_GNTTAB_REQUEST, ListEntry);
+
+        if (Request->Address == Address) {
+            ReturnRequest = Request;
+            break;
+        }
+
+        Entry = Entry->Flink;
+    }
+    LeaveCriticalSection(&Xc->RequestListLock);
+
+    return ReturnRequest;
+}
+
+DWORD
+XcGnttabPermitForeignAccess(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  USHORT RemoteDomain,
+    IN  ULONG NumberPages,
+    IN  ULONG NotifyOffset,
+    IN  ULONG NotifyPort,
+    IN  XENIFACE_GNTTAB_PAGE_FLAGS Flags,
+    OUT PVOID *Address,
+    OUT ULONG *References
+    )
+{
+    XENIFACE_GNTTAB_PERMIT_FOREIGN_ACCESS_IN In;
+    XENIFACE_GNTTAB_PERMIT_FOREIGN_ACCESS_OUT *Out;
+    PXENCONTROL_GNTTAB_REQUEST Request;
+    DWORD Returned, Size;
+    BOOL Success;
+    DWORD Status;
+
+    // lock the whole operation to not generate duplicate IDs
+    EnterCriticalSection(&Xc->RequestListLock);
+
+    In.RequestId = Xc->RequestId;
+    In.RemoteDomain = RemoteDomain;
+    In.NumberPages = NumberPages;
+    In.NotifyOffset = NotifyOffset;
+    In.NotifyPort = NotifyPort;
+    In.Flags = Flags;
+
+    Size = (ULONG)FIELD_OFFSET(XENIFACE_GNTTAB_PERMIT_FOREIGN_ACCESS_OUT, References[NumberPages]);
+    Out = malloc(Size);
+    Request = malloc(sizeof(*Request));
+
+    Status = ERROR_OUTOFMEMORY;
+    if (!Request || !Out)
+        goto fail;
+
+    ZeroMemory(Request, sizeof(*Request));
+    Request->Id = In.RequestId;
+
+    Log(XLL_DEBUG, L"Id %lu, RemoteDomain: %d, NumberPages: %lu, NotifyOffset: 0x%x, NotifyPort: %lu, Flags: 0x%x",
+        In.RequestId, RemoteDomain, NumberPages, NotifyOffset, NotifyPort, Flags);
+
+    Success = DeviceIoControl(Xc->XenIface,
+                              IOCTL_XENIFACE_GNTTAB_PERMIT_FOREIGN_ACCESS,
+                              &In, sizeof(In),
+                              Out, Size,
+                              &Returned,
+                              &Request->Overlapped);
+
+    Status = GetLastError();
+    // this IOCTL is expected to be pending on success
+    if (!Success) {
+        if (Status != ERROR_IO_PENDING) {
+            Log(XLL_ERROR, L"IOCTL_XENIFACE_GNTTAB_GRANT_PAGES failed");
+            goto fail;
+        }
+    } else {
+        Log(XLL_ERROR, L"IOCTL_XENIFACE_GNTTAB_GRANT_PAGES not pending");
+        Status = ERROR_UNIDENTIFIED_ERROR;
+        goto fail;
+    }
+
+    Request->Address = Out->Address;
+
+    InsertTailList(&Xc->RequestList, &Request->ListEntry);
+    Xc->RequestId++;
+    LeaveCriticalSection(&Xc->RequestListLock);
+
+    *Address = Out->Address;
+    memcpy(References, &Out->References, NumberPages * sizeof(ULONG));
+    Log(XLL_DEBUG, L"Address: %p", *Address);
+    for (ULONG i = 0; i < NumberPages; i++)
+        Log(XLL_DEBUG, L"Grant ref[%lu]: %lu", i, Out->References[i]);
+
+    free(Out);
+    return ERROR_SUCCESS;
+
+fail:
+    LeaveCriticalSection(&Xc->RequestListLock);
+    Log(XLL_ERROR, L"Error: 0x%x", Status);
+    free(Out);
+    free(Request);
+    return Status;
+}
+
+DWORD
+XcGnttabRevokeForeignAccess(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  PVOID Address
+    )
+{
+    XENIFACE_GNTTAB_REVOKE_FOREIGN_ACCESS_IN In;
+    PXENCONTROL_GNTTAB_REQUEST Request;
+    DWORD Returned;
+    BOOL Success;
+    DWORD Status;
+
+    Log(XLL_DEBUG, L"Address: %p", Address);
+
+    Status = ERROR_NOT_FOUND;
+    Request = FindRequest(Xc, Address);
+    if (!Request) {
+        Log(XLL_ERROR, L"Address %p not granted", Address);
+        goto fail;
+    }
+
+    In.RequestId = Request->Id;
+
+    Success = DeviceIoControl(Xc->XenIface,
+                              IOCTL_XENIFACE_GNTTAB_REVOKE_FOREIGN_ACCESS,
+                              &In, sizeof(In),
+                              NULL, 0,
+                              &Returned,
+                              NULL);
+
+    Status = GetLastError();
+    if (!Success) {
+        Log(XLL_ERROR, L"IOCTL_XENIFACE_GNTTAB_UNGRANT_PAGES failed");
+        goto fail;
+    }
+
+    EnterCriticalSection(&Xc->RequestListLock);
+    RemoveEntryList(&Request->ListEntry);
+    LeaveCriticalSection(&Xc->RequestListLock);
+    free(Request);
+
+    return Status;
+
+fail:
+    Log(XLL_ERROR, L"Error: %d 0x%x", Status, Status);
+    return Status;
+}
+
+DWORD
+XcGnttabMapForeignPages(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  USHORT RemoteDomain,
+    IN  ULONG NumberPages,
+    IN  PULONG References,
+    IN  ULONG NotifyOffset,
+    IN  ULONG NotifyPort,
+    IN  XENIFACE_GNTTAB_PAGE_FLAGS Flags,
+    OUT PVOID *Address
+    )
+{
+    XENIFACE_GNTTAB_MAP_FOREIGN_PAGES_IN *In;
+    XENIFACE_GNTTAB_MAP_FOREIGN_PAGES_OUT Out;
+    PXENCONTROL_GNTTAB_REQUEST Request;
+    DWORD Returned, Size;
+    BOOL Success;
+    DWORD Status;
+
+    // lock the whole operation to not generate duplicate IDs
+    EnterCriticalSection(&Xc->RequestListLock);
+
+    Status = ERROR_OUTOFMEMORY;
+    Size = (ULONG)FIELD_OFFSET(XENIFACE_GNTTAB_MAP_FOREIGN_PAGES_IN, References[NumberPages]);
+    In = malloc(Size);
+    Request = malloc(sizeof(*Request));
+    if (!In || !Request)
+        goto fail;
+
+    In->RequestId = Xc->RequestId;
+    In->RemoteDomain = RemoteDomain;
+    In->NumberPages = NumberPages;
+    In->NotifyOffset = NotifyOffset;
+    In->NotifyPort = NotifyPort;
+    In->Flags = Flags;
+    memcpy(&In->References, References, NumberPages * sizeof(ULONG));
+
+    ZeroMemory(Request, sizeof(*Request));
+    Request->Id = In->RequestId;
+
+    Log(XLL_DEBUG, L"Id %lu, RemoteDomain: %d, NumberPages: %lu, NotifyOffset: 0x%x, NotifyPort: %lu, Flags: 0x%x",
+        In->RequestId, RemoteDomain, NumberPages, NotifyOffset, NotifyPort, Flags);
+
+    for (ULONG i = 0; i < NumberPages; i++)
+        Log(XLL_DEBUG, L"Grant ref[%lu]: %lu", i, References[i]);
+
+    Success = DeviceIoControl(Xc->XenIface,
+                              IOCTL_XENIFACE_GNTTAB_MAP_FOREIGN_PAGES,
+                              In, Size,
+                              &Out, sizeof(Out),
+                              &Returned,
+                              &Request->Overlapped);
+
+    Status = GetLastError();
+    // this IOCTL is expected to be pending on success
+    if (!Success) {
+        if (Status != ERROR_IO_PENDING) {
+            Log(XLL_ERROR, L"IOCTL_XENIFACE_GNTTAB_MAP_FOREIGN_PAGES failed");
+            goto fail;
+        }
+    } else {
+        Log(XLL_ERROR, L"IOCTL_XENIFACE_GNTTAB_MAP_FOREIGN_PAGES not pending");
+        Status = ERROR_UNIDENTIFIED_ERROR;
+        goto fail;
+    }
+
+    Request->Address = Out.Address;
+    InsertTailList(&Xc->RequestList, &Request->ListEntry);
+    Xc->RequestId++;
+    LeaveCriticalSection(&Xc->RequestListLock);
+
+    *Address = Out.Address;
+
+    Log(XLL_DEBUG, L"Address: %p", *Address);
+
+    free(In);
+    return ERROR_SUCCESS;
+
+fail:
+    LeaveCriticalSection(&Xc->RequestListLock);
+    Log(XLL_ERROR, L"Error: 0x%x", Status);
+    free(In);
+    free(Request);
+    return Status;
+}
+
+DWORD
+XcGnttabUnmapForeignPages(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  PVOID Address
+    )
+{
+    XENIFACE_GNTTAB_UNMAP_FOREIGN_PAGES_IN In;
+    PXENCONTROL_GNTTAB_REQUEST Request;
+    DWORD Returned;
+    BOOL Success;
+    DWORD Status;
+
+    Log(XLL_DEBUG, L"Address: %p", Address);
+
+    Status = ERROR_NOT_FOUND;
+    Request = FindRequest(Xc, Address);
+    if (!Request) {
+        Log(XLL_ERROR, L"Address %p not mapped", Address);
+        goto fail;
+    }
+
+    In.RequestId = Request->Id;
+
+    Success = DeviceIoControl(Xc->XenIface,
+                              IOCTL_XENIFACE_GNTTAB_UNMAP_FOREIGN_PAGES,
+                              &In, sizeof(In),
+                              NULL, 0,
+                              &Returned,
+                              NULL);
+
+    Status = GetLastError();
+    if (!Success) {
+        Log(XLL_ERROR, L"IOCTL_XENIFACE_GNTTAB_UNMAP_FOREIGN_PAGES failed");
+        goto fail;
+    }
+
+    EnterCriticalSection(&Xc->RequestListLock);
+    RemoveEntryList(&Request->ListEntry);
+    LeaveCriticalSection(&Xc->RequestListLock);
+    free(Request);
+
+    return Status;
+
+fail:
+    Log(XLL_ERROR, L"Error: 0x%x", Status);
+    return Status;
+}
+
+DWORD
+XcStoreRead(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  PSTR Path,
+    IN  DWORD cbValue,
+    OUT CHAR *Value
+    )
+{
+    DWORD Returned;
+    BOOL Success;
+
+    Log(XLL_DEBUG, L"Path: '%S'", Path);
+    Success = DeviceIoControl(Xc->XenIface,
+                              IOCTL_XENIFACE_STORE_READ,
+                              Path, (DWORD)strlen(Path) + 1,
+                              Value, cbValue,
+                              &Returned,
+                              NULL);
+
+    if (!Success) {
+        Log(XLL_ERROR, L"IOCTL_XENIFACE_STORE_READ failed");
+        goto fail;
+    }
+
+    Log(XLL_DEBUG, L"Value: '%S'", Value);
+
+    return ERROR_SUCCESS;
+
+fail:
+    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
+    return GetLastError();
+}
+
+DWORD
+XcStoreWrite(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  PCHAR Path,
+    IN  PCHAR Value
+    )
+{
+    PCHAR Buffer;
+    DWORD cbBuffer;
+    DWORD Returned;
+    BOOL Success;
+
+    cbBuffer = (DWORD)(strlen(Path) + 1 + strlen(Value) + 1 + 1);
+    Buffer = malloc(cbBuffer);
+    if (!Buffer) {
+        SetLastError(ERROR_OUTOFMEMORY);
+        goto fail;
+    }
+
+    ZeroMemory(Buffer, cbBuffer);
+    memcpy(Buffer, Path, strlen(Path));
+    memcpy(Buffer + strlen(Path) + 1, Value, strlen(Value));
+
+    Log(XLL_DEBUG, L"Path: '%S', Value: '%S'", Path, Value);
+    Success = DeviceIoControl(Xc->XenIface,
+                              IOCTL_XENIFACE_STORE_WRITE,
+                              Buffer, cbBuffer,
+                              NULL, 0,
+                              &Returned,
+                              NULL);
+
+    if (!Success) {
+        Log(XLL_ERROR, L"IOCTL_XENIFACE_STORE_WRITE failed");
+        goto fail;
+    }
+
+    free(Buffer);
+    return ERROR_SUCCESS;
+
+fail:
+    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
+    free(Buffer);
+    return GetLastError();
+}
+
+DWORD
+XcStoreDirectory(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  PCHAR Path,
+    IN  DWORD cbOutput,
+    OUT CHAR *Output
+    )
+{
+    DWORD Returned;
+    BOOL Success;
+
+    Log(XLL_DEBUG, L"Path: '%S'", Path);
+    Success = DeviceIoControl(Xc->XenIface,
+                              IOCTL_XENIFACE_STORE_DIRECTORY,
+                              Path, (DWORD)strlen(Path) + 1,
+                              Output, cbOutput,
+                              &Returned,
+                              NULL);
+
+    if (!Success) {
+        Log(XLL_ERROR, L"IOCTL_XENIFACE_STORE_DIRECTORY failed");
+        goto fail;
+    }
+
+    _LogMultiSz(Xc, __FUNCTION__, XLL_DEBUG, Output);
+
+    return ERROR_SUCCESS;
+
+fail:
+    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
+    return GetLastError();
+}
+
+DWORD
+XcStoreRemove(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  PCHAR Path
+    )
+{
+    DWORD Returned;
+    BOOL Success;
+
+    Log(XLL_DEBUG, L"Path: '%S'", Path);
+    Success = DeviceIoControl(Xc->XenIface,
+                              IOCTL_XENIFACE_STORE_REMOVE,
+                              Path, (DWORD)strlen(Path) + 1,
+                              NULL, 0,
+                              &Returned,
+                              NULL);
+
+    if (!Success) {
+        Log(XLL_ERROR, L"IOCTL_XENIFACE_STORE_REMOVE failed");
+        goto fail;
+    }
+
+    return ERROR_SUCCESS;
+
+fail:
+    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
+    return GetLastError();
+}
+
+DWORD
+XcStoreSetPermissions(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  PCHAR Path,
+    IN  ULONG Count,
+    IN  PXENIFACE_STORE_PERMISSION Permissions
+    )
+{
+    DWORD Returned, Size;
+    BOOL Success;
+    XENIFACE_STORE_SET_PERMISSIONS_IN *In = NULL;
+
+    Log(XLL_DEBUG, L"Path: '%S', Count: %lu", Path, Count);
+    for (ULONG i = 0; i < Count; i++)
+        Log(XLL_DEBUG, L"Domain: %d, Mask: 0x%x", Permissions[i].Domain, Permissions[i].Mask);
+
+    Size = (ULONG)FIELD_OFFSET(XENIFACE_STORE_SET_PERMISSIONS_IN, Permissions[Count]);
+    In = malloc(Size);
+    if (!In) {
+        SetLastError(ERROR_OUTOFMEMORY);
+        goto fail;
+    }
+
+    In->Path = Path;
+    In->PathLength = (DWORD)strlen(In->Path) + 1;
+    In->NumberPermissions = Count;
+    memcpy(&In->Permissions, Permissions, Count * sizeof(XENIFACE_STORE_PERMISSION));
+
+    Success = DeviceIoControl(Xc->XenIface,
+                              IOCTL_XENIFACE_STORE_SET_PERMISSIONS,
+                              In, Size,
+                              NULL, 0,
+                              &Returned,
+                              NULL);
+
+    if (!Success) {
+        Log(XLL_ERROR, L"IOCTL_XENIFACE_STORE_SET_PERMISSIONS failed");
+        goto fail;
+    }
+
+    free(In);
+    return ERROR_SUCCESS;
+
+fail:
+    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
+    free(In);
+    return GetLastError();
+}
+
+DWORD
+XcStoreAddWatch(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  PCHAR Path,
+    IN  HANDLE Event,
+    OUT PVOID *Handle
+    )
+{
+    DWORD Returned;
+    BOOL Success;
+    XENIFACE_STORE_ADD_WATCH_IN In;
+    XENIFACE_STORE_ADD_WATCH_OUT Out;
+
+    Log(XLL_DEBUG, L"Path: '%S', Event: %p", Path, Event);
+
+    In.Path = Path;
+    In.PathLength = (DWORD)strlen(Path) + 1;
+    In.Event = Event;
+    Success = DeviceIoControl(Xc->XenIface,
+                              IOCTL_XENIFACE_STORE_ADD_WATCH,
+                              &In, sizeof(In),
+                              &Out, sizeof(Out),
+                              &Returned,
+                              NULL);
+
+    if (!Success) {
+        Log(XLL_ERROR, L"IOCTL_XENIFACE_STORE_ADD_WATCH failed");
+        goto fail;
+    }
+
+    *Handle = Out.Context;
+
+    Log(XLL_DEBUG, L"Handle: %p", *Handle);
+
+    return ERROR_SUCCESS;
+
+fail:
+    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
+    return GetLastError();
+}
+
+DWORD
+XcStoreRemoveWatch(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  PVOID Handle
+    )
+{
+    DWORD Returned;
+    BOOL Success;
+    XENIFACE_STORE_REMOVE_WATCH_IN In;
+
+    Log(XLL_DEBUG, L"Handle: %p", Handle);
+
+    In.Context = Handle;
+    Success = DeviceIoControl(Xc->XenIface,
+                              IOCTL_XENIFACE_STORE_REMOVE_WATCH,
+                              &In, sizeof(In),
+                              NULL, 0,
+                              &Returned,
+                              NULL);
+
+    if (!Success) {
+        Log(XLL_ERROR, L"IOCTL_XENIFACE_STORE_REMOVE_WATCH failed");
+        goto fail;
+    }
+
+    return ERROR_SUCCESS;
+
+fail:
+    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
+    return GetLastError();
+}
diff --git a/src/xencontrol/xencontrol.rc b/src/xencontrol/xencontrol.rc
new file mode 100644
index 0000000..6c33e84
--- /dev/null
+++ b/src/xencontrol/xencontrol.rc
@@ -0,0 +1,24 @@
+#include <windows.h>
+#include <ntverp.h>
+
+#undef VER_COMPANYNAME_STR
+#undef VER_PRODUCTNAME_STR
+#undef VER_PRODUCTVERSION
+#undef VER_PRODUCTVERSION_STR
+
+#include <version.h>
+
+#define VER_COMPANYNAME_STR         VENDOR_NAME_STR
+#define VER_LEGALCOPYRIGHT_STR      "Copyright (c) Invisible Things Lab"
+
+#define VER_PRODUCTNAME_STR         "XENIFACE"
+#define VER_PRODUCTVERSION          MAJOR_VERSION,MINOR_VERSION,MICRO_VERSION,BUILD_NUMBER
+#define VER_PRODUCTVERSION_STR      MAJOR_VERSION_STR "." MINOR_VERSION_STR "." MICRO_VERSION_STR "." BUILD_NUMBER_STR
+
+#define VER_INTERNALNAME_STR        "XENCONTROL.DLL"
+#define VER_FILEDESCRIPTION_STR     "Xen interface user library"
+
+#define VER_FILETYPE                VFT_DLL
+#define VER_FILESUBTYPE             0
+
+#include <common.ver>
diff --git a/src/xencontrol/xencontrol_private.h b/src/xencontrol/xencontrol_private.h
new file mode 100644
index 0000000..685bcfa
--- /dev/null
+++ b/src/xencontrol/xencontrol_private.h
@@ -0,0 +1,49 @@
+#ifndef _XENCONTROL_PRIVATE_H_
+#define _XENCONTROL_PRIVATE_H_
+
+#include <windows.h>
+#include "xencontrol.h"
+
+#define Log(level, format, ...) \
+        _Log(Xc->Logger, level, Xc->LogLevel, __FUNCTION__, format, __VA_ARGS__)
+
+#define InitializeListHead(ListHead) ( \
+    (ListHead)->Flink = (ListHead)->Blink = (ListHead))
+
+#define InsertTailList(ListHead, Entry) { \
+    PLIST_ENTRY _EX_Blink; \
+    PLIST_ENTRY _EX_ListHead; \
+    _EX_ListHead = (ListHead); \
+    _EX_Blink = _EX_ListHead->Blink; \
+    (Entry)->Flink = _EX_ListHead; \
+    (Entry)->Blink = _EX_Blink; \
+    _EX_Blink->Flink = (Entry); \
+    _EX_ListHead->Blink = (Entry); \
+    }
+
+#define RemoveEntryList(Entry) { \
+    PLIST_ENTRY _EX_Blink; \
+    PLIST_ENTRY _EX_Flink; \
+    _EX_Flink = (Entry)->Flink; \
+    _EX_Blink = (Entry)->Blink; \
+    _EX_Blink->Flink = _EX_Flink; \
+    _EX_Flink->Blink = _EX_Blink; \
+    }
+
+typedef struct _XENCONTROL_CONTEXT {
+    HANDLE XenIface;
+    XENCONTROL_LOGGER *Logger;
+    XENCONTROL_LOG_LEVEL LogLevel;
+    ULONG RequestId;
+    LIST_ENTRY RequestList;
+    CRITICAL_SECTION RequestListLock;
+} XENCONTROL_CONTEXT, *PXENCONTROL_CONTEXT;
+
+typedef struct _XENCONTROL_GNTTAB_REQUEST {
+    LIST_ENTRY  ListEntry;
+    OVERLAPPED  Overlapped;
+    ULONG       Id;
+    PVOID       Address;
+} XENCONTROL_GNTTAB_REQUEST, *PXENCONTROL_GNTTAB_REQUEST;
+
+#endif // _XENCONTROL_PRIVATE_H_
diff --git a/vs2013/xencontrol.props b/vs2013/xencontrol.props
new file mode 100644
index 0000000..22c1704
--- /dev/null
+++ b/vs2013/xencontrol.props
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+
+  <ImportGroup Label="PropertySheets" />
+
+  <PropertyGroup Label="UserMacros" />
+
+  <PropertyGroup>
+    <IncludePath>$(SolutionDir)\..\include;$(IncludePath)</IncludePath>
+    <LibraryPath>$(SolutionDir)\$(Configuration)\$(Platform);$(LibraryPath)</LibraryPath>
+    <OutDir>$(SolutionDir)\$(Configuration)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)\$(ProjectName)\$(Configuration)\$(Platform)\</IntDir>
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+
+  <PropertyGroup Label="Configuration">
+    <LinkIncremental>false</LinkIncremental>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+
+  <PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
+    <RunCodeAnalysis>true</RunCodeAnalysis>
+    <UseDebugLibraries>true</UseDebugLibraries>
+  </PropertyGroup>
+
+  <PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration">
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+  </PropertyGroup>
+
+  <ItemDefinitionGroup>
+    <Link>
+      <AdditionalDependencies>setupapi.lib;ws2_32.lib;shlwapi.lib;wtsapi32.lib;userenv.lib;version.lib;ntdll.lib;kernel32.lib;user32.lib;gdi32.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+    </Link>
+    <ClCompile>
+      <PreprocessorDefinitions>WIN32;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <SDLCheck>true</SDLCheck>
+      <ExceptionHandling>false</ExceptionHandling>
+      <TreatWarningAsError>true</TreatWarningAsError>
+    </ClCompile>
+    <CustomBuildStep>
+      <Command>xcopy /y $(TargetPath) $(SolutionDir)\..\xeniface\$(PlatformTarget)\
+xcopy /y $(TargetDir)$(TargetName).pdb $(SolutionDir)\..\xeniface\$(PlatformTarget)\
+if exist $(TargetDir)$(TargetName).lib xcopy /y $(TargetDir)$(TargetName).lib $(SolutionDir)\..\xeniface\$(PlatformTarget)\</Command>
+    </CustomBuildStep>
+    <CustomBuildStep>
+      <Message>Copying output files</Message>
+    </CustomBuildStep>
+    <CustomBuildStep>
+      <Outputs>$(SolutionDir)\..\xeniface\$(PlatformTarget)$(TargetFileName);$(SolutionDir)\..\xeniface\$(PlatformTarget)$(TargetName).pdb;$(SolutionDir)\..\xeniface\$(PlatformTarget)$(TargetName).lib;%(Outputs)</Outputs>
+    </CustomBuildStep>
+    <CustomBuildStep>
+      <Inputs>$(TargetPath);$(TargetDir)$(TargetName).pdb;$(TargetDir)$(TargetName).lib</Inputs>
+    </CustomBuildStep>
+  </ItemDefinitionGroup>
+
+  <ItemDefinitionGroup Condition="'$(Configuration)'=='Debug'">
+    <ClCompile>
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <Optimization>Disabled</Optimization>
+      <EnablePREfast>true</EnablePREfast>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+    </ClCompile>
+  </ItemDefinitionGroup>
+
+  <ItemDefinitionGroup Condition="'$(Configuration)'=='Release'">
+    <ClCompile>
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+    </ClCompile>
+    <Link>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+    </Link>
+  </ItemDefinitionGroup>
+
+  <ItemGroup />
+</Project>
\ No newline at end of file
diff --git a/vs2013/xencontrol/xencontrol.vcxproj b/vs2013/xencontrol/xencontrol.vcxproj
new file mode 100644
index 0000000..4d91a38
--- /dev/null
+++ b/vs2013/xencontrol/xencontrol.vcxproj
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>xencontrol</RootNamespace>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="..\xencontrol.props" />
+  </ImportGroup>
+  <ItemDefinitionGroup>
+    <ClCompile>
+      <PreprocessorDefinitions>_WINDOWS;_USRDLL;XENCONTROL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\src\xencontrol\xencontrol.c" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\include\xencontrol.h" />
+    <ClInclude Include="..\..\src\xencontrol\xencontrol_private.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="..\..\src\xencontrol\xencontrol.rc" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+  <ProjectExtensions>
+    <VisualStudio>
+      <UserProperties />
+    </VisualStudio>
+  </ProjectExtensions>
+</Project>
\ No newline at end of file
diff --git a/vs2013/xencontrol/xencontrol.vcxproj.filters b/vs2013/xencontrol/xencontrol.vcxproj.filters
new file mode 100644
index 0000000..c6de099
--- /dev/null
+++ b/vs2013/xencontrol/xencontrol.vcxproj.filters
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <ClInclude Include="..\..\include\xencontrol.h" />
+    <ClInclude Include="..\..\src\xencontrol\xencontrol_private.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="..\..\src\xencontrol\xencontrol.rc" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\src\xencontrol\xencontrol.c" />
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/vs2013/xeniface.sln b/vs2013/xeniface.sln
index 3c74c79..76d06b4 100644
--- a/vs2013/xeniface.sln
+++ b/vs2013/xeniface.sln
@@ -17,6 +17,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "package", "package\package.
 		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B} = {2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}
 	EndProjectSection
 EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xencontrol", "xencontrol\xencontrol.vcxproj", "{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Windows 7 Debug|Win32 = Windows 7 Debug|Win32
@@ -165,6 +167,42 @@ Global
 		{9B071A35-897C-477A-AEB7-95F77618A21D}.Windows Vista Release|x64.ActiveCfg = Windows Vista Release|x64
 		{9B071A35-897C-477A-AEB7-95F77618A21D}.Windows Vista Release|x64.Build.0 = Windows Vista Release|x64
 		{9B071A35-897C-477A-AEB7-95F77618A21D}.Windows Vista Release|x64.Deploy.0 = Windows Vista Release|x64
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7 Debug|Win32.ActiveCfg = Debug|Win32
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7 Debug|Win32.Build.0 = Debug|Win32
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7 Debug|Win32.Deploy.0 = Debug|Win32
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7 Debug|x64.ActiveCfg = Debug|x64
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7 Debug|x64.Build.0 = Debug|x64
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7 Debug|x64.Deploy.0 = Debug|x64
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7 Release|Win32.ActiveCfg = Release|Win32
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7 Release|Win32.Build.0 = Release|Win32
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7 Release|Win32.Deploy.0 = Release|Win32
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7 Release|x64.ActiveCfg = Release|x64
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7 Release|x64.Build.0 = Release|x64
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7 Release|x64.Deploy.0 = Release|x64
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Developer Preview Debug|Win32.ActiveCfg = Debug|Win32
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Developer Preview Debug|Win32.Build.0 = Debug|Win32
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Developer Preview Debug|Win32.Deploy.0 = Debug|Win32
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Developer Preview Debug|x64.ActiveCfg = Debug|x64
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Developer Preview Debug|x64.Build.0 = Debug|x64
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Developer Preview Debug|x64.Deploy.0 = Debug|x64
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Developer Preview Release|Win32.ActiveCfg = Release|Win32
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Developer Preview Release|Win32.Build.0 = Release|Win32
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Developer Preview Release|Win32.Deploy.0 = Release|Win32
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Developer Preview Release|x64.ActiveCfg = Release|x64
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Developer Preview Release|x64.Build.0 = Release|x64
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Developer Preview Release|x64.Deploy.0 = Release|x64
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista Debug|Win32.ActiveCfg = Debug|Win32
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista Debug|Win32.Build.0 = Debug|Win32
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista Debug|Win32.Deploy.0 = Debug|Win32
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista Debug|x64.ActiveCfg = Debug|x64
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista Debug|x64.Build.0 = Debug|x64
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista Debug|x64.Deploy.0 = Debug|x64
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista Release|Win32.ActiveCfg = Release|Win32
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista Release|Win32.Build.0 = Release|Win32
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista Release|Win32.Deploy.0 = Release|Win32
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista Release|x64.ActiveCfg = Release|x64
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista Release|x64.Build.0 = Release|x64
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista Release|x64.Deploy.0 = Release|x64
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
-- 
1.8.1.msysgit.1



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

From win-pv-devel-bounces@lists.xenproject.org Thu Nov 05 16:05:35 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Nov 2015 16:05:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZuN2c-0003nL-5a; Thu, 05 Nov 2015 16:05:34 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1ZuN2b-0003n7-2B
	for win-pv-devel@lists.xenproject.org; Thu, 05 Nov 2015 16:05:33 +0000
Received: from [193.109.254.147] by server-4.bemta-14.messagelabs.com id
	53/54-10715-A266B365; Thu, 05 Nov 2015 14:22:34 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-10.tower-27.messagelabs.com!1446733352!759316!1
X-Originating-IP: [66.111.4.27]
X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: 
	VHJ1c3RlZCBJUDogNjYuMTExLjQuMjcgPT4gODQ2Mw==\n
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 15990 invoked from network); 5 Nov 2015 14:22:33 -0000
Received: from out3-smtp.messagingengine.com (HELO
	out3-smtp.messagingengine.com) (66.111.4.27)
	by server-10.tower-27.messagelabs.com with DHE-RSA-AES256-GCM-SHA384
	encrypted SMTP; 5 Nov 2015 14:22:33 -0000
Received: from compute2.internal (compute2.nyi.internal [10.202.2.42])
	by mailout.nyi.internal (Postfix) with ESMTP id C85FC21C43
	for <win-pv-devel@lists.xenproject.org>;
	Thu,  5 Nov 2015 09:22:31 -0500 (EST)
Received: from frontend2 ([10.202.2.161])
	by compute2.internal (MEProxy); Thu, 05 Nov 2015 09:22:31 -0500
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:in-reply-to:message-id:mime-version:references
	:subject:to:x-sasl-enc:x-sasl-enc; s=mesmtp; bh=QJrALH66VIO/Max3
	MD18MwNyiO0=; b=bA1Ny0NY0lx4nkVyUY6Sou0vKwanG6kG9mX0vqguAOy64axo
	4jja2HRWpBZ8Z+O8luBDTb62nlpyL6l9iDihFH79d3OtpKmhqNLZBwT+jhd6qOWx
	8obgqqdst/f0IsMRVuGE8NfAsI9g1JddcRcIgDi3CqMMbAotN6+SWh3D5PU=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:in-reply-to:message-id:mime-version:references
	:subject:to:x-sasl-enc:x-sasl-enc; s=smtpout; bh=QJrALH66VIO/Max
	3MD18MwNyiO0=; b=RCpe1koHjxvqJp874jBTw50GjopmiZ3smZ4wYLAsqhceuv2
	qABmqktblFLPgmPjV8cL+jlcDCZ0dDTt6W7aND2QMi3hIA2zLUkIafYjkOmjR6Ak
	hy5eEyKqH0A/1cmIun3Ka/Y02YBNwEX9iwhvo+oAHzlOCeWMF2KoAE2Iokv8=
X-Sasl-enc: NlJvHne2YjZ+lK3KI5Dl7I5nkjlEs66T7leteeSisy9t 1446733351
Received: from [192.168.0.3] (89-72-164-138.dynamic.chello.pl [89.72.164.138])
	by mail.messagingengine.com (Postfix) with ESMTPA id 1D92368013E;
	Thu,  5 Nov 2015 09:22:30 -0500 (EST)
To: Paul Durrant <Paul.Durrant@citrix.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <56398BC0.1040909@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F660BB6@AMSPEX01CL01.citrite.net>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
Message-ID: <563B6633.9030901@invisiblethingslab.com>
Date: Thu, 5 Nov 2015 15:22:43 +0100
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.3.0
MIME-Version: 1.0
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F660BB6@AMSPEX01CL01.citrite.net>
Content-Length:1504
Subject: Re: [win-pv-devel] [PATCH 2/2] Add a user mode library wrapper for
 XENIFACE IOCTLs
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

T24gMjAxNS0xMS0wNSAxNDo0OSwgUGF1bCBEdXJyYW50IHdyb3RlOgo+PiAtLS0tLU9yaWdpbmFs
IE1lc3NhZ2UtLS0tLQo+PiBGcm9tOiB3aW4tcHYtZGV2ZWwtYm91bmNlc0BsaXN0cy54ZW5wcm9q
ZWN0Lm9yZyBbbWFpbHRvOndpbi1wdi1kZXZlbC0KPj4gYm91bmNlc0BsaXN0cy54ZW5wcm9qZWN0
Lm9yZ10gT24gQmVoYWxmIE9mIFJhZmFsIFdvamR5bGEKPj4gU2VudDogMDQgTm92ZW1iZXIgMjAx
NSAwNDozOAo+PiBUbzogd2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCj4+IFN1Ympl
Y3Q6IFt3aW4tcHYtZGV2ZWxdIFtQQVRDSCAyLzJdIEFkZCBhIHVzZXIgbW9kZSBsaWJyYXJ5IHdy
YXBwZXIgZm9yCj4+IFhFTklGQUNFIElPQ1RMcwo+Pgo+PiBTaWduZWQtb2ZmLWJ5OiBSYWZhbCBX
b2pkeWxhIDxvbWVnQGludmlzaWJsZXRoaW5nc2xhYi5jb20+Cj4gCj4gRm9yIHNvbWUgcmVhc29u
IHRoaXMgZ290IGJhc2U2NCBlbmNvZGVkIG9uIGdtYW5lIHNvIEkgY2FuJ3QgZWFzaWx5IGFwcGx5
LiBMb29rcyBsaWtlIHlvdSBoYXZlIG5vbi1hc2NpaSBpbiB0aGUgdmN4cHJvaiBmaWxlczoKPiAK
PiArPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPiAKPiBWaXN1YWwgU3R1
ZGlvIGRvZXMgdGhpcyBidXQgZG9lc24ndCBvYmplY3QgdG8gbG9hZGluZyB0aGUgZmlsZXMgaWYg
eW91IHJlbW92ZSBpdC4gU28sIGNvdWxkIHlvdSBjbGVhbiB0aGF0IG91dCBhbmQgcmUtc2VuZCB0
aGUgcGF0Y2g/Cj4gCj4gVGhhbmtzLAo+IAo+ICAgUGF1bAo+IApBaCByaWdodCwgSSBzYXcgdGhp
cyBidXQgZm9yZ290IHRvIHJlbW92ZSB0aGUgQk9NLiBSZXNlbnQgdGhlIGZpeGVkIHZlcnNpb24u
CgotLSAKUmFmYcWCIFdvamR5xYJhClF1YmVzIFRvb2xzIGZvciBXaW5kb3dzIGRldmVsb3Blcgpo
dHRwczovL3d3dy5xdWJlcy1vcy5vcmcvCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwp3aW4tcHYtZGV2ZWwgbWFpbGluZyBsaXN0Cndpbi1wdi1kZXZlbEBs
aXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwOi8vbGlzdHMueGVucHJvamVjdC5vcmcvY2dpLWJpbi9t
YWlsbWFuL2xpc3RpbmZvL3dpbi1wdi1kZXZlbA==

From win-pv-devel-bounces@lists.xenproject.org Thu Nov 05 16:05:35 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Nov 2015 16:05:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZuN2c-0003nH-1a; Thu, 05 Nov 2015 16:05:34 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1ZuN2a-0003n8-UG
	for win-pv-devel@lists.xenproject.org; Thu, 05 Nov 2015 16:05:33 +0000
Received: from [85.158.137.68] by server-12.bemta-3.messagelabs.com id
	CB/4C-14900-9E56B365; Thu, 05 Nov 2015 14:21:29 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-6.tower-31.messagelabs.com!1446733287!1259930!1
X-Originating-IP: [66.111.4.27]
X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: 
	VHJ1c3RlZCBJUDogNjYuMTExLjQuMjcgPT4gODQ2Mw==\n
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 44578 invoked from network); 5 Nov 2015 14:21:28 -0000
Received: from out3-smtp.messagingengine.com (HELO
	out3-smtp.messagingengine.com) (66.111.4.27)
	by server-6.tower-31.messagelabs.com with AES256-GCM-SHA384 encrypted
	SMTP; 5 Nov 2015 14:21:28 -0000
Received: from compute1.internal (compute1.nyi.internal [10.202.2.41])
	by mailout.nyi.internal (Postfix) with ESMTP id 1CC43221A1
	for <win-pv-devel@lists.xenproject.org>;
	Thu,  5 Nov 2015 09:21:26 -0500 (EST)
Received: from frontend2 ([10.202.2.161])
	by compute1.internal (MEProxy); Thu, 05 Nov 2015 09:21:27 -0500
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=mesmtp; bh=rGsIG6/4lKoqJT7MK2d8dyYszwc=; b=XORTGc
	pc+UqtcrCJ9YHoqZ+8RcS7bQAXfGhzNFVDIaDG4ZARduNMm6e3KSIRhbowQRwZiH
	COMREt3aOffjM9BS6kK1EN+XBJuXMXRwJUVmgf+yAUEzAeO82+gO9l0zFxfhat0m
	m7mLxfWBMYmbavXPWsmOieF6MNav4DlNLK+yc=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=smtpout; bh=rGsIG6/4lKoqJT7MK2d8dyYszwc=; b=u1co/
	SR4pr0HmTd6kiuLbTdq/S85T8TptkJ+dw5x2TPUqh8eiF9nTztbJpylb6c81uFaG
	BL9zNYrRmooNOodA6cQk8WhJJVTC55356L8xCB2qn3LpVZvaLXcwzEJH2N9FZki9
	1hY44+Z3rfVQzNxNUDyCvsDPdmo2Ie9fNCNMiU=
X-Sasl-enc: mdJLl94GuIwytKVMaSWO7DSVt1aTgAc8kyFiv7g247TY 1446733285
Received: from [192.168.0.3] (89-72-164-138.dynamic.chello.pl [89.72.164.138])
	by mail.messagingengine.com (Postfix) with ESMTPA id C6102680134
	for <win-pv-devel@lists.xenproject.org>;
	Thu,  5 Nov 2015 09:21:25 -0500 (EST)
To: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
X-Enigmail-Draft-Status: N1010
Message-ID: <563B65F1.2020606@invisiblethingslab.com>
Date: Thu, 5 Nov 2015 15:21:37 +0100
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.3.0
MIME-Version: 1.0
Subject: [win-pv-devel] [PATCH] Add a user mode library wrapper for XENIFACE
	IOCTLs
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

Signed-off-by: Rafal Wojdyla <omeg@invisiblethingslab.com>
---
 include/xencontrol.h                         | 342 ++++++++++
 src/xencontrol/xencontrol.c                  | 915 +++++++++++++++++++++++++++
 src/xencontrol/xencontrol.rc                 |  24 +
 src/xencontrol/xencontrol_private.h          |  49 ++
 vs2013/xencontrol.props                      |  84 +++
 vs2013/xencontrol/xencontrol.vcxproj         |  62 ++
 vs2013/xencontrol/xencontrol.vcxproj.filters |  13 +
 vs2013/xeniface.sln                          |  38 ++
 8 files changed, 1527 insertions(+)
 create mode 100644 include/xencontrol.h
 create mode 100644 src/xencontrol/xencontrol.c
 create mode 100644 src/xencontrol/xencontrol.rc
 create mode 100644 src/xencontrol/xencontrol_private.h
 create mode 100644 vs2013/xencontrol.props
 create mode 100644 vs2013/xencontrol/xencontrol.vcxproj
 create mode 100644 vs2013/xencontrol/xencontrol.vcxproj.filters

diff --git a/include/xencontrol.h b/include/xencontrol.h
new file mode 100644
index 0000000..0a2f8f2
--- /dev/null
+++ b/include/xencontrol.h
@@ -0,0 +1,342 @@
+#ifndef _XENCONTROL_H_
+#define _XENCONTROL_H_
+
+#include <windows.h>
+#include <varargs.h>
+#include "xeniface_ioctls.h"
+
+#ifdef XENCONTROL_EXPORTS
+#    define XENCONTROL_API __declspec(dllexport)
+#else
+#    define XENCONTROL_API __declspec(dllimport)
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*! \typedef PXENCONTROL_CONTEXT
+    \brief Library handle representing a Xen Interface session
+*/
+struct _XENCONTROL_CONTEXT;
+typedef struct _XENCONTROL_CONTEXT *PXENCONTROL_CONTEXT;
+
+/*! \typedef XENCONTROL_LOG_LEVEL
+    \brief Log levels used by the library
+*/
+typedef enum
+_XENCONTROL_LOG_LEVEL {
+    XLL_ERROR = 1,
+    XLL_WARNING,
+    XLL_INFO,
+    XLL_DEBUG,
+    XLL_TRACE,
+} XENCONTROL_LOG_LEVEL;
+
+/*! \typedef XENCONTROL_LOGGER
+    \brief Callback for receiving diagnostic messages from the library
+*/
+typedef void
+XENCONTROL_LOGGER(
+    IN  XENCONTROL_LOG_LEVEL LogLevel,
+    IN  const CHAR *Function,
+    IN  const WCHAR *Message,
+    IN  va_list Args
+    );
+
+/*! \brief Register a callback for receiving library's diagnostic messages
+    \param Xc Xencontrol handle returned by XcOpen()
+    \param Logger Callback to register
+*/
+XENCONTROL_API
+void
+XcRegisterLogger(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  XENCONTROL_LOGGER *Logger
+    );
+
+/*! \brief Set log level threshold for library's diagnostic messages
+    \param Xc Xencontrol handle returned by XcOpen()
+    \param LogLevel Only messages with this level and above will be sent to the logger callback
+*/
+XENCONTROL_API
+void
+XcSetLogLevel(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  XENCONTROL_LOG_LEVEL LogLevel
+    );
+
+/*! \brief Open the Xen Interface device
+    \param Logger Callback for receiving library's diagnostic messages
+    \param Xc Xencontrol handle representing a Xen Interface session
+    \return Error code
+*/
+XENCONTROL_API
+DWORD
+XcOpen(
+    IN  XENCONTROL_LOGGER *Logger,
+    OUT PXENCONTROL_CONTEXT *Xc
+    );
+
+/*! \brief Close the Xen Interface device
+    \param Xc Xencontrol handle returned by XcOpen()
+*/
+XENCONTROL_API
+void
+XcClose(
+    IN  PXENCONTROL_CONTEXT Xc
+    );
+
+/*! \brief Open an unbound event channel
+    \param Xc Xencontrol handle returned by XcOpen()
+    \param RemoteDomain ID of a remote domain that will bind the channel
+    \param Event Handle to an event object that will receive event channel notifications
+    \param Mask Set to TRUE if the event channel should be initially masked
+    \param LocalPort Port number that is assigned to the event channel
+    \return Error code
+*/
+XENCONTROL_API
+DWORD
+XcEvtchnBindUnbound(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  USHORT RemoteDomain,
+    IN  HANDLE Event,
+    IN  BOOL Mask,
+    OUT ULONG *LocalPort
+    );
+
+/*! \brief Open an event channel that was already bound by a remote domain
+    \param Xc Xencontrol handle returned by XcOpen()
+    \param RemoteDomain ID of a remote domain that has already bound the channel
+    \param RemotePort Port number that is assigned to the event channel in the \a RemoteDomain
+    \param Event Handle to an event that will receive event channel notifications
+    \param Mask Set to TRUE if the event object channel should be initially masked
+    \param LocalPort Port number that is assigned to the event channel
+    \return Error code
+*/
+XENCONTROL_API
+DWORD
+XcEvtchnBindInterdomain(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  USHORT RemoteDomain,
+    IN  ULONG RemotePort,
+    IN  HANDLE Event,
+    IN  BOOL Mask,
+    OUT ULONG *LocalPort
+    );
+
+/*! \brief Close an event channel
+    \param Xc Xencontrol handle returned by XcOpen()
+    \param LocalPort Port number that is assigned to the event channel
+    \return Error code
+*/
+XENCONTROL_API
+DWORD
+XcEvtchnClose(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  ULONG LocalPort
+    );
+
+/*! \brief Notify the remote end of an event channel
+    \param Xc Xencontrol handle returned by XcOpen()
+    \param LocalPort Port number that is assigned to the event channel
+    \return Error code
+*/
+XENCONTROL_API
+DWORD
+XcEvtchnNotify(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  ULONG LocalPort
+    );
+
+/*! \brief Unmask an event channel
+    \param Xc Xencontrol handle returned by XcOpen()
+    \param LocalPort Port number that is assigned to the event channel
+    \return Error code
+*/
+XENCONTROL_API
+DWORD
+XcEvtchnUnmask(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  ULONG LocalPort
+    );
+
+/*! \brief Grant a \a RemoteDomain permission to access local memory pages
+    \param Xc Xencontrol handle returned by XcOpen()
+    \param RemoteDomain ID of a remote domain that is being granted access
+    \param NumberPages Number of 4k pages to grant access to
+    \param NotifyOffset Offset of a byte in the granted region that will be set to 0 when the grant is revoked
+    \param NotifyPort Local port number of an open event channel that will be notified when the grant is revoked
+    \param Flags Grant options
+    \param Address Local user mode address of the granted memory region
+    \param References An array of Xen grant numbers for every granted page
+    \return Error code
+*/
+XENCONTROL_API
+DWORD
+XcGnttabPermitForeignAccess(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  USHORT RemoteDomain,
+    IN  ULONG NumberPages,
+    IN  ULONG NotifyOffset,
+    IN  ULONG NotifyPort,
+    IN  XENIFACE_GNTTAB_PAGE_FLAGS Flags,
+    OUT PVOID *Address,
+    OUT ULONG *References
+    );
+
+/*! \brief Revoke a foreign domain access to previously granted memory region
+    \param Xc Xencontrol handle returned by XcOpen()
+    \param Address Local user mode address of the granted memory region
+    \return Error code
+*/
+XENCONTROL_API
+DWORD
+XcGnttabRevokeForeignAccess(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  PVOID Address
+    );
+
+/*! \brief Map a foreign memory region into the current address space
+    \param Xc Xencontrol handle returned by XcOpen()
+    \param RemoteDomain ID of a remote domain that has granted access to the pages
+    \param NumberPages Number of 4k pages to map
+    \param References An array of Xen grant numbers for every granted page
+    \param NotifyOffset Offset of a byte in the mapped region that will be set to 0 when the region is unmapped
+    \param NotifyPort Local port number of an open event channel that will be notified when the region is unmapped
+    \param Flags Map options
+    \param Address Local user mode address of the mapped memory region
+    \return Error code
+*/
+XENCONTROL_API
+DWORD
+XcGnttabMapForeignPages(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  USHORT RemoteDomain,
+    IN  ULONG NumberPages,
+    IN  PULONG References,
+    IN  ULONG NotifyOffset,
+    IN  ULONG NotifyPort,
+    IN  XENIFACE_GNTTAB_PAGE_FLAGS Flags,
+    OUT PVOID *Address
+    );
+
+/*! \brief Unmap a foreign memory region from the current address space
+    \param Xc Xencontrol handle returned by XcOpen()
+    \param Address Local user mode address of the mapped memory region
+    \return Error code
+*/
+XENCONTROL_API
+DWORD
+XcGnttabUnmapForeignPages(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  PVOID Address
+    );
+
+/*! \brief Read a XenStore key
+    \param Xc Xencontrol handle returned by XcOpen()
+    \param Path Path to the key
+    \param cbValue Size of the \a Value buffer, in bytes
+    \param Value Buffer that receives the value
+    \return Error code
+*/
+XENCONTROL_API
+DWORD
+XcStoreRead(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  PCHAR Path,
+    IN  DWORD cbValue,
+    OUT CHAR *Value
+    );
+
+/*! \brief Write a value to a XenStore key
+    \param Xc Xencontrol handle returned by XcOpen()
+    \param Path Path to the key
+    \param Value Value to write
+    \return Error code
+*/
+XENCONTROL_API
+DWORD
+XcStoreWrite(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  PCHAR Path,
+    IN  PCHAR Value
+    );
+
+/*! \brief Enumerate all immediate child keys of a XenStore key
+    \param Xc Xencontrol handle returned by XcOpen()
+    \param Path Path to the key
+    \param cbOutput Size of the \a Output buffer, in bytes
+    \param Output Buffer that receives a NUL-separated child key names
+    \return Error code
+*/
+XENCONTROL_API
+DWORD
+XcStoreDirectory(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  PCHAR Path,
+    IN  DWORD cbOutput,
+    OUT CHAR *Output
+    );
+
+/*! \brief Remove a XenStore key
+    \param Xc Xencontrol handle returned by XcOpen()
+    \param Path Path to the key
+    \return Error code
+*/
+XENCONTROL_API
+DWORD
+XcStoreRemove(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  PCHAR Path
+    );
+
+/*! \brief Set permissions of a XenStore key
+    \param Xc Xencontrol handle returned by XcOpen()
+    \param Path Path to the key
+    \param Count Number of permissions
+    \param Permissions Array of permissions to set
+    \return Error code
+*/
+XENCONTROL_API
+DWORD
+XcStoreSetPermissions(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  PCHAR Path,
+    IN  ULONG Count,
+    IN  PXENIFACE_STORE_PERMISSION Permissions
+    );
+
+/*! \brief Add a XenStore key watch
+    \param Xc Xencontrol handle returned by XcOpen()
+    \param Path Path to the key to be watched
+    \param Event Handle to an event that will be signaled when the watch fires
+    \param Handle An opaque value representing the watch
+    \return Error code
+*/
+XENCONTROL_API
+DWORD
+XcStoreAddWatch(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  PCHAR Path,
+    IN  HANDLE Event,
+    OUT PVOID *Handle
+    );
+
+/*! \brief Remove a XenStore watch
+    \param Xc Xencontrol handle returned by XcOpen()
+    \param Handle Watch handle returned by XcStoreAddWatch()
+    \return Error code
+*/
+XENCONTROL_API
+DWORD
+XcStoreRemoveWatch(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  PVOID Handle
+    );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // _XENCONTROL_H_
diff --git a/src/xencontrol/xencontrol.c b/src/xencontrol/xencontrol.c
new file mode 100644
index 0000000..92ac9d0
--- /dev/null
+++ b/src/xencontrol/xencontrol.c
@@ -0,0 +1,915 @@
+#define INITGUID
+#include <windows.h>
+#include <setupapi.h>
+#include <stdlib.h>
+#include <assert.h>
+
+#include "xencontrol.h"
+#include "xencontrol_private.h"
+
+BOOL APIENTRY
+DllMain(
+    IN  HMODULE Module,
+    IN  DWORD ReasonForCall,
+    IN  LPVOID Reserved
+)
+{
+    return TRUE;
+}
+
+static void
+_Log(
+    IN  XENCONTROL_LOGGER *Logger,
+    IN  XENCONTROL_LOG_LEVEL LogLevel,
+    IN  XENCONTROL_LOG_LEVEL CurrentLogLevel,
+    IN  PCHAR Function,
+    IN  PWCHAR Format,
+    ...
+    )
+{
+    va_list Args;
+    DWORD LastError;
+
+    if (Logger == NULL)
+        return;
+
+    if (LogLevel > CurrentLogLevel)
+        return;
+
+    LastError = GetLastError();
+    va_start(Args, Format);
+    Logger(LogLevel, Function, Format, Args);
+    va_end(Args);
+    SetLastError(LastError);
+}
+
+static void
+_LogMultiSz(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  PCHAR Caller,
+    IN  XENCONTROL_LOG_LEVEL Level,
+    IN  PCHAR MultiSz
+    )
+{
+    PCHAR Ptr;
+    ULONG Len;
+
+    for (Ptr = MultiSz; *Ptr;) {
+        Len = (ULONG)strlen(Ptr);
+        _Log(Xc->Logger, Level, Xc->LogLevel, Caller, L"%S", Ptr);
+        Ptr += (Len + 1);
+    }
+}
+
+void
+XcRegisterLogger(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  XENCONTROL_LOGGER *Logger
+    )
+{
+    Xc->Logger = Logger;
+}
+
+void
+XcSetLogLevel(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  XENCONTROL_LOG_LEVEL LogLevel
+    )
+{
+    Xc->LogLevel = LogLevel;
+}
+
+DWORD
+XcOpen(
+    IN  XENCONTROL_LOGGER *Logger,
+    OUT PXENCONTROL_CONTEXT *Xc
+    )
+{
+    HDEVINFO DevInfo;
+    SP_DEVICE_INTERFACE_DATA InterfaceData;
+    SP_DEVICE_INTERFACE_DETAIL_DATA *DetailData = NULL;
+    DWORD BufferSize;
+    PXENCONTROL_CONTEXT Context;
+
+    Context = malloc(sizeof(*Context));
+    if (Context == NULL)
+        return ERROR_NOT_ENOUGH_MEMORY;
+
+    Context->Logger = Logger;
+    Context->LogLevel = XLL_INFO;
+    Context->RequestId = 1;
+    InitializeListHead(&Context->RequestList);
+    InitializeCriticalSection(&Context->RequestListLock);
+
+    DevInfo = SetupDiGetClassDevs(&GUID_INTERFACE_XENIFACE, 0, NULL, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
+    if (DevInfo == INVALID_HANDLE_VALUE) {
+        _Log(Logger, XLL_ERROR, Context->LogLevel, __FUNCTION__,
+             L"XENIFACE device class doesn't exist");
+        goto fail;
+    }
+
+    InterfaceData.cbSize = sizeof(InterfaceData);
+    if (!SetupDiEnumDeviceInterfaces(DevInfo, NULL, &GUID_INTERFACE_XENIFACE, 0, &InterfaceData)) {
+        _Log(Logger, XLL_ERROR, Context->LogLevel, __FUNCTION__,
+             L"Failed to enumerate XENIFACE devices");
+        goto fail;
+    }
+
+    SetupDiGetDeviceInterfaceDetail(DevInfo, &InterfaceData, NULL, 0, &BufferSize, NULL);
+    if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) {
+        _Log(Logger, XLL_ERROR, Context->LogLevel, __FUNCTION__,
+             L"Failed to get buffer size for device details");
+        goto fail;
+    }
+
+    // Using 'BufferSize' from failed function call
+#pragma warning(suppress: 6102)
+    DetailData = (SP_DEVICE_INTERFACE_DETAIL_DATA *)malloc(BufferSize);
+    if (!DetailData) {
+        SetLastError(ERROR_OUTOFMEMORY);
+        goto fail;
+    }
+
+    DetailData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
+
+    if (!SetupDiGetDeviceInterfaceDetail(DevInfo, &InterfaceData, DetailData, BufferSize, NULL, NULL)) {
+        _Log(Logger, XLL_ERROR, Context->LogLevel, __FUNCTION__,
+             L"Failed to get XENIFACE device path");
+        goto fail;
+    }
+
+    Context->XenIface = CreateFile(DetailData->DevicePath,
+                                   FILE_GENERIC_READ | FILE_GENERIC_WRITE,
+                                   0,
+                                   NULL,
+                                   OPEN_EXISTING,
+                                   FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
+                                   NULL);
+
+    if (Context->XenIface == INVALID_HANDLE_VALUE) {
+        _Log(Logger, XLL_ERROR, Context->LogLevel, __FUNCTION__,
+             L"Failed to open XENIFACE device, path: %s", DetailData->DevicePath);
+        goto fail;
+    }
+
+    _Log(Logger, XLL_ERROR, Context->LogLevel, __FUNCTION__,
+         L"XenIface handle: %p", Context->XenIface);
+
+    free(DetailData);
+    *Xc = Context;
+    return ERROR_SUCCESS;
+
+fail:
+    _Log(Logger, XLL_ERROR, Context->LogLevel, __FUNCTION__,
+         L"Error: 0x%x", GetLastError());
+
+    free(DetailData);
+    return GetLastError();
+}
+
+void
+XcClose(
+    IN  PXENCONTROL_CONTEXT Xc
+    )
+{
+    CloseHandle(Xc->XenIface);
+    DeleteCriticalSection(&Xc->RequestListLock);
+    free(Xc);
+}
+
+DWORD
+XcEvtchnBindUnbound(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  USHORT RemoteDomain,
+    IN  HANDLE Event,
+    IN  BOOL Mask,
+    OUT ULONG *LocalPort
+    )
+{
+    XENIFACE_EVTCHN_BIND_UNBOUND_IN In;
+    XENIFACE_EVTCHN_BIND_UNBOUND_OUT Out;
+    DWORD Returned;
+    BOOL Success;
+
+    In.RemoteDomain = RemoteDomain;
+    In.Event = Event;
+    In.Mask = !!Mask;
+
+    Log(XLL_DEBUG, L"RemoteDomain: %d, Event: %p, Mask: %d", RemoteDomain, Event, Mask);
+    Success = DeviceIoControl(Xc->XenIface,
+                              IOCTL_XENIFACE_EVTCHN_BIND_UNBOUND,
+                              &In, sizeof(In),
+                              &Out, sizeof(Out),
+                              &Returned,
+                              NULL);
+
+    if (!Success) {
+        Log(XLL_ERROR, L"IOCTL_XENIFACE_EVTCHN_BIND_UNBOUND_PORT failed");
+        goto fail;
+    }
+
+    *LocalPort = Out.LocalPort;
+    Log(XLL_DEBUG, L"LocalPort: %lu", *LocalPort);
+
+    return ERROR_SUCCESS;
+
+fail:
+    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
+    return GetLastError();
+}
+
+DWORD
+XcEvtchnBindInterdomain(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  USHORT RemoteDomain,
+    IN  ULONG RemotePort,
+    IN  HANDLE Event,
+    IN  BOOL Mask,
+    OUT ULONG *LocalPort
+    )
+{
+    XENIFACE_EVTCHN_BIND_INTERDOMAIN_IN In;
+    XENIFACE_EVTCHN_BIND_INTERDOMAIN_OUT Out;
+    DWORD Returned;
+    BOOL Success;
+
+    In.RemoteDomain = RemoteDomain;
+    In.RemotePort = RemotePort;
+    In.Event = Event;
+    In.Mask = !!Mask;
+
+    Log(XLL_DEBUG, L"RemoteDomain: %d, RemotePort %lu, Event: %p, Mask: %d",
+        RemoteDomain, RemotePort, Event, Mask);
+    Success = DeviceIoControl(Xc->XenIface,
+                              IOCTL_XENIFACE_EVTCHN_BIND_INTERDOMAIN,
+                              &In, sizeof(In),
+                              &Out, sizeof(Out),
+                              &Returned,
+                              NULL);
+
+    if (!Success) {
+        Log(XLL_ERROR, L"IOCTL_XENIFACE_EVTCHN_BIND_INTERDOMAIN failed");
+        goto fail;
+    }
+
+    *LocalPort = Out.LocalPort;
+    Log(XLL_DEBUG, L"LocalPort: %lu", *LocalPort);
+
+    return ERROR_SUCCESS;
+
+fail:
+    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
+    return GetLastError();
+}
+
+DWORD
+XcEvtchnClose(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  ULONG LocalPort
+    )
+{
+    XENIFACE_EVTCHN_CLOSE_IN In;
+    DWORD Returned;
+    BOOL Success;
+
+    In.LocalPort = LocalPort;
+
+    Log(XLL_DEBUG, L"LocalPort: %lu", LocalPort);
+    Success = DeviceIoControl(Xc->XenIface,
+                              IOCTL_XENIFACE_EVTCHN_CLOSE,
+                              &In, sizeof(In),
+                              NULL, 0,
+                              &Returned,
+                              NULL);
+
+    if (!Success) {
+        Log(XLL_ERROR, L"IOCTL_XENIFACE_EVTCHN_CLOSE failed");
+        goto fail;
+    }
+
+    return ERROR_SUCCESS;
+
+fail:
+    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
+    return GetLastError();
+}
+
+DWORD
+XcEvtchnNotify(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  ULONG LocalPort
+    )
+{
+    XENIFACE_EVTCHN_NOTIFY_IN In;
+    DWORD Returned;
+    BOOL Success;
+
+    In.LocalPort = LocalPort;
+
+    Log(XLL_DEBUG, L"LocalPort: %lu", LocalPort);
+    Success = DeviceIoControl(Xc->XenIface,
+                              IOCTL_XENIFACE_EVTCHN_NOTIFY,
+                              &In, sizeof(In),
+                              NULL, 0,
+                              &Returned,
+                              NULL);
+
+    if (!Success) {
+        Log(XLL_ERROR, L"IOCTL_XENIFACE_EVTCHN_NOTIFY failed");
+        goto fail;
+    }
+
+    return ERROR_SUCCESS;
+
+fail:
+    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
+    return GetLastError();
+}
+
+DWORD
+XcEvtchnUnmask(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  ULONG LocalPort
+    )
+{
+    XENIFACE_EVTCHN_UNMASK_IN In;
+    DWORD Returned;
+    BOOL Success;
+
+    In.LocalPort = LocalPort;
+
+    Log(XLL_DEBUG, L"LocalPort: %lu", LocalPort);
+    Success = DeviceIoControl(Xc->XenIface,
+                              IOCTL_XENIFACE_EVTCHN_UNMASK,
+                              &In, sizeof(In),
+                              NULL, 0,
+                              &Returned,
+                              NULL);
+
+    if (!Success) {
+        Log(XLL_ERROR, L"IOCTL_XENIFACE_EVTCHN_UNMASK failed");
+        goto fail;
+    }
+
+    return ERROR_SUCCESS;
+
+fail:
+    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
+    return GetLastError();
+}
+
+static PXENCONTROL_GNTTAB_REQUEST
+FindRequest(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  PVOID Address
+    )
+{
+    PLIST_ENTRY Entry;
+    PXENCONTROL_GNTTAB_REQUEST ReturnRequest = NULL;
+
+    EnterCriticalSection(&Xc->RequestListLock);
+    Entry = Xc->RequestList.Flink;
+    while (Entry != &Xc->RequestList) {
+        PXENCONTROL_GNTTAB_REQUEST Request = CONTAINING_RECORD(Entry, XENCONTROL_GNTTAB_REQUEST, ListEntry);
+
+        if (Request->Address == Address) {
+            ReturnRequest = Request;
+            break;
+        }
+
+        Entry = Entry->Flink;
+    }
+    LeaveCriticalSection(&Xc->RequestListLock);
+
+    return ReturnRequest;
+}
+
+DWORD
+XcGnttabPermitForeignAccess(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  USHORT RemoteDomain,
+    IN  ULONG NumberPages,
+    IN  ULONG NotifyOffset,
+    IN  ULONG NotifyPort,
+    IN  XENIFACE_GNTTAB_PAGE_FLAGS Flags,
+    OUT PVOID *Address,
+    OUT ULONG *References
+    )
+{
+    XENIFACE_GNTTAB_PERMIT_FOREIGN_ACCESS_IN In;
+    XENIFACE_GNTTAB_PERMIT_FOREIGN_ACCESS_OUT *Out;
+    PXENCONTROL_GNTTAB_REQUEST Request;
+    DWORD Returned, Size;
+    BOOL Success;
+    DWORD Status;
+
+    // lock the whole operation to not generate duplicate IDs
+    EnterCriticalSection(&Xc->RequestListLock);
+
+    In.RequestId = Xc->RequestId;
+    In.RemoteDomain = RemoteDomain;
+    In.NumberPages = NumberPages;
+    In.NotifyOffset = NotifyOffset;
+    In.NotifyPort = NotifyPort;
+    In.Flags = Flags;
+
+    Size = (ULONG)FIELD_OFFSET(XENIFACE_GNTTAB_PERMIT_FOREIGN_ACCESS_OUT, References[NumberPages]);
+    Out = malloc(Size);
+    Request = malloc(sizeof(*Request));
+
+    Status = ERROR_OUTOFMEMORY;
+    if (!Request || !Out)
+        goto fail;
+
+    ZeroMemory(Request, sizeof(*Request));
+    Request->Id = In.RequestId;
+
+    Log(XLL_DEBUG, L"Id %lu, RemoteDomain: %d, NumberPages: %lu, NotifyOffset: 0x%x, NotifyPort: %lu, Flags: 0x%x",
+        In.RequestId, RemoteDomain, NumberPages, NotifyOffset, NotifyPort, Flags);
+
+    Success = DeviceIoControl(Xc->XenIface,
+                              IOCTL_XENIFACE_GNTTAB_PERMIT_FOREIGN_ACCESS,
+                              &In, sizeof(In),
+                              Out, Size,
+                              &Returned,
+                              &Request->Overlapped);
+
+    Status = GetLastError();
+    // this IOCTL is expected to be pending on success
+    if (!Success) {
+        if (Status != ERROR_IO_PENDING) {
+            Log(XLL_ERROR, L"IOCTL_XENIFACE_GNTTAB_GRANT_PAGES failed");
+            goto fail;
+        }
+    } else {
+        Log(XLL_ERROR, L"IOCTL_XENIFACE_GNTTAB_GRANT_PAGES not pending");
+        Status = ERROR_UNIDENTIFIED_ERROR;
+        goto fail;
+    }
+
+    Request->Address = Out->Address;
+
+    InsertTailList(&Xc->RequestList, &Request->ListEntry);
+    Xc->RequestId++;
+    LeaveCriticalSection(&Xc->RequestListLock);
+
+    *Address = Out->Address;
+    memcpy(References, &Out->References, NumberPages * sizeof(ULONG));
+    Log(XLL_DEBUG, L"Address: %p", *Address);
+    for (ULONG i = 0; i < NumberPages; i++)
+        Log(XLL_DEBUG, L"Grant ref[%lu]: %lu", i, Out->References[i]);
+
+    free(Out);
+    return ERROR_SUCCESS;
+
+fail:
+    LeaveCriticalSection(&Xc->RequestListLock);
+    Log(XLL_ERROR, L"Error: 0x%x", Status);
+    free(Out);
+    free(Request);
+    return Status;
+}
+
+DWORD
+XcGnttabRevokeForeignAccess(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  PVOID Address
+    )
+{
+    XENIFACE_GNTTAB_REVOKE_FOREIGN_ACCESS_IN In;
+    PXENCONTROL_GNTTAB_REQUEST Request;
+    DWORD Returned;
+    BOOL Success;
+    DWORD Status;
+
+    Log(XLL_DEBUG, L"Address: %p", Address);
+
+    Status = ERROR_NOT_FOUND;
+    Request = FindRequest(Xc, Address);
+    if (!Request) {
+        Log(XLL_ERROR, L"Address %p not granted", Address);
+        goto fail;
+    }
+
+    In.RequestId = Request->Id;
+
+    Success = DeviceIoControl(Xc->XenIface,
+                              IOCTL_XENIFACE_GNTTAB_REVOKE_FOREIGN_ACCESS,
+                              &In, sizeof(In),
+                              NULL, 0,
+                              &Returned,
+                              NULL);
+
+    Status = GetLastError();
+    if (!Success) {
+        Log(XLL_ERROR, L"IOCTL_XENIFACE_GNTTAB_UNGRANT_PAGES failed");
+        goto fail;
+    }
+
+    EnterCriticalSection(&Xc->RequestListLock);
+    RemoveEntryList(&Request->ListEntry);
+    LeaveCriticalSection(&Xc->RequestListLock);
+    free(Request);
+
+    return Status;
+
+fail:
+    Log(XLL_ERROR, L"Error: %d 0x%x", Status, Status);
+    return Status;
+}
+
+DWORD
+XcGnttabMapForeignPages(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  USHORT RemoteDomain,
+    IN  ULONG NumberPages,
+    IN  PULONG References,
+    IN  ULONG NotifyOffset,
+    IN  ULONG NotifyPort,
+    IN  XENIFACE_GNTTAB_PAGE_FLAGS Flags,
+    OUT PVOID *Address
+    )
+{
+    XENIFACE_GNTTAB_MAP_FOREIGN_PAGES_IN *In;
+    XENIFACE_GNTTAB_MAP_FOREIGN_PAGES_OUT Out;
+    PXENCONTROL_GNTTAB_REQUEST Request;
+    DWORD Returned, Size;
+    BOOL Success;
+    DWORD Status;
+
+    // lock the whole operation to not generate duplicate IDs
+    EnterCriticalSection(&Xc->RequestListLock);
+
+    Status = ERROR_OUTOFMEMORY;
+    Size = (ULONG)FIELD_OFFSET(XENIFACE_GNTTAB_MAP_FOREIGN_PAGES_IN, References[NumberPages]);
+    In = malloc(Size);
+    Request = malloc(sizeof(*Request));
+    if (!In || !Request)
+        goto fail;
+
+    In->RequestId = Xc->RequestId;
+    In->RemoteDomain = RemoteDomain;
+    In->NumberPages = NumberPages;
+    In->NotifyOffset = NotifyOffset;
+    In->NotifyPort = NotifyPort;
+    In->Flags = Flags;
+    memcpy(&In->References, References, NumberPages * sizeof(ULONG));
+
+    ZeroMemory(Request, sizeof(*Request));
+    Request->Id = In->RequestId;
+
+    Log(XLL_DEBUG, L"Id %lu, RemoteDomain: %d, NumberPages: %lu, NotifyOffset: 0x%x, NotifyPort: %lu, Flags: 0x%x",
+        In->RequestId, RemoteDomain, NumberPages, NotifyOffset, NotifyPort, Flags);
+
+    for (ULONG i = 0; i < NumberPages; i++)
+        Log(XLL_DEBUG, L"Grant ref[%lu]: %lu", i, References[i]);
+
+    Success = DeviceIoControl(Xc->XenIface,
+                              IOCTL_XENIFACE_GNTTAB_MAP_FOREIGN_PAGES,
+                              In, Size,
+                              &Out, sizeof(Out),
+                              &Returned,
+                              &Request->Overlapped);
+
+    Status = GetLastError();
+    // this IOCTL is expected to be pending on success
+    if (!Success) {
+        if (Status != ERROR_IO_PENDING) {
+            Log(XLL_ERROR, L"IOCTL_XENIFACE_GNTTAB_MAP_FOREIGN_PAGES failed");
+            goto fail;
+        }
+    } else {
+        Log(XLL_ERROR, L"IOCTL_XENIFACE_GNTTAB_MAP_FOREIGN_PAGES not pending");
+        Status = ERROR_UNIDENTIFIED_ERROR;
+        goto fail;
+    }
+
+    Request->Address = Out.Address;
+    InsertTailList(&Xc->RequestList, &Request->ListEntry);
+    Xc->RequestId++;
+    LeaveCriticalSection(&Xc->RequestListLock);
+
+    *Address = Out.Address;
+
+    Log(XLL_DEBUG, L"Address: %p", *Address);
+
+    free(In);
+    return ERROR_SUCCESS;
+
+fail:
+    LeaveCriticalSection(&Xc->RequestListLock);
+    Log(XLL_ERROR, L"Error: 0x%x", Status);
+    free(In);
+    free(Request);
+    return Status;
+}
+
+DWORD
+XcGnttabUnmapForeignPages(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  PVOID Address
+    )
+{
+    XENIFACE_GNTTAB_UNMAP_FOREIGN_PAGES_IN In;
+    PXENCONTROL_GNTTAB_REQUEST Request;
+    DWORD Returned;
+    BOOL Success;
+    DWORD Status;
+
+    Log(XLL_DEBUG, L"Address: %p", Address);
+
+    Status = ERROR_NOT_FOUND;
+    Request = FindRequest(Xc, Address);
+    if (!Request) {
+        Log(XLL_ERROR, L"Address %p not mapped", Address);
+        goto fail;
+    }
+
+    In.RequestId = Request->Id;
+
+    Success = DeviceIoControl(Xc->XenIface,
+                              IOCTL_XENIFACE_GNTTAB_UNMAP_FOREIGN_PAGES,
+                              &In, sizeof(In),
+                              NULL, 0,
+                              &Returned,
+                              NULL);
+
+    Status = GetLastError();
+    if (!Success) {
+        Log(XLL_ERROR, L"IOCTL_XENIFACE_GNTTAB_UNMAP_FOREIGN_PAGES failed");
+        goto fail;
+    }
+
+    EnterCriticalSection(&Xc->RequestListLock);
+    RemoveEntryList(&Request->ListEntry);
+    LeaveCriticalSection(&Xc->RequestListLock);
+    free(Request);
+
+    return Status;
+
+fail:
+    Log(XLL_ERROR, L"Error: 0x%x", Status);
+    return Status;
+}
+
+DWORD
+XcStoreRead(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  PSTR Path,
+    IN  DWORD cbValue,
+    OUT CHAR *Value
+    )
+{
+    DWORD Returned;
+    BOOL Success;
+
+    Log(XLL_DEBUG, L"Path: '%S'", Path);
+    Success = DeviceIoControl(Xc->XenIface,
+                              IOCTL_XENIFACE_STORE_READ,
+                              Path, (DWORD)strlen(Path) + 1,
+                              Value, cbValue,
+                              &Returned,
+                              NULL);
+
+    if (!Success) {
+        Log(XLL_ERROR, L"IOCTL_XENIFACE_STORE_READ failed");
+        goto fail;
+    }
+
+    Log(XLL_DEBUG, L"Value: '%S'", Value);
+
+    return ERROR_SUCCESS;
+
+fail:
+    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
+    return GetLastError();
+}
+
+DWORD
+XcStoreWrite(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  PCHAR Path,
+    IN  PCHAR Value
+    )
+{
+    PCHAR Buffer;
+    DWORD cbBuffer;
+    DWORD Returned;
+    BOOL Success;
+
+    cbBuffer = (DWORD)(strlen(Path) + 1 + strlen(Value) + 1 + 1);
+    Buffer = malloc(cbBuffer);
+    if (!Buffer) {
+        SetLastError(ERROR_OUTOFMEMORY);
+        goto fail;
+    }
+
+    ZeroMemory(Buffer, cbBuffer);
+    memcpy(Buffer, Path, strlen(Path));
+    memcpy(Buffer + strlen(Path) + 1, Value, strlen(Value));
+
+    Log(XLL_DEBUG, L"Path: '%S', Value: '%S'", Path, Value);
+    Success = DeviceIoControl(Xc->XenIface,
+                              IOCTL_XENIFACE_STORE_WRITE,
+                              Buffer, cbBuffer,
+                              NULL, 0,
+                              &Returned,
+                              NULL);
+
+    if (!Success) {
+        Log(XLL_ERROR, L"IOCTL_XENIFACE_STORE_WRITE failed");
+        goto fail;
+    }
+
+    free(Buffer);
+    return ERROR_SUCCESS;
+
+fail:
+    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
+    free(Buffer);
+    return GetLastError();
+}
+
+DWORD
+XcStoreDirectory(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  PCHAR Path,
+    IN  DWORD cbOutput,
+    OUT CHAR *Output
+    )
+{
+    DWORD Returned;
+    BOOL Success;
+
+    Log(XLL_DEBUG, L"Path: '%S'", Path);
+    Success = DeviceIoControl(Xc->XenIface,
+                              IOCTL_XENIFACE_STORE_DIRECTORY,
+                              Path, (DWORD)strlen(Path) + 1,
+                              Output, cbOutput,
+                              &Returned,
+                              NULL);
+
+    if (!Success) {
+        Log(XLL_ERROR, L"IOCTL_XENIFACE_STORE_DIRECTORY failed");
+        goto fail;
+    }
+
+    _LogMultiSz(Xc, __FUNCTION__, XLL_DEBUG, Output);
+
+    return ERROR_SUCCESS;
+
+fail:
+    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
+    return GetLastError();
+}
+
+DWORD
+XcStoreRemove(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  PCHAR Path
+    )
+{
+    DWORD Returned;
+    BOOL Success;
+
+    Log(XLL_DEBUG, L"Path: '%S'", Path);
+    Success = DeviceIoControl(Xc->XenIface,
+                              IOCTL_XENIFACE_STORE_REMOVE,
+                              Path, (DWORD)strlen(Path) + 1,
+                              NULL, 0,
+                              &Returned,
+                              NULL);
+
+    if (!Success) {
+        Log(XLL_ERROR, L"IOCTL_XENIFACE_STORE_REMOVE failed");
+        goto fail;
+    }
+
+    return ERROR_SUCCESS;
+
+fail:
+    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
+    return GetLastError();
+}
+
+DWORD
+XcStoreSetPermissions(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  PCHAR Path,
+    IN  ULONG Count,
+    IN  PXENIFACE_STORE_PERMISSION Permissions
+    )
+{
+    DWORD Returned, Size;
+    BOOL Success;
+    XENIFACE_STORE_SET_PERMISSIONS_IN *In = NULL;
+
+    Log(XLL_DEBUG, L"Path: '%S', Count: %lu", Path, Count);
+    for (ULONG i = 0; i < Count; i++)
+        Log(XLL_DEBUG, L"Domain: %d, Mask: 0x%x", Permissions[i].Domain, Permissions[i].Mask);
+
+    Size = (ULONG)FIELD_OFFSET(XENIFACE_STORE_SET_PERMISSIONS_IN, Permissions[Count]);
+    In = malloc(Size);
+    if (!In) {
+        SetLastError(ERROR_OUTOFMEMORY);
+        goto fail;
+    }
+
+    In->Path = Path;
+    In->PathLength = (DWORD)strlen(In->Path) + 1;
+    In->NumberPermissions = Count;
+    memcpy(&In->Permissions, Permissions, Count * sizeof(XENIFACE_STORE_PERMISSION));
+
+    Success = DeviceIoControl(Xc->XenIface,
+                              IOCTL_XENIFACE_STORE_SET_PERMISSIONS,
+                              In, Size,
+                              NULL, 0,
+                              &Returned,
+                              NULL);
+
+    if (!Success) {
+        Log(XLL_ERROR, L"IOCTL_XENIFACE_STORE_SET_PERMISSIONS failed");
+        goto fail;
+    }
+
+    free(In);
+    return ERROR_SUCCESS;
+
+fail:
+    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
+    free(In);
+    return GetLastError();
+}
+
+DWORD
+XcStoreAddWatch(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  PCHAR Path,
+    IN  HANDLE Event,
+    OUT PVOID *Handle
+    )
+{
+    DWORD Returned;
+    BOOL Success;
+    XENIFACE_STORE_ADD_WATCH_IN In;
+    XENIFACE_STORE_ADD_WATCH_OUT Out;
+
+    Log(XLL_DEBUG, L"Path: '%S', Event: %p", Path, Event);
+
+    In.Path = Path;
+    In.PathLength = (DWORD)strlen(Path) + 1;
+    In.Event = Event;
+    Success = DeviceIoControl(Xc->XenIface,
+                              IOCTL_XENIFACE_STORE_ADD_WATCH,
+                              &In, sizeof(In),
+                              &Out, sizeof(Out),
+                              &Returned,
+                              NULL);
+
+    if (!Success) {
+        Log(XLL_ERROR, L"IOCTL_XENIFACE_STORE_ADD_WATCH failed");
+        goto fail;
+    }
+
+    *Handle = Out.Context;
+
+    Log(XLL_DEBUG, L"Handle: %p", *Handle);
+
+    return ERROR_SUCCESS;
+
+fail:
+    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
+    return GetLastError();
+}
+
+DWORD
+XcStoreRemoveWatch(
+    IN  PXENCONTROL_CONTEXT Xc,
+    IN  PVOID Handle
+    )
+{
+    DWORD Returned;
+    BOOL Success;
+    XENIFACE_STORE_REMOVE_WATCH_IN In;
+
+    Log(XLL_DEBUG, L"Handle: %p", Handle);
+
+    In.Context = Handle;
+    Success = DeviceIoControl(Xc->XenIface,
+                              IOCTL_XENIFACE_STORE_REMOVE_WATCH,
+                              &In, sizeof(In),
+                              NULL, 0,
+                              &Returned,
+                              NULL);
+
+    if (!Success) {
+        Log(XLL_ERROR, L"IOCTL_XENIFACE_STORE_REMOVE_WATCH failed");
+        goto fail;
+    }
+
+    return ERROR_SUCCESS;
+
+fail:
+    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
+    return GetLastError();
+}
diff --git a/src/xencontrol/xencontrol.rc b/src/xencontrol/xencontrol.rc
new file mode 100644
index 0000000..6c33e84
--- /dev/null
+++ b/src/xencontrol/xencontrol.rc
@@ -0,0 +1,24 @@
+#include <windows.h>
+#include <ntverp.h>
+
+#undef VER_COMPANYNAME_STR
+#undef VER_PRODUCTNAME_STR
+#undef VER_PRODUCTVERSION
+#undef VER_PRODUCTVERSION_STR
+
+#include <version.h>
+
+#define VER_COMPANYNAME_STR         VENDOR_NAME_STR
+#define VER_LEGALCOPYRIGHT_STR      "Copyright (c) Invisible Things Lab"
+
+#define VER_PRODUCTNAME_STR         "XENIFACE"
+#define VER_PRODUCTVERSION          MAJOR_VERSION,MINOR_VERSION,MICRO_VERSION,BUILD_NUMBER
+#define VER_PRODUCTVERSION_STR      MAJOR_VERSION_STR "." MINOR_VERSION_STR "." MICRO_VERSION_STR "." BUILD_NUMBER_STR
+
+#define VER_INTERNALNAME_STR        "XENCONTROL.DLL"
+#define VER_FILEDESCRIPTION_STR     "Xen interface user library"
+
+#define VER_FILETYPE                VFT_DLL
+#define VER_FILESUBTYPE             0
+
+#include <common.ver>
diff --git a/src/xencontrol/xencontrol_private.h b/src/xencontrol/xencontrol_private.h
new file mode 100644
index 0000000..685bcfa
--- /dev/null
+++ b/src/xencontrol/xencontrol_private.h
@@ -0,0 +1,49 @@
+#ifndef _XENCONTROL_PRIVATE_H_
+#define _XENCONTROL_PRIVATE_H_
+
+#include <windows.h>
+#include "xencontrol.h"
+
+#define Log(level, format, ...) \
+        _Log(Xc->Logger, level, Xc->LogLevel, __FUNCTION__, format, __VA_ARGS__)
+
+#define InitializeListHead(ListHead) ( \
+    (ListHead)->Flink = (ListHead)->Blink = (ListHead))
+
+#define InsertTailList(ListHead, Entry) { \
+    PLIST_ENTRY _EX_Blink; \
+    PLIST_ENTRY _EX_ListHead; \
+    _EX_ListHead = (ListHead); \
+    _EX_Blink = _EX_ListHead->Blink; \
+    (Entry)->Flink = _EX_ListHead; \
+    (Entry)->Blink = _EX_Blink; \
+    _EX_Blink->Flink = (Entry); \
+    _EX_ListHead->Blink = (Entry); \
+    }
+
+#define RemoveEntryList(Entry) { \
+    PLIST_ENTRY _EX_Blink; \
+    PLIST_ENTRY _EX_Flink; \
+    _EX_Flink = (Entry)->Flink; \
+    _EX_Blink = (Entry)->Blink; \
+    _EX_Blink->Flink = _EX_Flink; \
+    _EX_Flink->Blink = _EX_Blink; \
+    }
+
+typedef struct _XENCONTROL_CONTEXT {
+    HANDLE XenIface;
+    XENCONTROL_LOGGER *Logger;
+    XENCONTROL_LOG_LEVEL LogLevel;
+    ULONG RequestId;
+    LIST_ENTRY RequestList;
+    CRITICAL_SECTION RequestListLock;
+} XENCONTROL_CONTEXT, *PXENCONTROL_CONTEXT;
+
+typedef struct _XENCONTROL_GNTTAB_REQUEST {
+    LIST_ENTRY  ListEntry;
+    OVERLAPPED  Overlapped;
+    ULONG       Id;
+    PVOID       Address;
+} XENCONTROL_GNTTAB_REQUEST, *PXENCONTROL_GNTTAB_REQUEST;
+
+#endif // _XENCONTROL_PRIVATE_H_
diff --git a/vs2013/xencontrol.props b/vs2013/xencontrol.props
new file mode 100644
index 0000000..22c1704
--- /dev/null
+++ b/vs2013/xencontrol.props
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+
+  <ImportGroup Label="PropertySheets" />
+
+  <PropertyGroup Label="UserMacros" />
+
+  <PropertyGroup>
+    <IncludePath>$(SolutionDir)\..\include;$(IncludePath)</IncludePath>
+    <LibraryPath>$(SolutionDir)\$(Configuration)\$(Platform);$(LibraryPath)</LibraryPath>
+    <OutDir>$(SolutionDir)\$(Configuration)\$(Platform)\</OutDir>
+    <IntDir>$(SolutionDir)\$(ProjectName)\$(Configuration)\$(Platform)\</IntDir>
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+
+  <PropertyGroup Label="Configuration">
+    <LinkIncremental>false</LinkIncremental>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+
+  <PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
+    <RunCodeAnalysis>true</RunCodeAnalysis>
+    <UseDebugLibraries>true</UseDebugLibraries>
+  </PropertyGroup>
+
+  <PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration">
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+  </PropertyGroup>
+
+  <ItemDefinitionGroup>
+    <Link>
+      <AdditionalDependencies>setupapi.lib;ws2_32.lib;shlwapi.lib;wtsapi32.lib;userenv.lib;version.lib;ntdll.lib;kernel32.lib;user32.lib;gdi32.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+    </Link>
+    <ClCompile>
+      <PreprocessorDefinitions>WIN32;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <SDLCheck>true</SDLCheck>
+      <ExceptionHandling>false</ExceptionHandling>
+      <TreatWarningAsError>true</TreatWarningAsError>
+    </ClCompile>
+    <CustomBuildStep>
+      <Command>xcopy /y $(TargetPath) $(SolutionDir)\..\xeniface\$(PlatformTarget)\
+xcopy /y $(TargetDir)$(TargetName).pdb $(SolutionDir)\..\xeniface\$(PlatformTarget)\
+if exist $(TargetDir)$(TargetName).lib xcopy /y $(TargetDir)$(TargetName).lib $(SolutionDir)\..\xeniface\$(PlatformTarget)\</Command>
+    </CustomBuildStep>
+    <CustomBuildStep>
+      <Message>Copying output files</Message>
+    </CustomBuildStep>
+    <CustomBuildStep>
+      <Outputs>$(SolutionDir)\..\xeniface\$(PlatformTarget)$(TargetFileName);$(SolutionDir)\..\xeniface\$(PlatformTarget)$(TargetName).pdb;$(SolutionDir)\..\xeniface\$(PlatformTarget)$(TargetName).lib;%(Outputs)</Outputs>
+    </CustomBuildStep>
+    <CustomBuildStep>
+      <Inputs>$(TargetPath);$(TargetDir)$(TargetName).pdb;$(TargetDir)$(TargetName).lib</Inputs>
+    </CustomBuildStep>
+  </ItemDefinitionGroup>
+
+  <ItemDefinitionGroup Condition="'$(Configuration)'=='Debug'">
+    <ClCompile>
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <Optimization>Disabled</Optimization>
+      <EnablePREfast>true</EnablePREfast>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+    </ClCompile>
+  </ItemDefinitionGroup>
+
+  <ItemDefinitionGroup Condition="'$(Configuration)'=='Release'">
+    <ClCompile>
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+    </ClCompile>
+    <Link>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+    </Link>
+  </ItemDefinitionGroup>
+
+  <ItemGroup />
+</Project>
\ No newline at end of file
diff --git a/vs2013/xencontrol/xencontrol.vcxproj b/vs2013/xencontrol/xencontrol.vcxproj
new file mode 100644
index 0000000..4d91a38
--- /dev/null
+++ b/vs2013/xencontrol/xencontrol.vcxproj
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>xencontrol</RootNamespace>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="..\xencontrol.props" />
+  </ImportGroup>
+  <ItemDefinitionGroup>
+    <ClCompile>
+      <PreprocessorDefinitions>_WINDOWS;_USRDLL;XENCONTROL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\src\xencontrol\xencontrol.c" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\include\xencontrol.h" />
+    <ClInclude Include="..\..\src\xencontrol\xencontrol_private.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="..\..\src\xencontrol\xencontrol.rc" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+  <ProjectExtensions>
+    <VisualStudio>
+      <UserProperties />
+    </VisualStudio>
+  </ProjectExtensions>
+</Project>
\ No newline at end of file
diff --git a/vs2013/xencontrol/xencontrol.vcxproj.filters b/vs2013/xencontrol/xencontrol.vcxproj.filters
new file mode 100644
index 0000000..c6de099
--- /dev/null
+++ b/vs2013/xencontrol/xencontrol.vcxproj.filters
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <ClInclude Include="..\..\include\xencontrol.h" />
+    <ClInclude Include="..\..\src\xencontrol\xencontrol_private.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="..\..\src\xencontrol\xencontrol.rc" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\src\xencontrol\xencontrol.c" />
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/vs2013/xeniface.sln b/vs2013/xeniface.sln
index 3c74c79..76d06b4 100644
--- a/vs2013/xeniface.sln
+++ b/vs2013/xeniface.sln
@@ -17,6 +17,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "package", "package\package.
 		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B} = {2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}
 	EndProjectSection
 EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xencontrol", "xencontrol\xencontrol.vcxproj", "{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Windows 7 Debug|Win32 = Windows 7 Debug|Win32
@@ -165,6 +167,42 @@ Global
 		{9B071A35-897C-477A-AEB7-95F77618A21D}.Windows Vista Release|x64.ActiveCfg = Windows Vista Release|x64
 		{9B071A35-897C-477A-AEB7-95F77618A21D}.Windows Vista Release|x64.Build.0 = Windows Vista Release|x64
 		{9B071A35-897C-477A-AEB7-95F77618A21D}.Windows Vista Release|x64.Deploy.0 = Windows Vista Release|x64
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7 Debug|Win32.ActiveCfg = Debug|Win32
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7 Debug|Win32.Build.0 = Debug|Win32
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7 Debug|Win32.Deploy.0 = Debug|Win32
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7 Debug|x64.ActiveCfg = Debug|x64
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7 Debug|x64.Build.0 = Debug|x64
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7 Debug|x64.Deploy.0 = Debug|x64
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7 Release|Win32.ActiveCfg = Release|Win32
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7 Release|Win32.Build.0 = Release|Win32
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7 Release|Win32.Deploy.0 = Release|Win32
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7 Release|x64.ActiveCfg = Release|x64
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7 Release|x64.Build.0 = Release|x64
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7 Release|x64.Deploy.0 = Release|x64
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Developer Preview Debug|Win32.ActiveCfg = Debug|Win32
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Developer Preview Debug|Win32.Build.0 = Debug|Win32
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Developer Preview Debug|Win32.Deploy.0 = Debug|Win32
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Developer Preview Debug|x64.ActiveCfg = Debug|x64
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Developer Preview Debug|x64.Build.0 = Debug|x64
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Developer Preview Debug|x64.Deploy.0 = Debug|x64
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Developer Preview Release|Win32.ActiveCfg = Release|Win32
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Developer Preview Release|Win32.Build.0 = Release|Win32
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Developer Preview Release|Win32.Deploy.0 = Release|Win32
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Developer Preview Release|x64.ActiveCfg = Release|x64
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Developer Preview Release|x64.Build.0 = Release|x64
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Developer Preview Release|x64.Deploy.0 = Release|x64
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista Debug|Win32.ActiveCfg = Debug|Win32
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista Debug|Win32.Build.0 = Debug|Win32
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista Debug|Win32.Deploy.0 = Debug|Win32
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista Debug|x64.ActiveCfg = Debug|x64
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista Debug|x64.Build.0 = Debug|x64
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista Debug|x64.Deploy.0 = Debug|x64
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista Release|Win32.ActiveCfg = Release|Win32
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista Release|Win32.Build.0 = Release|Win32
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista Release|Win32.Deploy.0 = Release|Win32
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista Release|x64.ActiveCfg = Release|x64
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista Release|x64.Build.0 = Release|x64
+		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista Release|x64.Deploy.0 = Release|x64
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
-- 
1.8.1.msysgit.1



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

From win-pv-devel-bounces@lists.xenproject.org Thu Nov 05 16:24:24 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Nov 2015 16:24:24 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZuNKq-00061d-4L; Thu, 05 Nov 2015 16:24:24 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=744347f87=wei.liu2@citrix.com>)
	id 1ZuNKo-000616-N0; Thu, 05 Nov 2015 16:24:22 +0000
Received: from [85.158.137.68] by server-5.bemta-3.messagelabs.com id
	10/EA-01748-5B28B365; Thu, 05 Nov 2015 16:24:21 +0000
X-Env-Sender: prvs=744347f87=wei.liu2@citrix.com
X-Msg-Ref: server-6.tower-31.messagelabs.com!1446740659!1301327!1
X-Originating-IP: [66.165.176.63]
X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: 
	VHJ1c3RlZCBJUDogNjYuMTY1LjE3Ni42MyA9PiAzMDYwNDg=\n,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 11518 invoked from network); 5 Nov 2015 16:24:20 -0000
Received: from smtp02.citrix.com (HELO SMTP02.CITRIX.COM) (66.165.176.63)
	by server-6.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	5 Nov 2015 16:24:20 -0000
X-IronPort-AV: E=Sophos;i="5.20,248,1444694400"; d="scan'208";a="315934138"
Date: Thu, 5 Nov 2015 16:24:12 +0000
From: Wei Liu <wei.liu2@citrix.com>
To: Lars Kurth <lars.kurth.xen@gmail.com>
Message-ID: <20151105162412.GA4054@zion.uk.xensource.com>
References: <B7204A9D-30E9-429A-B727-8199654981C8@gmail.com>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <B7204A9D-30E9-429A-B727-8199654981C8@gmail.com>
User-Agent: Mutt/1.5.23 (2014-03-12)
X-DLP: MIA2
Cc: Xen-devel <xen-devel@lists.xenproject.org>,
	Win-pv-devel@lists.xenproject.org, wei.liu2@citrix.com,
	mirageos-devel <mirageos-devel@lists.xenproject.org>,
	xen-api@lists.xenproject.org
Subject: Re: [win-pv-devel] [Xen-devel] Hackathon 2016 Location Preferences
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

On Thu, Nov 05, 2015 at 03:21:18PM +0000, Lars Kurth wrote:
> Hi all,
> 
> I wanted to do quick straw-poll regarding Hackathon Locations for next
> year. Before I do this though, I wanted to let you know that the 2016
> Developer Summit will most likely be in Berlin in October (I am in the
> process of finalising space, budget and contract details which will
> need to be approved by the Advisory Board).
> 
> We do have two options for a Hackathon: China (either Shanghai,
> Hangzhou or Beijing - details TBC) and Cambridge, UK. We are still in
> the early planning phase and the budget for the Hackathon has not yet
> been approved. 
> 

I lived in Hangzhou for a while -- it is a nice city in my humble
opinion. :-)

Wei.

> Do let me know of your preference, and I will see whether I can work
> with the vendor(s) who are willing to host the 2016 Hackathon and
> choose a location, which suits a majority of developers.
> 
> Best Regards Lars
> 
> 
> _______________________________________________ Xen-devel mailing list
> Xen-devel@lists.xen.org http://lists.xen.org/xen-devel

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

From win-pv-devel-bounces@lists.xenproject.org Thu Nov 05 16:24:24 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Nov 2015 16:24:24 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZuNKq-00061d-4L; Thu, 05 Nov 2015 16:24:24 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=744347f87=wei.liu2@citrix.com>)
	id 1ZuNKo-000616-N0; Thu, 05 Nov 2015 16:24:22 +0000
Received: from [85.158.137.68] by server-5.bemta-3.messagelabs.com id
	10/EA-01748-5B28B365; Thu, 05 Nov 2015 16:24:21 +0000
X-Env-Sender: prvs=744347f87=wei.liu2@citrix.com
X-Msg-Ref: server-6.tower-31.messagelabs.com!1446740659!1301327!1
X-Originating-IP: [66.165.176.63]
X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: 
	VHJ1c3RlZCBJUDogNjYuMTY1LjE3Ni42MyA9PiAzMDYwNDg=\n,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 11518 invoked from network); 5 Nov 2015 16:24:20 -0000
Received: from smtp02.citrix.com (HELO SMTP02.CITRIX.COM) (66.165.176.63)
	by server-6.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	5 Nov 2015 16:24:20 -0000
X-IronPort-AV: E=Sophos;i="5.20,248,1444694400"; d="scan'208";a="315934138"
Date: Thu, 5 Nov 2015 16:24:12 +0000
From: Wei Liu <wei.liu2@citrix.com>
To: Lars Kurth <lars.kurth.xen@gmail.com>
Message-ID: <20151105162412.GA4054@zion.uk.xensource.com>
References: <B7204A9D-30E9-429A-B727-8199654981C8@gmail.com>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <B7204A9D-30E9-429A-B727-8199654981C8@gmail.com>
User-Agent: Mutt/1.5.23 (2014-03-12)
X-DLP: MIA2
Cc: Xen-devel <xen-devel@lists.xenproject.org>,
	Win-pv-devel@lists.xenproject.org, wei.liu2@citrix.com,
	mirageos-devel <mirageos-devel@lists.xenproject.org>,
	xen-api@lists.xenproject.org
Subject: Re: [win-pv-devel] [Xen-devel] Hackathon 2016 Location Preferences
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

On Thu, Nov 05, 2015 at 03:21:18PM +0000, Lars Kurth wrote:
> Hi all,
> 
> I wanted to do quick straw-poll regarding Hackathon Locations for next
> year. Before I do this though, I wanted to let you know that the 2016
> Developer Summit will most likely be in Berlin in October (I am in the
> process of finalising space, budget and contract details which will
> need to be approved by the Advisory Board).
> 
> We do have two options for a Hackathon: China (either Shanghai,
> Hangzhou or Beijing - details TBC) and Cambridge, UK. We are still in
> the early planning phase and the budget for the Hackathon has not yet
> been approved. 
> 

I lived in Hangzhou for a while -- it is a nice city in my humble
opinion. :-)

Wei.

> Do let me know of your preference, and I will see whether I can work
> with the vendor(s) who are willing to host the 2016 Hackathon and
> choose a location, which suits a majority of developers.
> 
> Best Regards Lars
> 
> 
> _______________________________________________ Xen-devel mailing list
> Xen-devel@lists.xen.org http://lists.xen.org/xen-devel

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

From win-pv-devel-bounces@lists.xenproject.org Thu Nov 05 16:29:37 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Nov 2015 16:29:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZuNPs-0006g0-5m; Thu, 05 Nov 2015 16:29:36 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <anil@recoil.org>)
	id 1ZuNOt-0006Vl-75; Thu, 05 Nov 2015 16:28:35 +0000
Received: from [193.109.254.147] by server-3.bemta-14.messagelabs.com id
	A9/62-25435-2B38B365; Thu, 05 Nov 2015 16:28:34 +0000
X-Env-Sender: anil@recoil.org
X-Msg-Ref: server-7.tower-27.messagelabs.com!1446740913!806608!1
X-Originating-IP: [5.153.225.51]
X-SpamReason: No, hits=0.2 required=7.0 tests=RCVD_ILLEGAL_IP
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 17166 invoked from network); 5 Nov 2015 16:28:33 -0000
Received: from bark.recoil.org (HELO bark.recoil.org) (5.153.225.51)
	by server-7.tower-27.messagelabs.com with DHE-RSA-AES256-GCM-SHA384
	encrypted SMTP; 5 Nov 2015 16:28:33 -0000
Received: by bark.recoil.org (OpenSMTPD) with ESMTPSA id d15c775e
	TLS version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NO; 
	Thu, 5 Nov 2015 16:28:32 +0000 (GMT)
Mime-Version: 1.0 (Mac OS X Mail 9.1 \(3096.5\))
From: Anil Madhavapeddy <anil@recoil.org>
In-Reply-To: <B7204A9D-30E9-429A-B727-8199654981C8@gmail.com>
Date: Thu, 5 Nov 2015 16:28:30 +0000
Message-Id: <93191A34-0F64-4063-982A-D7A132F4ADC5@recoil.org>
References: <B7204A9D-30E9-429A-B727-8199654981C8@gmail.com>
To: Lars Kurth <lars.kurth.xen@gmail.com>
X-Mailer: Apple Mail (2.3096.5)
X-Mailman-Approved-At: Thu, 05 Nov 2015 16:29:34 +0000
Cc: Xen-devel <xen-devel@lists.xenproject.org>,
	Win-pv-devel@lists.xenproject.org,
	mirageos-devel <mirageos-devel@lists.xenproject.org>,
	xen-api@lists.xenproject.org
Subject: Re: [win-pv-devel] [Xen-API] Hackathon 2016 Location Preferences
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

On 5 Nov 2015, at 15:21, Lars Kurth <lars.kurth.xen@gmail.com> wrote:
> 
> Hi all,
> 
> I wanted to do quick straw-poll regarding Hackathon Locations for next year. Before I do this though, I wanted to let you know that the 2016 Developer Summit will most likely be in Berlin in October (I am in the process of finalising space, budget and contract details which will need to be approved by the Advisory Board).
> 
> We do have two options for a Hackathon: China (either Shanghai, Hangzhou or Beijing - details TBC) and Cambridge, UK. We are still in the early planning phase and the budget for the Hackathon has not yet been approved. 

A lot of unikernel hackers could show up if it's in Cambridge, but unfortunately not if it's in China (despite being a much more exciting location!).

best,
Anil


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

From win-pv-devel-bounces@lists.xenproject.org Thu Nov 05 16:29:37 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Nov 2015 16:29:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZuNPs-0006g0-5m; Thu, 05 Nov 2015 16:29:36 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <anil@recoil.org>)
	id 1ZuNOt-0006Vl-75; Thu, 05 Nov 2015 16:28:35 +0000
Received: from [193.109.254.147] by server-3.bemta-14.messagelabs.com id
	A9/62-25435-2B38B365; Thu, 05 Nov 2015 16:28:34 +0000
X-Env-Sender: anil@recoil.org
X-Msg-Ref: server-7.tower-27.messagelabs.com!1446740913!806608!1
X-Originating-IP: [5.153.225.51]
X-SpamReason: No, hits=0.2 required=7.0 tests=RCVD_ILLEGAL_IP
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 17166 invoked from network); 5 Nov 2015 16:28:33 -0000
Received: from bark.recoil.org (HELO bark.recoil.org) (5.153.225.51)
	by server-7.tower-27.messagelabs.com with DHE-RSA-AES256-GCM-SHA384
	encrypted SMTP; 5 Nov 2015 16:28:33 -0000
Received: by bark.recoil.org (OpenSMTPD) with ESMTPSA id d15c775e
	TLS version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NO; 
	Thu, 5 Nov 2015 16:28:32 +0000 (GMT)
Mime-Version: 1.0 (Mac OS X Mail 9.1 \(3096.5\))
From: Anil Madhavapeddy <anil@recoil.org>
In-Reply-To: <B7204A9D-30E9-429A-B727-8199654981C8@gmail.com>
Date: Thu, 5 Nov 2015 16:28:30 +0000
Message-Id: <93191A34-0F64-4063-982A-D7A132F4ADC5@recoil.org>
References: <B7204A9D-30E9-429A-B727-8199654981C8@gmail.com>
To: Lars Kurth <lars.kurth.xen@gmail.com>
X-Mailer: Apple Mail (2.3096.5)
X-Mailman-Approved-At: Thu, 05 Nov 2015 16:29:34 +0000
Cc: Xen-devel <xen-devel@lists.xenproject.org>,
	Win-pv-devel@lists.xenproject.org,
	mirageos-devel <mirageos-devel@lists.xenproject.org>,
	xen-api@lists.xenproject.org
Subject: Re: [win-pv-devel] [Xen-API] Hackathon 2016 Location Preferences
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

On 5 Nov 2015, at 15:21, Lars Kurth <lars.kurth.xen@gmail.com> wrote:
> 
> Hi all,
> 
> I wanted to do quick straw-poll regarding Hackathon Locations for next year. Before I do this though, I wanted to let you know that the 2016 Developer Summit will most likely be in Berlin in October (I am in the process of finalising space, budget and contract details which will need to be approved by the Advisory Board).
> 
> We do have two options for a Hackathon: China (either Shanghai, Hangzhou or Beijing - details TBC) and Cambridge, UK. We are still in the early planning phase and the budget for the Hackathon has not yet been approved. 

A lot of unikernel hackers could show up if it's in Cambridge, but unfortunately not if it's in China (despite being a much more exciting location!).

best,
Anil


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

From win-pv-devel-bounces@lists.xenproject.org Thu Nov 05 16:33:31 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Nov 2015 16:33:31 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZuNTf-0006zz-IN; Thu, 05 Nov 2015 16:33:31 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=744ee64bb=Paul.Durrant@citrix.com>)
	id 1ZuNTd-0006zi-F5; Thu, 05 Nov 2015 16:33:29 +0000
Received: from [85.158.139.211] by server-1.bemta-5.messagelabs.com id
	B8/3E-32615-8D48B365; Thu, 05 Nov 2015 16:33:28 +0000
X-Env-Sender: prvs=744ee64bb=Paul.Durrant@citrix.com
X-Msg-Ref: server-12.tower-206.messagelabs.com!1446741207!1336995!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 24988 invoked from network); 5 Nov 2015 16:33:27 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-12.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	5 Nov 2015 16:33:27 -0000
X-IronPort-AV: E=Sophos;i="5.20,248,1444694400"; 
   d="scan'208";a="7022756"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Lars Kurth <lars.kurth.xen@gmail.com>, Xen-devel
	<xen-devel@lists.xenproject.org>, mirageos-devel
	<mirageos-devel@lists.xenproject.org>, "xen-api@lists.xenproject.org"
	<xen-api@lists.xenproject.org>, "Win-pv-devel@lists.xenproject.org"
	<Win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] Hackathon 2016 Location Preferences
Thread-Index: AQHRF+Betw3u0zFVbUSfAlrWpohHH56NnyXQ
Date: Thu, 5 Nov 2015 16:32:30 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F66130E@AMSPEX01CL01.citrite.net>
References: <B7204A9D-30E9-429A-B727-8199654981C8@gmail.com>
In-Reply-To: <B7204A9D-30E9-429A-B727-8199654981C8@gmail.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] Hackathon 2016 Location Preferences
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> bounces@lists.xenproject.org] On Behalf Of Lars Kurth
> Sent: 05 November 2015 15:21
> To: Xen-devel; mirageos-devel; xen-api@lists.xenproject.org; Win-pv-
> devel@lists.xenproject.org
> Subject: [win-pv-devel] Hackathon 2016 Location Preferences
> 
> Hi all,
> 
> I wanted to do quick straw-poll regarding Hackathon Locations for next year.
> Before I do this though, I wanted to let you know that the 2016 Developer
> Summit will most likely be in Berlin in October (I am in the process of finalising
> space, budget and contract details which will need to be approved by the
> Advisory Board).
> 
> We do have two options for a Hackathon: China (either Shanghai, Hangzhou
> or Beijing - details TBC) and Cambridge, UK. We are still in the early planning
> phase and the budget for the Hackathon has not yet been approved.
> 
> Do let me know of your preference, and I will see whether I can work with
> the vendor(s) who are willing to host the 2016 Hackathon and choose a
> location, which suits a majority of developers.
> 

Since this year's was in Shanghai, my vote would be for Cambridge.

  Paul

> Best Regards
> Lars
> 
> 
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

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

From win-pv-devel-bounces@lists.xenproject.org Thu Nov 05 16:33:31 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Nov 2015 16:33:31 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZuNTf-0006zz-IN; Thu, 05 Nov 2015 16:33:31 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=744ee64bb=Paul.Durrant@citrix.com>)
	id 1ZuNTd-0006zi-F5; Thu, 05 Nov 2015 16:33:29 +0000
Received: from [85.158.139.211] by server-1.bemta-5.messagelabs.com id
	B8/3E-32615-8D48B365; Thu, 05 Nov 2015 16:33:28 +0000
X-Env-Sender: prvs=744ee64bb=Paul.Durrant@citrix.com
X-Msg-Ref: server-12.tower-206.messagelabs.com!1446741207!1336995!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 24988 invoked from network); 5 Nov 2015 16:33:27 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-12.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	5 Nov 2015 16:33:27 -0000
X-IronPort-AV: E=Sophos;i="5.20,248,1444694400"; 
   d="scan'208";a="7022756"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Lars Kurth <lars.kurth.xen@gmail.com>, Xen-devel
	<xen-devel@lists.xenproject.org>, mirageos-devel
	<mirageos-devel@lists.xenproject.org>, "xen-api@lists.xenproject.org"
	<xen-api@lists.xenproject.org>, "Win-pv-devel@lists.xenproject.org"
	<Win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] Hackathon 2016 Location Preferences
Thread-Index: AQHRF+Betw3u0zFVbUSfAlrWpohHH56NnyXQ
Date: Thu, 5 Nov 2015 16:32:30 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F66130E@AMSPEX01CL01.citrite.net>
References: <B7204A9D-30E9-429A-B727-8199654981C8@gmail.com>
In-Reply-To: <B7204A9D-30E9-429A-B727-8199654981C8@gmail.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] Hackathon 2016 Location Preferences
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> bounces@lists.xenproject.org] On Behalf Of Lars Kurth
> Sent: 05 November 2015 15:21
> To: Xen-devel; mirageos-devel; xen-api@lists.xenproject.org; Win-pv-
> devel@lists.xenproject.org
> Subject: [win-pv-devel] Hackathon 2016 Location Preferences
> 
> Hi all,
> 
> I wanted to do quick straw-poll regarding Hackathon Locations for next year.
> Before I do this though, I wanted to let you know that the 2016 Developer
> Summit will most likely be in Berlin in October (I am in the process of finalising
> space, budget and contract details which will need to be approved by the
> Advisory Board).
> 
> We do have two options for a Hackathon: China (either Shanghai, Hangzhou
> or Beijing - details TBC) and Cambridge, UK. We are still in the early planning
> phase and the budget for the Hackathon has not yet been approved.
> 
> Do let me know of your preference, and I will see whether I can work with
> the vendor(s) who are willing to host the 2016 Hackathon and choose a
> location, which suits a majority of developers.
> 

Since this year's was in Shanghai, my vote would be for Cambridge.

  Paul

> Best Regards
> Lars
> 
> 
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

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

From win-pv-devel-bounces@lists.xenproject.org Thu Nov 05 16:34:53 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Nov 2015 16:34:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZuNUy-0007C7-Rv; Thu, 05 Nov 2015 16:34:52 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=744ee64bb=Paul.Durrant@citrix.com>)
	id 1ZuNUx-0007Bw-FB
	for win-pv-devel@lists.xenproject.org; Thu, 05 Nov 2015 16:34:51 +0000
Received: from [85.158.139.211] by server-14.bemta-5.messagelabs.com id
	35/EC-22142-A258B365; Thu, 05 Nov 2015 16:34:50 +0000
X-Env-Sender: prvs=744ee64bb=Paul.Durrant@citrix.com
X-Msg-Ref: server-7.tower-206.messagelabs.com!1446741290!1337701!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 12764 invoked from network); 5 Nov 2015 16:34:50 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-7.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	5 Nov 2015 16:34:50 -0000
X-IronPort-AV: E=Sophos;i="5.20,248,1444694400"; 
   d="scan'208";a="7022944"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: =?utf-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [PATCH 2/2] Add a user mode library wrapper for
	XENIFACE IOCTLs
Thread-Index: AQHRF9VvmCY0OEp03E27yyp4jd5zHp6Nn/YQ
Date: Thu, 5 Nov 2015 16:34:27 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F66131E@AMSPEX01CL01.citrite.net>
References: <56398BC0.1040909@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F660BB6@AMSPEX01CL01.citrite.net>
	<563B6633.9030901@invisiblethingslab.com>
In-Reply-To: <563B6633.9030901@invisiblethingslab.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] [PATCH 2/2] Add a user mode library wrapper for
 XENIFACE IOCTLs
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBSYWZhxYIgV29qZHnFgmEgW21h
aWx0bzpvbWVnQGludmlzaWJsZXRoaW5nc2xhYi5jb21dDQo+IFNlbnQ6IDA1IE5vdmVtYmVyIDIw
MTUgMTQ6MjMNCj4gVG86IFBhdWwgRHVycmFudDsgd2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2pl
Y3Qub3JnDQo+IFN1YmplY3Q6IFJlOiBbd2luLXB2LWRldmVsXSBbUEFUQ0ggMi8yXSBBZGQgYSB1
c2VyIG1vZGUgbGlicmFyeSB3cmFwcGVyIGZvcg0KPiBYRU5JRkFDRSBJT0NUTHMNCj4gDQo+IE9u
IDIwMTUtMTEtMDUgMTQ6NDksIFBhdWwgRHVycmFudCB3cm90ZToNCj4gPj4gLS0tLS1PcmlnaW5h
bCBNZXNzYWdlLS0tLS0NCj4gPj4gRnJvbTogd2luLXB2LWRldmVsLWJvdW5jZXNAbGlzdHMueGVu
cHJvamVjdC5vcmcgW21haWx0bzp3aW4tcHYtZGV2ZWwtDQo+ID4+IGJvdW5jZXNAbGlzdHMueGVu
cHJvamVjdC5vcmddIE9uIEJlaGFsZiBPZiBSYWZhbCBXb2pkeWxhDQo+ID4+IFNlbnQ6IDA0IE5v
dmVtYmVyIDIwMTUgMDQ6MzgNCj4gPj4gVG86IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0
Lm9yZw0KPiA+PiBTdWJqZWN0OiBbd2luLXB2LWRldmVsXSBbUEFUQ0ggMi8yXSBBZGQgYSB1c2Vy
IG1vZGUgbGlicmFyeSB3cmFwcGVyIGZvcg0KPiA+PiBYRU5JRkFDRSBJT0NUTHMNCj4gPj4NCj4g
Pj4gU2lnbmVkLW9mZi1ieTogUmFmYWwgV29qZHlsYSA8b21lZ0BpbnZpc2libGV0aGluZ3NsYWIu
Y29tPg0KPiA+DQo+ID4gRm9yIHNvbWUgcmVhc29uIHRoaXMgZ290IGJhc2U2NCBlbmNvZGVkIG9u
IGdtYW5lIHNvIEkgY2FuJ3QgZWFzaWx5IGFwcGx5Lg0KPiBMb29rcyBsaWtlIHlvdSBoYXZlIG5v
bi1hc2NpaSBpbiB0aGUgdmN4cHJvaiBmaWxlczoNCj4gPg0KPiA+ICs8P3htbCB2ZXJzaW9uPSIx
LjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KPiA+DQo+ID4gVmlzdWFsIFN0dWRpbyBkb2VzIHRoaXMg
YnV0IGRvZXNuJ3Qgb2JqZWN0IHRvIGxvYWRpbmcgdGhlIGZpbGVzIGlmIHlvdSByZW1vdmUNCj4g
aXQuIFNvLCBjb3VsZCB5b3UgY2xlYW4gdGhhdCBvdXQgYW5kIHJlLXNlbmQgdGhlIHBhdGNoPw0K
PiA+DQo+ID4gVGhhbmtzLA0KPiA+DQo+ID4gICBQYXVsDQo+ID4NCj4gQWggcmlnaHQsIEkgc2F3
IHRoaXMgYnV0IGZvcmdvdCB0byByZW1vdmUgdGhlIEJPTS4gUmVzZW50IHRoZSBmaXhlZCB2ZXJz
aW9uLg0KDQpHb3QgaXQgKG9uY2UgbGlzdHMueGVucHJvamVjdC5vcmcgc3ByYW5nIGJhY2sgdG8g
bGlmZSkuIFRoYW5rcywNCg0KICBQYXVsDQoNCj4gDQo+IC0tDQo+IFJhZmHFgiBXb2pkecWCYQ0K
PiBRdWJlcyBUb29scyBmb3IgV2luZG93cyBkZXZlbG9wZXINCj4gaHR0cHM6Ly93d3cucXViZXMt
b3Mub3JnLw0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
d2luLXB2LWRldmVsIG1haWxpbmcgbGlzdAp3aW4tcHYtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5v
cmcKaHR0cDovL2xpc3RzLnhlbnByb2plY3Qub3JnL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby93
aW4tcHYtZGV2ZWw=

From win-pv-devel-bounces@lists.xenproject.org Thu Nov 05 16:34:53 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Nov 2015 16:34:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZuNUy-0007C7-Rv; Thu, 05 Nov 2015 16:34:52 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=744ee64bb=Paul.Durrant@citrix.com>)
	id 1ZuNUx-0007Bw-FB
	for win-pv-devel@lists.xenproject.org; Thu, 05 Nov 2015 16:34:51 +0000
Received: from [85.158.139.211] by server-14.bemta-5.messagelabs.com id
	35/EC-22142-A258B365; Thu, 05 Nov 2015 16:34:50 +0000
X-Env-Sender: prvs=744ee64bb=Paul.Durrant@citrix.com
X-Msg-Ref: server-7.tower-206.messagelabs.com!1446741290!1337701!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 12764 invoked from network); 5 Nov 2015 16:34:50 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-7.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	5 Nov 2015 16:34:50 -0000
X-IronPort-AV: E=Sophos;i="5.20,248,1444694400"; 
   d="scan'208";a="7022944"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: =?utf-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [PATCH 2/2] Add a user mode library wrapper for
	XENIFACE IOCTLs
Thread-Index: AQHRF9VvmCY0OEp03E27yyp4jd5zHp6Nn/YQ
Date: Thu, 5 Nov 2015 16:34:27 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F66131E@AMSPEX01CL01.citrite.net>
References: <56398BC0.1040909@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F660BB6@AMSPEX01CL01.citrite.net>
	<563B6633.9030901@invisiblethingslab.com>
In-Reply-To: <563B6633.9030901@invisiblethingslab.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] [PATCH 2/2] Add a user mode library wrapper for
 XENIFACE IOCTLs
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBSYWZhxYIgV29qZHnFgmEgW21h
aWx0bzpvbWVnQGludmlzaWJsZXRoaW5nc2xhYi5jb21dDQo+IFNlbnQ6IDA1IE5vdmVtYmVyIDIw
MTUgMTQ6MjMNCj4gVG86IFBhdWwgRHVycmFudDsgd2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2pl
Y3Qub3JnDQo+IFN1YmplY3Q6IFJlOiBbd2luLXB2LWRldmVsXSBbUEFUQ0ggMi8yXSBBZGQgYSB1
c2VyIG1vZGUgbGlicmFyeSB3cmFwcGVyIGZvcg0KPiBYRU5JRkFDRSBJT0NUTHMNCj4gDQo+IE9u
IDIwMTUtMTEtMDUgMTQ6NDksIFBhdWwgRHVycmFudCB3cm90ZToNCj4gPj4gLS0tLS1PcmlnaW5h
bCBNZXNzYWdlLS0tLS0NCj4gPj4gRnJvbTogd2luLXB2LWRldmVsLWJvdW5jZXNAbGlzdHMueGVu
cHJvamVjdC5vcmcgW21haWx0bzp3aW4tcHYtZGV2ZWwtDQo+ID4+IGJvdW5jZXNAbGlzdHMueGVu
cHJvamVjdC5vcmddIE9uIEJlaGFsZiBPZiBSYWZhbCBXb2pkeWxhDQo+ID4+IFNlbnQ6IDA0IE5v
dmVtYmVyIDIwMTUgMDQ6MzgNCj4gPj4gVG86IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0
Lm9yZw0KPiA+PiBTdWJqZWN0OiBbd2luLXB2LWRldmVsXSBbUEFUQ0ggMi8yXSBBZGQgYSB1c2Vy
IG1vZGUgbGlicmFyeSB3cmFwcGVyIGZvcg0KPiA+PiBYRU5JRkFDRSBJT0NUTHMNCj4gPj4NCj4g
Pj4gU2lnbmVkLW9mZi1ieTogUmFmYWwgV29qZHlsYSA8b21lZ0BpbnZpc2libGV0aGluZ3NsYWIu
Y29tPg0KPiA+DQo+ID4gRm9yIHNvbWUgcmVhc29uIHRoaXMgZ290IGJhc2U2NCBlbmNvZGVkIG9u
IGdtYW5lIHNvIEkgY2FuJ3QgZWFzaWx5IGFwcGx5Lg0KPiBMb29rcyBsaWtlIHlvdSBoYXZlIG5v
bi1hc2NpaSBpbiB0aGUgdmN4cHJvaiBmaWxlczoNCj4gPg0KPiA+ICs8P3htbCB2ZXJzaW9uPSIx
LjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KPiA+DQo+ID4gVmlzdWFsIFN0dWRpbyBkb2VzIHRoaXMg
YnV0IGRvZXNuJ3Qgb2JqZWN0IHRvIGxvYWRpbmcgdGhlIGZpbGVzIGlmIHlvdSByZW1vdmUNCj4g
aXQuIFNvLCBjb3VsZCB5b3UgY2xlYW4gdGhhdCBvdXQgYW5kIHJlLXNlbmQgdGhlIHBhdGNoPw0K
PiA+DQo+ID4gVGhhbmtzLA0KPiA+DQo+ID4gICBQYXVsDQo+ID4NCj4gQWggcmlnaHQsIEkgc2F3
IHRoaXMgYnV0IGZvcmdvdCB0byByZW1vdmUgdGhlIEJPTS4gUmVzZW50IHRoZSBmaXhlZCB2ZXJz
aW9uLg0KDQpHb3QgaXQgKG9uY2UgbGlzdHMueGVucHJvamVjdC5vcmcgc3ByYW5nIGJhY2sgdG8g
bGlmZSkuIFRoYW5rcywNCg0KICBQYXVsDQoNCj4gDQo+IC0tDQo+IFJhZmHFgiBXb2pkecWCYQ0K
PiBRdWJlcyBUb29scyBmb3IgV2luZG93cyBkZXZlbG9wZXINCj4gaHR0cHM6Ly93d3cucXViZXMt
b3Mub3JnLw0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
d2luLXB2LWRldmVsIG1haWxpbmcgbGlzdAp3aW4tcHYtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5v
cmcKaHR0cDovL2xpc3RzLnhlbnByb2plY3Qub3JnL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby93
aW4tcHYtZGV2ZWw=

From win-pv-devel-bounces@lists.xenproject.org Thu Nov 05 16:49:40 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Nov 2015 16:49:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZuNjG-00085m-N4; Thu, 05 Nov 2015 16:49:38 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=744ee64bb=Paul.Durrant@citrix.com>)
	id 1ZuNjF-00085c-9s
	for win-pv-devel@lists.xenproject.org; Thu, 05 Nov 2015 16:49:37 +0000
Received: from [193.109.254.147] by server-1.bemta-14.messagelabs.com id
	E9/21-28791-0A88B365; Thu, 05 Nov 2015 16:49:36 +0000
X-Env-Sender: prvs=744ee64bb=Paul.Durrant@citrix.com
X-Msg-Ref: server-11.tower-27.messagelabs.com!1446742174!809706!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 56733 invoked from network); 5 Nov 2015 16:49:35 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-11.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	5 Nov 2015 16:49:35 -0000
X-IronPort-AV: E=Sophos;i="5.20,248,1444694400"; 
   d="scan'208";a="7024472"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: =?iso-8859-2?Q?Rafa=B3_Wojdy=B3a?= <omeg@invisiblethingslab.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [PATCH] Add a user mode library wrapper for
	XENIFACE	IOCTLs
Thread-Index: AQHRF+QQJ5B9lIAYf0ufI5DCA4J9556NoV2w
Date: Thu, 5 Nov 2015 16:49:34 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F661401@AMSPEX01CL01.citrite.net>
References: <563B65F1.2020606@invisiblethingslab.com>
In-Reply-To: <563B65F1.2020606@invisiblethingslab.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] [PATCH] Add a user mode library wrapper for
 XENIFACE	IOCTLs
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> bounces@lists.xenproject.org] On Behalf Of Rafal Wojdyla
> Sent: 05 November 2015 14:22
> To: win-pv-devel@lists.xenproject.org
> Subject: [win-pv-devel] [PATCH] Add a user mode library wrapper for
> XENIFACE IOCTLs
> 
> Signed-off-by: Rafal Wojdyla <omeg@invisiblethingslab.com>
> ---
>  include/xencontrol.h                         | 342 ++++++++++
>  src/xencontrol/xencontrol.c                  | 915
> +++++++++++++++++++++++++++
>  src/xencontrol/xencontrol.rc                 |  24 +
>  src/xencontrol/xencontrol_private.h          |  49 ++
>  vs2013/xencontrol.props                      |  84 +++
>  vs2013/xencontrol/xencontrol.vcxproj         |  62 ++
>  vs2013/xencontrol/xencontrol.vcxproj.filters |  13 +
>  vs2013/xeniface.sln                          |  38 ++
>  8 files changed, 1527 insertions(+)
>  create mode 100644 include/xencontrol.h
>  create mode 100644 src/xencontrol/xencontrol.c
>  create mode 100644 src/xencontrol/xencontrol.rc
>  create mode 100644 src/xencontrol/xencontrol_private.h
>  create mode 100644 vs2013/xencontrol.props
>  create mode 100644 vs2013/xencontrol/xencontrol.vcxproj
>  create mode 100644 vs2013/xencontrol/xencontrol.vcxproj.filters
> 
> diff --git a/include/xencontrol.h b/include/xencontrol.h
> new file mode 100644
> index 0000000..0a2f8f2
> --- /dev/null
> +++ b/include/xencontrol.h
> @@ -0,0 +1,342 @@
> +#ifndef _XENCONTROL_H_
> +#define _XENCONTROL_H_
> +
> +#include <windows.h>
> +#include <varargs.h>
> +#include "xeniface_ioctls.h"
> +
> +#ifdef XENCONTROL_EXPORTS
> +#    define XENCONTROL_API __declspec(dllexport)
> +#else
> +#    define XENCONTROL_API __declspec(dllimport)
> +#endif
> +
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
> +
> +/*! \typedef PXENCONTROL_CONTEXT
> +    \brief Library handle representing a Xen Interface session
> +*/
> +struct _XENCONTROL_CONTEXT;
> +typedef struct _XENCONTROL_CONTEXT *PXENCONTROL_CONTEXT;
> +
> +/*! \typedef XENCONTROL_LOG_LEVEL
> +    \brief Log levels used by the library
> +*/
> +typedef enum
> +_XENCONTROL_LOG_LEVEL {
> +    XLL_ERROR = 1,
> +    XLL_WARNING,
> +    XLL_INFO,
> +    XLL_DEBUG,
> +    XLL_TRACE,
> +} XENCONTROL_LOG_LEVEL;
> +
> +/*! \typedef XENCONTROL_LOGGER
> +    \brief Callback for receiving diagnostic messages from the library
> +*/
> +typedef void
> +XENCONTROL_LOGGER(
> +    IN  XENCONTROL_LOG_LEVEL LogLevel,
> +    IN  const CHAR *Function,
> +    IN  const WCHAR *Message,
> +    IN  va_list Args
> +    );
> +
> +/*! \brief Register a callback for receiving library's diagnostic messages
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param Logger Callback to register
> +*/
> +XENCONTROL_API
> +void
> +XcRegisterLogger(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  XENCONTROL_LOGGER *Logger
> +    );
> +
> +/*! \brief Set log level threshold for library's diagnostic messages
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param LogLevel Only messages with this level and above will be sent to
> the logger callback
> +*/
> +XENCONTROL_API
> +void
> +XcSetLogLevel(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  XENCONTROL_LOG_LEVEL LogLevel
> +    );
> +
> +/*! \brief Open the Xen Interface device
> +    \param Logger Callback for receiving library's diagnostic messages
> +    \param Xc Xencontrol handle representing a Xen Interface session
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcOpen(
> +    IN  XENCONTROL_LOGGER *Logger,
> +    OUT PXENCONTROL_CONTEXT *Xc
> +    );
> +
> +/*! \brief Close the Xen Interface device
> +    \param Xc Xencontrol handle returned by XcOpen()
> +*/
> +XENCONTROL_API
> +void
> +XcClose(
> +    IN  PXENCONTROL_CONTEXT Xc
> +    );
> +
> +/*! \brief Open an unbound event channel
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param RemoteDomain ID of a remote domain that will bind the channel
> +    \param Event Handle to an event object that will receive event channel
> notifications
> +    \param Mask Set to TRUE if the event channel should be initially masked
> +    \param LocalPort Port number that is assigned to the event channel
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcEvtchnBindUnbound(

Shouldn't this be XcEvtchnOpenUnbound()? The name seems a little odd.

  Paul

> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  USHORT RemoteDomain,
> +    IN  HANDLE Event,
> +    IN  BOOL Mask,
> +    OUT ULONG *LocalPort
> +    );
> +
> +/*! \brief Open an event channel that was already bound by a remote
> domain
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param RemoteDomain ID of a remote domain that has already bound
> the channel
> +    \param RemotePort Port number that is assigned to the event channel in
> the \a RemoteDomain
> +    \param Event Handle to an event that will receive event channel
> notifications
> +    \param Mask Set to TRUE if the event object channel should be initially
> masked
> +    \param LocalPort Port number that is assigned to the event channel
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcEvtchnBindInterdomain(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  USHORT RemoteDomain,
> +    IN  ULONG RemotePort,
> +    IN  HANDLE Event,
> +    IN  BOOL Mask,
> +    OUT ULONG *LocalPort
> +    );
> +
> +/*! \brief Close an event channel
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param LocalPort Port number that is assigned to the event channel
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcEvtchnClose(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  ULONG LocalPort
> +    );
> +
> +/*! \brief Notify the remote end of an event channel
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param LocalPort Port number that is assigned to the event channel
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcEvtchnNotify(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  ULONG LocalPort
> +    );
> +
> +/*! \brief Unmask an event channel
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param LocalPort Port number that is assigned to the event channel
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcEvtchnUnmask(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  ULONG LocalPort
> +    );
> +
> +/*! \brief Grant a \a RemoteDomain permission to access local memory
> pages
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param RemoteDomain ID of a remote domain that is being granted
> access
> +    \param NumberPages Number of 4k pages to grant access to
> +    \param NotifyOffset Offset of a byte in the granted region that will be set
> to 0 when the grant is revoked
> +    \param NotifyPort Local port number of an open event channel that will
> be notified when the grant is revoked
> +    \param Flags Grant options
> +    \param Address Local user mode address of the granted memory region
> +    \param References An array of Xen grant numbers for every granted
> page
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcGnttabPermitForeignAccess(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  USHORT RemoteDomain,
> +    IN  ULONG NumberPages,
> +    IN  ULONG NotifyOffset,
> +    IN  ULONG NotifyPort,
> +    IN  XENIFACE_GNTTAB_PAGE_FLAGS Flags,
> +    OUT PVOID *Address,
> +    OUT ULONG *References
> +    );
> +
> +/*! \brief Revoke a foreign domain access to previously granted memory
> region
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param Address Local user mode address of the granted memory region
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcGnttabRevokeForeignAccess(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PVOID Address
> +    );
> +
> +/*! \brief Map a foreign memory region into the current address space
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param RemoteDomain ID of a remote domain that has granted access to
> the pages
> +    \param NumberPages Number of 4k pages to map
> +    \param References An array of Xen grant numbers for every granted
> page
> +    \param NotifyOffset Offset of a byte in the mapped region that will be set
> to 0 when the region is unmapped
> +    \param NotifyPort Local port number of an open event channel that will
> be notified when the region is unmapped
> +    \param Flags Map options
> +    \param Address Local user mode address of the mapped memory region
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcGnttabMapForeignPages(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  USHORT RemoteDomain,
> +    IN  ULONG NumberPages,
> +    IN  PULONG References,
> +    IN  ULONG NotifyOffset,
> +    IN  ULONG NotifyPort,
> +    IN  XENIFACE_GNTTAB_PAGE_FLAGS Flags,
> +    OUT PVOID *Address
> +    );
> +
> +/*! \brief Unmap a foreign memory region from the current address space
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param Address Local user mode address of the mapped memory region
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcGnttabUnmapForeignPages(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PVOID Address
> +    );
> +
> +/*! \brief Read a XenStore key
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param Path Path to the key
> +    \param cbValue Size of the \a Value buffer, in bytes
> +    \param Value Buffer that receives the value
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcStoreRead(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PCHAR Path,
> +    IN  DWORD cbValue,
> +    OUT CHAR *Value
> +    );
> +
> +/*! \brief Write a value to a XenStore key
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param Path Path to the key
> +    \param Value Value to write
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcStoreWrite(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PCHAR Path,
> +    IN  PCHAR Value
> +    );
> +
> +/*! \brief Enumerate all immediate child keys of a XenStore key
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param Path Path to the key
> +    \param cbOutput Size of the \a Output buffer, in bytes
> +    \param Output Buffer that receives a NUL-separated child key names
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcStoreDirectory(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PCHAR Path,
> +    IN  DWORD cbOutput,
> +    OUT CHAR *Output
> +    );
> +
> +/*! \brief Remove a XenStore key
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param Path Path to the key
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcStoreRemove(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PCHAR Path
> +    );
> +
> +/*! \brief Set permissions of a XenStore key
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param Path Path to the key
> +    \param Count Number of permissions
> +    \param Permissions Array of permissions to set
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcStoreSetPermissions(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PCHAR Path,
> +    IN  ULONG Count,
> +    IN  PXENIFACE_STORE_PERMISSION Permissions
> +    );
> +
> +/*! \brief Add a XenStore key watch
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param Path Path to the key to be watched
> +    \param Event Handle to an event that will be signaled when the watch
> fires
> +    \param Handle An opaque value representing the watch
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcStoreAddWatch(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PCHAR Path,
> +    IN  HANDLE Event,
> +    OUT PVOID *Handle
> +    );
> +
> +/*! \brief Remove a XenStore watch
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param Handle Watch handle returned by XcStoreAddWatch()
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcStoreRemoveWatch(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PVOID Handle
> +    );
> +
> +#ifdef __cplusplus
> +}
> +#endif
> +
> +#endif // _XENCONTROL_H_
> diff --git a/src/xencontrol/xencontrol.c b/src/xencontrol/xencontrol.c
> new file mode 100644
> index 0000000..92ac9d0
> --- /dev/null
> +++ b/src/xencontrol/xencontrol.c
> @@ -0,0 +1,915 @@
> +#define INITGUID
> +#include <windows.h>
> +#include <setupapi.h>
> +#include <stdlib.h>
> +#include <assert.h>
> +
> +#include "xencontrol.h"
> +#include "xencontrol_private.h"
> +
> +BOOL APIENTRY
> +DllMain(
> +    IN  HMODULE Module,
> +    IN  DWORD ReasonForCall,
> +    IN  LPVOID Reserved
> +)
> +{
> +    return TRUE;
> +}
> +
> +static void
> +_Log(
> +    IN  XENCONTROL_LOGGER *Logger,
> +    IN  XENCONTROL_LOG_LEVEL LogLevel,
> +    IN  XENCONTROL_LOG_LEVEL CurrentLogLevel,
> +    IN  PCHAR Function,
> +    IN  PWCHAR Format,
> +    ...
> +    )
> +{
> +    va_list Args;
> +    DWORD LastError;
> +
> +    if (Logger == NULL)
> +        return;
> +
> +    if (LogLevel > CurrentLogLevel)
> +        return;
> +
> +    LastError = GetLastError();
> +    va_start(Args, Format);
> +    Logger(LogLevel, Function, Format, Args);
> +    va_end(Args);
> +    SetLastError(LastError);
> +}
> +
> +static void
> +_LogMultiSz(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PCHAR Caller,
> +    IN  XENCONTROL_LOG_LEVEL Level,
> +    IN  PCHAR MultiSz
> +    )
> +{
> +    PCHAR Ptr;
> +    ULONG Len;
> +
> +    for (Ptr = MultiSz; *Ptr;) {
> +        Len = (ULONG)strlen(Ptr);
> +        _Log(Xc->Logger, Level, Xc->LogLevel, Caller, L"%S", Ptr);
> +        Ptr += (Len + 1);
> +    }
> +}
> +
> +void
> +XcRegisterLogger(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  XENCONTROL_LOGGER *Logger
> +    )
> +{
> +    Xc->Logger = Logger;
> +}
> +
> +void
> +XcSetLogLevel(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  XENCONTROL_LOG_LEVEL LogLevel
> +    )
> +{
> +    Xc->LogLevel = LogLevel;
> +}
> +
> +DWORD
> +XcOpen(
> +    IN  XENCONTROL_LOGGER *Logger,
> +    OUT PXENCONTROL_CONTEXT *Xc
> +    )
> +{
> +    HDEVINFO DevInfo;
> +    SP_DEVICE_INTERFACE_DATA InterfaceData;
> +    SP_DEVICE_INTERFACE_DETAIL_DATA *DetailData = NULL;
> +    DWORD BufferSize;
> +    PXENCONTROL_CONTEXT Context;
> +
> +    Context = malloc(sizeof(*Context));
> +    if (Context == NULL)
> +        return ERROR_NOT_ENOUGH_MEMORY;
> +
> +    Context->Logger = Logger;
> +    Context->LogLevel = XLL_INFO;
> +    Context->RequestId = 1;
> +    InitializeListHead(&Context->RequestList);
> +    InitializeCriticalSection(&Context->RequestListLock);
> +
> +    DevInfo = SetupDiGetClassDevs(&GUID_INTERFACE_XENIFACE, 0, NULL,
> DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
> +    if (DevInfo == INVALID_HANDLE_VALUE) {
> +        _Log(Logger, XLL_ERROR, Context->LogLevel, __FUNCTION__,
> +             L"XENIFACE device class doesn't exist");
> +        goto fail;
> +    }
> +
> +    InterfaceData.cbSize = sizeof(InterfaceData);
> +    if (!SetupDiEnumDeviceInterfaces(DevInfo, NULL,
> &GUID_INTERFACE_XENIFACE, 0, &InterfaceData)) {
> +        _Log(Logger, XLL_ERROR, Context->LogLevel, __FUNCTION__,
> +             L"Failed to enumerate XENIFACE devices");
> +        goto fail;
> +    }
> +
> +    SetupDiGetDeviceInterfaceDetail(DevInfo, &InterfaceData, NULL, 0,
> &BufferSize, NULL);
> +    if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) {
> +        _Log(Logger, XLL_ERROR, Context->LogLevel, __FUNCTION__,
> +             L"Failed to get buffer size for device details");
> +        goto fail;
> +    }
> +
> +    // Using 'BufferSize' from failed function call
> +#pragma warning(suppress: 6102)
> +    DetailData = (SP_DEVICE_INTERFACE_DETAIL_DATA *)malloc(BufferSize);
> +    if (!DetailData) {
> +        SetLastError(ERROR_OUTOFMEMORY);
> +        goto fail;
> +    }
> +
> +    DetailData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
> +
> +    if (!SetupDiGetDeviceInterfaceDetail(DevInfo, &InterfaceData,
> DetailData, BufferSize, NULL, NULL)) {
> +        _Log(Logger, XLL_ERROR, Context->LogLevel, __FUNCTION__,
> +             L"Failed to get XENIFACE device path");
> +        goto fail;
> +    }
> +
> +    Context->XenIface = CreateFile(DetailData->DevicePath,
> +                                   FILE_GENERIC_READ | FILE_GENERIC_WRITE,
> +                                   0,
> +                                   NULL,
> +                                   OPEN_EXISTING,
> +                                   FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
> +                                   NULL);
> +
> +    if (Context->XenIface == INVALID_HANDLE_VALUE) {
> +        _Log(Logger, XLL_ERROR, Context->LogLevel, __FUNCTION__,
> +             L"Failed to open XENIFACE device, path: %s", DetailData-
> >DevicePath);
> +        goto fail;
> +    }
> +
> +    _Log(Logger, XLL_ERROR, Context->LogLevel, __FUNCTION__,
> +         L"XenIface handle: %p", Context->XenIface);
> +
> +    free(DetailData);
> +    *Xc = Context;
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    _Log(Logger, XLL_ERROR, Context->LogLevel, __FUNCTION__,
> +         L"Error: 0x%x", GetLastError());
> +
> +    free(DetailData);
> +    return GetLastError();
> +}
> +
> +void
> +XcClose(
> +    IN  PXENCONTROL_CONTEXT Xc
> +    )
> +{
> +    CloseHandle(Xc->XenIface);
> +    DeleteCriticalSection(&Xc->RequestListLock);
> +    free(Xc);
> +}
> +
> +DWORD
> +XcEvtchnBindUnbound(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  USHORT RemoteDomain,
> +    IN  HANDLE Event,
> +    IN  BOOL Mask,
> +    OUT ULONG *LocalPort
> +    )
> +{
> +    XENIFACE_EVTCHN_BIND_UNBOUND_IN In;
> +    XENIFACE_EVTCHN_BIND_UNBOUND_OUT Out;
> +    DWORD Returned;
> +    BOOL Success;
> +
> +    In.RemoteDomain = RemoteDomain;
> +    In.Event = Event;
> +    In.Mask = !!Mask;
> +
> +    Log(XLL_DEBUG, L"RemoteDomain: %d, Event: %p, Mask: %d",
> RemoteDomain, Event, Mask);
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_EVTCHN_BIND_UNBOUND,
> +                              &In, sizeof(In),
> +                              &Out, sizeof(Out),
> +                              &Returned,
> +                              NULL);
> +
> +    if (!Success) {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_EVTCHN_BIND_UNBOUND_PORT
> failed");
> +        goto fail;
> +    }
> +
> +    *LocalPort = Out.LocalPort;
> +    Log(XLL_DEBUG, L"LocalPort: %lu", *LocalPort);
> +
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
> +    return GetLastError();
> +}
> +
> +DWORD
> +XcEvtchnBindInterdomain(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  USHORT RemoteDomain,
> +    IN  ULONG RemotePort,
> +    IN  HANDLE Event,
> +    IN  BOOL Mask,
> +    OUT ULONG *LocalPort
> +    )
> +{
> +    XENIFACE_EVTCHN_BIND_INTERDOMAIN_IN In;
> +    XENIFACE_EVTCHN_BIND_INTERDOMAIN_OUT Out;
> +    DWORD Returned;
> +    BOOL Success;
> +
> +    In.RemoteDomain = RemoteDomain;
> +    In.RemotePort = RemotePort;
> +    In.Event = Event;
> +    In.Mask = !!Mask;
> +
> +    Log(XLL_DEBUG, L"RemoteDomain: %d, RemotePort %lu, Event: %p,
> Mask: %d",
> +        RemoteDomain, RemotePort, Event, Mask);
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_EVTCHN_BIND_INTERDOMAIN,
> +                              &In, sizeof(In),
> +                              &Out, sizeof(Out),
> +                              &Returned,
> +                              NULL);
> +
> +    if (!Success) {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_EVTCHN_BIND_INTERDOMAIN
> failed");
> +        goto fail;
> +    }
> +
> +    *LocalPort = Out.LocalPort;
> +    Log(XLL_DEBUG, L"LocalPort: %lu", *LocalPort);
> +
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
> +    return GetLastError();
> +}
> +
> +DWORD
> +XcEvtchnClose(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  ULONG LocalPort
> +    )
> +{
> +    XENIFACE_EVTCHN_CLOSE_IN In;
> +    DWORD Returned;
> +    BOOL Success;
> +
> +    In.LocalPort = LocalPort;
> +
> +    Log(XLL_DEBUG, L"LocalPort: %lu", LocalPort);
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_EVTCHN_CLOSE,
> +                              &In, sizeof(In),
> +                              NULL, 0,
> +                              &Returned,
> +                              NULL);
> +
> +    if (!Success) {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_EVTCHN_CLOSE failed");
> +        goto fail;
> +    }
> +
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
> +    return GetLastError();
> +}
> +
> +DWORD
> +XcEvtchnNotify(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  ULONG LocalPort
> +    )
> +{
> +    XENIFACE_EVTCHN_NOTIFY_IN In;
> +    DWORD Returned;
> +    BOOL Success;
> +
> +    In.LocalPort = LocalPort;
> +
> +    Log(XLL_DEBUG, L"LocalPort: %lu", LocalPort);
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_EVTCHN_NOTIFY,
> +                              &In, sizeof(In),
> +                              NULL, 0,
> +                              &Returned,
> +                              NULL);
> +
> +    if (!Success) {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_EVTCHN_NOTIFY failed");
> +        goto fail;
> +    }
> +
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
> +    return GetLastError();
> +}
> +
> +DWORD
> +XcEvtchnUnmask(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  ULONG LocalPort
> +    )
> +{
> +    XENIFACE_EVTCHN_UNMASK_IN In;
> +    DWORD Returned;
> +    BOOL Success;
> +
> +    In.LocalPort = LocalPort;
> +
> +    Log(XLL_DEBUG, L"LocalPort: %lu", LocalPort);
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_EVTCHN_UNMASK,
> +                              &In, sizeof(In),
> +                              NULL, 0,
> +                              &Returned,
> +                              NULL);
> +
> +    if (!Success) {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_EVTCHN_UNMASK failed");
> +        goto fail;
> +    }
> +
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
> +    return GetLastError();
> +}
> +
> +static PXENCONTROL_GNTTAB_REQUEST
> +FindRequest(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PVOID Address
> +    )
> +{
> +    PLIST_ENTRY Entry;
> +    PXENCONTROL_GNTTAB_REQUEST ReturnRequest = NULL;
> +
> +    EnterCriticalSection(&Xc->RequestListLock);
> +    Entry = Xc->RequestList.Flink;
> +    while (Entry != &Xc->RequestList) {
> +        PXENCONTROL_GNTTAB_REQUEST Request =
> CONTAINING_RECORD(Entry, XENCONTROL_GNTTAB_REQUEST, ListEntry);
> +
> +        if (Request->Address == Address) {
> +            ReturnRequest = Request;
> +            break;
> +        }
> +
> +        Entry = Entry->Flink;
> +    }
> +    LeaveCriticalSection(&Xc->RequestListLock);
> +
> +    return ReturnRequest;
> +}
> +
> +DWORD
> +XcGnttabPermitForeignAccess(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  USHORT RemoteDomain,
> +    IN  ULONG NumberPages,
> +    IN  ULONG NotifyOffset,
> +    IN  ULONG NotifyPort,
> +    IN  XENIFACE_GNTTAB_PAGE_FLAGS Flags,
> +    OUT PVOID *Address,
> +    OUT ULONG *References
> +    )
> +{
> +    XENIFACE_GNTTAB_PERMIT_FOREIGN_ACCESS_IN In;
> +    XENIFACE_GNTTAB_PERMIT_FOREIGN_ACCESS_OUT *Out;
> +    PXENCONTROL_GNTTAB_REQUEST Request;
> +    DWORD Returned, Size;
> +    BOOL Success;
> +    DWORD Status;
> +
> +    // lock the whole operation to not generate duplicate IDs
> +    EnterCriticalSection(&Xc->RequestListLock);
> +
> +    In.RequestId = Xc->RequestId;
> +    In.RemoteDomain = RemoteDomain;
> +    In.NumberPages = NumberPages;
> +    In.NotifyOffset = NotifyOffset;
> +    In.NotifyPort = NotifyPort;
> +    In.Flags = Flags;
> +
> +    Size =
> (ULONG)FIELD_OFFSET(XENIFACE_GNTTAB_PERMIT_FOREIGN_ACCESS_OU
> T, References[NumberPages]);
> +    Out = malloc(Size);
> +    Request = malloc(sizeof(*Request));
> +
> +    Status = ERROR_OUTOFMEMORY;
> +    if (!Request || !Out)
> +        goto fail;
> +
> +    ZeroMemory(Request, sizeof(*Request));
> +    Request->Id = In.RequestId;
> +
> +    Log(XLL_DEBUG, L"Id %lu, RemoteDomain: %d, NumberPages: %lu,
> NotifyOffset: 0x%x, NotifyPort: %lu, Flags: 0x%x",
> +        In.RequestId, RemoteDomain, NumberPages, NotifyOffset, NotifyPort,
> Flags);
> +
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_GNTTAB_PERMIT_FOREIGN_ACCESS,
> +                              &In, sizeof(In),
> +                              Out, Size,
> +                              &Returned,
> +                              &Request->Overlapped);
> +
> +    Status = GetLastError();
> +    // this IOCTL is expected to be pending on success
> +    if (!Success) {
> +        if (Status != ERROR_IO_PENDING) {
> +            Log(XLL_ERROR, L"IOCTL_XENIFACE_GNTTAB_GRANT_PAGES
> failed");
> +            goto fail;
> +        }
> +    } else {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_GNTTAB_GRANT_PAGES not
> pending");
> +        Status = ERROR_UNIDENTIFIED_ERROR;
> +        goto fail;
> +    }
> +
> +    Request->Address = Out->Address;
> +
> +    InsertTailList(&Xc->RequestList, &Request->ListEntry);
> +    Xc->RequestId++;
> +    LeaveCriticalSection(&Xc->RequestListLock);
> +
> +    *Address = Out->Address;
> +    memcpy(References, &Out->References, NumberPages *
> sizeof(ULONG));
> +    Log(XLL_DEBUG, L"Address: %p", *Address);
> +    for (ULONG i = 0; i < NumberPages; i++)
> +        Log(XLL_DEBUG, L"Grant ref[%lu]: %lu", i, Out->References[i]);
> +
> +    free(Out);
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    LeaveCriticalSection(&Xc->RequestListLock);
> +    Log(XLL_ERROR, L"Error: 0x%x", Status);
> +    free(Out);
> +    free(Request);
> +    return Status;
> +}
> +
> +DWORD
> +XcGnttabRevokeForeignAccess(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PVOID Address
> +    )
> +{
> +    XENIFACE_GNTTAB_REVOKE_FOREIGN_ACCESS_IN In;
> +    PXENCONTROL_GNTTAB_REQUEST Request;
> +    DWORD Returned;
> +    BOOL Success;
> +    DWORD Status;
> +
> +    Log(XLL_DEBUG, L"Address: %p", Address);
> +
> +    Status = ERROR_NOT_FOUND;
> +    Request = FindRequest(Xc, Address);
> +    if (!Request) {
> +        Log(XLL_ERROR, L"Address %p not granted", Address);
> +        goto fail;
> +    }
> +
> +    In.RequestId = Request->Id;
> +
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_GNTTAB_REVOKE_FOREIGN_ACCESS,
> +                              &In, sizeof(In),
> +                              NULL, 0,
> +                              &Returned,
> +                              NULL);
> +
> +    Status = GetLastError();
> +    if (!Success) {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_GNTTAB_UNGRANT_PAGES
> failed");
> +        goto fail;
> +    }
> +
> +    EnterCriticalSection(&Xc->RequestListLock);
> +    RemoveEntryList(&Request->ListEntry);
> +    LeaveCriticalSection(&Xc->RequestListLock);
> +    free(Request);
> +
> +    return Status;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: %d 0x%x", Status, Status);
> +    return Status;
> +}
> +
> +DWORD
> +XcGnttabMapForeignPages(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  USHORT RemoteDomain,
> +    IN  ULONG NumberPages,
> +    IN  PULONG References,
> +    IN  ULONG NotifyOffset,
> +    IN  ULONG NotifyPort,
> +    IN  XENIFACE_GNTTAB_PAGE_FLAGS Flags,
> +    OUT PVOID *Address
> +    )
> +{
> +    XENIFACE_GNTTAB_MAP_FOREIGN_PAGES_IN *In;
> +    XENIFACE_GNTTAB_MAP_FOREIGN_PAGES_OUT Out;
> +    PXENCONTROL_GNTTAB_REQUEST Request;
> +    DWORD Returned, Size;
> +    BOOL Success;
> +    DWORD Status;
> +
> +    // lock the whole operation to not generate duplicate IDs
> +    EnterCriticalSection(&Xc->RequestListLock);
> +
> +    Status = ERROR_OUTOFMEMORY;
> +    Size =
> (ULONG)FIELD_OFFSET(XENIFACE_GNTTAB_MAP_FOREIGN_PAGES_IN,
> References[NumberPages]);
> +    In = malloc(Size);
> +    Request = malloc(sizeof(*Request));
> +    if (!In || !Request)
> +        goto fail;
> +
> +    In->RequestId = Xc->RequestId;
> +    In->RemoteDomain = RemoteDomain;
> +    In->NumberPages = NumberPages;
> +    In->NotifyOffset = NotifyOffset;
> +    In->NotifyPort = NotifyPort;
> +    In->Flags = Flags;
> +    memcpy(&In->References, References, NumberPages * sizeof(ULONG));
> +
> +    ZeroMemory(Request, sizeof(*Request));
> +    Request->Id = In->RequestId;
> +
> +    Log(XLL_DEBUG, L"Id %lu, RemoteDomain: %d, NumberPages: %lu,
> NotifyOffset: 0x%x, NotifyPort: %lu, Flags: 0x%x",
> +        In->RequestId, RemoteDomain, NumberPages, NotifyOffset,
> NotifyPort, Flags);
> +
> +    for (ULONG i = 0; i < NumberPages; i++)
> +        Log(XLL_DEBUG, L"Grant ref[%lu]: %lu", i, References[i]);
> +
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_GNTTAB_MAP_FOREIGN_PAGES,
> +                              In, Size,
> +                              &Out, sizeof(Out),
> +                              &Returned,
> +                              &Request->Overlapped);
> +
> +    Status = GetLastError();
> +    // this IOCTL is expected to be pending on success
> +    if (!Success) {
> +        if (Status != ERROR_IO_PENDING) {
> +            Log(XLL_ERROR,
> L"IOCTL_XENIFACE_GNTTAB_MAP_FOREIGN_PAGES failed");
> +            goto fail;
> +        }
> +    } else {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_GNTTAB_MAP_FOREIGN_PAGES
> not pending");
> +        Status = ERROR_UNIDENTIFIED_ERROR;
> +        goto fail;
> +    }
> +
> +    Request->Address = Out.Address;
> +    InsertTailList(&Xc->RequestList, &Request->ListEntry);
> +    Xc->RequestId++;
> +    LeaveCriticalSection(&Xc->RequestListLock);
> +
> +    *Address = Out.Address;
> +
> +    Log(XLL_DEBUG, L"Address: %p", *Address);
> +
> +    free(In);
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    LeaveCriticalSection(&Xc->RequestListLock);
> +    Log(XLL_ERROR, L"Error: 0x%x", Status);
> +    free(In);
> +    free(Request);
> +    return Status;
> +}
> +
> +DWORD
> +XcGnttabUnmapForeignPages(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PVOID Address
> +    )
> +{
> +    XENIFACE_GNTTAB_UNMAP_FOREIGN_PAGES_IN In;
> +    PXENCONTROL_GNTTAB_REQUEST Request;
> +    DWORD Returned;
> +    BOOL Success;
> +    DWORD Status;
> +
> +    Log(XLL_DEBUG, L"Address: %p", Address);
> +
> +    Status = ERROR_NOT_FOUND;
> +    Request = FindRequest(Xc, Address);
> +    if (!Request) {
> +        Log(XLL_ERROR, L"Address %p not mapped", Address);
> +        goto fail;
> +    }
> +
> +    In.RequestId = Request->Id;
> +
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_GNTTAB_UNMAP_FOREIGN_PAGES,
> +                              &In, sizeof(In),
> +                              NULL, 0,
> +                              &Returned,
> +                              NULL);
> +
> +    Status = GetLastError();
> +    if (!Success) {
> +        Log(XLL_ERROR,
> L"IOCTL_XENIFACE_GNTTAB_UNMAP_FOREIGN_PAGES failed");
> +        goto fail;
> +    }
> +
> +    EnterCriticalSection(&Xc->RequestListLock);
> +    RemoveEntryList(&Request->ListEntry);
> +    LeaveCriticalSection(&Xc->RequestListLock);
> +    free(Request);
> +
> +    return Status;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: 0x%x", Status);
> +    return Status;
> +}
> +
> +DWORD
> +XcStoreRead(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PSTR Path,
> +    IN  DWORD cbValue,
> +    OUT CHAR *Value
> +    )
> +{
> +    DWORD Returned;
> +    BOOL Success;
> +
> +    Log(XLL_DEBUG, L"Path: '%S'", Path);
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_STORE_READ,
> +                              Path, (DWORD)strlen(Path) + 1,
> +                              Value, cbValue,
> +                              &Returned,
> +                              NULL);
> +
> +    if (!Success) {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_STORE_READ failed");
> +        goto fail;
> +    }
> +
> +    Log(XLL_DEBUG, L"Value: '%S'", Value);
> +
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
> +    return GetLastError();
> +}
> +
> +DWORD
> +XcStoreWrite(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PCHAR Path,
> +    IN  PCHAR Value
> +    )
> +{
> +    PCHAR Buffer;
> +    DWORD cbBuffer;
> +    DWORD Returned;
> +    BOOL Success;
> +
> +    cbBuffer = (DWORD)(strlen(Path) + 1 + strlen(Value) + 1 + 1);
> +    Buffer = malloc(cbBuffer);
> +    if (!Buffer) {
> +        SetLastError(ERROR_OUTOFMEMORY);
> +        goto fail;
> +    }
> +
> +    ZeroMemory(Buffer, cbBuffer);
> +    memcpy(Buffer, Path, strlen(Path));
> +    memcpy(Buffer + strlen(Path) + 1, Value, strlen(Value));
> +
> +    Log(XLL_DEBUG, L"Path: '%S', Value: '%S'", Path, Value);
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_STORE_WRITE,
> +                              Buffer, cbBuffer,
> +                              NULL, 0,
> +                              &Returned,
> +                              NULL);
> +
> +    if (!Success) {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_STORE_WRITE failed");
> +        goto fail;
> +    }
> +
> +    free(Buffer);
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
> +    free(Buffer);
> +    return GetLastError();
> +}
> +
> +DWORD
> +XcStoreDirectory(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PCHAR Path,
> +    IN  DWORD cbOutput,
> +    OUT CHAR *Output
> +    )
> +{
> +    DWORD Returned;
> +    BOOL Success;
> +
> +    Log(XLL_DEBUG, L"Path: '%S'", Path);
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_STORE_DIRECTORY,
> +                              Path, (DWORD)strlen(Path) + 1,
> +                              Output, cbOutput,
> +                              &Returned,
> +                              NULL);
> +
> +    if (!Success) {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_STORE_DIRECTORY failed");
> +        goto fail;
> +    }
> +
> +    _LogMultiSz(Xc, __FUNCTION__, XLL_DEBUG, Output);
> +
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
> +    return GetLastError();
> +}
> +
> +DWORD
> +XcStoreRemove(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PCHAR Path
> +    )
> +{
> +    DWORD Returned;
> +    BOOL Success;
> +
> +    Log(XLL_DEBUG, L"Path: '%S'", Path);
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_STORE_REMOVE,
> +                              Path, (DWORD)strlen(Path) + 1,
> +                              NULL, 0,
> +                              &Returned,
> +                              NULL);
> +
> +    if (!Success) {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_STORE_REMOVE failed");
> +        goto fail;
> +    }
> +
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
> +    return GetLastError();
> +}
> +
> +DWORD
> +XcStoreSetPermissions(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PCHAR Path,
> +    IN  ULONG Count,
> +    IN  PXENIFACE_STORE_PERMISSION Permissions
> +    )
> +{
> +    DWORD Returned, Size;
> +    BOOL Success;
> +    XENIFACE_STORE_SET_PERMISSIONS_IN *In = NULL;
> +
> +    Log(XLL_DEBUG, L"Path: '%S', Count: %lu", Path, Count);
> +    for (ULONG i = 0; i < Count; i++)
> +        Log(XLL_DEBUG, L"Domain: %d, Mask: 0x%x", Permissions[i].Domain,
> Permissions[i].Mask);
> +
> +    Size = (ULONG)FIELD_OFFSET(XENIFACE_STORE_SET_PERMISSIONS_IN,
> Permissions[Count]);
> +    In = malloc(Size);
> +    if (!In) {
> +        SetLastError(ERROR_OUTOFMEMORY);
> +        goto fail;
> +    }
> +
> +    In->Path = Path;
> +    In->PathLength = (DWORD)strlen(In->Path) + 1;
> +    In->NumberPermissions = Count;
> +    memcpy(&In->Permissions, Permissions, Count *
> sizeof(XENIFACE_STORE_PERMISSION));
> +
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_STORE_SET_PERMISSIONS,
> +                              In, Size,
> +                              NULL, 0,
> +                              &Returned,
> +                              NULL);
> +
> +    if (!Success) {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_STORE_SET_PERMISSIONS failed");
> +        goto fail;
> +    }
> +
> +    free(In);
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
> +    free(In);
> +    return GetLastError();
> +}
> +
> +DWORD
> +XcStoreAddWatch(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PCHAR Path,
> +    IN  HANDLE Event,
> +    OUT PVOID *Handle
> +    )
> +{
> +    DWORD Returned;
> +    BOOL Success;
> +    XENIFACE_STORE_ADD_WATCH_IN In;
> +    XENIFACE_STORE_ADD_WATCH_OUT Out;
> +
> +    Log(XLL_DEBUG, L"Path: '%S', Event: %p", Path, Event);
> +
> +    In.Path = Path;
> +    In.PathLength = (DWORD)strlen(Path) + 1;
> +    In.Event = Event;
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_STORE_ADD_WATCH,
> +                              &In, sizeof(In),
> +                              &Out, sizeof(Out),
> +                              &Returned,
> +                              NULL);
> +
> +    if (!Success) {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_STORE_ADD_WATCH failed");
> +        goto fail;
> +    }
> +
> +    *Handle = Out.Context;
> +
> +    Log(XLL_DEBUG, L"Handle: %p", *Handle);
> +
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
> +    return GetLastError();
> +}
> +
> +DWORD
> +XcStoreRemoveWatch(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PVOID Handle
> +    )
> +{
> +    DWORD Returned;
> +    BOOL Success;
> +    XENIFACE_STORE_REMOVE_WATCH_IN In;
> +
> +    Log(XLL_DEBUG, L"Handle: %p", Handle);
> +
> +    In.Context = Handle;
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_STORE_REMOVE_WATCH,
> +                              &In, sizeof(In),
> +                              NULL, 0,
> +                              &Returned,
> +                              NULL);
> +
> +    if (!Success) {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_STORE_REMOVE_WATCH failed");
> +        goto fail;
> +    }
> +
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
> +    return GetLastError();
> +}
> diff --git a/src/xencontrol/xencontrol.rc b/src/xencontrol/xencontrol.rc
> new file mode 100644
> index 0000000..6c33e84
> --- /dev/null
> +++ b/src/xencontrol/xencontrol.rc
> @@ -0,0 +1,24 @@
> +#include <windows.h>
> +#include <ntverp.h>
> +
> +#undef VER_COMPANYNAME_STR
> +#undef VER_PRODUCTNAME_STR
> +#undef VER_PRODUCTVERSION
> +#undef VER_PRODUCTVERSION_STR
> +
> +#include <version.h>
> +
> +#define VER_COMPANYNAME_STR         VENDOR_NAME_STR
> +#define VER_LEGALCOPYRIGHT_STR      "Copyright (c) Invisible Things Lab"
> +
> +#define VER_PRODUCTNAME_STR         "XENIFACE"
> +#define VER_PRODUCTVERSION
> MAJOR_VERSION,MINOR_VERSION,MICRO_VERSION,BUILD_NUMBER
> +#define VER_PRODUCTVERSION_STR      MAJOR_VERSION_STR "."
> MINOR_VERSION_STR "." MICRO_VERSION_STR "." BUILD_NUMBER_STR
> +
> +#define VER_INTERNALNAME_STR        "XENCONTROL.DLL"
> +#define VER_FILEDESCRIPTION_STR     "Xen interface user library"
> +
> +#define VER_FILETYPE                VFT_DLL
> +#define VER_FILESUBTYPE             0
> +
> +#include <common.ver>
> diff --git a/src/xencontrol/xencontrol_private.h
> b/src/xencontrol/xencontrol_private.h
> new file mode 100644
> index 0000000..685bcfa
> --- /dev/null
> +++ b/src/xencontrol/xencontrol_private.h
> @@ -0,0 +1,49 @@
> +#ifndef _XENCONTROL_PRIVATE_H_
> +#define _XENCONTROL_PRIVATE_H_
> +
> +#include <windows.h>
> +#include "xencontrol.h"
> +
> +#define Log(level, format, ...) \
> +        _Log(Xc->Logger, level, Xc->LogLevel, __FUNCTION__, format,
> __VA_ARGS__)
> +
> +#define InitializeListHead(ListHead) ( \
> +    (ListHead)->Flink = (ListHead)->Blink = (ListHead))
> +
> +#define InsertTailList(ListHead, Entry) { \
> +    PLIST_ENTRY _EX_Blink; \
> +    PLIST_ENTRY _EX_ListHead; \
> +    _EX_ListHead = (ListHead); \
> +    _EX_Blink = _EX_ListHead->Blink; \
> +    (Entry)->Flink = _EX_ListHead; \
> +    (Entry)->Blink = _EX_Blink; \
> +    _EX_Blink->Flink = (Entry); \
> +    _EX_ListHead->Blink = (Entry); \
> +    }
> +
> +#define RemoveEntryList(Entry) { \
> +    PLIST_ENTRY _EX_Blink; \
> +    PLIST_ENTRY _EX_Flink; \
> +    _EX_Flink = (Entry)->Flink; \
> +    _EX_Blink = (Entry)->Blink; \
> +    _EX_Blink->Flink = _EX_Flink; \
> +    _EX_Flink->Blink = _EX_Blink; \
> +    }
> +
> +typedef struct _XENCONTROL_CONTEXT {
> +    HANDLE XenIface;
> +    XENCONTROL_LOGGER *Logger;
> +    XENCONTROL_LOG_LEVEL LogLevel;
> +    ULONG RequestId;
> +    LIST_ENTRY RequestList;
> +    CRITICAL_SECTION RequestListLock;
> +} XENCONTROL_CONTEXT, *PXENCONTROL_CONTEXT;
> +
> +typedef struct _XENCONTROL_GNTTAB_REQUEST {
> +    LIST_ENTRY  ListEntry;
> +    OVERLAPPED  Overlapped;
> +    ULONG       Id;
> +    PVOID       Address;
> +} XENCONTROL_GNTTAB_REQUEST, *PXENCONTROL_GNTTAB_REQUEST;
> +
> +#endif // _XENCONTROL_PRIVATE_H_
> diff --git a/vs2013/xencontrol.props b/vs2013/xencontrol.props
> new file mode 100644
> index 0000000..22c1704
> --- /dev/null
> +++ b/vs2013/xencontrol.props
> @@ -0,0 +1,84 @@
> +<?xml version="1.0" encoding="utf-8"?>
> +<Project ToolsVersion="4.0"
> xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
> +
> +  <ImportGroup Label="PropertySheets" />
> +
> +  <PropertyGroup Label="UserMacros" />
> +
> +  <PropertyGroup>
> +    <IncludePath>$(SolutionDir)\..\include;$(IncludePath)</IncludePath>
> +
> <LibraryPath>$(SolutionDir)\$(Configuration)\$(Platform);$(LibraryPath)</Li
> braryPath>
> +    <OutDir>$(SolutionDir)\$(Configuration)\$(Platform)\</OutDir>
> +
> <IntDir>$(SolutionDir)\$(ProjectName)\$(Configuration)\$(Platform)\</IntDi
> r>
> +    <LinkIncremental>false</LinkIncremental>
> +  </PropertyGroup>
> +
> +  <PropertyGroup Label="Configuration">
> +    <LinkIncremental>false</LinkIncremental>
> +    <PlatformToolset>v120</PlatformToolset>
> +  </PropertyGroup>
> +
> +  <PropertyGroup Condition="'$(Configuration)'=='Debug'"
> Label="Configuration">
> +    <RunCodeAnalysis>true</RunCodeAnalysis>
> +    <UseDebugLibraries>true</UseDebugLibraries>
> +  </PropertyGroup>
> +
> +  <PropertyGroup Condition="'$(Configuration)'=='Release'"
> Label="Configuration">
> +    <UseDebugLibraries>false</UseDebugLibraries>
> +    <WholeProgramOptimization>true</WholeProgramOptimization>
> +  </PropertyGroup>
> +
> +  <ItemDefinitionGroup>
> +    <Link>
> +
> <AdditionalDependencies>setupapi.lib;ws2_32.lib;shlwapi.lib;wtsapi32.lib;us
> erenv.lib;version.lib;ntdll.lib;kernel32.lib;user32.lib;gdi32.lib;comdlg32.lib;adv
> api32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;%(AdditionalDependencies)
> </AdditionalDependencies>
> +      <GenerateDebugInformation>true</GenerateDebugInformation>
> +    </Link>
> +    <ClCompile>
> +
> <PreprocessorDefinitions>WIN32;%(PreprocessorDefinitions)</Preprocesso
> rDefinitions>
> +      <WarningLevel>Level3</WarningLevel>
> +      <PrecompiledHeader>NotUsing</PrecompiledHeader>
> +      <SDLCheck>true</SDLCheck>
> +      <ExceptionHandling>false</ExceptionHandling>
> +      <TreatWarningAsError>true</TreatWarningAsError>
> +    </ClCompile>
> +    <CustomBuildStep>
> +      <Command>xcopy /y $(TargetPath)
> $(SolutionDir)\..\xeniface\$(PlatformTarget)\
> +xcopy /y $(TargetDir)$(TargetName).pdb
> $(SolutionDir)\..\xeniface\$(PlatformTarget)\
> +if exist $(TargetDir)$(TargetName).lib xcopy /y
> $(TargetDir)$(TargetName).lib
> $(SolutionDir)\..\xeniface\$(PlatformTarget)\</Command>
> +    </CustomBuildStep>
> +    <CustomBuildStep>
> +      <Message>Copying output files</Message>
> +    </CustomBuildStep>
> +    <CustomBuildStep>
> +
> <Outputs>$(SolutionDir)\..\xeniface\$(PlatformTarget)$(TargetFileName);$(
> SolutionDir)\..\xeniface\$(PlatformTarget)$(TargetName).pdb;$(SolutionDir)
> \..\xeniface\$(PlatformTarget)$(TargetName).lib;%(Outputs)</Outputs>
> +    </CustomBuildStep>
> +    <CustomBuildStep>
> +
> <Inputs>$(TargetPath);$(TargetDir)$(TargetName).pdb;$(TargetDir)$(Target
> Name).lib</Inputs>
> +    </CustomBuildStep>
> +  </ItemDefinitionGroup>
> +
> +  <ItemDefinitionGroup Condition="'$(Configuration)'=='Debug'">
> +    <ClCompile>
> +
> <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</Preprocess
> orDefinitions>
> +      <Optimization>Disabled</Optimization>
> +      <EnablePREfast>true</EnablePREfast>
> +      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
> +    </ClCompile>
> +  </ItemDefinitionGroup>
> +
> +  <ItemDefinitionGroup Condition="'$(Configuration)'=='Release'">
> +    <ClCompile>
> +
> <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</Preproces
> sorDefinitions>
> +      <Optimization>MaxSpeed</Optimization>
> +      <FunctionLevelLinking>true</FunctionLevelLinking>
> +      <IntrinsicFunctions>true</IntrinsicFunctions>
> +      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
> +    </ClCompile>
> +    <Link>
> +      <EnableCOMDATFolding>true</EnableCOMDATFolding>
> +      <OptimizeReferences>true</OptimizeReferences>
> +    </Link>
> +  </ItemDefinitionGroup>
> +
> +  <ItemGroup />
> +</Project>
> \ No newline at end of file
> diff --git a/vs2013/xencontrol/xencontrol.vcxproj
> b/vs2013/xencontrol/xencontrol.vcxproj
> new file mode 100644
> index 0000000..4d91a38
> --- /dev/null
> +++ b/vs2013/xencontrol/xencontrol.vcxproj
> @@ -0,0 +1,62 @@
> +<?xml version="1.0" encoding="utf-8"?>
> +<Project DefaultTargets="Build" ToolsVersion="12.0"
> xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
> +  <ItemGroup Label="ProjectConfigurations">
> +    <ProjectConfiguration Include="Debug|Win32">
> +      <Configuration>Debug</Configuration>
> +      <Platform>Win32</Platform>
> +    </ProjectConfiguration>
> +    <ProjectConfiguration Include="Debug|x64">
> +      <Configuration>Debug</Configuration>
> +      <Platform>x64</Platform>
> +    </ProjectConfiguration>
> +    <ProjectConfiguration Include="Release|Win32">
> +      <Configuration>Release</Configuration>
> +      <Platform>Win32</Platform>
> +    </ProjectConfiguration>
> +    <ProjectConfiguration Include="Release|x64">
> +      <Configuration>Release</Configuration>
> +      <Platform>x64</Platform>
> +    </ProjectConfiguration>
> +  </ItemGroup>
> +  <PropertyGroup Label="Globals">
> +    <ProjectGuid>{D386D8E9-D015-4AD2-A5C2-
> 4F845A803FA2}</ProjectGuid>
> +    <Keyword>Win32Proj</Keyword>
> +    <RootNamespace>xencontrol</RootNamespace>
> +  </PropertyGroup>
> +  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
> +  <PropertyGroup Label="Configuration">
> +    <ConfigurationType>DynamicLibrary</ConfigurationType>
> +    <CharacterSet>Unicode</CharacterSet>
> +  </PropertyGroup>
> +  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
> +  <ImportGroup Label="PropertySheets">
> +    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props"
> Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')"
> Label="LocalAppDataPlatform" />
> +    <Import Project="..\xencontrol.props" />
> +  </ImportGroup>
> +  <ItemDefinitionGroup>
> +    <ClCompile>
> +
> <PreprocessorDefinitions>_WINDOWS;_USRDLL;XENCONTROL_EXPORTS;%(
> PreprocessorDefinitions)</PreprocessorDefinitions>
> +    </ClCompile>
> +    <Link>
> +      <SubSystem>Windows</SubSystem>
> +    </Link>
> +  </ItemDefinitionGroup>
> +  <ItemGroup>
> +    <ClCompile Include="..\..\src\xencontrol\xencontrol.c" />
> +  </ItemGroup>
> +  <ItemGroup>
> +    <ClInclude Include="..\..\include\xencontrol.h" />
> +    <ClInclude Include="..\..\src\xencontrol\xencontrol_private.h" />
> +  </ItemGroup>
> +  <ItemGroup>
> +    <ResourceCompile Include="..\..\src\xencontrol\xencontrol.rc" />
> +  </ItemGroup>
> +  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
> +  <ImportGroup Label="ExtensionTargets">
> +  </ImportGroup>
> +  <ProjectExtensions>
> +    <VisualStudio>
> +      <UserProperties />
> +    </VisualStudio>
> +  </ProjectExtensions>
> +</Project>
> \ No newline at end of file
> diff --git a/vs2013/xencontrol/xencontrol.vcxproj.filters
> b/vs2013/xencontrol/xencontrol.vcxproj.filters
> new file mode 100644
> index 0000000..c6de099
> --- /dev/null
> +++ b/vs2013/xencontrol/xencontrol.vcxproj.filters
> @@ -0,0 +1,13 @@
> +<?xml version="1.0" encoding="utf-8"?>
> +<Project ToolsVersion="4.0"
> xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
> +  <ItemGroup>
> +    <ClInclude Include="..\..\include\xencontrol.h" />
> +    <ClInclude Include="..\..\src\xencontrol\xencontrol_private.h" />
> +  </ItemGroup>
> +  <ItemGroup>
> +    <ResourceCompile Include="..\..\src\xencontrol\xencontrol.rc" />
> +  </ItemGroup>
> +  <ItemGroup>
> +    <ClCompile Include="..\..\src\xencontrol\xencontrol.c" />
> +  </ItemGroup>
> +</Project>
> \ No newline at end of file
> diff --git a/vs2013/xeniface.sln b/vs2013/xeniface.sln
> index 3c74c79..76d06b4 100644
> --- a/vs2013/xeniface.sln
> +++ b/vs2013/xeniface.sln
> @@ -17,6 +17,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}")
> = "package", "package\package.
>  		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B} = {2E61D2CC-
> 865E-442C-8C83-B8DAFD7BBD3B}
>  	EndProjectSection
>  EndProject
> +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xencontrol",
> "xencontrol\xencontrol.vcxproj", "{D386D8E9-D015-4AD2-A5C2-
> 4F845A803FA2}"
> +EndProject
>  Global
>  	GlobalSection(SolutionConfigurationPlatforms) = preSolution
>  		Windows 7 Debug|Win32 = Windows 7 Debug|Win32
> @@ -165,6 +167,42 @@ Global
>  		{9B071A35-897C-477A-AEB7-95F77618A21D}.Windows Vista
> Release|x64.ActiveCfg = Windows Vista Release|x64
>  		{9B071A35-897C-477A-AEB7-95F77618A21D}.Windows Vista
> Release|x64.Build.0 = Windows Vista Release|x64
>  		{9B071A35-897C-477A-AEB7-95F77618A21D}.Windows Vista
> Release|x64.Deploy.0 = Windows Vista Release|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7
> Debug|Win32.ActiveCfg = Debug|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7
> Debug|Win32.Build.0 = Debug|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7
> Debug|Win32.Deploy.0 = Debug|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7
> Debug|x64.ActiveCfg = Debug|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7
> Debug|x64.Build.0 = Debug|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7
> Debug|x64.Deploy.0 = Debug|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7
> Release|Win32.ActiveCfg = Release|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7
> Release|Win32.Build.0 = Release|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7
> Release|Win32.Deploy.0 = Release|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7
> Release|x64.ActiveCfg = Release|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7
> Release|x64.Build.0 = Release|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7
> Release|x64.Deploy.0 = Release|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows
> Developer Preview Debug|Win32.ActiveCfg = Debug|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows
> Developer Preview Debug|Win32.Build.0 = Debug|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows
> Developer Preview Debug|Win32.Deploy.0 = Debug|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows
> Developer Preview Debug|x64.ActiveCfg = Debug|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows
> Developer Preview Debug|x64.Build.0 = Debug|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows
> Developer Preview Debug|x64.Deploy.0 = Debug|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows
> Developer Preview Release|Win32.ActiveCfg = Release|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows
> Developer Preview Release|Win32.Build.0 = Release|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows
> Developer Preview Release|Win32.Deploy.0 = Release|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows
> Developer Preview Release|x64.ActiveCfg = Release|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows
> Developer Preview Release|x64.Build.0 = Release|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows
> Developer Preview Release|x64.Deploy.0 = Release|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista
> Debug|Win32.ActiveCfg = Debug|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista
> Debug|Win32.Build.0 = Debug|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista
> Debug|Win32.Deploy.0 = Debug|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista
> Debug|x64.ActiveCfg = Debug|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista
> Debug|x64.Build.0 = Debug|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista
> Debug|x64.Deploy.0 = Debug|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista
> Release|Win32.ActiveCfg = Release|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista
> Release|Win32.Build.0 = Release|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista
> Release|Win32.Deploy.0 = Release|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista
> Release|x64.ActiveCfg = Release|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista
> Release|x64.Build.0 = Release|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista
> Release|x64.Deploy.0 = Release|x64
>  	EndGlobalSection
>  	GlobalSection(SolutionProperties) = preSolution
>  		HideSolutionNode = FALSE
> --
> 1.8.1.msysgit.1
> 
> 
> 
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

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

From win-pv-devel-bounces@lists.xenproject.org Thu Nov 05 16:49:40 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Nov 2015 16:49:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZuNjG-00085m-N4; Thu, 05 Nov 2015 16:49:38 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=744ee64bb=Paul.Durrant@citrix.com>)
	id 1ZuNjF-00085c-9s
	for win-pv-devel@lists.xenproject.org; Thu, 05 Nov 2015 16:49:37 +0000
Received: from [193.109.254.147] by server-1.bemta-14.messagelabs.com id
	E9/21-28791-0A88B365; Thu, 05 Nov 2015 16:49:36 +0000
X-Env-Sender: prvs=744ee64bb=Paul.Durrant@citrix.com
X-Msg-Ref: server-11.tower-27.messagelabs.com!1446742174!809706!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 56733 invoked from network); 5 Nov 2015 16:49:35 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-11.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	5 Nov 2015 16:49:35 -0000
X-IronPort-AV: E=Sophos;i="5.20,248,1444694400"; 
   d="scan'208";a="7024472"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: =?iso-8859-2?Q?Rafa=B3_Wojdy=B3a?= <omeg@invisiblethingslab.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [PATCH] Add a user mode library wrapper for
	XENIFACE	IOCTLs
Thread-Index: AQHRF+QQJ5B9lIAYf0ufI5DCA4J9556NoV2w
Date: Thu, 5 Nov 2015 16:49:34 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F661401@AMSPEX01CL01.citrite.net>
References: <563B65F1.2020606@invisiblethingslab.com>
In-Reply-To: <563B65F1.2020606@invisiblethingslab.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] [PATCH] Add a user mode library wrapper for
 XENIFACE	IOCTLs
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> bounces@lists.xenproject.org] On Behalf Of Rafal Wojdyla
> Sent: 05 November 2015 14:22
> To: win-pv-devel@lists.xenproject.org
> Subject: [win-pv-devel] [PATCH] Add a user mode library wrapper for
> XENIFACE IOCTLs
> 
> Signed-off-by: Rafal Wojdyla <omeg@invisiblethingslab.com>
> ---
>  include/xencontrol.h                         | 342 ++++++++++
>  src/xencontrol/xencontrol.c                  | 915
> +++++++++++++++++++++++++++
>  src/xencontrol/xencontrol.rc                 |  24 +
>  src/xencontrol/xencontrol_private.h          |  49 ++
>  vs2013/xencontrol.props                      |  84 +++
>  vs2013/xencontrol/xencontrol.vcxproj         |  62 ++
>  vs2013/xencontrol/xencontrol.vcxproj.filters |  13 +
>  vs2013/xeniface.sln                          |  38 ++
>  8 files changed, 1527 insertions(+)
>  create mode 100644 include/xencontrol.h
>  create mode 100644 src/xencontrol/xencontrol.c
>  create mode 100644 src/xencontrol/xencontrol.rc
>  create mode 100644 src/xencontrol/xencontrol_private.h
>  create mode 100644 vs2013/xencontrol.props
>  create mode 100644 vs2013/xencontrol/xencontrol.vcxproj
>  create mode 100644 vs2013/xencontrol/xencontrol.vcxproj.filters
> 
> diff --git a/include/xencontrol.h b/include/xencontrol.h
> new file mode 100644
> index 0000000..0a2f8f2
> --- /dev/null
> +++ b/include/xencontrol.h
> @@ -0,0 +1,342 @@
> +#ifndef _XENCONTROL_H_
> +#define _XENCONTROL_H_
> +
> +#include <windows.h>
> +#include <varargs.h>
> +#include "xeniface_ioctls.h"
> +
> +#ifdef XENCONTROL_EXPORTS
> +#    define XENCONTROL_API __declspec(dllexport)
> +#else
> +#    define XENCONTROL_API __declspec(dllimport)
> +#endif
> +
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
> +
> +/*! \typedef PXENCONTROL_CONTEXT
> +    \brief Library handle representing a Xen Interface session
> +*/
> +struct _XENCONTROL_CONTEXT;
> +typedef struct _XENCONTROL_CONTEXT *PXENCONTROL_CONTEXT;
> +
> +/*! \typedef XENCONTROL_LOG_LEVEL
> +    \brief Log levels used by the library
> +*/
> +typedef enum
> +_XENCONTROL_LOG_LEVEL {
> +    XLL_ERROR = 1,
> +    XLL_WARNING,
> +    XLL_INFO,
> +    XLL_DEBUG,
> +    XLL_TRACE,
> +} XENCONTROL_LOG_LEVEL;
> +
> +/*! \typedef XENCONTROL_LOGGER
> +    \brief Callback for receiving diagnostic messages from the library
> +*/
> +typedef void
> +XENCONTROL_LOGGER(
> +    IN  XENCONTROL_LOG_LEVEL LogLevel,
> +    IN  const CHAR *Function,
> +    IN  const WCHAR *Message,
> +    IN  va_list Args
> +    );
> +
> +/*! \brief Register a callback for receiving library's diagnostic messages
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param Logger Callback to register
> +*/
> +XENCONTROL_API
> +void
> +XcRegisterLogger(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  XENCONTROL_LOGGER *Logger
> +    );
> +
> +/*! \brief Set log level threshold for library's diagnostic messages
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param LogLevel Only messages with this level and above will be sent to
> the logger callback
> +*/
> +XENCONTROL_API
> +void
> +XcSetLogLevel(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  XENCONTROL_LOG_LEVEL LogLevel
> +    );
> +
> +/*! \brief Open the Xen Interface device
> +    \param Logger Callback for receiving library's diagnostic messages
> +    \param Xc Xencontrol handle representing a Xen Interface session
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcOpen(
> +    IN  XENCONTROL_LOGGER *Logger,
> +    OUT PXENCONTROL_CONTEXT *Xc
> +    );
> +
> +/*! \brief Close the Xen Interface device
> +    \param Xc Xencontrol handle returned by XcOpen()
> +*/
> +XENCONTROL_API
> +void
> +XcClose(
> +    IN  PXENCONTROL_CONTEXT Xc
> +    );
> +
> +/*! \brief Open an unbound event channel
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param RemoteDomain ID of a remote domain that will bind the channel
> +    \param Event Handle to an event object that will receive event channel
> notifications
> +    \param Mask Set to TRUE if the event channel should be initially masked
> +    \param LocalPort Port number that is assigned to the event channel
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcEvtchnBindUnbound(

Shouldn't this be XcEvtchnOpenUnbound()? The name seems a little odd.

  Paul

> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  USHORT RemoteDomain,
> +    IN  HANDLE Event,
> +    IN  BOOL Mask,
> +    OUT ULONG *LocalPort
> +    );
> +
> +/*! \brief Open an event channel that was already bound by a remote
> domain
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param RemoteDomain ID of a remote domain that has already bound
> the channel
> +    \param RemotePort Port number that is assigned to the event channel in
> the \a RemoteDomain
> +    \param Event Handle to an event that will receive event channel
> notifications
> +    \param Mask Set to TRUE if the event object channel should be initially
> masked
> +    \param LocalPort Port number that is assigned to the event channel
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcEvtchnBindInterdomain(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  USHORT RemoteDomain,
> +    IN  ULONG RemotePort,
> +    IN  HANDLE Event,
> +    IN  BOOL Mask,
> +    OUT ULONG *LocalPort
> +    );
> +
> +/*! \brief Close an event channel
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param LocalPort Port number that is assigned to the event channel
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcEvtchnClose(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  ULONG LocalPort
> +    );
> +
> +/*! \brief Notify the remote end of an event channel
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param LocalPort Port number that is assigned to the event channel
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcEvtchnNotify(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  ULONG LocalPort
> +    );
> +
> +/*! \brief Unmask an event channel
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param LocalPort Port number that is assigned to the event channel
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcEvtchnUnmask(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  ULONG LocalPort
> +    );
> +
> +/*! \brief Grant a \a RemoteDomain permission to access local memory
> pages
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param RemoteDomain ID of a remote domain that is being granted
> access
> +    \param NumberPages Number of 4k pages to grant access to
> +    \param NotifyOffset Offset of a byte in the granted region that will be set
> to 0 when the grant is revoked
> +    \param NotifyPort Local port number of an open event channel that will
> be notified when the grant is revoked
> +    \param Flags Grant options
> +    \param Address Local user mode address of the granted memory region
> +    \param References An array of Xen grant numbers for every granted
> page
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcGnttabPermitForeignAccess(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  USHORT RemoteDomain,
> +    IN  ULONG NumberPages,
> +    IN  ULONG NotifyOffset,
> +    IN  ULONG NotifyPort,
> +    IN  XENIFACE_GNTTAB_PAGE_FLAGS Flags,
> +    OUT PVOID *Address,
> +    OUT ULONG *References
> +    );
> +
> +/*! \brief Revoke a foreign domain access to previously granted memory
> region
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param Address Local user mode address of the granted memory region
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcGnttabRevokeForeignAccess(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PVOID Address
> +    );
> +
> +/*! \brief Map a foreign memory region into the current address space
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param RemoteDomain ID of a remote domain that has granted access to
> the pages
> +    \param NumberPages Number of 4k pages to map
> +    \param References An array of Xen grant numbers for every granted
> page
> +    \param NotifyOffset Offset of a byte in the mapped region that will be set
> to 0 when the region is unmapped
> +    \param NotifyPort Local port number of an open event channel that will
> be notified when the region is unmapped
> +    \param Flags Map options
> +    \param Address Local user mode address of the mapped memory region
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcGnttabMapForeignPages(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  USHORT RemoteDomain,
> +    IN  ULONG NumberPages,
> +    IN  PULONG References,
> +    IN  ULONG NotifyOffset,
> +    IN  ULONG NotifyPort,
> +    IN  XENIFACE_GNTTAB_PAGE_FLAGS Flags,
> +    OUT PVOID *Address
> +    );
> +
> +/*! \brief Unmap a foreign memory region from the current address space
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param Address Local user mode address of the mapped memory region
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcGnttabUnmapForeignPages(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PVOID Address
> +    );
> +
> +/*! \brief Read a XenStore key
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param Path Path to the key
> +    \param cbValue Size of the \a Value buffer, in bytes
> +    \param Value Buffer that receives the value
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcStoreRead(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PCHAR Path,
> +    IN  DWORD cbValue,
> +    OUT CHAR *Value
> +    );
> +
> +/*! \brief Write a value to a XenStore key
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param Path Path to the key
> +    \param Value Value to write
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcStoreWrite(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PCHAR Path,
> +    IN  PCHAR Value
> +    );
> +
> +/*! \brief Enumerate all immediate child keys of a XenStore key
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param Path Path to the key
> +    \param cbOutput Size of the \a Output buffer, in bytes
> +    \param Output Buffer that receives a NUL-separated child key names
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcStoreDirectory(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PCHAR Path,
> +    IN  DWORD cbOutput,
> +    OUT CHAR *Output
> +    );
> +
> +/*! \brief Remove a XenStore key
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param Path Path to the key
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcStoreRemove(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PCHAR Path
> +    );
> +
> +/*! \brief Set permissions of a XenStore key
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param Path Path to the key
> +    \param Count Number of permissions
> +    \param Permissions Array of permissions to set
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcStoreSetPermissions(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PCHAR Path,
> +    IN  ULONG Count,
> +    IN  PXENIFACE_STORE_PERMISSION Permissions
> +    );
> +
> +/*! \brief Add a XenStore key watch
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param Path Path to the key to be watched
> +    \param Event Handle to an event that will be signaled when the watch
> fires
> +    \param Handle An opaque value representing the watch
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcStoreAddWatch(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PCHAR Path,
> +    IN  HANDLE Event,
> +    OUT PVOID *Handle
> +    );
> +
> +/*! \brief Remove a XenStore watch
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param Handle Watch handle returned by XcStoreAddWatch()
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcStoreRemoveWatch(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PVOID Handle
> +    );
> +
> +#ifdef __cplusplus
> +}
> +#endif
> +
> +#endif // _XENCONTROL_H_
> diff --git a/src/xencontrol/xencontrol.c b/src/xencontrol/xencontrol.c
> new file mode 100644
> index 0000000..92ac9d0
> --- /dev/null
> +++ b/src/xencontrol/xencontrol.c
> @@ -0,0 +1,915 @@
> +#define INITGUID
> +#include <windows.h>
> +#include <setupapi.h>
> +#include <stdlib.h>
> +#include <assert.h>
> +
> +#include "xencontrol.h"
> +#include "xencontrol_private.h"
> +
> +BOOL APIENTRY
> +DllMain(
> +    IN  HMODULE Module,
> +    IN  DWORD ReasonForCall,
> +    IN  LPVOID Reserved
> +)
> +{
> +    return TRUE;
> +}
> +
> +static void
> +_Log(
> +    IN  XENCONTROL_LOGGER *Logger,
> +    IN  XENCONTROL_LOG_LEVEL LogLevel,
> +    IN  XENCONTROL_LOG_LEVEL CurrentLogLevel,
> +    IN  PCHAR Function,
> +    IN  PWCHAR Format,
> +    ...
> +    )
> +{
> +    va_list Args;
> +    DWORD LastError;
> +
> +    if (Logger == NULL)
> +        return;
> +
> +    if (LogLevel > CurrentLogLevel)
> +        return;
> +
> +    LastError = GetLastError();
> +    va_start(Args, Format);
> +    Logger(LogLevel, Function, Format, Args);
> +    va_end(Args);
> +    SetLastError(LastError);
> +}
> +
> +static void
> +_LogMultiSz(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PCHAR Caller,
> +    IN  XENCONTROL_LOG_LEVEL Level,
> +    IN  PCHAR MultiSz
> +    )
> +{
> +    PCHAR Ptr;
> +    ULONG Len;
> +
> +    for (Ptr = MultiSz; *Ptr;) {
> +        Len = (ULONG)strlen(Ptr);
> +        _Log(Xc->Logger, Level, Xc->LogLevel, Caller, L"%S", Ptr);
> +        Ptr += (Len + 1);
> +    }
> +}
> +
> +void
> +XcRegisterLogger(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  XENCONTROL_LOGGER *Logger
> +    )
> +{
> +    Xc->Logger = Logger;
> +}
> +
> +void
> +XcSetLogLevel(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  XENCONTROL_LOG_LEVEL LogLevel
> +    )
> +{
> +    Xc->LogLevel = LogLevel;
> +}
> +
> +DWORD
> +XcOpen(
> +    IN  XENCONTROL_LOGGER *Logger,
> +    OUT PXENCONTROL_CONTEXT *Xc
> +    )
> +{
> +    HDEVINFO DevInfo;
> +    SP_DEVICE_INTERFACE_DATA InterfaceData;
> +    SP_DEVICE_INTERFACE_DETAIL_DATA *DetailData = NULL;
> +    DWORD BufferSize;
> +    PXENCONTROL_CONTEXT Context;
> +
> +    Context = malloc(sizeof(*Context));
> +    if (Context == NULL)
> +        return ERROR_NOT_ENOUGH_MEMORY;
> +
> +    Context->Logger = Logger;
> +    Context->LogLevel = XLL_INFO;
> +    Context->RequestId = 1;
> +    InitializeListHead(&Context->RequestList);
> +    InitializeCriticalSection(&Context->RequestListLock);
> +
> +    DevInfo = SetupDiGetClassDevs(&GUID_INTERFACE_XENIFACE, 0, NULL,
> DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
> +    if (DevInfo == INVALID_HANDLE_VALUE) {
> +        _Log(Logger, XLL_ERROR, Context->LogLevel, __FUNCTION__,
> +             L"XENIFACE device class doesn't exist");
> +        goto fail;
> +    }
> +
> +    InterfaceData.cbSize = sizeof(InterfaceData);
> +    if (!SetupDiEnumDeviceInterfaces(DevInfo, NULL,
> &GUID_INTERFACE_XENIFACE, 0, &InterfaceData)) {
> +        _Log(Logger, XLL_ERROR, Context->LogLevel, __FUNCTION__,
> +             L"Failed to enumerate XENIFACE devices");
> +        goto fail;
> +    }
> +
> +    SetupDiGetDeviceInterfaceDetail(DevInfo, &InterfaceData, NULL, 0,
> &BufferSize, NULL);
> +    if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) {
> +        _Log(Logger, XLL_ERROR, Context->LogLevel, __FUNCTION__,
> +             L"Failed to get buffer size for device details");
> +        goto fail;
> +    }
> +
> +    // Using 'BufferSize' from failed function call
> +#pragma warning(suppress: 6102)
> +    DetailData = (SP_DEVICE_INTERFACE_DETAIL_DATA *)malloc(BufferSize);
> +    if (!DetailData) {
> +        SetLastError(ERROR_OUTOFMEMORY);
> +        goto fail;
> +    }
> +
> +    DetailData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
> +
> +    if (!SetupDiGetDeviceInterfaceDetail(DevInfo, &InterfaceData,
> DetailData, BufferSize, NULL, NULL)) {
> +        _Log(Logger, XLL_ERROR, Context->LogLevel, __FUNCTION__,
> +             L"Failed to get XENIFACE device path");
> +        goto fail;
> +    }
> +
> +    Context->XenIface = CreateFile(DetailData->DevicePath,
> +                                   FILE_GENERIC_READ | FILE_GENERIC_WRITE,
> +                                   0,
> +                                   NULL,
> +                                   OPEN_EXISTING,
> +                                   FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
> +                                   NULL);
> +
> +    if (Context->XenIface == INVALID_HANDLE_VALUE) {
> +        _Log(Logger, XLL_ERROR, Context->LogLevel, __FUNCTION__,
> +             L"Failed to open XENIFACE device, path: %s", DetailData-
> >DevicePath);
> +        goto fail;
> +    }
> +
> +    _Log(Logger, XLL_ERROR, Context->LogLevel, __FUNCTION__,
> +         L"XenIface handle: %p", Context->XenIface);
> +
> +    free(DetailData);
> +    *Xc = Context;
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    _Log(Logger, XLL_ERROR, Context->LogLevel, __FUNCTION__,
> +         L"Error: 0x%x", GetLastError());
> +
> +    free(DetailData);
> +    return GetLastError();
> +}
> +
> +void
> +XcClose(
> +    IN  PXENCONTROL_CONTEXT Xc
> +    )
> +{
> +    CloseHandle(Xc->XenIface);
> +    DeleteCriticalSection(&Xc->RequestListLock);
> +    free(Xc);
> +}
> +
> +DWORD
> +XcEvtchnBindUnbound(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  USHORT RemoteDomain,
> +    IN  HANDLE Event,
> +    IN  BOOL Mask,
> +    OUT ULONG *LocalPort
> +    )
> +{
> +    XENIFACE_EVTCHN_BIND_UNBOUND_IN In;
> +    XENIFACE_EVTCHN_BIND_UNBOUND_OUT Out;
> +    DWORD Returned;
> +    BOOL Success;
> +
> +    In.RemoteDomain = RemoteDomain;
> +    In.Event = Event;
> +    In.Mask = !!Mask;
> +
> +    Log(XLL_DEBUG, L"RemoteDomain: %d, Event: %p, Mask: %d",
> RemoteDomain, Event, Mask);
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_EVTCHN_BIND_UNBOUND,
> +                              &In, sizeof(In),
> +                              &Out, sizeof(Out),
> +                              &Returned,
> +                              NULL);
> +
> +    if (!Success) {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_EVTCHN_BIND_UNBOUND_PORT
> failed");
> +        goto fail;
> +    }
> +
> +    *LocalPort = Out.LocalPort;
> +    Log(XLL_DEBUG, L"LocalPort: %lu", *LocalPort);
> +
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
> +    return GetLastError();
> +}
> +
> +DWORD
> +XcEvtchnBindInterdomain(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  USHORT RemoteDomain,
> +    IN  ULONG RemotePort,
> +    IN  HANDLE Event,
> +    IN  BOOL Mask,
> +    OUT ULONG *LocalPort
> +    )
> +{
> +    XENIFACE_EVTCHN_BIND_INTERDOMAIN_IN In;
> +    XENIFACE_EVTCHN_BIND_INTERDOMAIN_OUT Out;
> +    DWORD Returned;
> +    BOOL Success;
> +
> +    In.RemoteDomain = RemoteDomain;
> +    In.RemotePort = RemotePort;
> +    In.Event = Event;
> +    In.Mask = !!Mask;
> +
> +    Log(XLL_DEBUG, L"RemoteDomain: %d, RemotePort %lu, Event: %p,
> Mask: %d",
> +        RemoteDomain, RemotePort, Event, Mask);
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_EVTCHN_BIND_INTERDOMAIN,
> +                              &In, sizeof(In),
> +                              &Out, sizeof(Out),
> +                              &Returned,
> +                              NULL);
> +
> +    if (!Success) {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_EVTCHN_BIND_INTERDOMAIN
> failed");
> +        goto fail;
> +    }
> +
> +    *LocalPort = Out.LocalPort;
> +    Log(XLL_DEBUG, L"LocalPort: %lu", *LocalPort);
> +
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
> +    return GetLastError();
> +}
> +
> +DWORD
> +XcEvtchnClose(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  ULONG LocalPort
> +    )
> +{
> +    XENIFACE_EVTCHN_CLOSE_IN In;
> +    DWORD Returned;
> +    BOOL Success;
> +
> +    In.LocalPort = LocalPort;
> +
> +    Log(XLL_DEBUG, L"LocalPort: %lu", LocalPort);
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_EVTCHN_CLOSE,
> +                              &In, sizeof(In),
> +                              NULL, 0,
> +                              &Returned,
> +                              NULL);
> +
> +    if (!Success) {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_EVTCHN_CLOSE failed");
> +        goto fail;
> +    }
> +
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
> +    return GetLastError();
> +}
> +
> +DWORD
> +XcEvtchnNotify(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  ULONG LocalPort
> +    )
> +{
> +    XENIFACE_EVTCHN_NOTIFY_IN In;
> +    DWORD Returned;
> +    BOOL Success;
> +
> +    In.LocalPort = LocalPort;
> +
> +    Log(XLL_DEBUG, L"LocalPort: %lu", LocalPort);
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_EVTCHN_NOTIFY,
> +                              &In, sizeof(In),
> +                              NULL, 0,
> +                              &Returned,
> +                              NULL);
> +
> +    if (!Success) {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_EVTCHN_NOTIFY failed");
> +        goto fail;
> +    }
> +
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
> +    return GetLastError();
> +}
> +
> +DWORD
> +XcEvtchnUnmask(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  ULONG LocalPort
> +    )
> +{
> +    XENIFACE_EVTCHN_UNMASK_IN In;
> +    DWORD Returned;
> +    BOOL Success;
> +
> +    In.LocalPort = LocalPort;
> +
> +    Log(XLL_DEBUG, L"LocalPort: %lu", LocalPort);
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_EVTCHN_UNMASK,
> +                              &In, sizeof(In),
> +                              NULL, 0,
> +                              &Returned,
> +                              NULL);
> +
> +    if (!Success) {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_EVTCHN_UNMASK failed");
> +        goto fail;
> +    }
> +
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
> +    return GetLastError();
> +}
> +
> +static PXENCONTROL_GNTTAB_REQUEST
> +FindRequest(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PVOID Address
> +    )
> +{
> +    PLIST_ENTRY Entry;
> +    PXENCONTROL_GNTTAB_REQUEST ReturnRequest = NULL;
> +
> +    EnterCriticalSection(&Xc->RequestListLock);
> +    Entry = Xc->RequestList.Flink;
> +    while (Entry != &Xc->RequestList) {
> +        PXENCONTROL_GNTTAB_REQUEST Request =
> CONTAINING_RECORD(Entry, XENCONTROL_GNTTAB_REQUEST, ListEntry);
> +
> +        if (Request->Address == Address) {
> +            ReturnRequest = Request;
> +            break;
> +        }
> +
> +        Entry = Entry->Flink;
> +    }
> +    LeaveCriticalSection(&Xc->RequestListLock);
> +
> +    return ReturnRequest;
> +}
> +
> +DWORD
> +XcGnttabPermitForeignAccess(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  USHORT RemoteDomain,
> +    IN  ULONG NumberPages,
> +    IN  ULONG NotifyOffset,
> +    IN  ULONG NotifyPort,
> +    IN  XENIFACE_GNTTAB_PAGE_FLAGS Flags,
> +    OUT PVOID *Address,
> +    OUT ULONG *References
> +    )
> +{
> +    XENIFACE_GNTTAB_PERMIT_FOREIGN_ACCESS_IN In;
> +    XENIFACE_GNTTAB_PERMIT_FOREIGN_ACCESS_OUT *Out;
> +    PXENCONTROL_GNTTAB_REQUEST Request;
> +    DWORD Returned, Size;
> +    BOOL Success;
> +    DWORD Status;
> +
> +    // lock the whole operation to not generate duplicate IDs
> +    EnterCriticalSection(&Xc->RequestListLock);
> +
> +    In.RequestId = Xc->RequestId;
> +    In.RemoteDomain = RemoteDomain;
> +    In.NumberPages = NumberPages;
> +    In.NotifyOffset = NotifyOffset;
> +    In.NotifyPort = NotifyPort;
> +    In.Flags = Flags;
> +
> +    Size =
> (ULONG)FIELD_OFFSET(XENIFACE_GNTTAB_PERMIT_FOREIGN_ACCESS_OU
> T, References[NumberPages]);
> +    Out = malloc(Size);
> +    Request = malloc(sizeof(*Request));
> +
> +    Status = ERROR_OUTOFMEMORY;
> +    if (!Request || !Out)
> +        goto fail;
> +
> +    ZeroMemory(Request, sizeof(*Request));
> +    Request->Id = In.RequestId;
> +
> +    Log(XLL_DEBUG, L"Id %lu, RemoteDomain: %d, NumberPages: %lu,
> NotifyOffset: 0x%x, NotifyPort: %lu, Flags: 0x%x",
> +        In.RequestId, RemoteDomain, NumberPages, NotifyOffset, NotifyPort,
> Flags);
> +
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_GNTTAB_PERMIT_FOREIGN_ACCESS,
> +                              &In, sizeof(In),
> +                              Out, Size,
> +                              &Returned,
> +                              &Request->Overlapped);
> +
> +    Status = GetLastError();
> +    // this IOCTL is expected to be pending on success
> +    if (!Success) {
> +        if (Status != ERROR_IO_PENDING) {
> +            Log(XLL_ERROR, L"IOCTL_XENIFACE_GNTTAB_GRANT_PAGES
> failed");
> +            goto fail;
> +        }
> +    } else {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_GNTTAB_GRANT_PAGES not
> pending");
> +        Status = ERROR_UNIDENTIFIED_ERROR;
> +        goto fail;
> +    }
> +
> +    Request->Address = Out->Address;
> +
> +    InsertTailList(&Xc->RequestList, &Request->ListEntry);
> +    Xc->RequestId++;
> +    LeaveCriticalSection(&Xc->RequestListLock);
> +
> +    *Address = Out->Address;
> +    memcpy(References, &Out->References, NumberPages *
> sizeof(ULONG));
> +    Log(XLL_DEBUG, L"Address: %p", *Address);
> +    for (ULONG i = 0; i < NumberPages; i++)
> +        Log(XLL_DEBUG, L"Grant ref[%lu]: %lu", i, Out->References[i]);
> +
> +    free(Out);
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    LeaveCriticalSection(&Xc->RequestListLock);
> +    Log(XLL_ERROR, L"Error: 0x%x", Status);
> +    free(Out);
> +    free(Request);
> +    return Status;
> +}
> +
> +DWORD
> +XcGnttabRevokeForeignAccess(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PVOID Address
> +    )
> +{
> +    XENIFACE_GNTTAB_REVOKE_FOREIGN_ACCESS_IN In;
> +    PXENCONTROL_GNTTAB_REQUEST Request;
> +    DWORD Returned;
> +    BOOL Success;
> +    DWORD Status;
> +
> +    Log(XLL_DEBUG, L"Address: %p", Address);
> +
> +    Status = ERROR_NOT_FOUND;
> +    Request = FindRequest(Xc, Address);
> +    if (!Request) {
> +        Log(XLL_ERROR, L"Address %p not granted", Address);
> +        goto fail;
> +    }
> +
> +    In.RequestId = Request->Id;
> +
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_GNTTAB_REVOKE_FOREIGN_ACCESS,
> +                              &In, sizeof(In),
> +                              NULL, 0,
> +                              &Returned,
> +                              NULL);
> +
> +    Status = GetLastError();
> +    if (!Success) {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_GNTTAB_UNGRANT_PAGES
> failed");
> +        goto fail;
> +    }
> +
> +    EnterCriticalSection(&Xc->RequestListLock);
> +    RemoveEntryList(&Request->ListEntry);
> +    LeaveCriticalSection(&Xc->RequestListLock);
> +    free(Request);
> +
> +    return Status;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: %d 0x%x", Status, Status);
> +    return Status;
> +}
> +
> +DWORD
> +XcGnttabMapForeignPages(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  USHORT RemoteDomain,
> +    IN  ULONG NumberPages,
> +    IN  PULONG References,
> +    IN  ULONG NotifyOffset,
> +    IN  ULONG NotifyPort,
> +    IN  XENIFACE_GNTTAB_PAGE_FLAGS Flags,
> +    OUT PVOID *Address
> +    )
> +{
> +    XENIFACE_GNTTAB_MAP_FOREIGN_PAGES_IN *In;
> +    XENIFACE_GNTTAB_MAP_FOREIGN_PAGES_OUT Out;
> +    PXENCONTROL_GNTTAB_REQUEST Request;
> +    DWORD Returned, Size;
> +    BOOL Success;
> +    DWORD Status;
> +
> +    // lock the whole operation to not generate duplicate IDs
> +    EnterCriticalSection(&Xc->RequestListLock);
> +
> +    Status = ERROR_OUTOFMEMORY;
> +    Size =
> (ULONG)FIELD_OFFSET(XENIFACE_GNTTAB_MAP_FOREIGN_PAGES_IN,
> References[NumberPages]);
> +    In = malloc(Size);
> +    Request = malloc(sizeof(*Request));
> +    if (!In || !Request)
> +        goto fail;
> +
> +    In->RequestId = Xc->RequestId;
> +    In->RemoteDomain = RemoteDomain;
> +    In->NumberPages = NumberPages;
> +    In->NotifyOffset = NotifyOffset;
> +    In->NotifyPort = NotifyPort;
> +    In->Flags = Flags;
> +    memcpy(&In->References, References, NumberPages * sizeof(ULONG));
> +
> +    ZeroMemory(Request, sizeof(*Request));
> +    Request->Id = In->RequestId;
> +
> +    Log(XLL_DEBUG, L"Id %lu, RemoteDomain: %d, NumberPages: %lu,
> NotifyOffset: 0x%x, NotifyPort: %lu, Flags: 0x%x",
> +        In->RequestId, RemoteDomain, NumberPages, NotifyOffset,
> NotifyPort, Flags);
> +
> +    for (ULONG i = 0; i < NumberPages; i++)
> +        Log(XLL_DEBUG, L"Grant ref[%lu]: %lu", i, References[i]);
> +
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_GNTTAB_MAP_FOREIGN_PAGES,
> +                              In, Size,
> +                              &Out, sizeof(Out),
> +                              &Returned,
> +                              &Request->Overlapped);
> +
> +    Status = GetLastError();
> +    // this IOCTL is expected to be pending on success
> +    if (!Success) {
> +        if (Status != ERROR_IO_PENDING) {
> +            Log(XLL_ERROR,
> L"IOCTL_XENIFACE_GNTTAB_MAP_FOREIGN_PAGES failed");
> +            goto fail;
> +        }
> +    } else {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_GNTTAB_MAP_FOREIGN_PAGES
> not pending");
> +        Status = ERROR_UNIDENTIFIED_ERROR;
> +        goto fail;
> +    }
> +
> +    Request->Address = Out.Address;
> +    InsertTailList(&Xc->RequestList, &Request->ListEntry);
> +    Xc->RequestId++;
> +    LeaveCriticalSection(&Xc->RequestListLock);
> +
> +    *Address = Out.Address;
> +
> +    Log(XLL_DEBUG, L"Address: %p", *Address);
> +
> +    free(In);
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    LeaveCriticalSection(&Xc->RequestListLock);
> +    Log(XLL_ERROR, L"Error: 0x%x", Status);
> +    free(In);
> +    free(Request);
> +    return Status;
> +}
> +
> +DWORD
> +XcGnttabUnmapForeignPages(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PVOID Address
> +    )
> +{
> +    XENIFACE_GNTTAB_UNMAP_FOREIGN_PAGES_IN In;
> +    PXENCONTROL_GNTTAB_REQUEST Request;
> +    DWORD Returned;
> +    BOOL Success;
> +    DWORD Status;
> +
> +    Log(XLL_DEBUG, L"Address: %p", Address);
> +
> +    Status = ERROR_NOT_FOUND;
> +    Request = FindRequest(Xc, Address);
> +    if (!Request) {
> +        Log(XLL_ERROR, L"Address %p not mapped", Address);
> +        goto fail;
> +    }
> +
> +    In.RequestId = Request->Id;
> +
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_GNTTAB_UNMAP_FOREIGN_PAGES,
> +                              &In, sizeof(In),
> +                              NULL, 0,
> +                              &Returned,
> +                              NULL);
> +
> +    Status = GetLastError();
> +    if (!Success) {
> +        Log(XLL_ERROR,
> L"IOCTL_XENIFACE_GNTTAB_UNMAP_FOREIGN_PAGES failed");
> +        goto fail;
> +    }
> +
> +    EnterCriticalSection(&Xc->RequestListLock);
> +    RemoveEntryList(&Request->ListEntry);
> +    LeaveCriticalSection(&Xc->RequestListLock);
> +    free(Request);
> +
> +    return Status;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: 0x%x", Status);
> +    return Status;
> +}
> +
> +DWORD
> +XcStoreRead(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PSTR Path,
> +    IN  DWORD cbValue,
> +    OUT CHAR *Value
> +    )
> +{
> +    DWORD Returned;
> +    BOOL Success;
> +
> +    Log(XLL_DEBUG, L"Path: '%S'", Path);
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_STORE_READ,
> +                              Path, (DWORD)strlen(Path) + 1,
> +                              Value, cbValue,
> +                              &Returned,
> +                              NULL);
> +
> +    if (!Success) {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_STORE_READ failed");
> +        goto fail;
> +    }
> +
> +    Log(XLL_DEBUG, L"Value: '%S'", Value);
> +
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
> +    return GetLastError();
> +}
> +
> +DWORD
> +XcStoreWrite(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PCHAR Path,
> +    IN  PCHAR Value
> +    )
> +{
> +    PCHAR Buffer;
> +    DWORD cbBuffer;
> +    DWORD Returned;
> +    BOOL Success;
> +
> +    cbBuffer = (DWORD)(strlen(Path) + 1 + strlen(Value) + 1 + 1);
> +    Buffer = malloc(cbBuffer);
> +    if (!Buffer) {
> +        SetLastError(ERROR_OUTOFMEMORY);
> +        goto fail;
> +    }
> +
> +    ZeroMemory(Buffer, cbBuffer);
> +    memcpy(Buffer, Path, strlen(Path));
> +    memcpy(Buffer + strlen(Path) + 1, Value, strlen(Value));
> +
> +    Log(XLL_DEBUG, L"Path: '%S', Value: '%S'", Path, Value);
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_STORE_WRITE,
> +                              Buffer, cbBuffer,
> +                              NULL, 0,
> +                              &Returned,
> +                              NULL);
> +
> +    if (!Success) {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_STORE_WRITE failed");
> +        goto fail;
> +    }
> +
> +    free(Buffer);
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
> +    free(Buffer);
> +    return GetLastError();
> +}
> +
> +DWORD
> +XcStoreDirectory(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PCHAR Path,
> +    IN  DWORD cbOutput,
> +    OUT CHAR *Output
> +    )
> +{
> +    DWORD Returned;
> +    BOOL Success;
> +
> +    Log(XLL_DEBUG, L"Path: '%S'", Path);
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_STORE_DIRECTORY,
> +                              Path, (DWORD)strlen(Path) + 1,
> +                              Output, cbOutput,
> +                              &Returned,
> +                              NULL);
> +
> +    if (!Success) {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_STORE_DIRECTORY failed");
> +        goto fail;
> +    }
> +
> +    _LogMultiSz(Xc, __FUNCTION__, XLL_DEBUG, Output);
> +
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
> +    return GetLastError();
> +}
> +
> +DWORD
> +XcStoreRemove(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PCHAR Path
> +    )
> +{
> +    DWORD Returned;
> +    BOOL Success;
> +
> +    Log(XLL_DEBUG, L"Path: '%S'", Path);
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_STORE_REMOVE,
> +                              Path, (DWORD)strlen(Path) + 1,
> +                              NULL, 0,
> +                              &Returned,
> +                              NULL);
> +
> +    if (!Success) {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_STORE_REMOVE failed");
> +        goto fail;
> +    }
> +
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
> +    return GetLastError();
> +}
> +
> +DWORD
> +XcStoreSetPermissions(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PCHAR Path,
> +    IN  ULONG Count,
> +    IN  PXENIFACE_STORE_PERMISSION Permissions
> +    )
> +{
> +    DWORD Returned, Size;
> +    BOOL Success;
> +    XENIFACE_STORE_SET_PERMISSIONS_IN *In = NULL;
> +
> +    Log(XLL_DEBUG, L"Path: '%S', Count: %lu", Path, Count);
> +    for (ULONG i = 0; i < Count; i++)
> +        Log(XLL_DEBUG, L"Domain: %d, Mask: 0x%x", Permissions[i].Domain,
> Permissions[i].Mask);
> +
> +    Size = (ULONG)FIELD_OFFSET(XENIFACE_STORE_SET_PERMISSIONS_IN,
> Permissions[Count]);
> +    In = malloc(Size);
> +    if (!In) {
> +        SetLastError(ERROR_OUTOFMEMORY);
> +        goto fail;
> +    }
> +
> +    In->Path = Path;
> +    In->PathLength = (DWORD)strlen(In->Path) + 1;
> +    In->NumberPermissions = Count;
> +    memcpy(&In->Permissions, Permissions, Count *
> sizeof(XENIFACE_STORE_PERMISSION));
> +
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_STORE_SET_PERMISSIONS,
> +                              In, Size,
> +                              NULL, 0,
> +                              &Returned,
> +                              NULL);
> +
> +    if (!Success) {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_STORE_SET_PERMISSIONS failed");
> +        goto fail;
> +    }
> +
> +    free(In);
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
> +    free(In);
> +    return GetLastError();
> +}
> +
> +DWORD
> +XcStoreAddWatch(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PCHAR Path,
> +    IN  HANDLE Event,
> +    OUT PVOID *Handle
> +    )
> +{
> +    DWORD Returned;
> +    BOOL Success;
> +    XENIFACE_STORE_ADD_WATCH_IN In;
> +    XENIFACE_STORE_ADD_WATCH_OUT Out;
> +
> +    Log(XLL_DEBUG, L"Path: '%S', Event: %p", Path, Event);
> +
> +    In.Path = Path;
> +    In.PathLength = (DWORD)strlen(Path) + 1;
> +    In.Event = Event;
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_STORE_ADD_WATCH,
> +                              &In, sizeof(In),
> +                              &Out, sizeof(Out),
> +                              &Returned,
> +                              NULL);
> +
> +    if (!Success) {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_STORE_ADD_WATCH failed");
> +        goto fail;
> +    }
> +
> +    *Handle = Out.Context;
> +
> +    Log(XLL_DEBUG, L"Handle: %p", *Handle);
> +
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
> +    return GetLastError();
> +}
> +
> +DWORD
> +XcStoreRemoveWatch(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PVOID Handle
> +    )
> +{
> +    DWORD Returned;
> +    BOOL Success;
> +    XENIFACE_STORE_REMOVE_WATCH_IN In;
> +
> +    Log(XLL_DEBUG, L"Handle: %p", Handle);
> +
> +    In.Context = Handle;
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_STORE_REMOVE_WATCH,
> +                              &In, sizeof(In),
> +                              NULL, 0,
> +                              &Returned,
> +                              NULL);
> +
> +    if (!Success) {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_STORE_REMOVE_WATCH failed");
> +        goto fail;
> +    }
> +
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
> +    return GetLastError();
> +}
> diff --git a/src/xencontrol/xencontrol.rc b/src/xencontrol/xencontrol.rc
> new file mode 100644
> index 0000000..6c33e84
> --- /dev/null
> +++ b/src/xencontrol/xencontrol.rc
> @@ -0,0 +1,24 @@
> +#include <windows.h>
> +#include <ntverp.h>
> +
> +#undef VER_COMPANYNAME_STR
> +#undef VER_PRODUCTNAME_STR
> +#undef VER_PRODUCTVERSION
> +#undef VER_PRODUCTVERSION_STR
> +
> +#include <version.h>
> +
> +#define VER_COMPANYNAME_STR         VENDOR_NAME_STR
> +#define VER_LEGALCOPYRIGHT_STR      "Copyright (c) Invisible Things Lab"
> +
> +#define VER_PRODUCTNAME_STR         "XENIFACE"
> +#define VER_PRODUCTVERSION
> MAJOR_VERSION,MINOR_VERSION,MICRO_VERSION,BUILD_NUMBER
> +#define VER_PRODUCTVERSION_STR      MAJOR_VERSION_STR "."
> MINOR_VERSION_STR "." MICRO_VERSION_STR "." BUILD_NUMBER_STR
> +
> +#define VER_INTERNALNAME_STR        "XENCONTROL.DLL"
> +#define VER_FILEDESCRIPTION_STR     "Xen interface user library"
> +
> +#define VER_FILETYPE                VFT_DLL
> +#define VER_FILESUBTYPE             0
> +
> +#include <common.ver>
> diff --git a/src/xencontrol/xencontrol_private.h
> b/src/xencontrol/xencontrol_private.h
> new file mode 100644
> index 0000000..685bcfa
> --- /dev/null
> +++ b/src/xencontrol/xencontrol_private.h
> @@ -0,0 +1,49 @@
> +#ifndef _XENCONTROL_PRIVATE_H_
> +#define _XENCONTROL_PRIVATE_H_
> +
> +#include <windows.h>
> +#include "xencontrol.h"
> +
> +#define Log(level, format, ...) \
> +        _Log(Xc->Logger, level, Xc->LogLevel, __FUNCTION__, format,
> __VA_ARGS__)
> +
> +#define InitializeListHead(ListHead) ( \
> +    (ListHead)->Flink = (ListHead)->Blink = (ListHead))
> +
> +#define InsertTailList(ListHead, Entry) { \
> +    PLIST_ENTRY _EX_Blink; \
> +    PLIST_ENTRY _EX_ListHead; \
> +    _EX_ListHead = (ListHead); \
> +    _EX_Blink = _EX_ListHead->Blink; \
> +    (Entry)->Flink = _EX_ListHead; \
> +    (Entry)->Blink = _EX_Blink; \
> +    _EX_Blink->Flink = (Entry); \
> +    _EX_ListHead->Blink = (Entry); \
> +    }
> +
> +#define RemoveEntryList(Entry) { \
> +    PLIST_ENTRY _EX_Blink; \
> +    PLIST_ENTRY _EX_Flink; \
> +    _EX_Flink = (Entry)->Flink; \
> +    _EX_Blink = (Entry)->Blink; \
> +    _EX_Blink->Flink = _EX_Flink; \
> +    _EX_Flink->Blink = _EX_Blink; \
> +    }
> +
> +typedef struct _XENCONTROL_CONTEXT {
> +    HANDLE XenIface;
> +    XENCONTROL_LOGGER *Logger;
> +    XENCONTROL_LOG_LEVEL LogLevel;
> +    ULONG RequestId;
> +    LIST_ENTRY RequestList;
> +    CRITICAL_SECTION RequestListLock;
> +} XENCONTROL_CONTEXT, *PXENCONTROL_CONTEXT;
> +
> +typedef struct _XENCONTROL_GNTTAB_REQUEST {
> +    LIST_ENTRY  ListEntry;
> +    OVERLAPPED  Overlapped;
> +    ULONG       Id;
> +    PVOID       Address;
> +} XENCONTROL_GNTTAB_REQUEST, *PXENCONTROL_GNTTAB_REQUEST;
> +
> +#endif // _XENCONTROL_PRIVATE_H_
> diff --git a/vs2013/xencontrol.props b/vs2013/xencontrol.props
> new file mode 100644
> index 0000000..22c1704
> --- /dev/null
> +++ b/vs2013/xencontrol.props
> @@ -0,0 +1,84 @@
> +<?xml version="1.0" encoding="utf-8"?>
> +<Project ToolsVersion="4.0"
> xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
> +
> +  <ImportGroup Label="PropertySheets" />
> +
> +  <PropertyGroup Label="UserMacros" />
> +
> +  <PropertyGroup>
> +    <IncludePath>$(SolutionDir)\..\include;$(IncludePath)</IncludePath>
> +
> <LibraryPath>$(SolutionDir)\$(Configuration)\$(Platform);$(LibraryPath)</Li
> braryPath>
> +    <OutDir>$(SolutionDir)\$(Configuration)\$(Platform)\</OutDir>
> +
> <IntDir>$(SolutionDir)\$(ProjectName)\$(Configuration)\$(Platform)\</IntDi
> r>
> +    <LinkIncremental>false</LinkIncremental>
> +  </PropertyGroup>
> +
> +  <PropertyGroup Label="Configuration">
> +    <LinkIncremental>false</LinkIncremental>
> +    <PlatformToolset>v120</PlatformToolset>
> +  </PropertyGroup>
> +
> +  <PropertyGroup Condition="'$(Configuration)'=='Debug'"
> Label="Configuration">
> +    <RunCodeAnalysis>true</RunCodeAnalysis>
> +    <UseDebugLibraries>true</UseDebugLibraries>
> +  </PropertyGroup>
> +
> +  <PropertyGroup Condition="'$(Configuration)'=='Release'"
> Label="Configuration">
> +    <UseDebugLibraries>false</UseDebugLibraries>
> +    <WholeProgramOptimization>true</WholeProgramOptimization>
> +  </PropertyGroup>
> +
> +  <ItemDefinitionGroup>
> +    <Link>
> +
> <AdditionalDependencies>setupapi.lib;ws2_32.lib;shlwapi.lib;wtsapi32.lib;us
> erenv.lib;version.lib;ntdll.lib;kernel32.lib;user32.lib;gdi32.lib;comdlg32.lib;adv
> api32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;%(AdditionalDependencies)
> </AdditionalDependencies>
> +      <GenerateDebugInformation>true</GenerateDebugInformation>
> +    </Link>
> +    <ClCompile>
> +
> <PreprocessorDefinitions>WIN32;%(PreprocessorDefinitions)</Preprocesso
> rDefinitions>
> +      <WarningLevel>Level3</WarningLevel>
> +      <PrecompiledHeader>NotUsing</PrecompiledHeader>
> +      <SDLCheck>true</SDLCheck>
> +      <ExceptionHandling>false</ExceptionHandling>
> +      <TreatWarningAsError>true</TreatWarningAsError>
> +    </ClCompile>
> +    <CustomBuildStep>
> +      <Command>xcopy /y $(TargetPath)
> $(SolutionDir)\..\xeniface\$(PlatformTarget)\
> +xcopy /y $(TargetDir)$(TargetName).pdb
> $(SolutionDir)\..\xeniface\$(PlatformTarget)\
> +if exist $(TargetDir)$(TargetName).lib xcopy /y
> $(TargetDir)$(TargetName).lib
> $(SolutionDir)\..\xeniface\$(PlatformTarget)\</Command>
> +    </CustomBuildStep>
> +    <CustomBuildStep>
> +      <Message>Copying output files</Message>
> +    </CustomBuildStep>
> +    <CustomBuildStep>
> +
> <Outputs>$(SolutionDir)\..\xeniface\$(PlatformTarget)$(TargetFileName);$(
> SolutionDir)\..\xeniface\$(PlatformTarget)$(TargetName).pdb;$(SolutionDir)
> \..\xeniface\$(PlatformTarget)$(TargetName).lib;%(Outputs)</Outputs>
> +    </CustomBuildStep>
> +    <CustomBuildStep>
> +
> <Inputs>$(TargetPath);$(TargetDir)$(TargetName).pdb;$(TargetDir)$(Target
> Name).lib</Inputs>
> +    </CustomBuildStep>
> +  </ItemDefinitionGroup>
> +
> +  <ItemDefinitionGroup Condition="'$(Configuration)'=='Debug'">
> +    <ClCompile>
> +
> <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</Preprocess
> orDefinitions>
> +      <Optimization>Disabled</Optimization>
> +      <EnablePREfast>true</EnablePREfast>
> +      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
> +    </ClCompile>
> +  </ItemDefinitionGroup>
> +
> +  <ItemDefinitionGroup Condition="'$(Configuration)'=='Release'">
> +    <ClCompile>
> +
> <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</Preproces
> sorDefinitions>
> +      <Optimization>MaxSpeed</Optimization>
> +      <FunctionLevelLinking>true</FunctionLevelLinking>
> +      <IntrinsicFunctions>true</IntrinsicFunctions>
> +      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
> +    </ClCompile>
> +    <Link>
> +      <EnableCOMDATFolding>true</EnableCOMDATFolding>
> +      <OptimizeReferences>true</OptimizeReferences>
> +    </Link>
> +  </ItemDefinitionGroup>
> +
> +  <ItemGroup />
> +</Project>
> \ No newline at end of file
> diff --git a/vs2013/xencontrol/xencontrol.vcxproj
> b/vs2013/xencontrol/xencontrol.vcxproj
> new file mode 100644
> index 0000000..4d91a38
> --- /dev/null
> +++ b/vs2013/xencontrol/xencontrol.vcxproj
> @@ -0,0 +1,62 @@
> +<?xml version="1.0" encoding="utf-8"?>
> +<Project DefaultTargets="Build" ToolsVersion="12.0"
> xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
> +  <ItemGroup Label="ProjectConfigurations">
> +    <ProjectConfiguration Include="Debug|Win32">
> +      <Configuration>Debug</Configuration>
> +      <Platform>Win32</Platform>
> +    </ProjectConfiguration>
> +    <ProjectConfiguration Include="Debug|x64">
> +      <Configuration>Debug</Configuration>
> +      <Platform>x64</Platform>
> +    </ProjectConfiguration>
> +    <ProjectConfiguration Include="Release|Win32">
> +      <Configuration>Release</Configuration>
> +      <Platform>Win32</Platform>
> +    </ProjectConfiguration>
> +    <ProjectConfiguration Include="Release|x64">
> +      <Configuration>Release</Configuration>
> +      <Platform>x64</Platform>
> +    </ProjectConfiguration>
> +  </ItemGroup>
> +  <PropertyGroup Label="Globals">
> +    <ProjectGuid>{D386D8E9-D015-4AD2-A5C2-
> 4F845A803FA2}</ProjectGuid>
> +    <Keyword>Win32Proj</Keyword>
> +    <RootNamespace>xencontrol</RootNamespace>
> +  </PropertyGroup>
> +  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
> +  <PropertyGroup Label="Configuration">
> +    <ConfigurationType>DynamicLibrary</ConfigurationType>
> +    <CharacterSet>Unicode</CharacterSet>
> +  </PropertyGroup>
> +  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
> +  <ImportGroup Label="PropertySheets">
> +    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props"
> Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')"
> Label="LocalAppDataPlatform" />
> +    <Import Project="..\xencontrol.props" />
> +  </ImportGroup>
> +  <ItemDefinitionGroup>
> +    <ClCompile>
> +
> <PreprocessorDefinitions>_WINDOWS;_USRDLL;XENCONTROL_EXPORTS;%(
> PreprocessorDefinitions)</PreprocessorDefinitions>
> +    </ClCompile>
> +    <Link>
> +      <SubSystem>Windows</SubSystem>
> +    </Link>
> +  </ItemDefinitionGroup>
> +  <ItemGroup>
> +    <ClCompile Include="..\..\src\xencontrol\xencontrol.c" />
> +  </ItemGroup>
> +  <ItemGroup>
> +    <ClInclude Include="..\..\include\xencontrol.h" />
> +    <ClInclude Include="..\..\src\xencontrol\xencontrol_private.h" />
> +  </ItemGroup>
> +  <ItemGroup>
> +    <ResourceCompile Include="..\..\src\xencontrol\xencontrol.rc" />
> +  </ItemGroup>
> +  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
> +  <ImportGroup Label="ExtensionTargets">
> +  </ImportGroup>
> +  <ProjectExtensions>
> +    <VisualStudio>
> +      <UserProperties />
> +    </VisualStudio>
> +  </ProjectExtensions>
> +</Project>
> \ No newline at end of file
> diff --git a/vs2013/xencontrol/xencontrol.vcxproj.filters
> b/vs2013/xencontrol/xencontrol.vcxproj.filters
> new file mode 100644
> index 0000000..c6de099
> --- /dev/null
> +++ b/vs2013/xencontrol/xencontrol.vcxproj.filters
> @@ -0,0 +1,13 @@
> +<?xml version="1.0" encoding="utf-8"?>
> +<Project ToolsVersion="4.0"
> xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
> +  <ItemGroup>
> +    <ClInclude Include="..\..\include\xencontrol.h" />
> +    <ClInclude Include="..\..\src\xencontrol\xencontrol_private.h" />
> +  </ItemGroup>
> +  <ItemGroup>
> +    <ResourceCompile Include="..\..\src\xencontrol\xencontrol.rc" />
> +  </ItemGroup>
> +  <ItemGroup>
> +    <ClCompile Include="..\..\src\xencontrol\xencontrol.c" />
> +  </ItemGroup>
> +</Project>
> \ No newline at end of file
> diff --git a/vs2013/xeniface.sln b/vs2013/xeniface.sln
> index 3c74c79..76d06b4 100644
> --- a/vs2013/xeniface.sln
> +++ b/vs2013/xeniface.sln
> @@ -17,6 +17,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}")
> = "package", "package\package.
>  		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B} = {2E61D2CC-
> 865E-442C-8C83-B8DAFD7BBD3B}
>  	EndProjectSection
>  EndProject
> +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xencontrol",
> "xencontrol\xencontrol.vcxproj", "{D386D8E9-D015-4AD2-A5C2-
> 4F845A803FA2}"
> +EndProject
>  Global
>  	GlobalSection(SolutionConfigurationPlatforms) = preSolution
>  		Windows 7 Debug|Win32 = Windows 7 Debug|Win32
> @@ -165,6 +167,42 @@ Global
>  		{9B071A35-897C-477A-AEB7-95F77618A21D}.Windows Vista
> Release|x64.ActiveCfg = Windows Vista Release|x64
>  		{9B071A35-897C-477A-AEB7-95F77618A21D}.Windows Vista
> Release|x64.Build.0 = Windows Vista Release|x64
>  		{9B071A35-897C-477A-AEB7-95F77618A21D}.Windows Vista
> Release|x64.Deploy.0 = Windows Vista Release|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7
> Debug|Win32.ActiveCfg = Debug|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7
> Debug|Win32.Build.0 = Debug|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7
> Debug|Win32.Deploy.0 = Debug|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7
> Debug|x64.ActiveCfg = Debug|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7
> Debug|x64.Build.0 = Debug|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7
> Debug|x64.Deploy.0 = Debug|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7
> Release|Win32.ActiveCfg = Release|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7
> Release|Win32.Build.0 = Release|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7
> Release|Win32.Deploy.0 = Release|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7
> Release|x64.ActiveCfg = Release|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7
> Release|x64.Build.0 = Release|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7
> Release|x64.Deploy.0 = Release|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows
> Developer Preview Debug|Win32.ActiveCfg = Debug|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows
> Developer Preview Debug|Win32.Build.0 = Debug|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows
> Developer Preview Debug|Win32.Deploy.0 = Debug|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows
> Developer Preview Debug|x64.ActiveCfg = Debug|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows
> Developer Preview Debug|x64.Build.0 = Debug|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows
> Developer Preview Debug|x64.Deploy.0 = Debug|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows
> Developer Preview Release|Win32.ActiveCfg = Release|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows
> Developer Preview Release|Win32.Build.0 = Release|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows
> Developer Preview Release|Win32.Deploy.0 = Release|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows
> Developer Preview Release|x64.ActiveCfg = Release|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows
> Developer Preview Release|x64.Build.0 = Release|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows
> Developer Preview Release|x64.Deploy.0 = Release|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista
> Debug|Win32.ActiveCfg = Debug|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista
> Debug|Win32.Build.0 = Debug|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista
> Debug|Win32.Deploy.0 = Debug|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista
> Debug|x64.ActiveCfg = Debug|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista
> Debug|x64.Build.0 = Debug|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista
> Debug|x64.Deploy.0 = Debug|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista
> Release|Win32.ActiveCfg = Release|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista
> Release|Win32.Build.0 = Release|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista
> Release|Win32.Deploy.0 = Release|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista
> Release|x64.ActiveCfg = Release|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista
> Release|x64.Build.0 = Release|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista
> Release|x64.Deploy.0 = Release|x64
>  	EndGlobalSection
>  	GlobalSection(SolutionProperties) = preSolution
>  		HideSolutionNode = FALSE
> --
> 1.8.1.msysgit.1
> 
> 
> 
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

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

From win-pv-devel-bounces@lists.xenproject.org Thu Nov 05 16:55:41 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Nov 2015 16:55:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZuNp6-0008O8-DI; Thu, 05 Nov 2015 16:55:40 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=744ee64bb=Paul.Durrant@citrix.com>)
	id 1ZuNp4-0008O3-Uo
	for win-pv-devel@lists.xenproject.org; Thu, 05 Nov 2015 16:55:39 +0000
Received: from [85.158.139.211] by server-4.bemta-5.messagelabs.com id
	7E/9D-24856-A0A8B365; Thu, 05 Nov 2015 16:55:38 +0000
X-Env-Sender: prvs=744ee64bb=Paul.Durrant@citrix.com
X-Msg-Ref: server-9.tower-206.messagelabs.com!1446742536!1347442!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 2790 invoked from network); 5 Nov 2015 16:55:36 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-9.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	5 Nov 2015 16:55:36 -0000
X-IronPort-AV: E=Sophos;i="5.20,248,1444694400"; 
   d="scan'208";a="7025078"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: =?iso-8859-2?Q?Rafa=B3_Wojdy=B3a?= <omeg@invisiblethingslab.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [PATCH] Add a user mode library wrapper for
	XENIFACE	IOCTLs
Thread-Index: AQHRF+QQJ5B9lIAYf0ufI5DCA4J9556NpWGQ
Date: Thu, 5 Nov 2015 16:55:36 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F661441@AMSPEX01CL01.citrite.net>
References: <563B65F1.2020606@invisiblethingslab.com>
In-Reply-To: <563B65F1.2020606@invisiblethingslab.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] [PATCH] Add a user mode library wrapper for
 XENIFACE	IOCTLs
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> bounces@lists.xenproject.org] On Behalf Of Rafal Wojdyla
> Sent: 05 November 2015 14:22
> To: win-pv-devel@lists.xenproject.org
> Subject: [win-pv-devel] [PATCH] Add a user mode library wrapper for
> XENIFACE IOCTLs
> 
> Signed-off-by: Rafal Wojdyla <omeg@invisiblethingslab.com>
> ---
>  include/xencontrol.h                         | 342 ++++++++++
>  src/xencontrol/xencontrol.c                  | 915
> +++++++++++++++++++++++++++
>  src/xencontrol/xencontrol.rc                 |  24 +
>  src/xencontrol/xencontrol_private.h          |  49 ++
>  vs2013/xencontrol.props                      |  84 +++
>  vs2013/xencontrol/xencontrol.vcxproj         |  62 ++
>  vs2013/xencontrol/xencontrol.vcxproj.filters |  13 +
>  vs2013/xeniface.sln                          |  38 ++
>  8 files changed, 1527 insertions(+)
>  create mode 100644 include/xencontrol.h
>  create mode 100644 src/xencontrol/xencontrol.c
>  create mode 100644 src/xencontrol/xencontrol.rc
>  create mode 100644 src/xencontrol/xencontrol_private.h
>  create mode 100644 vs2013/xencontrol.props
>  create mode 100644 vs2013/xencontrol/xencontrol.vcxproj
>  create mode 100644 vs2013/xencontrol/xencontrol.vcxproj.filters
> 

I also notice that there's no update to the xeniface package to deliver the new DLL. Did you omit that for a reason? (I have no objection to you adding the DLL to the package... I'm happy to fix up the VS2012 vcxproj files if you don't have the older tools to hand).

  Paul

> diff --git a/include/xencontrol.h b/include/xencontrol.h
> new file mode 100644
> index 0000000..0a2f8f2
> --- /dev/null
> +++ b/include/xencontrol.h
> @@ -0,0 +1,342 @@
> +#ifndef _XENCONTROL_H_
> +#define _XENCONTROL_H_
> +
> +#include <windows.h>
> +#include <varargs.h>
> +#include "xeniface_ioctls.h"
> +
> +#ifdef XENCONTROL_EXPORTS
> +#    define XENCONTROL_API __declspec(dllexport)
> +#else
> +#    define XENCONTROL_API __declspec(dllimport)
> +#endif
> +
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
> +
> +/*! \typedef PXENCONTROL_CONTEXT
> +    \brief Library handle representing a Xen Interface session
> +*/
> +struct _XENCONTROL_CONTEXT;
> +typedef struct _XENCONTROL_CONTEXT *PXENCONTROL_CONTEXT;
> +
> +/*! \typedef XENCONTROL_LOG_LEVEL
> +    \brief Log levels used by the library
> +*/
> +typedef enum
> +_XENCONTROL_LOG_LEVEL {
> +    XLL_ERROR = 1,
> +    XLL_WARNING,
> +    XLL_INFO,
> +    XLL_DEBUG,
> +    XLL_TRACE,
> +} XENCONTROL_LOG_LEVEL;
> +
> +/*! \typedef XENCONTROL_LOGGER
> +    \brief Callback for receiving diagnostic messages from the library
> +*/
> +typedef void
> +XENCONTROL_LOGGER(
> +    IN  XENCONTROL_LOG_LEVEL LogLevel,
> +    IN  const CHAR *Function,
> +    IN  const WCHAR *Message,
> +    IN  va_list Args
> +    );
> +
> +/*! \brief Register a callback for receiving library's diagnostic messages
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param Logger Callback to register
> +*/
> +XENCONTROL_API
> +void
> +XcRegisterLogger(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  XENCONTROL_LOGGER *Logger
> +    );
> +
> +/*! \brief Set log level threshold for library's diagnostic messages
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param LogLevel Only messages with this level and above will be sent to
> the logger callback
> +*/
> +XENCONTROL_API
> +void
> +XcSetLogLevel(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  XENCONTROL_LOG_LEVEL LogLevel
> +    );
> +
> +/*! \brief Open the Xen Interface device
> +    \param Logger Callback for receiving library's diagnostic messages
> +    \param Xc Xencontrol handle representing a Xen Interface session
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcOpen(
> +    IN  XENCONTROL_LOGGER *Logger,
> +    OUT PXENCONTROL_CONTEXT *Xc
> +    );
> +
> +/*! \brief Close the Xen Interface device
> +    \param Xc Xencontrol handle returned by XcOpen()
> +*/
> +XENCONTROL_API
> +void
> +XcClose(
> +    IN  PXENCONTROL_CONTEXT Xc
> +    );
> +
> +/*! \brief Open an unbound event channel
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param RemoteDomain ID of a remote domain that will bind the channel
> +    \param Event Handle to an event object that will receive event channel
> notifications
> +    \param Mask Set to TRUE if the event channel should be initially masked
> +    \param LocalPort Port number that is assigned to the event channel
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcEvtchnBindUnbound(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  USHORT RemoteDomain,
> +    IN  HANDLE Event,
> +    IN  BOOL Mask,
> +    OUT ULONG *LocalPort
> +    );
> +
> +/*! \brief Open an event channel that was already bound by a remote
> domain
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param RemoteDomain ID of a remote domain that has already bound
> the channel
> +    \param RemotePort Port number that is assigned to the event channel in
> the \a RemoteDomain
> +    \param Event Handle to an event that will receive event channel
> notifications
> +    \param Mask Set to TRUE if the event object channel should be initially
> masked
> +    \param LocalPort Port number that is assigned to the event channel
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcEvtchnBindInterdomain(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  USHORT RemoteDomain,
> +    IN  ULONG RemotePort,
> +    IN  HANDLE Event,
> +    IN  BOOL Mask,
> +    OUT ULONG *LocalPort
> +    );
> +
> +/*! \brief Close an event channel
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param LocalPort Port number that is assigned to the event channel
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcEvtchnClose(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  ULONG LocalPort
> +    );
> +
> +/*! \brief Notify the remote end of an event channel
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param LocalPort Port number that is assigned to the event channel
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcEvtchnNotify(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  ULONG LocalPort
> +    );
> +
> +/*! \brief Unmask an event channel
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param LocalPort Port number that is assigned to the event channel
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcEvtchnUnmask(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  ULONG LocalPort
> +    );
> +
> +/*! \brief Grant a \a RemoteDomain permission to access local memory
> pages
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param RemoteDomain ID of a remote domain that is being granted
> access
> +    \param NumberPages Number of 4k pages to grant access to
> +    \param NotifyOffset Offset of a byte in the granted region that will be set
> to 0 when the grant is revoked
> +    \param NotifyPort Local port number of an open event channel that will
> be notified when the grant is revoked
> +    \param Flags Grant options
> +    \param Address Local user mode address of the granted memory region
> +    \param References An array of Xen grant numbers for every granted
> page
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcGnttabPermitForeignAccess(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  USHORT RemoteDomain,
> +    IN  ULONG NumberPages,
> +    IN  ULONG NotifyOffset,
> +    IN  ULONG NotifyPort,
> +    IN  XENIFACE_GNTTAB_PAGE_FLAGS Flags,
> +    OUT PVOID *Address,
> +    OUT ULONG *References
> +    );
> +
> +/*! \brief Revoke a foreign domain access to previously granted memory
> region
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param Address Local user mode address of the granted memory region
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcGnttabRevokeForeignAccess(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PVOID Address
> +    );
> +
> +/*! \brief Map a foreign memory region into the current address space
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param RemoteDomain ID of a remote domain that has granted access to
> the pages
> +    \param NumberPages Number of 4k pages to map
> +    \param References An array of Xen grant numbers for every granted
> page
> +    \param NotifyOffset Offset of a byte in the mapped region that will be set
> to 0 when the region is unmapped
> +    \param NotifyPort Local port number of an open event channel that will
> be notified when the region is unmapped
> +    \param Flags Map options
> +    \param Address Local user mode address of the mapped memory region
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcGnttabMapForeignPages(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  USHORT RemoteDomain,
> +    IN  ULONG NumberPages,
> +    IN  PULONG References,
> +    IN  ULONG NotifyOffset,
> +    IN  ULONG NotifyPort,
> +    IN  XENIFACE_GNTTAB_PAGE_FLAGS Flags,
> +    OUT PVOID *Address
> +    );
> +
> +/*! \brief Unmap a foreign memory region from the current address space
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param Address Local user mode address of the mapped memory region
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcGnttabUnmapForeignPages(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PVOID Address
> +    );
> +
> +/*! \brief Read a XenStore key
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param Path Path to the key
> +    \param cbValue Size of the \a Value buffer, in bytes
> +    \param Value Buffer that receives the value
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcStoreRead(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PCHAR Path,
> +    IN  DWORD cbValue,
> +    OUT CHAR *Value
> +    );
> +
> +/*! \brief Write a value to a XenStore key
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param Path Path to the key
> +    \param Value Value to write
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcStoreWrite(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PCHAR Path,
> +    IN  PCHAR Value
> +    );
> +
> +/*! \brief Enumerate all immediate child keys of a XenStore key
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param Path Path to the key
> +    \param cbOutput Size of the \a Output buffer, in bytes
> +    \param Output Buffer that receives a NUL-separated child key names
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcStoreDirectory(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PCHAR Path,
> +    IN  DWORD cbOutput,
> +    OUT CHAR *Output
> +    );
> +
> +/*! \brief Remove a XenStore key
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param Path Path to the key
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcStoreRemove(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PCHAR Path
> +    );
> +
> +/*! \brief Set permissions of a XenStore key
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param Path Path to the key
> +    \param Count Number of permissions
> +    \param Permissions Array of permissions to set
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcStoreSetPermissions(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PCHAR Path,
> +    IN  ULONG Count,
> +    IN  PXENIFACE_STORE_PERMISSION Permissions
> +    );
> +
> +/*! \brief Add a XenStore key watch
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param Path Path to the key to be watched
> +    \param Event Handle to an event that will be signaled when the watch
> fires
> +    \param Handle An opaque value representing the watch
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcStoreAddWatch(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PCHAR Path,
> +    IN  HANDLE Event,
> +    OUT PVOID *Handle
> +    );
> +
> +/*! \brief Remove a XenStore watch
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param Handle Watch handle returned by XcStoreAddWatch()
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcStoreRemoveWatch(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PVOID Handle
> +    );
> +
> +#ifdef __cplusplus
> +}
> +#endif
> +
> +#endif // _XENCONTROL_H_
> diff --git a/src/xencontrol/xencontrol.c b/src/xencontrol/xencontrol.c
> new file mode 100644
> index 0000000..92ac9d0
> --- /dev/null
> +++ b/src/xencontrol/xencontrol.c
> @@ -0,0 +1,915 @@
> +#define INITGUID
> +#include <windows.h>
> +#include <setupapi.h>
> +#include <stdlib.h>
> +#include <assert.h>
> +
> +#include "xencontrol.h"
> +#include "xencontrol_private.h"
> +
> +BOOL APIENTRY
> +DllMain(
> +    IN  HMODULE Module,
> +    IN  DWORD ReasonForCall,
> +    IN  LPVOID Reserved
> +)
> +{
> +    return TRUE;
> +}
> +
> +static void
> +_Log(
> +    IN  XENCONTROL_LOGGER *Logger,
> +    IN  XENCONTROL_LOG_LEVEL LogLevel,
> +    IN  XENCONTROL_LOG_LEVEL CurrentLogLevel,
> +    IN  PCHAR Function,
> +    IN  PWCHAR Format,
> +    ...
> +    )
> +{
> +    va_list Args;
> +    DWORD LastError;
> +
> +    if (Logger == NULL)
> +        return;
> +
> +    if (LogLevel > CurrentLogLevel)
> +        return;
> +
> +    LastError = GetLastError();
> +    va_start(Args, Format);
> +    Logger(LogLevel, Function, Format, Args);
> +    va_end(Args);
> +    SetLastError(LastError);
> +}
> +
> +static void
> +_LogMultiSz(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PCHAR Caller,
> +    IN  XENCONTROL_LOG_LEVEL Level,
> +    IN  PCHAR MultiSz
> +    )
> +{
> +    PCHAR Ptr;
> +    ULONG Len;
> +
> +    for (Ptr = MultiSz; *Ptr;) {
> +        Len = (ULONG)strlen(Ptr);
> +        _Log(Xc->Logger, Level, Xc->LogLevel, Caller, L"%S", Ptr);
> +        Ptr += (Len + 1);
> +    }
> +}
> +
> +void
> +XcRegisterLogger(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  XENCONTROL_LOGGER *Logger
> +    )
> +{
> +    Xc->Logger = Logger;
> +}
> +
> +void
> +XcSetLogLevel(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  XENCONTROL_LOG_LEVEL LogLevel
> +    )
> +{
> +    Xc->LogLevel = LogLevel;
> +}
> +
> +DWORD
> +XcOpen(
> +    IN  XENCONTROL_LOGGER *Logger,
> +    OUT PXENCONTROL_CONTEXT *Xc
> +    )
> +{
> +    HDEVINFO DevInfo;
> +    SP_DEVICE_INTERFACE_DATA InterfaceData;
> +    SP_DEVICE_INTERFACE_DETAIL_DATA *DetailData = NULL;
> +    DWORD BufferSize;
> +    PXENCONTROL_CONTEXT Context;
> +
> +    Context = malloc(sizeof(*Context));
> +    if (Context == NULL)
> +        return ERROR_NOT_ENOUGH_MEMORY;
> +
> +    Context->Logger = Logger;
> +    Context->LogLevel = XLL_INFO;
> +    Context->RequestId = 1;
> +    InitializeListHead(&Context->RequestList);
> +    InitializeCriticalSection(&Context->RequestListLock);
> +
> +    DevInfo = SetupDiGetClassDevs(&GUID_INTERFACE_XENIFACE, 0, NULL,
> DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
> +    if (DevInfo == INVALID_HANDLE_VALUE) {
> +        _Log(Logger, XLL_ERROR, Context->LogLevel, __FUNCTION__,
> +             L"XENIFACE device class doesn't exist");
> +        goto fail;
> +    }
> +
> +    InterfaceData.cbSize = sizeof(InterfaceData);
> +    if (!SetupDiEnumDeviceInterfaces(DevInfo, NULL,
> &GUID_INTERFACE_XENIFACE, 0, &InterfaceData)) {
> +        _Log(Logger, XLL_ERROR, Context->LogLevel, __FUNCTION__,
> +             L"Failed to enumerate XENIFACE devices");
> +        goto fail;
> +    }
> +
> +    SetupDiGetDeviceInterfaceDetail(DevInfo, &InterfaceData, NULL, 0,
> &BufferSize, NULL);
> +    if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) {
> +        _Log(Logger, XLL_ERROR, Context->LogLevel, __FUNCTION__,
> +             L"Failed to get buffer size for device details");
> +        goto fail;
> +    }
> +
> +    // Using 'BufferSize' from failed function call
> +#pragma warning(suppress: 6102)
> +    DetailData = (SP_DEVICE_INTERFACE_DETAIL_DATA *)malloc(BufferSize);
> +    if (!DetailData) {
> +        SetLastError(ERROR_OUTOFMEMORY);
> +        goto fail;
> +    }
> +
> +    DetailData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
> +
> +    if (!SetupDiGetDeviceInterfaceDetail(DevInfo, &InterfaceData,
> DetailData, BufferSize, NULL, NULL)) {
> +        _Log(Logger, XLL_ERROR, Context->LogLevel, __FUNCTION__,
> +             L"Failed to get XENIFACE device path");
> +        goto fail;
> +    }
> +
> +    Context->XenIface = CreateFile(DetailData->DevicePath,
> +                                   FILE_GENERIC_READ | FILE_GENERIC_WRITE,
> +                                   0,
> +                                   NULL,
> +                                   OPEN_EXISTING,
> +                                   FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
> +                                   NULL);
> +
> +    if (Context->XenIface == INVALID_HANDLE_VALUE) {
> +        _Log(Logger, XLL_ERROR, Context->LogLevel, __FUNCTION__,
> +             L"Failed to open XENIFACE device, path: %s", DetailData-
> >DevicePath);
> +        goto fail;
> +    }
> +
> +    _Log(Logger, XLL_ERROR, Context->LogLevel, __FUNCTION__,
> +         L"XenIface handle: %p", Context->XenIface);
> +
> +    free(DetailData);
> +    *Xc = Context;
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    _Log(Logger, XLL_ERROR, Context->LogLevel, __FUNCTION__,
> +         L"Error: 0x%x", GetLastError());
> +
> +    free(DetailData);
> +    return GetLastError();
> +}
> +
> +void
> +XcClose(
> +    IN  PXENCONTROL_CONTEXT Xc
> +    )
> +{
> +    CloseHandle(Xc->XenIface);
> +    DeleteCriticalSection(&Xc->RequestListLock);
> +    free(Xc);
> +}
> +
> +DWORD
> +XcEvtchnBindUnbound(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  USHORT RemoteDomain,
> +    IN  HANDLE Event,
> +    IN  BOOL Mask,
> +    OUT ULONG *LocalPort
> +    )
> +{
> +    XENIFACE_EVTCHN_BIND_UNBOUND_IN In;
> +    XENIFACE_EVTCHN_BIND_UNBOUND_OUT Out;
> +    DWORD Returned;
> +    BOOL Success;
> +
> +    In.RemoteDomain = RemoteDomain;
> +    In.Event = Event;
> +    In.Mask = !!Mask;
> +
> +    Log(XLL_DEBUG, L"RemoteDomain: %d, Event: %p, Mask: %d",
> RemoteDomain, Event, Mask);
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_EVTCHN_BIND_UNBOUND,
> +                              &In, sizeof(In),
> +                              &Out, sizeof(Out),
> +                              &Returned,
> +                              NULL);
> +
> +    if (!Success) {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_EVTCHN_BIND_UNBOUND_PORT
> failed");
> +        goto fail;
> +    }
> +
> +    *LocalPort = Out.LocalPort;
> +    Log(XLL_DEBUG, L"LocalPort: %lu", *LocalPort);
> +
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
> +    return GetLastError();
> +}
> +
> +DWORD
> +XcEvtchnBindInterdomain(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  USHORT RemoteDomain,
> +    IN  ULONG RemotePort,
> +    IN  HANDLE Event,
> +    IN  BOOL Mask,
> +    OUT ULONG *LocalPort
> +    )
> +{
> +    XENIFACE_EVTCHN_BIND_INTERDOMAIN_IN In;
> +    XENIFACE_EVTCHN_BIND_INTERDOMAIN_OUT Out;
> +    DWORD Returned;
> +    BOOL Success;
> +
> +    In.RemoteDomain = RemoteDomain;
> +    In.RemotePort = RemotePort;
> +    In.Event = Event;
> +    In.Mask = !!Mask;
> +
> +    Log(XLL_DEBUG, L"RemoteDomain: %d, RemotePort %lu, Event: %p,
> Mask: %d",
> +        RemoteDomain, RemotePort, Event, Mask);
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_EVTCHN_BIND_INTERDOMAIN,
> +                              &In, sizeof(In),
> +                              &Out, sizeof(Out),
> +                              &Returned,
> +                              NULL);
> +
> +    if (!Success) {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_EVTCHN_BIND_INTERDOMAIN
> failed");
> +        goto fail;
> +    }
> +
> +    *LocalPort = Out.LocalPort;
> +    Log(XLL_DEBUG, L"LocalPort: %lu", *LocalPort);
> +
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
> +    return GetLastError();
> +}
> +
> +DWORD
> +XcEvtchnClose(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  ULONG LocalPort
> +    )
> +{
> +    XENIFACE_EVTCHN_CLOSE_IN In;
> +    DWORD Returned;
> +    BOOL Success;
> +
> +    In.LocalPort = LocalPort;
> +
> +    Log(XLL_DEBUG, L"LocalPort: %lu", LocalPort);
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_EVTCHN_CLOSE,
> +                              &In, sizeof(In),
> +                              NULL, 0,
> +                              &Returned,
> +                              NULL);
> +
> +    if (!Success) {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_EVTCHN_CLOSE failed");
> +        goto fail;
> +    }
> +
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
> +    return GetLastError();
> +}
> +
> +DWORD
> +XcEvtchnNotify(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  ULONG LocalPort
> +    )
> +{
> +    XENIFACE_EVTCHN_NOTIFY_IN In;
> +    DWORD Returned;
> +    BOOL Success;
> +
> +    In.LocalPort = LocalPort;
> +
> +    Log(XLL_DEBUG, L"LocalPort: %lu", LocalPort);
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_EVTCHN_NOTIFY,
> +                              &In, sizeof(In),
> +                              NULL, 0,
> +                              &Returned,
> +                              NULL);
> +
> +    if (!Success) {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_EVTCHN_NOTIFY failed");
> +        goto fail;
> +    }
> +
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
> +    return GetLastError();
> +}
> +
> +DWORD
> +XcEvtchnUnmask(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  ULONG LocalPort
> +    )
> +{
> +    XENIFACE_EVTCHN_UNMASK_IN In;
> +    DWORD Returned;
> +    BOOL Success;
> +
> +    In.LocalPort = LocalPort;
> +
> +    Log(XLL_DEBUG, L"LocalPort: %lu", LocalPort);
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_EVTCHN_UNMASK,
> +                              &In, sizeof(In),
> +                              NULL, 0,
> +                              &Returned,
> +                              NULL);
> +
> +    if (!Success) {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_EVTCHN_UNMASK failed");
> +        goto fail;
> +    }
> +
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
> +    return GetLastError();
> +}
> +
> +static PXENCONTROL_GNTTAB_REQUEST
> +FindRequest(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PVOID Address
> +    )
> +{
> +    PLIST_ENTRY Entry;
> +    PXENCONTROL_GNTTAB_REQUEST ReturnRequest = NULL;
> +
> +    EnterCriticalSection(&Xc->RequestListLock);
> +    Entry = Xc->RequestList.Flink;
> +    while (Entry != &Xc->RequestList) {
> +        PXENCONTROL_GNTTAB_REQUEST Request =
> CONTAINING_RECORD(Entry, XENCONTROL_GNTTAB_REQUEST, ListEntry);
> +
> +        if (Request->Address == Address) {
> +            ReturnRequest = Request;
> +            break;
> +        }
> +
> +        Entry = Entry->Flink;
> +    }
> +    LeaveCriticalSection(&Xc->RequestListLock);
> +
> +    return ReturnRequest;
> +}
> +
> +DWORD
> +XcGnttabPermitForeignAccess(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  USHORT RemoteDomain,
> +    IN  ULONG NumberPages,
> +    IN  ULONG NotifyOffset,
> +    IN  ULONG NotifyPort,
> +    IN  XENIFACE_GNTTAB_PAGE_FLAGS Flags,
> +    OUT PVOID *Address,
> +    OUT ULONG *References
> +    )
> +{
> +    XENIFACE_GNTTAB_PERMIT_FOREIGN_ACCESS_IN In;
> +    XENIFACE_GNTTAB_PERMIT_FOREIGN_ACCESS_OUT *Out;
> +    PXENCONTROL_GNTTAB_REQUEST Request;
> +    DWORD Returned, Size;
> +    BOOL Success;
> +    DWORD Status;
> +
> +    // lock the whole operation to not generate duplicate IDs
> +    EnterCriticalSection(&Xc->RequestListLock);
> +
> +    In.RequestId = Xc->RequestId;
> +    In.RemoteDomain = RemoteDomain;
> +    In.NumberPages = NumberPages;
> +    In.NotifyOffset = NotifyOffset;
> +    In.NotifyPort = NotifyPort;
> +    In.Flags = Flags;
> +
> +    Size =
> (ULONG)FIELD_OFFSET(XENIFACE_GNTTAB_PERMIT_FOREIGN_ACCESS_OU
> T, References[NumberPages]);
> +    Out = malloc(Size);
> +    Request = malloc(sizeof(*Request));
> +
> +    Status = ERROR_OUTOFMEMORY;
> +    if (!Request || !Out)
> +        goto fail;
> +
> +    ZeroMemory(Request, sizeof(*Request));
> +    Request->Id = In.RequestId;
> +
> +    Log(XLL_DEBUG, L"Id %lu, RemoteDomain: %d, NumberPages: %lu,
> NotifyOffset: 0x%x, NotifyPort: %lu, Flags: 0x%x",
> +        In.RequestId, RemoteDomain, NumberPages, NotifyOffset, NotifyPort,
> Flags);
> +
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_GNTTAB_PERMIT_FOREIGN_ACCESS,
> +                              &In, sizeof(In),
> +                              Out, Size,
> +                              &Returned,
> +                              &Request->Overlapped);
> +
> +    Status = GetLastError();
> +    // this IOCTL is expected to be pending on success
> +    if (!Success) {
> +        if (Status != ERROR_IO_PENDING) {
> +            Log(XLL_ERROR, L"IOCTL_XENIFACE_GNTTAB_GRANT_PAGES
> failed");
> +            goto fail;
> +        }
> +    } else {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_GNTTAB_GRANT_PAGES not
> pending");
> +        Status = ERROR_UNIDENTIFIED_ERROR;
> +        goto fail;
> +    }
> +
> +    Request->Address = Out->Address;
> +
> +    InsertTailList(&Xc->RequestList, &Request->ListEntry);
> +    Xc->RequestId++;
> +    LeaveCriticalSection(&Xc->RequestListLock);
> +
> +    *Address = Out->Address;
> +    memcpy(References, &Out->References, NumberPages *
> sizeof(ULONG));
> +    Log(XLL_DEBUG, L"Address: %p", *Address);
> +    for (ULONG i = 0; i < NumberPages; i++)
> +        Log(XLL_DEBUG, L"Grant ref[%lu]: %lu", i, Out->References[i]);
> +
> +    free(Out);
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    LeaveCriticalSection(&Xc->RequestListLock);
> +    Log(XLL_ERROR, L"Error: 0x%x", Status);
> +    free(Out);
> +    free(Request);
> +    return Status;
> +}
> +
> +DWORD
> +XcGnttabRevokeForeignAccess(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PVOID Address
> +    )
> +{
> +    XENIFACE_GNTTAB_REVOKE_FOREIGN_ACCESS_IN In;
> +    PXENCONTROL_GNTTAB_REQUEST Request;
> +    DWORD Returned;
> +    BOOL Success;
> +    DWORD Status;
> +
> +    Log(XLL_DEBUG, L"Address: %p", Address);
> +
> +    Status = ERROR_NOT_FOUND;
> +    Request = FindRequest(Xc, Address);
> +    if (!Request) {
> +        Log(XLL_ERROR, L"Address %p not granted", Address);
> +        goto fail;
> +    }
> +
> +    In.RequestId = Request->Id;
> +
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_GNTTAB_REVOKE_FOREIGN_ACCESS,
> +                              &In, sizeof(In),
> +                              NULL, 0,
> +                              &Returned,
> +                              NULL);
> +
> +    Status = GetLastError();
> +    if (!Success) {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_GNTTAB_UNGRANT_PAGES
> failed");
> +        goto fail;
> +    }
> +
> +    EnterCriticalSection(&Xc->RequestListLock);
> +    RemoveEntryList(&Request->ListEntry);
> +    LeaveCriticalSection(&Xc->RequestListLock);
> +    free(Request);
> +
> +    return Status;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: %d 0x%x", Status, Status);
> +    return Status;
> +}
> +
> +DWORD
> +XcGnttabMapForeignPages(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  USHORT RemoteDomain,
> +    IN  ULONG NumberPages,
> +    IN  PULONG References,
> +    IN  ULONG NotifyOffset,
> +    IN  ULONG NotifyPort,
> +    IN  XENIFACE_GNTTAB_PAGE_FLAGS Flags,
> +    OUT PVOID *Address
> +    )
> +{
> +    XENIFACE_GNTTAB_MAP_FOREIGN_PAGES_IN *In;
> +    XENIFACE_GNTTAB_MAP_FOREIGN_PAGES_OUT Out;
> +    PXENCONTROL_GNTTAB_REQUEST Request;
> +    DWORD Returned, Size;
> +    BOOL Success;
> +    DWORD Status;
> +
> +    // lock the whole operation to not generate duplicate IDs
> +    EnterCriticalSection(&Xc->RequestListLock);
> +
> +    Status = ERROR_OUTOFMEMORY;
> +    Size =
> (ULONG)FIELD_OFFSET(XENIFACE_GNTTAB_MAP_FOREIGN_PAGES_IN,
> References[NumberPages]);
> +    In = malloc(Size);
> +    Request = malloc(sizeof(*Request));
> +    if (!In || !Request)
> +        goto fail;
> +
> +    In->RequestId = Xc->RequestId;
> +    In->RemoteDomain = RemoteDomain;
> +    In->NumberPages = NumberPages;
> +    In->NotifyOffset = NotifyOffset;
> +    In->NotifyPort = NotifyPort;
> +    In->Flags = Flags;
> +    memcpy(&In->References, References, NumberPages * sizeof(ULONG));
> +
> +    ZeroMemory(Request, sizeof(*Request));
> +    Request->Id = In->RequestId;
> +
> +    Log(XLL_DEBUG, L"Id %lu, RemoteDomain: %d, NumberPages: %lu,
> NotifyOffset: 0x%x, NotifyPort: %lu, Flags: 0x%x",
> +        In->RequestId, RemoteDomain, NumberPages, NotifyOffset,
> NotifyPort, Flags);
> +
> +    for (ULONG i = 0; i < NumberPages; i++)
> +        Log(XLL_DEBUG, L"Grant ref[%lu]: %lu", i, References[i]);
> +
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_GNTTAB_MAP_FOREIGN_PAGES,
> +                              In, Size,
> +                              &Out, sizeof(Out),
> +                              &Returned,
> +                              &Request->Overlapped);
> +
> +    Status = GetLastError();
> +    // this IOCTL is expected to be pending on success
> +    if (!Success) {
> +        if (Status != ERROR_IO_PENDING) {
> +            Log(XLL_ERROR,
> L"IOCTL_XENIFACE_GNTTAB_MAP_FOREIGN_PAGES failed");
> +            goto fail;
> +        }
> +    } else {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_GNTTAB_MAP_FOREIGN_PAGES
> not pending");
> +        Status = ERROR_UNIDENTIFIED_ERROR;
> +        goto fail;
> +    }
> +
> +    Request->Address = Out.Address;
> +    InsertTailList(&Xc->RequestList, &Request->ListEntry);
> +    Xc->RequestId++;
> +    LeaveCriticalSection(&Xc->RequestListLock);
> +
> +    *Address = Out.Address;
> +
> +    Log(XLL_DEBUG, L"Address: %p", *Address);
> +
> +    free(In);
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    LeaveCriticalSection(&Xc->RequestListLock);
> +    Log(XLL_ERROR, L"Error: 0x%x", Status);
> +    free(In);
> +    free(Request);
> +    return Status;
> +}
> +
> +DWORD
> +XcGnttabUnmapForeignPages(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PVOID Address
> +    )
> +{
> +    XENIFACE_GNTTAB_UNMAP_FOREIGN_PAGES_IN In;
> +    PXENCONTROL_GNTTAB_REQUEST Request;
> +    DWORD Returned;
> +    BOOL Success;
> +    DWORD Status;
> +
> +    Log(XLL_DEBUG, L"Address: %p", Address);
> +
> +    Status = ERROR_NOT_FOUND;
> +    Request = FindRequest(Xc, Address);
> +    if (!Request) {
> +        Log(XLL_ERROR, L"Address %p not mapped", Address);
> +        goto fail;
> +    }
> +
> +    In.RequestId = Request->Id;
> +
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_GNTTAB_UNMAP_FOREIGN_PAGES,
> +                              &In, sizeof(In),
> +                              NULL, 0,
> +                              &Returned,
> +                              NULL);
> +
> +    Status = GetLastError();
> +    if (!Success) {
> +        Log(XLL_ERROR,
> L"IOCTL_XENIFACE_GNTTAB_UNMAP_FOREIGN_PAGES failed");
> +        goto fail;
> +    }
> +
> +    EnterCriticalSection(&Xc->RequestListLock);
> +    RemoveEntryList(&Request->ListEntry);
> +    LeaveCriticalSection(&Xc->RequestListLock);
> +    free(Request);
> +
> +    return Status;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: 0x%x", Status);
> +    return Status;
> +}
> +
> +DWORD
> +XcStoreRead(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PSTR Path,
> +    IN  DWORD cbValue,
> +    OUT CHAR *Value
> +    )
> +{
> +    DWORD Returned;
> +    BOOL Success;
> +
> +    Log(XLL_DEBUG, L"Path: '%S'", Path);
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_STORE_READ,
> +                              Path, (DWORD)strlen(Path) + 1,
> +                              Value, cbValue,
> +                              &Returned,
> +                              NULL);
> +
> +    if (!Success) {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_STORE_READ failed");
> +        goto fail;
> +    }
> +
> +    Log(XLL_DEBUG, L"Value: '%S'", Value);
> +
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
> +    return GetLastError();
> +}
> +
> +DWORD
> +XcStoreWrite(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PCHAR Path,
> +    IN  PCHAR Value
> +    )
> +{
> +    PCHAR Buffer;
> +    DWORD cbBuffer;
> +    DWORD Returned;
> +    BOOL Success;
> +
> +    cbBuffer = (DWORD)(strlen(Path) + 1 + strlen(Value) + 1 + 1);
> +    Buffer = malloc(cbBuffer);
> +    if (!Buffer) {
> +        SetLastError(ERROR_OUTOFMEMORY);
> +        goto fail;
> +    }
> +
> +    ZeroMemory(Buffer, cbBuffer);
> +    memcpy(Buffer, Path, strlen(Path));
> +    memcpy(Buffer + strlen(Path) + 1, Value, strlen(Value));
> +
> +    Log(XLL_DEBUG, L"Path: '%S', Value: '%S'", Path, Value);
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_STORE_WRITE,
> +                              Buffer, cbBuffer,
> +                              NULL, 0,
> +                              &Returned,
> +                              NULL);
> +
> +    if (!Success) {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_STORE_WRITE failed");
> +        goto fail;
> +    }
> +
> +    free(Buffer);
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
> +    free(Buffer);
> +    return GetLastError();
> +}
> +
> +DWORD
> +XcStoreDirectory(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PCHAR Path,
> +    IN  DWORD cbOutput,
> +    OUT CHAR *Output
> +    )
> +{
> +    DWORD Returned;
> +    BOOL Success;
> +
> +    Log(XLL_DEBUG, L"Path: '%S'", Path);
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_STORE_DIRECTORY,
> +                              Path, (DWORD)strlen(Path) + 1,
> +                              Output, cbOutput,
> +                              &Returned,
> +                              NULL);
> +
> +    if (!Success) {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_STORE_DIRECTORY failed");
> +        goto fail;
> +    }
> +
> +    _LogMultiSz(Xc, __FUNCTION__, XLL_DEBUG, Output);
> +
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
> +    return GetLastError();
> +}
> +
> +DWORD
> +XcStoreRemove(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PCHAR Path
> +    )
> +{
> +    DWORD Returned;
> +    BOOL Success;
> +
> +    Log(XLL_DEBUG, L"Path: '%S'", Path);
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_STORE_REMOVE,
> +                              Path, (DWORD)strlen(Path) + 1,
> +                              NULL, 0,
> +                              &Returned,
> +                              NULL);
> +
> +    if (!Success) {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_STORE_REMOVE failed");
> +        goto fail;
> +    }
> +
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
> +    return GetLastError();
> +}
> +
> +DWORD
> +XcStoreSetPermissions(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PCHAR Path,
> +    IN  ULONG Count,
> +    IN  PXENIFACE_STORE_PERMISSION Permissions
> +    )
> +{
> +    DWORD Returned, Size;
> +    BOOL Success;
> +    XENIFACE_STORE_SET_PERMISSIONS_IN *In = NULL;
> +
> +    Log(XLL_DEBUG, L"Path: '%S', Count: %lu", Path, Count);
> +    for (ULONG i = 0; i < Count; i++)
> +        Log(XLL_DEBUG, L"Domain: %d, Mask: 0x%x", Permissions[i].Domain,
> Permissions[i].Mask);
> +
> +    Size = (ULONG)FIELD_OFFSET(XENIFACE_STORE_SET_PERMISSIONS_IN,
> Permissions[Count]);
> +    In = malloc(Size);
> +    if (!In) {
> +        SetLastError(ERROR_OUTOFMEMORY);
> +        goto fail;
> +    }
> +
> +    In->Path = Path;
> +    In->PathLength = (DWORD)strlen(In->Path) + 1;
> +    In->NumberPermissions = Count;
> +    memcpy(&In->Permissions, Permissions, Count *
> sizeof(XENIFACE_STORE_PERMISSION));
> +
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_STORE_SET_PERMISSIONS,
> +                              In, Size,
> +                              NULL, 0,
> +                              &Returned,
> +                              NULL);
> +
> +    if (!Success) {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_STORE_SET_PERMISSIONS failed");
> +        goto fail;
> +    }
> +
> +    free(In);
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
> +    free(In);
> +    return GetLastError();
> +}
> +
> +DWORD
> +XcStoreAddWatch(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PCHAR Path,
> +    IN  HANDLE Event,
> +    OUT PVOID *Handle
> +    )
> +{
> +    DWORD Returned;
> +    BOOL Success;
> +    XENIFACE_STORE_ADD_WATCH_IN In;
> +    XENIFACE_STORE_ADD_WATCH_OUT Out;
> +
> +    Log(XLL_DEBUG, L"Path: '%S', Event: %p", Path, Event);
> +
> +    In.Path = Path;
> +    In.PathLength = (DWORD)strlen(Path) + 1;
> +    In.Event = Event;
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_STORE_ADD_WATCH,
> +                              &In, sizeof(In),
> +                              &Out, sizeof(Out),
> +                              &Returned,
> +                              NULL);
> +
> +    if (!Success) {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_STORE_ADD_WATCH failed");
> +        goto fail;
> +    }
> +
> +    *Handle = Out.Context;
> +
> +    Log(XLL_DEBUG, L"Handle: %p", *Handle);
> +
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
> +    return GetLastError();
> +}
> +
> +DWORD
> +XcStoreRemoveWatch(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PVOID Handle
> +    )
> +{
> +    DWORD Returned;
> +    BOOL Success;
> +    XENIFACE_STORE_REMOVE_WATCH_IN In;
> +
> +    Log(XLL_DEBUG, L"Handle: %p", Handle);
> +
> +    In.Context = Handle;
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_STORE_REMOVE_WATCH,
> +                              &In, sizeof(In),
> +                              NULL, 0,
> +                              &Returned,
> +                              NULL);
> +
> +    if (!Success) {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_STORE_REMOVE_WATCH failed");
> +        goto fail;
> +    }
> +
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
> +    return GetLastError();
> +}
> diff --git a/src/xencontrol/xencontrol.rc b/src/xencontrol/xencontrol.rc
> new file mode 100644
> index 0000000..6c33e84
> --- /dev/null
> +++ b/src/xencontrol/xencontrol.rc
> @@ -0,0 +1,24 @@
> +#include <windows.h>
> +#include <ntverp.h>
> +
> +#undef VER_COMPANYNAME_STR
> +#undef VER_PRODUCTNAME_STR
> +#undef VER_PRODUCTVERSION
> +#undef VER_PRODUCTVERSION_STR
> +
> +#include <version.h>
> +
> +#define VER_COMPANYNAME_STR         VENDOR_NAME_STR
> +#define VER_LEGALCOPYRIGHT_STR      "Copyright (c) Invisible Things Lab"
> +
> +#define VER_PRODUCTNAME_STR         "XENIFACE"
> +#define VER_PRODUCTVERSION
> MAJOR_VERSION,MINOR_VERSION,MICRO_VERSION,BUILD_NUMBER
> +#define VER_PRODUCTVERSION_STR      MAJOR_VERSION_STR "."
> MINOR_VERSION_STR "." MICRO_VERSION_STR "." BUILD_NUMBER_STR
> +
> +#define VER_INTERNALNAME_STR        "XENCONTROL.DLL"
> +#define VER_FILEDESCRIPTION_STR     "Xen interface user library"
> +
> +#define VER_FILETYPE                VFT_DLL
> +#define VER_FILESUBTYPE             0
> +
> +#include <common.ver>
> diff --git a/src/xencontrol/xencontrol_private.h
> b/src/xencontrol/xencontrol_private.h
> new file mode 100644
> index 0000000..685bcfa
> --- /dev/null
> +++ b/src/xencontrol/xencontrol_private.h
> @@ -0,0 +1,49 @@
> +#ifndef _XENCONTROL_PRIVATE_H_
> +#define _XENCONTROL_PRIVATE_H_
> +
> +#include <windows.h>
> +#include "xencontrol.h"
> +
> +#define Log(level, format, ...) \
> +        _Log(Xc->Logger, level, Xc->LogLevel, __FUNCTION__, format,
> __VA_ARGS__)
> +
> +#define InitializeListHead(ListHead) ( \
> +    (ListHead)->Flink = (ListHead)->Blink = (ListHead))
> +
> +#define InsertTailList(ListHead, Entry) { \
> +    PLIST_ENTRY _EX_Blink; \
> +    PLIST_ENTRY _EX_ListHead; \
> +    _EX_ListHead = (ListHead); \
> +    _EX_Blink = _EX_ListHead->Blink; \
> +    (Entry)->Flink = _EX_ListHead; \
> +    (Entry)->Blink = _EX_Blink; \
> +    _EX_Blink->Flink = (Entry); \
> +    _EX_ListHead->Blink = (Entry); \
> +    }
> +
> +#define RemoveEntryList(Entry) { \
> +    PLIST_ENTRY _EX_Blink; \
> +    PLIST_ENTRY _EX_Flink; \
> +    _EX_Flink = (Entry)->Flink; \
> +    _EX_Blink = (Entry)->Blink; \
> +    _EX_Blink->Flink = _EX_Flink; \
> +    _EX_Flink->Blink = _EX_Blink; \
> +    }
> +
> +typedef struct _XENCONTROL_CONTEXT {
> +    HANDLE XenIface;
> +    XENCONTROL_LOGGER *Logger;
> +    XENCONTROL_LOG_LEVEL LogLevel;
> +    ULONG RequestId;
> +    LIST_ENTRY RequestList;
> +    CRITICAL_SECTION RequestListLock;
> +} XENCONTROL_CONTEXT, *PXENCONTROL_CONTEXT;
> +
> +typedef struct _XENCONTROL_GNTTAB_REQUEST {
> +    LIST_ENTRY  ListEntry;
> +    OVERLAPPED  Overlapped;
> +    ULONG       Id;
> +    PVOID       Address;
> +} XENCONTROL_GNTTAB_REQUEST, *PXENCONTROL_GNTTAB_REQUEST;
> +
> +#endif // _XENCONTROL_PRIVATE_H_
> diff --git a/vs2013/xencontrol.props b/vs2013/xencontrol.props
> new file mode 100644
> index 0000000..22c1704
> --- /dev/null
> +++ b/vs2013/xencontrol.props
> @@ -0,0 +1,84 @@
> +<?xml version="1.0" encoding="utf-8"?>
> +<Project ToolsVersion="4.0"
> xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
> +
> +  <ImportGroup Label="PropertySheets" />
> +
> +  <PropertyGroup Label="UserMacros" />
> +
> +  <PropertyGroup>
> +    <IncludePath>$(SolutionDir)\..\include;$(IncludePath)</IncludePath>
> +
> <LibraryPath>$(SolutionDir)\$(Configuration)\$(Platform);$(LibraryPath)</Li
> braryPath>
> +    <OutDir>$(SolutionDir)\$(Configuration)\$(Platform)\</OutDir>
> +
> <IntDir>$(SolutionDir)\$(ProjectName)\$(Configuration)\$(Platform)\</IntDi
> r>
> +    <LinkIncremental>false</LinkIncremental>
> +  </PropertyGroup>
> +
> +  <PropertyGroup Label="Configuration">
> +    <LinkIncremental>false</LinkIncremental>
> +    <PlatformToolset>v120</PlatformToolset>
> +  </PropertyGroup>
> +
> +  <PropertyGroup Condition="'$(Configuration)'=='Debug'"
> Label="Configuration">
> +    <RunCodeAnalysis>true</RunCodeAnalysis>
> +    <UseDebugLibraries>true</UseDebugLibraries>
> +  </PropertyGroup>
> +
> +  <PropertyGroup Condition="'$(Configuration)'=='Release'"
> Label="Configuration">
> +    <UseDebugLibraries>false</UseDebugLibraries>
> +    <WholeProgramOptimization>true</WholeProgramOptimization>
> +  </PropertyGroup>
> +
> +  <ItemDefinitionGroup>
> +    <Link>
> +
> <AdditionalDependencies>setupapi.lib;ws2_32.lib;shlwapi.lib;wtsapi32.lib;us
> erenv.lib;version.lib;ntdll.lib;kernel32.lib;user32.lib;gdi32.lib;comdlg32.lib;adv
> api32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;%(AdditionalDependencies)
> </AdditionalDependencies>
> +      <GenerateDebugInformation>true</GenerateDebugInformation>
> +    </Link>
> +    <ClCompile>
> +
> <PreprocessorDefinitions>WIN32;%(PreprocessorDefinitions)</Preprocesso
> rDefinitions>
> +      <WarningLevel>Level3</WarningLevel>
> +      <PrecompiledHeader>NotUsing</PrecompiledHeader>
> +      <SDLCheck>true</SDLCheck>
> +      <ExceptionHandling>false</ExceptionHandling>
> +      <TreatWarningAsError>true</TreatWarningAsError>
> +    </ClCompile>
> +    <CustomBuildStep>
> +      <Command>xcopy /y $(TargetPath)
> $(SolutionDir)\..\xeniface\$(PlatformTarget)\
> +xcopy /y $(TargetDir)$(TargetName).pdb
> $(SolutionDir)\..\xeniface\$(PlatformTarget)\
> +if exist $(TargetDir)$(TargetName).lib xcopy /y
> $(TargetDir)$(TargetName).lib
> $(SolutionDir)\..\xeniface\$(PlatformTarget)\</Command>
> +    </CustomBuildStep>
> +    <CustomBuildStep>
> +      <Message>Copying output files</Message>
> +    </CustomBuildStep>
> +    <CustomBuildStep>
> +
> <Outputs>$(SolutionDir)\..\xeniface\$(PlatformTarget)$(TargetFileName);$(
> SolutionDir)\..\xeniface\$(PlatformTarget)$(TargetName).pdb;$(SolutionDir)
> \..\xeniface\$(PlatformTarget)$(TargetName).lib;%(Outputs)</Outputs>
> +    </CustomBuildStep>
> +    <CustomBuildStep>
> +
> <Inputs>$(TargetPath);$(TargetDir)$(TargetName).pdb;$(TargetDir)$(Target
> Name).lib</Inputs>
> +    </CustomBuildStep>
> +  </ItemDefinitionGroup>
> +
> +  <ItemDefinitionGroup Condition="'$(Configuration)'=='Debug'">
> +    <ClCompile>
> +
> <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</Preprocess
> orDefinitions>
> +      <Optimization>Disabled</Optimization>
> +      <EnablePREfast>true</EnablePREfast>
> +      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
> +    </ClCompile>
> +  </ItemDefinitionGroup>
> +
> +  <ItemDefinitionGroup Condition="'$(Configuration)'=='Release'">
> +    <ClCompile>
> +
> <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</Preproces
> sorDefinitions>
> +      <Optimization>MaxSpeed</Optimization>
> +      <FunctionLevelLinking>true</FunctionLevelLinking>
> +      <IntrinsicFunctions>true</IntrinsicFunctions>
> +      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
> +    </ClCompile>
> +    <Link>
> +      <EnableCOMDATFolding>true</EnableCOMDATFolding>
> +      <OptimizeReferences>true</OptimizeReferences>
> +    </Link>
> +  </ItemDefinitionGroup>
> +
> +  <ItemGroup />
> +</Project>
> \ No newline at end of file
> diff --git a/vs2013/xencontrol/xencontrol.vcxproj
> b/vs2013/xencontrol/xencontrol.vcxproj
> new file mode 100644
> index 0000000..4d91a38
> --- /dev/null
> +++ b/vs2013/xencontrol/xencontrol.vcxproj
> @@ -0,0 +1,62 @@
> +<?xml version="1.0" encoding="utf-8"?>
> +<Project DefaultTargets="Build" ToolsVersion="12.0"
> xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
> +  <ItemGroup Label="ProjectConfigurations">
> +    <ProjectConfiguration Include="Debug|Win32">
> +      <Configuration>Debug</Configuration>
> +      <Platform>Win32</Platform>
> +    </ProjectConfiguration>
> +    <ProjectConfiguration Include="Debug|x64">
> +      <Configuration>Debug</Configuration>
> +      <Platform>x64</Platform>
> +    </ProjectConfiguration>
> +    <ProjectConfiguration Include="Release|Win32">
> +      <Configuration>Release</Configuration>
> +      <Platform>Win32</Platform>
> +    </ProjectConfiguration>
> +    <ProjectConfiguration Include="Release|x64">
> +      <Configuration>Release</Configuration>
> +      <Platform>x64</Platform>
> +    </ProjectConfiguration>
> +  </ItemGroup>
> +  <PropertyGroup Label="Globals">
> +    <ProjectGuid>{D386D8E9-D015-4AD2-A5C2-
> 4F845A803FA2}</ProjectGuid>
> +    <Keyword>Win32Proj</Keyword>
> +    <RootNamespace>xencontrol</RootNamespace>
> +  </PropertyGroup>
> +  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
> +  <PropertyGroup Label="Configuration">
> +    <ConfigurationType>DynamicLibrary</ConfigurationType>
> +    <CharacterSet>Unicode</CharacterSet>
> +  </PropertyGroup>
> +  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
> +  <ImportGroup Label="PropertySheets">
> +    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props"
> Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')"
> Label="LocalAppDataPlatform" />
> +    <Import Project="..\xencontrol.props" />
> +  </ImportGroup>
> +  <ItemDefinitionGroup>
> +    <ClCompile>
> +
> <PreprocessorDefinitions>_WINDOWS;_USRDLL;XENCONTROL_EXPORTS;%(
> PreprocessorDefinitions)</PreprocessorDefinitions>
> +    </ClCompile>
> +    <Link>
> +      <SubSystem>Windows</SubSystem>
> +    </Link>
> +  </ItemDefinitionGroup>
> +  <ItemGroup>
> +    <ClCompile Include="..\..\src\xencontrol\xencontrol.c" />
> +  </ItemGroup>
> +  <ItemGroup>
> +    <ClInclude Include="..\..\include\xencontrol.h" />
> +    <ClInclude Include="..\..\src\xencontrol\xencontrol_private.h" />
> +  </ItemGroup>
> +  <ItemGroup>
> +    <ResourceCompile Include="..\..\src\xencontrol\xencontrol.rc" />
> +  </ItemGroup>
> +  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
> +  <ImportGroup Label="ExtensionTargets">
> +  </ImportGroup>
> +  <ProjectExtensions>
> +    <VisualStudio>
> +      <UserProperties />
> +    </VisualStudio>
> +  </ProjectExtensions>
> +</Project>
> \ No newline at end of file
> diff --git a/vs2013/xencontrol/xencontrol.vcxproj.filters
> b/vs2013/xencontrol/xencontrol.vcxproj.filters
> new file mode 100644
> index 0000000..c6de099
> --- /dev/null
> +++ b/vs2013/xencontrol/xencontrol.vcxproj.filters
> @@ -0,0 +1,13 @@
> +<?xml version="1.0" encoding="utf-8"?>
> +<Project ToolsVersion="4.0"
> xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
> +  <ItemGroup>
> +    <ClInclude Include="..\..\include\xencontrol.h" />
> +    <ClInclude Include="..\..\src\xencontrol\xencontrol_private.h" />
> +  </ItemGroup>
> +  <ItemGroup>
> +    <ResourceCompile Include="..\..\src\xencontrol\xencontrol.rc" />
> +  </ItemGroup>
> +  <ItemGroup>
> +    <ClCompile Include="..\..\src\xencontrol\xencontrol.c" />
> +  </ItemGroup>
> +</Project>
> \ No newline at end of file
> diff --git a/vs2013/xeniface.sln b/vs2013/xeniface.sln
> index 3c74c79..76d06b4 100644
> --- a/vs2013/xeniface.sln
> +++ b/vs2013/xeniface.sln
> @@ -17,6 +17,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}")
> = "package", "package\package.
>  		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B} = {2E61D2CC-
> 865E-442C-8C83-B8DAFD7BBD3B}
>  	EndProjectSection
>  EndProject
> +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xencontrol",
> "xencontrol\xencontrol.vcxproj", "{D386D8E9-D015-4AD2-A5C2-
> 4F845A803FA2}"
> +EndProject
>  Global
>  	GlobalSection(SolutionConfigurationPlatforms) = preSolution
>  		Windows 7 Debug|Win32 = Windows 7 Debug|Win32
> @@ -165,6 +167,42 @@ Global
>  		{9B071A35-897C-477A-AEB7-95F77618A21D}.Windows Vista
> Release|x64.ActiveCfg = Windows Vista Release|x64
>  		{9B071A35-897C-477A-AEB7-95F77618A21D}.Windows Vista
> Release|x64.Build.0 = Windows Vista Release|x64
>  		{9B071A35-897C-477A-AEB7-95F77618A21D}.Windows Vista
> Release|x64.Deploy.0 = Windows Vista Release|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7
> Debug|Win32.ActiveCfg = Debug|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7
> Debug|Win32.Build.0 = Debug|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7
> Debug|Win32.Deploy.0 = Debug|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7
> Debug|x64.ActiveCfg = Debug|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7
> Debug|x64.Build.0 = Debug|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7
> Debug|x64.Deploy.0 = Debug|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7
> Release|Win32.ActiveCfg = Release|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7
> Release|Win32.Build.0 = Release|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7
> Release|Win32.Deploy.0 = Release|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7
> Release|x64.ActiveCfg = Release|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7
> Release|x64.Build.0 = Release|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7
> Release|x64.Deploy.0 = Release|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows
> Developer Preview Debug|Win32.ActiveCfg = Debug|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows
> Developer Preview Debug|Win32.Build.0 = Debug|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows
> Developer Preview Debug|Win32.Deploy.0 = Debug|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows
> Developer Preview Debug|x64.ActiveCfg = Debug|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows
> Developer Preview Debug|x64.Build.0 = Debug|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows
> Developer Preview Debug|x64.Deploy.0 = Debug|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows
> Developer Preview Release|Win32.ActiveCfg = Release|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows
> Developer Preview Release|Win32.Build.0 = Release|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows
> Developer Preview Release|Win32.Deploy.0 = Release|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows
> Developer Preview Release|x64.ActiveCfg = Release|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows
> Developer Preview Release|x64.Build.0 = Release|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows
> Developer Preview Release|x64.Deploy.0 = Release|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista
> Debug|Win32.ActiveCfg = Debug|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista
> Debug|Win32.Build.0 = Debug|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista
> Debug|Win32.Deploy.0 = Debug|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista
> Debug|x64.ActiveCfg = Debug|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista
> Debug|x64.Build.0 = Debug|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista
> Debug|x64.Deploy.0 = Debug|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista
> Release|Win32.ActiveCfg = Release|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista
> Release|Win32.Build.0 = Release|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista
> Release|Win32.Deploy.0 = Release|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista
> Release|x64.ActiveCfg = Release|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista
> Release|x64.Build.0 = Release|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista
> Release|x64.Deploy.0 = Release|x64
>  	EndGlobalSection
>  	GlobalSection(SolutionProperties) = preSolution
>  		HideSolutionNode = FALSE
> --
> 1.8.1.msysgit.1
> 
> 
> 
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

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

From win-pv-devel-bounces@lists.xenproject.org Thu Nov 05 16:55:41 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Nov 2015 16:55:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZuNp6-0008O8-DI; Thu, 05 Nov 2015 16:55:40 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=744ee64bb=Paul.Durrant@citrix.com>)
	id 1ZuNp4-0008O3-Uo
	for win-pv-devel@lists.xenproject.org; Thu, 05 Nov 2015 16:55:39 +0000
Received: from [85.158.139.211] by server-4.bemta-5.messagelabs.com id
	7E/9D-24856-A0A8B365; Thu, 05 Nov 2015 16:55:38 +0000
X-Env-Sender: prvs=744ee64bb=Paul.Durrant@citrix.com
X-Msg-Ref: server-9.tower-206.messagelabs.com!1446742536!1347442!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 2790 invoked from network); 5 Nov 2015 16:55:36 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-9.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	5 Nov 2015 16:55:36 -0000
X-IronPort-AV: E=Sophos;i="5.20,248,1444694400"; 
   d="scan'208";a="7025078"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: =?iso-8859-2?Q?Rafa=B3_Wojdy=B3a?= <omeg@invisiblethingslab.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [PATCH] Add a user mode library wrapper for
	XENIFACE	IOCTLs
Thread-Index: AQHRF+QQJ5B9lIAYf0ufI5DCA4J9556NpWGQ
Date: Thu, 5 Nov 2015 16:55:36 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F661441@AMSPEX01CL01.citrite.net>
References: <563B65F1.2020606@invisiblethingslab.com>
In-Reply-To: <563B65F1.2020606@invisiblethingslab.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] [PATCH] Add a user mode library wrapper for
 XENIFACE	IOCTLs
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> bounces@lists.xenproject.org] On Behalf Of Rafal Wojdyla
> Sent: 05 November 2015 14:22
> To: win-pv-devel@lists.xenproject.org
> Subject: [win-pv-devel] [PATCH] Add a user mode library wrapper for
> XENIFACE IOCTLs
> 
> Signed-off-by: Rafal Wojdyla <omeg@invisiblethingslab.com>
> ---
>  include/xencontrol.h                         | 342 ++++++++++
>  src/xencontrol/xencontrol.c                  | 915
> +++++++++++++++++++++++++++
>  src/xencontrol/xencontrol.rc                 |  24 +
>  src/xencontrol/xencontrol_private.h          |  49 ++
>  vs2013/xencontrol.props                      |  84 +++
>  vs2013/xencontrol/xencontrol.vcxproj         |  62 ++
>  vs2013/xencontrol/xencontrol.vcxproj.filters |  13 +
>  vs2013/xeniface.sln                          |  38 ++
>  8 files changed, 1527 insertions(+)
>  create mode 100644 include/xencontrol.h
>  create mode 100644 src/xencontrol/xencontrol.c
>  create mode 100644 src/xencontrol/xencontrol.rc
>  create mode 100644 src/xencontrol/xencontrol_private.h
>  create mode 100644 vs2013/xencontrol.props
>  create mode 100644 vs2013/xencontrol/xencontrol.vcxproj
>  create mode 100644 vs2013/xencontrol/xencontrol.vcxproj.filters
> 

I also notice that there's no update to the xeniface package to deliver the new DLL. Did you omit that for a reason? (I have no objection to you adding the DLL to the package... I'm happy to fix up the VS2012 vcxproj files if you don't have the older tools to hand).

  Paul

> diff --git a/include/xencontrol.h b/include/xencontrol.h
> new file mode 100644
> index 0000000..0a2f8f2
> --- /dev/null
> +++ b/include/xencontrol.h
> @@ -0,0 +1,342 @@
> +#ifndef _XENCONTROL_H_
> +#define _XENCONTROL_H_
> +
> +#include <windows.h>
> +#include <varargs.h>
> +#include "xeniface_ioctls.h"
> +
> +#ifdef XENCONTROL_EXPORTS
> +#    define XENCONTROL_API __declspec(dllexport)
> +#else
> +#    define XENCONTROL_API __declspec(dllimport)
> +#endif
> +
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
> +
> +/*! \typedef PXENCONTROL_CONTEXT
> +    \brief Library handle representing a Xen Interface session
> +*/
> +struct _XENCONTROL_CONTEXT;
> +typedef struct _XENCONTROL_CONTEXT *PXENCONTROL_CONTEXT;
> +
> +/*! \typedef XENCONTROL_LOG_LEVEL
> +    \brief Log levels used by the library
> +*/
> +typedef enum
> +_XENCONTROL_LOG_LEVEL {
> +    XLL_ERROR = 1,
> +    XLL_WARNING,
> +    XLL_INFO,
> +    XLL_DEBUG,
> +    XLL_TRACE,
> +} XENCONTROL_LOG_LEVEL;
> +
> +/*! \typedef XENCONTROL_LOGGER
> +    \brief Callback for receiving diagnostic messages from the library
> +*/
> +typedef void
> +XENCONTROL_LOGGER(
> +    IN  XENCONTROL_LOG_LEVEL LogLevel,
> +    IN  const CHAR *Function,
> +    IN  const WCHAR *Message,
> +    IN  va_list Args
> +    );
> +
> +/*! \brief Register a callback for receiving library's diagnostic messages
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param Logger Callback to register
> +*/
> +XENCONTROL_API
> +void
> +XcRegisterLogger(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  XENCONTROL_LOGGER *Logger
> +    );
> +
> +/*! \brief Set log level threshold for library's diagnostic messages
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param LogLevel Only messages with this level and above will be sent to
> the logger callback
> +*/
> +XENCONTROL_API
> +void
> +XcSetLogLevel(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  XENCONTROL_LOG_LEVEL LogLevel
> +    );
> +
> +/*! \brief Open the Xen Interface device
> +    \param Logger Callback for receiving library's diagnostic messages
> +    \param Xc Xencontrol handle representing a Xen Interface session
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcOpen(
> +    IN  XENCONTROL_LOGGER *Logger,
> +    OUT PXENCONTROL_CONTEXT *Xc
> +    );
> +
> +/*! \brief Close the Xen Interface device
> +    \param Xc Xencontrol handle returned by XcOpen()
> +*/
> +XENCONTROL_API
> +void
> +XcClose(
> +    IN  PXENCONTROL_CONTEXT Xc
> +    );
> +
> +/*! \brief Open an unbound event channel
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param RemoteDomain ID of a remote domain that will bind the channel
> +    \param Event Handle to an event object that will receive event channel
> notifications
> +    \param Mask Set to TRUE if the event channel should be initially masked
> +    \param LocalPort Port number that is assigned to the event channel
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcEvtchnBindUnbound(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  USHORT RemoteDomain,
> +    IN  HANDLE Event,
> +    IN  BOOL Mask,
> +    OUT ULONG *LocalPort
> +    );
> +
> +/*! \brief Open an event channel that was already bound by a remote
> domain
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param RemoteDomain ID of a remote domain that has already bound
> the channel
> +    \param RemotePort Port number that is assigned to the event channel in
> the \a RemoteDomain
> +    \param Event Handle to an event that will receive event channel
> notifications
> +    \param Mask Set to TRUE if the event object channel should be initially
> masked
> +    \param LocalPort Port number that is assigned to the event channel
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcEvtchnBindInterdomain(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  USHORT RemoteDomain,
> +    IN  ULONG RemotePort,
> +    IN  HANDLE Event,
> +    IN  BOOL Mask,
> +    OUT ULONG *LocalPort
> +    );
> +
> +/*! \brief Close an event channel
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param LocalPort Port number that is assigned to the event channel
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcEvtchnClose(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  ULONG LocalPort
> +    );
> +
> +/*! \brief Notify the remote end of an event channel
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param LocalPort Port number that is assigned to the event channel
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcEvtchnNotify(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  ULONG LocalPort
> +    );
> +
> +/*! \brief Unmask an event channel
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param LocalPort Port number that is assigned to the event channel
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcEvtchnUnmask(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  ULONG LocalPort
> +    );
> +
> +/*! \brief Grant a \a RemoteDomain permission to access local memory
> pages
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param RemoteDomain ID of a remote domain that is being granted
> access
> +    \param NumberPages Number of 4k pages to grant access to
> +    \param NotifyOffset Offset of a byte in the granted region that will be set
> to 0 when the grant is revoked
> +    \param NotifyPort Local port number of an open event channel that will
> be notified when the grant is revoked
> +    \param Flags Grant options
> +    \param Address Local user mode address of the granted memory region
> +    \param References An array of Xen grant numbers for every granted
> page
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcGnttabPermitForeignAccess(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  USHORT RemoteDomain,
> +    IN  ULONG NumberPages,
> +    IN  ULONG NotifyOffset,
> +    IN  ULONG NotifyPort,
> +    IN  XENIFACE_GNTTAB_PAGE_FLAGS Flags,
> +    OUT PVOID *Address,
> +    OUT ULONG *References
> +    );
> +
> +/*! \brief Revoke a foreign domain access to previously granted memory
> region
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param Address Local user mode address of the granted memory region
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcGnttabRevokeForeignAccess(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PVOID Address
> +    );
> +
> +/*! \brief Map a foreign memory region into the current address space
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param RemoteDomain ID of a remote domain that has granted access to
> the pages
> +    \param NumberPages Number of 4k pages to map
> +    \param References An array of Xen grant numbers for every granted
> page
> +    \param NotifyOffset Offset of a byte in the mapped region that will be set
> to 0 when the region is unmapped
> +    \param NotifyPort Local port number of an open event channel that will
> be notified when the region is unmapped
> +    \param Flags Map options
> +    \param Address Local user mode address of the mapped memory region
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcGnttabMapForeignPages(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  USHORT RemoteDomain,
> +    IN  ULONG NumberPages,
> +    IN  PULONG References,
> +    IN  ULONG NotifyOffset,
> +    IN  ULONG NotifyPort,
> +    IN  XENIFACE_GNTTAB_PAGE_FLAGS Flags,
> +    OUT PVOID *Address
> +    );
> +
> +/*! \brief Unmap a foreign memory region from the current address space
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param Address Local user mode address of the mapped memory region
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcGnttabUnmapForeignPages(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PVOID Address
> +    );
> +
> +/*! \brief Read a XenStore key
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param Path Path to the key
> +    \param cbValue Size of the \a Value buffer, in bytes
> +    \param Value Buffer that receives the value
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcStoreRead(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PCHAR Path,
> +    IN  DWORD cbValue,
> +    OUT CHAR *Value
> +    );
> +
> +/*! \brief Write a value to a XenStore key
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param Path Path to the key
> +    \param Value Value to write
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcStoreWrite(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PCHAR Path,
> +    IN  PCHAR Value
> +    );
> +
> +/*! \brief Enumerate all immediate child keys of a XenStore key
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param Path Path to the key
> +    \param cbOutput Size of the \a Output buffer, in bytes
> +    \param Output Buffer that receives a NUL-separated child key names
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcStoreDirectory(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PCHAR Path,
> +    IN  DWORD cbOutput,
> +    OUT CHAR *Output
> +    );
> +
> +/*! \brief Remove a XenStore key
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param Path Path to the key
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcStoreRemove(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PCHAR Path
> +    );
> +
> +/*! \brief Set permissions of a XenStore key
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param Path Path to the key
> +    \param Count Number of permissions
> +    \param Permissions Array of permissions to set
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcStoreSetPermissions(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PCHAR Path,
> +    IN  ULONG Count,
> +    IN  PXENIFACE_STORE_PERMISSION Permissions
> +    );
> +
> +/*! \brief Add a XenStore key watch
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param Path Path to the key to be watched
> +    \param Event Handle to an event that will be signaled when the watch
> fires
> +    \param Handle An opaque value representing the watch
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcStoreAddWatch(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PCHAR Path,
> +    IN  HANDLE Event,
> +    OUT PVOID *Handle
> +    );
> +
> +/*! \brief Remove a XenStore watch
> +    \param Xc Xencontrol handle returned by XcOpen()
> +    \param Handle Watch handle returned by XcStoreAddWatch()
> +    \return Error code
> +*/
> +XENCONTROL_API
> +DWORD
> +XcStoreRemoveWatch(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PVOID Handle
> +    );
> +
> +#ifdef __cplusplus
> +}
> +#endif
> +
> +#endif // _XENCONTROL_H_
> diff --git a/src/xencontrol/xencontrol.c b/src/xencontrol/xencontrol.c
> new file mode 100644
> index 0000000..92ac9d0
> --- /dev/null
> +++ b/src/xencontrol/xencontrol.c
> @@ -0,0 +1,915 @@
> +#define INITGUID
> +#include <windows.h>
> +#include <setupapi.h>
> +#include <stdlib.h>
> +#include <assert.h>
> +
> +#include "xencontrol.h"
> +#include "xencontrol_private.h"
> +
> +BOOL APIENTRY
> +DllMain(
> +    IN  HMODULE Module,
> +    IN  DWORD ReasonForCall,
> +    IN  LPVOID Reserved
> +)
> +{
> +    return TRUE;
> +}
> +
> +static void
> +_Log(
> +    IN  XENCONTROL_LOGGER *Logger,
> +    IN  XENCONTROL_LOG_LEVEL LogLevel,
> +    IN  XENCONTROL_LOG_LEVEL CurrentLogLevel,
> +    IN  PCHAR Function,
> +    IN  PWCHAR Format,
> +    ...
> +    )
> +{
> +    va_list Args;
> +    DWORD LastError;
> +
> +    if (Logger == NULL)
> +        return;
> +
> +    if (LogLevel > CurrentLogLevel)
> +        return;
> +
> +    LastError = GetLastError();
> +    va_start(Args, Format);
> +    Logger(LogLevel, Function, Format, Args);
> +    va_end(Args);
> +    SetLastError(LastError);
> +}
> +
> +static void
> +_LogMultiSz(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PCHAR Caller,
> +    IN  XENCONTROL_LOG_LEVEL Level,
> +    IN  PCHAR MultiSz
> +    )
> +{
> +    PCHAR Ptr;
> +    ULONG Len;
> +
> +    for (Ptr = MultiSz; *Ptr;) {
> +        Len = (ULONG)strlen(Ptr);
> +        _Log(Xc->Logger, Level, Xc->LogLevel, Caller, L"%S", Ptr);
> +        Ptr += (Len + 1);
> +    }
> +}
> +
> +void
> +XcRegisterLogger(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  XENCONTROL_LOGGER *Logger
> +    )
> +{
> +    Xc->Logger = Logger;
> +}
> +
> +void
> +XcSetLogLevel(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  XENCONTROL_LOG_LEVEL LogLevel
> +    )
> +{
> +    Xc->LogLevel = LogLevel;
> +}
> +
> +DWORD
> +XcOpen(
> +    IN  XENCONTROL_LOGGER *Logger,
> +    OUT PXENCONTROL_CONTEXT *Xc
> +    )
> +{
> +    HDEVINFO DevInfo;
> +    SP_DEVICE_INTERFACE_DATA InterfaceData;
> +    SP_DEVICE_INTERFACE_DETAIL_DATA *DetailData = NULL;
> +    DWORD BufferSize;
> +    PXENCONTROL_CONTEXT Context;
> +
> +    Context = malloc(sizeof(*Context));
> +    if (Context == NULL)
> +        return ERROR_NOT_ENOUGH_MEMORY;
> +
> +    Context->Logger = Logger;
> +    Context->LogLevel = XLL_INFO;
> +    Context->RequestId = 1;
> +    InitializeListHead(&Context->RequestList);
> +    InitializeCriticalSection(&Context->RequestListLock);
> +
> +    DevInfo = SetupDiGetClassDevs(&GUID_INTERFACE_XENIFACE, 0, NULL,
> DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
> +    if (DevInfo == INVALID_HANDLE_VALUE) {
> +        _Log(Logger, XLL_ERROR, Context->LogLevel, __FUNCTION__,
> +             L"XENIFACE device class doesn't exist");
> +        goto fail;
> +    }
> +
> +    InterfaceData.cbSize = sizeof(InterfaceData);
> +    if (!SetupDiEnumDeviceInterfaces(DevInfo, NULL,
> &GUID_INTERFACE_XENIFACE, 0, &InterfaceData)) {
> +        _Log(Logger, XLL_ERROR, Context->LogLevel, __FUNCTION__,
> +             L"Failed to enumerate XENIFACE devices");
> +        goto fail;
> +    }
> +
> +    SetupDiGetDeviceInterfaceDetail(DevInfo, &InterfaceData, NULL, 0,
> &BufferSize, NULL);
> +    if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) {
> +        _Log(Logger, XLL_ERROR, Context->LogLevel, __FUNCTION__,
> +             L"Failed to get buffer size for device details");
> +        goto fail;
> +    }
> +
> +    // Using 'BufferSize' from failed function call
> +#pragma warning(suppress: 6102)
> +    DetailData = (SP_DEVICE_INTERFACE_DETAIL_DATA *)malloc(BufferSize);
> +    if (!DetailData) {
> +        SetLastError(ERROR_OUTOFMEMORY);
> +        goto fail;
> +    }
> +
> +    DetailData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
> +
> +    if (!SetupDiGetDeviceInterfaceDetail(DevInfo, &InterfaceData,
> DetailData, BufferSize, NULL, NULL)) {
> +        _Log(Logger, XLL_ERROR, Context->LogLevel, __FUNCTION__,
> +             L"Failed to get XENIFACE device path");
> +        goto fail;
> +    }
> +
> +    Context->XenIface = CreateFile(DetailData->DevicePath,
> +                                   FILE_GENERIC_READ | FILE_GENERIC_WRITE,
> +                                   0,
> +                                   NULL,
> +                                   OPEN_EXISTING,
> +                                   FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
> +                                   NULL);
> +
> +    if (Context->XenIface == INVALID_HANDLE_VALUE) {
> +        _Log(Logger, XLL_ERROR, Context->LogLevel, __FUNCTION__,
> +             L"Failed to open XENIFACE device, path: %s", DetailData-
> >DevicePath);
> +        goto fail;
> +    }
> +
> +    _Log(Logger, XLL_ERROR, Context->LogLevel, __FUNCTION__,
> +         L"XenIface handle: %p", Context->XenIface);
> +
> +    free(DetailData);
> +    *Xc = Context;
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    _Log(Logger, XLL_ERROR, Context->LogLevel, __FUNCTION__,
> +         L"Error: 0x%x", GetLastError());
> +
> +    free(DetailData);
> +    return GetLastError();
> +}
> +
> +void
> +XcClose(
> +    IN  PXENCONTROL_CONTEXT Xc
> +    )
> +{
> +    CloseHandle(Xc->XenIface);
> +    DeleteCriticalSection(&Xc->RequestListLock);
> +    free(Xc);
> +}
> +
> +DWORD
> +XcEvtchnBindUnbound(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  USHORT RemoteDomain,
> +    IN  HANDLE Event,
> +    IN  BOOL Mask,
> +    OUT ULONG *LocalPort
> +    )
> +{
> +    XENIFACE_EVTCHN_BIND_UNBOUND_IN In;
> +    XENIFACE_EVTCHN_BIND_UNBOUND_OUT Out;
> +    DWORD Returned;
> +    BOOL Success;
> +
> +    In.RemoteDomain = RemoteDomain;
> +    In.Event = Event;
> +    In.Mask = !!Mask;
> +
> +    Log(XLL_DEBUG, L"RemoteDomain: %d, Event: %p, Mask: %d",
> RemoteDomain, Event, Mask);
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_EVTCHN_BIND_UNBOUND,
> +                              &In, sizeof(In),
> +                              &Out, sizeof(Out),
> +                              &Returned,
> +                              NULL);
> +
> +    if (!Success) {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_EVTCHN_BIND_UNBOUND_PORT
> failed");
> +        goto fail;
> +    }
> +
> +    *LocalPort = Out.LocalPort;
> +    Log(XLL_DEBUG, L"LocalPort: %lu", *LocalPort);
> +
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
> +    return GetLastError();
> +}
> +
> +DWORD
> +XcEvtchnBindInterdomain(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  USHORT RemoteDomain,
> +    IN  ULONG RemotePort,
> +    IN  HANDLE Event,
> +    IN  BOOL Mask,
> +    OUT ULONG *LocalPort
> +    )
> +{
> +    XENIFACE_EVTCHN_BIND_INTERDOMAIN_IN In;
> +    XENIFACE_EVTCHN_BIND_INTERDOMAIN_OUT Out;
> +    DWORD Returned;
> +    BOOL Success;
> +
> +    In.RemoteDomain = RemoteDomain;
> +    In.RemotePort = RemotePort;
> +    In.Event = Event;
> +    In.Mask = !!Mask;
> +
> +    Log(XLL_DEBUG, L"RemoteDomain: %d, RemotePort %lu, Event: %p,
> Mask: %d",
> +        RemoteDomain, RemotePort, Event, Mask);
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_EVTCHN_BIND_INTERDOMAIN,
> +                              &In, sizeof(In),
> +                              &Out, sizeof(Out),
> +                              &Returned,
> +                              NULL);
> +
> +    if (!Success) {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_EVTCHN_BIND_INTERDOMAIN
> failed");
> +        goto fail;
> +    }
> +
> +    *LocalPort = Out.LocalPort;
> +    Log(XLL_DEBUG, L"LocalPort: %lu", *LocalPort);
> +
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
> +    return GetLastError();
> +}
> +
> +DWORD
> +XcEvtchnClose(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  ULONG LocalPort
> +    )
> +{
> +    XENIFACE_EVTCHN_CLOSE_IN In;
> +    DWORD Returned;
> +    BOOL Success;
> +
> +    In.LocalPort = LocalPort;
> +
> +    Log(XLL_DEBUG, L"LocalPort: %lu", LocalPort);
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_EVTCHN_CLOSE,
> +                              &In, sizeof(In),
> +                              NULL, 0,
> +                              &Returned,
> +                              NULL);
> +
> +    if (!Success) {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_EVTCHN_CLOSE failed");
> +        goto fail;
> +    }
> +
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
> +    return GetLastError();
> +}
> +
> +DWORD
> +XcEvtchnNotify(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  ULONG LocalPort
> +    )
> +{
> +    XENIFACE_EVTCHN_NOTIFY_IN In;
> +    DWORD Returned;
> +    BOOL Success;
> +
> +    In.LocalPort = LocalPort;
> +
> +    Log(XLL_DEBUG, L"LocalPort: %lu", LocalPort);
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_EVTCHN_NOTIFY,
> +                              &In, sizeof(In),
> +                              NULL, 0,
> +                              &Returned,
> +                              NULL);
> +
> +    if (!Success) {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_EVTCHN_NOTIFY failed");
> +        goto fail;
> +    }
> +
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
> +    return GetLastError();
> +}
> +
> +DWORD
> +XcEvtchnUnmask(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  ULONG LocalPort
> +    )
> +{
> +    XENIFACE_EVTCHN_UNMASK_IN In;
> +    DWORD Returned;
> +    BOOL Success;
> +
> +    In.LocalPort = LocalPort;
> +
> +    Log(XLL_DEBUG, L"LocalPort: %lu", LocalPort);
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_EVTCHN_UNMASK,
> +                              &In, sizeof(In),
> +                              NULL, 0,
> +                              &Returned,
> +                              NULL);
> +
> +    if (!Success) {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_EVTCHN_UNMASK failed");
> +        goto fail;
> +    }
> +
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
> +    return GetLastError();
> +}
> +
> +static PXENCONTROL_GNTTAB_REQUEST
> +FindRequest(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PVOID Address
> +    )
> +{
> +    PLIST_ENTRY Entry;
> +    PXENCONTROL_GNTTAB_REQUEST ReturnRequest = NULL;
> +
> +    EnterCriticalSection(&Xc->RequestListLock);
> +    Entry = Xc->RequestList.Flink;
> +    while (Entry != &Xc->RequestList) {
> +        PXENCONTROL_GNTTAB_REQUEST Request =
> CONTAINING_RECORD(Entry, XENCONTROL_GNTTAB_REQUEST, ListEntry);
> +
> +        if (Request->Address == Address) {
> +            ReturnRequest = Request;
> +            break;
> +        }
> +
> +        Entry = Entry->Flink;
> +    }
> +    LeaveCriticalSection(&Xc->RequestListLock);
> +
> +    return ReturnRequest;
> +}
> +
> +DWORD
> +XcGnttabPermitForeignAccess(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  USHORT RemoteDomain,
> +    IN  ULONG NumberPages,
> +    IN  ULONG NotifyOffset,
> +    IN  ULONG NotifyPort,
> +    IN  XENIFACE_GNTTAB_PAGE_FLAGS Flags,
> +    OUT PVOID *Address,
> +    OUT ULONG *References
> +    )
> +{
> +    XENIFACE_GNTTAB_PERMIT_FOREIGN_ACCESS_IN In;
> +    XENIFACE_GNTTAB_PERMIT_FOREIGN_ACCESS_OUT *Out;
> +    PXENCONTROL_GNTTAB_REQUEST Request;
> +    DWORD Returned, Size;
> +    BOOL Success;
> +    DWORD Status;
> +
> +    // lock the whole operation to not generate duplicate IDs
> +    EnterCriticalSection(&Xc->RequestListLock);
> +
> +    In.RequestId = Xc->RequestId;
> +    In.RemoteDomain = RemoteDomain;
> +    In.NumberPages = NumberPages;
> +    In.NotifyOffset = NotifyOffset;
> +    In.NotifyPort = NotifyPort;
> +    In.Flags = Flags;
> +
> +    Size =
> (ULONG)FIELD_OFFSET(XENIFACE_GNTTAB_PERMIT_FOREIGN_ACCESS_OU
> T, References[NumberPages]);
> +    Out = malloc(Size);
> +    Request = malloc(sizeof(*Request));
> +
> +    Status = ERROR_OUTOFMEMORY;
> +    if (!Request || !Out)
> +        goto fail;
> +
> +    ZeroMemory(Request, sizeof(*Request));
> +    Request->Id = In.RequestId;
> +
> +    Log(XLL_DEBUG, L"Id %lu, RemoteDomain: %d, NumberPages: %lu,
> NotifyOffset: 0x%x, NotifyPort: %lu, Flags: 0x%x",
> +        In.RequestId, RemoteDomain, NumberPages, NotifyOffset, NotifyPort,
> Flags);
> +
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_GNTTAB_PERMIT_FOREIGN_ACCESS,
> +                              &In, sizeof(In),
> +                              Out, Size,
> +                              &Returned,
> +                              &Request->Overlapped);
> +
> +    Status = GetLastError();
> +    // this IOCTL is expected to be pending on success
> +    if (!Success) {
> +        if (Status != ERROR_IO_PENDING) {
> +            Log(XLL_ERROR, L"IOCTL_XENIFACE_GNTTAB_GRANT_PAGES
> failed");
> +            goto fail;
> +        }
> +    } else {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_GNTTAB_GRANT_PAGES not
> pending");
> +        Status = ERROR_UNIDENTIFIED_ERROR;
> +        goto fail;
> +    }
> +
> +    Request->Address = Out->Address;
> +
> +    InsertTailList(&Xc->RequestList, &Request->ListEntry);
> +    Xc->RequestId++;
> +    LeaveCriticalSection(&Xc->RequestListLock);
> +
> +    *Address = Out->Address;
> +    memcpy(References, &Out->References, NumberPages *
> sizeof(ULONG));
> +    Log(XLL_DEBUG, L"Address: %p", *Address);
> +    for (ULONG i = 0; i < NumberPages; i++)
> +        Log(XLL_DEBUG, L"Grant ref[%lu]: %lu", i, Out->References[i]);
> +
> +    free(Out);
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    LeaveCriticalSection(&Xc->RequestListLock);
> +    Log(XLL_ERROR, L"Error: 0x%x", Status);
> +    free(Out);
> +    free(Request);
> +    return Status;
> +}
> +
> +DWORD
> +XcGnttabRevokeForeignAccess(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PVOID Address
> +    )
> +{
> +    XENIFACE_GNTTAB_REVOKE_FOREIGN_ACCESS_IN In;
> +    PXENCONTROL_GNTTAB_REQUEST Request;
> +    DWORD Returned;
> +    BOOL Success;
> +    DWORD Status;
> +
> +    Log(XLL_DEBUG, L"Address: %p", Address);
> +
> +    Status = ERROR_NOT_FOUND;
> +    Request = FindRequest(Xc, Address);
> +    if (!Request) {
> +        Log(XLL_ERROR, L"Address %p not granted", Address);
> +        goto fail;
> +    }
> +
> +    In.RequestId = Request->Id;
> +
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_GNTTAB_REVOKE_FOREIGN_ACCESS,
> +                              &In, sizeof(In),
> +                              NULL, 0,
> +                              &Returned,
> +                              NULL);
> +
> +    Status = GetLastError();
> +    if (!Success) {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_GNTTAB_UNGRANT_PAGES
> failed");
> +        goto fail;
> +    }
> +
> +    EnterCriticalSection(&Xc->RequestListLock);
> +    RemoveEntryList(&Request->ListEntry);
> +    LeaveCriticalSection(&Xc->RequestListLock);
> +    free(Request);
> +
> +    return Status;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: %d 0x%x", Status, Status);
> +    return Status;
> +}
> +
> +DWORD
> +XcGnttabMapForeignPages(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  USHORT RemoteDomain,
> +    IN  ULONG NumberPages,
> +    IN  PULONG References,
> +    IN  ULONG NotifyOffset,
> +    IN  ULONG NotifyPort,
> +    IN  XENIFACE_GNTTAB_PAGE_FLAGS Flags,
> +    OUT PVOID *Address
> +    )
> +{
> +    XENIFACE_GNTTAB_MAP_FOREIGN_PAGES_IN *In;
> +    XENIFACE_GNTTAB_MAP_FOREIGN_PAGES_OUT Out;
> +    PXENCONTROL_GNTTAB_REQUEST Request;
> +    DWORD Returned, Size;
> +    BOOL Success;
> +    DWORD Status;
> +
> +    // lock the whole operation to not generate duplicate IDs
> +    EnterCriticalSection(&Xc->RequestListLock);
> +
> +    Status = ERROR_OUTOFMEMORY;
> +    Size =
> (ULONG)FIELD_OFFSET(XENIFACE_GNTTAB_MAP_FOREIGN_PAGES_IN,
> References[NumberPages]);
> +    In = malloc(Size);
> +    Request = malloc(sizeof(*Request));
> +    if (!In || !Request)
> +        goto fail;
> +
> +    In->RequestId = Xc->RequestId;
> +    In->RemoteDomain = RemoteDomain;
> +    In->NumberPages = NumberPages;
> +    In->NotifyOffset = NotifyOffset;
> +    In->NotifyPort = NotifyPort;
> +    In->Flags = Flags;
> +    memcpy(&In->References, References, NumberPages * sizeof(ULONG));
> +
> +    ZeroMemory(Request, sizeof(*Request));
> +    Request->Id = In->RequestId;
> +
> +    Log(XLL_DEBUG, L"Id %lu, RemoteDomain: %d, NumberPages: %lu,
> NotifyOffset: 0x%x, NotifyPort: %lu, Flags: 0x%x",
> +        In->RequestId, RemoteDomain, NumberPages, NotifyOffset,
> NotifyPort, Flags);
> +
> +    for (ULONG i = 0; i < NumberPages; i++)
> +        Log(XLL_DEBUG, L"Grant ref[%lu]: %lu", i, References[i]);
> +
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_GNTTAB_MAP_FOREIGN_PAGES,
> +                              In, Size,
> +                              &Out, sizeof(Out),
> +                              &Returned,
> +                              &Request->Overlapped);
> +
> +    Status = GetLastError();
> +    // this IOCTL is expected to be pending on success
> +    if (!Success) {
> +        if (Status != ERROR_IO_PENDING) {
> +            Log(XLL_ERROR,
> L"IOCTL_XENIFACE_GNTTAB_MAP_FOREIGN_PAGES failed");
> +            goto fail;
> +        }
> +    } else {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_GNTTAB_MAP_FOREIGN_PAGES
> not pending");
> +        Status = ERROR_UNIDENTIFIED_ERROR;
> +        goto fail;
> +    }
> +
> +    Request->Address = Out.Address;
> +    InsertTailList(&Xc->RequestList, &Request->ListEntry);
> +    Xc->RequestId++;
> +    LeaveCriticalSection(&Xc->RequestListLock);
> +
> +    *Address = Out.Address;
> +
> +    Log(XLL_DEBUG, L"Address: %p", *Address);
> +
> +    free(In);
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    LeaveCriticalSection(&Xc->RequestListLock);
> +    Log(XLL_ERROR, L"Error: 0x%x", Status);
> +    free(In);
> +    free(Request);
> +    return Status;
> +}
> +
> +DWORD
> +XcGnttabUnmapForeignPages(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PVOID Address
> +    )
> +{
> +    XENIFACE_GNTTAB_UNMAP_FOREIGN_PAGES_IN In;
> +    PXENCONTROL_GNTTAB_REQUEST Request;
> +    DWORD Returned;
> +    BOOL Success;
> +    DWORD Status;
> +
> +    Log(XLL_DEBUG, L"Address: %p", Address);
> +
> +    Status = ERROR_NOT_FOUND;
> +    Request = FindRequest(Xc, Address);
> +    if (!Request) {
> +        Log(XLL_ERROR, L"Address %p not mapped", Address);
> +        goto fail;
> +    }
> +
> +    In.RequestId = Request->Id;
> +
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_GNTTAB_UNMAP_FOREIGN_PAGES,
> +                              &In, sizeof(In),
> +                              NULL, 0,
> +                              &Returned,
> +                              NULL);
> +
> +    Status = GetLastError();
> +    if (!Success) {
> +        Log(XLL_ERROR,
> L"IOCTL_XENIFACE_GNTTAB_UNMAP_FOREIGN_PAGES failed");
> +        goto fail;
> +    }
> +
> +    EnterCriticalSection(&Xc->RequestListLock);
> +    RemoveEntryList(&Request->ListEntry);
> +    LeaveCriticalSection(&Xc->RequestListLock);
> +    free(Request);
> +
> +    return Status;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: 0x%x", Status);
> +    return Status;
> +}
> +
> +DWORD
> +XcStoreRead(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PSTR Path,
> +    IN  DWORD cbValue,
> +    OUT CHAR *Value
> +    )
> +{
> +    DWORD Returned;
> +    BOOL Success;
> +
> +    Log(XLL_DEBUG, L"Path: '%S'", Path);
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_STORE_READ,
> +                              Path, (DWORD)strlen(Path) + 1,
> +                              Value, cbValue,
> +                              &Returned,
> +                              NULL);
> +
> +    if (!Success) {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_STORE_READ failed");
> +        goto fail;
> +    }
> +
> +    Log(XLL_DEBUG, L"Value: '%S'", Value);
> +
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
> +    return GetLastError();
> +}
> +
> +DWORD
> +XcStoreWrite(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PCHAR Path,
> +    IN  PCHAR Value
> +    )
> +{
> +    PCHAR Buffer;
> +    DWORD cbBuffer;
> +    DWORD Returned;
> +    BOOL Success;
> +
> +    cbBuffer = (DWORD)(strlen(Path) + 1 + strlen(Value) + 1 + 1);
> +    Buffer = malloc(cbBuffer);
> +    if (!Buffer) {
> +        SetLastError(ERROR_OUTOFMEMORY);
> +        goto fail;
> +    }
> +
> +    ZeroMemory(Buffer, cbBuffer);
> +    memcpy(Buffer, Path, strlen(Path));
> +    memcpy(Buffer + strlen(Path) + 1, Value, strlen(Value));
> +
> +    Log(XLL_DEBUG, L"Path: '%S', Value: '%S'", Path, Value);
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_STORE_WRITE,
> +                              Buffer, cbBuffer,
> +                              NULL, 0,
> +                              &Returned,
> +                              NULL);
> +
> +    if (!Success) {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_STORE_WRITE failed");
> +        goto fail;
> +    }
> +
> +    free(Buffer);
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
> +    free(Buffer);
> +    return GetLastError();
> +}
> +
> +DWORD
> +XcStoreDirectory(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PCHAR Path,
> +    IN  DWORD cbOutput,
> +    OUT CHAR *Output
> +    )
> +{
> +    DWORD Returned;
> +    BOOL Success;
> +
> +    Log(XLL_DEBUG, L"Path: '%S'", Path);
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_STORE_DIRECTORY,
> +                              Path, (DWORD)strlen(Path) + 1,
> +                              Output, cbOutput,
> +                              &Returned,
> +                              NULL);
> +
> +    if (!Success) {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_STORE_DIRECTORY failed");
> +        goto fail;
> +    }
> +
> +    _LogMultiSz(Xc, __FUNCTION__, XLL_DEBUG, Output);
> +
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
> +    return GetLastError();
> +}
> +
> +DWORD
> +XcStoreRemove(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PCHAR Path
> +    )
> +{
> +    DWORD Returned;
> +    BOOL Success;
> +
> +    Log(XLL_DEBUG, L"Path: '%S'", Path);
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_STORE_REMOVE,
> +                              Path, (DWORD)strlen(Path) + 1,
> +                              NULL, 0,
> +                              &Returned,
> +                              NULL);
> +
> +    if (!Success) {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_STORE_REMOVE failed");
> +        goto fail;
> +    }
> +
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
> +    return GetLastError();
> +}
> +
> +DWORD
> +XcStoreSetPermissions(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PCHAR Path,
> +    IN  ULONG Count,
> +    IN  PXENIFACE_STORE_PERMISSION Permissions
> +    )
> +{
> +    DWORD Returned, Size;
> +    BOOL Success;
> +    XENIFACE_STORE_SET_PERMISSIONS_IN *In = NULL;
> +
> +    Log(XLL_DEBUG, L"Path: '%S', Count: %lu", Path, Count);
> +    for (ULONG i = 0; i < Count; i++)
> +        Log(XLL_DEBUG, L"Domain: %d, Mask: 0x%x", Permissions[i].Domain,
> Permissions[i].Mask);
> +
> +    Size = (ULONG)FIELD_OFFSET(XENIFACE_STORE_SET_PERMISSIONS_IN,
> Permissions[Count]);
> +    In = malloc(Size);
> +    if (!In) {
> +        SetLastError(ERROR_OUTOFMEMORY);
> +        goto fail;
> +    }
> +
> +    In->Path = Path;
> +    In->PathLength = (DWORD)strlen(In->Path) + 1;
> +    In->NumberPermissions = Count;
> +    memcpy(&In->Permissions, Permissions, Count *
> sizeof(XENIFACE_STORE_PERMISSION));
> +
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_STORE_SET_PERMISSIONS,
> +                              In, Size,
> +                              NULL, 0,
> +                              &Returned,
> +                              NULL);
> +
> +    if (!Success) {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_STORE_SET_PERMISSIONS failed");
> +        goto fail;
> +    }
> +
> +    free(In);
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
> +    free(In);
> +    return GetLastError();
> +}
> +
> +DWORD
> +XcStoreAddWatch(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PCHAR Path,
> +    IN  HANDLE Event,
> +    OUT PVOID *Handle
> +    )
> +{
> +    DWORD Returned;
> +    BOOL Success;
> +    XENIFACE_STORE_ADD_WATCH_IN In;
> +    XENIFACE_STORE_ADD_WATCH_OUT Out;
> +
> +    Log(XLL_DEBUG, L"Path: '%S', Event: %p", Path, Event);
> +
> +    In.Path = Path;
> +    In.PathLength = (DWORD)strlen(Path) + 1;
> +    In.Event = Event;
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_STORE_ADD_WATCH,
> +                              &In, sizeof(In),
> +                              &Out, sizeof(Out),
> +                              &Returned,
> +                              NULL);
> +
> +    if (!Success) {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_STORE_ADD_WATCH failed");
> +        goto fail;
> +    }
> +
> +    *Handle = Out.Context;
> +
> +    Log(XLL_DEBUG, L"Handle: %p", *Handle);
> +
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
> +    return GetLastError();
> +}
> +
> +DWORD
> +XcStoreRemoveWatch(
> +    IN  PXENCONTROL_CONTEXT Xc,
> +    IN  PVOID Handle
> +    )
> +{
> +    DWORD Returned;
> +    BOOL Success;
> +    XENIFACE_STORE_REMOVE_WATCH_IN In;
> +
> +    Log(XLL_DEBUG, L"Handle: %p", Handle);
> +
> +    In.Context = Handle;
> +    Success = DeviceIoControl(Xc->XenIface,
> +                              IOCTL_XENIFACE_STORE_REMOVE_WATCH,
> +                              &In, sizeof(In),
> +                              NULL, 0,
> +                              &Returned,
> +                              NULL);
> +
> +    if (!Success) {
> +        Log(XLL_ERROR, L"IOCTL_XENIFACE_STORE_REMOVE_WATCH failed");
> +        goto fail;
> +    }
> +
> +    return ERROR_SUCCESS;
> +
> +fail:
> +    Log(XLL_ERROR, L"Error: 0x%x", GetLastError());
> +    return GetLastError();
> +}
> diff --git a/src/xencontrol/xencontrol.rc b/src/xencontrol/xencontrol.rc
> new file mode 100644
> index 0000000..6c33e84
> --- /dev/null
> +++ b/src/xencontrol/xencontrol.rc
> @@ -0,0 +1,24 @@
> +#include <windows.h>
> +#include <ntverp.h>
> +
> +#undef VER_COMPANYNAME_STR
> +#undef VER_PRODUCTNAME_STR
> +#undef VER_PRODUCTVERSION
> +#undef VER_PRODUCTVERSION_STR
> +
> +#include <version.h>
> +
> +#define VER_COMPANYNAME_STR         VENDOR_NAME_STR
> +#define VER_LEGALCOPYRIGHT_STR      "Copyright (c) Invisible Things Lab"
> +
> +#define VER_PRODUCTNAME_STR         "XENIFACE"
> +#define VER_PRODUCTVERSION
> MAJOR_VERSION,MINOR_VERSION,MICRO_VERSION,BUILD_NUMBER
> +#define VER_PRODUCTVERSION_STR      MAJOR_VERSION_STR "."
> MINOR_VERSION_STR "." MICRO_VERSION_STR "." BUILD_NUMBER_STR
> +
> +#define VER_INTERNALNAME_STR        "XENCONTROL.DLL"
> +#define VER_FILEDESCRIPTION_STR     "Xen interface user library"
> +
> +#define VER_FILETYPE                VFT_DLL
> +#define VER_FILESUBTYPE             0
> +
> +#include <common.ver>
> diff --git a/src/xencontrol/xencontrol_private.h
> b/src/xencontrol/xencontrol_private.h
> new file mode 100644
> index 0000000..685bcfa
> --- /dev/null
> +++ b/src/xencontrol/xencontrol_private.h
> @@ -0,0 +1,49 @@
> +#ifndef _XENCONTROL_PRIVATE_H_
> +#define _XENCONTROL_PRIVATE_H_
> +
> +#include <windows.h>
> +#include "xencontrol.h"
> +
> +#define Log(level, format, ...) \
> +        _Log(Xc->Logger, level, Xc->LogLevel, __FUNCTION__, format,
> __VA_ARGS__)
> +
> +#define InitializeListHead(ListHead) ( \
> +    (ListHead)->Flink = (ListHead)->Blink = (ListHead))
> +
> +#define InsertTailList(ListHead, Entry) { \
> +    PLIST_ENTRY _EX_Blink; \
> +    PLIST_ENTRY _EX_ListHead; \
> +    _EX_ListHead = (ListHead); \
> +    _EX_Blink = _EX_ListHead->Blink; \
> +    (Entry)->Flink = _EX_ListHead; \
> +    (Entry)->Blink = _EX_Blink; \
> +    _EX_Blink->Flink = (Entry); \
> +    _EX_ListHead->Blink = (Entry); \
> +    }
> +
> +#define RemoveEntryList(Entry) { \
> +    PLIST_ENTRY _EX_Blink; \
> +    PLIST_ENTRY _EX_Flink; \
> +    _EX_Flink = (Entry)->Flink; \
> +    _EX_Blink = (Entry)->Blink; \
> +    _EX_Blink->Flink = _EX_Flink; \
> +    _EX_Flink->Blink = _EX_Blink; \
> +    }
> +
> +typedef struct _XENCONTROL_CONTEXT {
> +    HANDLE XenIface;
> +    XENCONTROL_LOGGER *Logger;
> +    XENCONTROL_LOG_LEVEL LogLevel;
> +    ULONG RequestId;
> +    LIST_ENTRY RequestList;
> +    CRITICAL_SECTION RequestListLock;
> +} XENCONTROL_CONTEXT, *PXENCONTROL_CONTEXT;
> +
> +typedef struct _XENCONTROL_GNTTAB_REQUEST {
> +    LIST_ENTRY  ListEntry;
> +    OVERLAPPED  Overlapped;
> +    ULONG       Id;
> +    PVOID       Address;
> +} XENCONTROL_GNTTAB_REQUEST, *PXENCONTROL_GNTTAB_REQUEST;
> +
> +#endif // _XENCONTROL_PRIVATE_H_
> diff --git a/vs2013/xencontrol.props b/vs2013/xencontrol.props
> new file mode 100644
> index 0000000..22c1704
> --- /dev/null
> +++ b/vs2013/xencontrol.props
> @@ -0,0 +1,84 @@
> +<?xml version="1.0" encoding="utf-8"?>
> +<Project ToolsVersion="4.0"
> xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
> +
> +  <ImportGroup Label="PropertySheets" />
> +
> +  <PropertyGroup Label="UserMacros" />
> +
> +  <PropertyGroup>
> +    <IncludePath>$(SolutionDir)\..\include;$(IncludePath)</IncludePath>
> +
> <LibraryPath>$(SolutionDir)\$(Configuration)\$(Platform);$(LibraryPath)</Li
> braryPath>
> +    <OutDir>$(SolutionDir)\$(Configuration)\$(Platform)\</OutDir>
> +
> <IntDir>$(SolutionDir)\$(ProjectName)\$(Configuration)\$(Platform)\</IntDi
> r>
> +    <LinkIncremental>false</LinkIncremental>
> +  </PropertyGroup>
> +
> +  <PropertyGroup Label="Configuration">
> +    <LinkIncremental>false</LinkIncremental>
> +    <PlatformToolset>v120</PlatformToolset>
> +  </PropertyGroup>
> +
> +  <PropertyGroup Condition="'$(Configuration)'=='Debug'"
> Label="Configuration">
> +    <RunCodeAnalysis>true</RunCodeAnalysis>
> +    <UseDebugLibraries>true</UseDebugLibraries>
> +  </PropertyGroup>
> +
> +  <PropertyGroup Condition="'$(Configuration)'=='Release'"
> Label="Configuration">
> +    <UseDebugLibraries>false</UseDebugLibraries>
> +    <WholeProgramOptimization>true</WholeProgramOptimization>
> +  </PropertyGroup>
> +
> +  <ItemDefinitionGroup>
> +    <Link>
> +
> <AdditionalDependencies>setupapi.lib;ws2_32.lib;shlwapi.lib;wtsapi32.lib;us
> erenv.lib;version.lib;ntdll.lib;kernel32.lib;user32.lib;gdi32.lib;comdlg32.lib;adv
> api32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;%(AdditionalDependencies)
> </AdditionalDependencies>
> +      <GenerateDebugInformation>true</GenerateDebugInformation>
> +    </Link>
> +    <ClCompile>
> +
> <PreprocessorDefinitions>WIN32;%(PreprocessorDefinitions)</Preprocesso
> rDefinitions>
> +      <WarningLevel>Level3</WarningLevel>
> +      <PrecompiledHeader>NotUsing</PrecompiledHeader>
> +      <SDLCheck>true</SDLCheck>
> +      <ExceptionHandling>false</ExceptionHandling>
> +      <TreatWarningAsError>true</TreatWarningAsError>
> +    </ClCompile>
> +    <CustomBuildStep>
> +      <Command>xcopy /y $(TargetPath)
> $(SolutionDir)\..\xeniface\$(PlatformTarget)\
> +xcopy /y $(TargetDir)$(TargetName).pdb
> $(SolutionDir)\..\xeniface\$(PlatformTarget)\
> +if exist $(TargetDir)$(TargetName).lib xcopy /y
> $(TargetDir)$(TargetName).lib
> $(SolutionDir)\..\xeniface\$(PlatformTarget)\</Command>
> +    </CustomBuildStep>
> +    <CustomBuildStep>
> +      <Message>Copying output files</Message>
> +    </CustomBuildStep>
> +    <CustomBuildStep>
> +
> <Outputs>$(SolutionDir)\..\xeniface\$(PlatformTarget)$(TargetFileName);$(
> SolutionDir)\..\xeniface\$(PlatformTarget)$(TargetName).pdb;$(SolutionDir)
> \..\xeniface\$(PlatformTarget)$(TargetName).lib;%(Outputs)</Outputs>
> +    </CustomBuildStep>
> +    <CustomBuildStep>
> +
> <Inputs>$(TargetPath);$(TargetDir)$(TargetName).pdb;$(TargetDir)$(Target
> Name).lib</Inputs>
> +    </CustomBuildStep>
> +  </ItemDefinitionGroup>
> +
> +  <ItemDefinitionGroup Condition="'$(Configuration)'=='Debug'">
> +    <ClCompile>
> +
> <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</Preprocess
> orDefinitions>
> +      <Optimization>Disabled</Optimization>
> +      <EnablePREfast>true</EnablePREfast>
> +      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
> +    </ClCompile>
> +  </ItemDefinitionGroup>
> +
> +  <ItemDefinitionGroup Condition="'$(Configuration)'=='Release'">
> +    <ClCompile>
> +
> <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</Preproces
> sorDefinitions>
> +      <Optimization>MaxSpeed</Optimization>
> +      <FunctionLevelLinking>true</FunctionLevelLinking>
> +      <IntrinsicFunctions>true</IntrinsicFunctions>
> +      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
> +    </ClCompile>
> +    <Link>
> +      <EnableCOMDATFolding>true</EnableCOMDATFolding>
> +      <OptimizeReferences>true</OptimizeReferences>
> +    </Link>
> +  </ItemDefinitionGroup>
> +
> +  <ItemGroup />
> +</Project>
> \ No newline at end of file
> diff --git a/vs2013/xencontrol/xencontrol.vcxproj
> b/vs2013/xencontrol/xencontrol.vcxproj
> new file mode 100644
> index 0000000..4d91a38
> --- /dev/null
> +++ b/vs2013/xencontrol/xencontrol.vcxproj
> @@ -0,0 +1,62 @@
> +<?xml version="1.0" encoding="utf-8"?>
> +<Project DefaultTargets="Build" ToolsVersion="12.0"
> xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
> +  <ItemGroup Label="ProjectConfigurations">
> +    <ProjectConfiguration Include="Debug|Win32">
> +      <Configuration>Debug</Configuration>
> +      <Platform>Win32</Platform>
> +    </ProjectConfiguration>
> +    <ProjectConfiguration Include="Debug|x64">
> +      <Configuration>Debug</Configuration>
> +      <Platform>x64</Platform>
> +    </ProjectConfiguration>
> +    <ProjectConfiguration Include="Release|Win32">
> +      <Configuration>Release</Configuration>
> +      <Platform>Win32</Platform>
> +    </ProjectConfiguration>
> +    <ProjectConfiguration Include="Release|x64">
> +      <Configuration>Release</Configuration>
> +      <Platform>x64</Platform>
> +    </ProjectConfiguration>
> +  </ItemGroup>
> +  <PropertyGroup Label="Globals">
> +    <ProjectGuid>{D386D8E9-D015-4AD2-A5C2-
> 4F845A803FA2}</ProjectGuid>
> +    <Keyword>Win32Proj</Keyword>
> +    <RootNamespace>xencontrol</RootNamespace>
> +  </PropertyGroup>
> +  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
> +  <PropertyGroup Label="Configuration">
> +    <ConfigurationType>DynamicLibrary</ConfigurationType>
> +    <CharacterSet>Unicode</CharacterSet>
> +  </PropertyGroup>
> +  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
> +  <ImportGroup Label="PropertySheets">
> +    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props"
> Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')"
> Label="LocalAppDataPlatform" />
> +    <Import Project="..\xencontrol.props" />
> +  </ImportGroup>
> +  <ItemDefinitionGroup>
> +    <ClCompile>
> +
> <PreprocessorDefinitions>_WINDOWS;_USRDLL;XENCONTROL_EXPORTS;%(
> PreprocessorDefinitions)</PreprocessorDefinitions>
> +    </ClCompile>
> +    <Link>
> +      <SubSystem>Windows</SubSystem>
> +    </Link>
> +  </ItemDefinitionGroup>
> +  <ItemGroup>
> +    <ClCompile Include="..\..\src\xencontrol\xencontrol.c" />
> +  </ItemGroup>
> +  <ItemGroup>
> +    <ClInclude Include="..\..\include\xencontrol.h" />
> +    <ClInclude Include="..\..\src\xencontrol\xencontrol_private.h" />
> +  </ItemGroup>
> +  <ItemGroup>
> +    <ResourceCompile Include="..\..\src\xencontrol\xencontrol.rc" />
> +  </ItemGroup>
> +  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
> +  <ImportGroup Label="ExtensionTargets">
> +  </ImportGroup>
> +  <ProjectExtensions>
> +    <VisualStudio>
> +      <UserProperties />
> +    </VisualStudio>
> +  </ProjectExtensions>
> +</Project>
> \ No newline at end of file
> diff --git a/vs2013/xencontrol/xencontrol.vcxproj.filters
> b/vs2013/xencontrol/xencontrol.vcxproj.filters
> new file mode 100644
> index 0000000..c6de099
> --- /dev/null
> +++ b/vs2013/xencontrol/xencontrol.vcxproj.filters
> @@ -0,0 +1,13 @@
> +<?xml version="1.0" encoding="utf-8"?>
> +<Project ToolsVersion="4.0"
> xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
> +  <ItemGroup>
> +    <ClInclude Include="..\..\include\xencontrol.h" />
> +    <ClInclude Include="..\..\src\xencontrol\xencontrol_private.h" />
> +  </ItemGroup>
> +  <ItemGroup>
> +    <ResourceCompile Include="..\..\src\xencontrol\xencontrol.rc" />
> +  </ItemGroup>
> +  <ItemGroup>
> +    <ClCompile Include="..\..\src\xencontrol\xencontrol.c" />
> +  </ItemGroup>
> +</Project>
> \ No newline at end of file
> diff --git a/vs2013/xeniface.sln b/vs2013/xeniface.sln
> index 3c74c79..76d06b4 100644
> --- a/vs2013/xeniface.sln
> +++ b/vs2013/xeniface.sln
> @@ -17,6 +17,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}")
> = "package", "package\package.
>  		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B} = {2E61D2CC-
> 865E-442C-8C83-B8DAFD7BBD3B}
>  	EndProjectSection
>  EndProject
> +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xencontrol",
> "xencontrol\xencontrol.vcxproj", "{D386D8E9-D015-4AD2-A5C2-
> 4F845A803FA2}"
> +EndProject
>  Global
>  	GlobalSection(SolutionConfigurationPlatforms) = preSolution
>  		Windows 7 Debug|Win32 = Windows 7 Debug|Win32
> @@ -165,6 +167,42 @@ Global
>  		{9B071A35-897C-477A-AEB7-95F77618A21D}.Windows Vista
> Release|x64.ActiveCfg = Windows Vista Release|x64
>  		{9B071A35-897C-477A-AEB7-95F77618A21D}.Windows Vista
> Release|x64.Build.0 = Windows Vista Release|x64
>  		{9B071A35-897C-477A-AEB7-95F77618A21D}.Windows Vista
> Release|x64.Deploy.0 = Windows Vista Release|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7
> Debug|Win32.ActiveCfg = Debug|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7
> Debug|Win32.Build.0 = Debug|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7
> Debug|Win32.Deploy.0 = Debug|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7
> Debug|x64.ActiveCfg = Debug|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7
> Debug|x64.Build.0 = Debug|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7
> Debug|x64.Deploy.0 = Debug|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7
> Release|Win32.ActiveCfg = Release|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7
> Release|Win32.Build.0 = Release|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7
> Release|Win32.Deploy.0 = Release|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7
> Release|x64.ActiveCfg = Release|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7
> Release|x64.Build.0 = Release|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows 7
> Release|x64.Deploy.0 = Release|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows
> Developer Preview Debug|Win32.ActiveCfg = Debug|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows
> Developer Preview Debug|Win32.Build.0 = Debug|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows
> Developer Preview Debug|Win32.Deploy.0 = Debug|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows
> Developer Preview Debug|x64.ActiveCfg = Debug|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows
> Developer Preview Debug|x64.Build.0 = Debug|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows
> Developer Preview Debug|x64.Deploy.0 = Debug|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows
> Developer Preview Release|Win32.ActiveCfg = Release|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows
> Developer Preview Release|Win32.Build.0 = Release|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows
> Developer Preview Release|Win32.Deploy.0 = Release|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows
> Developer Preview Release|x64.ActiveCfg = Release|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows
> Developer Preview Release|x64.Build.0 = Release|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows
> Developer Preview Release|x64.Deploy.0 = Release|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista
> Debug|Win32.ActiveCfg = Debug|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista
> Debug|Win32.Build.0 = Debug|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista
> Debug|Win32.Deploy.0 = Debug|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista
> Debug|x64.ActiveCfg = Debug|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista
> Debug|x64.Build.0 = Debug|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista
> Debug|x64.Deploy.0 = Debug|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista
> Release|Win32.ActiveCfg = Release|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista
> Release|Win32.Build.0 = Release|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista
> Release|Win32.Deploy.0 = Release|Win32
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista
> Release|x64.ActiveCfg = Release|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista
> Release|x64.Build.0 = Release|x64
> +		{D386D8E9-D015-4AD2-A5C2-4F845A803FA2}.Windows Vista
> Release|x64.Deploy.0 = Release|x64
>  	EndGlobalSection
>  	GlobalSection(SolutionProperties) = preSolution
>  		HideSolutionNode = FALSE
> --
> 1.8.1.msysgit.1
> 
> 
> 
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

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

From win-pv-devel-bounces@lists.xenproject.org Thu Nov 05 17:05:15 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Nov 2015 17:05:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZuNyM-0000yU-RB; Thu, 05 Nov 2015 17:05:14 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=744ee64bb=Paul.Durrant@citrix.com>)
	id 1ZuNyL-0000yG-Ed
	for win-pv-devel@lists.xenproject.org; Thu, 05 Nov 2015 17:05:13 +0000
Received: from [85.158.139.211] by server-12.bemta-5.messagelabs.com id
	47/AB-12831-78C5B365; Thu, 05 Nov 2015 13:41:27 +0000
X-Env-Sender: prvs=744ee64bb=Paul.Durrant@citrix.com
X-Msg-Ref: server-13.tower-206.messagelabs.com!1446730886!1280322!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 15082 invoked from network); 5 Nov 2015 13:41:26 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-13.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	5 Nov 2015 13:41:26 -0000
X-IronPort-AV: E=Sophos;i="5.20,247,1444694400"; 
   d="scan'208";a="7002519"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: =?iso-8859-2?Q?Rafa=B3_Wojdy=B3a?= <omeg@invisiblethingslab.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [PATCH 1/2] Remove unused Visual Studio
	solution	configurations
Thread-Index: AQHRFrqoPYoF4U1rJUWptJiXGXGya56NcfGw
Date: Thu, 5 Nov 2015 13:41:24 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F660B23@AMSPEX01CL01.citrite.net>
References: <56398BB6.9030109@invisiblethingslab.com>
In-Reply-To: <56398BB6.9030109@invisiblethingslab.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] [PATCH 1/2] Remove unused Visual Studio
	solution	configurations
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> bounces@lists.xenproject.org] On Behalf Of Rafal Wojdyla
> Sent: 04 November 2015 04:38
> To: win-pv-devel@lists.xenproject.org
> Subject: [win-pv-devel] [PATCH 1/2] Remove unused Visual Studio solution
> configurations
> 
> Signed-off-by: Rafal Wojdyla <omeg@invisiblethingslab.com>

Acked-by: Paul Durrant <paul.durrant@citrix.com>

> ---
>  vs2012/xeniface.sln | 45 ---------------------------------------------
>  vs2013/xeniface.sln | 48 ++----------------------------------------------
>  2 files changed, 2 insertions(+), 91 deletions(-)
> 
> diff --git a/vs2012/xeniface.sln b/vs2012/xeniface.sln
> index cb6becf..a61a1ff 100644
> --- a/vs2012/xeniface.sln
> +++ b/vs2012/xeniface.sln
> @@ -14,10 +14,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}")
> = "package", "package\package.
>  EndProject
>  Global
>  	GlobalSection(SolutionConfigurationPlatforms) = preSolution
> -		Debug|Win32 = Debug|Win32
> -		Debug|x64 = Debug|x64
> -		Release|Win32 = Release|Win32
> -		Release|x64 = Release|x64
>  		Windows 7 Debug|Win32 = Windows 7 Debug|Win32
>  		Windows 7 Debug|x64 = Windows 7 Debug|x64
>  		Windows 7 Release|Win32 = Windows 7 Release|Win32
> @@ -32,18 +28,6 @@ Global
>  		Windows Vista Release|x64 = Windows Vista Release|x64
>  	EndGlobalSection
>  	GlobalSection(ProjectConfigurationPlatforms) = postSolution
> -		{85C731AD-2EA2-4049-A542-
> D2D38EDE938C}.Debug|Win32.ActiveCfg = Windows 8 Debug|Win32
> -		{85C731AD-2EA2-4049-A542-
> D2D38EDE938C}.Debug|Win32.Build.0 = Windows 8 Debug|Win32
> -		{85C731AD-2EA2-4049-A542-
> D2D38EDE938C}.Debug|Win32.Deploy.0 = Windows 8 Debug|Win32
> -		{85C731AD-2EA2-4049-A542-
> D2D38EDE938C}.Debug|x64.ActiveCfg = Windows 7 Debug|x64
> -		{85C731AD-2EA2-4049-A542-
> D2D38EDE938C}.Debug|x64.Build.0 = Windows 7 Debug|x64
> -		{85C731AD-2EA2-4049-A542-
> D2D38EDE938C}.Debug|x64.Deploy.0 = Windows 7 Debug|x64
> -		{85C731AD-2EA2-4049-A542-
> D2D38EDE938C}.Release|Win32.ActiveCfg = Windows 7 Release|Win32
> -		{85C731AD-2EA2-4049-A542-
> D2D38EDE938C}.Release|Win32.Build.0 = Windows 7 Release|Win32
> -		{85C731AD-2EA2-4049-A542-
> D2D38EDE938C}.Release|Win32.Deploy.0 = Windows 7 Release|Win32
> -		{85C731AD-2EA2-4049-A542-
> D2D38EDE938C}.Release|x64.ActiveCfg = Windows 7 Release|x64
> -		{85C731AD-2EA2-4049-A542-
> D2D38EDE938C}.Release|x64.Build.0 = Windows 7 Release|x64
> -		{85C731AD-2EA2-4049-A542-
> D2D38EDE938C}.Release|x64.Deploy.0 = Windows 7 Release|x64
>  		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Windows 7
> Debug|Win32.ActiveCfg = Windows 7 Debug|Win32
>  		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Windows 7
> Debug|Win32.Build.0 = Windows 7 Debug|Win32
>  		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Windows 7
> Debug|Win32.Deploy.0 = Windows 7 Debug|Win32
> @@ -80,17 +64,6 @@ Global
>  		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Windows Vista
> Release|x64.ActiveCfg = Windows Vista Release|x64
>  		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Windows Vista
> Release|x64.Build.0 = Windows Vista Release|x64
>  		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Windows Vista
> Release|x64.Deploy.0 = Windows Vista Release|x64
> -		{22166290-65D8-49D2-BB88-
> 33201797C7D8}.Debug|Win32.ActiveCfg = Windows 8 Debug|Win32
> -		{22166290-65D8-49D2-BB88-
> 33201797C7D8}.Debug|Win32.Build.0 = Windows 8 Debug|Win32
> -		{22166290-65D8-49D2-BB88-
> 33201797C7D8}.Debug|Win32.Deploy.0 = Windows 8 Debug|Win32
> -		{22166290-65D8-49D2-BB88-
> 33201797C7D8}.Debug|x64.ActiveCfg = Windows8 Debug|x64
> -		{22166290-65D8-49D2-BB88-
> 33201797C7D8}.Debug|x64.Build.0 = Windows8 Debug|x64
> -		{22166290-65D8-49D2-BB88-
> 33201797C7D8}.Debug|x64.Deploy.0 = Windows8 Debug|x64
> -		{22166290-65D8-49D2-BB88-
> 33201797C7D8}.Release|Win32.ActiveCfg = Windows 8 Release|Win32
> -		{22166290-65D8-49D2-BB88-
> 33201797C7D8}.Release|Win32.Build.0 = Windows 8 Release|Win32
> -		{22166290-65D8-49D2-BB88-
> 33201797C7D8}.Release|Win32.Deploy.0 = Windows 8 Release|Win32
> -		{22166290-65D8-49D2-BB88-
> 33201797C7D8}.Release|x64.ActiveCfg = Windows 8 Release|x64
> -		{22166290-65D8-49D2-BB88-
> 33201797C7D8}.Release|x64.Build.0 = Windows 8 Release|x64
>  		{22166290-65D8-49D2-BB88-33201797C7D8}.Windows 7
> Debug|Win32.ActiveCfg = Windows 7 Debug|Win32
>  		{22166290-65D8-49D2-BB88-33201797C7D8}.Windows 7
> Debug|Win32.Build.0 = Windows 7 Debug|Win32
>  		{22166290-65D8-49D2-BB88-33201797C7D8}.Windows 7
> Debug|Win32.Deploy.0 = Windows 7 Debug|Win32
> @@ -127,14 +100,6 @@ Global
>  		{22166290-65D8-49D2-BB88-33201797C7D8}.Windows Vista
> Release|x64.ActiveCfg = Windows Vista Release|x64
>  		{22166290-65D8-49D2-BB88-33201797C7D8}.Windows Vista
> Release|x64.Build.0 = Windows Vista Release|x64
>  		{22166290-65D8-49D2-BB88-33201797C7D8}.Windows Vista
> Release|x64.Deploy.0 = Windows Vista Release|x64
> -		{2E61D2CC-865E-442C-8C83-
> B8DAFD7BBD3B}.Debug|Win32.ActiveCfg = Debug|Win32
> -		{2E61D2CC-865E-442C-8C83-
> B8DAFD7BBD3B}.Debug|Win32.Build.0 = Debug|Win32
> -		{2E61D2CC-865E-442C-8C83-
> B8DAFD7BBD3B}.Debug|Win32.Deploy.0 = Debug|Win32
> -		{2E61D2CC-865E-442C-8C83-
> B8DAFD7BBD3B}.Debug|x64.ActiveCfg = Debug|Win32
> -		{2E61D2CC-865E-442C-8C83-
> B8DAFD7BBD3B}.Release|Win32.ActiveCfg = Release|Win32
> -		{2E61D2CC-865E-442C-8C83-
> B8DAFD7BBD3B}.Release|Win32.Build.0 = Release|Win32
> -		{2E61D2CC-865E-442C-8C83-
> B8DAFD7BBD3B}.Release|Win32.Deploy.0 = Release|Win32
> -		{2E61D2CC-865E-442C-8C83-
> B8DAFD7BBD3B}.Release|x64.ActiveCfg = Release|Win32
>  		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Windows 7
> Debug|Win32.ActiveCfg = Debug|Win32
>  		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Windows 7
> Debug|Win32.Build.0 = Debug|Win32
>  		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Windows 7
> Debug|Win32.Deploy.0 = Debug|Win32
> @@ -163,16 +128,6 @@ Global
>  		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Windows Vista
> Release|x64.ActiveCfg = Release|x64
>  		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Windows Vista
> Release|x64.Build.0 = Release|x64
>  		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Windows Vista
> Release|x64.Deploy.0 = Release|x64
> -		{9B071A35-897C-477A-AEB7-
> 95F77618A21D}.Debug|Win32.ActiveCfg = Windows Vista Debug|Win32
> -		{9B071A35-897C-477A-AEB7-
> 95F77618A21D}.Debug|Win32.Build.0 = Windows Vista Debug|Win32
> -		{9B071A35-897C-477A-AEB7-
> 95F77618A21D}.Debug|Win32.Deploy.0 = Windows Vista Debug|Win32
> -		{9B071A35-897C-477A-AEB7-
> 95F77618A21D}.Debug|x64.ActiveCfg = Windows Vista Debug|x64
> -		{9B071A35-897C-477A-AEB7-
> 95F77618A21D}.Debug|x64.Build.0 = Windows Vista Debug|x64
> -		{9B071A35-897C-477A-AEB7-
> 95F77618A21D}.Release|Win32.ActiveCfg = Windows Vista Release|Win32
> -		{9B071A35-897C-477A-AEB7-
> 95F77618A21D}.Release|Win32.Build.0 = Windows Vista Release|Win32
> -		{9B071A35-897C-477A-AEB7-
> 95F77618A21D}.Release|Win32.Deploy.0 = Windows Vista Release|Win32
> -		{9B071A35-897C-477A-AEB7-
> 95F77618A21D}.Release|x64.ActiveCfg = Windows Vista Release|x64
> -		{9B071A35-897C-477A-AEB7-
> 95F77618A21D}.Release|x64.Build.0 = Windows Vista Release|x64
>  		{9B071A35-897C-477A-AEB7-95F77618A21D}.Windows 7
> Debug|Win32.ActiveCfg = Windows 7 Debug|Win32
>  		{9B071A35-897C-477A-AEB7-95F77618A21D}.Windows 7
> Debug|Win32.Build.0 = Windows 7 Debug|Win32
>  		{9B071A35-897C-477A-AEB7-95F77618A21D}.Windows 7
> Debug|Win32.Deploy.0 = Windows 7 Debug|Win32
> diff --git a/vs2013/xeniface.sln b/vs2013/xeniface.sln
> index 413b86a..3c74c79 100644
> --- a/vs2013/xeniface.sln
> +++ b/vs2013/xeniface.sln
> @@ -1,6 +1,6 @@
>  Microsoft Visual Studio Solution File, Format Version 12.00
> -# Visual Studio Express 2013 for Windows Desktop
> -VisualStudioVersion = 12.0.30723.0
> +# Visual Studio 2013
> +VisualStudioVersion = 12.0.40629.0
>  MinimumVisualStudioVersion = 10.0.40219.1
>  Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xeniface_coinst",
> "xeniface_coinst\xeniface_coinst.vcxproj", "{85C731AD-2EA2-4049-A542-
> D2D38EDE938C}"
>  EndProject
> @@ -19,10 +19,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}")
> = "package", "package\package.
>  EndProject
>  Global
>  	GlobalSection(SolutionConfigurationPlatforms) = preSolution
> -		Debug|Win32 = Debug|Win32
> -		Debug|x64 = Debug|x64
> -		Release|Win32 = Release|Win32
> -		Release|x64 = Release|x64
>  		Windows 7 Debug|Win32 = Windows 7 Debug|Win32
>  		Windows 7 Debug|x64 = Windows 7 Debug|x64
>  		Windows 7 Release|Win32 = Windows 7 Release|Win32
> @@ -37,18 +33,6 @@ Global
>  		Windows Vista Release|x64 = Windows Vista Release|x64
>  	EndGlobalSection
>  	GlobalSection(ProjectConfigurationPlatforms) = postSolution
> -		{85C731AD-2EA2-4049-A542-
> D2D38EDE938C}.Debug|Win32.ActiveCfg = Windows 8 Debug|Win32
> -		{85C731AD-2EA2-4049-A542-
> D2D38EDE938C}.Debug|Win32.Build.0 = Windows 8 Debug|Win32
> -		{85C731AD-2EA2-4049-A542-
> D2D38EDE938C}.Debug|Win32.Deploy.0 = Windows 8 Debug|Win32
> -		{85C731AD-2EA2-4049-A542-
> D2D38EDE938C}.Debug|x64.ActiveCfg = Windows 8 Debug|x64
> -		{85C731AD-2EA2-4049-A542-
> D2D38EDE938C}.Debug|x64.Build.0 = Windows 8 Debug|x64
> -		{85C731AD-2EA2-4049-A542-
> D2D38EDE938C}.Debug|x64.Deploy.0 = Windows 8 Debug|x64
> -		{85C731AD-2EA2-4049-A542-
> D2D38EDE938C}.Release|Win32.ActiveCfg = Windows 7 Release|Win32
> -		{85C731AD-2EA2-4049-A542-
> D2D38EDE938C}.Release|Win32.Build.0 = Windows 7 Release|Win32
> -		{85C731AD-2EA2-4049-A542-
> D2D38EDE938C}.Release|Win32.Deploy.0 = Windows 7 Release|Win32
> -		{85C731AD-2EA2-4049-A542-
> D2D38EDE938C}.Release|x64.ActiveCfg = Windows 7 Release|x64
> -		{85C731AD-2EA2-4049-A542-
> D2D38EDE938C}.Release|x64.Build.0 = Windows 7 Release|x64
> -		{85C731AD-2EA2-4049-A542-
> D2D38EDE938C}.Release|x64.Deploy.0 = Windows 7 Release|x64
>  		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Windows 7
> Debug|Win32.ActiveCfg = Windows 7 Debug|Win32
>  		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Windows 7
> Debug|Win32.Build.0 = Windows 7 Debug|Win32
>  		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Windows 7
> Debug|Win32.Deploy.0 = Windows 7 Debug|Win32
> @@ -85,16 +69,6 @@ Global
>  		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Windows Vista
> Release|x64.ActiveCfg = Windows Vista Release|x64
>  		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Windows Vista
> Release|x64.Build.0 = Windows Vista Release|x64
>  		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Windows Vista
> Release|x64.Deploy.0 = Windows Vista Release|x64
> -		{22166290-65D8-49D2-BB88-
> 33201797C7D8}.Debug|Win32.ActiveCfg = Windows 8 Debug|Win32
> -		{22166290-65D8-49D2-BB88-
> 33201797C7D8}.Debug|Win32.Build.0 = Windows 8 Debug|Win32
> -		{22166290-65D8-49D2-BB88-
> 33201797C7D8}.Debug|Win32.Deploy.0 = Windows 8 Debug|Win32
> -		{22166290-65D8-49D2-BB88-
> 33201797C7D8}.Debug|x64.ActiveCfg = Windows 8 Debug|x64
> -		{22166290-65D8-49D2-BB88-
> 33201797C7D8}.Debug|x64.Build.0 = Windows 8 Debug|x64
> -		{22166290-65D8-49D2-BB88-
> 33201797C7D8}.Release|Win32.ActiveCfg = Windows 8 Release|Win32
> -		{22166290-65D8-49D2-BB88-
> 33201797C7D8}.Release|Win32.Build.0 = Windows 8 Release|Win32
> -		{22166290-65D8-49D2-BB88-
> 33201797C7D8}.Release|Win32.Deploy.0 = Windows 8 Release|Win32
> -		{22166290-65D8-49D2-BB88-
> 33201797C7D8}.Release|x64.ActiveCfg = Windows 8 Release|x64
> -		{22166290-65D8-49D2-BB88-
> 33201797C7D8}.Release|x64.Build.0 = Windows 8 Release|x64
>  		{22166290-65D8-49D2-BB88-33201797C7D8}.Windows 7
> Debug|Win32.ActiveCfg = Windows 7 Debug|Win32
>  		{22166290-65D8-49D2-BB88-33201797C7D8}.Windows 7
> Debug|Win32.Build.0 = Windows 7 Debug|Win32
>  		{22166290-65D8-49D2-BB88-33201797C7D8}.Windows 7
> Debug|Win32.Deploy.0 = Windows 7 Debug|Win32
> @@ -127,14 +101,6 @@ Global
>  		{22166290-65D8-49D2-BB88-33201797C7D8}.Windows Vista
> Release|x64.ActiveCfg = Windows Vista Release|x64
>  		{22166290-65D8-49D2-BB88-33201797C7D8}.Windows Vista
> Release|x64.Build.0 = Windows Vista Release|x64
>  		{22166290-65D8-49D2-BB88-33201797C7D8}.Windows Vista
> Release|x64.Deploy.0 = Windows Vista Release|x64
> -		{2E61D2CC-865E-442C-8C83-
> B8DAFD7BBD3B}.Debug|Win32.ActiveCfg = Debug|Win32
> -		{2E61D2CC-865E-442C-8C83-
> B8DAFD7BBD3B}.Debug|Win32.Build.0 = Debug|Win32
> -		{2E61D2CC-865E-442C-8C83-
> B8DAFD7BBD3B}.Debug|Win32.Deploy.0 = Debug|Win32
> -		{2E61D2CC-865E-442C-8C83-
> B8DAFD7BBD3B}.Debug|x64.ActiveCfg = Debug|Win32
> -		{2E61D2CC-865E-442C-8C83-
> B8DAFD7BBD3B}.Release|Win32.ActiveCfg = Release|Win32
> -		{2E61D2CC-865E-442C-8C83-
> B8DAFD7BBD3B}.Release|Win32.Build.0 = Release|Win32
> -		{2E61D2CC-865E-442C-8C83-
> B8DAFD7BBD3B}.Release|Win32.Deploy.0 = Release|Win32
> -		{2E61D2CC-865E-442C-8C83-
> B8DAFD7BBD3B}.Release|x64.ActiveCfg = Release|Win32
>  		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Windows 7
> Debug|Win32.ActiveCfg = Debug|Win32
>  		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Windows 7
> Debug|Win32.Build.0 = Debug|Win32
>  		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Windows 7
> Debug|Win32.Deploy.0 = Debug|Win32
> @@ -167,16 +133,6 @@ Global
>  		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Windows Vista
> Release|x64.ActiveCfg = Release|x64
>  		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Windows Vista
> Release|x64.Build.0 = Release|x64
>  		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Windows Vista
> Release|x64.Deploy.0 = Release|x64
> -		{9B071A35-897C-477A-AEB7-
> 95F77618A21D}.Debug|Win32.ActiveCfg = Windows Vista Debug|Win32
> -		{9B071A35-897C-477A-AEB7-
> 95F77618A21D}.Debug|Win32.Build.0 = Windows Vista Debug|Win32
> -		{9B071A35-897C-477A-AEB7-
> 95F77618A21D}.Debug|Win32.Deploy.0 = Windows Vista Debug|Win32
> -		{9B071A35-897C-477A-AEB7-
> 95F77618A21D}.Debug|x64.ActiveCfg = Windows Vista Debug|x64
> -		{9B071A35-897C-477A-AEB7-
> 95F77618A21D}.Debug|x64.Build.0 = Windows Vista Debug|x64
> -		{9B071A35-897C-477A-AEB7-
> 95F77618A21D}.Release|Win32.ActiveCfg = Windows Vista Release|Win32
> -		{9B071A35-897C-477A-AEB7-
> 95F77618A21D}.Release|Win32.Build.0 = Windows Vista Release|Win32
> -		{9B071A35-897C-477A-AEB7-
> 95F77618A21D}.Release|Win32.Deploy.0 = Windows Vista Release|Win32
> -		{9B071A35-897C-477A-AEB7-
> 95F77618A21D}.Release|x64.ActiveCfg = Windows Vista Release|x64
> -		{9B071A35-897C-477A-AEB7-
> 95F77618A21D}.Release|x64.Build.0 = Windows Vista Release|x64
>  		{9B071A35-897C-477A-AEB7-95F77618A21D}.Windows 7
> Debug|Win32.ActiveCfg = Windows 7 Debug|Win32
>  		{9B071A35-897C-477A-AEB7-95F77618A21D}.Windows 7
> Debug|Win32.Build.0 = Windows 7 Debug|Win32
>  		{9B071A35-897C-477A-AEB7-95F77618A21D}.Windows 7
> Debug|Win32.Deploy.0 = Windows 7 Debug|Win32
> --
> 1.8.1.msysgit.1
> 
> 
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

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

From win-pv-devel-bounces@lists.xenproject.org Thu Nov 05 17:05:15 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Nov 2015 17:05:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZuNyM-0000yU-RB; Thu, 05 Nov 2015 17:05:14 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=744ee64bb=Paul.Durrant@citrix.com>)
	id 1ZuNyL-0000yG-Ed
	for win-pv-devel@lists.xenproject.org; Thu, 05 Nov 2015 17:05:13 +0000
Received: from [85.158.139.211] by server-12.bemta-5.messagelabs.com id
	47/AB-12831-78C5B365; Thu, 05 Nov 2015 13:41:27 +0000
X-Env-Sender: prvs=744ee64bb=Paul.Durrant@citrix.com
X-Msg-Ref: server-13.tower-206.messagelabs.com!1446730886!1280322!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 15082 invoked from network); 5 Nov 2015 13:41:26 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-13.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	5 Nov 2015 13:41:26 -0000
X-IronPort-AV: E=Sophos;i="5.20,247,1444694400"; 
   d="scan'208";a="7002519"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: =?iso-8859-2?Q?Rafa=B3_Wojdy=B3a?= <omeg@invisiblethingslab.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [PATCH 1/2] Remove unused Visual Studio
	solution	configurations
Thread-Index: AQHRFrqoPYoF4U1rJUWptJiXGXGya56NcfGw
Date: Thu, 5 Nov 2015 13:41:24 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F660B23@AMSPEX01CL01.citrite.net>
References: <56398BB6.9030109@invisiblethingslab.com>
In-Reply-To: <56398BB6.9030109@invisiblethingslab.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] [PATCH 1/2] Remove unused Visual Studio
	solution	configurations
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> bounces@lists.xenproject.org] On Behalf Of Rafal Wojdyla
> Sent: 04 November 2015 04:38
> To: win-pv-devel@lists.xenproject.org
> Subject: [win-pv-devel] [PATCH 1/2] Remove unused Visual Studio solution
> configurations
> 
> Signed-off-by: Rafal Wojdyla <omeg@invisiblethingslab.com>

Acked-by: Paul Durrant <paul.durrant@citrix.com>

> ---
>  vs2012/xeniface.sln | 45 ---------------------------------------------
>  vs2013/xeniface.sln | 48 ++----------------------------------------------
>  2 files changed, 2 insertions(+), 91 deletions(-)
> 
> diff --git a/vs2012/xeniface.sln b/vs2012/xeniface.sln
> index cb6becf..a61a1ff 100644
> --- a/vs2012/xeniface.sln
> +++ b/vs2012/xeniface.sln
> @@ -14,10 +14,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}")
> = "package", "package\package.
>  EndProject
>  Global
>  	GlobalSection(SolutionConfigurationPlatforms) = preSolution
> -		Debug|Win32 = Debug|Win32
> -		Debug|x64 = Debug|x64
> -		Release|Win32 = Release|Win32
> -		Release|x64 = Release|x64
>  		Windows 7 Debug|Win32 = Windows 7 Debug|Win32
>  		Windows 7 Debug|x64 = Windows 7 Debug|x64
>  		Windows 7 Release|Win32 = Windows 7 Release|Win32
> @@ -32,18 +28,6 @@ Global
>  		Windows Vista Release|x64 = Windows Vista Release|x64
>  	EndGlobalSection
>  	GlobalSection(ProjectConfigurationPlatforms) = postSolution
> -		{85C731AD-2EA2-4049-A542-
> D2D38EDE938C}.Debug|Win32.ActiveCfg = Windows 8 Debug|Win32
> -		{85C731AD-2EA2-4049-A542-
> D2D38EDE938C}.Debug|Win32.Build.0 = Windows 8 Debug|Win32
> -		{85C731AD-2EA2-4049-A542-
> D2D38EDE938C}.Debug|Win32.Deploy.0 = Windows 8 Debug|Win32
> -		{85C731AD-2EA2-4049-A542-
> D2D38EDE938C}.Debug|x64.ActiveCfg = Windows 7 Debug|x64
> -		{85C731AD-2EA2-4049-A542-
> D2D38EDE938C}.Debug|x64.Build.0 = Windows 7 Debug|x64
> -		{85C731AD-2EA2-4049-A542-
> D2D38EDE938C}.Debug|x64.Deploy.0 = Windows 7 Debug|x64
> -		{85C731AD-2EA2-4049-A542-
> D2D38EDE938C}.Release|Win32.ActiveCfg = Windows 7 Release|Win32
> -		{85C731AD-2EA2-4049-A542-
> D2D38EDE938C}.Release|Win32.Build.0 = Windows 7 Release|Win32
> -		{85C731AD-2EA2-4049-A542-
> D2D38EDE938C}.Release|Win32.Deploy.0 = Windows 7 Release|Win32
> -		{85C731AD-2EA2-4049-A542-
> D2D38EDE938C}.Release|x64.ActiveCfg = Windows 7 Release|x64
> -		{85C731AD-2EA2-4049-A542-
> D2D38EDE938C}.Release|x64.Build.0 = Windows 7 Release|x64
> -		{85C731AD-2EA2-4049-A542-
> D2D38EDE938C}.Release|x64.Deploy.0 = Windows 7 Release|x64
>  		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Windows 7
> Debug|Win32.ActiveCfg = Windows 7 Debug|Win32
>  		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Windows 7
> Debug|Win32.Build.0 = Windows 7 Debug|Win32
>  		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Windows 7
> Debug|Win32.Deploy.0 = Windows 7 Debug|Win32
> @@ -80,17 +64,6 @@ Global
>  		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Windows Vista
> Release|x64.ActiveCfg = Windows Vista Release|x64
>  		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Windows Vista
> Release|x64.Build.0 = Windows Vista Release|x64
>  		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Windows Vista
> Release|x64.Deploy.0 = Windows Vista Release|x64
> -		{22166290-65D8-49D2-BB88-
> 33201797C7D8}.Debug|Win32.ActiveCfg = Windows 8 Debug|Win32
> -		{22166290-65D8-49D2-BB88-
> 33201797C7D8}.Debug|Win32.Build.0 = Windows 8 Debug|Win32
> -		{22166290-65D8-49D2-BB88-
> 33201797C7D8}.Debug|Win32.Deploy.0 = Windows 8 Debug|Win32
> -		{22166290-65D8-49D2-BB88-
> 33201797C7D8}.Debug|x64.ActiveCfg = Windows8 Debug|x64
> -		{22166290-65D8-49D2-BB88-
> 33201797C7D8}.Debug|x64.Build.0 = Windows8 Debug|x64
> -		{22166290-65D8-49D2-BB88-
> 33201797C7D8}.Debug|x64.Deploy.0 = Windows8 Debug|x64
> -		{22166290-65D8-49D2-BB88-
> 33201797C7D8}.Release|Win32.ActiveCfg = Windows 8 Release|Win32
> -		{22166290-65D8-49D2-BB88-
> 33201797C7D8}.Release|Win32.Build.0 = Windows 8 Release|Win32
> -		{22166290-65D8-49D2-BB88-
> 33201797C7D8}.Release|Win32.Deploy.0 = Windows 8 Release|Win32
> -		{22166290-65D8-49D2-BB88-
> 33201797C7D8}.Release|x64.ActiveCfg = Windows 8 Release|x64
> -		{22166290-65D8-49D2-BB88-
> 33201797C7D8}.Release|x64.Build.0 = Windows 8 Release|x64
>  		{22166290-65D8-49D2-BB88-33201797C7D8}.Windows 7
> Debug|Win32.ActiveCfg = Windows 7 Debug|Win32
>  		{22166290-65D8-49D2-BB88-33201797C7D8}.Windows 7
> Debug|Win32.Build.0 = Windows 7 Debug|Win32
>  		{22166290-65D8-49D2-BB88-33201797C7D8}.Windows 7
> Debug|Win32.Deploy.0 = Windows 7 Debug|Win32
> @@ -127,14 +100,6 @@ Global
>  		{22166290-65D8-49D2-BB88-33201797C7D8}.Windows Vista
> Release|x64.ActiveCfg = Windows Vista Release|x64
>  		{22166290-65D8-49D2-BB88-33201797C7D8}.Windows Vista
> Release|x64.Build.0 = Windows Vista Release|x64
>  		{22166290-65D8-49D2-BB88-33201797C7D8}.Windows Vista
> Release|x64.Deploy.0 = Windows Vista Release|x64
> -		{2E61D2CC-865E-442C-8C83-
> B8DAFD7BBD3B}.Debug|Win32.ActiveCfg = Debug|Win32
> -		{2E61D2CC-865E-442C-8C83-
> B8DAFD7BBD3B}.Debug|Win32.Build.0 = Debug|Win32
> -		{2E61D2CC-865E-442C-8C83-
> B8DAFD7BBD3B}.Debug|Win32.Deploy.0 = Debug|Win32
> -		{2E61D2CC-865E-442C-8C83-
> B8DAFD7BBD3B}.Debug|x64.ActiveCfg = Debug|Win32
> -		{2E61D2CC-865E-442C-8C83-
> B8DAFD7BBD3B}.Release|Win32.ActiveCfg = Release|Win32
> -		{2E61D2CC-865E-442C-8C83-
> B8DAFD7BBD3B}.Release|Win32.Build.0 = Release|Win32
> -		{2E61D2CC-865E-442C-8C83-
> B8DAFD7BBD3B}.Release|Win32.Deploy.0 = Release|Win32
> -		{2E61D2CC-865E-442C-8C83-
> B8DAFD7BBD3B}.Release|x64.ActiveCfg = Release|Win32
>  		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Windows 7
> Debug|Win32.ActiveCfg = Debug|Win32
>  		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Windows 7
> Debug|Win32.Build.0 = Debug|Win32
>  		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Windows 7
> Debug|Win32.Deploy.0 = Debug|Win32
> @@ -163,16 +128,6 @@ Global
>  		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Windows Vista
> Release|x64.ActiveCfg = Release|x64
>  		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Windows Vista
> Release|x64.Build.0 = Release|x64
>  		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Windows Vista
> Release|x64.Deploy.0 = Release|x64
> -		{9B071A35-897C-477A-AEB7-
> 95F77618A21D}.Debug|Win32.ActiveCfg = Windows Vista Debug|Win32
> -		{9B071A35-897C-477A-AEB7-
> 95F77618A21D}.Debug|Win32.Build.0 = Windows Vista Debug|Win32
> -		{9B071A35-897C-477A-AEB7-
> 95F77618A21D}.Debug|Win32.Deploy.0 = Windows Vista Debug|Win32
> -		{9B071A35-897C-477A-AEB7-
> 95F77618A21D}.Debug|x64.ActiveCfg = Windows Vista Debug|x64
> -		{9B071A35-897C-477A-AEB7-
> 95F77618A21D}.Debug|x64.Build.0 = Windows Vista Debug|x64
> -		{9B071A35-897C-477A-AEB7-
> 95F77618A21D}.Release|Win32.ActiveCfg = Windows Vista Release|Win32
> -		{9B071A35-897C-477A-AEB7-
> 95F77618A21D}.Release|Win32.Build.0 = Windows Vista Release|Win32
> -		{9B071A35-897C-477A-AEB7-
> 95F77618A21D}.Release|Win32.Deploy.0 = Windows Vista Release|Win32
> -		{9B071A35-897C-477A-AEB7-
> 95F77618A21D}.Release|x64.ActiveCfg = Windows Vista Release|x64
> -		{9B071A35-897C-477A-AEB7-
> 95F77618A21D}.Release|x64.Build.0 = Windows Vista Release|x64
>  		{9B071A35-897C-477A-AEB7-95F77618A21D}.Windows 7
> Debug|Win32.ActiveCfg = Windows 7 Debug|Win32
>  		{9B071A35-897C-477A-AEB7-95F77618A21D}.Windows 7
> Debug|Win32.Build.0 = Windows 7 Debug|Win32
>  		{9B071A35-897C-477A-AEB7-95F77618A21D}.Windows 7
> Debug|Win32.Deploy.0 = Windows 7 Debug|Win32
> diff --git a/vs2013/xeniface.sln b/vs2013/xeniface.sln
> index 413b86a..3c74c79 100644
> --- a/vs2013/xeniface.sln
> +++ b/vs2013/xeniface.sln
> @@ -1,6 +1,6 @@
>  Microsoft Visual Studio Solution File, Format Version 12.00
> -# Visual Studio Express 2013 for Windows Desktop
> -VisualStudioVersion = 12.0.30723.0
> +# Visual Studio 2013
> +VisualStudioVersion = 12.0.40629.0
>  MinimumVisualStudioVersion = 10.0.40219.1
>  Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xeniface_coinst",
> "xeniface_coinst\xeniface_coinst.vcxproj", "{85C731AD-2EA2-4049-A542-
> D2D38EDE938C}"
>  EndProject
> @@ -19,10 +19,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}")
> = "package", "package\package.
>  EndProject
>  Global
>  	GlobalSection(SolutionConfigurationPlatforms) = preSolution
> -		Debug|Win32 = Debug|Win32
> -		Debug|x64 = Debug|x64
> -		Release|Win32 = Release|Win32
> -		Release|x64 = Release|x64
>  		Windows 7 Debug|Win32 = Windows 7 Debug|Win32
>  		Windows 7 Debug|x64 = Windows 7 Debug|x64
>  		Windows 7 Release|Win32 = Windows 7 Release|Win32
> @@ -37,18 +33,6 @@ Global
>  		Windows Vista Release|x64 = Windows Vista Release|x64
>  	EndGlobalSection
>  	GlobalSection(ProjectConfigurationPlatforms) = postSolution
> -		{85C731AD-2EA2-4049-A542-
> D2D38EDE938C}.Debug|Win32.ActiveCfg = Windows 8 Debug|Win32
> -		{85C731AD-2EA2-4049-A542-
> D2D38EDE938C}.Debug|Win32.Build.0 = Windows 8 Debug|Win32
> -		{85C731AD-2EA2-4049-A542-
> D2D38EDE938C}.Debug|Win32.Deploy.0 = Windows 8 Debug|Win32
> -		{85C731AD-2EA2-4049-A542-
> D2D38EDE938C}.Debug|x64.ActiveCfg = Windows 8 Debug|x64
> -		{85C731AD-2EA2-4049-A542-
> D2D38EDE938C}.Debug|x64.Build.0 = Windows 8 Debug|x64
> -		{85C731AD-2EA2-4049-A542-
> D2D38EDE938C}.Debug|x64.Deploy.0 = Windows 8 Debug|x64
> -		{85C731AD-2EA2-4049-A542-
> D2D38EDE938C}.Release|Win32.ActiveCfg = Windows 7 Release|Win32
> -		{85C731AD-2EA2-4049-A542-
> D2D38EDE938C}.Release|Win32.Build.0 = Windows 7 Release|Win32
> -		{85C731AD-2EA2-4049-A542-
> D2D38EDE938C}.Release|Win32.Deploy.0 = Windows 7 Release|Win32
> -		{85C731AD-2EA2-4049-A542-
> D2D38EDE938C}.Release|x64.ActiveCfg = Windows 7 Release|x64
> -		{85C731AD-2EA2-4049-A542-
> D2D38EDE938C}.Release|x64.Build.0 = Windows 7 Release|x64
> -		{85C731AD-2EA2-4049-A542-
> D2D38EDE938C}.Release|x64.Deploy.0 = Windows 7 Release|x64
>  		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Windows 7
> Debug|Win32.ActiveCfg = Windows 7 Debug|Win32
>  		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Windows 7
> Debug|Win32.Build.0 = Windows 7 Debug|Win32
>  		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Windows 7
> Debug|Win32.Deploy.0 = Windows 7 Debug|Win32
> @@ -85,16 +69,6 @@ Global
>  		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Windows Vista
> Release|x64.ActiveCfg = Windows Vista Release|x64
>  		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Windows Vista
> Release|x64.Build.0 = Windows Vista Release|x64
>  		{85C731AD-2EA2-4049-A542-D2D38EDE938C}.Windows Vista
> Release|x64.Deploy.0 = Windows Vista Release|x64
> -		{22166290-65D8-49D2-BB88-
> 33201797C7D8}.Debug|Win32.ActiveCfg = Windows 8 Debug|Win32
> -		{22166290-65D8-49D2-BB88-
> 33201797C7D8}.Debug|Win32.Build.0 = Windows 8 Debug|Win32
> -		{22166290-65D8-49D2-BB88-
> 33201797C7D8}.Debug|Win32.Deploy.0 = Windows 8 Debug|Win32
> -		{22166290-65D8-49D2-BB88-
> 33201797C7D8}.Debug|x64.ActiveCfg = Windows 8 Debug|x64
> -		{22166290-65D8-49D2-BB88-
> 33201797C7D8}.Debug|x64.Build.0 = Windows 8 Debug|x64
> -		{22166290-65D8-49D2-BB88-
> 33201797C7D8}.Release|Win32.ActiveCfg = Windows 8 Release|Win32
> -		{22166290-65D8-49D2-BB88-
> 33201797C7D8}.Release|Win32.Build.0 = Windows 8 Release|Win32
> -		{22166290-65D8-49D2-BB88-
> 33201797C7D8}.Release|Win32.Deploy.0 = Windows 8 Release|Win32
> -		{22166290-65D8-49D2-BB88-
> 33201797C7D8}.Release|x64.ActiveCfg = Windows 8 Release|x64
> -		{22166290-65D8-49D2-BB88-
> 33201797C7D8}.Release|x64.Build.0 = Windows 8 Release|x64
>  		{22166290-65D8-49D2-BB88-33201797C7D8}.Windows 7
> Debug|Win32.ActiveCfg = Windows 7 Debug|Win32
>  		{22166290-65D8-49D2-BB88-33201797C7D8}.Windows 7
> Debug|Win32.Build.0 = Windows 7 Debug|Win32
>  		{22166290-65D8-49D2-BB88-33201797C7D8}.Windows 7
> Debug|Win32.Deploy.0 = Windows 7 Debug|Win32
> @@ -127,14 +101,6 @@ Global
>  		{22166290-65D8-49D2-BB88-33201797C7D8}.Windows Vista
> Release|x64.ActiveCfg = Windows Vista Release|x64
>  		{22166290-65D8-49D2-BB88-33201797C7D8}.Windows Vista
> Release|x64.Build.0 = Windows Vista Release|x64
>  		{22166290-65D8-49D2-BB88-33201797C7D8}.Windows Vista
> Release|x64.Deploy.0 = Windows Vista Release|x64
> -		{2E61D2CC-865E-442C-8C83-
> B8DAFD7BBD3B}.Debug|Win32.ActiveCfg = Debug|Win32
> -		{2E61D2CC-865E-442C-8C83-
> B8DAFD7BBD3B}.Debug|Win32.Build.0 = Debug|Win32
> -		{2E61D2CC-865E-442C-8C83-
> B8DAFD7BBD3B}.Debug|Win32.Deploy.0 = Debug|Win32
> -		{2E61D2CC-865E-442C-8C83-
> B8DAFD7BBD3B}.Debug|x64.ActiveCfg = Debug|Win32
> -		{2E61D2CC-865E-442C-8C83-
> B8DAFD7BBD3B}.Release|Win32.ActiveCfg = Release|Win32
> -		{2E61D2CC-865E-442C-8C83-
> B8DAFD7BBD3B}.Release|Win32.Build.0 = Release|Win32
> -		{2E61D2CC-865E-442C-8C83-
> B8DAFD7BBD3B}.Release|Win32.Deploy.0 = Release|Win32
> -		{2E61D2CC-865E-442C-8C83-
> B8DAFD7BBD3B}.Release|x64.ActiveCfg = Release|Win32
>  		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Windows 7
> Debug|Win32.ActiveCfg = Debug|Win32
>  		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Windows 7
> Debug|Win32.Build.0 = Debug|Win32
>  		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Windows 7
> Debug|Win32.Deploy.0 = Debug|Win32
> @@ -167,16 +133,6 @@ Global
>  		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Windows Vista
> Release|x64.ActiveCfg = Release|x64
>  		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Windows Vista
> Release|x64.Build.0 = Release|x64
>  		{2E61D2CC-865E-442C-8C83-B8DAFD7BBD3B}.Windows Vista
> Release|x64.Deploy.0 = Release|x64
> -		{9B071A35-897C-477A-AEB7-
> 95F77618A21D}.Debug|Win32.ActiveCfg = Windows Vista Debug|Win32
> -		{9B071A35-897C-477A-AEB7-
> 95F77618A21D}.Debug|Win32.Build.0 = Windows Vista Debug|Win32
> -		{9B071A35-897C-477A-AEB7-
> 95F77618A21D}.Debug|Win32.Deploy.0 = Windows Vista Debug|Win32
> -		{9B071A35-897C-477A-AEB7-
> 95F77618A21D}.Debug|x64.ActiveCfg = Windows Vista Debug|x64
> -		{9B071A35-897C-477A-AEB7-
> 95F77618A21D}.Debug|x64.Build.0 = Windows Vista Debug|x64
> -		{9B071A35-897C-477A-AEB7-
> 95F77618A21D}.Release|Win32.ActiveCfg = Windows Vista Release|Win32
> -		{9B071A35-897C-477A-AEB7-
> 95F77618A21D}.Release|Win32.Build.0 = Windows Vista Release|Win32
> -		{9B071A35-897C-477A-AEB7-
> 95F77618A21D}.Release|Win32.Deploy.0 = Windows Vista Release|Win32
> -		{9B071A35-897C-477A-AEB7-
> 95F77618A21D}.Release|x64.ActiveCfg = Windows Vista Release|x64
> -		{9B071A35-897C-477A-AEB7-
> 95F77618A21D}.Release|x64.Build.0 = Windows Vista Release|x64
>  		{9B071A35-897C-477A-AEB7-95F77618A21D}.Windows 7
> Debug|Win32.ActiveCfg = Windows 7 Debug|Win32
>  		{9B071A35-897C-477A-AEB7-95F77618A21D}.Windows 7
> Debug|Win32.Build.0 = Windows 7 Debug|Win32
>  		{9B071A35-897C-477A-AEB7-95F77618A21D}.Windows 7
> Debug|Win32.Deploy.0 = Windows 7 Debug|Win32
> --
> 1.8.1.msysgit.1
> 
> 
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

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

From win-pv-devel-bounces@lists.xenproject.org Thu Nov 05 17:21:07 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Nov 2015 17:21:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZuODh-0002ri-JK; Thu, 05 Nov 2015 17:21:05 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <richard.mortier@gmail.com>)
	id 1ZuO6t-0002GN-Tx; Thu, 05 Nov 2015 17:14:04 +0000
Received: from [193.109.254.147] by server-4.bemta-14.messagelabs.com id
	7D/09-10715-B5E8B365; Thu, 05 Nov 2015 17:14:03 +0000
X-Env-Sender: richard.mortier@gmail.com
X-Msg-Ref: server-14.tower-27.messagelabs.com!1446743642!819599!1
X-Originating-IP: [209.85.212.177]
X-SpamReason: No, hits=0.3 required=7.0 tests=RCVD_BY_IP
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 2360 invoked from network); 5 Nov 2015 17:14:02 -0000
Received: from mail-wi0-f177.google.com (HELO mail-wi0-f177.google.com)
	(209.85.212.177)
	by server-14.tower-27.messagelabs.com with AES128-GCM-SHA256 encrypted
	SMTP; 5 Nov 2015 17:14:02 -0000
Received: by wijp11 with SMTP id p11so14871329wij.0;
	Thu, 05 Nov 2015 09:14:02 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=mime-version:sender:in-reply-to:references:date:message-id:subject
	:from:to:cc:content-type;
	bh=V43qOrd4Or9jW+MHM5hBrpNFOclw4VZ07Ftlg0mQyX0=;
	b=h5ZM72ZdA41ErXP3ThP+0KTLXY0HtFCweJ0xBG0pM7z8eL8pM3Yzt0DMFvgTvWBRRW
	Q/UpxsGdq6hyKuJtFtE+fN6kCUN4e7CjbpmHJwNck+h+JQT1oyIOLOkf/f1kabF6KkIu
	24EJuJrndMPssvqXfK59wNdph44Vo4an/x/e6OHDz0YYKEqHQHfd+2WOLrnKgoAwkCqn
	s3BMq12BOw7ykraMvVNCheMMJrNxkHwIak3AEMeyd3Ge8Q5OxBOS3sOhw1GaFHujFiXd
	/3vTo+MgDbclRyDdXFU/n6Ceh/q5mWtrasEwJPNVilfpnGvsjtv0zod+bbnNmrum/CHp
	7D+Q==
MIME-Version: 1.0
X-Received: by 10.194.94.100 with SMTP id db4mr9446591wjb.110.1446743641930;
	Thu, 05 Nov 2015 09:14:01 -0800 (PST)
Received: by 10.28.130.70 with HTTP; Thu, 5 Nov 2015 09:14:01 -0800 (PST)
In-Reply-To: <20151105162412.GA4054@zion.uk.xensource.com>
References: <B7204A9D-30E9-429A-B727-8199654981C8@gmail.com>
	<20151105162412.GA4054@zion.uk.xensource.com>
Date: Thu, 5 Nov 2015 17:14:01 +0000
X-Google-Sender-Auth: sf17Dg35s0OpFYxp-gBZVURktMc
Message-ID: <CAN2Hq0548ERGh1RSasV2yq64Kg2Y2fFC0iqR=gFDH_MYi=OQWg@mail.gmail.com>
From: Richard Mortier <mort@cantab.net>
To: Wei Liu <wei.liu2@citrix.com>
X-Mailman-Approved-At: Thu, 05 Nov 2015 17:21:04 +0000
Cc: Lars Kurth <lars.kurth.xen@gmail.com>,
	Xen-devel <xen-devel@lists.xenproject.org>,
	Win-pv-devel@lists.xenproject.org,
	mirageos-devel <mirageos-devel@lists.xenproject.org>,
	xen-api@lists.xenproject.org
Subject: Re: [win-pv-devel] [MirageOS-devel] [Xen-devel] Hackathon 2016
	Location Preferences
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

On 5 November 2015 at 16:24, Wei Liu <wei.liu2@citrix.com> wrote:
>> We do have two options for a Hackathon: China (either Shanghai,
>> Hangzhou or Beijing - details TBC) and Cambridge, UK. We are still in
>> the early planning phase and the budget for the Hackathon has not yet
>> been approved.
>
> I lived in Hangzhou for a while -- it is a nice city in my humble
> opinion. :-)

I have visited Hangzhou and it is certainly a nice city!
But Cambridge would get my vote for convenience I'm afraid :)

-- 
Richard Mortier
mort@cantab.net

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

From win-pv-devel-bounces@lists.xenproject.org Thu Nov 05 17:21:07 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Nov 2015 17:21:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZuODh-0002ri-JK; Thu, 05 Nov 2015 17:21:05 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <richard.mortier@gmail.com>)
	id 1ZuO6t-0002GN-Tx; Thu, 05 Nov 2015 17:14:04 +0000
Received: from [193.109.254.147] by server-4.bemta-14.messagelabs.com id
	7D/09-10715-B5E8B365; Thu, 05 Nov 2015 17:14:03 +0000
X-Env-Sender: richard.mortier@gmail.com
X-Msg-Ref: server-14.tower-27.messagelabs.com!1446743642!819599!1
X-Originating-IP: [209.85.212.177]
X-SpamReason: No, hits=0.3 required=7.0 tests=RCVD_BY_IP
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 2360 invoked from network); 5 Nov 2015 17:14:02 -0000
Received: from mail-wi0-f177.google.com (HELO mail-wi0-f177.google.com)
	(209.85.212.177)
	by server-14.tower-27.messagelabs.com with AES128-GCM-SHA256 encrypted
	SMTP; 5 Nov 2015 17:14:02 -0000
Received: by wijp11 with SMTP id p11so14871329wij.0;
	Thu, 05 Nov 2015 09:14:02 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=mime-version:sender:in-reply-to:references:date:message-id:subject
	:from:to:cc:content-type;
	bh=V43qOrd4Or9jW+MHM5hBrpNFOclw4VZ07Ftlg0mQyX0=;
	b=h5ZM72ZdA41ErXP3ThP+0KTLXY0HtFCweJ0xBG0pM7z8eL8pM3Yzt0DMFvgTvWBRRW
	Q/UpxsGdq6hyKuJtFtE+fN6kCUN4e7CjbpmHJwNck+h+JQT1oyIOLOkf/f1kabF6KkIu
	24EJuJrndMPssvqXfK59wNdph44Vo4an/x/e6OHDz0YYKEqHQHfd+2WOLrnKgoAwkCqn
	s3BMq12BOw7ykraMvVNCheMMJrNxkHwIak3AEMeyd3Ge8Q5OxBOS3sOhw1GaFHujFiXd
	/3vTo+MgDbclRyDdXFU/n6Ceh/q5mWtrasEwJPNVilfpnGvsjtv0zod+bbnNmrum/CHp
	7D+Q==
MIME-Version: 1.0
X-Received: by 10.194.94.100 with SMTP id db4mr9446591wjb.110.1446743641930;
	Thu, 05 Nov 2015 09:14:01 -0800 (PST)
Received: by 10.28.130.70 with HTTP; Thu, 5 Nov 2015 09:14:01 -0800 (PST)
In-Reply-To: <20151105162412.GA4054@zion.uk.xensource.com>
References: <B7204A9D-30E9-429A-B727-8199654981C8@gmail.com>
	<20151105162412.GA4054@zion.uk.xensource.com>
Date: Thu, 5 Nov 2015 17:14:01 +0000
X-Google-Sender-Auth: sf17Dg35s0OpFYxp-gBZVURktMc
Message-ID: <CAN2Hq0548ERGh1RSasV2yq64Kg2Y2fFC0iqR=gFDH_MYi=OQWg@mail.gmail.com>
From: Richard Mortier <mort@cantab.net>
To: Wei Liu <wei.liu2@citrix.com>
X-Mailman-Approved-At: Thu, 05 Nov 2015 17:21:04 +0000
Cc: Lars Kurth <lars.kurth.xen@gmail.com>,
	Xen-devel <xen-devel@lists.xenproject.org>,
	Win-pv-devel@lists.xenproject.org,
	mirageos-devel <mirageos-devel@lists.xenproject.org>,
	xen-api@lists.xenproject.org
Subject: Re: [win-pv-devel] [MirageOS-devel] [Xen-devel] Hackathon 2016
	Location Preferences
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

On 5 November 2015 at 16:24, Wei Liu <wei.liu2@citrix.com> wrote:
>> We do have two options for a Hackathon: China (either Shanghai,
>> Hangzhou or Beijing - details TBC) and Cambridge, UK. We are still in
>> the early planning phase and the budget for the Hackathon has not yet
>> been approved.
>
> I lived in Hangzhou for a while -- it is a nice city in my humble
> opinion. :-)

I have visited Hangzhou and it is certainly a nice city!
But Cambridge would get my vote for convenience I'm afraid :)

-- 
Richard Mortier
mort@cantab.net

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

From win-pv-devel-bounces@lists.xenproject.org Thu Nov 05 17:21:53 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Nov 2015 17:21:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZuOET-00031A-Bn; Thu, 05 Nov 2015 17:21:53 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=744ee64bb=Paul.Durrant@citrix.com>)
	id 1ZuOER-00030n-MT
	for win-pv-devel@lists.xenproject.org; Thu, 05 Nov 2015 17:21:52 +0000
Received: from [85.158.137.68] by server-8.bemta-3.messagelabs.com id
	E4/19-31069-57E5B365; Thu, 05 Nov 2015 13:49:41 +0000
X-Env-Sender: prvs=744ee64bb=Paul.Durrant@citrix.com
X-Msg-Ref: server-8.tower-31.messagelabs.com!1446731380!1368884!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 52780 invoked from network); 5 Nov 2015 13:49:40 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-8.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	5 Nov 2015 13:49:40 -0000
X-IronPort-AV: E=Sophos;i="5.20,247,1444694400"; 
   d="scan'208";a="7003346"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: =?utf-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [PATCH 2/2] Add a user mode library wrapper for
	XENIFACE IOCTLs
Thread-Index: AQHRFrqyPejT2I+4AEqmfVGcoyDY5p6Ncprw
Date: Thu, 5 Nov 2015 13:49:35 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F660BB6@AMSPEX01CL01.citrite.net>
References: <56398BC0.1040909@invisiblethingslab.com>
In-Reply-To: <56398BC0.1040909@invisiblethingslab.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] [PATCH 2/2] Add a user mode library wrapper
	for	XENIFACE IOCTLs
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiB3aW4tcHYtZGV2ZWwtYm91bmNl
c0BsaXN0cy54ZW5wcm9qZWN0Lm9yZyBbbWFpbHRvOndpbi1wdi1kZXZlbC0NCj4gYm91bmNlc0Bs
aXN0cy54ZW5wcm9qZWN0Lm9yZ10gT24gQmVoYWxmIE9mIFJhZmFsIFdvamR5bGENCj4gU2VudDog
MDQgTm92ZW1iZXIgMjAxNSAwNDozOA0KPiBUbzogd2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2pl
Y3Qub3JnDQo+IFN1YmplY3Q6IFt3aW4tcHYtZGV2ZWxdIFtQQVRDSCAyLzJdIEFkZCBhIHVzZXIg
bW9kZSBsaWJyYXJ5IHdyYXBwZXIgZm9yDQo+IFhFTklGQUNFIElPQ1RMcw0KPiANCj4gU2lnbmVk
LW9mZi1ieTogUmFmYWwgV29qZHlsYSA8b21lZ0BpbnZpc2libGV0aGluZ3NsYWIuY29tPg0KDQpG
b3Igc29tZSByZWFzb24gdGhpcyBnb3QgYmFzZTY0IGVuY29kZWQgb24gZ21hbmUgc28gSSBjYW4n
dCBlYXNpbHkgYXBwbHkuIExvb2tzIGxpa2UgeW91IGhhdmUgbm9uLWFzY2lpIGluIHRoZSB2Y3hw
cm9qIGZpbGVzOg0KDQorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCg0K
VmlzdWFsIFN0dWRpbyBkb2VzIHRoaXMgYnV0IGRvZXNuJ3Qgb2JqZWN0IHRvIGxvYWRpbmcgdGhl
IGZpbGVzIGlmIHlvdSByZW1vdmUgaXQuIFNvLCBjb3VsZCB5b3UgY2xlYW4gdGhhdCBvdXQgYW5k
IHJlLXNlbmQgdGhlIHBhdGNoPw0KDQpUaGFua3MsDQoNCiAgUGF1bA0KDQo+IC0tLQ0KPiAgaW5j
bHVkZS94ZW5jb250cm9sLmggICAgICAgICAgICAgICAgICAgICAgICAgfCAzNDIgKysrKysrKysr
Kw0KPiAgc3JjL3hlbmNvbnRyb2wveGVuY29udHJvbC5jICAgICAgICAgICAgICAgICAgfCA5MTUN
Cj4gKysrKysrKysrKysrKysrKysrKysrKysrKysrDQo+ICBzcmMveGVuY29udHJvbC94ZW5jb250
cm9sLnJjICAgICAgICAgICAgICAgICB8ICAyNCArDQo+ICBzcmMveGVuY29udHJvbC94ZW5jb250
cm9sX3ByaXZhdGUuaCAgICAgICAgICB8ICA0OSArKw0KPiAgdnMyMDEzL3hlbmNvbnRyb2wucHJv
cHMgICAgICAgICAgICAgICAgICAgICAgfCAgODQgKysrDQo+ICB2czIwMTMveGVuY29udHJvbC94
ZW5jb250cm9sLnZjeHByb2ogICAgICAgICB8ICA2MiArKw0KPiAgdnMyMDEzL3hlbmNvbnRyb2wv
eGVuY29udHJvbC52Y3hwcm9qLmZpbHRlcnMgfCAgMTMgKw0KPiAgdnMyMDEzL3hlbmlmYWNlLnNs
biAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMzggKysNCj4gIDggZmlsZXMgY2hhbmdlZCwg
MTUyNyBpbnNlcnRpb25zKCspDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS94ZW5jb250
cm9sLmgNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMveGVuY29udHJvbC94ZW5jb250cm9sLmMN
Cj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMveGVuY29udHJvbC94ZW5jb250cm9sLnJjDQo+ICBj
cmVhdGUgbW9kZSAxMDA2NDQgc3JjL3hlbmNvbnRyb2wveGVuY29udHJvbF9wcml2YXRlLmgNCj4g
IGNyZWF0ZSBtb2RlIDEwMDY0NCB2czIwMTMveGVuY29udHJvbC5wcm9wcw0KPiAgY3JlYXRlIG1v
ZGUgMTAwNjQ0IHZzMjAxMy94ZW5jb250cm9sL3hlbmNvbnRyb2wudmN4cHJvag0KPiAgY3JlYXRl
IG1vZGUgMTAwNjQ0IHZzMjAxMy94ZW5jb250cm9sL3hlbmNvbnRyb2wudmN4cHJvai5maWx0ZXJz
DQo+IA0KPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS94ZW5jb250cm9sLmggYi9pbmNsdWRlL3hlbmNv
bnRyb2wuaA0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwLi4wYTJmOGYy
DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvaW5jbHVkZS94ZW5jb250cm9sLmgNCj4gQEAgLTAs
MCArMSwzNDIgQEANCj4gKyNpZm5kZWYgX1hFTkNPTlRST0xfSF8NCj4gKyNkZWZpbmUgX1hFTkNP
TlRST0xfSF8NCj4gKw0KPiArI2luY2x1ZGUgPHdpbmRvd3MuaD4NCj4gKyNpbmNsdWRlIDx2YXJh
cmdzLmg+DQo+ICsjaW5jbHVkZSAieGVuaWZhY2VfaW9jdGxzLmgiDQo+ICsNCj4gKyNpZmRlZiBY
RU5DT05UUk9MX0VYUE9SVFMNCj4gKyMgICAgZGVmaW5lIFhFTkNPTlRST0xfQVBJIF9fZGVjbHNw
ZWMoZGxsZXhwb3J0KQ0KPiArI2Vsc2UNCj4gKyMgICAgZGVmaW5lIFhFTkNPTlRST0xfQVBJIF9f
ZGVjbHNwZWMoZGxsaW1wb3J0KQ0KPiArI2VuZGlmDQo+ICsNCj4gKyNpZmRlZiBfX2NwbHVzcGx1
cw0KPiArZXh0ZXJuICJDIiB7DQo+ICsjZW5kaWYNCj4gKw0KPiArLyohIFx0eXBlZGVmIFBYRU5D
T05UUk9MX0NPTlRFWFQNCj4gKyAgICBcYnJpZWYgTGlicmFyeSBoYW5kbGUgcmVwcmVzZW50aW5n
IGEgWGVuIEludGVyZmFjZSBzZXNzaW9uDQo+ICsqLw0KPiArc3RydWN0IF9YRU5DT05UUk9MX0NP
TlRFWFQ7DQo+ICt0eXBlZGVmIHN0cnVjdCBfWEVOQ09OVFJPTF9DT05URVhUICpQWEVOQ09OVFJP
TF9DT05URVhUOw0KPiArDQo+ICsvKiEgXHR5cGVkZWYgWEVOQ09OVFJPTF9MT0dfTEVWRUwNCj4g
KyAgICBcYnJpZWYgTG9nIGxldmVscyB1c2VkIGJ5IHRoZSBsaWJyYXJ5DQo+ICsqLw0KPiArdHlw
ZWRlZiBlbnVtDQo+ICtfWEVOQ09OVFJPTF9MT0dfTEVWRUwgew0KPiArICAgIFhMTF9FUlJPUiA9
IDEsDQo+ICsgICAgWExMX1dBUk5JTkcsDQo+ICsgICAgWExMX0lORk8sDQo+ICsgICAgWExMX0RF
QlVHLA0KPiArICAgIFhMTF9UUkFDRSwNCj4gK30gWEVOQ09OVFJPTF9MT0dfTEVWRUw7DQo+ICsN
Cj4gKy8qISBcdHlwZWRlZiBYRU5DT05UUk9MX0xPR0dFUg0KPiArICAgIFxicmllZiBDYWxsYmFj
ayBmb3IgcmVjZWl2aW5nIGRpYWdub3N0aWMgbWVzc2FnZXMgZnJvbSB0aGUgbGlicmFyeQ0KPiAr
Ki8NCj4gK3R5cGVkZWYgdm9pZA0KPiArWEVOQ09OVFJPTF9MT0dHRVIoDQo+ICsgICAgSU4gIFhF
TkNPTlRST0xfTE9HX0xFVkVMIExvZ0xldmVsLA0KPiArICAgIElOICBjb25zdCBDSEFSICpGdW5j
dGlvbiwNCj4gKyAgICBJTiAgY29uc3QgV0NIQVIgKk1lc3NhZ2UsDQo+ICsgICAgSU4gIHZhX2xp
c3QgQXJncw0KPiArICAgICk7DQo+ICsNCj4gKy8qISBcYnJpZWYgUmVnaXN0ZXIgYSBjYWxsYmFj
ayBmb3IgcmVjZWl2aW5nIGxpYnJhcnkncyBkaWFnbm9zdGljIG1lc3NhZ2VzDQo+ICsgICAgXHBh
cmFtIFhjIFhlbmNvbnRyb2wgaGFuZGxlIHJldHVybmVkIGJ5IFhjT3BlbigpDQo+ICsgICAgXHBh
cmFtIExvZ2dlciBDYWxsYmFjayB0byByZWdpc3Rlcg0KPiArKi8NCj4gK1hFTkNPTlRST0xfQVBJ
DQo+ICt2b2lkDQo+ICtYY1JlZ2lzdGVyTG9nZ2VyKA0KPiArICAgIElOICBQWEVOQ09OVFJPTF9D
T05URVhUIFhjLA0KPiArICAgIElOICBYRU5DT05UUk9MX0xPR0dFUiAqTG9nZ2VyDQo+ICsgICAg
KTsNCj4gKw0KPiArLyohIFxicmllZiBTZXQgbG9nIGxldmVsIHRocmVzaG9sZCBmb3IgbGlicmFy
eSdzIGRpYWdub3N0aWMgbWVzc2FnZXMNCj4gKyAgICBccGFyYW0gWGMgWGVuY29udHJvbCBoYW5k
bGUgcmV0dXJuZWQgYnkgWGNPcGVuKCkNCj4gKyAgICBccGFyYW0gTG9nTGV2ZWwgT25seSBtZXNz
YWdlcyB3aXRoIHRoaXMgbGV2ZWwgYW5kIGFib3ZlIHdpbGwgYmUgc2VudCB0bw0KPiB0aGUgbG9n
Z2VyIGNhbGxiYWNrDQo+ICsqLw0KPiArWEVOQ09OVFJPTF9BUEkNCj4gK3ZvaWQNCj4gK1hjU2V0
TG9nTGV2ZWwoDQo+ICsgICAgSU4gIFBYRU5DT05UUk9MX0NPTlRFWFQgWGMsDQo+ICsgICAgSU4g
IFhFTkNPTlRST0xfTE9HX0xFVkVMIExvZ0xldmVsDQo+ICsgICAgKTsNCj4gKw0KPiArLyohIFxi
cmllZiBPcGVuIHRoZSBYZW4gSW50ZXJmYWNlIGRldmljZQ0KPiArICAgIFxwYXJhbSBMb2dnZXIg
Q2FsbGJhY2sgZm9yIHJlY2VpdmluZyBsaWJyYXJ5J3MgZGlhZ25vc3RpYyBtZXNzYWdlcw0KPiAr
ICAgIFxwYXJhbSBYYyBYZW5jb250cm9sIGhhbmRsZSByZXByZXNlbnRpbmcgYSBYZW4gSW50ZXJm
YWNlIHNlc3Npb24NCj4gKyAgICBccmV0dXJuIEVycm9yIGNvZGUNCj4gKyovDQo+ICtYRU5DT05U
Uk9MX0FQSQ0KPiArRFdPUkQNCj4gK1hjT3BlbigNCj4gKyAgICBJTiAgWEVOQ09OVFJPTF9MT0dH
RVIgKkxvZ2dlciwNCj4gKyAgICBPVVQgUFhFTkNPTlRST0xfQ09OVEVYVCAqWGMNCj4gKyAgICAp
Ow0KPiArDQo+ICsvKiEgXGJyaWVmIENsb3NlIHRoZSBYZW4gSW50ZXJmYWNlIGRldmljZQ0KPiAr
ICAgIFxwYXJhbSBYYyBYZW5jb250cm9sIGhhbmRsZSByZXR1cm5lZCBieSBYY09wZW4oKQ0KPiAr
Ki8NCj4gK1hFTkNPTlRST0xfQVBJDQo+ICt2b2lkDQo+ICtYY0Nsb3NlKA0KPiArICAgIElOICBQ
WEVOQ09OVFJPTF9DT05URVhUIFhjDQo+ICsgICAgKTsNCj4gKw0KPiArLyohIFxicmllZiBPcGVu
IGFuIHVuYm91bmQgZXZlbnQgY2hhbm5lbA0KPiArICAgIFxwYXJhbSBYYyBYZW5jb250cm9sIGhh
bmRsZSByZXR1cm5lZCBieSBYY09wZW4oKQ0KPiArICAgIFxwYXJhbSBSZW1vdGVEb21haW4gSUQg
b2YgYSByZW1vdGUgZG9tYWluIHRoYXQgd2lsbCBiaW5kIHRoZSBjaGFubmVsDQo+ICsgICAgXHBh
cmFtIEV2ZW50IEhhbmRsZSB0byBhbiBldmVudCBvYmplY3QgdGhhdCB3aWxsIHJlY2VpdmUgZXZl
bnQgY2hhbm5lbA0KPiBub3RpZmljYXRpb25zDQo+ICsgICAgXHBhcmFtIE1hc2sgU2V0IHRvIFRS
VUUgaWYgdGhlIGV2ZW50IGNoYW5uZWwgc2hvdWxkIGJlIGluaXRpYWxseSBtYXNrZWQNCj4gKyAg
ICBccGFyYW0gTG9jYWxQb3J0IFBvcnQgbnVtYmVyIHRoYXQgaXMgYXNzaWduZWQgdG8gdGhlIGV2
ZW50IGNoYW5uZWwNCj4gKyAgICBccmV0dXJuIEVycm9yIGNvZGUNCj4gKyovDQo+ICtYRU5DT05U
Uk9MX0FQSQ0KPiArRFdPUkQNCj4gK1hjRXZ0Y2huQmluZFVuYm91bmQoDQo+ICsgICAgSU4gIFBY
RU5DT05UUk9MX0NPTlRFWFQgWGMsDQo+ICsgICAgSU4gIFVTSE9SVCBSZW1vdGVEb21haW4sDQo+
ICsgICAgSU4gIEhBTkRMRSBFdmVudCwNCj4gKyAgICBJTiAgQk9PTCBNYXNrLA0KPiArICAgIE9V
VCBVTE9ORyAqTG9jYWxQb3J0DQo+ICsgICAgKTsNCj4gKw0KPiArLyohIFxicmllZiBPcGVuIGFu
IGV2ZW50IGNoYW5uZWwgdGhhdCB3YXMgYWxyZWFkeSBib3VuZCBieSBhIHJlbW90ZQ0KPiBkb21h
aW4NCj4gKyAgICBccGFyYW0gWGMgWGVuY29udHJvbCBoYW5kbGUgcmV0dXJuZWQgYnkgWGNPcGVu
KCkNCj4gKyAgICBccGFyYW0gUmVtb3RlRG9tYWluIElEIG9mIGEgcmVtb3RlIGRvbWFpbiB0aGF0
IGhhcyBhbHJlYWR5IGJvdW5kDQo+IHRoZSBjaGFubmVsDQo+ICsgICAgXHBhcmFtIFJlbW90ZVBv
cnQgUG9ydCBudW1iZXIgdGhhdCBpcyBhc3NpZ25lZCB0byB0aGUgZXZlbnQgY2hhbm5lbCBpbg0K
PiB0aGUgXGEgUmVtb3RlRG9tYWluDQo+ICsgICAgXHBhcmFtIEV2ZW50IEhhbmRsZSB0byBhbiBl
dmVudCB0aGF0IHdpbGwgcmVjZWl2ZSBldmVudCBjaGFubmVsDQo+IG5vdGlmaWNhdGlvbnMNCj4g
KyAgICBccGFyYW0gTWFzayBTZXQgdG8gVFJVRSBpZiB0aGUgZXZlbnQgb2JqZWN0IGNoYW5uZWwg
c2hvdWxkIGJlIGluaXRpYWxseQ0KPiBtYXNrZWQNCj4gKyAgICBccGFyYW0gTG9jYWxQb3J0IFBv
cnQgbnVtYmVyIHRoYXQgaXMgYXNzaWduZWQgdG8gdGhlIGV2ZW50IGNoYW5uZWwNCj4gKyAgICBc
cmV0dXJuIEVycm9yIGNvZGUNCj4gKyovDQo+ICtYRU5DT05UUk9MX0FQSQ0KPiArRFdPUkQNCj4g
K1hjRXZ0Y2huQmluZEludGVyZG9tYWluKA0KPiArICAgIElOICBQWEVOQ09OVFJPTF9DT05URVhU
IFhjLA0KPiArICAgIElOICBVU0hPUlQgUmVtb3RlRG9tYWluLA0KPiArICAgIElOICBVTE9ORyBS
ZW1vdGVQb3J0LA0KPiArICAgIElOICBIQU5ETEUgRXZlbnQsDQo+ICsgICAgSU4gIEJPT0wgTWFz
aywNCj4gKyAgICBPVVQgVUxPTkcgKkxvY2FsUG9ydA0KPiArICAgICk7DQo+ICsNCj4gKy8qISBc
YnJpZWYgQ2xvc2UgYW4gZXZlbnQgY2hhbm5lbA0KPiArICAgIFxwYXJhbSBYYyBYZW5jb250cm9s
IGhhbmRsZSByZXR1cm5lZCBieSBYY09wZW4oKQ0KPiArICAgIFxwYXJhbSBMb2NhbFBvcnQgUG9y
dCBudW1iZXIgdGhhdCBpcyBhc3NpZ25lZCB0byB0aGUgZXZlbnQgY2hhbm5lbA0KPiArICAgIFxy
ZXR1cm4gRXJyb3IgY29kZQ0KPiArKi8NCj4gK1hFTkNPTlRST0xfQVBJDQo+ICtEV09SRA0KPiAr
WGNFdnRjaG5DbG9zZSgNCj4gKyAgICBJTiAgUFhFTkNPTlRST0xfQ09OVEVYVCBYYywNCj4gKyAg
ICBJTiAgVUxPTkcgTG9jYWxQb3J0DQo+ICsgICAgKTsNCj4gKw0KPiArLyohIFxicmllZiBOb3Rp
ZnkgdGhlIHJlbW90ZSBlbmQgb2YgYW4gZXZlbnQgY2hhbm5lbA0KPiArICAgIFxwYXJhbSBYYyBY
ZW5jb250cm9sIGhhbmRsZSByZXR1cm5lZCBieSBYY09wZW4oKQ0KPiArICAgIFxwYXJhbSBMb2Nh
bFBvcnQgUG9ydCBudW1iZXIgdGhhdCBpcyBhc3NpZ25lZCB0byB0aGUgZXZlbnQgY2hhbm5lbA0K
PiArICAgIFxyZXR1cm4gRXJyb3IgY29kZQ0KPiArKi8NCj4gK1hFTkNPTlRST0xfQVBJDQo+ICtE
V09SRA0KPiArWGNFdnRjaG5Ob3RpZnkoDQo+ICsgICAgSU4gIFBYRU5DT05UUk9MX0NPTlRFWFQg
WGMsDQo+ICsgICAgSU4gIFVMT05HIExvY2FsUG9ydA0KPiArICAgICk7DQo+ICsNCj4gKy8qISBc
YnJpZWYgVW5tYXNrIGFuIGV2ZW50IGNoYW5uZWwNCj4gKyAgICBccGFyYW0gWGMgWGVuY29udHJv
bCBoYW5kbGUgcmV0dXJuZWQgYnkgWGNPcGVuKCkNCj4gKyAgICBccGFyYW0gTG9jYWxQb3J0IFBv
cnQgbnVtYmVyIHRoYXQgaXMgYXNzaWduZWQgdG8gdGhlIGV2ZW50IGNoYW5uZWwNCj4gKyAgICBc
cmV0dXJuIEVycm9yIGNvZGUNCj4gKyovDQo+ICtYRU5DT05UUk9MX0FQSQ0KPiArRFdPUkQNCj4g
K1hjRXZ0Y2huVW5tYXNrKA0KPiArICAgIElOICBQWEVOQ09OVFJPTF9DT05URVhUIFhjLA0KPiAr
ICAgIElOICBVTE9ORyBMb2NhbFBvcnQNCj4gKyAgICApOw0KPiArDQo+ICsvKiEgXGJyaWVmIEdy
YW50IGEgXGEgUmVtb3RlRG9tYWluIHBlcm1pc3Npb24gdG8gYWNjZXNzIGxvY2FsIG1lbW9yeQ0K
PiBwYWdlcw0KPiArICAgIFxwYXJhbSBYYyBYZW5jb250cm9sIGhhbmRsZSByZXR1cm5lZCBieSBY
Y09wZW4oKQ0KPiArICAgIFxwYXJhbSBSZW1vdGVEb21haW4gSUQgb2YgYSByZW1vdGUgZG9tYWlu
IHRoYXQgaXMgYmVpbmcgZ3JhbnRlZA0KPiBhY2Nlc3MNCj4gKyAgICBccGFyYW0gTnVtYmVyUGFn
ZXMgTnVtYmVyIG9mIDRrIHBhZ2VzIHRvIGdyYW50IGFjY2VzcyB0bw0KPiArICAgIFxwYXJhbSBO
b3RpZnlPZmZzZXQgT2Zmc2V0IG9mIGEgYnl0ZSBpbiB0aGUgZ3JhbnRlZCByZWdpb24gdGhhdCB3
aWxsIGJlIHNldA0KPiB0byAwIHdoZW4gdGhlIGdyYW50IGlzIHJldm9rZWQNCj4gKyAgICBccGFy
YW0gTm90aWZ5UG9ydCBMb2NhbCBwb3J0IG51bWJlciBvZiBhbiBvcGVuIGV2ZW50IGNoYW5uZWwg
dGhhdCB3aWxsDQo+IGJlIG5vdGlmaWVkIHdoZW4gdGhlIGdyYW50IGlzIHJldm9rZWQNCj4gKyAg
ICBccGFyYW0gRmxhZ3MgR3JhbnQgb3B0aW9ucw0KPiArICAgIFxwYXJhbSBBZGRyZXNzIExvY2Fs
IHVzZXIgbW9kZSBhZGRyZXNzIG9mIHRoZSBncmFudGVkIG1lbW9yeSByZWdpb24NCj4gKyAgICBc
cGFyYW0gUmVmZXJlbmNlcyBBbiBhcnJheSBvZiBYZW4gZ3JhbnQgbnVtYmVycyBmb3IgZXZlcnkg
Z3JhbnRlZA0KPiBwYWdlDQo+ICsgICAgXHJldHVybiBFcnJvciBjb2RlDQo+ICsqLw0KPiArWEVO
Q09OVFJPTF9BUEkNCj4gK0RXT1JEDQo+ICtYY0dudHRhYlBlcm1pdEZvcmVpZ25BY2Nlc3MoDQo+
ICsgICAgSU4gIFBYRU5DT05UUk9MX0NPTlRFWFQgWGMsDQo+ICsgICAgSU4gIFVTSE9SVCBSZW1v
dGVEb21haW4sDQo+ICsgICAgSU4gIFVMT05HIE51bWJlclBhZ2VzLA0KPiArICAgIElOICBVTE9O
RyBOb3RpZnlPZmZzZXQsDQo+ICsgICAgSU4gIFVMT05HIE5vdGlmeVBvcnQsDQo+ICsgICAgSU4g
IFhFTklGQUNFX0dOVFRBQl9QQUdFX0ZMQUdTIEZsYWdzLA0KPiArICAgIE9VVCBQVk9JRCAqQWRk
cmVzcywNCj4gKyAgICBPVVQgVUxPTkcgKlJlZmVyZW5jZXMNCj4gKyAgICApOw0KPiArDQo+ICsv
KiEgXGJyaWVmIFJldm9rZSBhIGZvcmVpZ24gZG9tYWluIGFjY2VzcyB0byBwcmV2aW91c2x5IGdy
YW50ZWQgbWVtb3J5DQo+IHJlZ2lvbg0KPiArICAgIFxwYXJhbSBYYyBYZW5jb250cm9sIGhhbmRs
ZSByZXR1cm5lZCBieSBYY09wZW4oKQ0KPiArICAgIFxwYXJhbSBBZGRyZXNzIExvY2FsIHVzZXIg
bW9kZSBhZGRyZXNzIG9mIHRoZSBncmFudGVkIG1lbW9yeSByZWdpb24NCj4gKyAgICBccmV0dXJu
IEVycm9yIGNvZGUNCj4gKyovDQo+ICtYRU5DT05UUk9MX0FQSQ0KPiArRFdPUkQNCj4gK1hjR250
dGFiUmV2b2tlRm9yZWlnbkFjY2VzcygNCj4gKyAgICBJTiAgUFhFTkNPTlRST0xfQ09OVEVYVCBY
YywNCj4gKyAgICBJTiAgUFZPSUQgQWRkcmVzcw0KPiArICAgICk7DQo+ICsNCj4gKy8qISBcYnJp
ZWYgTWFwIGEgZm9yZWlnbiBtZW1vcnkgcmVnaW9uIGludG8gdGhlIGN1cnJlbnQgYWRkcmVzcyBz
cGFjZQ0KPiArICAgIFxwYXJhbSBYYyBYZW5jb250cm9sIGhhbmRsZSByZXR1cm5lZCBieSBYY09w
ZW4oKQ0KPiArICAgIFxwYXJhbSBSZW1vdGVEb21haW4gSUQgb2YgYSByZW1vdGUgZG9tYWluIHRo
YXQgaGFzIGdyYW50ZWQgYWNjZXNzIHRvDQo+IHRoZSBwYWdlcw0KPiArICAgIFxwYXJhbSBOdW1i
ZXJQYWdlcyBOdW1iZXIgb2YgNGsgcGFnZXMgdG8gbWFwDQo+ICsgICAgXHBhcmFtIFJlZmVyZW5j
ZXMgQW4gYXJyYXkgb2YgWGVuIGdyYW50IG51bWJlcnMgZm9yIGV2ZXJ5IGdyYW50ZWQNCj4gcGFn
ZQ0KPiArICAgIFxwYXJhbSBOb3RpZnlPZmZzZXQgT2Zmc2V0IG9mIGEgYnl0ZSBpbiB0aGUgbWFw
cGVkIHJlZ2lvbiB0aGF0IHdpbGwgYmUgc2V0DQo+IHRvIDAgd2hlbiB0aGUgcmVnaW9uIGlzIHVu
bWFwcGVkDQo+ICsgICAgXHBhcmFtIE5vdGlmeVBvcnQgTG9jYWwgcG9ydCBudW1iZXIgb2YgYW4g
b3BlbiBldmVudCBjaGFubmVsIHRoYXQgd2lsbA0KPiBiZSBub3RpZmllZCB3aGVuIHRoZSByZWdp
b24gaXMgdW5tYXBwZWQNCj4gKyAgICBccGFyYW0gRmxhZ3MgTWFwIG9wdGlvbnMNCj4gKyAgICBc
cGFyYW0gQWRkcmVzcyBMb2NhbCB1c2VyIG1vZGUgYWRkcmVzcyBvZiB0aGUgbWFwcGVkIG1lbW9y
eSByZWdpb24NCj4gKyAgICBccmV0dXJuIEVycm9yIGNvZGUNCj4gKyovDQo+ICtYRU5DT05UUk9M
X0FQSQ0KPiArRFdPUkQNCj4gK1hjR250dGFiTWFwRm9yZWlnblBhZ2VzKA0KPiArICAgIElOICBQ
WEVOQ09OVFJPTF9DT05URVhUIFhjLA0KPiArICAgIElOICBVU0hPUlQgUmVtb3RlRG9tYWluLA0K
PiArICAgIElOICBVTE9ORyBOdW1iZXJQYWdlcywNCj4gKyAgICBJTiAgUFVMT05HIFJlZmVyZW5j
ZXMsDQo+ICsgICAgSU4gIFVMT05HIE5vdGlmeU9mZnNldCwNCj4gKyAgICBJTiAgVUxPTkcgTm90
aWZ5UG9ydCwNCj4gKyAgICBJTiAgWEVOSUZBQ0VfR05UVEFCX1BBR0VfRkxBR1MgRmxhZ3MsDQo+
ICsgICAgT1VUIFBWT0lEICpBZGRyZXNzDQo+ICsgICAgKTsNCj4gKw0KPiArLyohIFxicmllZiBV
bm1hcCBhIGZvcmVpZ24gbWVtb3J5IHJlZ2lvbiBmcm9tIHRoZSBjdXJyZW50IGFkZHJlc3Mgc3Bh
Y2UNCj4gKyAgICBccGFyYW0gWGMgWGVuY29udHJvbCBoYW5kbGUgcmV0dXJuZWQgYnkgWGNPcGVu
KCkNCj4gKyAgICBccGFyYW0gQWRkcmVzcyBMb2NhbCB1c2VyIG1vZGUgYWRkcmVzcyBvZiB0aGUg
bWFwcGVkIG1lbW9yeSByZWdpb24NCj4gKyAgICBccmV0dXJuIEVycm9yIGNvZGUNCj4gKyovDQo+
ICtYRU5DT05UUk9MX0FQSQ0KPiArRFdPUkQNCj4gK1hjR250dGFiVW5tYXBGb3JlaWduUGFnZXMo
DQo+ICsgICAgSU4gIFBYRU5DT05UUk9MX0NPTlRFWFQgWGMsDQo+ICsgICAgSU4gIFBWT0lEIEFk
ZHJlc3MNCj4gKyAgICApOw0KPiArDQo+ICsvKiEgXGJyaWVmIFJlYWQgYSBYZW5TdG9yZSBrZXkN
Cj4gKyAgICBccGFyYW0gWGMgWGVuY29udHJvbCBoYW5kbGUgcmV0dXJuZWQgYnkgWGNPcGVuKCkN
Cj4gKyAgICBccGFyYW0gUGF0aCBQYXRoIHRvIHRoZSBrZXkNCj4gKyAgICBccGFyYW0gY2JWYWx1
ZSBTaXplIG9mIHRoZSBcYSBWYWx1ZSBidWZmZXIsIGluIGJ5dGVzDQo+ICsgICAgXHBhcmFtIFZh
bHVlIEJ1ZmZlciB0aGF0IHJlY2VpdmVzIHRoZSB2YWx1ZQ0KPiArICAgIFxyZXR1cm4gRXJyb3Ig
Y29kZQ0KPiArKi8NCj4gK1hFTkNPTlRST0xfQVBJDQo+ICtEV09SRA0KPiArWGNTdG9yZVJlYWQo
DQo+ICsgICAgSU4gIFBYRU5DT05UUk9MX0NPTlRFWFQgWGMsDQo+ICsgICAgSU4gIFBDSEFSIFBh
dGgsDQo+ICsgICAgSU4gIERXT1JEIGNiVmFsdWUsDQo+ICsgICAgT1VUIENIQVIgKlZhbHVlDQo+
ICsgICAgKTsNCj4gKw0KPiArLyohIFxicmllZiBXcml0ZSBhIHZhbHVlIHRvIGEgWGVuU3RvcmUg
a2V5DQo+ICsgICAgXHBhcmFtIFhjIFhlbmNvbnRyb2wgaGFuZGxlIHJldHVybmVkIGJ5IFhjT3Bl
bigpDQo+ICsgICAgXHBhcmFtIFBhdGggUGF0aCB0byB0aGUga2V5DQo+ICsgICAgXHBhcmFtIFZh
bHVlIFZhbHVlIHRvIHdyaXRlDQo+ICsgICAgXHJldHVybiBFcnJvciBjb2RlDQo+ICsqLw0KPiAr
WEVOQ09OVFJPTF9BUEkNCj4gK0RXT1JEDQo+ICtYY1N0b3JlV3JpdGUoDQo+ICsgICAgSU4gIFBY
RU5DT05UUk9MX0NPTlRFWFQgWGMsDQo+ICsgICAgSU4gIFBDSEFSIFBhdGgsDQo+ICsgICAgSU4g
IFBDSEFSIFZhbHVlDQo+ICsgICAgKTsNCj4gKw0KPiArLyohIFxicmllZiBFbnVtZXJhdGUgYWxs
IGltbWVkaWF0ZSBjaGlsZCBrZXlzIG9mIGEgWGVuU3RvcmUga2V5DQo+ICsgICAgXHBhcmFtIFhj
IFhlbmNvbnRyb2wgaGFuZGxlIHJldHVybmVkIGJ5IFhjT3BlbigpDQo+ICsgICAgXHBhcmFtIFBh
dGggUGF0aCB0byB0aGUga2V5DQo+ICsgICAgXHBhcmFtIGNiT3V0cHV0IFNpemUgb2YgdGhlIFxh
IE91dHB1dCBidWZmZXIsIGluIGJ5dGVzDQo+ICsgICAgXHBhcmFtIE91dHB1dCBCdWZmZXIgdGhh
dCByZWNlaXZlcyBhIE5VTC1zZXBhcmF0ZWQgY2hpbGQga2V5IG5hbWVzDQo+ICsgICAgXHJldHVy
biBFcnJvciBjb2RlDQo+ICsqLw0KPiArWEVOQ09OVFJPTF9BUEkNCj4gK0RXT1JEDQo+ICtYY1N0
b3JlRGlyZWN0b3J5KA0KPiArICAgIElOICBQWEVOQ09OVFJPTF9DT05URVhUIFhjLA0KPiArICAg
IElOICBQQ0hBUiBQYXRoLA0KPiArICAgIElOICBEV09SRCBjYk91dHB1dCwNCj4gKyAgICBPVVQg
Q0hBUiAqT3V0cHV0DQo+ICsgICAgKTsNCj4gKw0KPiArLyohIFxicmllZiBSZW1vdmUgYSBYZW5T
dG9yZSBrZXkNCj4gKyAgICBccGFyYW0gWGMgWGVuY29udHJvbCBoYW5kbGUgcmV0dXJuZWQgYnkg
WGNPcGVuKCkNCj4gKyAgICBccGFyYW0gUGF0aCBQYXRoIHRvIHRoZSBrZXkNCj4gKyAgICBccmV0
dXJuIEVycm9yIGNvZGUNCj4gKyovDQo+ICtYRU5DT05UUk9MX0FQSQ0KPiArRFdPUkQNCj4gK1hj
U3RvcmVSZW1vdmUoDQo+ICsgICAgSU4gIFBYRU5DT05UUk9MX0NPTlRFWFQgWGMsDQo+ICsgICAg
SU4gIFBDSEFSIFBhdGgNCj4gKyAgICApOw0KPiArDQo+ICsvKiEgXGJyaWVmIFNldCBwZXJtaXNz
aW9ucyBvZiBhIFhlblN0b3JlIGtleQ0KPiArICAgIFxwYXJhbSBYYyBYZW5jb250cm9sIGhhbmRs
ZSByZXR1cm5lZCBieSBYY09wZW4oKQ0KPiArICAgIFxwYXJhbSBQYXRoIFBhdGggdG8gdGhlIGtl
eQ0KPiArICAgIFxwYXJhbSBDb3VudCBOdW1iZXIgb2YgcGVybWlzc2lvbnMNCj4gKyAgICBccGFy
YW0gUGVybWlzc2lvbnMgQXJyYXkgb2YgcGVybWlzc2lvbnMgdG8gc2V0DQo+ICsgICAgXHJldHVy
biBFcnJvciBjb2RlDQo+ICsqLw0KPiArWEVOQ09OVFJPTF9BUEkNCj4gK0RXT1JEDQo+ICtYY1N0
b3JlU2V0UGVybWlzc2lvbnMoDQo+ICsgICAgSU4gIFBYRU5DT05UUk9MX0NPTlRFWFQgWGMsDQo+
ICsgICAgSU4gIFBDSEFSIFBhdGgsDQo+ICsgICAgSU4gIFVMT05HIENvdW50LA0KPiArICAgIElO
ICBQWEVOSUZBQ0VfU1RPUkVfUEVSTUlTU0lPTiBQZXJtaXNzaW9ucw0KPiArICAgICk7DQo+ICsN
Cj4gKy8qISBcYnJpZWYgQWRkIGEgWGVuU3RvcmUga2V5IHdhdGNoDQo+ICsgICAgXHBhcmFtIFhj
IFhlbmNvbnRyb2wgaGFuZGxlIHJldHVybmVkIGJ5IFhjT3BlbigpDQo+ICsgICAgXHBhcmFtIFBh
dGggUGF0aCB0byB0aGUga2V5IHRvIGJlIHdhdGNoZWQNCj4gKyAgICBccGFyYW0gRXZlbnQgSGFu
ZGxlIHRvIGFuIGV2ZW50IHRoYXQgd2lsbCBiZSBzaWduYWxlZCB3aGVuIHRoZSB3YXRjaA0KPiBm
aXJlcw0KPiArICAgIFxwYXJhbSBIYW5kbGUgQW4gb3BhcXVlIHZhbHVlIHJlcHJlc2VudGluZyB0
aGUgd2F0Y2gNCj4gKyAgICBccmV0dXJuIEVycm9yIGNvZGUNCj4gKyovDQo+ICtYRU5DT05UUk9M
X0FQSQ0KPiArRFdPUkQNCj4gK1hjU3RvcmVBZGRXYXRjaCgNCj4gKyAgICBJTiAgUFhFTkNPTlRS
T0xfQ09OVEVYVCBYYywNCj4gKyAgICBJTiAgUENIQVIgUGF0aCwNCj4gKyAgICBJTiAgSEFORExF
IEV2ZW50LA0KPiArICAgIE9VVCBQVk9JRCAqSGFuZGxlDQo+ICsgICAgKTsNCj4gKw0KPiArLyoh
IFxicmllZiBSZW1vdmUgYSBYZW5TdG9yZSB3YXRjaA0KPiArICAgIFxwYXJhbSBYYyBYZW5jb250
cm9sIGhhbmRsZSByZXR1cm5lZCBieSBYY09wZW4oKQ0KPiArICAgIFxwYXJhbSBIYW5kbGUgV2F0
Y2ggaGFuZGxlIHJldHVybmVkIGJ5IFhjU3RvcmVBZGRXYXRjaCgpDQo+ICsgICAgXHJldHVybiBF
cnJvciBjb2RlDQo+ICsqLw0KPiArWEVOQ09OVFJPTF9BUEkNCj4gK0RXT1JEDQo+ICtYY1N0b3Jl
UmVtb3ZlV2F0Y2goDQo+ICsgICAgSU4gIFBYRU5DT05UUk9MX0NPTlRFWFQgWGMsDQo+ICsgICAg
SU4gIFBWT0lEIEhhbmRsZQ0KPiArICAgICk7DQo+ICsNCj4gKyNpZmRlZiBfX2NwbHVzcGx1cw0K
PiArfQ0KPiArI2VuZGlmDQo+ICsNCj4gKyNlbmRpZiAvLyBfWEVOQ09OVFJPTF9IXw0KPiBkaWZm
IC0tZ2l0IGEvc3JjL3hlbmNvbnRyb2wveGVuY29udHJvbC5jIGIvc3JjL3hlbmNvbnRyb2wveGVu
Y29udHJvbC5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAuLjkyYWM5
ZDANCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9zcmMveGVuY29udHJvbC94ZW5jb250cm9sLmMN
Cj4gQEAgLTAsMCArMSw5MTUgQEANCj4gKyNkZWZpbmUgSU5JVEdVSUQNCj4gKyNpbmNsdWRlIDx3
aW5kb3dzLmg+DQo+ICsjaW5jbHVkZSA8c2V0dXBhcGkuaD4NCj4gKyNpbmNsdWRlIDxzdGRsaWIu
aD4NCj4gKyNpbmNsdWRlIDxhc3NlcnQuaD4NCj4gKw0KPiArI2luY2x1ZGUgInhlbmNvbnRyb2wu
aCINCj4gKyNpbmNsdWRlICJ4ZW5jb250cm9sX3ByaXZhdGUuaCINCj4gKw0KPiArQk9PTCBBUElF
TlRSWQ0KPiArRGxsTWFpbigNCj4gKyAgICBJTiAgSE1PRFVMRSBNb2R1bGUsDQo+ICsgICAgSU4g
IERXT1JEIFJlYXNvbkZvckNhbGwsDQo+ICsgICAgSU4gIExQVk9JRCBSZXNlcnZlZA0KPiArKQ0K
PiArew0KPiArICAgIHJldHVybiBUUlVFOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZA0KPiAr
X0xvZygNCj4gKyAgICBJTiAgWEVOQ09OVFJPTF9MT0dHRVIgKkxvZ2dlciwNCj4gKyAgICBJTiAg
WEVOQ09OVFJPTF9MT0dfTEVWRUwgTG9nTGV2ZWwsDQo+ICsgICAgSU4gIFhFTkNPTlRST0xfTE9H
X0xFVkVMIEN1cnJlbnRMb2dMZXZlbCwNCj4gKyAgICBJTiAgUENIQVIgRnVuY3Rpb24sDQo+ICsg
ICAgSU4gIFBXQ0hBUiBGb3JtYXQsDQo+ICsgICAgLi4uDQo+ICsgICAgKQ0KPiArew0KPiArICAg
IHZhX2xpc3QgQXJnczsNCj4gKyAgICBEV09SRCBMYXN0RXJyb3I7DQo+ICsNCj4gKyAgICBpZiAo
TG9nZ2VyID09IE5VTEwpDQo+ICsgICAgICAgIHJldHVybjsNCj4gKw0KPiArICAgIGlmIChMb2dM
ZXZlbCA+IEN1cnJlbnRMb2dMZXZlbCkNCj4gKyAgICAgICAgcmV0dXJuOw0KPiArDQo+ICsgICAg
TGFzdEVycm9yID0gR2V0TGFzdEVycm9yKCk7DQo+ICsgICAgdmFfc3RhcnQoQXJncywgRm9ybWF0
KTsNCj4gKyAgICBMb2dnZXIoTG9nTGV2ZWwsIEZ1bmN0aW9uLCBGb3JtYXQsIEFyZ3MpOw0KPiAr
ICAgIHZhX2VuZChBcmdzKTsNCj4gKyAgICBTZXRMYXN0RXJyb3IoTGFzdEVycm9yKTsNCj4gK30N
Cj4gKw0KPiArc3RhdGljIHZvaWQNCj4gK19Mb2dNdWx0aVN6KA0KPiArICAgIElOICBQWEVOQ09O
VFJPTF9DT05URVhUIFhjLA0KPiArICAgIElOICBQQ0hBUiBDYWxsZXIsDQo+ICsgICAgSU4gIFhF
TkNPTlRST0xfTE9HX0xFVkVMIExldmVsLA0KPiArICAgIElOICBQQ0hBUiBNdWx0aVN6DQo+ICsg
ICAgKQ0KPiArew0KPiArICAgIFBDSEFSIFB0cjsNCj4gKyAgICBVTE9ORyBMZW47DQo+ICsNCj4g
KyAgICBmb3IgKFB0ciA9IE11bHRpU3o7ICpQdHI7KSB7DQo+ICsgICAgICAgIExlbiA9IChVTE9O
RylzdHJsZW4oUHRyKTsNCj4gKyAgICAgICAgX0xvZyhYYy0+TG9nZ2VyLCBMZXZlbCwgWGMtPkxv
Z0xldmVsLCBDYWxsZXIsIEwiJVMiLCBQdHIpOw0KPiArICAgICAgICBQdHIgKz0gKExlbiArIDEp
Ow0KPiArICAgIH0NCj4gK30NCj4gKw0KPiArdm9pZA0KPiArWGNSZWdpc3RlckxvZ2dlcigNCj4g
KyAgICBJTiAgUFhFTkNPTlRST0xfQ09OVEVYVCBYYywNCj4gKyAgICBJTiAgWEVOQ09OVFJPTF9M
T0dHRVIgKkxvZ2dlcg0KPiArICAgICkNCj4gK3sNCj4gKyAgICBYYy0+TG9nZ2VyID0gTG9nZ2Vy
Ow0KPiArfQ0KPiArDQo+ICt2b2lkDQo+ICtYY1NldExvZ0xldmVsKA0KPiArICAgIElOICBQWEVO
Q09OVFJPTF9DT05URVhUIFhjLA0KPiArICAgIElOICBYRU5DT05UUk9MX0xPR19MRVZFTCBMb2dM
ZXZlbA0KPiArICAgICkNCj4gK3sNCj4gKyAgICBYYy0+TG9nTGV2ZWwgPSBMb2dMZXZlbDsNCj4g
K30NCj4gKw0KPiArRFdPUkQNCj4gK1hjT3BlbigNCj4gKyAgICBJTiAgWEVOQ09OVFJPTF9MT0dH
RVIgKkxvZ2dlciwNCj4gKyAgICBPVVQgUFhFTkNPTlRST0xfQ09OVEVYVCAqWGMNCj4gKyAgICAp
DQo+ICt7DQo+ICsgICAgSERFVklORk8gRGV2SW5mbzsNCj4gKyAgICBTUF9ERVZJQ0VfSU5URVJG
QUNFX0RBVEEgSW50ZXJmYWNlRGF0YTsNCj4gKyAgICBTUF9ERVZJQ0VfSU5URVJGQUNFX0RFVEFJ
TF9EQVRBICpEZXRhaWxEYXRhID0gTlVMTDsNCj4gKyAgICBEV09SRCBCdWZmZXJTaXplOw0KPiAr
ICAgIFBYRU5DT05UUk9MX0NPTlRFWFQgQ29udGV4dDsNCj4gKw0KPiArICAgIENvbnRleHQgPSBt
YWxsb2Moc2l6ZW9mKCpDb250ZXh0KSk7DQo+ICsgICAgaWYgKENvbnRleHQgPT0gTlVMTCkNCj4g
KyAgICAgICAgcmV0dXJuIEVSUk9SX05PVF9FTk9VR0hfTUVNT1JZOw0KPiArDQo+ICsgICAgQ29u
dGV4dC0+TG9nZ2VyID0gTG9nZ2VyOw0KPiArICAgIENvbnRleHQtPkxvZ0xldmVsID0gWExMX0lO
Rk87DQo+ICsgICAgQ29udGV4dC0+UmVxdWVzdElkID0gMTsNCj4gKyAgICBJbml0aWFsaXplTGlz
dEhlYWQoJkNvbnRleHQtPlJlcXVlc3RMaXN0KTsNCj4gKyAgICBJbml0aWFsaXplQ3JpdGljYWxT
ZWN0aW9uKCZDb250ZXh0LT5SZXF1ZXN0TGlzdExvY2spOw0KPiArDQo+ICsgICAgRGV2SW5mbyA9
IFNldHVwRGlHZXRDbGFzc0RldnMoJkdVSURfSU5URVJGQUNFX1hFTklGQUNFLCAwLCBOVUxMLA0K
PiBESUdDRl9QUkVTRU5UIHwgRElHQ0ZfREVWSUNFSU5URVJGQUNFKTsNCj4gKyAgICBpZiAoRGV2
SW5mbyA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgew0KPiArICAgICAgICBfTG9nKExvZ2dlciwg
WExMX0VSUk9SLCBDb250ZXh0LT5Mb2dMZXZlbCwgX19GVU5DVElPTl9fLA0KPiArICAgICAgICAg
ICAgIEwiWEVOSUZBQ0UgZGV2aWNlIGNsYXNzIGRvZXNuJ3QgZXhpc3QiKTsNCj4gKyAgICAgICAg
Z290byBmYWlsOw0KPiArICAgIH0NCj4gKw0KPiArICAgIEludGVyZmFjZURhdGEuY2JTaXplID0g
c2l6ZW9mKEludGVyZmFjZURhdGEpOw0KPiArICAgIGlmICghU2V0dXBEaUVudW1EZXZpY2VJbnRl
cmZhY2VzKERldkluZm8sIE5VTEwsDQo+ICZHVUlEX0lOVEVSRkFDRV9YRU5JRkFDRSwgMCwgJklu
dGVyZmFjZURhdGEpKSB7DQo+ICsgICAgICAgIF9Mb2coTG9nZ2VyLCBYTExfRVJST1IsIENvbnRl
eHQtPkxvZ0xldmVsLCBfX0ZVTkNUSU9OX18sDQo+ICsgICAgICAgICAgICAgTCJGYWlsZWQgdG8g
ZW51bWVyYXRlIFhFTklGQUNFIGRldmljZXMiKTsNCj4gKyAgICAgICAgZ290byBmYWlsOw0KPiAr
ICAgIH0NCj4gKw0KPiArICAgIFNldHVwRGlHZXREZXZpY2VJbnRlcmZhY2VEZXRhaWwoRGV2SW5m
bywgJkludGVyZmFjZURhdGEsIE5VTEwsIDAsDQo+ICZCdWZmZXJTaXplLCBOVUxMKTsNCj4gKyAg
ICBpZiAoR2V0TGFzdEVycm9yKCkgIT0gRVJST1JfSU5TVUZGSUNJRU5UX0JVRkZFUikgew0KPiAr
ICAgICAgICBfTG9nKExvZ2dlciwgWExMX0VSUk9SLCBDb250ZXh0LT5Mb2dMZXZlbCwgX19GVU5D
VElPTl9fLA0KPiArICAgICAgICAgICAgIEwiRmFpbGVkIHRvIGdldCBidWZmZXIgc2l6ZSBmb3Ig
ZGV2aWNlIGRldGFpbHMiKTsNCj4gKyAgICAgICAgZ290byBmYWlsOw0KPiArICAgIH0NCj4gKw0K
PiArICAgIC8vIFVzaW5nICdCdWZmZXJTaXplJyBmcm9tIGZhaWxlZCBmdW5jdGlvbiBjYWxsDQo+
ICsjcHJhZ21hIHdhcm5pbmcoc3VwcHJlc3M6IDYxMDIpDQo+ICsgICAgRGV0YWlsRGF0YSA9IChT
UF9ERVZJQ0VfSU5URVJGQUNFX0RFVEFJTF9EQVRBICopbWFsbG9jKEJ1ZmZlclNpemUpOw0KPiAr
ICAgIGlmICghRGV0YWlsRGF0YSkgew0KPiArICAgICAgICBTZXRMYXN0RXJyb3IoRVJST1JfT1VU
T0ZNRU1PUlkpOw0KPiArICAgICAgICBnb3RvIGZhaWw7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAg
RGV0YWlsRGF0YS0+Y2JTaXplID0gc2l6ZW9mKFNQX0RFVklDRV9JTlRFUkZBQ0VfREVUQUlMX0RB
VEEpOw0KPiArDQo+ICsgICAgaWYgKCFTZXR1cERpR2V0RGV2aWNlSW50ZXJmYWNlRGV0YWlsKERl
dkluZm8sICZJbnRlcmZhY2VEYXRhLA0KPiBEZXRhaWxEYXRhLCBCdWZmZXJTaXplLCBOVUxMLCBO
VUxMKSkgew0KPiArICAgICAgICBfTG9nKExvZ2dlciwgWExMX0VSUk9SLCBDb250ZXh0LT5Mb2dM
ZXZlbCwgX19GVU5DVElPTl9fLA0KPiArICAgICAgICAgICAgIEwiRmFpbGVkIHRvIGdldCBYRU5J
RkFDRSBkZXZpY2UgcGF0aCIpOw0KPiArICAgICAgICBnb3RvIGZhaWw7DQo+ICsgICAgfQ0KPiAr
DQo+ICsgICAgQ29udGV4dC0+WGVuSWZhY2UgPSBDcmVhdGVGaWxlKERldGFpbERhdGEtPkRldmlj
ZVBhdGgsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEVfR0VORVJJ
Q19SRUFEIHwgRklMRV9HRU5FUklDX1dSSVRFLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAwLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxM
LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPUEVOX0VYSVNUSU5HLA0K
PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFX0FUVFJJQlVURV9OT1JN
QUwgfCBGSUxFX0ZMQUdfT1ZFUkxBUFBFRCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTlVMTCk7DQo+ICsNCj4gKyAgICBpZiAoQ29udGV4dC0+WGVuSWZhY2UgPT0gSU5W
QUxJRF9IQU5ETEVfVkFMVUUpIHsNCj4gKyAgICAgICAgX0xvZyhMb2dnZXIsIFhMTF9FUlJPUiwg
Q29udGV4dC0+TG9nTGV2ZWwsIF9fRlVOQ1RJT05fXywNCj4gKyAgICAgICAgICAgICBMIkZhaWxl
ZCB0byBvcGVuIFhFTklGQUNFIGRldmljZSwgcGF0aDogJXMiLCBEZXRhaWxEYXRhLQ0KPiA+RGV2
aWNlUGF0aCk7DQo+ICsgICAgICAgIGdvdG8gZmFpbDsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBf
TG9nKExvZ2dlciwgWExMX0VSUk9SLCBDb250ZXh0LT5Mb2dMZXZlbCwgX19GVU5DVElPTl9fLA0K
PiArICAgICAgICAgTCJYZW5JZmFjZSBoYW5kbGU6ICVwIiwgQ29udGV4dC0+WGVuSWZhY2UpOw0K
PiArDQo+ICsgICAgZnJlZShEZXRhaWxEYXRhKTsNCj4gKyAgICAqWGMgPSBDb250ZXh0Ow0KPiAr
ICAgIHJldHVybiBFUlJPUl9TVUNDRVNTOw0KPiArDQo+ICtmYWlsOg0KPiArICAgIF9Mb2coTG9n
Z2VyLCBYTExfRVJST1IsIENvbnRleHQtPkxvZ0xldmVsLCBfX0ZVTkNUSU9OX18sDQo+ICsgICAg
ICAgICBMIkVycm9yOiAweCV4IiwgR2V0TGFzdEVycm9yKCkpOw0KPiArDQo+ICsgICAgZnJlZShE
ZXRhaWxEYXRhKTsNCj4gKyAgICByZXR1cm4gR2V0TGFzdEVycm9yKCk7DQo+ICt9DQo+ICsNCj4g
K3ZvaWQNCj4gK1hjQ2xvc2UoDQo+ICsgICAgSU4gIFBYRU5DT05UUk9MX0NPTlRFWFQgWGMNCj4g
KyAgICApDQo+ICt7DQo+ICsgICAgQ2xvc2VIYW5kbGUoWGMtPlhlbklmYWNlKTsNCj4gKyAgICBE
ZWxldGVDcml0aWNhbFNlY3Rpb24oJlhjLT5SZXF1ZXN0TGlzdExvY2spOw0KPiArICAgIGZyZWUo
WGMpOw0KPiArfQ0KPiArDQo+ICtEV09SRA0KPiArWGNFdnRjaG5CaW5kVW5ib3VuZCgNCj4gKyAg
ICBJTiAgUFhFTkNPTlRST0xfQ09OVEVYVCBYYywNCj4gKyAgICBJTiAgVVNIT1JUIFJlbW90ZURv
bWFpbiwNCj4gKyAgICBJTiAgSEFORExFIEV2ZW50LA0KPiArICAgIElOICBCT09MIE1hc2ssDQo+
ICsgICAgT1VUIFVMT05HICpMb2NhbFBvcnQNCj4gKyAgICApDQo+ICt7DQo+ICsgICAgWEVOSUZB
Q0VfRVZUQ0hOX0JJTkRfVU5CT1VORF9JTiBJbjsNCj4gKyAgICBYRU5JRkFDRV9FVlRDSE5fQklO
RF9VTkJPVU5EX09VVCBPdXQ7DQo+ICsgICAgRFdPUkQgUmV0dXJuZWQ7DQo+ICsgICAgQk9PTCBT
dWNjZXNzOw0KPiArDQo+ICsgICAgSW4uUmVtb3RlRG9tYWluID0gUmVtb3RlRG9tYWluOw0KPiAr
ICAgIEluLkV2ZW50ID0gRXZlbnQ7DQo+ICsgICAgSW4uTWFzayA9ICEhTWFzazsNCj4gKw0KPiAr
ICAgIExvZyhYTExfREVCVUcsIEwiUmVtb3RlRG9tYWluOiAlZCwgRXZlbnQ6ICVwLCBNYXNrOiAl
ZCIsDQo+IFJlbW90ZURvbWFpbiwgRXZlbnQsIE1hc2spOw0KPiArICAgIFN1Y2Nlc3MgPSBEZXZp
Y2VJb0NvbnRyb2woWGMtPlhlbklmYWNlLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSU9DVExfWEVOSUZBQ0VfRVZUQ0hOX0JJTkRfVU5CT1VORCwNCj4gKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZJbiwgc2l6ZW9mKEluKSwNCj4gKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICZPdXQsIHNpemVvZihPdXQpLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJlJldHVybmVkLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7
DQo+ICsNCj4gKyAgICBpZiAoIVN1Y2Nlc3MpIHsNCj4gKyAgICAgICAgTG9nKFhMTF9FUlJPUiwg
TCJJT0NUTF9YRU5JRkFDRV9FVlRDSE5fQklORF9VTkJPVU5EX1BPUlQNCj4gZmFpbGVkIik7DQo+
ICsgICAgICAgIGdvdG8gZmFpbDsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICAqTG9jYWxQb3J0ID0g
T3V0LkxvY2FsUG9ydDsNCj4gKyAgICBMb2coWExMX0RFQlVHLCBMIkxvY2FsUG9ydDogJWx1Iiwg
KkxvY2FsUG9ydCk7DQo+ICsNCj4gKyAgICByZXR1cm4gRVJST1JfU1VDQ0VTUzsNCj4gKw0KPiAr
ZmFpbDoNCj4gKyAgICBMb2coWExMX0VSUk9SLCBMIkVycm9yOiAweCV4IiwgR2V0TGFzdEVycm9y
KCkpOw0KPiArICAgIHJldHVybiBHZXRMYXN0RXJyb3IoKTsNCj4gK30NCj4gKw0KPiArRFdPUkQN
Cj4gK1hjRXZ0Y2huQmluZEludGVyZG9tYWluKA0KPiArICAgIElOICBQWEVOQ09OVFJPTF9DT05U
RVhUIFhjLA0KPiArICAgIElOICBVU0hPUlQgUmVtb3RlRG9tYWluLA0KPiArICAgIElOICBVTE9O
RyBSZW1vdGVQb3J0LA0KPiArICAgIElOICBIQU5ETEUgRXZlbnQsDQo+ICsgICAgSU4gIEJPT0wg
TWFzaywNCj4gKyAgICBPVVQgVUxPTkcgKkxvY2FsUG9ydA0KPiArICAgICkNCj4gK3sNCj4gKyAg
ICBYRU5JRkFDRV9FVlRDSE5fQklORF9JTlRFUkRPTUFJTl9JTiBJbjsNCj4gKyAgICBYRU5JRkFD
RV9FVlRDSE5fQklORF9JTlRFUkRPTUFJTl9PVVQgT3V0Ow0KPiArICAgIERXT1JEIFJldHVybmVk
Ow0KPiArICAgIEJPT0wgU3VjY2VzczsNCj4gKw0KPiArICAgIEluLlJlbW90ZURvbWFpbiA9IFJl
bW90ZURvbWFpbjsNCj4gKyAgICBJbi5SZW1vdGVQb3J0ID0gUmVtb3RlUG9ydDsNCj4gKyAgICBJ
bi5FdmVudCA9IEV2ZW50Ow0KPiArICAgIEluLk1hc2sgPSAhIU1hc2s7DQo+ICsNCj4gKyAgICBM
b2coWExMX0RFQlVHLCBMIlJlbW90ZURvbWFpbjogJWQsIFJlbW90ZVBvcnQgJWx1LCBFdmVudDog
JXAsDQo+IE1hc2s6ICVkIiwNCj4gKyAgICAgICAgUmVtb3RlRG9tYWluLCBSZW1vdGVQb3J0LCBF
dmVudCwgTWFzayk7DQo+ICsgICAgU3VjY2VzcyA9IERldmljZUlvQ29udHJvbChYYy0+WGVuSWZh
Y2UsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJT0NUTF9YRU5JRkFDRV9FVlRD
SE5fQklORF9JTlRFUkRPTUFJTiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZJ
biwgc2l6ZW9mKEluKSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZPdXQsIHNp
emVvZihPdXQpLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlJldHVybmVkLA0K
PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7DQo+ICsNCj4gKyAgICBpZiAo
IVN1Y2Nlc3MpIHsNCj4gKyAgICAgICAgTG9nKFhMTF9FUlJPUiwgTCJJT0NUTF9YRU5JRkFDRV9F
VlRDSE5fQklORF9JTlRFUkRPTUFJTg0KPiBmYWlsZWQiKTsNCj4gKyAgICAgICAgZ290byBmYWls
Ow0KPiArICAgIH0NCj4gKw0KPiArICAgICpMb2NhbFBvcnQgPSBPdXQuTG9jYWxQb3J0Ow0KPiAr
ICAgIExvZyhYTExfREVCVUcsIEwiTG9jYWxQb3J0OiAlbHUiLCAqTG9jYWxQb3J0KTsNCj4gKw0K
PiArICAgIHJldHVybiBFUlJPUl9TVUNDRVNTOw0KPiArDQo+ICtmYWlsOg0KPiArICAgIExvZyhY
TExfRVJST1IsIEwiRXJyb3I6IDB4JXgiLCBHZXRMYXN0RXJyb3IoKSk7DQo+ICsgICAgcmV0dXJu
IEdldExhc3RFcnJvcigpOw0KPiArfQ0KPiArDQo+ICtEV09SRA0KPiArWGNFdnRjaG5DbG9zZSgN
Cj4gKyAgICBJTiAgUFhFTkNPTlRST0xfQ09OVEVYVCBYYywNCj4gKyAgICBJTiAgVUxPTkcgTG9j
YWxQb3J0DQo+ICsgICAgKQ0KPiArew0KPiArICAgIFhFTklGQUNFX0VWVENITl9DTE9TRV9JTiBJ
bjsNCj4gKyAgICBEV09SRCBSZXR1cm5lZDsNCj4gKyAgICBCT09MIFN1Y2Nlc3M7DQo+ICsNCj4g
KyAgICBJbi5Mb2NhbFBvcnQgPSBMb2NhbFBvcnQ7DQo+ICsNCj4gKyAgICBMb2coWExMX0RFQlVH
LCBMIkxvY2FsUG9ydDogJWx1IiwgTG9jYWxQb3J0KTsNCj4gKyAgICBTdWNjZXNzID0gRGV2aWNl
SW9Db250cm9sKFhjLT5YZW5JZmFjZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IElPQ1RMX1hFTklGQUNFX0VWVENITl9DTE9TRSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZJbiwgc2l6ZW9mKEluKSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE5VTEwsIDAsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUmV0dXJuZWQsDQo+
ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsNCj4gKw0KPiArICAgIGlmICgh
U3VjY2Vzcykgew0KPiArICAgICAgICBMb2coWExMX0VSUk9SLCBMIklPQ1RMX1hFTklGQUNFX0VW
VENITl9DTE9TRSBmYWlsZWQiKTsNCj4gKyAgICAgICAgZ290byBmYWlsOw0KPiArICAgIH0NCj4g
Kw0KPiArICAgIHJldHVybiBFUlJPUl9TVUNDRVNTOw0KPiArDQo+ICtmYWlsOg0KPiArICAgIExv
ZyhYTExfRVJST1IsIEwiRXJyb3I6IDB4JXgiLCBHZXRMYXN0RXJyb3IoKSk7DQo+ICsgICAgcmV0
dXJuIEdldExhc3RFcnJvcigpOw0KPiArfQ0KPiArDQo+ICtEV09SRA0KPiArWGNFdnRjaG5Ob3Rp
ZnkoDQo+ICsgICAgSU4gIFBYRU5DT05UUk9MX0NPTlRFWFQgWGMsDQo+ICsgICAgSU4gIFVMT05H
IExvY2FsUG9ydA0KPiArICAgICkNCj4gK3sNCj4gKyAgICBYRU5JRkFDRV9FVlRDSE5fTk9USUZZ
X0lOIEluOw0KPiArICAgIERXT1JEIFJldHVybmVkOw0KPiArICAgIEJPT0wgU3VjY2VzczsNCj4g
Kw0KPiArICAgIEluLkxvY2FsUG9ydCA9IExvY2FsUG9ydDsNCj4gKw0KPiArICAgIExvZyhYTExf
REVCVUcsIEwiTG9jYWxQb3J0OiAlbHUiLCBMb2NhbFBvcnQpOw0KPiArICAgIFN1Y2Nlc3MgPSBE
ZXZpY2VJb0NvbnRyb2woWGMtPlhlbklmYWNlLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgSU9DVExfWEVOSUZBQ0VfRVZUQ0hOX05PVElGWSwNCj4gKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZJbiwgc2l6ZW9mKEluKSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE5VTEwsIDAsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUmV0dXJu
ZWQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsNCj4gKw0KPiArICAg
IGlmICghU3VjY2Vzcykgew0KPiArICAgICAgICBMb2coWExMX0VSUk9SLCBMIklPQ1RMX1hFTklG
QUNFX0VWVENITl9OT1RJRlkgZmFpbGVkIik7DQo+ICsgICAgICAgIGdvdG8gZmFpbDsNCj4gKyAg
ICB9DQo+ICsNCj4gKyAgICByZXR1cm4gRVJST1JfU1VDQ0VTUzsNCj4gKw0KPiArZmFpbDoNCj4g
KyAgICBMb2coWExMX0VSUk9SLCBMIkVycm9yOiAweCV4IiwgR2V0TGFzdEVycm9yKCkpOw0KPiAr
ICAgIHJldHVybiBHZXRMYXN0RXJyb3IoKTsNCj4gK30NCj4gKw0KPiArRFdPUkQNCj4gK1hjRXZ0
Y2huVW5tYXNrKA0KPiArICAgIElOICBQWEVOQ09OVFJPTF9DT05URVhUIFhjLA0KPiArICAgIElO
ICBVTE9ORyBMb2NhbFBvcnQNCj4gKyAgICApDQo+ICt7DQo+ICsgICAgWEVOSUZBQ0VfRVZUQ0hO
X1VOTUFTS19JTiBJbjsNCj4gKyAgICBEV09SRCBSZXR1cm5lZDsNCj4gKyAgICBCT09MIFN1Y2Nl
c3M7DQo+ICsNCj4gKyAgICBJbi5Mb2NhbFBvcnQgPSBMb2NhbFBvcnQ7DQo+ICsNCj4gKyAgICBM
b2coWExMX0RFQlVHLCBMIkxvY2FsUG9ydDogJWx1IiwgTG9jYWxQb3J0KTsNCj4gKyAgICBTdWNj
ZXNzID0gRGV2aWNlSW9Db250cm9sKFhjLT5YZW5JZmFjZSwNCj4gKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIElPQ1RMX1hFTklGQUNFX0VWVENITl9VTk1BU0ssDQo+ICsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmSW4sIHNpemVvZihJbiksDQo+ICsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBOVUxMLCAwLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JlJldHVybmVkLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7DQo+ICsN
Cj4gKyAgICBpZiAoIVN1Y2Nlc3MpIHsNCj4gKyAgICAgICAgTG9nKFhMTF9FUlJPUiwgTCJJT0NU
TF9YRU5JRkFDRV9FVlRDSE5fVU5NQVNLIGZhaWxlZCIpOw0KPiArICAgICAgICBnb3RvIGZhaWw7
DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgcmV0dXJuIEVSUk9SX1NVQ0NFU1M7DQo+ICsNCj4gK2Zh
aWw6DQo+ICsgICAgTG9nKFhMTF9FUlJPUiwgTCJFcnJvcjogMHgleCIsIEdldExhc3RFcnJvcigp
KTsNCj4gKyAgICByZXR1cm4gR2V0TGFzdEVycm9yKCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBQ
WEVOQ09OVFJPTF9HTlRUQUJfUkVRVUVTVA0KPiArRmluZFJlcXVlc3QoDQo+ICsgICAgSU4gIFBY
RU5DT05UUk9MX0NPTlRFWFQgWGMsDQo+ICsgICAgSU4gIFBWT0lEIEFkZHJlc3MNCj4gKyAgICAp
DQo+ICt7DQo+ICsgICAgUExJU1RfRU5UUlkgRW50cnk7DQo+ICsgICAgUFhFTkNPTlRST0xfR05U
VEFCX1JFUVVFU1QgUmV0dXJuUmVxdWVzdCA9IE5VTEw7DQo+ICsNCj4gKyAgICBFbnRlckNyaXRp
Y2FsU2VjdGlvbigmWGMtPlJlcXVlc3RMaXN0TG9jayk7DQo+ICsgICAgRW50cnkgPSBYYy0+UmVx
dWVzdExpc3QuRmxpbms7DQo+ICsgICAgd2hpbGUgKEVudHJ5ICE9ICZYYy0+UmVxdWVzdExpc3Qp
IHsNCj4gKyAgICAgICAgUFhFTkNPTlRST0xfR05UVEFCX1JFUVVFU1QgUmVxdWVzdCA9DQo+IENP
TlRBSU5JTkdfUkVDT1JEKEVudHJ5LCBYRU5DT05UUk9MX0dOVFRBQl9SRVFVRVNULCBMaXN0RW50
cnkpOw0KPiArDQo+ICsgICAgICAgIGlmIChSZXF1ZXN0LT5BZGRyZXNzID09IEFkZHJlc3MpIHsN
Cj4gKyAgICAgICAgICAgIFJldHVyblJlcXVlc3QgPSBSZXF1ZXN0Ow0KPiArICAgICAgICAgICAg
YnJlYWs7DQo+ICsgICAgICAgIH0NCj4gKw0KPiArICAgICAgICBFbnRyeSA9IEVudHJ5LT5GbGlu
azsNCj4gKyAgICB9DQo+ICsgICAgTGVhdmVDcml0aWNhbFNlY3Rpb24oJlhjLT5SZXF1ZXN0TGlz
dExvY2spOw0KPiArDQo+ICsgICAgcmV0dXJuIFJldHVyblJlcXVlc3Q7DQo+ICt9DQo+ICsNCj4g
K0RXT1JEDQo+ICtYY0dudHRhYlBlcm1pdEZvcmVpZ25BY2Nlc3MoDQo+ICsgICAgSU4gIFBYRU5D
T05UUk9MX0NPTlRFWFQgWGMsDQo+ICsgICAgSU4gIFVTSE9SVCBSZW1vdGVEb21haW4sDQo+ICsg
ICAgSU4gIFVMT05HIE51bWJlclBhZ2VzLA0KPiArICAgIElOICBVTE9ORyBOb3RpZnlPZmZzZXQs
DQo+ICsgICAgSU4gIFVMT05HIE5vdGlmeVBvcnQsDQo+ICsgICAgSU4gIFhFTklGQUNFX0dOVFRB
Ql9QQUdFX0ZMQUdTIEZsYWdzLA0KPiArICAgIE9VVCBQVk9JRCAqQWRkcmVzcywNCj4gKyAgICBP
VVQgVUxPTkcgKlJlZmVyZW5jZXMNCj4gKyAgICApDQo+ICt7DQo+ICsgICAgWEVOSUZBQ0VfR05U
VEFCX1BFUk1JVF9GT1JFSUdOX0FDQ0VTU19JTiBJbjsNCj4gKyAgICBYRU5JRkFDRV9HTlRUQUJf
UEVSTUlUX0ZPUkVJR05fQUNDRVNTX09VVCAqT3V0Ow0KPiArICAgIFBYRU5DT05UUk9MX0dOVFRB
Ql9SRVFVRVNUIFJlcXVlc3Q7DQo+ICsgICAgRFdPUkQgUmV0dXJuZWQsIFNpemU7DQo+ICsgICAg
Qk9PTCBTdWNjZXNzOw0KPiArICAgIERXT1JEIFN0YXR1czsNCj4gKw0KPiArICAgIC8vIGxvY2sg
dGhlIHdob2xlIG9wZXJhdGlvbiB0byBub3QgZ2VuZXJhdGUgZHVwbGljYXRlIElEcw0KPiArICAg
IEVudGVyQ3JpdGljYWxTZWN0aW9uKCZYYy0+UmVxdWVzdExpc3RMb2NrKTsNCj4gKw0KPiArICAg
IEluLlJlcXVlc3RJZCA9IFhjLT5SZXF1ZXN0SWQ7DQo+ICsgICAgSW4uUmVtb3RlRG9tYWluID0g
UmVtb3RlRG9tYWluOw0KPiArICAgIEluLk51bWJlclBhZ2VzID0gTnVtYmVyUGFnZXM7DQo+ICsg
ICAgSW4uTm90aWZ5T2Zmc2V0ID0gTm90aWZ5T2Zmc2V0Ow0KPiArICAgIEluLk5vdGlmeVBvcnQg
PSBOb3RpZnlQb3J0Ow0KPiArICAgIEluLkZsYWdzID0gRmxhZ3M7DQo+ICsNCj4gKyAgICBTaXpl
ID0NCj4gKFVMT05HKUZJRUxEX09GRlNFVChYRU5JRkFDRV9HTlRUQUJfUEVSTUlUX0ZPUkVJR05f
QUNDRVNTX09VDQo+IFQsIFJlZmVyZW5jZXNbTnVtYmVyUGFnZXNdKTsNCj4gKyAgICBPdXQgPSBt
YWxsb2MoU2l6ZSk7DQo+ICsgICAgUmVxdWVzdCA9IG1hbGxvYyhzaXplb2YoKlJlcXVlc3QpKTsN
Cj4gKw0KPiArICAgIFN0YXR1cyA9IEVSUk9SX09VVE9GTUVNT1JZOw0KPiArICAgIGlmICghUmVx
dWVzdCB8fCAhT3V0KQ0KPiArICAgICAgICBnb3RvIGZhaWw7DQo+ICsNCj4gKyAgICBaZXJvTWVt
b3J5KFJlcXVlc3QsIHNpemVvZigqUmVxdWVzdCkpOw0KPiArICAgIFJlcXVlc3QtPklkID0gSW4u
UmVxdWVzdElkOw0KPiArDQo+ICsgICAgTG9nKFhMTF9ERUJVRywgTCJJZCAlbHUsIFJlbW90ZURv
bWFpbjogJWQsIE51bWJlclBhZ2VzOiAlbHUsDQo+IE5vdGlmeU9mZnNldDogMHgleCwgTm90aWZ5
UG9ydDogJWx1LCBGbGFnczogMHgleCIsDQo+ICsgICAgICAgIEluLlJlcXVlc3RJZCwgUmVtb3Rl
RG9tYWluLCBOdW1iZXJQYWdlcywgTm90aWZ5T2Zmc2V0LCBOb3RpZnlQb3J0LA0KPiBGbGFncyk7
DQo+ICsNCj4gKyAgICBTdWNjZXNzID0gRGV2aWNlSW9Db250cm9sKFhjLT5YZW5JZmFjZSwNCj4g
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElPQ1RMX1hFTklGQUNFX0dOVFRBQl9QRVJN
SVRfRk9SRUlHTl9BQ0NFU1MsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSW4s
IHNpemVvZihJbiksDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXQsIFNpemUs
DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUmV0dXJuZWQsDQo+ICsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmUmVxdWVzdC0+T3ZlcmxhcHBlZCk7DQo+ICsNCj4gKyAg
ICBTdGF0dXMgPSBHZXRMYXN0RXJyb3IoKTsNCj4gKyAgICAvLyB0aGlzIElPQ1RMIGlzIGV4cGVj
dGVkIHRvIGJlIHBlbmRpbmcgb24gc3VjY2Vzcw0KPiArICAgIGlmICghU3VjY2Vzcykgew0KPiAr
ICAgICAgICBpZiAoU3RhdHVzICE9IEVSUk9SX0lPX1BFTkRJTkcpIHsNCj4gKyAgICAgICAgICAg
IExvZyhYTExfRVJST1IsIEwiSU9DVExfWEVOSUZBQ0VfR05UVEFCX0dSQU5UX1BBR0VTDQo+IGZh
aWxlZCIpOw0KPiArICAgICAgICAgICAgZ290byBmYWlsOw0KPiArICAgICAgICB9DQo+ICsgICAg
fSBlbHNlIHsNCj4gKyAgICAgICAgTG9nKFhMTF9FUlJPUiwgTCJJT0NUTF9YRU5JRkFDRV9HTlRU
QUJfR1JBTlRfUEFHRVMgbm90DQo+IHBlbmRpbmciKTsNCj4gKyAgICAgICAgU3RhdHVzID0gRVJS
T1JfVU5JREVOVElGSUVEX0VSUk9SOw0KPiArICAgICAgICBnb3RvIGZhaWw7DQo+ICsgICAgfQ0K
PiArDQo+ICsgICAgUmVxdWVzdC0+QWRkcmVzcyA9IE91dC0+QWRkcmVzczsNCj4gKw0KPiArICAg
IEluc2VydFRhaWxMaXN0KCZYYy0+UmVxdWVzdExpc3QsICZSZXF1ZXN0LT5MaXN0RW50cnkpOw0K
PiArICAgIFhjLT5SZXF1ZXN0SWQrKzsNCj4gKyAgICBMZWF2ZUNyaXRpY2FsU2VjdGlvbigmWGMt
PlJlcXVlc3RMaXN0TG9jayk7DQo+ICsNCj4gKyAgICAqQWRkcmVzcyA9IE91dC0+QWRkcmVzczsN
Cj4gKyAgICBtZW1jcHkoUmVmZXJlbmNlcywgJk91dC0+UmVmZXJlbmNlcywgTnVtYmVyUGFnZXMg
Kg0KPiBzaXplb2YoVUxPTkcpKTsNCj4gKyAgICBMb2coWExMX0RFQlVHLCBMIkFkZHJlc3M6ICVw
IiwgKkFkZHJlc3MpOw0KPiArICAgIGZvciAoVUxPTkcgaSA9IDA7IGkgPCBOdW1iZXJQYWdlczsg
aSsrKQ0KPiArICAgICAgICBMb2coWExMX0RFQlVHLCBMIkdyYW50IHJlZlslbHVdOiAlbHUiLCBp
LCBPdXQtPlJlZmVyZW5jZXNbaV0pOw0KPiArDQo+ICsgICAgZnJlZShPdXQpOw0KPiArICAgIHJl
dHVybiBFUlJPUl9TVUNDRVNTOw0KPiArDQo+ICtmYWlsOg0KPiArICAgIExlYXZlQ3JpdGljYWxT
ZWN0aW9uKCZYYy0+UmVxdWVzdExpc3RMb2NrKTsNCj4gKyAgICBMb2coWExMX0VSUk9SLCBMIkVy
cm9yOiAweCV4IiwgU3RhdHVzKTsNCj4gKyAgICBmcmVlKE91dCk7DQo+ICsgICAgZnJlZShSZXF1
ZXN0KTsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICtEV09SRA0KPiArWGNH
bnR0YWJSZXZva2VGb3JlaWduQWNjZXNzKA0KPiArICAgIElOICBQWEVOQ09OVFJPTF9DT05URVhU
IFhjLA0KPiArICAgIElOICBQVk9JRCBBZGRyZXNzDQo+ICsgICAgKQ0KPiArew0KPiArICAgIFhF
TklGQUNFX0dOVFRBQl9SRVZPS0VfRk9SRUlHTl9BQ0NFU1NfSU4gSW47DQo+ICsgICAgUFhFTkNP
TlRST0xfR05UVEFCX1JFUVVFU1QgUmVxdWVzdDsNCj4gKyAgICBEV09SRCBSZXR1cm5lZDsNCj4g
KyAgICBCT09MIFN1Y2Nlc3M7DQo+ICsgICAgRFdPUkQgU3RhdHVzOw0KPiArDQo+ICsgICAgTG9n
KFhMTF9ERUJVRywgTCJBZGRyZXNzOiAlcCIsIEFkZHJlc3MpOw0KPiArDQo+ICsgICAgU3RhdHVz
ID0gRVJST1JfTk9UX0ZPVU5EOw0KPiArICAgIFJlcXVlc3QgPSBGaW5kUmVxdWVzdChYYywgQWRk
cmVzcyk7DQo+ICsgICAgaWYgKCFSZXF1ZXN0KSB7DQo+ICsgICAgICAgIExvZyhYTExfRVJST1Is
IEwiQWRkcmVzcyAlcCBub3QgZ3JhbnRlZCIsIEFkZHJlc3MpOw0KPiArICAgICAgICBnb3RvIGZh
aWw7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgSW4uUmVxdWVzdElkID0gUmVxdWVzdC0+SWQ7DQo+
ICsNCj4gKyAgICBTdWNjZXNzID0gRGV2aWNlSW9Db250cm9sKFhjLT5YZW5JZmFjZSwNCj4gKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIElPQ1RMX1hFTklGQUNFX0dOVFRBQl9SRVZPS0Vf
Rk9SRUlHTl9BQ0NFU1MsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSW4sIHNp
emVvZihJbiksDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLA0KPiAr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlJldHVybmVkLA0KPiArICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTlVMTCk7DQo+ICsNCj4gKyAgICBTdGF0dXMgPSBHZXRMYXN0RXJy
b3IoKTsNCj4gKyAgICBpZiAoIVN1Y2Nlc3MpIHsNCj4gKyAgICAgICAgTG9nKFhMTF9FUlJPUiwg
TCJJT0NUTF9YRU5JRkFDRV9HTlRUQUJfVU5HUkFOVF9QQUdFUw0KPiBmYWlsZWQiKTsNCj4gKyAg
ICAgICAgZ290byBmYWlsOw0KPiArICAgIH0NCj4gKw0KPiArICAgIEVudGVyQ3JpdGljYWxTZWN0
aW9uKCZYYy0+UmVxdWVzdExpc3RMb2NrKTsNCj4gKyAgICBSZW1vdmVFbnRyeUxpc3QoJlJlcXVl
c3QtPkxpc3RFbnRyeSk7DQo+ICsgICAgTGVhdmVDcml0aWNhbFNlY3Rpb24oJlhjLT5SZXF1ZXN0
TGlzdExvY2spOw0KPiArICAgIGZyZWUoUmVxdWVzdCk7DQo+ICsNCj4gKyAgICByZXR1cm4gU3Rh
dHVzOw0KPiArDQo+ICtmYWlsOg0KPiArICAgIExvZyhYTExfRVJST1IsIEwiRXJyb3I6ICVkIDB4
JXgiLCBTdGF0dXMsIFN0YXR1cyk7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0K
PiArRFdPUkQNCj4gK1hjR250dGFiTWFwRm9yZWlnblBhZ2VzKA0KPiArICAgIElOICBQWEVOQ09O
VFJPTF9DT05URVhUIFhjLA0KPiArICAgIElOICBVU0hPUlQgUmVtb3RlRG9tYWluLA0KPiArICAg
IElOICBVTE9ORyBOdW1iZXJQYWdlcywNCj4gKyAgICBJTiAgUFVMT05HIFJlZmVyZW5jZXMsDQo+
ICsgICAgSU4gIFVMT05HIE5vdGlmeU9mZnNldCwNCj4gKyAgICBJTiAgVUxPTkcgTm90aWZ5UG9y
dCwNCj4gKyAgICBJTiAgWEVOSUZBQ0VfR05UVEFCX1BBR0VfRkxBR1MgRmxhZ3MsDQo+ICsgICAg
T1VUIFBWT0lEICpBZGRyZXNzDQo+ICsgICAgKQ0KPiArew0KPiArICAgIFhFTklGQUNFX0dOVFRB
Ql9NQVBfRk9SRUlHTl9QQUdFU19JTiAqSW47DQo+ICsgICAgWEVOSUZBQ0VfR05UVEFCX01BUF9G
T1JFSUdOX1BBR0VTX09VVCBPdXQ7DQo+ICsgICAgUFhFTkNPTlRST0xfR05UVEFCX1JFUVVFU1Qg
UmVxdWVzdDsNCj4gKyAgICBEV09SRCBSZXR1cm5lZCwgU2l6ZTsNCj4gKyAgICBCT09MIFN1Y2Nl
c3M7DQo+ICsgICAgRFdPUkQgU3RhdHVzOw0KPiArDQo+ICsgICAgLy8gbG9jayB0aGUgd2hvbGUg
b3BlcmF0aW9uIHRvIG5vdCBnZW5lcmF0ZSBkdXBsaWNhdGUgSURzDQo+ICsgICAgRW50ZXJDcml0
aWNhbFNlY3Rpb24oJlhjLT5SZXF1ZXN0TGlzdExvY2spOw0KPiArDQo+ICsgICAgU3RhdHVzID0g
RVJST1JfT1VUT0ZNRU1PUlk7DQo+ICsgICAgU2l6ZSA9DQo+IChVTE9ORylGSUVMRF9PRkZTRVQo
WEVOSUZBQ0VfR05UVEFCX01BUF9GT1JFSUdOX1BBR0VTX0lOLA0KPiBSZWZlcmVuY2VzW051bWJl
clBhZ2VzXSk7DQo+ICsgICAgSW4gPSBtYWxsb2MoU2l6ZSk7DQo+ICsgICAgUmVxdWVzdCA9IG1h
bGxvYyhzaXplb2YoKlJlcXVlc3QpKTsNCj4gKyAgICBpZiAoIUluIHx8ICFSZXF1ZXN0KQ0KPiAr
ICAgICAgICBnb3RvIGZhaWw7DQo+ICsNCj4gKyAgICBJbi0+UmVxdWVzdElkID0gWGMtPlJlcXVl
c3RJZDsNCj4gKyAgICBJbi0+UmVtb3RlRG9tYWluID0gUmVtb3RlRG9tYWluOw0KPiArICAgIElu
LT5OdW1iZXJQYWdlcyA9IE51bWJlclBhZ2VzOw0KPiArICAgIEluLT5Ob3RpZnlPZmZzZXQgPSBO
b3RpZnlPZmZzZXQ7DQo+ICsgICAgSW4tPk5vdGlmeVBvcnQgPSBOb3RpZnlQb3J0Ow0KPiArICAg
IEluLT5GbGFncyA9IEZsYWdzOw0KPiArICAgIG1lbWNweSgmSW4tPlJlZmVyZW5jZXMsIFJlZmVy
ZW5jZXMsIE51bWJlclBhZ2VzICogc2l6ZW9mKFVMT05HKSk7DQo+ICsNCj4gKyAgICBaZXJvTWVt
b3J5KFJlcXVlc3QsIHNpemVvZigqUmVxdWVzdCkpOw0KPiArICAgIFJlcXVlc3QtPklkID0gSW4t
PlJlcXVlc3RJZDsNCj4gKw0KPiArICAgIExvZyhYTExfREVCVUcsIEwiSWQgJWx1LCBSZW1vdGVE
b21haW46ICVkLCBOdW1iZXJQYWdlczogJWx1LA0KPiBOb3RpZnlPZmZzZXQ6IDB4JXgsIE5vdGlm
eVBvcnQ6ICVsdSwgRmxhZ3M6IDB4JXgiLA0KPiArICAgICAgICBJbi0+UmVxdWVzdElkLCBSZW1v
dGVEb21haW4sIE51bWJlclBhZ2VzLCBOb3RpZnlPZmZzZXQsDQo+IE5vdGlmeVBvcnQsIEZsYWdz
KTsNCj4gKw0KPiArICAgIGZvciAoVUxPTkcgaSA9IDA7IGkgPCBOdW1iZXJQYWdlczsgaSsrKQ0K
PiArICAgICAgICBMb2coWExMX0RFQlVHLCBMIkdyYW50IHJlZlslbHVdOiAlbHUiLCBpLCBSZWZl
cmVuY2VzW2ldKTsNCj4gKw0KPiArICAgIFN1Y2Nlc3MgPSBEZXZpY2VJb0NvbnRyb2woWGMtPlhl
bklmYWNlLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9DVExfWEVOSUZBQ0Vf
R05UVEFCX01BUF9GT1JFSUdOX1BBR0VTLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSW4sIFNpemUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmT3V0LCBzaXpl
b2YoT3V0KSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZSZXR1cm5lZCwNCj4g
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZSZXF1ZXN0LT5PdmVybGFwcGVkKTsNCj4g
Kw0KPiArICAgIFN0YXR1cyA9IEdldExhc3RFcnJvcigpOw0KPiArICAgIC8vIHRoaXMgSU9DVEwg
aXMgZXhwZWN0ZWQgdG8gYmUgcGVuZGluZyBvbiBzdWNjZXNzDQo+ICsgICAgaWYgKCFTdWNjZXNz
KSB7DQo+ICsgICAgICAgIGlmIChTdGF0dXMgIT0gRVJST1JfSU9fUEVORElORykgew0KPiArICAg
ICAgICAgICAgTG9nKFhMTF9FUlJPUiwNCj4gTCJJT0NUTF9YRU5JRkFDRV9HTlRUQUJfTUFQX0ZP
UkVJR05fUEFHRVMgZmFpbGVkIik7DQo+ICsgICAgICAgICAgICBnb3RvIGZhaWw7DQo+ICsgICAg
ICAgIH0NCj4gKyAgICB9IGVsc2Ugew0KPiArICAgICAgICBMb2coWExMX0VSUk9SLCBMIklPQ1RM
X1hFTklGQUNFX0dOVFRBQl9NQVBfRk9SRUlHTl9QQUdFUw0KPiBub3QgcGVuZGluZyIpOw0KPiAr
ICAgICAgICBTdGF0dXMgPSBFUlJPUl9VTklERU5USUZJRURfRVJST1I7DQo+ICsgICAgICAgIGdv
dG8gZmFpbDsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBSZXF1ZXN0LT5BZGRyZXNzID0gT3V0LkFk
ZHJlc3M7DQo+ICsgICAgSW5zZXJ0VGFpbExpc3QoJlhjLT5SZXF1ZXN0TGlzdCwgJlJlcXVlc3Qt
Pkxpc3RFbnRyeSk7DQo+ICsgICAgWGMtPlJlcXVlc3RJZCsrOw0KPiArICAgIExlYXZlQ3JpdGlj
YWxTZWN0aW9uKCZYYy0+UmVxdWVzdExpc3RMb2NrKTsNCj4gKw0KPiArICAgICpBZGRyZXNzID0g
T3V0LkFkZHJlc3M7DQo+ICsNCj4gKyAgICBMb2coWExMX0RFQlVHLCBMIkFkZHJlc3M6ICVwIiwg
KkFkZHJlc3MpOw0KPiArDQo+ICsgICAgZnJlZShJbik7DQo+ICsgICAgcmV0dXJuIEVSUk9SX1NV
Q0NFU1M7DQo+ICsNCj4gK2ZhaWw6DQo+ICsgICAgTGVhdmVDcml0aWNhbFNlY3Rpb24oJlhjLT5S
ZXF1ZXN0TGlzdExvY2spOw0KPiArICAgIExvZyhYTExfRVJST1IsIEwiRXJyb3I6IDB4JXgiLCBT
dGF0dXMpOw0KPiArICAgIGZyZWUoSW4pOw0KPiArICAgIGZyZWUoUmVxdWVzdCk7DQo+ICsgICAg
cmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArRFdPUkQNCj4gK1hjR250dGFiVW5tYXBGb3Jl
aWduUGFnZXMoDQo+ICsgICAgSU4gIFBYRU5DT05UUk9MX0NPTlRFWFQgWGMsDQo+ICsgICAgSU4g
IFBWT0lEIEFkZHJlc3MNCj4gKyAgICApDQo+ICt7DQo+ICsgICAgWEVOSUZBQ0VfR05UVEFCX1VO
TUFQX0ZPUkVJR05fUEFHRVNfSU4gSW47DQo+ICsgICAgUFhFTkNPTlRST0xfR05UVEFCX1JFUVVF
U1QgUmVxdWVzdDsNCj4gKyAgICBEV09SRCBSZXR1cm5lZDsNCj4gKyAgICBCT09MIFN1Y2Nlc3M7
DQo+ICsgICAgRFdPUkQgU3RhdHVzOw0KPiArDQo+ICsgICAgTG9nKFhMTF9ERUJVRywgTCJBZGRy
ZXNzOiAlcCIsIEFkZHJlc3MpOw0KPiArDQo+ICsgICAgU3RhdHVzID0gRVJST1JfTk9UX0ZPVU5E
Ow0KPiArICAgIFJlcXVlc3QgPSBGaW5kUmVxdWVzdChYYywgQWRkcmVzcyk7DQo+ICsgICAgaWYg
KCFSZXF1ZXN0KSB7DQo+ICsgICAgICAgIExvZyhYTExfRVJST1IsIEwiQWRkcmVzcyAlcCBub3Qg
bWFwcGVkIiwgQWRkcmVzcyk7DQo+ICsgICAgICAgIGdvdG8gZmFpbDsNCj4gKyAgICB9DQo+ICsN
Cj4gKyAgICBJbi5SZXF1ZXN0SWQgPSBSZXF1ZXN0LT5JZDsNCj4gKw0KPiArICAgIFN1Y2Nlc3Mg
PSBEZXZpY2VJb0NvbnRyb2woWGMtPlhlbklmYWNlLA0KPiArICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgSU9DVExfWEVOSUZBQ0VfR05UVEFCX1VOTUFQX0ZPUkVJR05fUEFHRVMsDQo+ICsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSW4sIHNpemVvZihJbiksDQo+ICsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLA0KPiArICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJlJldHVybmVkLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVM
TCk7DQo+ICsNCj4gKyAgICBTdGF0dXMgPSBHZXRMYXN0RXJyb3IoKTsNCj4gKyAgICBpZiAoIVN1
Y2Nlc3MpIHsNCj4gKyAgICAgICAgTG9nKFhMTF9FUlJPUiwNCj4gTCJJT0NUTF9YRU5JRkFDRV9H
TlRUQUJfVU5NQVBfRk9SRUlHTl9QQUdFUyBmYWlsZWQiKTsNCj4gKyAgICAgICAgZ290byBmYWls
Ow0KPiArICAgIH0NCj4gKw0KPiArICAgIEVudGVyQ3JpdGljYWxTZWN0aW9uKCZYYy0+UmVxdWVz
dExpc3RMb2NrKTsNCj4gKyAgICBSZW1vdmVFbnRyeUxpc3QoJlJlcXVlc3QtPkxpc3RFbnRyeSk7
DQo+ICsgICAgTGVhdmVDcml0aWNhbFNlY3Rpb24oJlhjLT5SZXF1ZXN0TGlzdExvY2spOw0KPiAr
ICAgIGZyZWUoUmVxdWVzdCk7DQo+ICsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArDQo+ICtm
YWlsOg0KPiArICAgIExvZyhYTExfRVJST1IsIEwiRXJyb3I6IDB4JXgiLCBTdGF0dXMpOw0KPiAr
ICAgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gK0RXT1JEDQo+ICtYY1N0b3JlUmVhZCgN
Cj4gKyAgICBJTiAgUFhFTkNPTlRST0xfQ09OVEVYVCBYYywNCj4gKyAgICBJTiAgUFNUUiBQYXRo
LA0KPiArICAgIElOICBEV09SRCBjYlZhbHVlLA0KPiArICAgIE9VVCBDSEFSICpWYWx1ZQ0KPiAr
ICAgICkNCj4gK3sNCj4gKyAgICBEV09SRCBSZXR1cm5lZDsNCj4gKyAgICBCT09MIFN1Y2Nlc3M7
DQo+ICsNCj4gKyAgICBMb2coWExMX0RFQlVHLCBMIlBhdGg6ICclUyciLCBQYXRoKTsNCj4gKyAg
ICBTdWNjZXNzID0gRGV2aWNlSW9Db250cm9sKFhjLT5YZW5JZmFjZSwNCj4gKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIElPQ1RMX1hFTklGQUNFX1NUT1JFX1JFQUQsDQo+ICsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBQYXRoLCAoRFdPUkQpc3RybGVuKFBhdGgpICsgMSwNCj4g
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlLCBjYlZhbHVlLA0KPiArICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJlJldHVybmVkLA0KPiArICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTlVMTCk7DQo+ICsNCj4gKyAgICBpZiAoIVN1Y2Nlc3MpIHsNCj4gKyAgICAg
ICAgTG9nKFhMTF9FUlJPUiwgTCJJT0NUTF9YRU5JRkFDRV9TVE9SRV9SRUFEIGZhaWxlZCIpOw0K
PiArICAgICAgICBnb3RvIGZhaWw7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgTG9nKFhMTF9ERUJV
RywgTCJWYWx1ZTogJyVTJyIsIFZhbHVlKTsNCj4gKw0KPiArICAgIHJldHVybiBFUlJPUl9TVUND
RVNTOw0KPiArDQo+ICtmYWlsOg0KPiArICAgIExvZyhYTExfRVJST1IsIEwiRXJyb3I6IDB4JXgi
LCBHZXRMYXN0RXJyb3IoKSk7DQo+ICsgICAgcmV0dXJuIEdldExhc3RFcnJvcigpOw0KPiArfQ0K
PiArDQo+ICtEV09SRA0KPiArWGNTdG9yZVdyaXRlKA0KPiArICAgIElOICBQWEVOQ09OVFJPTF9D
T05URVhUIFhjLA0KPiArICAgIElOICBQQ0hBUiBQYXRoLA0KPiArICAgIElOICBQQ0hBUiBWYWx1
ZQ0KPiArICAgICkNCj4gK3sNCj4gKyAgICBQQ0hBUiBCdWZmZXI7DQo+ICsgICAgRFdPUkQgY2JC
dWZmZXI7DQo+ICsgICAgRFdPUkQgUmV0dXJuZWQ7DQo+ICsgICAgQk9PTCBTdWNjZXNzOw0KPiAr
DQo+ICsgICAgY2JCdWZmZXIgPSAoRFdPUkQpKHN0cmxlbihQYXRoKSArIDEgKyBzdHJsZW4oVmFs
dWUpICsgMSArIDEpOw0KPiArICAgIEJ1ZmZlciA9IG1hbGxvYyhjYkJ1ZmZlcik7DQo+ICsgICAg
aWYgKCFCdWZmZXIpIHsNCj4gKyAgICAgICAgU2V0TGFzdEVycm9yKEVSUk9SX09VVE9GTUVNT1JZ
KTsNCj4gKyAgICAgICAgZ290byBmYWlsOw0KPiArICAgIH0NCj4gKw0KPiArICAgIFplcm9NZW1v
cnkoQnVmZmVyLCBjYkJ1ZmZlcik7DQo+ICsgICAgbWVtY3B5KEJ1ZmZlciwgUGF0aCwgc3RybGVu
KFBhdGgpKTsNCj4gKyAgICBtZW1jcHkoQnVmZmVyICsgc3RybGVuKFBhdGgpICsgMSwgVmFsdWUs
IHN0cmxlbihWYWx1ZSkpOw0KPiArDQo+ICsgICAgTG9nKFhMTF9ERUJVRywgTCJQYXRoOiAnJVMn
LCBWYWx1ZTogJyVTJyIsIFBhdGgsIFZhbHVlKTsNCj4gKyAgICBTdWNjZXNzID0gRGV2aWNlSW9D
b250cm9sKFhjLT5YZW5JZmFjZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElP
Q1RMX1hFTklGQUNFX1NUT1JFX1dSSVRFLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQnVmZmVyLCBjYkJ1ZmZlciwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5V
TEwsIDAsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUmV0dXJuZWQsDQo+ICsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsNCj4gKw0KPiArICAgIGlmICghU3Vj
Y2Vzcykgew0KPiArICAgICAgICBMb2coWExMX0VSUk9SLCBMIklPQ1RMX1hFTklGQUNFX1NUT1JF
X1dSSVRFIGZhaWxlZCIpOw0KPiArICAgICAgICBnb3RvIGZhaWw7DQo+ICsgICAgfQ0KPiArDQo+
ICsgICAgZnJlZShCdWZmZXIpOw0KPiArICAgIHJldHVybiBFUlJPUl9TVUNDRVNTOw0KPiArDQo+
ICtmYWlsOg0KPiArICAgIExvZyhYTExfRVJST1IsIEwiRXJyb3I6IDB4JXgiLCBHZXRMYXN0RXJy
b3IoKSk7DQo+ICsgICAgZnJlZShCdWZmZXIpOw0KPiArICAgIHJldHVybiBHZXRMYXN0RXJyb3Io
KTsNCj4gK30NCj4gKw0KPiArRFdPUkQNCj4gK1hjU3RvcmVEaXJlY3RvcnkoDQo+ICsgICAgSU4g
IFBYRU5DT05UUk9MX0NPTlRFWFQgWGMsDQo+ICsgICAgSU4gIFBDSEFSIFBhdGgsDQo+ICsgICAg
SU4gIERXT1JEIGNiT3V0cHV0LA0KPiArICAgIE9VVCBDSEFSICpPdXRwdXQNCj4gKyAgICApDQo+
ICt7DQo+ICsgICAgRFdPUkQgUmV0dXJuZWQ7DQo+ICsgICAgQk9PTCBTdWNjZXNzOw0KPiArDQo+
ICsgICAgTG9nKFhMTF9ERUJVRywgTCJQYXRoOiAnJVMnIiwgUGF0aCk7DQo+ICsgICAgU3VjY2Vz
cyA9IERldmljZUlvQ29udHJvbChYYy0+WGVuSWZhY2UsDQo+ICsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBJT0NUTF9YRU5JRkFDRV9TVE9SRV9ESVJFQ1RPUlksDQo+ICsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBQYXRoLCAoRFdPUkQpc3RybGVuKFBhdGgpICsgMSwNCj4gKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dCwgY2JPdXRwdXQsDQo+ICsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmUmV0dXJuZWQsDQo+ICsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBOVUxMKTsNCj4gKw0KPiArICAgIGlmICghU3VjY2Vzcykgew0KPiArICAgICAg
ICBMb2coWExMX0VSUk9SLCBMIklPQ1RMX1hFTklGQUNFX1NUT1JFX0RJUkVDVE9SWSBmYWlsZWQi
KTsNCj4gKyAgICAgICAgZ290byBmYWlsOw0KPiArICAgIH0NCj4gKw0KPiArICAgIF9Mb2dNdWx0
aVN6KFhjLCBfX0ZVTkNUSU9OX18sIFhMTF9ERUJVRywgT3V0cHV0KTsNCj4gKw0KPiArICAgIHJl
dHVybiBFUlJPUl9TVUNDRVNTOw0KPiArDQo+ICtmYWlsOg0KPiArICAgIExvZyhYTExfRVJST1Is
IEwiRXJyb3I6IDB4JXgiLCBHZXRMYXN0RXJyb3IoKSk7DQo+ICsgICAgcmV0dXJuIEdldExhc3RF
cnJvcigpOw0KPiArfQ0KPiArDQo+ICtEV09SRA0KPiArWGNTdG9yZVJlbW92ZSgNCj4gKyAgICBJ
TiAgUFhFTkNPTlRST0xfQ09OVEVYVCBYYywNCj4gKyAgICBJTiAgUENIQVIgUGF0aA0KPiArICAg
ICkNCj4gK3sNCj4gKyAgICBEV09SRCBSZXR1cm5lZDsNCj4gKyAgICBCT09MIFN1Y2Nlc3M7DQo+
ICsNCj4gKyAgICBMb2coWExMX0RFQlVHLCBMIlBhdGg6ICclUyciLCBQYXRoKTsNCj4gKyAgICBT
dWNjZXNzID0gRGV2aWNlSW9Db250cm9sKFhjLT5YZW5JZmFjZSwNCj4gKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIElPQ1RMX1hFTklGQUNFX1NUT1JFX1JFTU9WRSwNCj4gKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBhdGgsIChEV09SRClzdHJsZW4oUGF0aCkgKyAxLA0KPiAr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwNCj4gKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZSZXR1cm5lZCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE5VTEwpOw0KPiArDQo+ICsgICAgaWYgKCFTdWNjZXNzKSB7DQo+ICsgICAgICAgIExvZyhY
TExfRVJST1IsIEwiSU9DVExfWEVOSUZBQ0VfU1RPUkVfUkVNT1ZFIGZhaWxlZCIpOw0KPiArICAg
ICAgICBnb3RvIGZhaWw7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgcmV0dXJuIEVSUk9SX1NVQ0NF
U1M7DQo+ICsNCj4gK2ZhaWw6DQo+ICsgICAgTG9nKFhMTF9FUlJPUiwgTCJFcnJvcjogMHgleCIs
IEdldExhc3RFcnJvcigpKTsNCj4gKyAgICByZXR1cm4gR2V0TGFzdEVycm9yKCk7DQo+ICt9DQo+
ICsNCj4gK0RXT1JEDQo+ICtYY1N0b3JlU2V0UGVybWlzc2lvbnMoDQo+ICsgICAgSU4gIFBYRU5D
T05UUk9MX0NPTlRFWFQgWGMsDQo+ICsgICAgSU4gIFBDSEFSIFBhdGgsDQo+ICsgICAgSU4gIFVM
T05HIENvdW50LA0KPiArICAgIElOICBQWEVOSUZBQ0VfU1RPUkVfUEVSTUlTU0lPTiBQZXJtaXNz
aW9ucw0KPiArICAgICkNCj4gK3sNCj4gKyAgICBEV09SRCBSZXR1cm5lZCwgU2l6ZTsNCj4gKyAg
ICBCT09MIFN1Y2Nlc3M7DQo+ICsgICAgWEVOSUZBQ0VfU1RPUkVfU0VUX1BFUk1JU1NJT05TX0lO
ICpJbiA9IE5VTEw7DQo+ICsNCj4gKyAgICBMb2coWExMX0RFQlVHLCBMIlBhdGg6ICclUycsIENv
dW50OiAlbHUiLCBQYXRoLCBDb3VudCk7DQo+ICsgICAgZm9yIChVTE9ORyBpID0gMDsgaSA8IENv
dW50OyBpKyspDQo+ICsgICAgICAgIExvZyhYTExfREVCVUcsIEwiRG9tYWluOiAlZCwgTWFzazog
MHgleCIsIFBlcm1pc3Npb25zW2ldLkRvbWFpbiwNCj4gUGVybWlzc2lvbnNbaV0uTWFzayk7DQo+
ICsNCj4gKyAgICBTaXplID0gKFVMT05HKUZJRUxEX09GRlNFVChYRU5JRkFDRV9TVE9SRV9TRVRf
UEVSTUlTU0lPTlNfSU4sDQo+IFBlcm1pc3Npb25zW0NvdW50XSk7DQo+ICsgICAgSW4gPSBtYWxs
b2MoU2l6ZSk7DQo+ICsgICAgaWYgKCFJbikgew0KPiArICAgICAgICBTZXRMYXN0RXJyb3IoRVJS
T1JfT1VUT0ZNRU1PUlkpOw0KPiArICAgICAgICBnb3RvIGZhaWw7DQo+ICsgICAgfQ0KPiArDQo+
ICsgICAgSW4tPlBhdGggPSBQYXRoOw0KPiArICAgIEluLT5QYXRoTGVuZ3RoID0gKERXT1JEKXN0
cmxlbihJbi0+UGF0aCkgKyAxOw0KPiArICAgIEluLT5OdW1iZXJQZXJtaXNzaW9ucyA9IENvdW50
Ow0KPiArICAgIG1lbWNweSgmSW4tPlBlcm1pc3Npb25zLCBQZXJtaXNzaW9ucywgQ291bnQgKg0K
PiBzaXplb2YoWEVOSUZBQ0VfU1RPUkVfUEVSTUlTU0lPTikpOw0KPiArDQo+ICsgICAgU3VjY2Vz
cyA9IERldmljZUlvQ29udHJvbChYYy0+WGVuSWZhY2UsDQo+ICsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBJT0NUTF9YRU5JRkFDRV9TVE9SRV9TRVRfUEVSTUlTU0lPTlMsDQo+ICsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBJbiwgU2l6ZSwNCj4gKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE5VTEwsIDAsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
UmV0dXJuZWQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsNCj4gKw0K
PiArICAgIGlmICghU3VjY2Vzcykgew0KPiArICAgICAgICBMb2coWExMX0VSUk9SLCBMIklPQ1RM
X1hFTklGQUNFX1NUT1JFX1NFVF9QRVJNSVNTSU9OUyBmYWlsZWQiKTsNCj4gKyAgICAgICAgZ290
byBmYWlsOw0KPiArICAgIH0NCj4gKw0KPiArICAgIGZyZWUoSW4pOw0KPiArICAgIHJldHVybiBF
UlJPUl9TVUNDRVNTOw0KPiArDQo+ICtmYWlsOg0KPiArICAgIExvZyhYTExfRVJST1IsIEwiRXJy
b3I6IDB4JXgiLCBHZXRMYXN0RXJyb3IoKSk7DQo+ICsgICAgZnJlZShJbik7DQo+ICsgICAgcmV0
dXJuIEdldExhc3RFcnJvcigpOw0KPiArfQ0KPiArDQo+ICtEV09SRA0KPiArWGNTdG9yZUFkZFdh
dGNoKA0KPiArICAgIElOICBQWEVOQ09OVFJPTF9DT05URVhUIFhjLA0KPiArICAgIElOICBQQ0hB
UiBQYXRoLA0KPiArICAgIElOICBIQU5ETEUgRXZlbnQsDQo+ICsgICAgT1VUIFBWT0lEICpIYW5k
bGUNCj4gKyAgICApDQo+ICt7DQo+ICsgICAgRFdPUkQgUmV0dXJuZWQ7DQo+ICsgICAgQk9PTCBT
dWNjZXNzOw0KPiArICAgIFhFTklGQUNFX1NUT1JFX0FERF9XQVRDSF9JTiBJbjsNCj4gKyAgICBY
RU5JRkFDRV9TVE9SRV9BRERfV0FUQ0hfT1VUIE91dDsNCj4gKw0KPiArICAgIExvZyhYTExfREVC
VUcsIEwiUGF0aDogJyVTJywgRXZlbnQ6ICVwIiwgUGF0aCwgRXZlbnQpOw0KPiArDQo+ICsgICAg
SW4uUGF0aCA9IFBhdGg7DQo+ICsgICAgSW4uUGF0aExlbmd0aCA9IChEV09SRClzdHJsZW4oUGF0
aCkgKyAxOw0KPiArICAgIEluLkV2ZW50ID0gRXZlbnQ7DQo+ICsgICAgU3VjY2VzcyA9IERldmlj
ZUlvQ29udHJvbChYYy0+WGVuSWZhY2UsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBJT0NUTF9YRU5JRkFDRV9TVE9SRV9BRERfV0FUQ0gsDQo+ICsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmSW4sIHNpemVvZihJbiksDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmT3V0LCBzaXplb2YoT3V0KSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZSZXR1cm5lZCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOw0KPiAr
DQo+ICsgICAgaWYgKCFTdWNjZXNzKSB7DQo+ICsgICAgICAgIExvZyhYTExfRVJST1IsIEwiSU9D
VExfWEVOSUZBQ0VfU1RPUkVfQUREX1dBVENIIGZhaWxlZCIpOw0KPiArICAgICAgICBnb3RvIGZh
aWw7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgKkhhbmRsZSA9IE91dC5Db250ZXh0Ow0KPiArDQo+
ICsgICAgTG9nKFhMTF9ERUJVRywgTCJIYW5kbGU6ICVwIiwgKkhhbmRsZSk7DQo+ICsNCj4gKyAg
ICByZXR1cm4gRVJST1JfU1VDQ0VTUzsNCj4gKw0KPiArZmFpbDoNCj4gKyAgICBMb2coWExMX0VS
Uk9SLCBMIkVycm9yOiAweCV4IiwgR2V0TGFzdEVycm9yKCkpOw0KPiArICAgIHJldHVybiBHZXRM
YXN0RXJyb3IoKTsNCj4gK30NCj4gKw0KPiArRFdPUkQNCj4gK1hjU3RvcmVSZW1vdmVXYXRjaCgN
Cj4gKyAgICBJTiAgUFhFTkNPTlRST0xfQ09OVEVYVCBYYywNCj4gKyAgICBJTiAgUFZPSUQgSGFu
ZGxlDQo+ICsgICAgKQ0KPiArew0KPiArICAgIERXT1JEIFJldHVybmVkOw0KPiArICAgIEJPT0wg
U3VjY2VzczsNCj4gKyAgICBYRU5JRkFDRV9TVE9SRV9SRU1PVkVfV0FUQ0hfSU4gSW47DQo+ICsN
Cj4gKyAgICBMb2coWExMX0RFQlVHLCBMIkhhbmRsZTogJXAiLCBIYW5kbGUpOw0KPiArDQo+ICsg
ICAgSW4uQ29udGV4dCA9IEhhbmRsZTsNCj4gKyAgICBTdWNjZXNzID0gRGV2aWNlSW9Db250cm9s
KFhjLT5YZW5JZmFjZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElPQ1RMX1hF
TklGQUNFX1NUT1JFX1JFTU9WRV9XQVRDSCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICZJbiwgc2l6ZW9mKEluKSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5V
TEwsIDAsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUmV0dXJuZWQsDQo+ICsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsNCj4gKw0KPiArICAgIGlmICghU3Vj
Y2Vzcykgew0KPiArICAgICAgICBMb2coWExMX0VSUk9SLCBMIklPQ1RMX1hFTklGQUNFX1NUT1JF
X1JFTU9WRV9XQVRDSCBmYWlsZWQiKTsNCj4gKyAgICAgICAgZ290byBmYWlsOw0KPiArICAgIH0N
Cj4gKw0KPiArICAgIHJldHVybiBFUlJPUl9TVUNDRVNTOw0KPiArDQo+ICtmYWlsOg0KPiArICAg
IExvZyhYTExfRVJST1IsIEwiRXJyb3I6IDB4JXgiLCBHZXRMYXN0RXJyb3IoKSk7DQo+ICsgICAg
cmV0dXJuIEdldExhc3RFcnJvcigpOw0KPiArfQ0KPiBkaWZmIC0tZ2l0IGEvc3JjL3hlbmNvbnRy
b2wveGVuY29udHJvbC5yYyBiL3NyYy94ZW5jb250cm9sL3hlbmNvbnRyb2wucmMNCj4gbmV3IGZp
bGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMC4uNmMzM2U4NA0KPiAtLS0gL2Rldi9udWxs
DQo+ICsrKyBiL3NyYy94ZW5jb250cm9sL3hlbmNvbnRyb2wucmMNCj4gQEAgLTAsMCArMSwyNCBA
QA0KPiArI2luY2x1ZGUgPHdpbmRvd3MuaD4NCj4gKyNpbmNsdWRlIDxudHZlcnAuaD4NCj4gKw0K
PiArI3VuZGVmIFZFUl9DT01QQU5ZTkFNRV9TVFINCj4gKyN1bmRlZiBWRVJfUFJPRFVDVE5BTUVf
U1RSDQo+ICsjdW5kZWYgVkVSX1BST0RVQ1RWRVJTSU9ODQo+ICsjdW5kZWYgVkVSX1BST0RVQ1RW
RVJTSU9OX1NUUg0KPiArDQo+ICsjaW5jbHVkZSA8dmVyc2lvbi5oPg0KPiArDQo+ICsjZGVmaW5l
IFZFUl9DT01QQU5ZTkFNRV9TVFIgICAgICAgICBWRU5ET1JfTkFNRV9TVFINCj4gKyNkZWZpbmUg
VkVSX0xFR0FMQ09QWVJJR0hUX1NUUiAgICAgICJDb3B5cmlnaHQgKGMpIEludmlzaWJsZSBUaGlu
Z3MgTGFiIg0KPiArDQo+ICsjZGVmaW5lIFZFUl9QUk9EVUNUTkFNRV9TVFIgICAgICAgICAiWEVO
SUZBQ0UiDQo+ICsjZGVmaW5lIFZFUl9QUk9EVUNUVkVSU0lPTg0KPiBNQUpPUl9WRVJTSU9OLE1J
Tk9SX1ZFUlNJT04sTUlDUk9fVkVSU0lPTixCVUlMRF9OVU1CRVINCj4gKyNkZWZpbmUgVkVSX1BS
T0RVQ1RWRVJTSU9OX1NUUiAgICAgIE1BSk9SX1ZFUlNJT05fU1RSICIuIg0KPiBNSU5PUl9WRVJT
SU9OX1NUUiAiLiIgTUlDUk9fVkVSU0lPTl9TVFIgIi4iIEJVSUxEX05VTUJFUl9TVFINCj4gKw0K
PiArI2RlZmluZSBWRVJfSU5URVJOQUxOQU1FX1NUUiAgICAgICAgIlhFTkNPTlRST0wuRExMIg0K
PiArI2RlZmluZSBWRVJfRklMRURFU0NSSVBUSU9OX1NUUiAgICAgIlhlbiBpbnRlcmZhY2UgdXNl
ciBsaWJyYXJ5Ig0KPiArDQo+ICsjZGVmaW5lIFZFUl9GSUxFVFlQRSAgICAgICAgICAgICAgICBW
RlRfRExMDQo+ICsjZGVmaW5lIFZFUl9GSUxFU1VCVFlQRSAgICAgICAgICAgICAwDQo+ICsNCj4g
KyNpbmNsdWRlIDxjb21tb24udmVyPg0KPiBkaWZmIC0tZ2l0IGEvc3JjL3hlbmNvbnRyb2wveGVu
Y29udHJvbF9wcml2YXRlLmgNCj4gYi9zcmMveGVuY29udHJvbC94ZW5jb250cm9sX3ByaXZhdGUu
aA0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwLi42ODViY2ZhDQo+IC0t
LSAvZGV2L251bGwNCj4gKysrIGIvc3JjL3hlbmNvbnRyb2wveGVuY29udHJvbF9wcml2YXRlLmgN
Cj4gQEAgLTAsMCArMSw0OSBAQA0KPiArI2lmbmRlZiBfWEVOQ09OVFJPTF9QUklWQVRFX0hfDQo+
ICsjZGVmaW5lIF9YRU5DT05UUk9MX1BSSVZBVEVfSF8NCj4gKw0KPiArI2luY2x1ZGUgPHdpbmRv
d3MuaD4NCj4gKyNpbmNsdWRlICJ4ZW5jb250cm9sLmgiDQo+ICsNCj4gKyNkZWZpbmUgTG9nKGxl
dmVsLCBmb3JtYXQsIC4uLikgXA0KPiArICAgICAgICBfTG9nKFhjLT5Mb2dnZXIsIGxldmVsLCBY
Yy0+TG9nTGV2ZWwsIF9fRlVOQ1RJT05fXywgZm9ybWF0LA0KPiBfX1ZBX0FSR1NfXykNCj4gKw0K
PiArI2RlZmluZSBJbml0aWFsaXplTGlzdEhlYWQoTGlzdEhlYWQpICggXA0KPiArICAgIChMaXN0
SGVhZCktPkZsaW5rID0gKExpc3RIZWFkKS0+QmxpbmsgPSAoTGlzdEhlYWQpKQ0KPiArDQo+ICsj
ZGVmaW5lIEluc2VydFRhaWxMaXN0KExpc3RIZWFkLCBFbnRyeSkgeyBcDQo+ICsgICAgUExJU1Rf
RU5UUlkgX0VYX0JsaW5rOyBcDQo+ICsgICAgUExJU1RfRU5UUlkgX0VYX0xpc3RIZWFkOyBcDQo+
ICsgICAgX0VYX0xpc3RIZWFkID0gKExpc3RIZWFkKTsgXA0KPiArICAgIF9FWF9CbGluayA9IF9F
WF9MaXN0SGVhZC0+Qmxpbms7IFwNCj4gKyAgICAoRW50cnkpLT5GbGluayA9IF9FWF9MaXN0SGVh
ZDsgXA0KPiArICAgIChFbnRyeSktPkJsaW5rID0gX0VYX0JsaW5rOyBcDQo+ICsgICAgX0VYX0Js
aW5rLT5GbGluayA9IChFbnRyeSk7IFwNCj4gKyAgICBfRVhfTGlzdEhlYWQtPkJsaW5rID0gKEVu
dHJ5KTsgXA0KPiArICAgIH0NCj4gKw0KPiArI2RlZmluZSBSZW1vdmVFbnRyeUxpc3QoRW50cnkp
IHsgXA0KPiArICAgIFBMSVNUX0VOVFJZIF9FWF9CbGluazsgXA0KPiArICAgIFBMSVNUX0VOVFJZ
IF9FWF9GbGluazsgXA0KPiArICAgIF9FWF9GbGluayA9IChFbnRyeSktPkZsaW5rOyBcDQo+ICsg
ICAgX0VYX0JsaW5rID0gKEVudHJ5KS0+Qmxpbms7IFwNCj4gKyAgICBfRVhfQmxpbmstPkZsaW5r
ID0gX0VYX0ZsaW5rOyBcDQo+ICsgICAgX0VYX0ZsaW5rLT5CbGluayA9IF9FWF9CbGluazsgXA0K
PiArICAgIH0NCj4gKw0KPiArdHlwZWRlZiBzdHJ1Y3QgX1hFTkNPTlRST0xfQ09OVEVYVCB7DQo+
ICsgICAgSEFORExFIFhlbklmYWNlOw0KPiArICAgIFhFTkNPTlRST0xfTE9HR0VSICpMb2dnZXI7
DQo+ICsgICAgWEVOQ09OVFJPTF9MT0dfTEVWRUwgTG9nTGV2ZWw7DQo+ICsgICAgVUxPTkcgUmVx
dWVzdElkOw0KPiArICAgIExJU1RfRU5UUlkgUmVxdWVzdExpc3Q7DQo+ICsgICAgQ1JJVElDQUxf
U0VDVElPTiBSZXF1ZXN0TGlzdExvY2s7DQo+ICt9IFhFTkNPTlRST0xfQ09OVEVYVCwgKlBYRU5D
T05UUk9MX0NPTlRFWFQ7DQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0IF9YRU5DT05UUk9MX0dOVFRB
Ql9SRVFVRVNUIHsNCj4gKyAgICBMSVNUX0VOVFJZICBMaXN0RW50cnk7DQo+ICsgICAgT1ZFUkxB
UFBFRCAgT3ZlcmxhcHBlZDsNCj4gKyAgICBVTE9ORyAgICAgICBJZDsNCj4gKyAgICBQVk9JRCAg
ICAgICBBZGRyZXNzOw0KPiArfSBYRU5DT05UUk9MX0dOVFRBQl9SRVFVRVNULCAqUFhFTkNPTlRS
T0xfR05UVEFCX1JFUVVFU1Q7DQo+ICsNCj4gKyNlbmRpZiAvLyBfWEVOQ09OVFJPTF9QUklWQVRF
X0hfDQo+IGRpZmYgLS1naXQgYS92czIwMTMveGVuY29udHJvbC5wcm9wcyBiL3ZzMjAxMy94ZW5j
b250cm9sLnByb3BzDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAuLjIy
YzE3MDQNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi92czIwMTMveGVuY29udHJvbC5wcm9wcw0K
PiBAQCAtMCwwICsxLDg0IEBADQo+ICvvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1
dGYtOCI/Pg0KPiArPFByb2plY3QgVG9vbHNWZXJzaW9uPSI0LjAiDQo+IHhtbG5zPSJodHRwOi8v
c2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPg0KPiArDQo+ICsg
IDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIC8+DQo+ICsNCj4gKyAgPFByb3Bl
cnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+DQo+ICsNCj4gKyAgPFByb3BlcnR5R3JvdXA+
DQo+ICsgICAgPEluY2x1ZGVQYXRoPiQoU29sdXRpb25EaXIpXC4uXGluY2x1ZGU7JChJbmNsdWRl
UGF0aCk8L0luY2x1ZGVQYXRoPg0KPiArDQo+IDxMaWJyYXJ5UGF0aD4kKFNvbHV0aW9uRGlyKVwk
KENvbmZpZ3VyYXRpb24pXCQoUGxhdGZvcm0pOyQoTGlicmFyeVBhdGgpPC9MaQ0KPiBicmFyeVBh
dGg+DQo+ICsgICAgPE91dERpcj4kKFNvbHV0aW9uRGlyKVwkKENvbmZpZ3VyYXRpb24pXCQoUGxh
dGZvcm0pXDwvT3V0RGlyPg0KPiArDQo+IDxJbnREaXI+JChTb2x1dGlvbkRpcilcJChQcm9qZWN0
TmFtZSlcJChDb25maWd1cmF0aW9uKVwkKFBsYXRmb3JtKVw8L0ludERpDQo+IHI+DQo+ICsgICAg
PExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPg0KPiArICA8L1Byb3BlcnR5
R3JvdXA+DQo+ICsNCj4gKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0K
PiArICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4NCj4gKyAgICA8
UGxhdGZvcm1Ub29sc2V0PnYxMjA8L1BsYXRmb3JtVG9vbHNldD4NCj4gKyAgPC9Qcm9wZXJ0eUdy
b3VwPg0KPiArDQo+ICsgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlv
biknPT0nRGVidWcnIg0KPiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQo+ICsgICAgPFJ1bkNvZGVB
bmFseXNpcz50cnVlPC9SdW5Db2RlQW5hbHlzaXM+DQo+ICsgICAgPFVzZURlYnVnTGlicmFyaWVz
PnRydWU8L1VzZURlYnVnTGlicmFyaWVzPg0KPiArICA8L1Byb3BlcnR5R3JvdXA+DQo+ICsNCj4g
KyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKSc9PSdSZWxlYXNl
JyINCj4gTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KPiArICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5m
YWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+DQo+ICsgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlv
bj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+DQo+ICsgIDwvUHJvcGVydHlHcm91cD4N
Cj4gKw0KPiArICA8SXRlbURlZmluaXRpb25Hcm91cD4NCj4gKyAgICA8TGluaz4NCj4gKw0KPiA8
QWRkaXRpb25hbERlcGVuZGVuY2llcz5zZXR1cGFwaS5saWI7d3MyXzMyLmxpYjtzaGx3YXBpLmxp
Yjt3dHNhcGkzMi5saWI7dXMNCj4gZXJlbnYubGliO3ZlcnNpb24ubGliO250ZGxsLmxpYjtrZXJu
ZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7Y29tZGxnMzIubGliO2Fkdg0KPiBhcGkzMi5s
aWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjslKEFkZGl0aW9u
YWxEZXBlbmRlbmNpZXMpDQo+IDwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4NCj4gKyAgICAgIDxH
ZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPg0K
PiArICAgIDwvTGluaz4NCj4gKyAgICA8Q2xDb21waWxlPg0KPiArDQo+IDxQcmVwcm9jZXNzb3JE
ZWZpbml0aW9ucz5XSU4zMjslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc28N
Cj4gckRlZmluaXRpb25zPg0KPiArICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdM
ZXZlbD4NCj4gKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj5Ob3RVc2luZzwvUHJlY29tcGlsZWRI
ZWFkZXI+DQo+ICsgICAgICA8U0RMQ2hlY2s+dHJ1ZTwvU0RMQ2hlY2s+DQo+ICsgICAgICA8RXhj
ZXB0aW9uSGFuZGxpbmc+ZmFsc2U8L0V4Y2VwdGlvbkhhbmRsaW5nPg0KPiArICAgICAgPFRyZWF0
V2FybmluZ0FzRXJyb3I+dHJ1ZTwvVHJlYXRXYXJuaW5nQXNFcnJvcj4NCj4gKyAgICA8L0NsQ29t
cGlsZT4NCj4gKyAgICA8Q3VzdG9tQnVpbGRTdGVwPg0KPiArICAgICAgPENvbW1hbmQ+eGNvcHkg
L3kgJChUYXJnZXRQYXRoKQ0KPiAkKFNvbHV0aW9uRGlyKVwuLlx4ZW5pZmFjZVwkKFBsYXRmb3Jt
VGFyZ2V0KVwNCj4gK3hjb3B5IC95ICQoVGFyZ2V0RGlyKSQoVGFyZ2V0TmFtZSkucGRiDQo+ICQo
U29sdXRpb25EaXIpXC4uXHhlbmlmYWNlXCQoUGxhdGZvcm1UYXJnZXQpXA0KPiAraWYgZXhpc3Qg
JChUYXJnZXREaXIpJChUYXJnZXROYW1lKS5saWIgeGNvcHkgL3kNCj4gJChUYXJnZXREaXIpJChU
YXJnZXROYW1lKS5saWINCj4gJChTb2x1dGlvbkRpcilcLi5ceGVuaWZhY2VcJChQbGF0Zm9ybVRh
cmdldClcPC9Db21tYW5kPg0KPiArICAgIDwvQ3VzdG9tQnVpbGRTdGVwPg0KPiArICAgIDxDdXN0
b21CdWlsZFN0ZXA+DQo+ICsgICAgICA8TWVzc2FnZT5Db3B5aW5nIG91dHB1dCBmaWxlczwvTWVz
c2FnZT4NCj4gKyAgICA8L0N1c3RvbUJ1aWxkU3RlcD4NCj4gKyAgICA8Q3VzdG9tQnVpbGRTdGVw
Pg0KPiArDQo+IDxPdXRwdXRzPiQoU29sdXRpb25EaXIpXC4uXHhlbmlmYWNlXCQoUGxhdGZvcm1U
YXJnZXQpJChUYXJnZXRGaWxlTmFtZSk7JCgNCj4gU29sdXRpb25EaXIpXC4uXHhlbmlmYWNlXCQo
UGxhdGZvcm1UYXJnZXQpJChUYXJnZXROYW1lKS5wZGI7JChTb2x1dGlvbkRpcikNCj4gXC4uXHhl
bmlmYWNlXCQoUGxhdGZvcm1UYXJnZXQpJChUYXJnZXROYW1lKS5saWI7JShPdXRwdXRzKTwvT3V0
cHV0cz4NCj4gKyAgICA8L0N1c3RvbUJ1aWxkU3RlcD4NCj4gKyAgICA8Q3VzdG9tQnVpbGRTdGVw
Pg0KPiArDQo+IDxJbnB1dHM+JChUYXJnZXRQYXRoKTskKFRhcmdldERpcikkKFRhcmdldE5hbWUp
LnBkYjskKFRhcmdldERpcikkKFRhcmdldA0KPiBOYW1lKS5saWI8L0lucHV0cz4NCj4gKyAgICA8
L0N1c3RvbUJ1aWxkU3RlcD4NCj4gKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KPiArDQo+ICsg
IDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbiknPT0nRGVi
dWcnIj4NCj4gKyAgICA8Q2xDb21waWxlPg0KPiArDQo+IDxQcmVwcm9jZXNzb3JEZWZpbml0aW9u
cz5fREVCVUc7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3MNCj4gb3JEZWZp
bml0aW9ucz4NCj4gKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4N
Cj4gKyAgICAgIDxFbmFibGVQUkVmYXN0PnRydWU8L0VuYWJsZVBSRWZhc3Q+DQo+ICsgICAgICA8
UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERlYnVnRExMPC9SdW50aW1lTGlicmFyeT4NCj4g
KyAgICA8L0NsQ29tcGlsZT4NCj4gKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KPiArDQo+ICsg
IDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbiknPT0nUmVs
ZWFzZSciPg0KPiArICAgIDxDbENvbXBpbGU+DQo+ICsNCj4gPFByZXByb2Nlc3NvckRlZmluaXRp
b25zPk5ERUJVRzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2VzDQo+IHNvckRl
ZmluaXRpb25zPg0KPiArICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9u
Pg0KPiArICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5r
aW5nPg0KPiArICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlv
bnM+DQo+ICsgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERMTDwvUnVudGltZUxp
YnJhcnk+DQo+ICsgICAgPC9DbENvbXBpbGU+DQo+ICsgICAgPExpbms+DQo+ICsgICAgICA8RW5h
YmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPg0KPiArICAgICAgPE9w
dGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+DQo+ICsgICAgPC9MaW5r
Pg0KPiArICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQo+ICsNCj4gKyAgPEl0ZW1Hcm91cCAvPg0K
PiArPC9Qcm9qZWN0Pg0KPiBcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUNCj4gZGlmZiAtLWdp
dCBhL3ZzMjAxMy94ZW5jb250cm9sL3hlbmNvbnRyb2wudmN4cHJvag0KPiBiL3ZzMjAxMy94ZW5j
b250cm9sL3hlbmNvbnRyb2wudmN4cHJvag0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRl
eCAwMDAwMDAwLi40ZDkxYTM4DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvdnMyMDEzL3hlbmNv
bnRyb2wveGVuY29udHJvbC52Y3hwcm9qDQo+IEBAIC0wLDAgKzEsNjIgQEANCj4gK++7vzw/eG1s
IHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+DQo+ICs8UHJvamVjdCBEZWZhdWx0VGFy
Z2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iMTIuMCINCj4geG1sbnM9Imh0dHA6Ly9zY2hlbWFz
Lm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+DQo+ICsgIDxJdGVtR3JvdXAg
TGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+DQo+ICsgICAgPFByb2plY3RDb25maWd1cmF0
aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4NCj4gKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVn
PC9Db25maWd1cmF0aW9uPg0KPiArICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4NCj4g
KyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0KPiArICAgIDxQcm9qZWN0Q29uZmlndXJhdGlv
biBJbmNsdWRlPSJEZWJ1Z3x4NjQiPg0KPiArICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0Nv
bmZpZ3VyYXRpb24+DQo+ICsgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4NCj4gKyAgICA8
L1Byb2plY3RDb25maWd1cmF0aW9uPg0KPiArICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNs
dWRlPSJSZWxlYXNlfFdpbjMyIj4NCj4gKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0Nv
bmZpZ3VyYXRpb24+DQo+ICsgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPg0KPiArICAg
IDwvUHJvamVjdENvbmZpZ3VyYXRpb24+DQo+ICsgICAgPFByb2plY3RDb25maWd1cmF0aW9uIElu
Y2x1ZGU9IlJlbGVhc2V8eDY0Ij4NCj4gKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0Nv
bmZpZ3VyYXRpb24+DQo+ICsgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4NCj4gKyAgICA8
L1Byb2plY3RDb25maWd1cmF0aW9uPg0KPiArICA8L0l0ZW1Hcm91cD4NCj4gKyAgPFByb3BlcnR5
R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPg0KPiArICAgIDxQcm9qZWN0R3VpZD57RDM4NkQ4RTktRDAx
NS00QUQyLUE1QzItDQo+IDRGODQ1QTgwM0ZBMn08L1Byb2plY3RHdWlkPg0KPiArICAgIDxLZXl3
b3JkPldpbjMyUHJvajwvS2V5d29yZD4NCj4gKyAgICA8Um9vdE5hbWVzcGFjZT54ZW5jb250cm9s
PC9Sb290TmFtZXNwYWNlPg0KPiArICA8L1Byb3BlcnR5R3JvdXA+DQo+ICsgIDxJbXBvcnQgUHJv
amVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+DQo+
ICsgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCj4gKyAgICA8Q29uZmln
dXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPg0KPiArICAgIDxD
aGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0Pg0KPiArICA8L1Byb3BlcnR5R3JvdXA+
DQo+ICsgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnBy
b3BzIiAvPg0KPiArICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4NCj4gKyAg
ICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9y
bSkudXNlci5wcm9wcyINCj4gQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jv
c29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIg0KPiBMYWJlbD0iTG9jYWxBcHBEYXRh
UGxhdGZvcm0iIC8+DQo+ICsgICAgPEltcG9ydCBQcm9qZWN0PSIuLlx4ZW5jb250cm9sLnByb3Bz
IiAvPg0KPiArICA8L0ltcG9ydEdyb3VwPg0KPiArICA8SXRlbURlZmluaXRpb25Hcm91cD4NCj4g
KyAgICA8Q2xDb21waWxlPg0KPiArDQo+IDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fV0lORE9X
UztfVVNSRExMO1hFTkNPTlRST0xfRVhQT1JUUzslKA0KPiBQcmVwcm9jZXNzb3JEZWZpbml0aW9u
cyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KPiArICAgIDwvQ2xDb21waWxlPg0KPiArICAg
IDxMaW5rPg0KPiArICAgICAgPFN1YlN5c3RlbT5XaW5kb3dzPC9TdWJTeXN0ZW0+DQo+ICsgICAg
PC9MaW5rPg0KPiArICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQo+ICsgIDxJdGVtR3JvdXA+DQo+
ICsgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNceGVuY29udHJvbFx4ZW5jb250cm9s
LmMiIC8+DQo+ICsgIDwvSXRlbUdyb3VwPg0KPiArICA8SXRlbUdyb3VwPg0KPiArICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVx4ZW5jb250cm9sLmgiIC8+DQo+ICsgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNceGVuY29udHJvbFx4ZW5jb250cm9sX3ByaXZhdGUu
aCIgLz4NCj4gKyAgPC9JdGVtR3JvdXA+DQo+ICsgIDxJdGVtR3JvdXA+DQo+ICsgICAgPFJlc291
cmNlQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNceGVuY29udHJvbFx4ZW5jb250cm9sLnJjIiAv
Pg0KPiArICA8L0l0ZW1Hcm91cD4NCj4gKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1Bh
dGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4NCj4gKyAgPEltcG9ydEdyb3VwIExhYmVsPSJF
eHRlbnNpb25UYXJnZXRzIj4NCj4gKyAgPC9JbXBvcnRHcm91cD4NCj4gKyAgPFByb2plY3RFeHRl
bnNpb25zPg0KPiArICAgIDxWaXN1YWxTdHVkaW8+DQo+ICsgICAgICA8VXNlclByb3BlcnRpZXMg
Lz4NCj4gKyAgICA8L1Zpc3VhbFN0dWRpbz4NCj4gKyAgPC9Qcm9qZWN0RXh0ZW5zaW9ucz4NCj4g
KzwvUHJvamVjdD4NCj4gXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlDQo+IGRpZmYgLS1naXQg
YS92czIwMTMveGVuY29udHJvbC94ZW5jb250cm9sLnZjeHByb2ouZmlsdGVycw0KPiBiL3ZzMjAx
My94ZW5jb250cm9sL3hlbmNvbnRyb2wudmN4cHJvai5maWx0ZXJzDQo+IG5ldyBmaWxlIG1vZGUg
MTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAuLmM2ZGUwOTkNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysg
Yi92czIwMTMveGVuY29udHJvbC94ZW5jb250cm9sLnZjeHByb2ouZmlsdGVycw0KPiBAQCAtMCww
ICsxLDEzIEBADQo+ICvvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0K
PiArPFByb2plY3QgVG9vbHNWZXJzaW9uPSI0LjAiDQo+IHhtbG5zPSJodHRwOi8vc2NoZW1hcy5t
aWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPg0KPiArICA8SXRlbUdyb3VwPg0K
PiArICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVx4ZW5jb250cm9sLmgiIC8+
DQo+ICsgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNceGVuY29udHJvbFx4ZW5jb250
cm9sX3ByaXZhdGUuaCIgLz4NCj4gKyAgPC9JdGVtR3JvdXA+DQo+ICsgIDxJdGVtR3JvdXA+DQo+
ICsgICAgPFJlc291cmNlQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNceGVuY29udHJvbFx4ZW5j
b250cm9sLnJjIiAvPg0KPiArICA8L0l0ZW1Hcm91cD4NCj4gKyAgPEl0ZW1Hcm91cD4NCj4gKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1x4ZW5jb250cm9sXHhlbmNvbnRyb2wuYyIg
Lz4NCj4gKyAgPC9JdGVtR3JvdXA+DQo+ICs8L1Byb2plY3Q+DQo+IFwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgZmlsZQ0KPiBkaWZmIC0tZ2l0IGEvdnMyMDEzL3hlbmlmYWNlLnNsbiBiL3ZzMjAxMy94
ZW5pZmFjZS5zbG4NCj4gaW5kZXggM2M3NGM3OS4uNzZkMDZiNCAxMDA2NDQNCj4gLS0tIGEvdnMy
MDEzL3hlbmlmYWNlLnNsbg0KPiArKysgYi92czIwMTMveGVuaWZhY2Uuc2xuDQo+IEBAIC0xNyw2
ICsxNyw4IEBAIFByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9
IikNCj4gPSAicGFja2FnZSIsICJwYWNrYWdlXHBhY2thZ2UuDQo+ICAJCXsyRTYxRDJDQy04NjVF
LTQ0MkMtOEM4My1COERBRkQ3QkJEM0J9ID0gezJFNjFEMkNDLQ0KPiA4NjVFLTQ0MkMtOEM4My1C
OERBRkQ3QkJEM0J9DQo+ICAJRW5kUHJvamVjdFNlY3Rpb24NCj4gIEVuZFByb2plY3QNCj4gK1By
b2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAieGVuY29u
dHJvbCIsDQo+ICJ4ZW5jb250cm9sXHhlbmNvbnRyb2wudmN4cHJvaiIsICJ7RDM4NkQ4RTktRDAx
NS00QUQyLUE1QzItDQo+IDRGODQ1QTgwM0ZBMn0iDQo+ICtFbmRQcm9qZWN0DQo+ICBHbG9iYWwN
Cj4gIAlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uQ29uZmlndXJhdGlvblBsYXRmb3JtcykgPSBwcmVT
b2x1dGlvbg0KPiAgCQlXaW5kb3dzIDcgRGVidWd8V2luMzIgPSBXaW5kb3dzIDcgRGVidWd8V2lu
MzINCj4gQEAgLTE2NSw2ICsxNjcsNDIgQEAgR2xvYmFsDQo+ICAJCXs5QjA3MUEzNS04OTdDLTQ3
N0EtQUVCNy05NUY3NzYxOEEyMUR9LldpbmRvd3MgVmlzdGENCj4gUmVsZWFzZXx4NjQuQWN0aXZl
Q2ZnID0gV2luZG93cyBWaXN0YSBSZWxlYXNlfHg2NA0KPiAgCQl7OUIwNzFBMzUtODk3Qy00NzdB
LUFFQjctOTVGNzc2MThBMjFEfS5XaW5kb3dzIFZpc3RhDQo+IFJlbGVhc2V8eDY0LkJ1aWxkLjAg
PSBXaW5kb3dzIFZpc3RhIFJlbGVhc2V8eDY0DQo+ICAJCXs5QjA3MUEzNS04OTdDLTQ3N0EtQUVC
Ny05NUY3NzYxOEEyMUR9LldpbmRvd3MgVmlzdGENCj4gUmVsZWFzZXx4NjQuRGVwbG95LjAgPSBX
aW5kb3dzIFZpc3RhIFJlbGVhc2V8eDY0DQo+ICsJCXtEMzg2RDhFOS1EMDE1LTRBRDItQTVDMi00
Rjg0NUE4MDNGQTJ9LldpbmRvd3MgNw0KPiBEZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xX
aW4zMg0KPiArCQl7RDM4NkQ4RTktRDAxNS00QUQyLUE1QzItNEY4NDVBODAzRkEyfS5XaW5kb3dz
IDcNCj4gRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQo+ICsJCXtEMzg2RDhFOS1E
MDE1LTRBRDItQTVDMi00Rjg0NUE4MDNGQTJ9LldpbmRvd3MgNw0KPiBEZWJ1Z3xXaW4zMi5EZXBs
b3kuMCA9IERlYnVnfFdpbjMyDQo+ICsJCXtEMzg2RDhFOS1EMDE1LTRBRDItQTVDMi00Rjg0NUE4
MDNGQTJ9LldpbmRvd3MgNw0KPiBEZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQo+ICsJ
CXtEMzg2RDhFOS1EMDE1LTRBRDItQTVDMi00Rjg0NUE4MDNGQTJ9LldpbmRvd3MgNw0KPiBEZWJ1
Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KPiArCQl7RDM4NkQ4RTktRDAxNS00QUQyLUE1QzIt
NEY4NDVBODAzRkEyfS5XaW5kb3dzIDcNCj4gRGVidWd8eDY0LkRlcGxveS4wID0gRGVidWd8eDY0
DQo+ICsJCXtEMzg2RDhFOS1EMDE1LTRBRDItQTVDMi00Rjg0NUE4MDNGQTJ9LldpbmRvd3MgNw0K
PiBSZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCj4gKwkJe0QzODZEOEU5
LUQwMTUtNEFEMi1BNUMyLTRGODQ1QTgwM0ZBMn0uV2luZG93cyA3DQo+IFJlbGVhc2V8V2luMzIu
QnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCj4gKwkJe0QzODZEOEU5LUQwMTUtNEFEMi1BNUMyLTRG
ODQ1QTgwM0ZBMn0uV2luZG93cyA3DQo+IFJlbGVhc2V8V2luMzIuRGVwbG95LjAgPSBSZWxlYXNl
fFdpbjMyDQo+ICsJCXtEMzg2RDhFOS1EMDE1LTRBRDItQTVDMi00Rjg0NUE4MDNGQTJ9LldpbmRv
d3MgNw0KPiBSZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KPiArCQl7RDM4NkQ4
RTktRDAxNS00QUQyLUE1QzItNEY4NDVBODAzRkEyfS5XaW5kb3dzIDcNCj4gUmVsZWFzZXx4NjQu
QnVpbGQuMCA9IFJlbGVhc2V8eDY0DQo+ICsJCXtEMzg2RDhFOS1EMDE1LTRBRDItQTVDMi00Rjg0
NUE4MDNGQTJ9LldpbmRvd3MgNw0KPiBSZWxlYXNlfHg2NC5EZXBsb3kuMCA9IFJlbGVhc2V8eDY0
DQo+ICsJCXtEMzg2RDhFOS1EMDE1LTRBRDItQTVDMi00Rjg0NUE4MDNGQTJ9LldpbmRvd3MNCj4g
RGV2ZWxvcGVyIFByZXZpZXcgRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCj4g
KwkJe0QzODZEOEU5LUQwMTUtNEFEMi1BNUMyLTRGODQ1QTgwM0ZBMn0uV2luZG93cw0KPiBEZXZl
bG9wZXIgUHJldmlldyBEZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCj4gKwkJe0Qz
ODZEOEU5LUQwMTUtNEFEMi1BNUMyLTRGODQ1QTgwM0ZBMn0uV2luZG93cw0KPiBEZXZlbG9wZXIg
UHJldmlldyBEZWJ1Z3xXaW4zMi5EZXBsb3kuMCA9IERlYnVnfFdpbjMyDQo+ICsJCXtEMzg2RDhF
OS1EMDE1LTRBRDItQTVDMi00Rjg0NUE4MDNGQTJ9LldpbmRvd3MNCj4gRGV2ZWxvcGVyIFByZXZp
ZXcgRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KPiArCQl7RDM4NkQ4RTktRDAxNS00
QUQyLUE1QzItNEY4NDVBODAzRkEyfS5XaW5kb3dzDQo+IERldmVsb3BlciBQcmV2aWV3IERlYnVn
fHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQo+ICsJCXtEMzg2RDhFOS1EMDE1LTRBRDItQTVDMi00
Rjg0NUE4MDNGQTJ9LldpbmRvd3MNCj4gRGV2ZWxvcGVyIFByZXZpZXcgRGVidWd8eDY0LkRlcGxv
eS4wID0gRGVidWd8eDY0DQo+ICsJCXtEMzg2RDhFOS1EMDE1LTRBRDItQTVDMi00Rjg0NUE4MDNG
QTJ9LldpbmRvd3MNCj4gRGV2ZWxvcGVyIFByZXZpZXcgUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcg
PSBSZWxlYXNlfFdpbjMyDQo+ICsJCXtEMzg2RDhFOS1EMDE1LTRBRDItQTVDMi00Rjg0NUE4MDNG
QTJ9LldpbmRvd3MNCj4gRGV2ZWxvcGVyIFByZXZpZXcgUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0g
UmVsZWFzZXxXaW4zMg0KPiArCQl7RDM4NkQ4RTktRDAxNS00QUQyLUE1QzItNEY4NDVBODAzRkEy
fS5XaW5kb3dzDQo+IERldmVsb3BlciBQcmV2aWV3IFJlbGVhc2V8V2luMzIuRGVwbG95LjAgPSBS
ZWxlYXNlfFdpbjMyDQo+ICsJCXtEMzg2RDhFOS1EMDE1LTRBRDItQTVDMi00Rjg0NUE4MDNGQTJ9
LldpbmRvd3MNCj4gRGV2ZWxvcGVyIFByZXZpZXcgUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVs
ZWFzZXx4NjQNCj4gKwkJe0QzODZEOEU5LUQwMTUtNEFEMi1BNUMyLTRGODQ1QTgwM0ZBMn0uV2lu
ZG93cw0KPiBEZXZlbG9wZXIgUHJldmlldyBSZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4
NjQNCj4gKwkJe0QzODZEOEU5LUQwMTUtNEFEMi1BNUMyLTRGODQ1QTgwM0ZBMn0uV2luZG93cw0K
PiBEZXZlbG9wZXIgUHJldmlldyBSZWxlYXNlfHg2NC5EZXBsb3kuMCA9IFJlbGVhc2V8eDY0DQo+
ICsJCXtEMzg2RDhFOS1EMDE1LTRBRDItQTVDMi00Rjg0NUE4MDNGQTJ9LldpbmRvd3MgVmlzdGEN
Cj4gRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCj4gKwkJe0QzODZEOEU5LUQw
MTUtNEFEMi1BNUMyLTRGODQ1QTgwM0ZBMn0uV2luZG93cyBWaXN0YQ0KPiBEZWJ1Z3xXaW4zMi5C
dWlsZC4wID0gRGVidWd8V2luMzINCj4gKwkJe0QzODZEOEU5LUQwMTUtNEFEMi1BNUMyLTRGODQ1
QTgwM0ZBMn0uV2luZG93cyBWaXN0YQ0KPiBEZWJ1Z3xXaW4zMi5EZXBsb3kuMCA9IERlYnVnfFdp
bjMyDQo+ICsJCXtEMzg2RDhFOS1EMDE1LTRBRDItQTVDMi00Rjg0NUE4MDNGQTJ9LldpbmRvd3Mg
VmlzdGENCj4gRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KPiArCQl7RDM4NkQ4RTkt
RDAxNS00QUQyLUE1QzItNEY4NDVBODAzRkEyfS5XaW5kb3dzIFZpc3RhDQo+IERlYnVnfHg2NC5C
dWlsZC4wID0gRGVidWd8eDY0DQo+ICsJCXtEMzg2RDhFOS1EMDE1LTRBRDItQTVDMi00Rjg0NUE4
MDNGQTJ9LldpbmRvd3MgVmlzdGENCj4gRGVidWd8eDY0LkRlcGxveS4wID0gRGVidWd8eDY0DQo+
ICsJCXtEMzg2RDhFOS1EMDE1LTRBRDItQTVDMi00Rjg0NUE4MDNGQTJ9LldpbmRvd3MgVmlzdGEN
Cj4gUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQo+ICsJCXtEMzg2RDhF
OS1EMDE1LTRBRDItQTVDMi00Rjg0NUE4MDNGQTJ9LldpbmRvd3MgVmlzdGENCj4gUmVsZWFzZXxX
aW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KPiArCQl7RDM4NkQ4RTktRDAxNS00QUQyLUE1
QzItNEY4NDVBODAzRkEyfS5XaW5kb3dzIFZpc3RhDQo+IFJlbGVhc2V8V2luMzIuRGVwbG95LjAg
PSBSZWxlYXNlfFdpbjMyDQo+ICsJCXtEMzg2RDhFOS1EMDE1LTRBRDItQTVDMi00Rjg0NUE4MDNG
QTJ9LldpbmRvd3MgVmlzdGENCj4gUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQN
Cj4gKwkJe0QzODZEOEU5LUQwMTUtNEFEMi1BNUMyLTRGODQ1QTgwM0ZBMn0uV2luZG93cyBWaXN0
YQ0KPiBSZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCj4gKwkJe0QzODZEOEU5LUQw
MTUtNEFEMi1BNUMyLTRGODQ1QTgwM0ZBMn0uV2luZG93cyBWaXN0YQ0KPiBSZWxlYXNlfHg2NC5E
ZXBsb3kuMCA9IFJlbGVhc2V8eDY0DQo+ICAJRW5kR2xvYmFsU2VjdGlvbg0KPiAgCUdsb2JhbFNl
Y3Rpb24oU29sdXRpb25Qcm9wZXJ0aWVzKSA9IHByZVNvbHV0aW9uDQo+ICAJCUhpZGVTb2x1dGlv
bk5vZGUgPSBGQUxTRQ0KPiAtLQ0KPiAxLjguMS5tc3lzZ2l0LjENCj4gDQo+IA0KPiBfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KPiB3aW4tcHYtZGV2ZWwg
bWFpbGluZyBsaXN0DQo+IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZw0KPiBodHRw
Oi8vbGlzdHMueGVucHJvamVjdC5vcmcvY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL3dpbi1wdi1k
ZXZlbA0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18Kd2lu
LXB2LWRldmVsIG1haWxpbmcgbGlzdAp3aW4tcHYtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcK
aHR0cDovL2xpc3RzLnhlbnByb2plY3Qub3JnL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby93aW4t
cHYtZGV2ZWw=

From win-pv-devel-bounces@lists.xenproject.org Thu Nov 05 17:21:53 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Nov 2015 17:21:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZuOET-00031A-Bn; Thu, 05 Nov 2015 17:21:53 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=744ee64bb=Paul.Durrant@citrix.com>)
	id 1ZuOER-00030n-MT
	for win-pv-devel@lists.xenproject.org; Thu, 05 Nov 2015 17:21:52 +0000
Received: from [85.158.137.68] by server-8.bemta-3.messagelabs.com id
	E4/19-31069-57E5B365; Thu, 05 Nov 2015 13:49:41 +0000
X-Env-Sender: prvs=744ee64bb=Paul.Durrant@citrix.com
X-Msg-Ref: server-8.tower-31.messagelabs.com!1446731380!1368884!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 52780 invoked from network); 5 Nov 2015 13:49:40 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-8.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	5 Nov 2015 13:49:40 -0000
X-IronPort-AV: E=Sophos;i="5.20,247,1444694400"; 
   d="scan'208";a="7003346"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: =?utf-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [PATCH 2/2] Add a user mode library wrapper for
	XENIFACE IOCTLs
Thread-Index: AQHRFrqyPejT2I+4AEqmfVGcoyDY5p6Ncprw
Date: Thu, 5 Nov 2015 13:49:35 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F660BB6@AMSPEX01CL01.citrite.net>
References: <56398BC0.1040909@invisiblethingslab.com>
In-Reply-To: <56398BC0.1040909@invisiblethingslab.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] [PATCH 2/2] Add a user mode library wrapper
	for	XENIFACE IOCTLs
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiB3aW4tcHYtZGV2ZWwtYm91bmNl
c0BsaXN0cy54ZW5wcm9qZWN0Lm9yZyBbbWFpbHRvOndpbi1wdi1kZXZlbC0NCj4gYm91bmNlc0Bs
aXN0cy54ZW5wcm9qZWN0Lm9yZ10gT24gQmVoYWxmIE9mIFJhZmFsIFdvamR5bGENCj4gU2VudDog
MDQgTm92ZW1iZXIgMjAxNSAwNDozOA0KPiBUbzogd2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2pl
Y3Qub3JnDQo+IFN1YmplY3Q6IFt3aW4tcHYtZGV2ZWxdIFtQQVRDSCAyLzJdIEFkZCBhIHVzZXIg
bW9kZSBsaWJyYXJ5IHdyYXBwZXIgZm9yDQo+IFhFTklGQUNFIElPQ1RMcw0KPiANCj4gU2lnbmVk
LW9mZi1ieTogUmFmYWwgV29qZHlsYSA8b21lZ0BpbnZpc2libGV0aGluZ3NsYWIuY29tPg0KDQpG
b3Igc29tZSByZWFzb24gdGhpcyBnb3QgYmFzZTY0IGVuY29kZWQgb24gZ21hbmUgc28gSSBjYW4n
dCBlYXNpbHkgYXBwbHkuIExvb2tzIGxpa2UgeW91IGhhdmUgbm9uLWFzY2lpIGluIHRoZSB2Y3hw
cm9qIGZpbGVzOg0KDQorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCg0K
VmlzdWFsIFN0dWRpbyBkb2VzIHRoaXMgYnV0IGRvZXNuJ3Qgb2JqZWN0IHRvIGxvYWRpbmcgdGhl
IGZpbGVzIGlmIHlvdSByZW1vdmUgaXQuIFNvLCBjb3VsZCB5b3UgY2xlYW4gdGhhdCBvdXQgYW5k
IHJlLXNlbmQgdGhlIHBhdGNoPw0KDQpUaGFua3MsDQoNCiAgUGF1bA0KDQo+IC0tLQ0KPiAgaW5j
bHVkZS94ZW5jb250cm9sLmggICAgICAgICAgICAgICAgICAgICAgICAgfCAzNDIgKysrKysrKysr
Kw0KPiAgc3JjL3hlbmNvbnRyb2wveGVuY29udHJvbC5jICAgICAgICAgICAgICAgICAgfCA5MTUN
Cj4gKysrKysrKysrKysrKysrKysrKysrKysrKysrDQo+ICBzcmMveGVuY29udHJvbC94ZW5jb250
cm9sLnJjICAgICAgICAgICAgICAgICB8ICAyNCArDQo+ICBzcmMveGVuY29udHJvbC94ZW5jb250
cm9sX3ByaXZhdGUuaCAgICAgICAgICB8ICA0OSArKw0KPiAgdnMyMDEzL3hlbmNvbnRyb2wucHJv
cHMgICAgICAgICAgICAgICAgICAgICAgfCAgODQgKysrDQo+ICB2czIwMTMveGVuY29udHJvbC94
ZW5jb250cm9sLnZjeHByb2ogICAgICAgICB8ICA2MiArKw0KPiAgdnMyMDEzL3hlbmNvbnRyb2wv
eGVuY29udHJvbC52Y3hwcm9qLmZpbHRlcnMgfCAgMTMgKw0KPiAgdnMyMDEzL3hlbmlmYWNlLnNs
biAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMzggKysNCj4gIDggZmlsZXMgY2hhbmdlZCwg
MTUyNyBpbnNlcnRpb25zKCspDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS94ZW5jb250
cm9sLmgNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMveGVuY29udHJvbC94ZW5jb250cm9sLmMN
Cj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMveGVuY29udHJvbC94ZW5jb250cm9sLnJjDQo+ICBj
cmVhdGUgbW9kZSAxMDA2NDQgc3JjL3hlbmNvbnRyb2wveGVuY29udHJvbF9wcml2YXRlLmgNCj4g
IGNyZWF0ZSBtb2RlIDEwMDY0NCB2czIwMTMveGVuY29udHJvbC5wcm9wcw0KPiAgY3JlYXRlIG1v
ZGUgMTAwNjQ0IHZzMjAxMy94ZW5jb250cm9sL3hlbmNvbnRyb2wudmN4cHJvag0KPiAgY3JlYXRl
IG1vZGUgMTAwNjQ0IHZzMjAxMy94ZW5jb250cm9sL3hlbmNvbnRyb2wudmN4cHJvai5maWx0ZXJz
DQo+IA0KPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS94ZW5jb250cm9sLmggYi9pbmNsdWRlL3hlbmNv
bnRyb2wuaA0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwLi4wYTJmOGYy
DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvaW5jbHVkZS94ZW5jb250cm9sLmgNCj4gQEAgLTAs
MCArMSwzNDIgQEANCj4gKyNpZm5kZWYgX1hFTkNPTlRST0xfSF8NCj4gKyNkZWZpbmUgX1hFTkNP
TlRST0xfSF8NCj4gKw0KPiArI2luY2x1ZGUgPHdpbmRvd3MuaD4NCj4gKyNpbmNsdWRlIDx2YXJh
cmdzLmg+DQo+ICsjaW5jbHVkZSAieGVuaWZhY2VfaW9jdGxzLmgiDQo+ICsNCj4gKyNpZmRlZiBY
RU5DT05UUk9MX0VYUE9SVFMNCj4gKyMgICAgZGVmaW5lIFhFTkNPTlRST0xfQVBJIF9fZGVjbHNw
ZWMoZGxsZXhwb3J0KQ0KPiArI2Vsc2UNCj4gKyMgICAgZGVmaW5lIFhFTkNPTlRST0xfQVBJIF9f
ZGVjbHNwZWMoZGxsaW1wb3J0KQ0KPiArI2VuZGlmDQo+ICsNCj4gKyNpZmRlZiBfX2NwbHVzcGx1
cw0KPiArZXh0ZXJuICJDIiB7DQo+ICsjZW5kaWYNCj4gKw0KPiArLyohIFx0eXBlZGVmIFBYRU5D
T05UUk9MX0NPTlRFWFQNCj4gKyAgICBcYnJpZWYgTGlicmFyeSBoYW5kbGUgcmVwcmVzZW50aW5n
IGEgWGVuIEludGVyZmFjZSBzZXNzaW9uDQo+ICsqLw0KPiArc3RydWN0IF9YRU5DT05UUk9MX0NP
TlRFWFQ7DQo+ICt0eXBlZGVmIHN0cnVjdCBfWEVOQ09OVFJPTF9DT05URVhUICpQWEVOQ09OVFJP
TF9DT05URVhUOw0KPiArDQo+ICsvKiEgXHR5cGVkZWYgWEVOQ09OVFJPTF9MT0dfTEVWRUwNCj4g
KyAgICBcYnJpZWYgTG9nIGxldmVscyB1c2VkIGJ5IHRoZSBsaWJyYXJ5DQo+ICsqLw0KPiArdHlw
ZWRlZiBlbnVtDQo+ICtfWEVOQ09OVFJPTF9MT0dfTEVWRUwgew0KPiArICAgIFhMTF9FUlJPUiA9
IDEsDQo+ICsgICAgWExMX1dBUk5JTkcsDQo+ICsgICAgWExMX0lORk8sDQo+ICsgICAgWExMX0RF
QlVHLA0KPiArICAgIFhMTF9UUkFDRSwNCj4gK30gWEVOQ09OVFJPTF9MT0dfTEVWRUw7DQo+ICsN
Cj4gKy8qISBcdHlwZWRlZiBYRU5DT05UUk9MX0xPR0dFUg0KPiArICAgIFxicmllZiBDYWxsYmFj
ayBmb3IgcmVjZWl2aW5nIGRpYWdub3N0aWMgbWVzc2FnZXMgZnJvbSB0aGUgbGlicmFyeQ0KPiAr
Ki8NCj4gK3R5cGVkZWYgdm9pZA0KPiArWEVOQ09OVFJPTF9MT0dHRVIoDQo+ICsgICAgSU4gIFhF
TkNPTlRST0xfTE9HX0xFVkVMIExvZ0xldmVsLA0KPiArICAgIElOICBjb25zdCBDSEFSICpGdW5j
dGlvbiwNCj4gKyAgICBJTiAgY29uc3QgV0NIQVIgKk1lc3NhZ2UsDQo+ICsgICAgSU4gIHZhX2xp
c3QgQXJncw0KPiArICAgICk7DQo+ICsNCj4gKy8qISBcYnJpZWYgUmVnaXN0ZXIgYSBjYWxsYmFj
ayBmb3IgcmVjZWl2aW5nIGxpYnJhcnkncyBkaWFnbm9zdGljIG1lc3NhZ2VzDQo+ICsgICAgXHBh
cmFtIFhjIFhlbmNvbnRyb2wgaGFuZGxlIHJldHVybmVkIGJ5IFhjT3BlbigpDQo+ICsgICAgXHBh
cmFtIExvZ2dlciBDYWxsYmFjayB0byByZWdpc3Rlcg0KPiArKi8NCj4gK1hFTkNPTlRST0xfQVBJ
DQo+ICt2b2lkDQo+ICtYY1JlZ2lzdGVyTG9nZ2VyKA0KPiArICAgIElOICBQWEVOQ09OVFJPTF9D
T05URVhUIFhjLA0KPiArICAgIElOICBYRU5DT05UUk9MX0xPR0dFUiAqTG9nZ2VyDQo+ICsgICAg
KTsNCj4gKw0KPiArLyohIFxicmllZiBTZXQgbG9nIGxldmVsIHRocmVzaG9sZCBmb3IgbGlicmFy
eSdzIGRpYWdub3N0aWMgbWVzc2FnZXMNCj4gKyAgICBccGFyYW0gWGMgWGVuY29udHJvbCBoYW5k
bGUgcmV0dXJuZWQgYnkgWGNPcGVuKCkNCj4gKyAgICBccGFyYW0gTG9nTGV2ZWwgT25seSBtZXNz
YWdlcyB3aXRoIHRoaXMgbGV2ZWwgYW5kIGFib3ZlIHdpbGwgYmUgc2VudCB0bw0KPiB0aGUgbG9n
Z2VyIGNhbGxiYWNrDQo+ICsqLw0KPiArWEVOQ09OVFJPTF9BUEkNCj4gK3ZvaWQNCj4gK1hjU2V0
TG9nTGV2ZWwoDQo+ICsgICAgSU4gIFBYRU5DT05UUk9MX0NPTlRFWFQgWGMsDQo+ICsgICAgSU4g
IFhFTkNPTlRST0xfTE9HX0xFVkVMIExvZ0xldmVsDQo+ICsgICAgKTsNCj4gKw0KPiArLyohIFxi
cmllZiBPcGVuIHRoZSBYZW4gSW50ZXJmYWNlIGRldmljZQ0KPiArICAgIFxwYXJhbSBMb2dnZXIg
Q2FsbGJhY2sgZm9yIHJlY2VpdmluZyBsaWJyYXJ5J3MgZGlhZ25vc3RpYyBtZXNzYWdlcw0KPiAr
ICAgIFxwYXJhbSBYYyBYZW5jb250cm9sIGhhbmRsZSByZXByZXNlbnRpbmcgYSBYZW4gSW50ZXJm
YWNlIHNlc3Npb24NCj4gKyAgICBccmV0dXJuIEVycm9yIGNvZGUNCj4gKyovDQo+ICtYRU5DT05U
Uk9MX0FQSQ0KPiArRFdPUkQNCj4gK1hjT3BlbigNCj4gKyAgICBJTiAgWEVOQ09OVFJPTF9MT0dH
RVIgKkxvZ2dlciwNCj4gKyAgICBPVVQgUFhFTkNPTlRST0xfQ09OVEVYVCAqWGMNCj4gKyAgICAp
Ow0KPiArDQo+ICsvKiEgXGJyaWVmIENsb3NlIHRoZSBYZW4gSW50ZXJmYWNlIGRldmljZQ0KPiAr
ICAgIFxwYXJhbSBYYyBYZW5jb250cm9sIGhhbmRsZSByZXR1cm5lZCBieSBYY09wZW4oKQ0KPiAr
Ki8NCj4gK1hFTkNPTlRST0xfQVBJDQo+ICt2b2lkDQo+ICtYY0Nsb3NlKA0KPiArICAgIElOICBQ
WEVOQ09OVFJPTF9DT05URVhUIFhjDQo+ICsgICAgKTsNCj4gKw0KPiArLyohIFxicmllZiBPcGVu
IGFuIHVuYm91bmQgZXZlbnQgY2hhbm5lbA0KPiArICAgIFxwYXJhbSBYYyBYZW5jb250cm9sIGhh
bmRsZSByZXR1cm5lZCBieSBYY09wZW4oKQ0KPiArICAgIFxwYXJhbSBSZW1vdGVEb21haW4gSUQg
b2YgYSByZW1vdGUgZG9tYWluIHRoYXQgd2lsbCBiaW5kIHRoZSBjaGFubmVsDQo+ICsgICAgXHBh
cmFtIEV2ZW50IEhhbmRsZSB0byBhbiBldmVudCBvYmplY3QgdGhhdCB3aWxsIHJlY2VpdmUgZXZl
bnQgY2hhbm5lbA0KPiBub3RpZmljYXRpb25zDQo+ICsgICAgXHBhcmFtIE1hc2sgU2V0IHRvIFRS
VUUgaWYgdGhlIGV2ZW50IGNoYW5uZWwgc2hvdWxkIGJlIGluaXRpYWxseSBtYXNrZWQNCj4gKyAg
ICBccGFyYW0gTG9jYWxQb3J0IFBvcnQgbnVtYmVyIHRoYXQgaXMgYXNzaWduZWQgdG8gdGhlIGV2
ZW50IGNoYW5uZWwNCj4gKyAgICBccmV0dXJuIEVycm9yIGNvZGUNCj4gKyovDQo+ICtYRU5DT05U
Uk9MX0FQSQ0KPiArRFdPUkQNCj4gK1hjRXZ0Y2huQmluZFVuYm91bmQoDQo+ICsgICAgSU4gIFBY
RU5DT05UUk9MX0NPTlRFWFQgWGMsDQo+ICsgICAgSU4gIFVTSE9SVCBSZW1vdGVEb21haW4sDQo+
ICsgICAgSU4gIEhBTkRMRSBFdmVudCwNCj4gKyAgICBJTiAgQk9PTCBNYXNrLA0KPiArICAgIE9V
VCBVTE9ORyAqTG9jYWxQb3J0DQo+ICsgICAgKTsNCj4gKw0KPiArLyohIFxicmllZiBPcGVuIGFu
IGV2ZW50IGNoYW5uZWwgdGhhdCB3YXMgYWxyZWFkeSBib3VuZCBieSBhIHJlbW90ZQ0KPiBkb21h
aW4NCj4gKyAgICBccGFyYW0gWGMgWGVuY29udHJvbCBoYW5kbGUgcmV0dXJuZWQgYnkgWGNPcGVu
KCkNCj4gKyAgICBccGFyYW0gUmVtb3RlRG9tYWluIElEIG9mIGEgcmVtb3RlIGRvbWFpbiB0aGF0
IGhhcyBhbHJlYWR5IGJvdW5kDQo+IHRoZSBjaGFubmVsDQo+ICsgICAgXHBhcmFtIFJlbW90ZVBv
cnQgUG9ydCBudW1iZXIgdGhhdCBpcyBhc3NpZ25lZCB0byB0aGUgZXZlbnQgY2hhbm5lbCBpbg0K
PiB0aGUgXGEgUmVtb3RlRG9tYWluDQo+ICsgICAgXHBhcmFtIEV2ZW50IEhhbmRsZSB0byBhbiBl
dmVudCB0aGF0IHdpbGwgcmVjZWl2ZSBldmVudCBjaGFubmVsDQo+IG5vdGlmaWNhdGlvbnMNCj4g
KyAgICBccGFyYW0gTWFzayBTZXQgdG8gVFJVRSBpZiB0aGUgZXZlbnQgb2JqZWN0IGNoYW5uZWwg
c2hvdWxkIGJlIGluaXRpYWxseQ0KPiBtYXNrZWQNCj4gKyAgICBccGFyYW0gTG9jYWxQb3J0IFBv
cnQgbnVtYmVyIHRoYXQgaXMgYXNzaWduZWQgdG8gdGhlIGV2ZW50IGNoYW5uZWwNCj4gKyAgICBc
cmV0dXJuIEVycm9yIGNvZGUNCj4gKyovDQo+ICtYRU5DT05UUk9MX0FQSQ0KPiArRFdPUkQNCj4g
K1hjRXZ0Y2huQmluZEludGVyZG9tYWluKA0KPiArICAgIElOICBQWEVOQ09OVFJPTF9DT05URVhU
IFhjLA0KPiArICAgIElOICBVU0hPUlQgUmVtb3RlRG9tYWluLA0KPiArICAgIElOICBVTE9ORyBS
ZW1vdGVQb3J0LA0KPiArICAgIElOICBIQU5ETEUgRXZlbnQsDQo+ICsgICAgSU4gIEJPT0wgTWFz
aywNCj4gKyAgICBPVVQgVUxPTkcgKkxvY2FsUG9ydA0KPiArICAgICk7DQo+ICsNCj4gKy8qISBc
YnJpZWYgQ2xvc2UgYW4gZXZlbnQgY2hhbm5lbA0KPiArICAgIFxwYXJhbSBYYyBYZW5jb250cm9s
IGhhbmRsZSByZXR1cm5lZCBieSBYY09wZW4oKQ0KPiArICAgIFxwYXJhbSBMb2NhbFBvcnQgUG9y
dCBudW1iZXIgdGhhdCBpcyBhc3NpZ25lZCB0byB0aGUgZXZlbnQgY2hhbm5lbA0KPiArICAgIFxy
ZXR1cm4gRXJyb3IgY29kZQ0KPiArKi8NCj4gK1hFTkNPTlRST0xfQVBJDQo+ICtEV09SRA0KPiAr
WGNFdnRjaG5DbG9zZSgNCj4gKyAgICBJTiAgUFhFTkNPTlRST0xfQ09OVEVYVCBYYywNCj4gKyAg
ICBJTiAgVUxPTkcgTG9jYWxQb3J0DQo+ICsgICAgKTsNCj4gKw0KPiArLyohIFxicmllZiBOb3Rp
ZnkgdGhlIHJlbW90ZSBlbmQgb2YgYW4gZXZlbnQgY2hhbm5lbA0KPiArICAgIFxwYXJhbSBYYyBY
ZW5jb250cm9sIGhhbmRsZSByZXR1cm5lZCBieSBYY09wZW4oKQ0KPiArICAgIFxwYXJhbSBMb2Nh
bFBvcnQgUG9ydCBudW1iZXIgdGhhdCBpcyBhc3NpZ25lZCB0byB0aGUgZXZlbnQgY2hhbm5lbA0K
PiArICAgIFxyZXR1cm4gRXJyb3IgY29kZQ0KPiArKi8NCj4gK1hFTkNPTlRST0xfQVBJDQo+ICtE
V09SRA0KPiArWGNFdnRjaG5Ob3RpZnkoDQo+ICsgICAgSU4gIFBYRU5DT05UUk9MX0NPTlRFWFQg
WGMsDQo+ICsgICAgSU4gIFVMT05HIExvY2FsUG9ydA0KPiArICAgICk7DQo+ICsNCj4gKy8qISBc
YnJpZWYgVW5tYXNrIGFuIGV2ZW50IGNoYW5uZWwNCj4gKyAgICBccGFyYW0gWGMgWGVuY29udHJv
bCBoYW5kbGUgcmV0dXJuZWQgYnkgWGNPcGVuKCkNCj4gKyAgICBccGFyYW0gTG9jYWxQb3J0IFBv
cnQgbnVtYmVyIHRoYXQgaXMgYXNzaWduZWQgdG8gdGhlIGV2ZW50IGNoYW5uZWwNCj4gKyAgICBc
cmV0dXJuIEVycm9yIGNvZGUNCj4gKyovDQo+ICtYRU5DT05UUk9MX0FQSQ0KPiArRFdPUkQNCj4g
K1hjRXZ0Y2huVW5tYXNrKA0KPiArICAgIElOICBQWEVOQ09OVFJPTF9DT05URVhUIFhjLA0KPiAr
ICAgIElOICBVTE9ORyBMb2NhbFBvcnQNCj4gKyAgICApOw0KPiArDQo+ICsvKiEgXGJyaWVmIEdy
YW50IGEgXGEgUmVtb3RlRG9tYWluIHBlcm1pc3Npb24gdG8gYWNjZXNzIGxvY2FsIG1lbW9yeQ0K
PiBwYWdlcw0KPiArICAgIFxwYXJhbSBYYyBYZW5jb250cm9sIGhhbmRsZSByZXR1cm5lZCBieSBY
Y09wZW4oKQ0KPiArICAgIFxwYXJhbSBSZW1vdGVEb21haW4gSUQgb2YgYSByZW1vdGUgZG9tYWlu
IHRoYXQgaXMgYmVpbmcgZ3JhbnRlZA0KPiBhY2Nlc3MNCj4gKyAgICBccGFyYW0gTnVtYmVyUGFn
ZXMgTnVtYmVyIG9mIDRrIHBhZ2VzIHRvIGdyYW50IGFjY2VzcyB0bw0KPiArICAgIFxwYXJhbSBO
b3RpZnlPZmZzZXQgT2Zmc2V0IG9mIGEgYnl0ZSBpbiB0aGUgZ3JhbnRlZCByZWdpb24gdGhhdCB3
aWxsIGJlIHNldA0KPiB0byAwIHdoZW4gdGhlIGdyYW50IGlzIHJldm9rZWQNCj4gKyAgICBccGFy
YW0gTm90aWZ5UG9ydCBMb2NhbCBwb3J0IG51bWJlciBvZiBhbiBvcGVuIGV2ZW50IGNoYW5uZWwg
dGhhdCB3aWxsDQo+IGJlIG5vdGlmaWVkIHdoZW4gdGhlIGdyYW50IGlzIHJldm9rZWQNCj4gKyAg
ICBccGFyYW0gRmxhZ3MgR3JhbnQgb3B0aW9ucw0KPiArICAgIFxwYXJhbSBBZGRyZXNzIExvY2Fs
IHVzZXIgbW9kZSBhZGRyZXNzIG9mIHRoZSBncmFudGVkIG1lbW9yeSByZWdpb24NCj4gKyAgICBc
cGFyYW0gUmVmZXJlbmNlcyBBbiBhcnJheSBvZiBYZW4gZ3JhbnQgbnVtYmVycyBmb3IgZXZlcnkg
Z3JhbnRlZA0KPiBwYWdlDQo+ICsgICAgXHJldHVybiBFcnJvciBjb2RlDQo+ICsqLw0KPiArWEVO
Q09OVFJPTF9BUEkNCj4gK0RXT1JEDQo+ICtYY0dudHRhYlBlcm1pdEZvcmVpZ25BY2Nlc3MoDQo+
ICsgICAgSU4gIFBYRU5DT05UUk9MX0NPTlRFWFQgWGMsDQo+ICsgICAgSU4gIFVTSE9SVCBSZW1v
dGVEb21haW4sDQo+ICsgICAgSU4gIFVMT05HIE51bWJlclBhZ2VzLA0KPiArICAgIElOICBVTE9O
RyBOb3RpZnlPZmZzZXQsDQo+ICsgICAgSU4gIFVMT05HIE5vdGlmeVBvcnQsDQo+ICsgICAgSU4g
IFhFTklGQUNFX0dOVFRBQl9QQUdFX0ZMQUdTIEZsYWdzLA0KPiArICAgIE9VVCBQVk9JRCAqQWRk
cmVzcywNCj4gKyAgICBPVVQgVUxPTkcgKlJlZmVyZW5jZXMNCj4gKyAgICApOw0KPiArDQo+ICsv
KiEgXGJyaWVmIFJldm9rZSBhIGZvcmVpZ24gZG9tYWluIGFjY2VzcyB0byBwcmV2aW91c2x5IGdy
YW50ZWQgbWVtb3J5DQo+IHJlZ2lvbg0KPiArICAgIFxwYXJhbSBYYyBYZW5jb250cm9sIGhhbmRs
ZSByZXR1cm5lZCBieSBYY09wZW4oKQ0KPiArICAgIFxwYXJhbSBBZGRyZXNzIExvY2FsIHVzZXIg
bW9kZSBhZGRyZXNzIG9mIHRoZSBncmFudGVkIG1lbW9yeSByZWdpb24NCj4gKyAgICBccmV0dXJu
IEVycm9yIGNvZGUNCj4gKyovDQo+ICtYRU5DT05UUk9MX0FQSQ0KPiArRFdPUkQNCj4gK1hjR250
dGFiUmV2b2tlRm9yZWlnbkFjY2VzcygNCj4gKyAgICBJTiAgUFhFTkNPTlRST0xfQ09OVEVYVCBY
YywNCj4gKyAgICBJTiAgUFZPSUQgQWRkcmVzcw0KPiArICAgICk7DQo+ICsNCj4gKy8qISBcYnJp
ZWYgTWFwIGEgZm9yZWlnbiBtZW1vcnkgcmVnaW9uIGludG8gdGhlIGN1cnJlbnQgYWRkcmVzcyBz
cGFjZQ0KPiArICAgIFxwYXJhbSBYYyBYZW5jb250cm9sIGhhbmRsZSByZXR1cm5lZCBieSBYY09w
ZW4oKQ0KPiArICAgIFxwYXJhbSBSZW1vdGVEb21haW4gSUQgb2YgYSByZW1vdGUgZG9tYWluIHRo
YXQgaGFzIGdyYW50ZWQgYWNjZXNzIHRvDQo+IHRoZSBwYWdlcw0KPiArICAgIFxwYXJhbSBOdW1i
ZXJQYWdlcyBOdW1iZXIgb2YgNGsgcGFnZXMgdG8gbWFwDQo+ICsgICAgXHBhcmFtIFJlZmVyZW5j
ZXMgQW4gYXJyYXkgb2YgWGVuIGdyYW50IG51bWJlcnMgZm9yIGV2ZXJ5IGdyYW50ZWQNCj4gcGFn
ZQ0KPiArICAgIFxwYXJhbSBOb3RpZnlPZmZzZXQgT2Zmc2V0IG9mIGEgYnl0ZSBpbiB0aGUgbWFw
cGVkIHJlZ2lvbiB0aGF0IHdpbGwgYmUgc2V0DQo+IHRvIDAgd2hlbiB0aGUgcmVnaW9uIGlzIHVu
bWFwcGVkDQo+ICsgICAgXHBhcmFtIE5vdGlmeVBvcnQgTG9jYWwgcG9ydCBudW1iZXIgb2YgYW4g
b3BlbiBldmVudCBjaGFubmVsIHRoYXQgd2lsbA0KPiBiZSBub3RpZmllZCB3aGVuIHRoZSByZWdp
b24gaXMgdW5tYXBwZWQNCj4gKyAgICBccGFyYW0gRmxhZ3MgTWFwIG9wdGlvbnMNCj4gKyAgICBc
cGFyYW0gQWRkcmVzcyBMb2NhbCB1c2VyIG1vZGUgYWRkcmVzcyBvZiB0aGUgbWFwcGVkIG1lbW9y
eSByZWdpb24NCj4gKyAgICBccmV0dXJuIEVycm9yIGNvZGUNCj4gKyovDQo+ICtYRU5DT05UUk9M
X0FQSQ0KPiArRFdPUkQNCj4gK1hjR250dGFiTWFwRm9yZWlnblBhZ2VzKA0KPiArICAgIElOICBQ
WEVOQ09OVFJPTF9DT05URVhUIFhjLA0KPiArICAgIElOICBVU0hPUlQgUmVtb3RlRG9tYWluLA0K
PiArICAgIElOICBVTE9ORyBOdW1iZXJQYWdlcywNCj4gKyAgICBJTiAgUFVMT05HIFJlZmVyZW5j
ZXMsDQo+ICsgICAgSU4gIFVMT05HIE5vdGlmeU9mZnNldCwNCj4gKyAgICBJTiAgVUxPTkcgTm90
aWZ5UG9ydCwNCj4gKyAgICBJTiAgWEVOSUZBQ0VfR05UVEFCX1BBR0VfRkxBR1MgRmxhZ3MsDQo+
ICsgICAgT1VUIFBWT0lEICpBZGRyZXNzDQo+ICsgICAgKTsNCj4gKw0KPiArLyohIFxicmllZiBV
bm1hcCBhIGZvcmVpZ24gbWVtb3J5IHJlZ2lvbiBmcm9tIHRoZSBjdXJyZW50IGFkZHJlc3Mgc3Bh
Y2UNCj4gKyAgICBccGFyYW0gWGMgWGVuY29udHJvbCBoYW5kbGUgcmV0dXJuZWQgYnkgWGNPcGVu
KCkNCj4gKyAgICBccGFyYW0gQWRkcmVzcyBMb2NhbCB1c2VyIG1vZGUgYWRkcmVzcyBvZiB0aGUg
bWFwcGVkIG1lbW9yeSByZWdpb24NCj4gKyAgICBccmV0dXJuIEVycm9yIGNvZGUNCj4gKyovDQo+
ICtYRU5DT05UUk9MX0FQSQ0KPiArRFdPUkQNCj4gK1hjR250dGFiVW5tYXBGb3JlaWduUGFnZXMo
DQo+ICsgICAgSU4gIFBYRU5DT05UUk9MX0NPTlRFWFQgWGMsDQo+ICsgICAgSU4gIFBWT0lEIEFk
ZHJlc3MNCj4gKyAgICApOw0KPiArDQo+ICsvKiEgXGJyaWVmIFJlYWQgYSBYZW5TdG9yZSBrZXkN
Cj4gKyAgICBccGFyYW0gWGMgWGVuY29udHJvbCBoYW5kbGUgcmV0dXJuZWQgYnkgWGNPcGVuKCkN
Cj4gKyAgICBccGFyYW0gUGF0aCBQYXRoIHRvIHRoZSBrZXkNCj4gKyAgICBccGFyYW0gY2JWYWx1
ZSBTaXplIG9mIHRoZSBcYSBWYWx1ZSBidWZmZXIsIGluIGJ5dGVzDQo+ICsgICAgXHBhcmFtIFZh
bHVlIEJ1ZmZlciB0aGF0IHJlY2VpdmVzIHRoZSB2YWx1ZQ0KPiArICAgIFxyZXR1cm4gRXJyb3Ig
Y29kZQ0KPiArKi8NCj4gK1hFTkNPTlRST0xfQVBJDQo+ICtEV09SRA0KPiArWGNTdG9yZVJlYWQo
DQo+ICsgICAgSU4gIFBYRU5DT05UUk9MX0NPTlRFWFQgWGMsDQo+ICsgICAgSU4gIFBDSEFSIFBh
dGgsDQo+ICsgICAgSU4gIERXT1JEIGNiVmFsdWUsDQo+ICsgICAgT1VUIENIQVIgKlZhbHVlDQo+
ICsgICAgKTsNCj4gKw0KPiArLyohIFxicmllZiBXcml0ZSBhIHZhbHVlIHRvIGEgWGVuU3RvcmUg
a2V5DQo+ICsgICAgXHBhcmFtIFhjIFhlbmNvbnRyb2wgaGFuZGxlIHJldHVybmVkIGJ5IFhjT3Bl
bigpDQo+ICsgICAgXHBhcmFtIFBhdGggUGF0aCB0byB0aGUga2V5DQo+ICsgICAgXHBhcmFtIFZh
bHVlIFZhbHVlIHRvIHdyaXRlDQo+ICsgICAgXHJldHVybiBFcnJvciBjb2RlDQo+ICsqLw0KPiAr
WEVOQ09OVFJPTF9BUEkNCj4gK0RXT1JEDQo+ICtYY1N0b3JlV3JpdGUoDQo+ICsgICAgSU4gIFBY
RU5DT05UUk9MX0NPTlRFWFQgWGMsDQo+ICsgICAgSU4gIFBDSEFSIFBhdGgsDQo+ICsgICAgSU4g
IFBDSEFSIFZhbHVlDQo+ICsgICAgKTsNCj4gKw0KPiArLyohIFxicmllZiBFbnVtZXJhdGUgYWxs
IGltbWVkaWF0ZSBjaGlsZCBrZXlzIG9mIGEgWGVuU3RvcmUga2V5DQo+ICsgICAgXHBhcmFtIFhj
IFhlbmNvbnRyb2wgaGFuZGxlIHJldHVybmVkIGJ5IFhjT3BlbigpDQo+ICsgICAgXHBhcmFtIFBh
dGggUGF0aCB0byB0aGUga2V5DQo+ICsgICAgXHBhcmFtIGNiT3V0cHV0IFNpemUgb2YgdGhlIFxh
IE91dHB1dCBidWZmZXIsIGluIGJ5dGVzDQo+ICsgICAgXHBhcmFtIE91dHB1dCBCdWZmZXIgdGhh
dCByZWNlaXZlcyBhIE5VTC1zZXBhcmF0ZWQgY2hpbGQga2V5IG5hbWVzDQo+ICsgICAgXHJldHVy
biBFcnJvciBjb2RlDQo+ICsqLw0KPiArWEVOQ09OVFJPTF9BUEkNCj4gK0RXT1JEDQo+ICtYY1N0
b3JlRGlyZWN0b3J5KA0KPiArICAgIElOICBQWEVOQ09OVFJPTF9DT05URVhUIFhjLA0KPiArICAg
IElOICBQQ0hBUiBQYXRoLA0KPiArICAgIElOICBEV09SRCBjYk91dHB1dCwNCj4gKyAgICBPVVQg
Q0hBUiAqT3V0cHV0DQo+ICsgICAgKTsNCj4gKw0KPiArLyohIFxicmllZiBSZW1vdmUgYSBYZW5T
dG9yZSBrZXkNCj4gKyAgICBccGFyYW0gWGMgWGVuY29udHJvbCBoYW5kbGUgcmV0dXJuZWQgYnkg
WGNPcGVuKCkNCj4gKyAgICBccGFyYW0gUGF0aCBQYXRoIHRvIHRoZSBrZXkNCj4gKyAgICBccmV0
dXJuIEVycm9yIGNvZGUNCj4gKyovDQo+ICtYRU5DT05UUk9MX0FQSQ0KPiArRFdPUkQNCj4gK1hj
U3RvcmVSZW1vdmUoDQo+ICsgICAgSU4gIFBYRU5DT05UUk9MX0NPTlRFWFQgWGMsDQo+ICsgICAg
SU4gIFBDSEFSIFBhdGgNCj4gKyAgICApOw0KPiArDQo+ICsvKiEgXGJyaWVmIFNldCBwZXJtaXNz
aW9ucyBvZiBhIFhlblN0b3JlIGtleQ0KPiArICAgIFxwYXJhbSBYYyBYZW5jb250cm9sIGhhbmRs
ZSByZXR1cm5lZCBieSBYY09wZW4oKQ0KPiArICAgIFxwYXJhbSBQYXRoIFBhdGggdG8gdGhlIGtl
eQ0KPiArICAgIFxwYXJhbSBDb3VudCBOdW1iZXIgb2YgcGVybWlzc2lvbnMNCj4gKyAgICBccGFy
YW0gUGVybWlzc2lvbnMgQXJyYXkgb2YgcGVybWlzc2lvbnMgdG8gc2V0DQo+ICsgICAgXHJldHVy
biBFcnJvciBjb2RlDQo+ICsqLw0KPiArWEVOQ09OVFJPTF9BUEkNCj4gK0RXT1JEDQo+ICtYY1N0
b3JlU2V0UGVybWlzc2lvbnMoDQo+ICsgICAgSU4gIFBYRU5DT05UUk9MX0NPTlRFWFQgWGMsDQo+
ICsgICAgSU4gIFBDSEFSIFBhdGgsDQo+ICsgICAgSU4gIFVMT05HIENvdW50LA0KPiArICAgIElO
ICBQWEVOSUZBQ0VfU1RPUkVfUEVSTUlTU0lPTiBQZXJtaXNzaW9ucw0KPiArICAgICk7DQo+ICsN
Cj4gKy8qISBcYnJpZWYgQWRkIGEgWGVuU3RvcmUga2V5IHdhdGNoDQo+ICsgICAgXHBhcmFtIFhj
IFhlbmNvbnRyb2wgaGFuZGxlIHJldHVybmVkIGJ5IFhjT3BlbigpDQo+ICsgICAgXHBhcmFtIFBh
dGggUGF0aCB0byB0aGUga2V5IHRvIGJlIHdhdGNoZWQNCj4gKyAgICBccGFyYW0gRXZlbnQgSGFu
ZGxlIHRvIGFuIGV2ZW50IHRoYXQgd2lsbCBiZSBzaWduYWxlZCB3aGVuIHRoZSB3YXRjaA0KPiBm
aXJlcw0KPiArICAgIFxwYXJhbSBIYW5kbGUgQW4gb3BhcXVlIHZhbHVlIHJlcHJlc2VudGluZyB0
aGUgd2F0Y2gNCj4gKyAgICBccmV0dXJuIEVycm9yIGNvZGUNCj4gKyovDQo+ICtYRU5DT05UUk9M
X0FQSQ0KPiArRFdPUkQNCj4gK1hjU3RvcmVBZGRXYXRjaCgNCj4gKyAgICBJTiAgUFhFTkNPTlRS
T0xfQ09OVEVYVCBYYywNCj4gKyAgICBJTiAgUENIQVIgUGF0aCwNCj4gKyAgICBJTiAgSEFORExF
IEV2ZW50LA0KPiArICAgIE9VVCBQVk9JRCAqSGFuZGxlDQo+ICsgICAgKTsNCj4gKw0KPiArLyoh
IFxicmllZiBSZW1vdmUgYSBYZW5TdG9yZSB3YXRjaA0KPiArICAgIFxwYXJhbSBYYyBYZW5jb250
cm9sIGhhbmRsZSByZXR1cm5lZCBieSBYY09wZW4oKQ0KPiArICAgIFxwYXJhbSBIYW5kbGUgV2F0
Y2ggaGFuZGxlIHJldHVybmVkIGJ5IFhjU3RvcmVBZGRXYXRjaCgpDQo+ICsgICAgXHJldHVybiBF
cnJvciBjb2RlDQo+ICsqLw0KPiArWEVOQ09OVFJPTF9BUEkNCj4gK0RXT1JEDQo+ICtYY1N0b3Jl
UmVtb3ZlV2F0Y2goDQo+ICsgICAgSU4gIFBYRU5DT05UUk9MX0NPTlRFWFQgWGMsDQo+ICsgICAg
SU4gIFBWT0lEIEhhbmRsZQ0KPiArICAgICk7DQo+ICsNCj4gKyNpZmRlZiBfX2NwbHVzcGx1cw0K
PiArfQ0KPiArI2VuZGlmDQo+ICsNCj4gKyNlbmRpZiAvLyBfWEVOQ09OVFJPTF9IXw0KPiBkaWZm
IC0tZ2l0IGEvc3JjL3hlbmNvbnRyb2wveGVuY29udHJvbC5jIGIvc3JjL3hlbmNvbnRyb2wveGVu
Y29udHJvbC5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAuLjkyYWM5
ZDANCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9zcmMveGVuY29udHJvbC94ZW5jb250cm9sLmMN
Cj4gQEAgLTAsMCArMSw5MTUgQEANCj4gKyNkZWZpbmUgSU5JVEdVSUQNCj4gKyNpbmNsdWRlIDx3
aW5kb3dzLmg+DQo+ICsjaW5jbHVkZSA8c2V0dXBhcGkuaD4NCj4gKyNpbmNsdWRlIDxzdGRsaWIu
aD4NCj4gKyNpbmNsdWRlIDxhc3NlcnQuaD4NCj4gKw0KPiArI2luY2x1ZGUgInhlbmNvbnRyb2wu
aCINCj4gKyNpbmNsdWRlICJ4ZW5jb250cm9sX3ByaXZhdGUuaCINCj4gKw0KPiArQk9PTCBBUElF
TlRSWQ0KPiArRGxsTWFpbigNCj4gKyAgICBJTiAgSE1PRFVMRSBNb2R1bGUsDQo+ICsgICAgSU4g
IERXT1JEIFJlYXNvbkZvckNhbGwsDQo+ICsgICAgSU4gIExQVk9JRCBSZXNlcnZlZA0KPiArKQ0K
PiArew0KPiArICAgIHJldHVybiBUUlVFOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZA0KPiAr
X0xvZygNCj4gKyAgICBJTiAgWEVOQ09OVFJPTF9MT0dHRVIgKkxvZ2dlciwNCj4gKyAgICBJTiAg
WEVOQ09OVFJPTF9MT0dfTEVWRUwgTG9nTGV2ZWwsDQo+ICsgICAgSU4gIFhFTkNPTlRST0xfTE9H
X0xFVkVMIEN1cnJlbnRMb2dMZXZlbCwNCj4gKyAgICBJTiAgUENIQVIgRnVuY3Rpb24sDQo+ICsg
ICAgSU4gIFBXQ0hBUiBGb3JtYXQsDQo+ICsgICAgLi4uDQo+ICsgICAgKQ0KPiArew0KPiArICAg
IHZhX2xpc3QgQXJnczsNCj4gKyAgICBEV09SRCBMYXN0RXJyb3I7DQo+ICsNCj4gKyAgICBpZiAo
TG9nZ2VyID09IE5VTEwpDQo+ICsgICAgICAgIHJldHVybjsNCj4gKw0KPiArICAgIGlmIChMb2dM
ZXZlbCA+IEN1cnJlbnRMb2dMZXZlbCkNCj4gKyAgICAgICAgcmV0dXJuOw0KPiArDQo+ICsgICAg
TGFzdEVycm9yID0gR2V0TGFzdEVycm9yKCk7DQo+ICsgICAgdmFfc3RhcnQoQXJncywgRm9ybWF0
KTsNCj4gKyAgICBMb2dnZXIoTG9nTGV2ZWwsIEZ1bmN0aW9uLCBGb3JtYXQsIEFyZ3MpOw0KPiAr
ICAgIHZhX2VuZChBcmdzKTsNCj4gKyAgICBTZXRMYXN0RXJyb3IoTGFzdEVycm9yKTsNCj4gK30N
Cj4gKw0KPiArc3RhdGljIHZvaWQNCj4gK19Mb2dNdWx0aVN6KA0KPiArICAgIElOICBQWEVOQ09O
VFJPTF9DT05URVhUIFhjLA0KPiArICAgIElOICBQQ0hBUiBDYWxsZXIsDQo+ICsgICAgSU4gIFhF
TkNPTlRST0xfTE9HX0xFVkVMIExldmVsLA0KPiArICAgIElOICBQQ0hBUiBNdWx0aVN6DQo+ICsg
ICAgKQ0KPiArew0KPiArICAgIFBDSEFSIFB0cjsNCj4gKyAgICBVTE9ORyBMZW47DQo+ICsNCj4g
KyAgICBmb3IgKFB0ciA9IE11bHRpU3o7ICpQdHI7KSB7DQo+ICsgICAgICAgIExlbiA9IChVTE9O
RylzdHJsZW4oUHRyKTsNCj4gKyAgICAgICAgX0xvZyhYYy0+TG9nZ2VyLCBMZXZlbCwgWGMtPkxv
Z0xldmVsLCBDYWxsZXIsIEwiJVMiLCBQdHIpOw0KPiArICAgICAgICBQdHIgKz0gKExlbiArIDEp
Ow0KPiArICAgIH0NCj4gK30NCj4gKw0KPiArdm9pZA0KPiArWGNSZWdpc3RlckxvZ2dlcigNCj4g
KyAgICBJTiAgUFhFTkNPTlRST0xfQ09OVEVYVCBYYywNCj4gKyAgICBJTiAgWEVOQ09OVFJPTF9M
T0dHRVIgKkxvZ2dlcg0KPiArICAgICkNCj4gK3sNCj4gKyAgICBYYy0+TG9nZ2VyID0gTG9nZ2Vy
Ow0KPiArfQ0KPiArDQo+ICt2b2lkDQo+ICtYY1NldExvZ0xldmVsKA0KPiArICAgIElOICBQWEVO
Q09OVFJPTF9DT05URVhUIFhjLA0KPiArICAgIElOICBYRU5DT05UUk9MX0xPR19MRVZFTCBMb2dM
ZXZlbA0KPiArICAgICkNCj4gK3sNCj4gKyAgICBYYy0+TG9nTGV2ZWwgPSBMb2dMZXZlbDsNCj4g
K30NCj4gKw0KPiArRFdPUkQNCj4gK1hjT3BlbigNCj4gKyAgICBJTiAgWEVOQ09OVFJPTF9MT0dH
RVIgKkxvZ2dlciwNCj4gKyAgICBPVVQgUFhFTkNPTlRST0xfQ09OVEVYVCAqWGMNCj4gKyAgICAp
DQo+ICt7DQo+ICsgICAgSERFVklORk8gRGV2SW5mbzsNCj4gKyAgICBTUF9ERVZJQ0VfSU5URVJG
QUNFX0RBVEEgSW50ZXJmYWNlRGF0YTsNCj4gKyAgICBTUF9ERVZJQ0VfSU5URVJGQUNFX0RFVEFJ
TF9EQVRBICpEZXRhaWxEYXRhID0gTlVMTDsNCj4gKyAgICBEV09SRCBCdWZmZXJTaXplOw0KPiAr
ICAgIFBYRU5DT05UUk9MX0NPTlRFWFQgQ29udGV4dDsNCj4gKw0KPiArICAgIENvbnRleHQgPSBt
YWxsb2Moc2l6ZW9mKCpDb250ZXh0KSk7DQo+ICsgICAgaWYgKENvbnRleHQgPT0gTlVMTCkNCj4g
KyAgICAgICAgcmV0dXJuIEVSUk9SX05PVF9FTk9VR0hfTUVNT1JZOw0KPiArDQo+ICsgICAgQ29u
dGV4dC0+TG9nZ2VyID0gTG9nZ2VyOw0KPiArICAgIENvbnRleHQtPkxvZ0xldmVsID0gWExMX0lO
Rk87DQo+ICsgICAgQ29udGV4dC0+UmVxdWVzdElkID0gMTsNCj4gKyAgICBJbml0aWFsaXplTGlz
dEhlYWQoJkNvbnRleHQtPlJlcXVlc3RMaXN0KTsNCj4gKyAgICBJbml0aWFsaXplQ3JpdGljYWxT
ZWN0aW9uKCZDb250ZXh0LT5SZXF1ZXN0TGlzdExvY2spOw0KPiArDQo+ICsgICAgRGV2SW5mbyA9
IFNldHVwRGlHZXRDbGFzc0RldnMoJkdVSURfSU5URVJGQUNFX1hFTklGQUNFLCAwLCBOVUxMLA0K
PiBESUdDRl9QUkVTRU5UIHwgRElHQ0ZfREVWSUNFSU5URVJGQUNFKTsNCj4gKyAgICBpZiAoRGV2
SW5mbyA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgew0KPiArICAgICAgICBfTG9nKExvZ2dlciwg
WExMX0VSUk9SLCBDb250ZXh0LT5Mb2dMZXZlbCwgX19GVU5DVElPTl9fLA0KPiArICAgICAgICAg
ICAgIEwiWEVOSUZBQ0UgZGV2aWNlIGNsYXNzIGRvZXNuJ3QgZXhpc3QiKTsNCj4gKyAgICAgICAg
Z290byBmYWlsOw0KPiArICAgIH0NCj4gKw0KPiArICAgIEludGVyZmFjZURhdGEuY2JTaXplID0g
c2l6ZW9mKEludGVyZmFjZURhdGEpOw0KPiArICAgIGlmICghU2V0dXBEaUVudW1EZXZpY2VJbnRl
cmZhY2VzKERldkluZm8sIE5VTEwsDQo+ICZHVUlEX0lOVEVSRkFDRV9YRU5JRkFDRSwgMCwgJklu
dGVyZmFjZURhdGEpKSB7DQo+ICsgICAgICAgIF9Mb2coTG9nZ2VyLCBYTExfRVJST1IsIENvbnRl
eHQtPkxvZ0xldmVsLCBfX0ZVTkNUSU9OX18sDQo+ICsgICAgICAgICAgICAgTCJGYWlsZWQgdG8g
ZW51bWVyYXRlIFhFTklGQUNFIGRldmljZXMiKTsNCj4gKyAgICAgICAgZ290byBmYWlsOw0KPiAr
ICAgIH0NCj4gKw0KPiArICAgIFNldHVwRGlHZXREZXZpY2VJbnRlcmZhY2VEZXRhaWwoRGV2SW5m
bywgJkludGVyZmFjZURhdGEsIE5VTEwsIDAsDQo+ICZCdWZmZXJTaXplLCBOVUxMKTsNCj4gKyAg
ICBpZiAoR2V0TGFzdEVycm9yKCkgIT0gRVJST1JfSU5TVUZGSUNJRU5UX0JVRkZFUikgew0KPiAr
ICAgICAgICBfTG9nKExvZ2dlciwgWExMX0VSUk9SLCBDb250ZXh0LT5Mb2dMZXZlbCwgX19GVU5D
VElPTl9fLA0KPiArICAgICAgICAgICAgIEwiRmFpbGVkIHRvIGdldCBidWZmZXIgc2l6ZSBmb3Ig
ZGV2aWNlIGRldGFpbHMiKTsNCj4gKyAgICAgICAgZ290byBmYWlsOw0KPiArICAgIH0NCj4gKw0K
PiArICAgIC8vIFVzaW5nICdCdWZmZXJTaXplJyBmcm9tIGZhaWxlZCBmdW5jdGlvbiBjYWxsDQo+
ICsjcHJhZ21hIHdhcm5pbmcoc3VwcHJlc3M6IDYxMDIpDQo+ICsgICAgRGV0YWlsRGF0YSA9IChT
UF9ERVZJQ0VfSU5URVJGQUNFX0RFVEFJTF9EQVRBICopbWFsbG9jKEJ1ZmZlclNpemUpOw0KPiAr
ICAgIGlmICghRGV0YWlsRGF0YSkgew0KPiArICAgICAgICBTZXRMYXN0RXJyb3IoRVJST1JfT1VU
T0ZNRU1PUlkpOw0KPiArICAgICAgICBnb3RvIGZhaWw7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAg
RGV0YWlsRGF0YS0+Y2JTaXplID0gc2l6ZW9mKFNQX0RFVklDRV9JTlRFUkZBQ0VfREVUQUlMX0RB
VEEpOw0KPiArDQo+ICsgICAgaWYgKCFTZXR1cERpR2V0RGV2aWNlSW50ZXJmYWNlRGV0YWlsKERl
dkluZm8sICZJbnRlcmZhY2VEYXRhLA0KPiBEZXRhaWxEYXRhLCBCdWZmZXJTaXplLCBOVUxMLCBO
VUxMKSkgew0KPiArICAgICAgICBfTG9nKExvZ2dlciwgWExMX0VSUk9SLCBDb250ZXh0LT5Mb2dM
ZXZlbCwgX19GVU5DVElPTl9fLA0KPiArICAgICAgICAgICAgIEwiRmFpbGVkIHRvIGdldCBYRU5J
RkFDRSBkZXZpY2UgcGF0aCIpOw0KPiArICAgICAgICBnb3RvIGZhaWw7DQo+ICsgICAgfQ0KPiAr
DQo+ICsgICAgQ29udGV4dC0+WGVuSWZhY2UgPSBDcmVhdGVGaWxlKERldGFpbERhdGEtPkRldmlj
ZVBhdGgsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEVfR0VORVJJ
Q19SRUFEIHwgRklMRV9HRU5FUklDX1dSSVRFLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAwLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxM
LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPUEVOX0VYSVNUSU5HLA0K
PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFX0FUVFJJQlVURV9OT1JN
QUwgfCBGSUxFX0ZMQUdfT1ZFUkxBUFBFRCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTlVMTCk7DQo+ICsNCj4gKyAgICBpZiAoQ29udGV4dC0+WGVuSWZhY2UgPT0gSU5W
QUxJRF9IQU5ETEVfVkFMVUUpIHsNCj4gKyAgICAgICAgX0xvZyhMb2dnZXIsIFhMTF9FUlJPUiwg
Q29udGV4dC0+TG9nTGV2ZWwsIF9fRlVOQ1RJT05fXywNCj4gKyAgICAgICAgICAgICBMIkZhaWxl
ZCB0byBvcGVuIFhFTklGQUNFIGRldmljZSwgcGF0aDogJXMiLCBEZXRhaWxEYXRhLQ0KPiA+RGV2
aWNlUGF0aCk7DQo+ICsgICAgICAgIGdvdG8gZmFpbDsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBf
TG9nKExvZ2dlciwgWExMX0VSUk9SLCBDb250ZXh0LT5Mb2dMZXZlbCwgX19GVU5DVElPTl9fLA0K
PiArICAgICAgICAgTCJYZW5JZmFjZSBoYW5kbGU6ICVwIiwgQ29udGV4dC0+WGVuSWZhY2UpOw0K
PiArDQo+ICsgICAgZnJlZShEZXRhaWxEYXRhKTsNCj4gKyAgICAqWGMgPSBDb250ZXh0Ow0KPiAr
ICAgIHJldHVybiBFUlJPUl9TVUNDRVNTOw0KPiArDQo+ICtmYWlsOg0KPiArICAgIF9Mb2coTG9n
Z2VyLCBYTExfRVJST1IsIENvbnRleHQtPkxvZ0xldmVsLCBfX0ZVTkNUSU9OX18sDQo+ICsgICAg
ICAgICBMIkVycm9yOiAweCV4IiwgR2V0TGFzdEVycm9yKCkpOw0KPiArDQo+ICsgICAgZnJlZShE
ZXRhaWxEYXRhKTsNCj4gKyAgICByZXR1cm4gR2V0TGFzdEVycm9yKCk7DQo+ICt9DQo+ICsNCj4g
K3ZvaWQNCj4gK1hjQ2xvc2UoDQo+ICsgICAgSU4gIFBYRU5DT05UUk9MX0NPTlRFWFQgWGMNCj4g
KyAgICApDQo+ICt7DQo+ICsgICAgQ2xvc2VIYW5kbGUoWGMtPlhlbklmYWNlKTsNCj4gKyAgICBE
ZWxldGVDcml0aWNhbFNlY3Rpb24oJlhjLT5SZXF1ZXN0TGlzdExvY2spOw0KPiArICAgIGZyZWUo
WGMpOw0KPiArfQ0KPiArDQo+ICtEV09SRA0KPiArWGNFdnRjaG5CaW5kVW5ib3VuZCgNCj4gKyAg
ICBJTiAgUFhFTkNPTlRST0xfQ09OVEVYVCBYYywNCj4gKyAgICBJTiAgVVNIT1JUIFJlbW90ZURv
bWFpbiwNCj4gKyAgICBJTiAgSEFORExFIEV2ZW50LA0KPiArICAgIElOICBCT09MIE1hc2ssDQo+
ICsgICAgT1VUIFVMT05HICpMb2NhbFBvcnQNCj4gKyAgICApDQo+ICt7DQo+ICsgICAgWEVOSUZB
Q0VfRVZUQ0hOX0JJTkRfVU5CT1VORF9JTiBJbjsNCj4gKyAgICBYRU5JRkFDRV9FVlRDSE5fQklO
RF9VTkJPVU5EX09VVCBPdXQ7DQo+ICsgICAgRFdPUkQgUmV0dXJuZWQ7DQo+ICsgICAgQk9PTCBT
dWNjZXNzOw0KPiArDQo+ICsgICAgSW4uUmVtb3RlRG9tYWluID0gUmVtb3RlRG9tYWluOw0KPiAr
ICAgIEluLkV2ZW50ID0gRXZlbnQ7DQo+ICsgICAgSW4uTWFzayA9ICEhTWFzazsNCj4gKw0KPiAr
ICAgIExvZyhYTExfREVCVUcsIEwiUmVtb3RlRG9tYWluOiAlZCwgRXZlbnQ6ICVwLCBNYXNrOiAl
ZCIsDQo+IFJlbW90ZURvbWFpbiwgRXZlbnQsIE1hc2spOw0KPiArICAgIFN1Y2Nlc3MgPSBEZXZp
Y2VJb0NvbnRyb2woWGMtPlhlbklmYWNlLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSU9DVExfWEVOSUZBQ0VfRVZUQ0hOX0JJTkRfVU5CT1VORCwNCj4gKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZJbiwgc2l6ZW9mKEluKSwNCj4gKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICZPdXQsIHNpemVvZihPdXQpLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJlJldHVybmVkLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7
DQo+ICsNCj4gKyAgICBpZiAoIVN1Y2Nlc3MpIHsNCj4gKyAgICAgICAgTG9nKFhMTF9FUlJPUiwg
TCJJT0NUTF9YRU5JRkFDRV9FVlRDSE5fQklORF9VTkJPVU5EX1BPUlQNCj4gZmFpbGVkIik7DQo+
ICsgICAgICAgIGdvdG8gZmFpbDsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICAqTG9jYWxQb3J0ID0g
T3V0LkxvY2FsUG9ydDsNCj4gKyAgICBMb2coWExMX0RFQlVHLCBMIkxvY2FsUG9ydDogJWx1Iiwg
KkxvY2FsUG9ydCk7DQo+ICsNCj4gKyAgICByZXR1cm4gRVJST1JfU1VDQ0VTUzsNCj4gKw0KPiAr
ZmFpbDoNCj4gKyAgICBMb2coWExMX0VSUk9SLCBMIkVycm9yOiAweCV4IiwgR2V0TGFzdEVycm9y
KCkpOw0KPiArICAgIHJldHVybiBHZXRMYXN0RXJyb3IoKTsNCj4gK30NCj4gKw0KPiArRFdPUkQN
Cj4gK1hjRXZ0Y2huQmluZEludGVyZG9tYWluKA0KPiArICAgIElOICBQWEVOQ09OVFJPTF9DT05U
RVhUIFhjLA0KPiArICAgIElOICBVU0hPUlQgUmVtb3RlRG9tYWluLA0KPiArICAgIElOICBVTE9O
RyBSZW1vdGVQb3J0LA0KPiArICAgIElOICBIQU5ETEUgRXZlbnQsDQo+ICsgICAgSU4gIEJPT0wg
TWFzaywNCj4gKyAgICBPVVQgVUxPTkcgKkxvY2FsUG9ydA0KPiArICAgICkNCj4gK3sNCj4gKyAg
ICBYRU5JRkFDRV9FVlRDSE5fQklORF9JTlRFUkRPTUFJTl9JTiBJbjsNCj4gKyAgICBYRU5JRkFD
RV9FVlRDSE5fQklORF9JTlRFUkRPTUFJTl9PVVQgT3V0Ow0KPiArICAgIERXT1JEIFJldHVybmVk
Ow0KPiArICAgIEJPT0wgU3VjY2VzczsNCj4gKw0KPiArICAgIEluLlJlbW90ZURvbWFpbiA9IFJl
bW90ZURvbWFpbjsNCj4gKyAgICBJbi5SZW1vdGVQb3J0ID0gUmVtb3RlUG9ydDsNCj4gKyAgICBJ
bi5FdmVudCA9IEV2ZW50Ow0KPiArICAgIEluLk1hc2sgPSAhIU1hc2s7DQo+ICsNCj4gKyAgICBM
b2coWExMX0RFQlVHLCBMIlJlbW90ZURvbWFpbjogJWQsIFJlbW90ZVBvcnQgJWx1LCBFdmVudDog
JXAsDQo+IE1hc2s6ICVkIiwNCj4gKyAgICAgICAgUmVtb3RlRG9tYWluLCBSZW1vdGVQb3J0LCBF
dmVudCwgTWFzayk7DQo+ICsgICAgU3VjY2VzcyA9IERldmljZUlvQ29udHJvbChYYy0+WGVuSWZh
Y2UsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJT0NUTF9YRU5JRkFDRV9FVlRD
SE5fQklORF9JTlRFUkRPTUFJTiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZJ
biwgc2l6ZW9mKEluKSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZPdXQsIHNp
emVvZihPdXQpLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlJldHVybmVkLA0K
PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7DQo+ICsNCj4gKyAgICBpZiAo
IVN1Y2Nlc3MpIHsNCj4gKyAgICAgICAgTG9nKFhMTF9FUlJPUiwgTCJJT0NUTF9YRU5JRkFDRV9F
VlRDSE5fQklORF9JTlRFUkRPTUFJTg0KPiBmYWlsZWQiKTsNCj4gKyAgICAgICAgZ290byBmYWls
Ow0KPiArICAgIH0NCj4gKw0KPiArICAgICpMb2NhbFBvcnQgPSBPdXQuTG9jYWxQb3J0Ow0KPiAr
ICAgIExvZyhYTExfREVCVUcsIEwiTG9jYWxQb3J0OiAlbHUiLCAqTG9jYWxQb3J0KTsNCj4gKw0K
PiArICAgIHJldHVybiBFUlJPUl9TVUNDRVNTOw0KPiArDQo+ICtmYWlsOg0KPiArICAgIExvZyhY
TExfRVJST1IsIEwiRXJyb3I6IDB4JXgiLCBHZXRMYXN0RXJyb3IoKSk7DQo+ICsgICAgcmV0dXJu
IEdldExhc3RFcnJvcigpOw0KPiArfQ0KPiArDQo+ICtEV09SRA0KPiArWGNFdnRjaG5DbG9zZSgN
Cj4gKyAgICBJTiAgUFhFTkNPTlRST0xfQ09OVEVYVCBYYywNCj4gKyAgICBJTiAgVUxPTkcgTG9j
YWxQb3J0DQo+ICsgICAgKQ0KPiArew0KPiArICAgIFhFTklGQUNFX0VWVENITl9DTE9TRV9JTiBJ
bjsNCj4gKyAgICBEV09SRCBSZXR1cm5lZDsNCj4gKyAgICBCT09MIFN1Y2Nlc3M7DQo+ICsNCj4g
KyAgICBJbi5Mb2NhbFBvcnQgPSBMb2NhbFBvcnQ7DQo+ICsNCj4gKyAgICBMb2coWExMX0RFQlVH
LCBMIkxvY2FsUG9ydDogJWx1IiwgTG9jYWxQb3J0KTsNCj4gKyAgICBTdWNjZXNzID0gRGV2aWNl
SW9Db250cm9sKFhjLT5YZW5JZmFjZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IElPQ1RMX1hFTklGQUNFX0VWVENITl9DTE9TRSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZJbiwgc2l6ZW9mKEluKSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE5VTEwsIDAsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUmV0dXJuZWQsDQo+
ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsNCj4gKw0KPiArICAgIGlmICgh
U3VjY2Vzcykgew0KPiArICAgICAgICBMb2coWExMX0VSUk9SLCBMIklPQ1RMX1hFTklGQUNFX0VW
VENITl9DTE9TRSBmYWlsZWQiKTsNCj4gKyAgICAgICAgZ290byBmYWlsOw0KPiArICAgIH0NCj4g
Kw0KPiArICAgIHJldHVybiBFUlJPUl9TVUNDRVNTOw0KPiArDQo+ICtmYWlsOg0KPiArICAgIExv
ZyhYTExfRVJST1IsIEwiRXJyb3I6IDB4JXgiLCBHZXRMYXN0RXJyb3IoKSk7DQo+ICsgICAgcmV0
dXJuIEdldExhc3RFcnJvcigpOw0KPiArfQ0KPiArDQo+ICtEV09SRA0KPiArWGNFdnRjaG5Ob3Rp
ZnkoDQo+ICsgICAgSU4gIFBYRU5DT05UUk9MX0NPTlRFWFQgWGMsDQo+ICsgICAgSU4gIFVMT05H
IExvY2FsUG9ydA0KPiArICAgICkNCj4gK3sNCj4gKyAgICBYRU5JRkFDRV9FVlRDSE5fTk9USUZZ
X0lOIEluOw0KPiArICAgIERXT1JEIFJldHVybmVkOw0KPiArICAgIEJPT0wgU3VjY2VzczsNCj4g
Kw0KPiArICAgIEluLkxvY2FsUG9ydCA9IExvY2FsUG9ydDsNCj4gKw0KPiArICAgIExvZyhYTExf
REVCVUcsIEwiTG9jYWxQb3J0OiAlbHUiLCBMb2NhbFBvcnQpOw0KPiArICAgIFN1Y2Nlc3MgPSBE
ZXZpY2VJb0NvbnRyb2woWGMtPlhlbklmYWNlLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgSU9DVExfWEVOSUZBQ0VfRVZUQ0hOX05PVElGWSwNCj4gKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZJbiwgc2l6ZW9mKEluKSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE5VTEwsIDAsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUmV0dXJu
ZWQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsNCj4gKw0KPiArICAg
IGlmICghU3VjY2Vzcykgew0KPiArICAgICAgICBMb2coWExMX0VSUk9SLCBMIklPQ1RMX1hFTklG
QUNFX0VWVENITl9OT1RJRlkgZmFpbGVkIik7DQo+ICsgICAgICAgIGdvdG8gZmFpbDsNCj4gKyAg
ICB9DQo+ICsNCj4gKyAgICByZXR1cm4gRVJST1JfU1VDQ0VTUzsNCj4gKw0KPiArZmFpbDoNCj4g
KyAgICBMb2coWExMX0VSUk9SLCBMIkVycm9yOiAweCV4IiwgR2V0TGFzdEVycm9yKCkpOw0KPiAr
ICAgIHJldHVybiBHZXRMYXN0RXJyb3IoKTsNCj4gK30NCj4gKw0KPiArRFdPUkQNCj4gK1hjRXZ0
Y2huVW5tYXNrKA0KPiArICAgIElOICBQWEVOQ09OVFJPTF9DT05URVhUIFhjLA0KPiArICAgIElO
ICBVTE9ORyBMb2NhbFBvcnQNCj4gKyAgICApDQo+ICt7DQo+ICsgICAgWEVOSUZBQ0VfRVZUQ0hO
X1VOTUFTS19JTiBJbjsNCj4gKyAgICBEV09SRCBSZXR1cm5lZDsNCj4gKyAgICBCT09MIFN1Y2Nl
c3M7DQo+ICsNCj4gKyAgICBJbi5Mb2NhbFBvcnQgPSBMb2NhbFBvcnQ7DQo+ICsNCj4gKyAgICBM
b2coWExMX0RFQlVHLCBMIkxvY2FsUG9ydDogJWx1IiwgTG9jYWxQb3J0KTsNCj4gKyAgICBTdWNj
ZXNzID0gRGV2aWNlSW9Db250cm9sKFhjLT5YZW5JZmFjZSwNCj4gKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIElPQ1RMX1hFTklGQUNFX0VWVENITl9VTk1BU0ssDQo+ICsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmSW4sIHNpemVvZihJbiksDQo+ICsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBOVUxMLCAwLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JlJldHVybmVkLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7DQo+ICsN
Cj4gKyAgICBpZiAoIVN1Y2Nlc3MpIHsNCj4gKyAgICAgICAgTG9nKFhMTF9FUlJPUiwgTCJJT0NU
TF9YRU5JRkFDRV9FVlRDSE5fVU5NQVNLIGZhaWxlZCIpOw0KPiArICAgICAgICBnb3RvIGZhaWw7
DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgcmV0dXJuIEVSUk9SX1NVQ0NFU1M7DQo+ICsNCj4gK2Zh
aWw6DQo+ICsgICAgTG9nKFhMTF9FUlJPUiwgTCJFcnJvcjogMHgleCIsIEdldExhc3RFcnJvcigp
KTsNCj4gKyAgICByZXR1cm4gR2V0TGFzdEVycm9yKCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBQ
WEVOQ09OVFJPTF9HTlRUQUJfUkVRVUVTVA0KPiArRmluZFJlcXVlc3QoDQo+ICsgICAgSU4gIFBY
RU5DT05UUk9MX0NPTlRFWFQgWGMsDQo+ICsgICAgSU4gIFBWT0lEIEFkZHJlc3MNCj4gKyAgICAp
DQo+ICt7DQo+ICsgICAgUExJU1RfRU5UUlkgRW50cnk7DQo+ICsgICAgUFhFTkNPTlRST0xfR05U
VEFCX1JFUVVFU1QgUmV0dXJuUmVxdWVzdCA9IE5VTEw7DQo+ICsNCj4gKyAgICBFbnRlckNyaXRp
Y2FsU2VjdGlvbigmWGMtPlJlcXVlc3RMaXN0TG9jayk7DQo+ICsgICAgRW50cnkgPSBYYy0+UmVx
dWVzdExpc3QuRmxpbms7DQo+ICsgICAgd2hpbGUgKEVudHJ5ICE9ICZYYy0+UmVxdWVzdExpc3Qp
IHsNCj4gKyAgICAgICAgUFhFTkNPTlRST0xfR05UVEFCX1JFUVVFU1QgUmVxdWVzdCA9DQo+IENP
TlRBSU5JTkdfUkVDT1JEKEVudHJ5LCBYRU5DT05UUk9MX0dOVFRBQl9SRVFVRVNULCBMaXN0RW50
cnkpOw0KPiArDQo+ICsgICAgICAgIGlmIChSZXF1ZXN0LT5BZGRyZXNzID09IEFkZHJlc3MpIHsN
Cj4gKyAgICAgICAgICAgIFJldHVyblJlcXVlc3QgPSBSZXF1ZXN0Ow0KPiArICAgICAgICAgICAg
YnJlYWs7DQo+ICsgICAgICAgIH0NCj4gKw0KPiArICAgICAgICBFbnRyeSA9IEVudHJ5LT5GbGlu
azsNCj4gKyAgICB9DQo+ICsgICAgTGVhdmVDcml0aWNhbFNlY3Rpb24oJlhjLT5SZXF1ZXN0TGlz
dExvY2spOw0KPiArDQo+ICsgICAgcmV0dXJuIFJldHVyblJlcXVlc3Q7DQo+ICt9DQo+ICsNCj4g
K0RXT1JEDQo+ICtYY0dudHRhYlBlcm1pdEZvcmVpZ25BY2Nlc3MoDQo+ICsgICAgSU4gIFBYRU5D
T05UUk9MX0NPTlRFWFQgWGMsDQo+ICsgICAgSU4gIFVTSE9SVCBSZW1vdGVEb21haW4sDQo+ICsg
ICAgSU4gIFVMT05HIE51bWJlclBhZ2VzLA0KPiArICAgIElOICBVTE9ORyBOb3RpZnlPZmZzZXQs
DQo+ICsgICAgSU4gIFVMT05HIE5vdGlmeVBvcnQsDQo+ICsgICAgSU4gIFhFTklGQUNFX0dOVFRB
Ql9QQUdFX0ZMQUdTIEZsYWdzLA0KPiArICAgIE9VVCBQVk9JRCAqQWRkcmVzcywNCj4gKyAgICBP
VVQgVUxPTkcgKlJlZmVyZW5jZXMNCj4gKyAgICApDQo+ICt7DQo+ICsgICAgWEVOSUZBQ0VfR05U
VEFCX1BFUk1JVF9GT1JFSUdOX0FDQ0VTU19JTiBJbjsNCj4gKyAgICBYRU5JRkFDRV9HTlRUQUJf
UEVSTUlUX0ZPUkVJR05fQUNDRVNTX09VVCAqT3V0Ow0KPiArICAgIFBYRU5DT05UUk9MX0dOVFRB
Ql9SRVFVRVNUIFJlcXVlc3Q7DQo+ICsgICAgRFdPUkQgUmV0dXJuZWQsIFNpemU7DQo+ICsgICAg
Qk9PTCBTdWNjZXNzOw0KPiArICAgIERXT1JEIFN0YXR1czsNCj4gKw0KPiArICAgIC8vIGxvY2sg
dGhlIHdob2xlIG9wZXJhdGlvbiB0byBub3QgZ2VuZXJhdGUgZHVwbGljYXRlIElEcw0KPiArICAg
IEVudGVyQ3JpdGljYWxTZWN0aW9uKCZYYy0+UmVxdWVzdExpc3RMb2NrKTsNCj4gKw0KPiArICAg
IEluLlJlcXVlc3RJZCA9IFhjLT5SZXF1ZXN0SWQ7DQo+ICsgICAgSW4uUmVtb3RlRG9tYWluID0g
UmVtb3RlRG9tYWluOw0KPiArICAgIEluLk51bWJlclBhZ2VzID0gTnVtYmVyUGFnZXM7DQo+ICsg
ICAgSW4uTm90aWZ5T2Zmc2V0ID0gTm90aWZ5T2Zmc2V0Ow0KPiArICAgIEluLk5vdGlmeVBvcnQg
PSBOb3RpZnlQb3J0Ow0KPiArICAgIEluLkZsYWdzID0gRmxhZ3M7DQo+ICsNCj4gKyAgICBTaXpl
ID0NCj4gKFVMT05HKUZJRUxEX09GRlNFVChYRU5JRkFDRV9HTlRUQUJfUEVSTUlUX0ZPUkVJR05f
QUNDRVNTX09VDQo+IFQsIFJlZmVyZW5jZXNbTnVtYmVyUGFnZXNdKTsNCj4gKyAgICBPdXQgPSBt
YWxsb2MoU2l6ZSk7DQo+ICsgICAgUmVxdWVzdCA9IG1hbGxvYyhzaXplb2YoKlJlcXVlc3QpKTsN
Cj4gKw0KPiArICAgIFN0YXR1cyA9IEVSUk9SX09VVE9GTUVNT1JZOw0KPiArICAgIGlmICghUmVx
dWVzdCB8fCAhT3V0KQ0KPiArICAgICAgICBnb3RvIGZhaWw7DQo+ICsNCj4gKyAgICBaZXJvTWVt
b3J5KFJlcXVlc3QsIHNpemVvZigqUmVxdWVzdCkpOw0KPiArICAgIFJlcXVlc3QtPklkID0gSW4u
UmVxdWVzdElkOw0KPiArDQo+ICsgICAgTG9nKFhMTF9ERUJVRywgTCJJZCAlbHUsIFJlbW90ZURv
bWFpbjogJWQsIE51bWJlclBhZ2VzOiAlbHUsDQo+IE5vdGlmeU9mZnNldDogMHgleCwgTm90aWZ5
UG9ydDogJWx1LCBGbGFnczogMHgleCIsDQo+ICsgICAgICAgIEluLlJlcXVlc3RJZCwgUmVtb3Rl
RG9tYWluLCBOdW1iZXJQYWdlcywgTm90aWZ5T2Zmc2V0LCBOb3RpZnlQb3J0LA0KPiBGbGFncyk7
DQo+ICsNCj4gKyAgICBTdWNjZXNzID0gRGV2aWNlSW9Db250cm9sKFhjLT5YZW5JZmFjZSwNCj4g
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElPQ1RMX1hFTklGQUNFX0dOVFRBQl9QRVJN
SVRfRk9SRUlHTl9BQ0NFU1MsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSW4s
IHNpemVvZihJbiksDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXQsIFNpemUs
DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUmV0dXJuZWQsDQo+ICsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmUmVxdWVzdC0+T3ZlcmxhcHBlZCk7DQo+ICsNCj4gKyAg
ICBTdGF0dXMgPSBHZXRMYXN0RXJyb3IoKTsNCj4gKyAgICAvLyB0aGlzIElPQ1RMIGlzIGV4cGVj
dGVkIHRvIGJlIHBlbmRpbmcgb24gc3VjY2Vzcw0KPiArICAgIGlmICghU3VjY2Vzcykgew0KPiAr
ICAgICAgICBpZiAoU3RhdHVzICE9IEVSUk9SX0lPX1BFTkRJTkcpIHsNCj4gKyAgICAgICAgICAg
IExvZyhYTExfRVJST1IsIEwiSU9DVExfWEVOSUZBQ0VfR05UVEFCX0dSQU5UX1BBR0VTDQo+IGZh
aWxlZCIpOw0KPiArICAgICAgICAgICAgZ290byBmYWlsOw0KPiArICAgICAgICB9DQo+ICsgICAg
fSBlbHNlIHsNCj4gKyAgICAgICAgTG9nKFhMTF9FUlJPUiwgTCJJT0NUTF9YRU5JRkFDRV9HTlRU
QUJfR1JBTlRfUEFHRVMgbm90DQo+IHBlbmRpbmciKTsNCj4gKyAgICAgICAgU3RhdHVzID0gRVJS
T1JfVU5JREVOVElGSUVEX0VSUk9SOw0KPiArICAgICAgICBnb3RvIGZhaWw7DQo+ICsgICAgfQ0K
PiArDQo+ICsgICAgUmVxdWVzdC0+QWRkcmVzcyA9IE91dC0+QWRkcmVzczsNCj4gKw0KPiArICAg
IEluc2VydFRhaWxMaXN0KCZYYy0+UmVxdWVzdExpc3QsICZSZXF1ZXN0LT5MaXN0RW50cnkpOw0K
PiArICAgIFhjLT5SZXF1ZXN0SWQrKzsNCj4gKyAgICBMZWF2ZUNyaXRpY2FsU2VjdGlvbigmWGMt
PlJlcXVlc3RMaXN0TG9jayk7DQo+ICsNCj4gKyAgICAqQWRkcmVzcyA9IE91dC0+QWRkcmVzczsN
Cj4gKyAgICBtZW1jcHkoUmVmZXJlbmNlcywgJk91dC0+UmVmZXJlbmNlcywgTnVtYmVyUGFnZXMg
Kg0KPiBzaXplb2YoVUxPTkcpKTsNCj4gKyAgICBMb2coWExMX0RFQlVHLCBMIkFkZHJlc3M6ICVw
IiwgKkFkZHJlc3MpOw0KPiArICAgIGZvciAoVUxPTkcgaSA9IDA7IGkgPCBOdW1iZXJQYWdlczsg
aSsrKQ0KPiArICAgICAgICBMb2coWExMX0RFQlVHLCBMIkdyYW50IHJlZlslbHVdOiAlbHUiLCBp
LCBPdXQtPlJlZmVyZW5jZXNbaV0pOw0KPiArDQo+ICsgICAgZnJlZShPdXQpOw0KPiArICAgIHJl
dHVybiBFUlJPUl9TVUNDRVNTOw0KPiArDQo+ICtmYWlsOg0KPiArICAgIExlYXZlQ3JpdGljYWxT
ZWN0aW9uKCZYYy0+UmVxdWVzdExpc3RMb2NrKTsNCj4gKyAgICBMb2coWExMX0VSUk9SLCBMIkVy
cm9yOiAweCV4IiwgU3RhdHVzKTsNCj4gKyAgICBmcmVlKE91dCk7DQo+ICsgICAgZnJlZShSZXF1
ZXN0KTsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICtEV09SRA0KPiArWGNH
bnR0YWJSZXZva2VGb3JlaWduQWNjZXNzKA0KPiArICAgIElOICBQWEVOQ09OVFJPTF9DT05URVhU
IFhjLA0KPiArICAgIElOICBQVk9JRCBBZGRyZXNzDQo+ICsgICAgKQ0KPiArew0KPiArICAgIFhF
TklGQUNFX0dOVFRBQl9SRVZPS0VfRk9SRUlHTl9BQ0NFU1NfSU4gSW47DQo+ICsgICAgUFhFTkNP
TlRST0xfR05UVEFCX1JFUVVFU1QgUmVxdWVzdDsNCj4gKyAgICBEV09SRCBSZXR1cm5lZDsNCj4g
KyAgICBCT09MIFN1Y2Nlc3M7DQo+ICsgICAgRFdPUkQgU3RhdHVzOw0KPiArDQo+ICsgICAgTG9n
KFhMTF9ERUJVRywgTCJBZGRyZXNzOiAlcCIsIEFkZHJlc3MpOw0KPiArDQo+ICsgICAgU3RhdHVz
ID0gRVJST1JfTk9UX0ZPVU5EOw0KPiArICAgIFJlcXVlc3QgPSBGaW5kUmVxdWVzdChYYywgQWRk
cmVzcyk7DQo+ICsgICAgaWYgKCFSZXF1ZXN0KSB7DQo+ICsgICAgICAgIExvZyhYTExfRVJST1Is
IEwiQWRkcmVzcyAlcCBub3QgZ3JhbnRlZCIsIEFkZHJlc3MpOw0KPiArICAgICAgICBnb3RvIGZh
aWw7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgSW4uUmVxdWVzdElkID0gUmVxdWVzdC0+SWQ7DQo+
ICsNCj4gKyAgICBTdWNjZXNzID0gRGV2aWNlSW9Db250cm9sKFhjLT5YZW5JZmFjZSwNCj4gKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIElPQ1RMX1hFTklGQUNFX0dOVFRBQl9SRVZPS0Vf
Rk9SRUlHTl9BQ0NFU1MsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSW4sIHNp
emVvZihJbiksDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLA0KPiAr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlJldHVybmVkLA0KPiArICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTlVMTCk7DQo+ICsNCj4gKyAgICBTdGF0dXMgPSBHZXRMYXN0RXJy
b3IoKTsNCj4gKyAgICBpZiAoIVN1Y2Nlc3MpIHsNCj4gKyAgICAgICAgTG9nKFhMTF9FUlJPUiwg
TCJJT0NUTF9YRU5JRkFDRV9HTlRUQUJfVU5HUkFOVF9QQUdFUw0KPiBmYWlsZWQiKTsNCj4gKyAg
ICAgICAgZ290byBmYWlsOw0KPiArICAgIH0NCj4gKw0KPiArICAgIEVudGVyQ3JpdGljYWxTZWN0
aW9uKCZYYy0+UmVxdWVzdExpc3RMb2NrKTsNCj4gKyAgICBSZW1vdmVFbnRyeUxpc3QoJlJlcXVl
c3QtPkxpc3RFbnRyeSk7DQo+ICsgICAgTGVhdmVDcml0aWNhbFNlY3Rpb24oJlhjLT5SZXF1ZXN0
TGlzdExvY2spOw0KPiArICAgIGZyZWUoUmVxdWVzdCk7DQo+ICsNCj4gKyAgICByZXR1cm4gU3Rh
dHVzOw0KPiArDQo+ICtmYWlsOg0KPiArICAgIExvZyhYTExfRVJST1IsIEwiRXJyb3I6ICVkIDB4
JXgiLCBTdGF0dXMsIFN0YXR1cyk7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0K
PiArRFdPUkQNCj4gK1hjR250dGFiTWFwRm9yZWlnblBhZ2VzKA0KPiArICAgIElOICBQWEVOQ09O
VFJPTF9DT05URVhUIFhjLA0KPiArICAgIElOICBVU0hPUlQgUmVtb3RlRG9tYWluLA0KPiArICAg
IElOICBVTE9ORyBOdW1iZXJQYWdlcywNCj4gKyAgICBJTiAgUFVMT05HIFJlZmVyZW5jZXMsDQo+
ICsgICAgSU4gIFVMT05HIE5vdGlmeU9mZnNldCwNCj4gKyAgICBJTiAgVUxPTkcgTm90aWZ5UG9y
dCwNCj4gKyAgICBJTiAgWEVOSUZBQ0VfR05UVEFCX1BBR0VfRkxBR1MgRmxhZ3MsDQo+ICsgICAg
T1VUIFBWT0lEICpBZGRyZXNzDQo+ICsgICAgKQ0KPiArew0KPiArICAgIFhFTklGQUNFX0dOVFRB
Ql9NQVBfRk9SRUlHTl9QQUdFU19JTiAqSW47DQo+ICsgICAgWEVOSUZBQ0VfR05UVEFCX01BUF9G
T1JFSUdOX1BBR0VTX09VVCBPdXQ7DQo+ICsgICAgUFhFTkNPTlRST0xfR05UVEFCX1JFUVVFU1Qg
UmVxdWVzdDsNCj4gKyAgICBEV09SRCBSZXR1cm5lZCwgU2l6ZTsNCj4gKyAgICBCT09MIFN1Y2Nl
c3M7DQo+ICsgICAgRFdPUkQgU3RhdHVzOw0KPiArDQo+ICsgICAgLy8gbG9jayB0aGUgd2hvbGUg
b3BlcmF0aW9uIHRvIG5vdCBnZW5lcmF0ZSBkdXBsaWNhdGUgSURzDQo+ICsgICAgRW50ZXJDcml0
aWNhbFNlY3Rpb24oJlhjLT5SZXF1ZXN0TGlzdExvY2spOw0KPiArDQo+ICsgICAgU3RhdHVzID0g
RVJST1JfT1VUT0ZNRU1PUlk7DQo+ICsgICAgU2l6ZSA9DQo+IChVTE9ORylGSUVMRF9PRkZTRVQo
WEVOSUZBQ0VfR05UVEFCX01BUF9GT1JFSUdOX1BBR0VTX0lOLA0KPiBSZWZlcmVuY2VzW051bWJl
clBhZ2VzXSk7DQo+ICsgICAgSW4gPSBtYWxsb2MoU2l6ZSk7DQo+ICsgICAgUmVxdWVzdCA9IG1h
bGxvYyhzaXplb2YoKlJlcXVlc3QpKTsNCj4gKyAgICBpZiAoIUluIHx8ICFSZXF1ZXN0KQ0KPiAr
ICAgICAgICBnb3RvIGZhaWw7DQo+ICsNCj4gKyAgICBJbi0+UmVxdWVzdElkID0gWGMtPlJlcXVl
c3RJZDsNCj4gKyAgICBJbi0+UmVtb3RlRG9tYWluID0gUmVtb3RlRG9tYWluOw0KPiArICAgIElu
LT5OdW1iZXJQYWdlcyA9IE51bWJlclBhZ2VzOw0KPiArICAgIEluLT5Ob3RpZnlPZmZzZXQgPSBO
b3RpZnlPZmZzZXQ7DQo+ICsgICAgSW4tPk5vdGlmeVBvcnQgPSBOb3RpZnlQb3J0Ow0KPiArICAg
IEluLT5GbGFncyA9IEZsYWdzOw0KPiArICAgIG1lbWNweSgmSW4tPlJlZmVyZW5jZXMsIFJlZmVy
ZW5jZXMsIE51bWJlclBhZ2VzICogc2l6ZW9mKFVMT05HKSk7DQo+ICsNCj4gKyAgICBaZXJvTWVt
b3J5KFJlcXVlc3QsIHNpemVvZigqUmVxdWVzdCkpOw0KPiArICAgIFJlcXVlc3QtPklkID0gSW4t
PlJlcXVlc3RJZDsNCj4gKw0KPiArICAgIExvZyhYTExfREVCVUcsIEwiSWQgJWx1LCBSZW1vdGVE
b21haW46ICVkLCBOdW1iZXJQYWdlczogJWx1LA0KPiBOb3RpZnlPZmZzZXQ6IDB4JXgsIE5vdGlm
eVBvcnQ6ICVsdSwgRmxhZ3M6IDB4JXgiLA0KPiArICAgICAgICBJbi0+UmVxdWVzdElkLCBSZW1v
dGVEb21haW4sIE51bWJlclBhZ2VzLCBOb3RpZnlPZmZzZXQsDQo+IE5vdGlmeVBvcnQsIEZsYWdz
KTsNCj4gKw0KPiArICAgIGZvciAoVUxPTkcgaSA9IDA7IGkgPCBOdW1iZXJQYWdlczsgaSsrKQ0K
PiArICAgICAgICBMb2coWExMX0RFQlVHLCBMIkdyYW50IHJlZlslbHVdOiAlbHUiLCBpLCBSZWZl
cmVuY2VzW2ldKTsNCj4gKw0KPiArICAgIFN1Y2Nlc3MgPSBEZXZpY2VJb0NvbnRyb2woWGMtPlhl
bklmYWNlLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9DVExfWEVOSUZBQ0Vf
R05UVEFCX01BUF9GT1JFSUdOX1BBR0VTLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSW4sIFNpemUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmT3V0LCBzaXpl
b2YoT3V0KSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZSZXR1cm5lZCwNCj4g
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZSZXF1ZXN0LT5PdmVybGFwcGVkKTsNCj4g
Kw0KPiArICAgIFN0YXR1cyA9IEdldExhc3RFcnJvcigpOw0KPiArICAgIC8vIHRoaXMgSU9DVEwg
aXMgZXhwZWN0ZWQgdG8gYmUgcGVuZGluZyBvbiBzdWNjZXNzDQo+ICsgICAgaWYgKCFTdWNjZXNz
KSB7DQo+ICsgICAgICAgIGlmIChTdGF0dXMgIT0gRVJST1JfSU9fUEVORElORykgew0KPiArICAg
ICAgICAgICAgTG9nKFhMTF9FUlJPUiwNCj4gTCJJT0NUTF9YRU5JRkFDRV9HTlRUQUJfTUFQX0ZP
UkVJR05fUEFHRVMgZmFpbGVkIik7DQo+ICsgICAgICAgICAgICBnb3RvIGZhaWw7DQo+ICsgICAg
ICAgIH0NCj4gKyAgICB9IGVsc2Ugew0KPiArICAgICAgICBMb2coWExMX0VSUk9SLCBMIklPQ1RM
X1hFTklGQUNFX0dOVFRBQl9NQVBfRk9SRUlHTl9QQUdFUw0KPiBub3QgcGVuZGluZyIpOw0KPiAr
ICAgICAgICBTdGF0dXMgPSBFUlJPUl9VTklERU5USUZJRURfRVJST1I7DQo+ICsgICAgICAgIGdv
dG8gZmFpbDsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBSZXF1ZXN0LT5BZGRyZXNzID0gT3V0LkFk
ZHJlc3M7DQo+ICsgICAgSW5zZXJ0VGFpbExpc3QoJlhjLT5SZXF1ZXN0TGlzdCwgJlJlcXVlc3Qt
Pkxpc3RFbnRyeSk7DQo+ICsgICAgWGMtPlJlcXVlc3RJZCsrOw0KPiArICAgIExlYXZlQ3JpdGlj
YWxTZWN0aW9uKCZYYy0+UmVxdWVzdExpc3RMb2NrKTsNCj4gKw0KPiArICAgICpBZGRyZXNzID0g
T3V0LkFkZHJlc3M7DQo+ICsNCj4gKyAgICBMb2coWExMX0RFQlVHLCBMIkFkZHJlc3M6ICVwIiwg
KkFkZHJlc3MpOw0KPiArDQo+ICsgICAgZnJlZShJbik7DQo+ICsgICAgcmV0dXJuIEVSUk9SX1NV
Q0NFU1M7DQo+ICsNCj4gK2ZhaWw6DQo+ICsgICAgTGVhdmVDcml0aWNhbFNlY3Rpb24oJlhjLT5S
ZXF1ZXN0TGlzdExvY2spOw0KPiArICAgIExvZyhYTExfRVJST1IsIEwiRXJyb3I6IDB4JXgiLCBT
dGF0dXMpOw0KPiArICAgIGZyZWUoSW4pOw0KPiArICAgIGZyZWUoUmVxdWVzdCk7DQo+ICsgICAg
cmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArRFdPUkQNCj4gK1hjR250dGFiVW5tYXBGb3Jl
aWduUGFnZXMoDQo+ICsgICAgSU4gIFBYRU5DT05UUk9MX0NPTlRFWFQgWGMsDQo+ICsgICAgSU4g
IFBWT0lEIEFkZHJlc3MNCj4gKyAgICApDQo+ICt7DQo+ICsgICAgWEVOSUZBQ0VfR05UVEFCX1VO
TUFQX0ZPUkVJR05fUEFHRVNfSU4gSW47DQo+ICsgICAgUFhFTkNPTlRST0xfR05UVEFCX1JFUVVF
U1QgUmVxdWVzdDsNCj4gKyAgICBEV09SRCBSZXR1cm5lZDsNCj4gKyAgICBCT09MIFN1Y2Nlc3M7
DQo+ICsgICAgRFdPUkQgU3RhdHVzOw0KPiArDQo+ICsgICAgTG9nKFhMTF9ERUJVRywgTCJBZGRy
ZXNzOiAlcCIsIEFkZHJlc3MpOw0KPiArDQo+ICsgICAgU3RhdHVzID0gRVJST1JfTk9UX0ZPVU5E
Ow0KPiArICAgIFJlcXVlc3QgPSBGaW5kUmVxdWVzdChYYywgQWRkcmVzcyk7DQo+ICsgICAgaWYg
KCFSZXF1ZXN0KSB7DQo+ICsgICAgICAgIExvZyhYTExfRVJST1IsIEwiQWRkcmVzcyAlcCBub3Qg
bWFwcGVkIiwgQWRkcmVzcyk7DQo+ICsgICAgICAgIGdvdG8gZmFpbDsNCj4gKyAgICB9DQo+ICsN
Cj4gKyAgICBJbi5SZXF1ZXN0SWQgPSBSZXF1ZXN0LT5JZDsNCj4gKw0KPiArICAgIFN1Y2Nlc3Mg
PSBEZXZpY2VJb0NvbnRyb2woWGMtPlhlbklmYWNlLA0KPiArICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgSU9DVExfWEVOSUZBQ0VfR05UVEFCX1VOTUFQX0ZPUkVJR05fUEFHRVMsDQo+ICsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSW4sIHNpemVvZihJbiksDQo+ICsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLA0KPiArICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJlJldHVybmVkLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVM
TCk7DQo+ICsNCj4gKyAgICBTdGF0dXMgPSBHZXRMYXN0RXJyb3IoKTsNCj4gKyAgICBpZiAoIVN1
Y2Nlc3MpIHsNCj4gKyAgICAgICAgTG9nKFhMTF9FUlJPUiwNCj4gTCJJT0NUTF9YRU5JRkFDRV9H
TlRUQUJfVU5NQVBfRk9SRUlHTl9QQUdFUyBmYWlsZWQiKTsNCj4gKyAgICAgICAgZ290byBmYWls
Ow0KPiArICAgIH0NCj4gKw0KPiArICAgIEVudGVyQ3JpdGljYWxTZWN0aW9uKCZYYy0+UmVxdWVz
dExpc3RMb2NrKTsNCj4gKyAgICBSZW1vdmVFbnRyeUxpc3QoJlJlcXVlc3QtPkxpc3RFbnRyeSk7
DQo+ICsgICAgTGVhdmVDcml0aWNhbFNlY3Rpb24oJlhjLT5SZXF1ZXN0TGlzdExvY2spOw0KPiAr
ICAgIGZyZWUoUmVxdWVzdCk7DQo+ICsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArDQo+ICtm
YWlsOg0KPiArICAgIExvZyhYTExfRVJST1IsIEwiRXJyb3I6IDB4JXgiLCBTdGF0dXMpOw0KPiAr
ICAgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gK0RXT1JEDQo+ICtYY1N0b3JlUmVhZCgN
Cj4gKyAgICBJTiAgUFhFTkNPTlRST0xfQ09OVEVYVCBYYywNCj4gKyAgICBJTiAgUFNUUiBQYXRo
LA0KPiArICAgIElOICBEV09SRCBjYlZhbHVlLA0KPiArICAgIE9VVCBDSEFSICpWYWx1ZQ0KPiAr
ICAgICkNCj4gK3sNCj4gKyAgICBEV09SRCBSZXR1cm5lZDsNCj4gKyAgICBCT09MIFN1Y2Nlc3M7
DQo+ICsNCj4gKyAgICBMb2coWExMX0RFQlVHLCBMIlBhdGg6ICclUyciLCBQYXRoKTsNCj4gKyAg
ICBTdWNjZXNzID0gRGV2aWNlSW9Db250cm9sKFhjLT5YZW5JZmFjZSwNCj4gKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIElPQ1RMX1hFTklGQUNFX1NUT1JFX1JFQUQsDQo+ICsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBQYXRoLCAoRFdPUkQpc3RybGVuKFBhdGgpICsgMSwNCj4g
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlLCBjYlZhbHVlLA0KPiArICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJlJldHVybmVkLA0KPiArICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTlVMTCk7DQo+ICsNCj4gKyAgICBpZiAoIVN1Y2Nlc3MpIHsNCj4gKyAgICAg
ICAgTG9nKFhMTF9FUlJPUiwgTCJJT0NUTF9YRU5JRkFDRV9TVE9SRV9SRUFEIGZhaWxlZCIpOw0K
PiArICAgICAgICBnb3RvIGZhaWw7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgTG9nKFhMTF9ERUJV
RywgTCJWYWx1ZTogJyVTJyIsIFZhbHVlKTsNCj4gKw0KPiArICAgIHJldHVybiBFUlJPUl9TVUND
RVNTOw0KPiArDQo+ICtmYWlsOg0KPiArICAgIExvZyhYTExfRVJST1IsIEwiRXJyb3I6IDB4JXgi
LCBHZXRMYXN0RXJyb3IoKSk7DQo+ICsgICAgcmV0dXJuIEdldExhc3RFcnJvcigpOw0KPiArfQ0K
PiArDQo+ICtEV09SRA0KPiArWGNTdG9yZVdyaXRlKA0KPiArICAgIElOICBQWEVOQ09OVFJPTF9D
T05URVhUIFhjLA0KPiArICAgIElOICBQQ0hBUiBQYXRoLA0KPiArICAgIElOICBQQ0hBUiBWYWx1
ZQ0KPiArICAgICkNCj4gK3sNCj4gKyAgICBQQ0hBUiBCdWZmZXI7DQo+ICsgICAgRFdPUkQgY2JC
dWZmZXI7DQo+ICsgICAgRFdPUkQgUmV0dXJuZWQ7DQo+ICsgICAgQk9PTCBTdWNjZXNzOw0KPiAr
DQo+ICsgICAgY2JCdWZmZXIgPSAoRFdPUkQpKHN0cmxlbihQYXRoKSArIDEgKyBzdHJsZW4oVmFs
dWUpICsgMSArIDEpOw0KPiArICAgIEJ1ZmZlciA9IG1hbGxvYyhjYkJ1ZmZlcik7DQo+ICsgICAg
aWYgKCFCdWZmZXIpIHsNCj4gKyAgICAgICAgU2V0TGFzdEVycm9yKEVSUk9SX09VVE9GTUVNT1JZ
KTsNCj4gKyAgICAgICAgZ290byBmYWlsOw0KPiArICAgIH0NCj4gKw0KPiArICAgIFplcm9NZW1v
cnkoQnVmZmVyLCBjYkJ1ZmZlcik7DQo+ICsgICAgbWVtY3B5KEJ1ZmZlciwgUGF0aCwgc3RybGVu
KFBhdGgpKTsNCj4gKyAgICBtZW1jcHkoQnVmZmVyICsgc3RybGVuKFBhdGgpICsgMSwgVmFsdWUs
IHN0cmxlbihWYWx1ZSkpOw0KPiArDQo+ICsgICAgTG9nKFhMTF9ERUJVRywgTCJQYXRoOiAnJVMn
LCBWYWx1ZTogJyVTJyIsIFBhdGgsIFZhbHVlKTsNCj4gKyAgICBTdWNjZXNzID0gRGV2aWNlSW9D
b250cm9sKFhjLT5YZW5JZmFjZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElP
Q1RMX1hFTklGQUNFX1NUT1JFX1dSSVRFLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQnVmZmVyLCBjYkJ1ZmZlciwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5V
TEwsIDAsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUmV0dXJuZWQsDQo+ICsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsNCj4gKw0KPiArICAgIGlmICghU3Vj
Y2Vzcykgew0KPiArICAgICAgICBMb2coWExMX0VSUk9SLCBMIklPQ1RMX1hFTklGQUNFX1NUT1JF
X1dSSVRFIGZhaWxlZCIpOw0KPiArICAgICAgICBnb3RvIGZhaWw7DQo+ICsgICAgfQ0KPiArDQo+
ICsgICAgZnJlZShCdWZmZXIpOw0KPiArICAgIHJldHVybiBFUlJPUl9TVUNDRVNTOw0KPiArDQo+
ICtmYWlsOg0KPiArICAgIExvZyhYTExfRVJST1IsIEwiRXJyb3I6IDB4JXgiLCBHZXRMYXN0RXJy
b3IoKSk7DQo+ICsgICAgZnJlZShCdWZmZXIpOw0KPiArICAgIHJldHVybiBHZXRMYXN0RXJyb3Io
KTsNCj4gK30NCj4gKw0KPiArRFdPUkQNCj4gK1hjU3RvcmVEaXJlY3RvcnkoDQo+ICsgICAgSU4g
IFBYRU5DT05UUk9MX0NPTlRFWFQgWGMsDQo+ICsgICAgSU4gIFBDSEFSIFBhdGgsDQo+ICsgICAg
SU4gIERXT1JEIGNiT3V0cHV0LA0KPiArICAgIE9VVCBDSEFSICpPdXRwdXQNCj4gKyAgICApDQo+
ICt7DQo+ICsgICAgRFdPUkQgUmV0dXJuZWQ7DQo+ICsgICAgQk9PTCBTdWNjZXNzOw0KPiArDQo+
ICsgICAgTG9nKFhMTF9ERUJVRywgTCJQYXRoOiAnJVMnIiwgUGF0aCk7DQo+ICsgICAgU3VjY2Vz
cyA9IERldmljZUlvQ29udHJvbChYYy0+WGVuSWZhY2UsDQo+ICsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBJT0NUTF9YRU5JRkFDRV9TVE9SRV9ESVJFQ1RPUlksDQo+ICsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBQYXRoLCAoRFdPUkQpc3RybGVuKFBhdGgpICsgMSwNCj4gKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dCwgY2JPdXRwdXQsDQo+ICsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmUmV0dXJuZWQsDQo+ICsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBOVUxMKTsNCj4gKw0KPiArICAgIGlmICghU3VjY2Vzcykgew0KPiArICAgICAg
ICBMb2coWExMX0VSUk9SLCBMIklPQ1RMX1hFTklGQUNFX1NUT1JFX0RJUkVDVE9SWSBmYWlsZWQi
KTsNCj4gKyAgICAgICAgZ290byBmYWlsOw0KPiArICAgIH0NCj4gKw0KPiArICAgIF9Mb2dNdWx0
aVN6KFhjLCBfX0ZVTkNUSU9OX18sIFhMTF9ERUJVRywgT3V0cHV0KTsNCj4gKw0KPiArICAgIHJl
dHVybiBFUlJPUl9TVUNDRVNTOw0KPiArDQo+ICtmYWlsOg0KPiArICAgIExvZyhYTExfRVJST1Is
IEwiRXJyb3I6IDB4JXgiLCBHZXRMYXN0RXJyb3IoKSk7DQo+ICsgICAgcmV0dXJuIEdldExhc3RF
cnJvcigpOw0KPiArfQ0KPiArDQo+ICtEV09SRA0KPiArWGNTdG9yZVJlbW92ZSgNCj4gKyAgICBJ
TiAgUFhFTkNPTlRST0xfQ09OVEVYVCBYYywNCj4gKyAgICBJTiAgUENIQVIgUGF0aA0KPiArICAg
ICkNCj4gK3sNCj4gKyAgICBEV09SRCBSZXR1cm5lZDsNCj4gKyAgICBCT09MIFN1Y2Nlc3M7DQo+
ICsNCj4gKyAgICBMb2coWExMX0RFQlVHLCBMIlBhdGg6ICclUyciLCBQYXRoKTsNCj4gKyAgICBT
dWNjZXNzID0gRGV2aWNlSW9Db250cm9sKFhjLT5YZW5JZmFjZSwNCj4gKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIElPQ1RMX1hFTklGQUNFX1NUT1JFX1JFTU9WRSwNCj4gKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBhdGgsIChEV09SRClzdHJsZW4oUGF0aCkgKyAxLA0KPiAr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwNCj4gKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZSZXR1cm5lZCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE5VTEwpOw0KPiArDQo+ICsgICAgaWYgKCFTdWNjZXNzKSB7DQo+ICsgICAgICAgIExvZyhY
TExfRVJST1IsIEwiSU9DVExfWEVOSUZBQ0VfU1RPUkVfUkVNT1ZFIGZhaWxlZCIpOw0KPiArICAg
ICAgICBnb3RvIGZhaWw7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgcmV0dXJuIEVSUk9SX1NVQ0NF
U1M7DQo+ICsNCj4gK2ZhaWw6DQo+ICsgICAgTG9nKFhMTF9FUlJPUiwgTCJFcnJvcjogMHgleCIs
IEdldExhc3RFcnJvcigpKTsNCj4gKyAgICByZXR1cm4gR2V0TGFzdEVycm9yKCk7DQo+ICt9DQo+
ICsNCj4gK0RXT1JEDQo+ICtYY1N0b3JlU2V0UGVybWlzc2lvbnMoDQo+ICsgICAgSU4gIFBYRU5D
T05UUk9MX0NPTlRFWFQgWGMsDQo+ICsgICAgSU4gIFBDSEFSIFBhdGgsDQo+ICsgICAgSU4gIFVM
T05HIENvdW50LA0KPiArICAgIElOICBQWEVOSUZBQ0VfU1RPUkVfUEVSTUlTU0lPTiBQZXJtaXNz
aW9ucw0KPiArICAgICkNCj4gK3sNCj4gKyAgICBEV09SRCBSZXR1cm5lZCwgU2l6ZTsNCj4gKyAg
ICBCT09MIFN1Y2Nlc3M7DQo+ICsgICAgWEVOSUZBQ0VfU1RPUkVfU0VUX1BFUk1JU1NJT05TX0lO
ICpJbiA9IE5VTEw7DQo+ICsNCj4gKyAgICBMb2coWExMX0RFQlVHLCBMIlBhdGg6ICclUycsIENv
dW50OiAlbHUiLCBQYXRoLCBDb3VudCk7DQo+ICsgICAgZm9yIChVTE9ORyBpID0gMDsgaSA8IENv
dW50OyBpKyspDQo+ICsgICAgICAgIExvZyhYTExfREVCVUcsIEwiRG9tYWluOiAlZCwgTWFzazog
MHgleCIsIFBlcm1pc3Npb25zW2ldLkRvbWFpbiwNCj4gUGVybWlzc2lvbnNbaV0uTWFzayk7DQo+
ICsNCj4gKyAgICBTaXplID0gKFVMT05HKUZJRUxEX09GRlNFVChYRU5JRkFDRV9TVE9SRV9TRVRf
UEVSTUlTU0lPTlNfSU4sDQo+IFBlcm1pc3Npb25zW0NvdW50XSk7DQo+ICsgICAgSW4gPSBtYWxs
b2MoU2l6ZSk7DQo+ICsgICAgaWYgKCFJbikgew0KPiArICAgICAgICBTZXRMYXN0RXJyb3IoRVJS
T1JfT1VUT0ZNRU1PUlkpOw0KPiArICAgICAgICBnb3RvIGZhaWw7DQo+ICsgICAgfQ0KPiArDQo+
ICsgICAgSW4tPlBhdGggPSBQYXRoOw0KPiArICAgIEluLT5QYXRoTGVuZ3RoID0gKERXT1JEKXN0
cmxlbihJbi0+UGF0aCkgKyAxOw0KPiArICAgIEluLT5OdW1iZXJQZXJtaXNzaW9ucyA9IENvdW50
Ow0KPiArICAgIG1lbWNweSgmSW4tPlBlcm1pc3Npb25zLCBQZXJtaXNzaW9ucywgQ291bnQgKg0K
PiBzaXplb2YoWEVOSUZBQ0VfU1RPUkVfUEVSTUlTU0lPTikpOw0KPiArDQo+ICsgICAgU3VjY2Vz
cyA9IERldmljZUlvQ29udHJvbChYYy0+WGVuSWZhY2UsDQo+ICsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBJT0NUTF9YRU5JRkFDRV9TVE9SRV9TRVRfUEVSTUlTU0lPTlMsDQo+ICsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBJbiwgU2l6ZSwNCj4gKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE5VTEwsIDAsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
UmV0dXJuZWQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsNCj4gKw0K
PiArICAgIGlmICghU3VjY2Vzcykgew0KPiArICAgICAgICBMb2coWExMX0VSUk9SLCBMIklPQ1RM
X1hFTklGQUNFX1NUT1JFX1NFVF9QRVJNSVNTSU9OUyBmYWlsZWQiKTsNCj4gKyAgICAgICAgZ290
byBmYWlsOw0KPiArICAgIH0NCj4gKw0KPiArICAgIGZyZWUoSW4pOw0KPiArICAgIHJldHVybiBF
UlJPUl9TVUNDRVNTOw0KPiArDQo+ICtmYWlsOg0KPiArICAgIExvZyhYTExfRVJST1IsIEwiRXJy
b3I6IDB4JXgiLCBHZXRMYXN0RXJyb3IoKSk7DQo+ICsgICAgZnJlZShJbik7DQo+ICsgICAgcmV0
dXJuIEdldExhc3RFcnJvcigpOw0KPiArfQ0KPiArDQo+ICtEV09SRA0KPiArWGNTdG9yZUFkZFdh
dGNoKA0KPiArICAgIElOICBQWEVOQ09OVFJPTF9DT05URVhUIFhjLA0KPiArICAgIElOICBQQ0hB
UiBQYXRoLA0KPiArICAgIElOICBIQU5ETEUgRXZlbnQsDQo+ICsgICAgT1VUIFBWT0lEICpIYW5k
bGUNCj4gKyAgICApDQo+ICt7DQo+ICsgICAgRFdPUkQgUmV0dXJuZWQ7DQo+ICsgICAgQk9PTCBT
dWNjZXNzOw0KPiArICAgIFhFTklGQUNFX1NUT1JFX0FERF9XQVRDSF9JTiBJbjsNCj4gKyAgICBY
RU5JRkFDRV9TVE9SRV9BRERfV0FUQ0hfT1VUIE91dDsNCj4gKw0KPiArICAgIExvZyhYTExfREVC
VUcsIEwiUGF0aDogJyVTJywgRXZlbnQ6ICVwIiwgUGF0aCwgRXZlbnQpOw0KPiArDQo+ICsgICAg
SW4uUGF0aCA9IFBhdGg7DQo+ICsgICAgSW4uUGF0aExlbmd0aCA9IChEV09SRClzdHJsZW4oUGF0
aCkgKyAxOw0KPiArICAgIEluLkV2ZW50ID0gRXZlbnQ7DQo+ICsgICAgU3VjY2VzcyA9IERldmlj
ZUlvQ29udHJvbChYYy0+WGVuSWZhY2UsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBJT0NUTF9YRU5JRkFDRV9TVE9SRV9BRERfV0FUQ0gsDQo+ICsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmSW4sIHNpemVvZihJbiksDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmT3V0LCBzaXplb2YoT3V0KSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZSZXR1cm5lZCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOw0KPiAr
DQo+ICsgICAgaWYgKCFTdWNjZXNzKSB7DQo+ICsgICAgICAgIExvZyhYTExfRVJST1IsIEwiSU9D
VExfWEVOSUZBQ0VfU1RPUkVfQUREX1dBVENIIGZhaWxlZCIpOw0KPiArICAgICAgICBnb3RvIGZh
aWw7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgKkhhbmRsZSA9IE91dC5Db250ZXh0Ow0KPiArDQo+
ICsgICAgTG9nKFhMTF9ERUJVRywgTCJIYW5kbGU6ICVwIiwgKkhhbmRsZSk7DQo+ICsNCj4gKyAg
ICByZXR1cm4gRVJST1JfU1VDQ0VTUzsNCj4gKw0KPiArZmFpbDoNCj4gKyAgICBMb2coWExMX0VS
Uk9SLCBMIkVycm9yOiAweCV4IiwgR2V0TGFzdEVycm9yKCkpOw0KPiArICAgIHJldHVybiBHZXRM
YXN0RXJyb3IoKTsNCj4gK30NCj4gKw0KPiArRFdPUkQNCj4gK1hjU3RvcmVSZW1vdmVXYXRjaCgN
Cj4gKyAgICBJTiAgUFhFTkNPTlRST0xfQ09OVEVYVCBYYywNCj4gKyAgICBJTiAgUFZPSUQgSGFu
ZGxlDQo+ICsgICAgKQ0KPiArew0KPiArICAgIERXT1JEIFJldHVybmVkOw0KPiArICAgIEJPT0wg
U3VjY2VzczsNCj4gKyAgICBYRU5JRkFDRV9TVE9SRV9SRU1PVkVfV0FUQ0hfSU4gSW47DQo+ICsN
Cj4gKyAgICBMb2coWExMX0RFQlVHLCBMIkhhbmRsZTogJXAiLCBIYW5kbGUpOw0KPiArDQo+ICsg
ICAgSW4uQ29udGV4dCA9IEhhbmRsZTsNCj4gKyAgICBTdWNjZXNzID0gRGV2aWNlSW9Db250cm9s
KFhjLT5YZW5JZmFjZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElPQ1RMX1hF
TklGQUNFX1NUT1JFX1JFTU9WRV9XQVRDSCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICZJbiwgc2l6ZW9mKEluKSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5V
TEwsIDAsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUmV0dXJuZWQsDQo+ICsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsNCj4gKw0KPiArICAgIGlmICghU3Vj
Y2Vzcykgew0KPiArICAgICAgICBMb2coWExMX0VSUk9SLCBMIklPQ1RMX1hFTklGQUNFX1NUT1JF
X1JFTU9WRV9XQVRDSCBmYWlsZWQiKTsNCj4gKyAgICAgICAgZ290byBmYWlsOw0KPiArICAgIH0N
Cj4gKw0KPiArICAgIHJldHVybiBFUlJPUl9TVUNDRVNTOw0KPiArDQo+ICtmYWlsOg0KPiArICAg
IExvZyhYTExfRVJST1IsIEwiRXJyb3I6IDB4JXgiLCBHZXRMYXN0RXJyb3IoKSk7DQo+ICsgICAg
cmV0dXJuIEdldExhc3RFcnJvcigpOw0KPiArfQ0KPiBkaWZmIC0tZ2l0IGEvc3JjL3hlbmNvbnRy
b2wveGVuY29udHJvbC5yYyBiL3NyYy94ZW5jb250cm9sL3hlbmNvbnRyb2wucmMNCj4gbmV3IGZp
bGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMC4uNmMzM2U4NA0KPiAtLS0gL2Rldi9udWxs
DQo+ICsrKyBiL3NyYy94ZW5jb250cm9sL3hlbmNvbnRyb2wucmMNCj4gQEAgLTAsMCArMSwyNCBA
QA0KPiArI2luY2x1ZGUgPHdpbmRvd3MuaD4NCj4gKyNpbmNsdWRlIDxudHZlcnAuaD4NCj4gKw0K
PiArI3VuZGVmIFZFUl9DT01QQU5ZTkFNRV9TVFINCj4gKyN1bmRlZiBWRVJfUFJPRFVDVE5BTUVf
U1RSDQo+ICsjdW5kZWYgVkVSX1BST0RVQ1RWRVJTSU9ODQo+ICsjdW5kZWYgVkVSX1BST0RVQ1RW
RVJTSU9OX1NUUg0KPiArDQo+ICsjaW5jbHVkZSA8dmVyc2lvbi5oPg0KPiArDQo+ICsjZGVmaW5l
IFZFUl9DT01QQU5ZTkFNRV9TVFIgICAgICAgICBWRU5ET1JfTkFNRV9TVFINCj4gKyNkZWZpbmUg
VkVSX0xFR0FMQ09QWVJJR0hUX1NUUiAgICAgICJDb3B5cmlnaHQgKGMpIEludmlzaWJsZSBUaGlu
Z3MgTGFiIg0KPiArDQo+ICsjZGVmaW5lIFZFUl9QUk9EVUNUTkFNRV9TVFIgICAgICAgICAiWEVO
SUZBQ0UiDQo+ICsjZGVmaW5lIFZFUl9QUk9EVUNUVkVSU0lPTg0KPiBNQUpPUl9WRVJTSU9OLE1J
Tk9SX1ZFUlNJT04sTUlDUk9fVkVSU0lPTixCVUlMRF9OVU1CRVINCj4gKyNkZWZpbmUgVkVSX1BS
T0RVQ1RWRVJTSU9OX1NUUiAgICAgIE1BSk9SX1ZFUlNJT05fU1RSICIuIg0KPiBNSU5PUl9WRVJT
SU9OX1NUUiAiLiIgTUlDUk9fVkVSU0lPTl9TVFIgIi4iIEJVSUxEX05VTUJFUl9TVFINCj4gKw0K
PiArI2RlZmluZSBWRVJfSU5URVJOQUxOQU1FX1NUUiAgICAgICAgIlhFTkNPTlRST0wuRExMIg0K
PiArI2RlZmluZSBWRVJfRklMRURFU0NSSVBUSU9OX1NUUiAgICAgIlhlbiBpbnRlcmZhY2UgdXNl
ciBsaWJyYXJ5Ig0KPiArDQo+ICsjZGVmaW5lIFZFUl9GSUxFVFlQRSAgICAgICAgICAgICAgICBW
RlRfRExMDQo+ICsjZGVmaW5lIFZFUl9GSUxFU1VCVFlQRSAgICAgICAgICAgICAwDQo+ICsNCj4g
KyNpbmNsdWRlIDxjb21tb24udmVyPg0KPiBkaWZmIC0tZ2l0IGEvc3JjL3hlbmNvbnRyb2wveGVu
Y29udHJvbF9wcml2YXRlLmgNCj4gYi9zcmMveGVuY29udHJvbC94ZW5jb250cm9sX3ByaXZhdGUu
aA0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwLi42ODViY2ZhDQo+IC0t
LSAvZGV2L251bGwNCj4gKysrIGIvc3JjL3hlbmNvbnRyb2wveGVuY29udHJvbF9wcml2YXRlLmgN
Cj4gQEAgLTAsMCArMSw0OSBAQA0KPiArI2lmbmRlZiBfWEVOQ09OVFJPTF9QUklWQVRFX0hfDQo+
ICsjZGVmaW5lIF9YRU5DT05UUk9MX1BSSVZBVEVfSF8NCj4gKw0KPiArI2luY2x1ZGUgPHdpbmRv
d3MuaD4NCj4gKyNpbmNsdWRlICJ4ZW5jb250cm9sLmgiDQo+ICsNCj4gKyNkZWZpbmUgTG9nKGxl
dmVsLCBmb3JtYXQsIC4uLikgXA0KPiArICAgICAgICBfTG9nKFhjLT5Mb2dnZXIsIGxldmVsLCBY
Yy0+TG9nTGV2ZWwsIF9fRlVOQ1RJT05fXywgZm9ybWF0LA0KPiBfX1ZBX0FSR1NfXykNCj4gKw0K
PiArI2RlZmluZSBJbml0aWFsaXplTGlzdEhlYWQoTGlzdEhlYWQpICggXA0KPiArICAgIChMaXN0
SGVhZCktPkZsaW5rID0gKExpc3RIZWFkKS0+QmxpbmsgPSAoTGlzdEhlYWQpKQ0KPiArDQo+ICsj
ZGVmaW5lIEluc2VydFRhaWxMaXN0KExpc3RIZWFkLCBFbnRyeSkgeyBcDQo+ICsgICAgUExJU1Rf
RU5UUlkgX0VYX0JsaW5rOyBcDQo+ICsgICAgUExJU1RfRU5UUlkgX0VYX0xpc3RIZWFkOyBcDQo+
ICsgICAgX0VYX0xpc3RIZWFkID0gKExpc3RIZWFkKTsgXA0KPiArICAgIF9FWF9CbGluayA9IF9F
WF9MaXN0SGVhZC0+Qmxpbms7IFwNCj4gKyAgICAoRW50cnkpLT5GbGluayA9IF9FWF9MaXN0SGVh
ZDsgXA0KPiArICAgIChFbnRyeSktPkJsaW5rID0gX0VYX0JsaW5rOyBcDQo+ICsgICAgX0VYX0Js
aW5rLT5GbGluayA9IChFbnRyeSk7IFwNCj4gKyAgICBfRVhfTGlzdEhlYWQtPkJsaW5rID0gKEVu
dHJ5KTsgXA0KPiArICAgIH0NCj4gKw0KPiArI2RlZmluZSBSZW1vdmVFbnRyeUxpc3QoRW50cnkp
IHsgXA0KPiArICAgIFBMSVNUX0VOVFJZIF9FWF9CbGluazsgXA0KPiArICAgIFBMSVNUX0VOVFJZ
IF9FWF9GbGluazsgXA0KPiArICAgIF9FWF9GbGluayA9IChFbnRyeSktPkZsaW5rOyBcDQo+ICsg
ICAgX0VYX0JsaW5rID0gKEVudHJ5KS0+Qmxpbms7IFwNCj4gKyAgICBfRVhfQmxpbmstPkZsaW5r
ID0gX0VYX0ZsaW5rOyBcDQo+ICsgICAgX0VYX0ZsaW5rLT5CbGluayA9IF9FWF9CbGluazsgXA0K
PiArICAgIH0NCj4gKw0KPiArdHlwZWRlZiBzdHJ1Y3QgX1hFTkNPTlRST0xfQ09OVEVYVCB7DQo+
ICsgICAgSEFORExFIFhlbklmYWNlOw0KPiArICAgIFhFTkNPTlRST0xfTE9HR0VSICpMb2dnZXI7
DQo+ICsgICAgWEVOQ09OVFJPTF9MT0dfTEVWRUwgTG9nTGV2ZWw7DQo+ICsgICAgVUxPTkcgUmVx
dWVzdElkOw0KPiArICAgIExJU1RfRU5UUlkgUmVxdWVzdExpc3Q7DQo+ICsgICAgQ1JJVElDQUxf
U0VDVElPTiBSZXF1ZXN0TGlzdExvY2s7DQo+ICt9IFhFTkNPTlRST0xfQ09OVEVYVCwgKlBYRU5D
T05UUk9MX0NPTlRFWFQ7DQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0IF9YRU5DT05UUk9MX0dOVFRB
Ql9SRVFVRVNUIHsNCj4gKyAgICBMSVNUX0VOVFJZICBMaXN0RW50cnk7DQo+ICsgICAgT1ZFUkxB
UFBFRCAgT3ZlcmxhcHBlZDsNCj4gKyAgICBVTE9ORyAgICAgICBJZDsNCj4gKyAgICBQVk9JRCAg
ICAgICBBZGRyZXNzOw0KPiArfSBYRU5DT05UUk9MX0dOVFRBQl9SRVFVRVNULCAqUFhFTkNPTlRS
T0xfR05UVEFCX1JFUVVFU1Q7DQo+ICsNCj4gKyNlbmRpZiAvLyBfWEVOQ09OVFJPTF9QUklWQVRF
X0hfDQo+IGRpZmYgLS1naXQgYS92czIwMTMveGVuY29udHJvbC5wcm9wcyBiL3ZzMjAxMy94ZW5j
b250cm9sLnByb3BzDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAuLjIy
YzE3MDQNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi92czIwMTMveGVuY29udHJvbC5wcm9wcw0K
PiBAQCAtMCwwICsxLDg0IEBADQo+ICvvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1
dGYtOCI/Pg0KPiArPFByb2plY3QgVG9vbHNWZXJzaW9uPSI0LjAiDQo+IHhtbG5zPSJodHRwOi8v
c2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPg0KPiArDQo+ICsg
IDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIC8+DQo+ICsNCj4gKyAgPFByb3Bl
cnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+DQo+ICsNCj4gKyAgPFByb3BlcnR5R3JvdXA+
DQo+ICsgICAgPEluY2x1ZGVQYXRoPiQoU29sdXRpb25EaXIpXC4uXGluY2x1ZGU7JChJbmNsdWRl
UGF0aCk8L0luY2x1ZGVQYXRoPg0KPiArDQo+IDxMaWJyYXJ5UGF0aD4kKFNvbHV0aW9uRGlyKVwk
KENvbmZpZ3VyYXRpb24pXCQoUGxhdGZvcm0pOyQoTGlicmFyeVBhdGgpPC9MaQ0KPiBicmFyeVBh
dGg+DQo+ICsgICAgPE91dERpcj4kKFNvbHV0aW9uRGlyKVwkKENvbmZpZ3VyYXRpb24pXCQoUGxh
dGZvcm0pXDwvT3V0RGlyPg0KPiArDQo+IDxJbnREaXI+JChTb2x1dGlvbkRpcilcJChQcm9qZWN0
TmFtZSlcJChDb25maWd1cmF0aW9uKVwkKFBsYXRmb3JtKVw8L0ludERpDQo+IHI+DQo+ICsgICAg
PExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPg0KPiArICA8L1Byb3BlcnR5
R3JvdXA+DQo+ICsNCj4gKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0K
PiArICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4NCj4gKyAgICA8
UGxhdGZvcm1Ub29sc2V0PnYxMjA8L1BsYXRmb3JtVG9vbHNldD4NCj4gKyAgPC9Qcm9wZXJ0eUdy
b3VwPg0KPiArDQo+ICsgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlv
biknPT0nRGVidWcnIg0KPiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQo+ICsgICAgPFJ1bkNvZGVB
bmFseXNpcz50cnVlPC9SdW5Db2RlQW5hbHlzaXM+DQo+ICsgICAgPFVzZURlYnVnTGlicmFyaWVz
PnRydWU8L1VzZURlYnVnTGlicmFyaWVzPg0KPiArICA8L1Byb3BlcnR5R3JvdXA+DQo+ICsNCj4g
KyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKSc9PSdSZWxlYXNl
JyINCj4gTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KPiArICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5m
YWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+DQo+ICsgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlv
bj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+DQo+ICsgIDwvUHJvcGVydHlHcm91cD4N
Cj4gKw0KPiArICA8SXRlbURlZmluaXRpb25Hcm91cD4NCj4gKyAgICA8TGluaz4NCj4gKw0KPiA8
QWRkaXRpb25hbERlcGVuZGVuY2llcz5zZXR1cGFwaS5saWI7d3MyXzMyLmxpYjtzaGx3YXBpLmxp
Yjt3dHNhcGkzMi5saWI7dXMNCj4gZXJlbnYubGliO3ZlcnNpb24ubGliO250ZGxsLmxpYjtrZXJu
ZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7Y29tZGxnMzIubGliO2Fkdg0KPiBhcGkzMi5s
aWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjslKEFkZGl0aW9u
YWxEZXBlbmRlbmNpZXMpDQo+IDwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4NCj4gKyAgICAgIDxH
ZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPg0K
PiArICAgIDwvTGluaz4NCj4gKyAgICA8Q2xDb21waWxlPg0KPiArDQo+IDxQcmVwcm9jZXNzb3JE
ZWZpbml0aW9ucz5XSU4zMjslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc28N
Cj4gckRlZmluaXRpb25zPg0KPiArICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdM
ZXZlbD4NCj4gKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj5Ob3RVc2luZzwvUHJlY29tcGlsZWRI
ZWFkZXI+DQo+ICsgICAgICA8U0RMQ2hlY2s+dHJ1ZTwvU0RMQ2hlY2s+DQo+ICsgICAgICA8RXhj
ZXB0aW9uSGFuZGxpbmc+ZmFsc2U8L0V4Y2VwdGlvbkhhbmRsaW5nPg0KPiArICAgICAgPFRyZWF0
V2FybmluZ0FzRXJyb3I+dHJ1ZTwvVHJlYXRXYXJuaW5nQXNFcnJvcj4NCj4gKyAgICA8L0NsQ29t
cGlsZT4NCj4gKyAgICA8Q3VzdG9tQnVpbGRTdGVwPg0KPiArICAgICAgPENvbW1hbmQ+eGNvcHkg
L3kgJChUYXJnZXRQYXRoKQ0KPiAkKFNvbHV0aW9uRGlyKVwuLlx4ZW5pZmFjZVwkKFBsYXRmb3Jt
VGFyZ2V0KVwNCj4gK3hjb3B5IC95ICQoVGFyZ2V0RGlyKSQoVGFyZ2V0TmFtZSkucGRiDQo+ICQo
U29sdXRpb25EaXIpXC4uXHhlbmlmYWNlXCQoUGxhdGZvcm1UYXJnZXQpXA0KPiAraWYgZXhpc3Qg
JChUYXJnZXREaXIpJChUYXJnZXROYW1lKS5saWIgeGNvcHkgL3kNCj4gJChUYXJnZXREaXIpJChU
YXJnZXROYW1lKS5saWINCj4gJChTb2x1dGlvbkRpcilcLi5ceGVuaWZhY2VcJChQbGF0Zm9ybVRh
cmdldClcPC9Db21tYW5kPg0KPiArICAgIDwvQ3VzdG9tQnVpbGRTdGVwPg0KPiArICAgIDxDdXN0
b21CdWlsZFN0ZXA+DQo+ICsgICAgICA8TWVzc2FnZT5Db3B5aW5nIG91dHB1dCBmaWxlczwvTWVz
c2FnZT4NCj4gKyAgICA8L0N1c3RvbUJ1aWxkU3RlcD4NCj4gKyAgICA8Q3VzdG9tQnVpbGRTdGVw
Pg0KPiArDQo+IDxPdXRwdXRzPiQoU29sdXRpb25EaXIpXC4uXHhlbmlmYWNlXCQoUGxhdGZvcm1U
YXJnZXQpJChUYXJnZXRGaWxlTmFtZSk7JCgNCj4gU29sdXRpb25EaXIpXC4uXHhlbmlmYWNlXCQo
UGxhdGZvcm1UYXJnZXQpJChUYXJnZXROYW1lKS5wZGI7JChTb2x1dGlvbkRpcikNCj4gXC4uXHhl
bmlmYWNlXCQoUGxhdGZvcm1UYXJnZXQpJChUYXJnZXROYW1lKS5saWI7JShPdXRwdXRzKTwvT3V0
cHV0cz4NCj4gKyAgICA8L0N1c3RvbUJ1aWxkU3RlcD4NCj4gKyAgICA8Q3VzdG9tQnVpbGRTdGVw
Pg0KPiArDQo+IDxJbnB1dHM+JChUYXJnZXRQYXRoKTskKFRhcmdldERpcikkKFRhcmdldE5hbWUp
LnBkYjskKFRhcmdldERpcikkKFRhcmdldA0KPiBOYW1lKS5saWI8L0lucHV0cz4NCj4gKyAgICA8
L0N1c3RvbUJ1aWxkU3RlcD4NCj4gKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KPiArDQo+ICsg
IDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbiknPT0nRGVi
dWcnIj4NCj4gKyAgICA8Q2xDb21waWxlPg0KPiArDQo+IDxQcmVwcm9jZXNzb3JEZWZpbml0aW9u
cz5fREVCVUc7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3MNCj4gb3JEZWZp
bml0aW9ucz4NCj4gKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4N
Cj4gKyAgICAgIDxFbmFibGVQUkVmYXN0PnRydWU8L0VuYWJsZVBSRWZhc3Q+DQo+ICsgICAgICA8
UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERlYnVnRExMPC9SdW50aW1lTGlicmFyeT4NCj4g
KyAgICA8L0NsQ29tcGlsZT4NCj4gKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KPiArDQo+ICsg
IDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbiknPT0nUmVs
ZWFzZSciPg0KPiArICAgIDxDbENvbXBpbGU+DQo+ICsNCj4gPFByZXByb2Nlc3NvckRlZmluaXRp
b25zPk5ERUJVRzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2VzDQo+IHNvckRl
ZmluaXRpb25zPg0KPiArICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9u
Pg0KPiArICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5r
aW5nPg0KPiArICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlv
bnM+DQo+ICsgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERMTDwvUnVudGltZUxp
YnJhcnk+DQo+ICsgICAgPC9DbENvbXBpbGU+DQo+ICsgICAgPExpbms+DQo+ICsgICAgICA8RW5h
YmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPg0KPiArICAgICAgPE9w
dGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+DQo+ICsgICAgPC9MaW5r
Pg0KPiArICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQo+ICsNCj4gKyAgPEl0ZW1Hcm91cCAvPg0K
PiArPC9Qcm9qZWN0Pg0KPiBcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUNCj4gZGlmZiAtLWdp
dCBhL3ZzMjAxMy94ZW5jb250cm9sL3hlbmNvbnRyb2wudmN4cHJvag0KPiBiL3ZzMjAxMy94ZW5j
b250cm9sL3hlbmNvbnRyb2wudmN4cHJvag0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRl
eCAwMDAwMDAwLi40ZDkxYTM4DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvdnMyMDEzL3hlbmNv
bnRyb2wveGVuY29udHJvbC52Y3hwcm9qDQo+IEBAIC0wLDAgKzEsNjIgQEANCj4gK++7vzw/eG1s
IHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+DQo+ICs8UHJvamVjdCBEZWZhdWx0VGFy
Z2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iMTIuMCINCj4geG1sbnM9Imh0dHA6Ly9zY2hlbWFz
Lm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+DQo+ICsgIDxJdGVtR3JvdXAg
TGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+DQo+ICsgICAgPFByb2plY3RDb25maWd1cmF0
aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4NCj4gKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVn
PC9Db25maWd1cmF0aW9uPg0KPiArICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4NCj4g
KyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0KPiArICAgIDxQcm9qZWN0Q29uZmlndXJhdGlv
biBJbmNsdWRlPSJEZWJ1Z3x4NjQiPg0KPiArICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0Nv
bmZpZ3VyYXRpb24+DQo+ICsgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4NCj4gKyAgICA8
L1Byb2plY3RDb25maWd1cmF0aW9uPg0KPiArICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNs
dWRlPSJSZWxlYXNlfFdpbjMyIj4NCj4gKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0Nv
bmZpZ3VyYXRpb24+DQo+ICsgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPg0KPiArICAg
IDwvUHJvamVjdENvbmZpZ3VyYXRpb24+DQo+ICsgICAgPFByb2plY3RDb25maWd1cmF0aW9uIElu
Y2x1ZGU9IlJlbGVhc2V8eDY0Ij4NCj4gKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0Nv
bmZpZ3VyYXRpb24+DQo+ICsgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4NCj4gKyAgICA8
L1Byb2plY3RDb25maWd1cmF0aW9uPg0KPiArICA8L0l0ZW1Hcm91cD4NCj4gKyAgPFByb3BlcnR5
R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPg0KPiArICAgIDxQcm9qZWN0R3VpZD57RDM4NkQ4RTktRDAx
NS00QUQyLUE1QzItDQo+IDRGODQ1QTgwM0ZBMn08L1Byb2plY3RHdWlkPg0KPiArICAgIDxLZXl3
b3JkPldpbjMyUHJvajwvS2V5d29yZD4NCj4gKyAgICA8Um9vdE5hbWVzcGFjZT54ZW5jb250cm9s
PC9Sb290TmFtZXNwYWNlPg0KPiArICA8L1Byb3BlcnR5R3JvdXA+DQo+ICsgIDxJbXBvcnQgUHJv
amVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+DQo+
ICsgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCj4gKyAgICA8Q29uZmln
dXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPg0KPiArICAgIDxD
aGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0Pg0KPiArICA8L1Byb3BlcnR5R3JvdXA+
DQo+ICsgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnBy
b3BzIiAvPg0KPiArICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4NCj4gKyAg
ICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9y
bSkudXNlci5wcm9wcyINCj4gQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jv
c29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIg0KPiBMYWJlbD0iTG9jYWxBcHBEYXRh
UGxhdGZvcm0iIC8+DQo+ICsgICAgPEltcG9ydCBQcm9qZWN0PSIuLlx4ZW5jb250cm9sLnByb3Bz
IiAvPg0KPiArICA8L0ltcG9ydEdyb3VwPg0KPiArICA8SXRlbURlZmluaXRpb25Hcm91cD4NCj4g
KyAgICA8Q2xDb21waWxlPg0KPiArDQo+IDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fV0lORE9X
UztfVVNSRExMO1hFTkNPTlRST0xfRVhQT1JUUzslKA0KPiBQcmVwcm9jZXNzb3JEZWZpbml0aW9u
cyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KPiArICAgIDwvQ2xDb21waWxlPg0KPiArICAg
IDxMaW5rPg0KPiArICAgICAgPFN1YlN5c3RlbT5XaW5kb3dzPC9TdWJTeXN0ZW0+DQo+ICsgICAg
PC9MaW5rPg0KPiArICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQo+ICsgIDxJdGVtR3JvdXA+DQo+
ICsgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNceGVuY29udHJvbFx4ZW5jb250cm9s
LmMiIC8+DQo+ICsgIDwvSXRlbUdyb3VwPg0KPiArICA8SXRlbUdyb3VwPg0KPiArICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVx4ZW5jb250cm9sLmgiIC8+DQo+ICsgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNceGVuY29udHJvbFx4ZW5jb250cm9sX3ByaXZhdGUu
aCIgLz4NCj4gKyAgPC9JdGVtR3JvdXA+DQo+ICsgIDxJdGVtR3JvdXA+DQo+ICsgICAgPFJlc291
cmNlQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNceGVuY29udHJvbFx4ZW5jb250cm9sLnJjIiAv
Pg0KPiArICA8L0l0ZW1Hcm91cD4NCj4gKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1Bh
dGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4NCj4gKyAgPEltcG9ydEdyb3VwIExhYmVsPSJF
eHRlbnNpb25UYXJnZXRzIj4NCj4gKyAgPC9JbXBvcnRHcm91cD4NCj4gKyAgPFByb2plY3RFeHRl
bnNpb25zPg0KPiArICAgIDxWaXN1YWxTdHVkaW8+DQo+ICsgICAgICA8VXNlclByb3BlcnRpZXMg
Lz4NCj4gKyAgICA8L1Zpc3VhbFN0dWRpbz4NCj4gKyAgPC9Qcm9qZWN0RXh0ZW5zaW9ucz4NCj4g
KzwvUHJvamVjdD4NCj4gXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlDQo+IGRpZmYgLS1naXQg
YS92czIwMTMveGVuY29udHJvbC94ZW5jb250cm9sLnZjeHByb2ouZmlsdGVycw0KPiBiL3ZzMjAx
My94ZW5jb250cm9sL3hlbmNvbnRyb2wudmN4cHJvai5maWx0ZXJzDQo+IG5ldyBmaWxlIG1vZGUg
MTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAuLmM2ZGUwOTkNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysg
Yi92czIwMTMveGVuY29udHJvbC94ZW5jb250cm9sLnZjeHByb2ouZmlsdGVycw0KPiBAQCAtMCww
ICsxLDEzIEBADQo+ICvvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0K
PiArPFByb2plY3QgVG9vbHNWZXJzaW9uPSI0LjAiDQo+IHhtbG5zPSJodHRwOi8vc2NoZW1hcy5t
aWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPg0KPiArICA8SXRlbUdyb3VwPg0K
PiArICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVx4ZW5jb250cm9sLmgiIC8+
DQo+ICsgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNceGVuY29udHJvbFx4ZW5jb250
cm9sX3ByaXZhdGUuaCIgLz4NCj4gKyAgPC9JdGVtR3JvdXA+DQo+ICsgIDxJdGVtR3JvdXA+DQo+
ICsgICAgPFJlc291cmNlQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNceGVuY29udHJvbFx4ZW5j
b250cm9sLnJjIiAvPg0KPiArICA8L0l0ZW1Hcm91cD4NCj4gKyAgPEl0ZW1Hcm91cD4NCj4gKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1x4ZW5jb250cm9sXHhlbmNvbnRyb2wuYyIg
Lz4NCj4gKyAgPC9JdGVtR3JvdXA+DQo+ICs8L1Byb2plY3Q+DQo+IFwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgZmlsZQ0KPiBkaWZmIC0tZ2l0IGEvdnMyMDEzL3hlbmlmYWNlLnNsbiBiL3ZzMjAxMy94
ZW5pZmFjZS5zbG4NCj4gaW5kZXggM2M3NGM3OS4uNzZkMDZiNCAxMDA2NDQNCj4gLS0tIGEvdnMy
MDEzL3hlbmlmYWNlLnNsbg0KPiArKysgYi92czIwMTMveGVuaWZhY2Uuc2xuDQo+IEBAIC0xNyw2
ICsxNyw4IEBAIFByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9
IikNCj4gPSAicGFja2FnZSIsICJwYWNrYWdlXHBhY2thZ2UuDQo+ICAJCXsyRTYxRDJDQy04NjVF
LTQ0MkMtOEM4My1COERBRkQ3QkJEM0J9ID0gezJFNjFEMkNDLQ0KPiA4NjVFLTQ0MkMtOEM4My1C
OERBRkQ3QkJEM0J9DQo+ICAJRW5kUHJvamVjdFNlY3Rpb24NCj4gIEVuZFByb2plY3QNCj4gK1By
b2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAieGVuY29u
dHJvbCIsDQo+ICJ4ZW5jb250cm9sXHhlbmNvbnRyb2wudmN4cHJvaiIsICJ7RDM4NkQ4RTktRDAx
NS00QUQyLUE1QzItDQo+IDRGODQ1QTgwM0ZBMn0iDQo+ICtFbmRQcm9qZWN0DQo+ICBHbG9iYWwN
Cj4gIAlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uQ29uZmlndXJhdGlvblBsYXRmb3JtcykgPSBwcmVT
b2x1dGlvbg0KPiAgCQlXaW5kb3dzIDcgRGVidWd8V2luMzIgPSBXaW5kb3dzIDcgRGVidWd8V2lu
MzINCj4gQEAgLTE2NSw2ICsxNjcsNDIgQEAgR2xvYmFsDQo+ICAJCXs5QjA3MUEzNS04OTdDLTQ3
N0EtQUVCNy05NUY3NzYxOEEyMUR9LldpbmRvd3MgVmlzdGENCj4gUmVsZWFzZXx4NjQuQWN0aXZl
Q2ZnID0gV2luZG93cyBWaXN0YSBSZWxlYXNlfHg2NA0KPiAgCQl7OUIwNzFBMzUtODk3Qy00NzdB
LUFFQjctOTVGNzc2MThBMjFEfS5XaW5kb3dzIFZpc3RhDQo+IFJlbGVhc2V8eDY0LkJ1aWxkLjAg
PSBXaW5kb3dzIFZpc3RhIFJlbGVhc2V8eDY0DQo+ICAJCXs5QjA3MUEzNS04OTdDLTQ3N0EtQUVC
Ny05NUY3NzYxOEEyMUR9LldpbmRvd3MgVmlzdGENCj4gUmVsZWFzZXx4NjQuRGVwbG95LjAgPSBX
aW5kb3dzIFZpc3RhIFJlbGVhc2V8eDY0DQo+ICsJCXtEMzg2RDhFOS1EMDE1LTRBRDItQTVDMi00
Rjg0NUE4MDNGQTJ9LldpbmRvd3MgNw0KPiBEZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xX
aW4zMg0KPiArCQl7RDM4NkQ4RTktRDAxNS00QUQyLUE1QzItNEY4NDVBODAzRkEyfS5XaW5kb3dz
IDcNCj4gRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQo+ICsJCXtEMzg2RDhFOS1E
MDE1LTRBRDItQTVDMi00Rjg0NUE4MDNGQTJ9LldpbmRvd3MgNw0KPiBEZWJ1Z3xXaW4zMi5EZXBs
b3kuMCA9IERlYnVnfFdpbjMyDQo+ICsJCXtEMzg2RDhFOS1EMDE1LTRBRDItQTVDMi00Rjg0NUE4
MDNGQTJ9LldpbmRvd3MgNw0KPiBEZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQo+ICsJ
CXtEMzg2RDhFOS1EMDE1LTRBRDItQTVDMi00Rjg0NUE4MDNGQTJ9LldpbmRvd3MgNw0KPiBEZWJ1
Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KPiArCQl7RDM4NkQ4RTktRDAxNS00QUQyLUE1QzIt
NEY4NDVBODAzRkEyfS5XaW5kb3dzIDcNCj4gRGVidWd8eDY0LkRlcGxveS4wID0gRGVidWd8eDY0
DQo+ICsJCXtEMzg2RDhFOS1EMDE1LTRBRDItQTVDMi00Rjg0NUE4MDNGQTJ9LldpbmRvd3MgNw0K
PiBSZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCj4gKwkJe0QzODZEOEU5
LUQwMTUtNEFEMi1BNUMyLTRGODQ1QTgwM0ZBMn0uV2luZG93cyA3DQo+IFJlbGVhc2V8V2luMzIu
QnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCj4gKwkJe0QzODZEOEU5LUQwMTUtNEFEMi1BNUMyLTRG
ODQ1QTgwM0ZBMn0uV2luZG93cyA3DQo+IFJlbGVhc2V8V2luMzIuRGVwbG95LjAgPSBSZWxlYXNl
fFdpbjMyDQo+ICsJCXtEMzg2RDhFOS1EMDE1LTRBRDItQTVDMi00Rjg0NUE4MDNGQTJ9LldpbmRv
d3MgNw0KPiBSZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KPiArCQl7RDM4NkQ4
RTktRDAxNS00QUQyLUE1QzItNEY4NDVBODAzRkEyfS5XaW5kb3dzIDcNCj4gUmVsZWFzZXx4NjQu
QnVpbGQuMCA9IFJlbGVhc2V8eDY0DQo+ICsJCXtEMzg2RDhFOS1EMDE1LTRBRDItQTVDMi00Rjg0
NUE4MDNGQTJ9LldpbmRvd3MgNw0KPiBSZWxlYXNlfHg2NC5EZXBsb3kuMCA9IFJlbGVhc2V8eDY0
DQo+ICsJCXtEMzg2RDhFOS1EMDE1LTRBRDItQTVDMi00Rjg0NUE4MDNGQTJ9LldpbmRvd3MNCj4g
RGV2ZWxvcGVyIFByZXZpZXcgRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCj4g
KwkJe0QzODZEOEU5LUQwMTUtNEFEMi1BNUMyLTRGODQ1QTgwM0ZBMn0uV2luZG93cw0KPiBEZXZl
bG9wZXIgUHJldmlldyBEZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCj4gKwkJe0Qz
ODZEOEU5LUQwMTUtNEFEMi1BNUMyLTRGODQ1QTgwM0ZBMn0uV2luZG93cw0KPiBEZXZlbG9wZXIg
UHJldmlldyBEZWJ1Z3xXaW4zMi5EZXBsb3kuMCA9IERlYnVnfFdpbjMyDQo+ICsJCXtEMzg2RDhF
OS1EMDE1LTRBRDItQTVDMi00Rjg0NUE4MDNGQTJ9LldpbmRvd3MNCj4gRGV2ZWxvcGVyIFByZXZp
ZXcgRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KPiArCQl7RDM4NkQ4RTktRDAxNS00
QUQyLUE1QzItNEY4NDVBODAzRkEyfS5XaW5kb3dzDQo+IERldmVsb3BlciBQcmV2aWV3IERlYnVn
fHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQo+ICsJCXtEMzg2RDhFOS1EMDE1LTRBRDItQTVDMi00
Rjg0NUE4MDNGQTJ9LldpbmRvd3MNCj4gRGV2ZWxvcGVyIFByZXZpZXcgRGVidWd8eDY0LkRlcGxv
eS4wID0gRGVidWd8eDY0DQo+ICsJCXtEMzg2RDhFOS1EMDE1LTRBRDItQTVDMi00Rjg0NUE4MDNG
QTJ9LldpbmRvd3MNCj4gRGV2ZWxvcGVyIFByZXZpZXcgUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcg
PSBSZWxlYXNlfFdpbjMyDQo+ICsJCXtEMzg2RDhFOS1EMDE1LTRBRDItQTVDMi00Rjg0NUE4MDNG
QTJ9LldpbmRvd3MNCj4gRGV2ZWxvcGVyIFByZXZpZXcgUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0g
UmVsZWFzZXxXaW4zMg0KPiArCQl7RDM4NkQ4RTktRDAxNS00QUQyLUE1QzItNEY4NDVBODAzRkEy
fS5XaW5kb3dzDQo+IERldmVsb3BlciBQcmV2aWV3IFJlbGVhc2V8V2luMzIuRGVwbG95LjAgPSBS
ZWxlYXNlfFdpbjMyDQo+ICsJCXtEMzg2RDhFOS1EMDE1LTRBRDItQTVDMi00Rjg0NUE4MDNGQTJ9
LldpbmRvd3MNCj4gRGV2ZWxvcGVyIFByZXZpZXcgUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVs
ZWFzZXx4NjQNCj4gKwkJe0QzODZEOEU5LUQwMTUtNEFEMi1BNUMyLTRGODQ1QTgwM0ZBMn0uV2lu
ZG93cw0KPiBEZXZlbG9wZXIgUHJldmlldyBSZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4
NjQNCj4gKwkJe0QzODZEOEU5LUQwMTUtNEFEMi1BNUMyLTRGODQ1QTgwM0ZBMn0uV2luZG93cw0K
PiBEZXZlbG9wZXIgUHJldmlldyBSZWxlYXNlfHg2NC5EZXBsb3kuMCA9IFJlbGVhc2V8eDY0DQo+
ICsJCXtEMzg2RDhFOS1EMDE1LTRBRDItQTVDMi00Rjg0NUE4MDNGQTJ9LldpbmRvd3MgVmlzdGEN
Cj4gRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCj4gKwkJe0QzODZEOEU5LUQw
MTUtNEFEMi1BNUMyLTRGODQ1QTgwM0ZBMn0uV2luZG93cyBWaXN0YQ0KPiBEZWJ1Z3xXaW4zMi5C
dWlsZC4wID0gRGVidWd8V2luMzINCj4gKwkJe0QzODZEOEU5LUQwMTUtNEFEMi1BNUMyLTRGODQ1
QTgwM0ZBMn0uV2luZG93cyBWaXN0YQ0KPiBEZWJ1Z3xXaW4zMi5EZXBsb3kuMCA9IERlYnVnfFdp
bjMyDQo+ICsJCXtEMzg2RDhFOS1EMDE1LTRBRDItQTVDMi00Rjg0NUE4MDNGQTJ9LldpbmRvd3Mg
VmlzdGENCj4gRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KPiArCQl7RDM4NkQ4RTkt
RDAxNS00QUQyLUE1QzItNEY4NDVBODAzRkEyfS5XaW5kb3dzIFZpc3RhDQo+IERlYnVnfHg2NC5C
dWlsZC4wID0gRGVidWd8eDY0DQo+ICsJCXtEMzg2RDhFOS1EMDE1LTRBRDItQTVDMi00Rjg0NUE4
MDNGQTJ9LldpbmRvd3MgVmlzdGENCj4gRGVidWd8eDY0LkRlcGxveS4wID0gRGVidWd8eDY0DQo+
ICsJCXtEMzg2RDhFOS1EMDE1LTRBRDItQTVDMi00Rjg0NUE4MDNGQTJ9LldpbmRvd3MgVmlzdGEN
Cj4gUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQo+ICsJCXtEMzg2RDhF
OS1EMDE1LTRBRDItQTVDMi00Rjg0NUE4MDNGQTJ9LldpbmRvd3MgVmlzdGENCj4gUmVsZWFzZXxX
aW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KPiArCQl7RDM4NkQ4RTktRDAxNS00QUQyLUE1
QzItNEY4NDVBODAzRkEyfS5XaW5kb3dzIFZpc3RhDQo+IFJlbGVhc2V8V2luMzIuRGVwbG95LjAg
PSBSZWxlYXNlfFdpbjMyDQo+ICsJCXtEMzg2RDhFOS1EMDE1LTRBRDItQTVDMi00Rjg0NUE4MDNG
QTJ9LldpbmRvd3MgVmlzdGENCj4gUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQN
Cj4gKwkJe0QzODZEOEU5LUQwMTUtNEFEMi1BNUMyLTRGODQ1QTgwM0ZBMn0uV2luZG93cyBWaXN0
YQ0KPiBSZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCj4gKwkJe0QzODZEOEU5LUQw
MTUtNEFEMi1BNUMyLTRGODQ1QTgwM0ZBMn0uV2luZG93cyBWaXN0YQ0KPiBSZWxlYXNlfHg2NC5E
ZXBsb3kuMCA9IFJlbGVhc2V8eDY0DQo+ICAJRW5kR2xvYmFsU2VjdGlvbg0KPiAgCUdsb2JhbFNl
Y3Rpb24oU29sdXRpb25Qcm9wZXJ0aWVzKSA9IHByZVNvbHV0aW9uDQo+ICAJCUhpZGVTb2x1dGlv
bk5vZGUgPSBGQUxTRQ0KPiAtLQ0KPiAxLjguMS5tc3lzZ2l0LjENCj4gDQo+IA0KPiBfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KPiB3aW4tcHYtZGV2ZWwg
bWFpbGluZyBsaXN0DQo+IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZw0KPiBodHRw
Oi8vbGlzdHMueGVucHJvamVjdC5vcmcvY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL3dpbi1wdi1k
ZXZlbA0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18Kd2lu
LXB2LWRldmVsIG1haWxpbmcgbGlzdAp3aW4tcHYtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcK
aHR0cDovL2xpc3RzLnhlbnByb2plY3Qub3JnL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby93aW4t
cHYtZGV2ZWw=

From win-pv-devel-bounces@lists.xenproject.org Thu Nov 05 18:31:29 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Nov 2015 18:31:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZuPJn-0007gj-KV; Thu, 05 Nov 2015 18:31:27 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <lars.kurth.xen@gmail.com>)
	id 1ZuPJm-0007gR-Pm; Thu, 05 Nov 2015 18:31:26 +0000
Received: from [193.109.254.147] by server-14.bemta-14.messagelabs.com id
	33/EB-04752-D70AB365; Thu, 05 Nov 2015 18:31:25 +0000
X-Env-Sender: lars.kurth.xen@gmail.com
X-Msg-Ref: server-9.tower-27.messagelabs.com!1446748284!835501!1
X-Originating-IP: [209.85.212.169]
X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 20434 invoked from network); 5 Nov 2015 18:31:25 -0000
Received: from mail-wi0-f169.google.com (HELO mail-wi0-f169.google.com)
	(209.85.212.169)
	by server-9.tower-27.messagelabs.com with AES128-GCM-SHA256 encrypted
	SMTP; 5 Nov 2015 18:31:25 -0000
Received: by wijp11 with SMTP id p11so16207063wij.0;
	Thu, 05 Nov 2015 10:31:24 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:content-type:content-transfer-encoding:subject:message-id:date
	:to:mime-version;
	bh=q0kqDs77lzwHDrqZvu1HpvkNgLLJxAQk0GI1I6ka2xw=;
	b=u1v3SwsT39Q5Wy3EVTq/PDCDHBHYI7FEGDA1cIwT+x7aLZBosKasu4nvT63NvMNwbu
	dC1dWvcVeF+iOUkrwq2V6H+5LwnWr1BsCkdVFe5A2t58WdYQzHH4pg+GLMZqwCtKAqtA
	Tm3iYvNttCsrLHI+Zw+Vuel4fwSeDQoUfNEOGDfQsEeBreojzS/8PIzYHqZ5OPc5gCqo
	Y91iIyNK9lNvPzMBCS5GNonqfxa7CSmjkRItZ6S2U1nAB+TfMrvSL5yEWGgVBa7P28g4
	9Vmj37tS6L5ILTGJdORIH7GZkXbL07zarRWH4Dx5ox9mB+8Wnbss0n3RBEtj2EhQT85N
	NUYw==
X-Received: by 10.194.95.65 with SMTP id di1mr12017894wjb.134.1446748284506;
	Thu, 05 Nov 2015 10:31:24 -0800 (PST)
Received: from [192.168.0.9] (97e3cc8b.skybroadband.com. [151.227.204.139])
	by smtp.gmail.com with ESMTPSA id
	t20sm35413386wme.0.2015.11.05.10.31.23
	(version=TLSv1/SSLv3 cipher=OTHER);
	Thu, 05 Nov 2015 10:31:23 -0800 (PST)
From: Lars Kurth <lars.kurth.xen@gmail.com>
Message-Id: <4427BD5E-E811-4852-A1CD-A84823F23F70@gmail.com>
Date: Thu, 5 Nov 2015 18:31:22 +0000
To: Xen-devel <xen-devel@lists.xenproject.org>, mirageos-devel@xenproject.org,
	xen-api@lists.xenproject.org, Win-pv-devel@lists.xenproject.org
Mime-Version: 1.0 (Mac OS X Mail 8.2 \(2104\))
X-Mailer: Apple Mail (2.2104)
Subject: [win-pv-devel] 2016 Xen Dev Summit Location (input needed before
	next Thu)
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

Hi all,

I was just informed that it is not going to be possible to hold the Developer Summit alongside LinuxCon in Berlin, unless we make some hard choices. I had originally had booked the space and all looked fine when it was originally arranged several months ago. Seems that the LinuxCon organisers tripped over a German holiday and had not accounted for it. I would like to get your input before the next board meeting in 10 days, such that I have community input for the meeting and I can make a swift decision at the meeting.

We have the following options
* Hold it on Monday Oct 3 - to Tue Oct 4 : the problem is that Oct 3 is a public holiday in Germany, which would affect German participants
* Do a 1 day event only on Oct 4 : I don't think this is practicable
* Hold the event alongside LinuxCon in Toronto in August, but then we'd have a Dev Summit in the US for 3 years in a row. On the plus side, it will be Linux' 25th birthday 

Other options, such as holding the event on its own will be too expensive. Please let me know your opinions.

Best Regards
Lars

> From: Angela Brown <angela@linuxfoundation.org>
> Subject: Xen Summit 2016
> Date: 5 November 2015 17:32:11 GMT
> To: Lars Kurth <lars.kurth@xen.org>
> 
> Hi Lars,
> 
> Sorry for the delay in getting back to you as we had to get a few things sorted. 
> 
> First the bad news. It turns out that Monday, October 3, 2016 is German Unity Day and we've decided it will not be a good idea to hold LinuxCon on this day. So we are moving LinuxCon/ContainerCon to Tuesday, Wednesday, Thursday of that week and ELC-E will be Thursday & Friday as scheduled. This means that we have absolutely no additional space on Thursday. In addition, the space we do have in terms of larger rooms on Tuesday and Wednesday is extremely limited. We went through all the space yesterday, and we don't have any extra rooms that fit over 50ppl available on Tuesday & Wednesday. Thus, holding Xen Summit overlapping in Berlin at the same venue isn't going to work.  The only real option for larger rooms in Berlin would be on Monday (but not on Tuesday, and again this is a holiday).
> 
> We can co-locate in Toronto in August but only on the two days after LinuxCon/ContainerCon - Thursday and Friday (but we can do your board meetings on Wednesday). Please let me know if you want me to go ahead and put together a proposal for this or if you have something else in mind.
> 
> Thanks and sorry!
> 
> Angela

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

From win-pv-devel-bounces@lists.xenproject.org Thu Nov 05 18:31:29 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Nov 2015 18:31:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZuPJn-0007gj-KV; Thu, 05 Nov 2015 18:31:27 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <lars.kurth.xen@gmail.com>)
	id 1ZuPJm-0007gR-Pm; Thu, 05 Nov 2015 18:31:26 +0000
Received: from [193.109.254.147] by server-14.bemta-14.messagelabs.com id
	33/EB-04752-D70AB365; Thu, 05 Nov 2015 18:31:25 +0000
X-Env-Sender: lars.kurth.xen@gmail.com
X-Msg-Ref: server-9.tower-27.messagelabs.com!1446748284!835501!1
X-Originating-IP: [209.85.212.169]
X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 20434 invoked from network); 5 Nov 2015 18:31:25 -0000
Received: from mail-wi0-f169.google.com (HELO mail-wi0-f169.google.com)
	(209.85.212.169)
	by server-9.tower-27.messagelabs.com with AES128-GCM-SHA256 encrypted
	SMTP; 5 Nov 2015 18:31:25 -0000
Received: by wijp11 with SMTP id p11so16207063wij.0;
	Thu, 05 Nov 2015 10:31:24 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:content-type:content-transfer-encoding:subject:message-id:date
	:to:mime-version;
	bh=q0kqDs77lzwHDrqZvu1HpvkNgLLJxAQk0GI1I6ka2xw=;
	b=u1v3SwsT39Q5Wy3EVTq/PDCDHBHYI7FEGDA1cIwT+x7aLZBosKasu4nvT63NvMNwbu
	dC1dWvcVeF+iOUkrwq2V6H+5LwnWr1BsCkdVFe5A2t58WdYQzHH4pg+GLMZqwCtKAqtA
	Tm3iYvNttCsrLHI+Zw+Vuel4fwSeDQoUfNEOGDfQsEeBreojzS/8PIzYHqZ5OPc5gCqo
	Y91iIyNK9lNvPzMBCS5GNonqfxa7CSmjkRItZ6S2U1nAB+TfMrvSL5yEWGgVBa7P28g4
	9Vmj37tS6L5ILTGJdORIH7GZkXbL07zarRWH4Dx5ox9mB+8Wnbss0n3RBEtj2EhQT85N
	NUYw==
X-Received: by 10.194.95.65 with SMTP id di1mr12017894wjb.134.1446748284506;
	Thu, 05 Nov 2015 10:31:24 -0800 (PST)
Received: from [192.168.0.9] (97e3cc8b.skybroadband.com. [151.227.204.139])
	by smtp.gmail.com with ESMTPSA id
	t20sm35413386wme.0.2015.11.05.10.31.23
	(version=TLSv1/SSLv3 cipher=OTHER);
	Thu, 05 Nov 2015 10:31:23 -0800 (PST)
From: Lars Kurth <lars.kurth.xen@gmail.com>
Message-Id: <4427BD5E-E811-4852-A1CD-A84823F23F70@gmail.com>
Date: Thu, 5 Nov 2015 18:31:22 +0000
To: Xen-devel <xen-devel@lists.xenproject.org>, mirageos-devel@xenproject.org,
	xen-api@lists.xenproject.org, Win-pv-devel@lists.xenproject.org
Mime-Version: 1.0 (Mac OS X Mail 8.2 \(2104\))
X-Mailer: Apple Mail (2.2104)
Subject: [win-pv-devel] 2016 Xen Dev Summit Location (input needed before
	next Thu)
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

Hi all,

I was just informed that it is not going to be possible to hold the Developer Summit alongside LinuxCon in Berlin, unless we make some hard choices. I had originally had booked the space and all looked fine when it was originally arranged several months ago. Seems that the LinuxCon organisers tripped over a German holiday and had not accounted for it. I would like to get your input before the next board meeting in 10 days, such that I have community input for the meeting and I can make a swift decision at the meeting.

We have the following options
* Hold it on Monday Oct 3 - to Tue Oct 4 : the problem is that Oct 3 is a public holiday in Germany, which would affect German participants
* Do a 1 day event only on Oct 4 : I don't think this is practicable
* Hold the event alongside LinuxCon in Toronto in August, but then we'd have a Dev Summit in the US for 3 years in a row. On the plus side, it will be Linux' 25th birthday 

Other options, such as holding the event on its own will be too expensive. Please let me know your opinions.

Best Regards
Lars

> From: Angela Brown <angela@linuxfoundation.org>
> Subject: Xen Summit 2016
> Date: 5 November 2015 17:32:11 GMT
> To: Lars Kurth <lars.kurth@xen.org>
> 
> Hi Lars,
> 
> Sorry for the delay in getting back to you as we had to get a few things sorted. 
> 
> First the bad news. It turns out that Monday, October 3, 2016 is German Unity Day and we've decided it will not be a good idea to hold LinuxCon on this day. So we are moving LinuxCon/ContainerCon to Tuesday, Wednesday, Thursday of that week and ELC-E will be Thursday & Friday as scheduled. This means that we have absolutely no additional space on Thursday. In addition, the space we do have in terms of larger rooms on Tuesday and Wednesday is extremely limited. We went through all the space yesterday, and we don't have any extra rooms that fit over 50ppl available on Tuesday & Wednesday. Thus, holding Xen Summit overlapping in Berlin at the same venue isn't going to work.  The only real option for larger rooms in Berlin would be on Monday (but not on Tuesday, and again this is a holiday).
> 
> We can co-locate in Toronto in August but only on the two days after LinuxCon/ContainerCon - Thursday and Friday (but we can do your board meetings on Wednesday). Please let me know if you want me to go ahead and put together a proposal for this or if you have something else in mind.
> 
> Thanks and sorry!
> 
> Angela

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

From win-pv-devel-bounces@lists.xenproject.org Thu Nov 05 21:09:35 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Nov 2015 21:09:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZuRmn-0007J4-Ni; Thu, 05 Nov 2015 21:09:33 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1ZuRmm-0007Iz-99
	for win-pv-devel@lists.xenproject.org; Thu, 05 Nov 2015 21:09:32 +0000
Received: from [193.109.254.147] by server-3.bemta-14.messagelabs.com id
	AD/9A-25435-B85CB365; Thu, 05 Nov 2015 21:09:31 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-7.tower-27.messagelabs.com!1446757770!863405!1
X-Originating-IP: [66.111.4.27]
X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: 
	VHJ1c3RlZCBJUDogNjYuMTExLjQuMjcgPT4gODQ2Mw==\n
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 38390 invoked from network); 5 Nov 2015 21:09:31 -0000
Received: from out3-smtp.messagingengine.com (HELO
	out3-smtp.messagingengine.com) (66.111.4.27)
	by server-7.tower-27.messagelabs.com with DHE-RSA-AES256-GCM-SHA384
	encrypted SMTP; 5 Nov 2015 21:09:31 -0000
Received: from compute4.internal (compute4.nyi.internal [10.202.2.44])
	by mailout.nyi.internal (Postfix) with ESMTP id 8393120371
	for <win-pv-devel@lists.xenproject.org>;
	Thu,  5 Nov 2015 16:09:29 -0500 (EST)
Received: from frontend2 ([10.202.2.161])
	by compute4.internal (MEProxy); Thu, 05 Nov 2015 16:09:29 -0500
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:in-reply-to:message-id:mime-version:references
	:subject:to:x-sasl-enc:x-sasl-enc; s=mesmtp; bh=Pgk2ToCHw37ySZTK
	yw1k+MBoERk=; b=DBUwvDTRF/nfNeh6CTSapOwH70lPs0TlOS6vzIH5qyNx9SL9
	sI9KvXxJ04lwBm9+/s336iccwRL3NXZCNRBiQ5owVaZ/OoUhh3Wo6NK1jtx6ceK5
	Rg57qIuewJWB0HytqTqTWnT2E/ghAjLRYto2IIUytldEroeUkt5uJTElpeE=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:in-reply-to:message-id:mime-version:references
	:subject:to:x-sasl-enc:x-sasl-enc; s=smtpout; bh=Pgk2ToCHw37ySZT
	Kyw1k+MBoERk=; b=lOaqP7CT7ErBdDvn0WMxvaNezlH96PQ+9T7/B9ISQnsl9SY
	+3/CKPm8f9b1YfXLVyPId1VDye1n6KYcQ4H9FyvQ9wC7NMCssaWFxd7bbjC1TiC4
	THJJxOXiav7SnddWY2/iqJP5+yH4QKnLPxfzelIfDgEyugeAPg9jaC1PRfeM=
X-Sasl-enc: DOi2fXqyV7RMsiEm/YjKUUuR68Z3LdZJcXxzIISiiZAa 1446757768
Received: from [192.168.0.3] (89-72-164-138.dynamic.chello.pl [89.72.164.138])
	by mail.messagingengine.com (Postfix) with ESMTPA id A85F7680118;
	Thu,  5 Nov 2015 16:09:28 -0500 (EST)
To: Paul Durrant <Paul.Durrant@citrix.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <563B65F1.2020606@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F661401@AMSPEX01CL01.citrite.net>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
X-Enigmail-Draft-Status: N1110
Message-ID: <563BC594.8010905@invisiblethingslab.com>
Date: Thu, 5 Nov 2015 22:09:40 +0100
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.3.0
MIME-Version: 1.0
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F661401@AMSPEX01CL01.citrite.net>
Content-Length: 1427
Subject: Re: [win-pv-devel] [PATCH] Add a user mode library wrapper for
 XENIFACE IOCTLs
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="iso-8859-2"
Content-Transfer-Encoding: quoted-printable
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

On 2015-11-05 17:49, Paul Durrant wrote:
>> -----Original Message-----
>> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
>> bounces@lists.xenproject.org] On Behalf Of Rafal Wojdyla
>> Sent: 05 November 2015 14:22
>> To: win-pv-devel@lists.xenproject.org
>> Subject: [win-pv-devel] [PATCH] Add a user mode library wrapper for
>> XENIFACE IOCTLs
>>
>> Signed-off-by: Rafal Wojdyla <omeg@invisiblethingslab.com>
>> ---
[...snip...]

>> +/*! \brief Open an unbound event channel
>> +    \param Xc Xencontrol handle returned by XcOpen()
>> +    \param RemoteDomain ID of a remote domain that will bind the channel
>> +    \param Event Handle to an event object that will receive event chan=
nel
>> notifications
>> +    \param Mask Set to TRUE if the event channel should be initially ma=
sked
>> +    \param LocalPort Port number that is assigned to the event channel
>> +    \return Error code
>> +*/
>> +XENCONTROL_API
>> +DWORD
>> +XcEvtchnBindUnbound(
> =

> Shouldn't this be XcEvtchnOpenUnbound()? The name seems a little odd.
> =

>   Paul

You're right, at the beginning I used names similar to what libxc has.
Open makes more sense here.


-- =

Rafa=B3 Wojdy=B3a
Qubes Tools for Windows developer
https://www.qubes-os.org/

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

From win-pv-devel-bounces@lists.xenproject.org Thu Nov 05 21:09:35 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Nov 2015 21:09:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZuRmn-0007J4-Ni; Thu, 05 Nov 2015 21:09:33 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1ZuRmm-0007Iz-99
	for win-pv-devel@lists.xenproject.org; Thu, 05 Nov 2015 21:09:32 +0000
Received: from [193.109.254.147] by server-3.bemta-14.messagelabs.com id
	AD/9A-25435-B85CB365; Thu, 05 Nov 2015 21:09:31 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-7.tower-27.messagelabs.com!1446757770!863405!1
X-Originating-IP: [66.111.4.27]
X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: 
	VHJ1c3RlZCBJUDogNjYuMTExLjQuMjcgPT4gODQ2Mw==\n
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 38390 invoked from network); 5 Nov 2015 21:09:31 -0000
Received: from out3-smtp.messagingengine.com (HELO
	out3-smtp.messagingengine.com) (66.111.4.27)
	by server-7.tower-27.messagelabs.com with DHE-RSA-AES256-GCM-SHA384
	encrypted SMTP; 5 Nov 2015 21:09:31 -0000
Received: from compute4.internal (compute4.nyi.internal [10.202.2.44])
	by mailout.nyi.internal (Postfix) with ESMTP id 8393120371
	for <win-pv-devel@lists.xenproject.org>;
	Thu,  5 Nov 2015 16:09:29 -0500 (EST)
Received: from frontend2 ([10.202.2.161])
	by compute4.internal (MEProxy); Thu, 05 Nov 2015 16:09:29 -0500
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:in-reply-to:message-id:mime-version:references
	:subject:to:x-sasl-enc:x-sasl-enc; s=mesmtp; bh=Pgk2ToCHw37ySZTK
	yw1k+MBoERk=; b=DBUwvDTRF/nfNeh6CTSapOwH70lPs0TlOS6vzIH5qyNx9SL9
	sI9KvXxJ04lwBm9+/s336iccwRL3NXZCNRBiQ5owVaZ/OoUhh3Wo6NK1jtx6ceK5
	Rg57qIuewJWB0HytqTqTWnT2E/ghAjLRYto2IIUytldEroeUkt5uJTElpeE=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:in-reply-to:message-id:mime-version:references
	:subject:to:x-sasl-enc:x-sasl-enc; s=smtpout; bh=Pgk2ToCHw37ySZT
	Kyw1k+MBoERk=; b=lOaqP7CT7ErBdDvn0WMxvaNezlH96PQ+9T7/B9ISQnsl9SY
	+3/CKPm8f9b1YfXLVyPId1VDye1n6KYcQ4H9FyvQ9wC7NMCssaWFxd7bbjC1TiC4
	THJJxOXiav7SnddWY2/iqJP5+yH4QKnLPxfzelIfDgEyugeAPg9jaC1PRfeM=
X-Sasl-enc: DOi2fXqyV7RMsiEm/YjKUUuR68Z3LdZJcXxzIISiiZAa 1446757768
Received: from [192.168.0.3] (89-72-164-138.dynamic.chello.pl [89.72.164.138])
	by mail.messagingengine.com (Postfix) with ESMTPA id A85F7680118;
	Thu,  5 Nov 2015 16:09:28 -0500 (EST)
To: Paul Durrant <Paul.Durrant@citrix.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <563B65F1.2020606@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F661401@AMSPEX01CL01.citrite.net>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
X-Enigmail-Draft-Status: N1110
Message-ID: <563BC594.8010905@invisiblethingslab.com>
Date: Thu, 5 Nov 2015 22:09:40 +0100
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.3.0
MIME-Version: 1.0
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F661401@AMSPEX01CL01.citrite.net>
Content-Length: 1427
Subject: Re: [win-pv-devel] [PATCH] Add a user mode library wrapper for
 XENIFACE IOCTLs
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="iso-8859-2"
Content-Transfer-Encoding: quoted-printable
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

On 2015-11-05 17:49, Paul Durrant wrote:
>> -----Original Message-----
>> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
>> bounces@lists.xenproject.org] On Behalf Of Rafal Wojdyla
>> Sent: 05 November 2015 14:22
>> To: win-pv-devel@lists.xenproject.org
>> Subject: [win-pv-devel] [PATCH] Add a user mode library wrapper for
>> XENIFACE IOCTLs
>>
>> Signed-off-by: Rafal Wojdyla <omeg@invisiblethingslab.com>
>> ---
[...snip...]

>> +/*! \brief Open an unbound event channel
>> +    \param Xc Xencontrol handle returned by XcOpen()
>> +    \param RemoteDomain ID of a remote domain that will bind the channel
>> +    \param Event Handle to an event object that will receive event chan=
nel
>> notifications
>> +    \param Mask Set to TRUE if the event channel should be initially ma=
sked
>> +    \param LocalPort Port number that is assigned to the event channel
>> +    \return Error code
>> +*/
>> +XENCONTROL_API
>> +DWORD
>> +XcEvtchnBindUnbound(
> =

> Shouldn't this be XcEvtchnOpenUnbound()? The name seems a little odd.
> =

>   Paul

You're right, at the beginning I used names similar to what libxc has.
Open makes more sense here.


-- =

Rafa=B3 Wojdy=B3a
Qubes Tools for Windows developer
https://www.qubes-os.org/

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

From win-pv-devel-bounces@lists.xenproject.org Thu Nov 05 21:12:02 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Nov 2015 21:12:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZuRpC-0007Y2-0h; Thu, 05 Nov 2015 21:12:02 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1ZuRpA-0007Xx-Ip
	for win-pv-devel@lists.xenproject.org; Thu, 05 Nov 2015 21:12:00 +0000
Received: from [85.158.137.68] by server-9.bemta-3.messagelabs.com id
	54/68-10678-F16CB365; Thu, 05 Nov 2015 21:11:59 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-13.tower-31.messagelabs.com!1446757918!815098!1
X-Originating-IP: [66.111.4.27]
X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: 
	VHJ1c3RlZCBJUDogNjYuMTExLjQuMjcgPT4gODQ2Mw==\n
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 36311 invoked from network); 5 Nov 2015 21:11:59 -0000
Received: from out3-smtp.messagingengine.com (HELO
	out3-smtp.messagingengine.com) (66.111.4.27)
	by server-13.tower-31.messagelabs.com with AES256-GCM-SHA384 encrypted
	SMTP; 5 Nov 2015 21:11:59 -0000
Received: from compute2.internal (compute2.nyi.internal [10.202.2.42])
	by mailout.nyi.internal (Postfix) with ESMTP id 5DA98208BF
	for <win-pv-devel@lists.xenproject.org>;
	Thu,  5 Nov 2015 16:11:58 -0500 (EST)
Received: from frontend2 ([10.202.2.161])
	by compute2.internal (MEProxy); Thu, 05 Nov 2015 16:11:58 -0500
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:in-reply-to:message-id:mime-version:references
	:subject:to:x-sasl-enc:x-sasl-enc; s=mesmtp; bh=6TC9B/LyEsfd/kWr
	PJ1FCEX/820=; b=RQcl3ZNx6LIaLSiFdp7h4M4QxgKSP+h1tW2H1fi31fjQzqEI
	1IEYWAuvIS63hDCAAjRorDCuLcrKlQUgusgxqq7jwNQEd4xw0JqKm2QhEGRPvP+k
	im3OnCrpGcq/sw++1BZybnCh+L90rfaCl/uTObX+DExlvEXdZeGs5IwH6I0=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:in-reply-to:message-id:mime-version:references
	:subject:to:x-sasl-enc:x-sasl-enc; s=smtpout; bh=6TC9B/LyEsfd/kW
	rPJ1FCEX/820=; b=lAoRncoLBAbnb9WG21fOoAp/HoRa4jvPwZeNnvO3z5hITCM
	xiWmSPDkv9M7o5Cn0FHrLBjYMNNwC/JXERAjpTQJy88q/ozGomcEdveMV8Sufdnf
	lr1dgYUDNVpQL0hTan3aISd+iECAOwhCSewV4PZFiBfjXdr61pg/U3dfV0P0=
X-Sasl-enc: e+kHceBRCNFjE7Abk9DwgVE9BLj1mitZV5pMcGMFsdkL 1446757917
Received: from [192.168.0.3] (89-72-164-138.dynamic.chello.pl [89.72.164.138])
	by mail.messagingengine.com (Postfix) with ESMTPA id 93E2C680106;
	Thu,  5 Nov 2015 16:11:57 -0500 (EST)
To: Paul Durrant <Paul.Durrant@citrix.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <563B65F1.2020606@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F661441@AMSPEX01CL01.citrite.net>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
Message-ID: <563BC62A.60203@invisiblethingslab.com>
Date: Thu, 5 Nov 2015 22:12:10 +0100
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.3.0
MIME-Version: 1.0
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F661441@AMSPEX01CL01.citrite.net>
Content-Length: 1999
Subject: Re: [win-pv-devel] [PATCH] Add a user mode library wrapper for
 XENIFACE IOCTLs
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="iso-8859-2"
Content-Transfer-Encoding: quoted-printable
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

On 2015-11-05 17:55, Paul Durrant wrote:
>> -----Original Message-----
>> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
>> bounces@lists.xenproject.org] On Behalf Of Rafal Wojdyla
>> Sent: 05 November 2015 14:22
>> To: win-pv-devel@lists.xenproject.org
>> Subject: [win-pv-devel] [PATCH] Add a user mode library wrapper for
>> XENIFACE IOCTLs
>>
>> Signed-off-by: Rafal Wojdyla <omeg@invisiblethingslab.com>
>> ---
>>  include/xencontrol.h                         | 342 ++++++++++
>>  src/xencontrol/xencontrol.c                  | 915
>> +++++++++++++++++++++++++++
>>  src/xencontrol/xencontrol.rc                 |  24 +
>>  src/xencontrol/xencontrol_private.h          |  49 ++
>>  vs2013/xencontrol.props                      |  84 +++
>>  vs2013/xencontrol/xencontrol.vcxproj         |  62 ++
>>  vs2013/xencontrol/xencontrol.vcxproj.filters |  13 +
>>  vs2013/xeniface.sln                          |  38 ++
>>  8 files changed, 1527 insertions(+)
>>  create mode 100644 include/xencontrol.h
>>  create mode 100644 src/xencontrol/xencontrol.c
>>  create mode 100644 src/xencontrol/xencontrol.rc
>>  create mode 100644 src/xencontrol/xencontrol_private.h
>>  create mode 100644 vs2013/xencontrol.props
>>  create mode 100644 vs2013/xencontrol/xencontrol.vcxproj
>>  create mode 100644 vs2013/xencontrol/xencontrol.vcxproj.filters
>>
> =

> I also notice that there's no update to the xeniface package to deliver t=
he new DLL. Did you omit that for a reason? (I have no objection to you add=
ing the DLL to the package... I'm happy to fix up the VS2012 vcxproj files =
if you don't have the older tools to hand).
> =

>   Paul
> =

Yeah, that's another thing I forgot about since I don't have VS2012 at hand.

-- =

Rafa=B3 Wojdy=B3a
Qubes Tools for Windows developer
https://www.qubes-os.org/


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

From win-pv-devel-bounces@lists.xenproject.org Thu Nov 05 21:12:02 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Nov 2015 21:12:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZuRpC-0007Y2-0h; Thu, 05 Nov 2015 21:12:02 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1ZuRpA-0007Xx-Ip
	for win-pv-devel@lists.xenproject.org; Thu, 05 Nov 2015 21:12:00 +0000
Received: from [85.158.137.68] by server-9.bemta-3.messagelabs.com id
	54/68-10678-F16CB365; Thu, 05 Nov 2015 21:11:59 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-13.tower-31.messagelabs.com!1446757918!815098!1
X-Originating-IP: [66.111.4.27]
X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: 
	VHJ1c3RlZCBJUDogNjYuMTExLjQuMjcgPT4gODQ2Mw==\n
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 36311 invoked from network); 5 Nov 2015 21:11:59 -0000
Received: from out3-smtp.messagingengine.com (HELO
	out3-smtp.messagingengine.com) (66.111.4.27)
	by server-13.tower-31.messagelabs.com with AES256-GCM-SHA384 encrypted
	SMTP; 5 Nov 2015 21:11:59 -0000
Received: from compute2.internal (compute2.nyi.internal [10.202.2.42])
	by mailout.nyi.internal (Postfix) with ESMTP id 5DA98208BF
	for <win-pv-devel@lists.xenproject.org>;
	Thu,  5 Nov 2015 16:11:58 -0500 (EST)
Received: from frontend2 ([10.202.2.161])
	by compute2.internal (MEProxy); Thu, 05 Nov 2015 16:11:58 -0500
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:in-reply-to:message-id:mime-version:references
	:subject:to:x-sasl-enc:x-sasl-enc; s=mesmtp; bh=6TC9B/LyEsfd/kWr
	PJ1FCEX/820=; b=RQcl3ZNx6LIaLSiFdp7h4M4QxgKSP+h1tW2H1fi31fjQzqEI
	1IEYWAuvIS63hDCAAjRorDCuLcrKlQUgusgxqq7jwNQEd4xw0JqKm2QhEGRPvP+k
	im3OnCrpGcq/sw++1BZybnCh+L90rfaCl/uTObX+DExlvEXdZeGs5IwH6I0=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:in-reply-to:message-id:mime-version:references
	:subject:to:x-sasl-enc:x-sasl-enc; s=smtpout; bh=6TC9B/LyEsfd/kW
	rPJ1FCEX/820=; b=lAoRncoLBAbnb9WG21fOoAp/HoRa4jvPwZeNnvO3z5hITCM
	xiWmSPDkv9M7o5Cn0FHrLBjYMNNwC/JXERAjpTQJy88q/ozGomcEdveMV8Sufdnf
	lr1dgYUDNVpQL0hTan3aISd+iECAOwhCSewV4PZFiBfjXdr61pg/U3dfV0P0=
X-Sasl-enc: e+kHceBRCNFjE7Abk9DwgVE9BLj1mitZV5pMcGMFsdkL 1446757917
Received: from [192.168.0.3] (89-72-164-138.dynamic.chello.pl [89.72.164.138])
	by mail.messagingengine.com (Postfix) with ESMTPA id 93E2C680106;
	Thu,  5 Nov 2015 16:11:57 -0500 (EST)
To: Paul Durrant <Paul.Durrant@citrix.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <563B65F1.2020606@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F661441@AMSPEX01CL01.citrite.net>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
Message-ID: <563BC62A.60203@invisiblethingslab.com>
Date: Thu, 5 Nov 2015 22:12:10 +0100
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.3.0
MIME-Version: 1.0
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F661441@AMSPEX01CL01.citrite.net>
Content-Length: 1999
Subject: Re: [win-pv-devel] [PATCH] Add a user mode library wrapper for
 XENIFACE IOCTLs
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="iso-8859-2"
Content-Transfer-Encoding: quoted-printable
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

On 2015-11-05 17:55, Paul Durrant wrote:
>> -----Original Message-----
>> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
>> bounces@lists.xenproject.org] On Behalf Of Rafal Wojdyla
>> Sent: 05 November 2015 14:22
>> To: win-pv-devel@lists.xenproject.org
>> Subject: [win-pv-devel] [PATCH] Add a user mode library wrapper for
>> XENIFACE IOCTLs
>>
>> Signed-off-by: Rafal Wojdyla <omeg@invisiblethingslab.com>
>> ---
>>  include/xencontrol.h                         | 342 ++++++++++
>>  src/xencontrol/xencontrol.c                  | 915
>> +++++++++++++++++++++++++++
>>  src/xencontrol/xencontrol.rc                 |  24 +
>>  src/xencontrol/xencontrol_private.h          |  49 ++
>>  vs2013/xencontrol.props                      |  84 +++
>>  vs2013/xencontrol/xencontrol.vcxproj         |  62 ++
>>  vs2013/xencontrol/xencontrol.vcxproj.filters |  13 +
>>  vs2013/xeniface.sln                          |  38 ++
>>  8 files changed, 1527 insertions(+)
>>  create mode 100644 include/xencontrol.h
>>  create mode 100644 src/xencontrol/xencontrol.c
>>  create mode 100644 src/xencontrol/xencontrol.rc
>>  create mode 100644 src/xencontrol/xencontrol_private.h
>>  create mode 100644 vs2013/xencontrol.props
>>  create mode 100644 vs2013/xencontrol/xencontrol.vcxproj
>>  create mode 100644 vs2013/xencontrol/xencontrol.vcxproj.filters
>>
> =

> I also notice that there's no update to the xeniface package to deliver t=
he new DLL. Did you omit that for a reason? (I have no objection to you add=
ing the DLL to the package... I'm happy to fix up the VS2012 vcxproj files =
if you don't have the older tools to hand).
> =

>   Paul
> =

Yeah, that's another thing I forgot about since I don't have VS2012 at hand.

-- =

Rafa=B3 Wojdy=B3a
Qubes Tools for Windows developer
https://www.qubes-os.org/


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

From win-pv-devel-bounces@lists.xenproject.org Fri Nov 06 11:01:59 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 06 Nov 2015 11:01:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZuemM-0005Hc-8F; Fri, 06 Nov 2015 11:01:58 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <konrad.wilk@oracle.com>)
	id 1ZuRTW-0005xN-RN; Thu, 05 Nov 2015 20:49:38 +0000
Received: from [85.158.139.211] by server-4.bemta-5.messagelabs.com id
	D2/2E-24856-1E0CB365; Thu, 05 Nov 2015 20:49:37 +0000
X-Env-Sender: konrad.wilk@oracle.com
X-Msg-Ref: server-4.tower-206.messagelabs.com!1446756575!1387190!1
X-Originating-IP: [141.146.126.69]
X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: 
	VHJ1c3RlZCBJUDogMTQxLjE0Ni4xMjYuNjkgPT4gMjc3MjE4\n
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 35010 invoked from network); 5 Nov 2015 20:49:36 -0000
Received: from aserp1040.oracle.com (HELO aserp1040.oracle.com)
	(141.146.126.69)
	by server-4.tower-206.messagelabs.com with DHE-RSA-AES256-GCM-SHA384
	encrypted SMTP; 5 Nov 2015 20:49:36 -0000
Received: from userv0022.oracle.com (userv0022.oracle.com [156.151.31.74])
	by aserp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with
	ESMTP id tA5KnXIU001712
	(version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK);
	Thu, 5 Nov 2015 20:49:34 GMT
Received: from aserv0122.oracle.com (aserv0122.oracle.com [141.146.126.236])
	by userv0022.oracle.com (8.13.8/8.13.8) with ESMTP id tA5KnXrd012189
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL);
	Thu, 5 Nov 2015 20:49:33 GMT
Received: from abhmp0007.oracle.com (abhmp0007.oracle.com [141.146.116.13])
	by aserv0122.oracle.com (8.13.8/8.13.8) with ESMTP id tA5KnXDf017303;
	Thu, 5 Nov 2015 20:49:33 GMT
Received: from x230.dumpdata.com (/209.6.196.81)
	by default (Oracle Beehive Gateway v4.0)
	with ESMTP ; Thu, 05 Nov 2015 12:49:32 -0800
Date: Thu, 5 Nov 2015 15:49:27 -0500
From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: Lars Kurth <lars.kurth.xen@gmail.com>
Message-ID: <20151105204927.GA4058@x230.dumpdata.com>
References: <B7204A9D-30E9-429A-B727-8199654981C8@gmail.com>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <B7204A9D-30E9-429A-B727-8199654981C8@gmail.com>
User-Agent: Mutt/1.5.23 (2014-03-12)
X-Source-IP: userv0022.oracle.com [156.151.31.74]
X-Mailman-Approved-At: Fri, 06 Nov 2015 11:01:57 +0000
Cc: Xen-devel <xen-devel@lists.xenproject.org>,
	Win-pv-devel@lists.xenproject.org,
	mirageos-devel <mirageos-devel@lists.xenproject.org>,
	xen-api@lists.xenproject.org
Subject: Re: [win-pv-devel] [Xen-devel] Hackathon 2016 Location Preferences
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

On Thu, Nov 05, 2015 at 03:21:18PM +0000, Lars Kurth wrote:
> Hi all,
> 
> I wanted to do quick straw-poll regarding Hackathon Locations for next year. Before I do this though, I wanted to let you know that the 2016 Developer Summit will most likely be in Berlin in October (I am in the process of finalising space, budget and contract details which will need to be approved by the Advisory Board).
> 
> We do have two options for a Hackathon: China (either Shanghai, Hangzhou or Beijing - details TBC) and Cambridge, UK. We are still in the early planning phase and the budget for the Hackathon has not yet been approved. 
> 

Cambridge UK would be nice. As much as I enjoyed traveling to China -
travel itself eats two days :-(

> Do let me know of your preference, and I will see whether I can work with the vendor(s) who are willing to host the 2016 Hackathon and choose a location, which suits a majority of developers.
> 
> Best Regards
> Lars
> 
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xen.org
> http://lists.xen.org/xen-devel

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

From win-pv-devel-bounces@lists.xenproject.org Fri Nov 06 11:01:59 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 06 Nov 2015 11:01:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZuemM-0005Hg-At; Fri, 06 Nov 2015 11:01:58 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <konrad.wilk@oracle.com>)
	id 1ZuRWv-0006VS-IL; Thu, 05 Nov 2015 20:53:09 +0000
Received: from [193.109.254.147] by server-13.bemta-14.messagelabs.com id
	80/38-12371-4B1CB365; Thu, 05 Nov 2015 20:53:08 +0000
X-Env-Sender: konrad.wilk@oracle.com
X-Msg-Ref: server-12.tower-27.messagelabs.com!1446756786!859676!1
X-Originating-IP: [156.151.31.81]
X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: 
	VHJ1c3RlZCBJUDogMTU2LjE1MS4zMS44MSA9PiAyODgzMzk=\n
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 42792 invoked from network); 5 Nov 2015 20:53:07 -0000
Received: from userp1040.oracle.com (HELO userp1040.oracle.com) (156.151.31.81)
	by server-12.tower-27.messagelabs.com with DHE-RSA-AES256-GCM-SHA384
	encrypted SMTP; 5 Nov 2015 20:53:07 -0000
Received: from aserv0022.oracle.com (aserv0022.oracle.com [141.146.126.234])
	by userp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with
	ESMTP id tA5Kr0ZA023478
	(version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK);
	Thu, 5 Nov 2015 20:53:01 GMT
Received: from aserv0121.oracle.com (aserv0121.oracle.com [141.146.126.235])
	by aserv0022.oracle.com (8.13.8/8.13.8) with ESMTP id tA5Kr0nT006616
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL);
	Thu, 5 Nov 2015 20:53:00 GMT
Received: from abhmp0007.oracle.com (abhmp0007.oracle.com [141.146.116.13])
	by aserv0121.oracle.com (8.13.8/8.13.8) with ESMTP id tA5Kr086003699;
	Thu, 5 Nov 2015 20:53:00 GMT
Received: from x230.dumpdata.com (/209.6.196.81)
	by default (Oracle Beehive Gateway v4.0)
	with ESMTP ; Thu, 05 Nov 2015 12:53:00 -0800
Date: Thu, 5 Nov 2015 15:52:58 -0500
From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: Lars Kurth <lars.kurth.xen@gmail.com>
Message-ID: <20151105205258.GB4058@x230.dumpdata.com>
References: <4427BD5E-E811-4852-A1CD-A84823F23F70@gmail.com>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <4427BD5E-E811-4852-A1CD-A84823F23F70@gmail.com>
User-Agent: Mutt/1.5.23 (2014-03-12)
X-Source-IP: aserv0022.oracle.com [141.146.126.234]
X-Mailman-Approved-At: Fri, 06 Nov 2015 11:01:57 +0000
Cc: Xen-devel <xen-devel@lists.xenproject.org>,
	Win-pv-devel@lists.xenproject.org, xen-api@lists.xenproject.org,
	mirageos-devel@xenproject.org
Subject: Re: [win-pv-devel] [Xen-devel] 2016 Xen Dev Summit Location (input
 needed before next Thu)
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

On Thu, Nov 05, 2015 at 06:31:22PM +0000, Lars Kurth wrote:
> Hi all,
> 
> I was just informed that it is not going to be possible to hold the Developer Summit alongside LinuxCon in Berlin, unless we make some hard choices. I had originally had booked the space and all looked fine when it was originally arranged several months ago. Seems that the LinuxCon organisers tripped over a German holiday and had not accounted for it. I would like to get your input before the next board meeting in 10 days, such that I have community input for the meeting and I can make a swift decision at the meeting.
> 
> We have the following options
> * Hold it on Monday Oct 3 - to Tue Oct 4 : the problem is that Oct 3 is a public holiday in Germany, which would affect German participants

-1
> * Do a 1 day event only on Oct 4 : I don't think this is practicable

-1
> * Hold the event alongside LinuxCon in Toronto in August, but then we'd have a Dev Summit in the US for 3 years in a row. On the plus side, it will be Linux' 25th birthday 
> 

+1
> Other options, such as holding the event on its own will be too expensive. Please let me know your opinions.
> 
> Best Regards
> Lars
> 
> > From: Angela Brown <angela@linuxfoundation.org>
> > Subject: Xen Summit 2016
> > Date: 5 November 2015 17:32:11 GMT
> > To: Lars Kurth <lars.kurth@xen.org>
> > 
> > Hi Lars,
> > 
> > Sorry for the delay in getting back to you as we had to get a few things sorted. 
> > 
> > First the bad news. It turns out that Monday, October 3, 2016 is German Unity Day and we've decided it will not be a good idea to hold LinuxCon on this day. So we are moving LinuxCon/ContainerCon to Tuesday, Wednesday, Thursday of that week and ELC-E will be Thursday & Friday as scheduled. This means that we have absolutely no additional space on Thursday. In addition, the space we do have in terms of larger rooms on Tuesday and Wednesday is extremely limited. We went through all the space yesterday, and we don't have any extra rooms that fit over 50ppl available on Tuesday & Wednesday. Thus, holding Xen Summit overlapping in Berlin at the same venue isn't going to work.  The only real option for larger rooms in Berlin would be on Monday (but not on Tuesday, and again this is a holiday).
> > 
> > We can co-locate in Toronto in August but only on the two days after LinuxCon/ContainerCon - Thursday and Friday (but we can do your board meetings on Wednesday). Please let me know if you want me to go ahead and put together a proposal for this or if you have something else in mind.
> > 
> > Thanks and sorry!
> > 
> > Angela
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xen.org
> http://lists.xen.org/xen-devel

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

From win-pv-devel-bounces@lists.xenproject.org Fri Nov 06 11:01:59 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 06 Nov 2015 11:01:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZuemM-0005Hc-8F; Fri, 06 Nov 2015 11:01:58 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <konrad.wilk@oracle.com>)
	id 1ZuRTW-0005xN-RN; Thu, 05 Nov 2015 20:49:38 +0000
Received: from [85.158.139.211] by server-4.bemta-5.messagelabs.com id
	D2/2E-24856-1E0CB365; Thu, 05 Nov 2015 20:49:37 +0000
X-Env-Sender: konrad.wilk@oracle.com
X-Msg-Ref: server-4.tower-206.messagelabs.com!1446756575!1387190!1
X-Originating-IP: [141.146.126.69]
X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: 
	VHJ1c3RlZCBJUDogMTQxLjE0Ni4xMjYuNjkgPT4gMjc3MjE4\n
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 35010 invoked from network); 5 Nov 2015 20:49:36 -0000
Received: from aserp1040.oracle.com (HELO aserp1040.oracle.com)
	(141.146.126.69)
	by server-4.tower-206.messagelabs.com with DHE-RSA-AES256-GCM-SHA384
	encrypted SMTP; 5 Nov 2015 20:49:36 -0000
Received: from userv0022.oracle.com (userv0022.oracle.com [156.151.31.74])
	by aserp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with
	ESMTP id tA5KnXIU001712
	(version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK);
	Thu, 5 Nov 2015 20:49:34 GMT
Received: from aserv0122.oracle.com (aserv0122.oracle.com [141.146.126.236])
	by userv0022.oracle.com (8.13.8/8.13.8) with ESMTP id tA5KnXrd012189
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL);
	Thu, 5 Nov 2015 20:49:33 GMT
Received: from abhmp0007.oracle.com (abhmp0007.oracle.com [141.146.116.13])
	by aserv0122.oracle.com (8.13.8/8.13.8) with ESMTP id tA5KnXDf017303;
	Thu, 5 Nov 2015 20:49:33 GMT
Received: from x230.dumpdata.com (/209.6.196.81)
	by default (Oracle Beehive Gateway v4.0)
	with ESMTP ; Thu, 05 Nov 2015 12:49:32 -0800
Date: Thu, 5 Nov 2015 15:49:27 -0500
From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: Lars Kurth <lars.kurth.xen@gmail.com>
Message-ID: <20151105204927.GA4058@x230.dumpdata.com>
References: <B7204A9D-30E9-429A-B727-8199654981C8@gmail.com>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <B7204A9D-30E9-429A-B727-8199654981C8@gmail.com>
User-Agent: Mutt/1.5.23 (2014-03-12)
X-Source-IP: userv0022.oracle.com [156.151.31.74]
X-Mailman-Approved-At: Fri, 06 Nov 2015 11:01:57 +0000
Cc: Xen-devel <xen-devel@lists.xenproject.org>,
	Win-pv-devel@lists.xenproject.org,
	mirageos-devel <mirageos-devel@lists.xenproject.org>,
	xen-api@lists.xenproject.org
Subject: Re: [win-pv-devel] [Xen-devel] Hackathon 2016 Location Preferences
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

On Thu, Nov 05, 2015 at 03:21:18PM +0000, Lars Kurth wrote:
> Hi all,
> 
> I wanted to do quick straw-poll regarding Hackathon Locations for next year. Before I do this though, I wanted to let you know that the 2016 Developer Summit will most likely be in Berlin in October (I am in the process of finalising space, budget and contract details which will need to be approved by the Advisory Board).
> 
> We do have two options for a Hackathon: China (either Shanghai, Hangzhou or Beijing - details TBC) and Cambridge, UK. We are still in the early planning phase and the budget for the Hackathon has not yet been approved. 
> 

Cambridge UK would be nice. As much as I enjoyed traveling to China -
travel itself eats two days :-(

> Do let me know of your preference, and I will see whether I can work with the vendor(s) who are willing to host the 2016 Hackathon and choose a location, which suits a majority of developers.
> 
> Best Regards
> Lars
> 
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xen.org
> http://lists.xen.org/xen-devel

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

From win-pv-devel-bounces@lists.xenproject.org Fri Nov 06 11:01:59 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 06 Nov 2015 11:01:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZuemM-0005Hg-At; Fri, 06 Nov 2015 11:01:58 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <konrad.wilk@oracle.com>)
	id 1ZuRWv-0006VS-IL; Thu, 05 Nov 2015 20:53:09 +0000
Received: from [193.109.254.147] by server-13.bemta-14.messagelabs.com id
	80/38-12371-4B1CB365; Thu, 05 Nov 2015 20:53:08 +0000
X-Env-Sender: konrad.wilk@oracle.com
X-Msg-Ref: server-12.tower-27.messagelabs.com!1446756786!859676!1
X-Originating-IP: [156.151.31.81]
X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: 
	VHJ1c3RlZCBJUDogMTU2LjE1MS4zMS44MSA9PiAyODgzMzk=\n
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 42792 invoked from network); 5 Nov 2015 20:53:07 -0000
Received: from userp1040.oracle.com (HELO userp1040.oracle.com) (156.151.31.81)
	by server-12.tower-27.messagelabs.com with DHE-RSA-AES256-GCM-SHA384
	encrypted SMTP; 5 Nov 2015 20:53:07 -0000
Received: from aserv0022.oracle.com (aserv0022.oracle.com [141.146.126.234])
	by userp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with
	ESMTP id tA5Kr0ZA023478
	(version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK);
	Thu, 5 Nov 2015 20:53:01 GMT
Received: from aserv0121.oracle.com (aserv0121.oracle.com [141.146.126.235])
	by aserv0022.oracle.com (8.13.8/8.13.8) with ESMTP id tA5Kr0nT006616
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL);
	Thu, 5 Nov 2015 20:53:00 GMT
Received: from abhmp0007.oracle.com (abhmp0007.oracle.com [141.146.116.13])
	by aserv0121.oracle.com (8.13.8/8.13.8) with ESMTP id tA5Kr086003699;
	Thu, 5 Nov 2015 20:53:00 GMT
Received: from x230.dumpdata.com (/209.6.196.81)
	by default (Oracle Beehive Gateway v4.0)
	with ESMTP ; Thu, 05 Nov 2015 12:53:00 -0800
Date: Thu, 5 Nov 2015 15:52:58 -0500
From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: Lars Kurth <lars.kurth.xen@gmail.com>
Message-ID: <20151105205258.GB4058@x230.dumpdata.com>
References: <4427BD5E-E811-4852-A1CD-A84823F23F70@gmail.com>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <4427BD5E-E811-4852-A1CD-A84823F23F70@gmail.com>
User-Agent: Mutt/1.5.23 (2014-03-12)
X-Source-IP: aserv0022.oracle.com [141.146.126.234]
X-Mailman-Approved-At: Fri, 06 Nov 2015 11:01:57 +0000
Cc: Xen-devel <xen-devel@lists.xenproject.org>,
	Win-pv-devel@lists.xenproject.org, xen-api@lists.xenproject.org,
	mirageos-devel@xenproject.org
Subject: Re: [win-pv-devel] [Xen-devel] 2016 Xen Dev Summit Location (input
 needed before next Thu)
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

On Thu, Nov 05, 2015 at 06:31:22PM +0000, Lars Kurth wrote:
> Hi all,
> 
> I was just informed that it is not going to be possible to hold the Developer Summit alongside LinuxCon in Berlin, unless we make some hard choices. I had originally had booked the space and all looked fine when it was originally arranged several months ago. Seems that the LinuxCon organisers tripped over a German holiday and had not accounted for it. I would like to get your input before the next board meeting in 10 days, such that I have community input for the meeting and I can make a swift decision at the meeting.
> 
> We have the following options
> * Hold it on Monday Oct 3 - to Tue Oct 4 : the problem is that Oct 3 is a public holiday in Germany, which would affect German participants

-1
> * Do a 1 day event only on Oct 4 : I don't think this is practicable

-1
> * Hold the event alongside LinuxCon in Toronto in August, but then we'd have a Dev Summit in the US for 3 years in a row. On the plus side, it will be Linux' 25th birthday 
> 

+1
> Other options, such as holding the event on its own will be too expensive. Please let me know your opinions.
> 
> Best Regards
> Lars
> 
> > From: Angela Brown <angela@linuxfoundation.org>
> > Subject: Xen Summit 2016
> > Date: 5 November 2015 17:32:11 GMT
> > To: Lars Kurth <lars.kurth@xen.org>
> > 
> > Hi Lars,
> > 
> > Sorry for the delay in getting back to you as we had to get a few things sorted. 
> > 
> > First the bad news. It turns out that Monday, October 3, 2016 is German Unity Day and we've decided it will not be a good idea to hold LinuxCon on this day. So we are moving LinuxCon/ContainerCon to Tuesday, Wednesday, Thursday of that week and ELC-E will be Thursday & Friday as scheduled. This means that we have absolutely no additional space on Thursday. In addition, the space we do have in terms of larger rooms on Tuesday and Wednesday is extremely limited. We went through all the space yesterday, and we don't have any extra rooms that fit over 50ppl available on Tuesday & Wednesday. Thus, holding Xen Summit overlapping in Berlin at the same venue isn't going to work.  The only real option for larger rooms in Berlin would be on Monday (but not on Tuesday, and again this is a holiday).
> > 
> > We can co-locate in Toronto in August but only on the two days after LinuxCon/ContainerCon - Thursday and Friday (but we can do your board meetings on Wednesday). Please let me know if you want me to go ahead and put together a proposal for this or if you have something else in mind.
> > 
> > Thanks and sorry!
> > 
> > Angela
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xen.org
> http://lists.xen.org/xen-devel

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

From win-pv-devel-bounces@lists.xenproject.org Fri Nov 06 11:24:40 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 06 Nov 2015 11:24:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1Zuf8J-0006Wr-Ai; Fri, 06 Nov 2015 11:24:39 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=7450d0d22=Paul.Durrant@citrix.com>)
	id 1Zuf8I-0006Wg-0q; Fri, 06 Nov 2015 11:24:38 +0000
Received: from [85.158.139.211] by server-14.bemta-5.messagelabs.com id
	20/FE-22142-5FD8C365; Fri, 06 Nov 2015 11:24:37 +0000
X-Env-Sender: prvs=7450d0d22=Paul.Durrant@citrix.com
X-Msg-Ref: server-5.tower-206.messagelabs.com!1446809076!1545615!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 10970 invoked from network); 6 Nov 2015 11:24:36 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-5.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	6 Nov 2015 11:24:36 -0000
X-IronPort-AV: E=Sophos;i="5.20,251,1444694400"; 
   d="scan'208";a="7106696"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Lars Kurth <lars.kurth.xen@gmail.com>, Xen-devel
	<xen-devel@lists.xenproject.org>, "mirageos-devel@xenproject.org"
	<mirageos-devel@xenproject.org>, "xen-api@lists.xenproject.org"
	<xen-api@lists.xenproject.org>, "Win-pv-devel@lists.xenproject.org"
	<Win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] 2016 Xen Dev Summit Location (input needed
	before	next Thu)
Thread-Index: AQHRF/hHB4L1uBl1K0WkVLGdeyYpsJ6O2rqw
Date: Fri, 6 Nov 2015 11:24:35 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F662E93@AMSPEX01CL01.citrite.net>
References: <4427BD5E-E811-4852-A1CD-A84823F23F70@gmail.com>
In-Reply-To: <4427BD5E-E811-4852-A1CD-A84823F23F70@gmail.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] 2016 Xen Dev Summit Location (input needed
 before	next Thu)
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> bounces@lists.xenproject.org] On Behalf Of Lars Kurth
> Sent: 05 November 2015 18:31
> To: Xen-devel; mirageos-devel@xenproject.org; xen-
> api@lists.xenproject.org; Win-pv-devel@lists.xenproject.org
> Subject: [win-pv-devel] 2016 Xen Dev Summit Location (input needed before
> next Thu)
> 
> Hi all,
> 
> I was just informed that it is not going to be possible to hold the Developer
> Summit alongside LinuxCon in Berlin, unless we make some hard choices. I
> had originally had booked the space and all looked fine when it was originally
> arranged several months ago. Seems that the LinuxCon organisers tripped
> over a German holiday and had not accounted for it. I would like to get your
> input before the next board meeting in 10 days, such that I have community
> input for the meeting and I can make a swift decision at the meeting.
> 
> We have the following options
> * Hold it on Monday Oct 3 - to Tue Oct 4 : the problem is that Oct 3 is a public
> holiday in Germany, which would affect German participants
> * Do a 1 day event only on Oct 4 : I don't think this is practicable
> * Hold the event alongside LinuxCon in Toronto in August, but then we'd
> have a Dev Summit in the US for 3 years in a row.

I think some Canadians might get offended at that! ;-)

s/US/North America

>  On the plus side, it will be
> Linux' 25th birthday
> 
> Other options, such as holding the event on its own will be too expensive.
> Please let me know your opinions.

I think Toronto would be fine.

  Paul

> 
> Best Regards
> Lars
> 
> > From: Angela Brown <angela@linuxfoundation.org>
> > Subject: Xen Summit 2016
> > Date: 5 November 2015 17:32:11 GMT
> > To: Lars Kurth <lars.kurth@xen.org>
> >
> > Hi Lars,
> >
> > Sorry for the delay in getting back to you as we had to get a few things
> sorted.
> >
> > First the bad news. It turns out that Monday, October 3, 2016 is German
> Unity Day and we've decided it will not be a good idea to hold LinuxCon on
> this day. So we are moving LinuxCon/ContainerCon to Tuesday, Wednesday,
> Thursday of that week and ELC-E will be Thursday & Friday as scheduled. This
> means that we have absolutely no additional space on Thursday. In addition,
> the space we do have in terms of larger rooms on Tuesday and Wednesday is
> extremely limited. We went through all the space yesterday, and we don't
> have any extra rooms that fit over 50ppl available on Tuesday & Wednesday.
> Thus, holding Xen Summit overlapping in Berlin at the same venue isn't going
> to work.  The only real option for larger rooms in Berlin would be on Monday
> (but not on Tuesday, and again this is a holiday).
> >
> > We can co-locate in Toronto in August but only on the two days after
> LinuxCon/ContainerCon - Thursday and Friday (but we can do your board
> meetings on Wednesday). Please let me know if you want me to go ahead
> and put together a proposal for this or if you have something else in mind.
> >
> > Thanks and sorry!
> >
> > Angela
> 
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

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

From win-pv-devel-bounces@lists.xenproject.org Fri Nov 06 11:24:40 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 06 Nov 2015 11:24:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1Zuf8J-0006Wr-Ai; Fri, 06 Nov 2015 11:24:39 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=7450d0d22=Paul.Durrant@citrix.com>)
	id 1Zuf8I-0006Wg-0q; Fri, 06 Nov 2015 11:24:38 +0000
Received: from [85.158.139.211] by server-14.bemta-5.messagelabs.com id
	20/FE-22142-5FD8C365; Fri, 06 Nov 2015 11:24:37 +0000
X-Env-Sender: prvs=7450d0d22=Paul.Durrant@citrix.com
X-Msg-Ref: server-5.tower-206.messagelabs.com!1446809076!1545615!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 10970 invoked from network); 6 Nov 2015 11:24:36 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-5.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	6 Nov 2015 11:24:36 -0000
X-IronPort-AV: E=Sophos;i="5.20,251,1444694400"; 
   d="scan'208";a="7106696"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Lars Kurth <lars.kurth.xen@gmail.com>, Xen-devel
	<xen-devel@lists.xenproject.org>, "mirageos-devel@xenproject.org"
	<mirageos-devel@xenproject.org>, "xen-api@lists.xenproject.org"
	<xen-api@lists.xenproject.org>, "Win-pv-devel@lists.xenproject.org"
	<Win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] 2016 Xen Dev Summit Location (input needed
	before	next Thu)
Thread-Index: AQHRF/hHB4L1uBl1K0WkVLGdeyYpsJ6O2rqw
Date: Fri, 6 Nov 2015 11:24:35 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F662E93@AMSPEX01CL01.citrite.net>
References: <4427BD5E-E811-4852-A1CD-A84823F23F70@gmail.com>
In-Reply-To: <4427BD5E-E811-4852-A1CD-A84823F23F70@gmail.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] 2016 Xen Dev Summit Location (input needed
 before	next Thu)
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> bounces@lists.xenproject.org] On Behalf Of Lars Kurth
> Sent: 05 November 2015 18:31
> To: Xen-devel; mirageos-devel@xenproject.org; xen-
> api@lists.xenproject.org; Win-pv-devel@lists.xenproject.org
> Subject: [win-pv-devel] 2016 Xen Dev Summit Location (input needed before
> next Thu)
> 
> Hi all,
> 
> I was just informed that it is not going to be possible to hold the Developer
> Summit alongside LinuxCon in Berlin, unless we make some hard choices. I
> had originally had booked the space and all looked fine when it was originally
> arranged several months ago. Seems that the LinuxCon organisers tripped
> over a German holiday and had not accounted for it. I would like to get your
> input before the next board meeting in 10 days, such that I have community
> input for the meeting and I can make a swift decision at the meeting.
> 
> We have the following options
> * Hold it on Monday Oct 3 - to Tue Oct 4 : the problem is that Oct 3 is a public
> holiday in Germany, which would affect German participants
> * Do a 1 day event only on Oct 4 : I don't think this is practicable
> * Hold the event alongside LinuxCon in Toronto in August, but then we'd
> have a Dev Summit in the US for 3 years in a row.

I think some Canadians might get offended at that! ;-)

s/US/North America

>  On the plus side, it will be
> Linux' 25th birthday
> 
> Other options, such as holding the event on its own will be too expensive.
> Please let me know your opinions.

I think Toronto would be fine.

  Paul

> 
> Best Regards
> Lars
> 
> > From: Angela Brown <angela@linuxfoundation.org>
> > Subject: Xen Summit 2016
> > Date: 5 November 2015 17:32:11 GMT
> > To: Lars Kurth <lars.kurth@xen.org>
> >
> > Hi Lars,
> >
> > Sorry for the delay in getting back to you as we had to get a few things
> sorted.
> >
> > First the bad news. It turns out that Monday, October 3, 2016 is German
> Unity Day and we've decided it will not be a good idea to hold LinuxCon on
> this day. So we are moving LinuxCon/ContainerCon to Tuesday, Wednesday,
> Thursday of that week and ELC-E will be Thursday & Friday as scheduled. This
> means that we have absolutely no additional space on Thursday. In addition,
> the space we do have in terms of larger rooms on Tuesday and Wednesday is
> extremely limited. We went through all the space yesterday, and we don't
> have any extra rooms that fit over 50ppl available on Tuesday & Wednesday.
> Thus, holding Xen Summit overlapping in Berlin at the same venue isn't going
> to work.  The only real option for larger rooms in Berlin would be on Monday
> (but not on Tuesday, and again this is a holiday).
> >
> > We can co-locate in Toronto in August but only on the two days after
> LinuxCon/ContainerCon - Thursday and Friday (but we can do your board
> meetings on Wednesday). Please let me know if you want me to go ahead
> and put together a proposal for this or if you have something else in mind.
> >
> > Thanks and sorry!
> >
> > Angela
> 
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

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

From win-pv-devel-bounces@lists.xenproject.org Fri Nov 06 11:26:15 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 06 Nov 2015 11:26:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1Zuf9r-0006hg-Gq; Fri, 06 Nov 2015 11:26:15 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=74553862b=Stefano.Stabellini@citrix.com>)
	id 1Zuf9p-0006hJ-VT; Fri, 06 Nov 2015 11:26:14 +0000
Received: from [85.158.139.211] by server-7.bemta-5.messagelabs.com id
	C6/4C-13905-55E8C365; Fri, 06 Nov 2015 11:26:13 +0000
X-Env-Sender: prvs=74553862b=Stefano.Stabellini@citrix.com
X-Msg-Ref: server-2.tower-206.messagelabs.com!1446809170!1548428!1
X-Originating-IP: [66.165.176.63]
X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: 
	VHJ1c3RlZCBJUDogNjYuMTY1LjE3Ni42MyA9PiAzMDYwNDg=\n,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 51683 invoked from network); 6 Nov 2015 11:26:12 -0000
Received: from smtp02.citrix.com (HELO SMTP02.CITRIX.COM) (66.165.176.63)
	by server-2.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	6 Nov 2015 11:26:12 -0000
X-IronPort-AV: E=Sophos;i="5.20,251,1444694400"; d="scan'208";a="316151061"
Date: Fri, 6 Nov 2015 11:25:59 +0000
From: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
X-X-Sender: sstabellini@kaball.uk.xensource.com
To: Lars Kurth <lars.kurth.xen@gmail.com>
In-Reply-To: <4427BD5E-E811-4852-A1CD-A84823F23F70@gmail.com>
Message-ID: <alpine.DEB.2.02.1511061124540.13541@kaball.uk.xensource.com>
References: <4427BD5E-E811-4852-A1CD-A84823F23F70@gmail.com>
User-Agent: Alpine 2.02 (DEB 1266 2009-07-14)
MIME-Version: 1.0
X-DLP: MIA2
Cc: Xen-devel <xen-devel@lists.xenproject.org>,
	Win-pv-devel@lists.xenproject.org, xen-api@lists.xenproject.org,
	mirageos-devel@xenproject.org
Subject: Re: [win-pv-devel] [Xen-devel] 2016 Xen Dev Summit Location (input
 needed before next Thu)
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

On Thu, 5 Nov 2015, Lars Kurth wrote:
> Hi all,
> 
> I was just informed that it is not going to be possible to hold the Developer Summit alongside LinuxCon in Berlin, unless we make some hard choices. I had originally had booked the space and all looked fine when it was originally arranged several months ago. Seems that the LinuxCon organisers tripped over a German holiday and had not accounted for it. I would like to get your input before the next board meeting in 10 days, such that I have community input for the meeting and I can make a swift decision at the meeting.
> 
> We have the following options
> * Hold it on Monday Oct 3 - to Tue Oct 4 : the problem is that Oct 3 is a public holiday in Germany, which would affect German participants
> * Do a 1 day event only on Oct 4 : I don't think this is practicable
> * Hold the event alongside LinuxCon in Toronto in August, but then we'd have a Dev Summit in the US for 3 years in a row. On the plus side, it will be Linux' 25th birthday 

I really enjoyed the celebrations for Linux' 20th birthday in Vancouver,
so I vote for Toronto :-)


> Other options, such as holding the event on its own will be too expensive. Please let me know your opinions.
> 
> Best Regards
> Lars
> 
> > From: Angela Brown <angela@linuxfoundation.org>
> > Subject: Xen Summit 2016
> > Date: 5 November 2015 17:32:11 GMT
> > To: Lars Kurth <lars.kurth@xen.org>
> > 
> > Hi Lars,
> > 
> > Sorry for the delay in getting back to you as we had to get a few things sorted. 
> > 
> > First the bad news. It turns out that Monday, October 3, 2016 is German Unity Day and we've decided it will not be a good idea to hold LinuxCon on this day. So we are moving LinuxCon/ContainerCon to Tuesday, Wednesday, Thursday of that week and ELC-E will be Thursday & Friday as scheduled. This means that we have absolutely no additional space on Thursday. In addition, the space we do have in terms of larger rooms on Tuesday and Wednesday is extremely limited. We went through all the space yesterday, and we don't have any extra rooms that fit over 50ppl available on Tuesday & Wednesday. Thus, holding Xen Summit overlapping in Berlin at the same venue isn't going to work.  The only real option for larger rooms in Berlin would be on Monday (but not on Tuesday, and again this is a holiday).
> > 
> > We can co-locate in Toronto in August but only on the two days after LinuxCon/ContainerCon - Thursday and Friday (but we can do your board meetings on Wednesday). Please let me know if you want me to go ahead and put together a proposal for this or if you have something else in mind.
> > 
> > Thanks and sorry!
> > 
> > Angela
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xen.org
> http://lists.xen.org/xen-devel
> 

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

From win-pv-devel-bounces@lists.xenproject.org Fri Nov 06 11:26:15 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 06 Nov 2015 11:26:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1Zuf9r-0006hg-Gq; Fri, 06 Nov 2015 11:26:15 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=74553862b=Stefano.Stabellini@citrix.com>)
	id 1Zuf9p-0006hJ-VT; Fri, 06 Nov 2015 11:26:14 +0000
Received: from [85.158.139.211] by server-7.bemta-5.messagelabs.com id
	C6/4C-13905-55E8C365; Fri, 06 Nov 2015 11:26:13 +0000
X-Env-Sender: prvs=74553862b=Stefano.Stabellini@citrix.com
X-Msg-Ref: server-2.tower-206.messagelabs.com!1446809170!1548428!1
X-Originating-IP: [66.165.176.63]
X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: 
	VHJ1c3RlZCBJUDogNjYuMTY1LjE3Ni42MyA9PiAzMDYwNDg=\n,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 51683 invoked from network); 6 Nov 2015 11:26:12 -0000
Received: from smtp02.citrix.com (HELO SMTP02.CITRIX.COM) (66.165.176.63)
	by server-2.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	6 Nov 2015 11:26:12 -0000
X-IronPort-AV: E=Sophos;i="5.20,251,1444694400"; d="scan'208";a="316151061"
Date: Fri, 6 Nov 2015 11:25:59 +0000
From: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
X-X-Sender: sstabellini@kaball.uk.xensource.com
To: Lars Kurth <lars.kurth.xen@gmail.com>
In-Reply-To: <4427BD5E-E811-4852-A1CD-A84823F23F70@gmail.com>
Message-ID: <alpine.DEB.2.02.1511061124540.13541@kaball.uk.xensource.com>
References: <4427BD5E-E811-4852-A1CD-A84823F23F70@gmail.com>
User-Agent: Alpine 2.02 (DEB 1266 2009-07-14)
MIME-Version: 1.0
X-DLP: MIA2
Cc: Xen-devel <xen-devel@lists.xenproject.org>,
	Win-pv-devel@lists.xenproject.org, xen-api@lists.xenproject.org,
	mirageos-devel@xenproject.org
Subject: Re: [win-pv-devel] [Xen-devel] 2016 Xen Dev Summit Location (input
 needed before next Thu)
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

On Thu, 5 Nov 2015, Lars Kurth wrote:
> Hi all,
> 
> I was just informed that it is not going to be possible to hold the Developer Summit alongside LinuxCon in Berlin, unless we make some hard choices. I had originally had booked the space and all looked fine when it was originally arranged several months ago. Seems that the LinuxCon organisers tripped over a German holiday and had not accounted for it. I would like to get your input before the next board meeting in 10 days, such that I have community input for the meeting and I can make a swift decision at the meeting.
> 
> We have the following options
> * Hold it on Monday Oct 3 - to Tue Oct 4 : the problem is that Oct 3 is a public holiday in Germany, which would affect German participants
> * Do a 1 day event only on Oct 4 : I don't think this is practicable
> * Hold the event alongside LinuxCon in Toronto in August, but then we'd have a Dev Summit in the US for 3 years in a row. On the plus side, it will be Linux' 25th birthday 

I really enjoyed the celebrations for Linux' 20th birthday in Vancouver,
so I vote for Toronto :-)


> Other options, such as holding the event on its own will be too expensive. Please let me know your opinions.
> 
> Best Regards
> Lars
> 
> > From: Angela Brown <angela@linuxfoundation.org>
> > Subject: Xen Summit 2016
> > Date: 5 November 2015 17:32:11 GMT
> > To: Lars Kurth <lars.kurth@xen.org>
> > 
> > Hi Lars,
> > 
> > Sorry for the delay in getting back to you as we had to get a few things sorted. 
> > 
> > First the bad news. It turns out that Monday, October 3, 2016 is German Unity Day and we've decided it will not be a good idea to hold LinuxCon on this day. So we are moving LinuxCon/ContainerCon to Tuesday, Wednesday, Thursday of that week and ELC-E will be Thursday & Friday as scheduled. This means that we have absolutely no additional space on Thursday. In addition, the space we do have in terms of larger rooms on Tuesday and Wednesday is extremely limited. We went through all the space yesterday, and we don't have any extra rooms that fit over 50ppl available on Tuesday & Wednesday. Thus, holding Xen Summit overlapping in Berlin at the same venue isn't going to work.  The only real option for larger rooms in Berlin would be on Monday (but not on Tuesday, and again this is a holiday).
> > 
> > We can co-locate in Toronto in August but only on the two days after LinuxCon/ContainerCon - Thursday and Friday (but we can do your board meetings on Wednesday). Please let me know if you want me to go ahead and put together a proposal for this or if you have something else in mind.
> > 
> > Thanks and sorry!
> > 
> > Angela
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xen.org
> http://lists.xen.org/xen-devel
> 

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

From win-pv-devel-bounces@lists.xenproject.org Fri Nov 06 11:44:52 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 06 Nov 2015 11:44:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZufRs-000844-5I; Fri, 06 Nov 2015 11:44:52 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=745800d7e=david.vrabel@citrix.com>)
	id 1ZufRq-00083h-B3; Fri, 06 Nov 2015 11:44:50 +0000
Received: from [85.158.137.68] by server-12.bemta-3.messagelabs.com id
	43/C9-14900-1B29C365; Fri, 06 Nov 2015 11:44:49 +0000
X-Env-Sender: prvs=745800d7e=david.vrabel@citrix.com
X-Msg-Ref: server-6.tower-31.messagelabs.com!1446810285!1521136!1
X-Originating-IP: [66.165.176.89]
X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: 
	VHJ1c3RlZCBJUDogNjYuMTY1LjE3Ni44OSA9PiAyMDMwMDc=\n,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 61139 invoked from network); 6 Nov 2015 11:44:46 -0000
Received: from smtp.citrix.com (HELO SMTP.CITRIX.COM) (66.165.176.89)
	by server-6.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	6 Nov 2015 11:44:46 -0000
X-IronPort-AV: E=Sophos;i="5.20,251,1444694400"; d="scan'208";a="310818580"
Message-ID: <563C92A5.4080906@citrix.com>
Date: Fri, 6 Nov 2015 11:44:37 +0000
From: David Vrabel <david.vrabel@citrix.com>
User-Agent: Mozilla/5.0 (X11; Linux x86_64;
	rv:31.0) Gecko/20100101 Icedove/31.8.0
MIME-Version: 1.0
To: Lars Kurth <lars.kurth.xen@gmail.com>, Xen-devel
	<xen-devel@lists.xenproject.org>, <mirageos-devel@xenproject.org>,
	<xen-api@lists.xenproject.org>, <Win-pv-devel@lists.xenproject.org>
References: <4427BD5E-E811-4852-A1CD-A84823F23F70@gmail.com>
In-Reply-To: <4427BD5E-E811-4852-A1CD-A84823F23F70@gmail.com>
X-DLP: MIA2
Subject: Re: [win-pv-devel] [Xen-devel] 2016 Xen Dev Summit Location (input
 needed before next Thu)
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

On 05/11/15 18:31, Lars Kurth wrote:
> Hi all,
> 
> We have the following options * Hold it on Monday Oct 3 - to Tue Oct 
> 4 : the problem is that Oct 3 is a public holiday in Germany, which
> would affect German participants

The email from Angela below says there's no rooms available on the Tues

  "we don't have any extra rooms that fit over 50ppl available on
   Tuesday & Wednesday"

Does this not exclude XenSummit on the Mon-Tue?

> * Do a 1 day event only on Oct 4 : I don't think this is practicable

See above re rooms on Tuesday.

David

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

From win-pv-devel-bounces@lists.xenproject.org Fri Nov 06 11:44:52 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 06 Nov 2015 11:44:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZufRs-000844-5I; Fri, 06 Nov 2015 11:44:52 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=745800d7e=david.vrabel@citrix.com>)
	id 1ZufRq-00083h-B3; Fri, 06 Nov 2015 11:44:50 +0000
Received: from [85.158.137.68] by server-12.bemta-3.messagelabs.com id
	43/C9-14900-1B29C365; Fri, 06 Nov 2015 11:44:49 +0000
X-Env-Sender: prvs=745800d7e=david.vrabel@citrix.com
X-Msg-Ref: server-6.tower-31.messagelabs.com!1446810285!1521136!1
X-Originating-IP: [66.165.176.89]
X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: 
	VHJ1c3RlZCBJUDogNjYuMTY1LjE3Ni44OSA9PiAyMDMwMDc=\n,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 61139 invoked from network); 6 Nov 2015 11:44:46 -0000
Received: from smtp.citrix.com (HELO SMTP.CITRIX.COM) (66.165.176.89)
	by server-6.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	6 Nov 2015 11:44:46 -0000
X-IronPort-AV: E=Sophos;i="5.20,251,1444694400"; d="scan'208";a="310818580"
Message-ID: <563C92A5.4080906@citrix.com>
Date: Fri, 6 Nov 2015 11:44:37 +0000
From: David Vrabel <david.vrabel@citrix.com>
User-Agent: Mozilla/5.0 (X11; Linux x86_64;
	rv:31.0) Gecko/20100101 Icedove/31.8.0
MIME-Version: 1.0
To: Lars Kurth <lars.kurth.xen@gmail.com>, Xen-devel
	<xen-devel@lists.xenproject.org>, <mirageos-devel@xenproject.org>,
	<xen-api@lists.xenproject.org>, <Win-pv-devel@lists.xenproject.org>
References: <4427BD5E-E811-4852-A1CD-A84823F23F70@gmail.com>
In-Reply-To: <4427BD5E-E811-4852-A1CD-A84823F23F70@gmail.com>
X-DLP: MIA2
Subject: Re: [win-pv-devel] [Xen-devel] 2016 Xen Dev Summit Location (input
 needed before next Thu)
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

On 05/11/15 18:31, Lars Kurth wrote:
> Hi all,
> 
> We have the following options * Hold it on Monday Oct 3 - to Tue Oct 
> 4 : the problem is that Oct 3 is a public holiday in Germany, which
> would affect German participants

The email from Angela below says there's no rooms available on the Tues

  "we don't have any extra rooms that fit over 50ppl available on
   Tuesday & Wednesday"

Does this not exclude XenSummit on the Mon-Tue?

> * Do a 1 day event only on Oct 4 : I don't think this is practicable

See above re rooms on Tuesday.

David

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

From win-pv-devel-bounces@lists.xenproject.org Fri Nov 06 12:33:33 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 06 Nov 2015 12:33:33 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZugCy-00023l-6g; Fri, 06 Nov 2015 12:33:32 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <lars.kurth.xen@gmail.com>)
	id 1ZugCx-00023a-5h; Fri, 06 Nov 2015 12:33:31 +0000
Received: from [85.158.137.68] by server-16.bemta-3.messagelabs.com id
	24/23-03763-A1E9C365; Fri, 06 Nov 2015 12:33:30 +0000
X-Env-Sender: lars.kurth.xen@gmail.com
X-Msg-Ref: server-10.tower-31.messagelabs.com!1446813209!1540046!1
X-Originating-IP: [74.125.82.44]
X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 28722 invoked from network); 6 Nov 2015 12:33:29 -0000
Received: from mail-wm0-f44.google.com (HELO mail-wm0-f44.google.com)
	(74.125.82.44)
	by server-10.tower-31.messagelabs.com with AES128-GCM-SHA256 encrypted
	SMTP; 6 Nov 2015 12:33:29 -0000
Received: by wmll128 with SMTP id l128so39584219wml.0;
	Fri, 06 Nov 2015 04:33:29 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=content-type:mime-version:subject:from:in-reply-to:date:cc
	:content-transfer-encoding:message-id:references:to;
	bh=k3P6mHdBigeNqrhBXaWDCU3hNgCi6JiNaB6mEJpj6PQ=;
	b=gsrl8sIk0S0wELD7PUrcCyKKRJzwYmWqpuoAzVQcCO7npRGB2hEZn+KTQFPEWOrdg3
	6Cp6eztps/qwfDdREEmZFdUYKqsCIA1yWBJN/zyj5jX+65QGjkWjxWVw/FMcke6CMgkB
	0V4Szm5e+O5DMhZyx7CA4YQeK+o7nViz36QjMaCkmrMdUlsjBSytkfFhzjGw3XSFrXbf
	DanjLsBb+OZAoGhsQFJivqzhPMifnwVVsX89mW63L0Qi289eqRuSMT108g38fp4lHznm
	pLCkCwDuaM6+R7Tz5YBmOV3jEgaZ5SyhjVj1F3JjgSTHns+oVez1D508Byn80RuMCH2F
	R+uQ==
X-Received: by 10.28.19.146 with SMTP id 140mr9412919wmt.96.1446813209010;
	Fri, 06 Nov 2015 04:33:29 -0800 (PST)
Received: from [192.168.0.12] (97e3cc8b.skybroadband.com. [151.227.204.139])
	by smtp.gmail.com with ESMTPSA id m7sm544160wma.16.2015.11.06.04.33.27
	(version=TLSv1/SSLv3 cipher=OTHER);
	Fri, 06 Nov 2015 04:33:27 -0800 (PST)
Mime-Version: 1.0 (Mac OS X Mail 8.2 \(2104\))
From: Lars Kurth <lars.kurth.xen@gmail.com>
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F662E93@AMSPEX01CL01.citrite.net>
Date: Fri, 6 Nov 2015 12:33:12 +0000
Message-Id: <43D8BCEB-411A-4E20-ACBB-BF4C828DECB3@gmail.com>
References: <4427BD5E-E811-4852-A1CD-A84823F23F70@gmail.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F662E93@AMSPEX01CL01.citrite.net>
To: Paul Durrant <Paul.Durrant@citrix.com>
X-Mailer: Apple Mail (2.2104)
Cc: Xen-devel <xen-devel@lists.xenproject.org>,
	"Win-pv-devel@lists.xenproject.org" <Win-pv-devel@lists.xenproject.org>,
	"xen-api@lists.xenproject.org" <xen-api@lists.xenproject.org>,
	"mirageos-devel@xenproject.org" <mirageos-devel@xenproject.org>
Subject: Re: [win-pv-devel] 2016 Xen Dev Summit Location (input needed
	before	next Thu)
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org


> On 6 Nov 2015, at 11:24, Paul Durrant <Paul.Durrant@citrix.com> wrote:
>> 
>> We have the following options
>> * Hold it on Monday Oct 3 - to Tue Oct 4 : the problem is that Oct 3 is a public
>> holiday in Germany, which would affect German participants
>> * Do a 1 day event only on Oct 4 : I don't think this is practicable
>> * Hold the event alongside LinuxCon in Toronto in August, but then we'd
>> have a Dev Summit in the US for 3 years in a row.
> 
> I think some Canadians might get offended at that! ;-)
> 
> s/US/North America

Apologies to any Canadians: that's of course what I meant. Shouldn't write e-mails late at night after a beer
Lars
_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Fri Nov 06 12:33:33 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 06 Nov 2015 12:33:33 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZugCy-00023l-6g; Fri, 06 Nov 2015 12:33:32 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <lars.kurth.xen@gmail.com>)
	id 1ZugCx-00023a-5h; Fri, 06 Nov 2015 12:33:31 +0000
Received: from [85.158.137.68] by server-16.bemta-3.messagelabs.com id
	24/23-03763-A1E9C365; Fri, 06 Nov 2015 12:33:30 +0000
X-Env-Sender: lars.kurth.xen@gmail.com
X-Msg-Ref: server-10.tower-31.messagelabs.com!1446813209!1540046!1
X-Originating-IP: [74.125.82.44]
X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 28722 invoked from network); 6 Nov 2015 12:33:29 -0000
Received: from mail-wm0-f44.google.com (HELO mail-wm0-f44.google.com)
	(74.125.82.44)
	by server-10.tower-31.messagelabs.com with AES128-GCM-SHA256 encrypted
	SMTP; 6 Nov 2015 12:33:29 -0000
Received: by wmll128 with SMTP id l128so39584219wml.0;
	Fri, 06 Nov 2015 04:33:29 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=content-type:mime-version:subject:from:in-reply-to:date:cc
	:content-transfer-encoding:message-id:references:to;
	bh=k3P6mHdBigeNqrhBXaWDCU3hNgCi6JiNaB6mEJpj6PQ=;
	b=gsrl8sIk0S0wELD7PUrcCyKKRJzwYmWqpuoAzVQcCO7npRGB2hEZn+KTQFPEWOrdg3
	6Cp6eztps/qwfDdREEmZFdUYKqsCIA1yWBJN/zyj5jX+65QGjkWjxWVw/FMcke6CMgkB
	0V4Szm5e+O5DMhZyx7CA4YQeK+o7nViz36QjMaCkmrMdUlsjBSytkfFhzjGw3XSFrXbf
	DanjLsBb+OZAoGhsQFJivqzhPMifnwVVsX89mW63L0Qi289eqRuSMT108g38fp4lHznm
	pLCkCwDuaM6+R7Tz5YBmOV3jEgaZ5SyhjVj1F3JjgSTHns+oVez1D508Byn80RuMCH2F
	R+uQ==
X-Received: by 10.28.19.146 with SMTP id 140mr9412919wmt.96.1446813209010;
	Fri, 06 Nov 2015 04:33:29 -0800 (PST)
Received: from [192.168.0.12] (97e3cc8b.skybroadband.com. [151.227.204.139])
	by smtp.gmail.com with ESMTPSA id m7sm544160wma.16.2015.11.06.04.33.27
	(version=TLSv1/SSLv3 cipher=OTHER);
	Fri, 06 Nov 2015 04:33:27 -0800 (PST)
Mime-Version: 1.0 (Mac OS X Mail 8.2 \(2104\))
From: Lars Kurth <lars.kurth.xen@gmail.com>
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F662E93@AMSPEX01CL01.citrite.net>
Date: Fri, 6 Nov 2015 12:33:12 +0000
Message-Id: <43D8BCEB-411A-4E20-ACBB-BF4C828DECB3@gmail.com>
References: <4427BD5E-E811-4852-A1CD-A84823F23F70@gmail.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F662E93@AMSPEX01CL01.citrite.net>
To: Paul Durrant <Paul.Durrant@citrix.com>
X-Mailer: Apple Mail (2.2104)
Cc: Xen-devel <xen-devel@lists.xenproject.org>,
	"Win-pv-devel@lists.xenproject.org" <Win-pv-devel@lists.xenproject.org>,
	"xen-api@lists.xenproject.org" <xen-api@lists.xenproject.org>,
	"mirageos-devel@xenproject.org" <mirageos-devel@xenproject.org>
Subject: Re: [win-pv-devel] 2016 Xen Dev Summit Location (input needed
	before	next Thu)
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org


> On 6 Nov 2015, at 11:24, Paul Durrant <Paul.Durrant@citrix.com> wrote:
>> 
>> We have the following options
>> * Hold it on Monday Oct 3 - to Tue Oct 4 : the problem is that Oct 3 is a public
>> holiday in Germany, which would affect German participants
>> * Do a 1 day event only on Oct 4 : I don't think this is practicable
>> * Hold the event alongside LinuxCon in Toronto in August, but then we'd
>> have a Dev Summit in the US for 3 years in a row.
> 
> I think some Canadians might get offended at that! ;-)
> 
> s/US/North America

Apologies to any Canadians: that's of course what I meant. Shouldn't write e-mails late at night after a beer
Lars
_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Fri Nov 06 12:48:11 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 06 Nov 2015 12:48:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZugR9-0002kG-2U; Fri, 06 Nov 2015 12:48:11 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <lars.kurth.xen@gmail.com>)
	id 1ZugR7-0002k5-8J; Fri, 06 Nov 2015 12:48:09 +0000
Received: from [193.109.254.147] by server-13.bemta-14.messagelabs.com id
	B9/C4-12371-881AC365; Fri, 06 Nov 2015 12:48:08 +0000
X-Env-Sender: lars.kurth.xen@gmail.com
X-Msg-Ref: server-7.tower-27.messagelabs.com!1446814086!1071817!1
X-Originating-IP: [74.125.82.53]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 4987 invoked from network); 6 Nov 2015 12:48:06 -0000
Received: from mail-wm0-f53.google.com (HELO mail-wm0-f53.google.com)
	(74.125.82.53)
	by server-7.tower-27.messagelabs.com with AES128-GCM-SHA256 encrypted
	SMTP; 6 Nov 2015 12:48:06 -0000
Received: by wmec201 with SMTP id c201so17104344wme.0;
	Fri, 06 Nov 2015 04:48:06 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=content-type:mime-version:subject:from:in-reply-to:date:cc
	:content-transfer-encoding:message-id:references:to;
	bh=yqFsKl2GAl+cgSGZlvEX5Xwqka1Uw8AfVlAc5VI7EuM=;
	b=YBmHWOk6+jIe7zxVQgPQriLBB2UqNu908hIbl1kbT5HKc8TeCJHLJkk7/m4ozYi0Xz
	d5OyaKqIZLFtzJL8qvzs65u2mZhbhvaRmJjLOAAr0vdHpgAqbtGaKHtiH78Uprd1lRHn
	82qrFbE+93HkDnOwJlB6siXmWDCK8ipQtlzE9taLZXC3D2VD9MfxR1SJBHuTUrUPLUok
	qxeyXuLu3L2/afsrQsILxUSqAd+V861cWf6kC8gGWRrJIOoeQUT9b1yrmi2BwWwzzYJt
	yYz5th1X9N2AuiG7sbRQqrrSPc6pGH0dykqFLswtM2LGE+lqSO59lx/p8hr3iiCBaML/
	IMUA==
X-Received: by 10.28.131.84 with SMTP id f81mr9506712wmd.57.1446814086501;
	Fri, 06 Nov 2015 04:48:06 -0800 (PST)
Received: from [192.168.0.12] (97e3cc8b.skybroadband.com. [151.227.204.139])
	by smtp.gmail.com with ESMTPSA id
	m137sm2930998wmb.2.2015.11.06.04.48.05
	(version=TLSv1/SSLv3 cipher=OTHER);
	Fri, 06 Nov 2015 04:48:05 -0800 (PST)
Mime-Version: 1.0 (Mac OS X Mail 8.2 \(2104\))
From: Lars Kurth <lars.kurth.xen@gmail.com>
In-Reply-To: <563C92A5.4080906@citrix.com>
Date: Fri, 6 Nov 2015 12:48:04 +0000
Message-Id: <EF093604-5132-4699-BE81-A46E414D06E3@gmail.com>
References: <4427BD5E-E811-4852-A1CD-A84823F23F70@gmail.com>
	<563C92A5.4080906@citrix.com>
To: David Vrabel <david.vrabel@citrix.com>,
	=?windows-1252?Q?J=FCrgen_Gro=DF?= <jgross@suse.com>,
	Jan Beulich <jbeulich@suse.com>, mpohlack@amazon.com
X-Mailer: Apple Mail (2.2104)
Cc: Xen-devel <xen-devel@lists.xenproject.org>,
	Win-pv-devel@lists.xenproject.org, xen-api@lists.xenproject.org,
	mirageos-devel@xenproject.org
Subject: Re: [win-pv-devel] [Xen-devel] 2016 Xen Dev Summit Location (input
	needed before next Thu)
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org


> On 6 Nov 2015, at 11:44, David Vrabel <david.vrabel@citrix.com> wrote:
> 
> On 05/11/15 18:31, Lars Kurth wrote:
>> Hi all,
>> 
>> We have the following options * Hold it on Monday Oct 3 - to Tue Oct 
>> 4 : the problem is that Oct 3 is a public holiday in Germany, which
>> would affect German participants
> 
> The email from Angela below says there's no rooms available on the Tues
> 
>  "we don't have any extra rooms that fit over 50ppl available on
>   Tuesday & Wednesday"
> 
> Does this not exclude XenSummit on the Mon-Tue?

Oh yes, you are correct. Well spotted. Apologies.

So we absolutely no easy option but to go for Toronto, unless 
- We can find two smaller rooms on Tuesday Oct 4th, which I can investigate
- Or to start the summit on the Sunday Oct 2nd and run it through Monday Oct 3rd, which I can investigate

So really, it seems that Toronto is really the most viable option. And it seems that a majority for Toronto is emerging regardless

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

From win-pv-devel-bounces@lists.xenproject.org Fri Nov 06 12:48:11 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 06 Nov 2015 12:48:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZugR9-0002kG-2U; Fri, 06 Nov 2015 12:48:11 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <lars.kurth.xen@gmail.com>)
	id 1ZugR7-0002k5-8J; Fri, 06 Nov 2015 12:48:09 +0000
Received: from [193.109.254.147] by server-13.bemta-14.messagelabs.com id
	B9/C4-12371-881AC365; Fri, 06 Nov 2015 12:48:08 +0000
X-Env-Sender: lars.kurth.xen@gmail.com
X-Msg-Ref: server-7.tower-27.messagelabs.com!1446814086!1071817!1
X-Originating-IP: [74.125.82.53]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 4987 invoked from network); 6 Nov 2015 12:48:06 -0000
Received: from mail-wm0-f53.google.com (HELO mail-wm0-f53.google.com)
	(74.125.82.53)
	by server-7.tower-27.messagelabs.com with AES128-GCM-SHA256 encrypted
	SMTP; 6 Nov 2015 12:48:06 -0000
Received: by wmec201 with SMTP id c201so17104344wme.0;
	Fri, 06 Nov 2015 04:48:06 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=content-type:mime-version:subject:from:in-reply-to:date:cc
	:content-transfer-encoding:message-id:references:to;
	bh=yqFsKl2GAl+cgSGZlvEX5Xwqka1Uw8AfVlAc5VI7EuM=;
	b=YBmHWOk6+jIe7zxVQgPQriLBB2UqNu908hIbl1kbT5HKc8TeCJHLJkk7/m4ozYi0Xz
	d5OyaKqIZLFtzJL8qvzs65u2mZhbhvaRmJjLOAAr0vdHpgAqbtGaKHtiH78Uprd1lRHn
	82qrFbE+93HkDnOwJlB6siXmWDCK8ipQtlzE9taLZXC3D2VD9MfxR1SJBHuTUrUPLUok
	qxeyXuLu3L2/afsrQsILxUSqAd+V861cWf6kC8gGWRrJIOoeQUT9b1yrmi2BwWwzzYJt
	yYz5th1X9N2AuiG7sbRQqrrSPc6pGH0dykqFLswtM2LGE+lqSO59lx/p8hr3iiCBaML/
	IMUA==
X-Received: by 10.28.131.84 with SMTP id f81mr9506712wmd.57.1446814086501;
	Fri, 06 Nov 2015 04:48:06 -0800 (PST)
Received: from [192.168.0.12] (97e3cc8b.skybroadband.com. [151.227.204.139])
	by smtp.gmail.com with ESMTPSA id
	m137sm2930998wmb.2.2015.11.06.04.48.05
	(version=TLSv1/SSLv3 cipher=OTHER);
	Fri, 06 Nov 2015 04:48:05 -0800 (PST)
Mime-Version: 1.0 (Mac OS X Mail 8.2 \(2104\))
From: Lars Kurth <lars.kurth.xen@gmail.com>
In-Reply-To: <563C92A5.4080906@citrix.com>
Date: Fri, 6 Nov 2015 12:48:04 +0000
Message-Id: <EF093604-5132-4699-BE81-A46E414D06E3@gmail.com>
References: <4427BD5E-E811-4852-A1CD-A84823F23F70@gmail.com>
	<563C92A5.4080906@citrix.com>
To: David Vrabel <david.vrabel@citrix.com>,
	=?windows-1252?Q?J=FCrgen_Gro=DF?= <jgross@suse.com>,
	Jan Beulich <jbeulich@suse.com>, mpohlack@amazon.com
X-Mailer: Apple Mail (2.2104)
Cc: Xen-devel <xen-devel@lists.xenproject.org>,
	Win-pv-devel@lists.xenproject.org, xen-api@lists.xenproject.org,
	mirageos-devel@xenproject.org
Subject: Re: [win-pv-devel] [Xen-devel] 2016 Xen Dev Summit Location (input
	needed before next Thu)
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org


> On 6 Nov 2015, at 11:44, David Vrabel <david.vrabel@citrix.com> wrote:
> 
> On 05/11/15 18:31, Lars Kurth wrote:
>> Hi all,
>> 
>> We have the following options * Hold it on Monday Oct 3 - to Tue Oct 
>> 4 : the problem is that Oct 3 is a public holiday in Germany, which
>> would affect German participants
> 
> The email from Angela below says there's no rooms available on the Tues
> 
>  "we don't have any extra rooms that fit over 50ppl available on
>   Tuesday & Wednesday"
> 
> Does this not exclude XenSummit on the Mon-Tue?

Oh yes, you are correct. Well spotted. Apologies.

So we absolutely no easy option but to go for Toronto, unless 
- We can find two smaller rooms on Tuesday Oct 4th, which I can investigate
- Or to start the summit on the Sunday Oct 2nd and run it through Monday Oct 3rd, which I can investigate

So really, it seems that Toronto is really the most viable option. And it seems that a majority for Toronto is emerging regardless

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

From win-pv-devel-bounces@lists.xenproject.org Fri Nov 06 16:48:31 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 06 Nov 2015 16:48:31 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZukBh-0007sG-5U; Fri, 06 Nov 2015 16:48:29 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <james@dingwall.me.uk>) id 1Zuiu4-0001PH-O1
	for win-pv-devel@lists.xenproject.org; Fri, 06 Nov 2015 15:26:12 +0000
Received: from [193.109.254.147] by server-3.bemta-14.messagelabs.com id
	92/4B-25435-496CC365; Fri, 06 Nov 2015 15:26:12 +0000
X-Env-Sender: james@dingwall.me.uk
X-Msg-Ref: server-12.tower-27.messagelabs.com!1446823544!1125553!2
X-Originating-IP: [80.0.253.72]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 61192 invoked from network); 6 Nov 2015 15:26:11 -0000
Received: from know-smtprelay-omc-8.server.virginmedia.net (HELO
	know-smtprelay-omc-8.server.virginmedia.net) (80.0.253.72)
	by server-12.tower-27.messagelabs.com with SMTP;
	6 Nov 2015 15:26:11 -0000
Received: from dingwall.me.uk ([82.33.62.46])
	by know-smtprelay-8-imp with bizsmtp
	id eFSA1r00N0zrmay01FSAAN; Fri, 06 Nov 2015 15:26:11 +0000
X-Originating-IP: [82.33.62.46]
X-Spam: 0
X-Authority: v=2.1 cv=UKUgZ3ry c=1 sm=1 tr=0 a=43HWeVr0mW5rhQls5iFsjw==:117
	a=43HWeVr0mW5rhQls5iFsjw==:17 a=5IRWAbXhAAAA:8 a=kj9zAlcOel0A:10
	a=qtqOOiqGOCEA:10 a=QyZsG8nNjWxV8SuEto4A:9 a=CjuIK1q_8ugA:10
Received: (qmail 10685 invoked from network); 6 Nov 2015 15:26:10 -0000
Received: from behemoth.dingwall.me.uk (192.168.1.5)
	by mail0.xen.dingwall.me.uk with SMTP; 6 Nov 2015 15:26:10 -0000
Received: by behemoth.dingwall.me.uk (Postfix, from userid 1000)
	id 53DCCD08C20; Fri,  6 Nov 2015 15:26:10 +0000 (GMT)
Date: Fri, 6 Nov 2015 15:26:10 +0000
From: James Dingwall <james@dingwall.me.uk>
To: win-pv-devel@lists.xenproject.org
Message-ID: <20151106152610.GA17966@dingwall.me.uk>
MIME-Version: 1.0
Content-Disposition: inline
User-Agent: Mutt/1.5.23 (2014-03-12)
X-Mailman-Approved-At: Fri, 06 Nov 2015 16:48:27 +0000
Subject: [win-pv-devel] xenstore/wmi behaviour
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

Hi,

I am accessing xenstore using python via wmi and I appear to have inconsistent behaviour compared to Linux with xenstore-read.  My 
xenstore key is:

/a/path/to/a/key = ""

In xs.c in the xen source:

            char *val = xs_read(xsh, xth, argv[optind], &len);
            if (val == NULL) {
                warnx("couldn't read path %s", argv[optind]);
                return 1;
            }

So a NULL return value is used to indicate that the key does not exist.  Testing this:

# xenstore-read /a/path/to/a/key ; echo $?

0
# # no output or error

However reading the same key on Windows through wmi instead results in python getting a None type object where I believe it should 
get an empty string "".

Setting up a connection in Python through wmi to xenstore then:

>>> print session.GetValue("/a/path/to/a/key")
(None,)

In powershell:
PS C:\>$base = gwmi -n root\wmi -cl XenProjectXenStoreBase
PS C:\>$sid = $base.AddSession("MyNewSession")
PS C:\>$session = gwmi -n root\wmi -q "select * from XenProjectXenStoreSession where SessionId=$($sid.SessionId)"
PS C:\>$v = $session.GetValue("/a/path/to/a/key").value
PS C:\>echo $v.getType();
You cannot call a method on a null-valued expression.
At line:1 char:1
+ echo $v.getType()
+ ~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull
PS C:\>echo "".getType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     String                                   System.Object

So the behaviour outside of python seems to be the same.

I have tried to follow the xen source code and I didn't find any special NULL -> "" conversion in the read path but it is quite 
possible I have missed something.  Therefore I believe that SessionExecuteGetValue() of wmi.c should be doing something special so 
there is compatibility in its behaviour between operating systems.

Thanks,
James


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

From win-pv-devel-bounces@lists.xenproject.org Fri Nov 06 16:48:31 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 06 Nov 2015 16:48:31 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZukBh-0007sG-5U; Fri, 06 Nov 2015 16:48:29 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <james@dingwall.me.uk>) id 1Zuiu4-0001PH-O1
	for win-pv-devel@lists.xenproject.org; Fri, 06 Nov 2015 15:26:12 +0000
Received: from [193.109.254.147] by server-3.bemta-14.messagelabs.com id
	92/4B-25435-496CC365; Fri, 06 Nov 2015 15:26:12 +0000
X-Env-Sender: james@dingwall.me.uk
X-Msg-Ref: server-12.tower-27.messagelabs.com!1446823544!1125553!2
X-Originating-IP: [80.0.253.72]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 61192 invoked from network); 6 Nov 2015 15:26:11 -0000
Received: from know-smtprelay-omc-8.server.virginmedia.net (HELO
	know-smtprelay-omc-8.server.virginmedia.net) (80.0.253.72)
	by server-12.tower-27.messagelabs.com with SMTP;
	6 Nov 2015 15:26:11 -0000
Received: from dingwall.me.uk ([82.33.62.46])
	by know-smtprelay-8-imp with bizsmtp
	id eFSA1r00N0zrmay01FSAAN; Fri, 06 Nov 2015 15:26:11 +0000
X-Originating-IP: [82.33.62.46]
X-Spam: 0
X-Authority: v=2.1 cv=UKUgZ3ry c=1 sm=1 tr=0 a=43HWeVr0mW5rhQls5iFsjw==:117
	a=43HWeVr0mW5rhQls5iFsjw==:17 a=5IRWAbXhAAAA:8 a=kj9zAlcOel0A:10
	a=qtqOOiqGOCEA:10 a=QyZsG8nNjWxV8SuEto4A:9 a=CjuIK1q_8ugA:10
Received: (qmail 10685 invoked from network); 6 Nov 2015 15:26:10 -0000
Received: from behemoth.dingwall.me.uk (192.168.1.5)
	by mail0.xen.dingwall.me.uk with SMTP; 6 Nov 2015 15:26:10 -0000
Received: by behemoth.dingwall.me.uk (Postfix, from userid 1000)
	id 53DCCD08C20; Fri,  6 Nov 2015 15:26:10 +0000 (GMT)
Date: Fri, 6 Nov 2015 15:26:10 +0000
From: James Dingwall <james@dingwall.me.uk>
To: win-pv-devel@lists.xenproject.org
Message-ID: <20151106152610.GA17966@dingwall.me.uk>
MIME-Version: 1.0
Content-Disposition: inline
User-Agent: Mutt/1.5.23 (2014-03-12)
X-Mailman-Approved-At: Fri, 06 Nov 2015 16:48:27 +0000
Subject: [win-pv-devel] xenstore/wmi behaviour
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

Hi,

I am accessing xenstore using python via wmi and I appear to have inconsistent behaviour compared to Linux with xenstore-read.  My 
xenstore key is:

/a/path/to/a/key = ""

In xs.c in the xen source:

            char *val = xs_read(xsh, xth, argv[optind], &len);
            if (val == NULL) {
                warnx("couldn't read path %s", argv[optind]);
                return 1;
            }

So a NULL return value is used to indicate that the key does not exist.  Testing this:

# xenstore-read /a/path/to/a/key ; echo $?

0
# # no output or error

However reading the same key on Windows through wmi instead results in python getting a None type object where I believe it should 
get an empty string "".

Setting up a connection in Python through wmi to xenstore then:

>>> print session.GetValue("/a/path/to/a/key")
(None,)

In powershell:
PS C:\>$base = gwmi -n root\wmi -cl XenProjectXenStoreBase
PS C:\>$sid = $base.AddSession("MyNewSession")
PS C:\>$session = gwmi -n root\wmi -q "select * from XenProjectXenStoreSession where SessionId=$($sid.SessionId)"
PS C:\>$v = $session.GetValue("/a/path/to/a/key").value
PS C:\>echo $v.getType();
You cannot call a method on a null-valued expression.
At line:1 char:1
+ echo $v.getType()
+ ~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull
PS C:\>echo "".getType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     String                                   System.Object

So the behaviour outside of python seems to be the same.

I have tried to follow the xen source code and I didn't find any special NULL -> "" conversion in the read path but it is quite 
possible I have missed something.  Therefore I believe that SessionExecuteGetValue() of wmi.c should be doing something special so 
there is compatibility in its behaviour between operating systems.

Thanks,
James


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

From win-pv-devel-bounces@lists.xenproject.org Fri Nov 06 17:04:41 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 06 Nov 2015 17:04:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZukRM-0008RR-IU; Fri, 06 Nov 2015 17:04:40 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=7450d0d22=Paul.Durrant@citrix.com>)
	id 1ZukRL-0008RM-OB
	for win-pv-devel@lists.xenproject.org; Fri, 06 Nov 2015 17:04:39 +0000
Received: from [85.158.137.68] by server-5.bemta-3.messagelabs.com id
	C4/80-01748-6ADDC365; Fri, 06 Nov 2015 17:04:38 +0000
X-Env-Sender: prvs=7450d0d22=Paul.Durrant@citrix.com
X-Msg-Ref: server-10.tower-31.messagelabs.com!1446829476!1623949!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 33520 invoked from network); 6 Nov 2015 17:04:37 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-10.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	6 Nov 2015 17:04:37 -0000
X-IronPort-AV: E=Sophos;i="5.20,252,1444694400"; 
   d="scan'208";a="7136835"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: James Dingwall <james@dingwall.me.uk>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] xenstore/wmi behaviour
Thread-Index: AQHRGLL/3ExC312STkGq9J0MCAedd56POHkA
Date: Fri, 6 Nov 2015 17:04:16 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F6637D4@AMSPEX01CL01.citrite.net>
References: <20151106152610.GA17966@dingwall.me.uk>
In-Reply-To: <20151106152610.GA17966@dingwall.me.uk>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] xenstore/wmi behaviour
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> bounces@lists.xenproject.org] On Behalf Of James Dingwall
> Sent: 06 November 2015 15:26
> To: win-pv-devel@lists.xenproject.org
> Subject: [win-pv-devel] xenstore/wmi behaviour
> 
> Hi,
> 
> I am accessing xenstore using python via wmi and I appear to have
> inconsistent behaviour compared to Linux with xenstore-read.  My
> xenstore key is:
> 
> /a/path/to/a/key = ""
> 
> In xs.c in the xen source:
> 
>             char *val = xs_read(xsh, xth, argv[optind], &len);
>             if (val == NULL) {
>                 warnx("couldn't read path %s", argv[optind]);
>                 return 1;
>             }
> 
> So a NULL return value is used to indicate that the key does not exist.  Testing
> this:
> 
> # xenstore-read /a/path/to/a/key ; echo $?
> 
> 0
> # # no output or error
> 
> However reading the same key on Windows through wmi instead results in
> python getting a None type object where I believe it should
> get an empty string "".
> 
> Setting up a connection in Python through wmi to xenstore then:
> 
> >>> print session.GetValue("/a/path/to/a/key")
> (None,)
> 
> In powershell:
> PS C:\>$base = gwmi -n root\wmi -cl XenProjectXenStoreBase
> PS C:\>$sid = $base.AddSession("MyNewSession")
> PS C:\>$session = gwmi -n root\wmi -q "select * from
> XenProjectXenStoreSession where SessionId=$($sid.SessionId)"
> PS C:\>$v = $session.GetValue("/a/path/to/a/key").value
> PS C:\>echo $v.getType();
> You cannot call a method on a null-valued expression.
> At line:1 char:1
> + echo $v.getType()
> + ~~~~~~~~~~~~~~~~~
>     + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
>     + FullyQualifiedErrorId : InvokeMethodOnNull
> PS C:\>echo "".getType()
> 
> IsPublic IsSerial Name                                     BaseType
> -------- -------- ----                                     --------
> True     True     String                                   System.Object
> 
> So the behaviour outside of python seems to be the same.
> 
> I have tried to follow the xen source code and I didn't find any special NULL -
> > "" conversion in the read path but it is quite
> possible I have missed something.  Therefore I believe that
> SessionExecuteGetValue() of wmi.c should be doing something special so
> there is compatibility in its behaviour between operating systems.
> 

Yes, there should be a clear distinction between an empty value and a non-existent value so it does seem this is a bug. Thanks for pointing it out.

  Cheers,

    Paul

> Thanks,
> James
> 
> 
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

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

From win-pv-devel-bounces@lists.xenproject.org Fri Nov 06 17:04:41 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 06 Nov 2015 17:04:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZukRM-0008RR-IU; Fri, 06 Nov 2015 17:04:40 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=7450d0d22=Paul.Durrant@citrix.com>)
	id 1ZukRL-0008RM-OB
	for win-pv-devel@lists.xenproject.org; Fri, 06 Nov 2015 17:04:39 +0000
Received: from [85.158.137.68] by server-5.bemta-3.messagelabs.com id
	C4/80-01748-6ADDC365; Fri, 06 Nov 2015 17:04:38 +0000
X-Env-Sender: prvs=7450d0d22=Paul.Durrant@citrix.com
X-Msg-Ref: server-10.tower-31.messagelabs.com!1446829476!1623949!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 33520 invoked from network); 6 Nov 2015 17:04:37 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-10.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	6 Nov 2015 17:04:37 -0000
X-IronPort-AV: E=Sophos;i="5.20,252,1444694400"; 
   d="scan'208";a="7136835"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: James Dingwall <james@dingwall.me.uk>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] xenstore/wmi behaviour
Thread-Index: AQHRGLL/3ExC312STkGq9J0MCAedd56POHkA
Date: Fri, 6 Nov 2015 17:04:16 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F6637D4@AMSPEX01CL01.citrite.net>
References: <20151106152610.GA17966@dingwall.me.uk>
In-Reply-To: <20151106152610.GA17966@dingwall.me.uk>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] xenstore/wmi behaviour
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> bounces@lists.xenproject.org] On Behalf Of James Dingwall
> Sent: 06 November 2015 15:26
> To: win-pv-devel@lists.xenproject.org
> Subject: [win-pv-devel] xenstore/wmi behaviour
> 
> Hi,
> 
> I am accessing xenstore using python via wmi and I appear to have
> inconsistent behaviour compared to Linux with xenstore-read.  My
> xenstore key is:
> 
> /a/path/to/a/key = ""
> 
> In xs.c in the xen source:
> 
>             char *val = xs_read(xsh, xth, argv[optind], &len);
>             if (val == NULL) {
>                 warnx("couldn't read path %s", argv[optind]);
>                 return 1;
>             }
> 
> So a NULL return value is used to indicate that the key does not exist.  Testing
> this:
> 
> # xenstore-read /a/path/to/a/key ; echo $?
> 
> 0
> # # no output or error
> 
> However reading the same key on Windows through wmi instead results in
> python getting a None type object where I believe it should
> get an empty string "".
> 
> Setting up a connection in Python through wmi to xenstore then:
> 
> >>> print session.GetValue("/a/path/to/a/key")
> (None,)
> 
> In powershell:
> PS C:\>$base = gwmi -n root\wmi -cl XenProjectXenStoreBase
> PS C:\>$sid = $base.AddSession("MyNewSession")
> PS C:\>$session = gwmi -n root\wmi -q "select * from
> XenProjectXenStoreSession where SessionId=$($sid.SessionId)"
> PS C:\>$v = $session.GetValue("/a/path/to/a/key").value
> PS C:\>echo $v.getType();
> You cannot call a method on a null-valued expression.
> At line:1 char:1
> + echo $v.getType()
> + ~~~~~~~~~~~~~~~~~
>     + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
>     + FullyQualifiedErrorId : InvokeMethodOnNull
> PS C:\>echo "".getType()
> 
> IsPublic IsSerial Name                                     BaseType
> -------- -------- ----                                     --------
> True     True     String                                   System.Object
> 
> So the behaviour outside of python seems to be the same.
> 
> I have tried to follow the xen source code and I didn't find any special NULL -
> > "" conversion in the read path but it is quite
> possible I have missed something.  Therefore I believe that
> SessionExecuteGetValue() of wmi.c should be doing something special so
> there is compatibility in its behaviour between operating systems.
> 

Yes, there should be a clear distinction between an empty value and a non-existent value so it does seem this is a bug. Thanks for pointing it out.

  Cheers,

    Paul

> Thanks,
> James
> 
> 
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

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

From win-pv-devel-bounces@lists.xenproject.org Mon Nov 09 11:25:12 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Nov 2015 11:25:12 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZvkZS-0003Oj-Md; Mon, 09 Nov 2015 11:25:10 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=74822afd6=dario.faggioli@citrix.com>)
	id 1Zvk7k-00024a-4Z; Mon, 09 Nov 2015 10:56:32 +0000
Received: from [85.158.139.211] by server-4.bemta-5.messagelabs.com id
	35/6B-24856-FDB70465; Mon, 09 Nov 2015 10:56:31 +0000
X-Env-Sender: prvs=74822afd6=dario.faggioli@citrix.com
X-Msg-Ref: server-13.tower-206.messagelabs.com!1447066588!2050068!1
X-Originating-IP: [66.165.176.89]
X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: 
	VHJ1c3RlZCBJUDogNjYuMTY1LjE3Ni44OSA9PiAyMDMwMDc=\n,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 50660 invoked from network); 9 Nov 2015 10:56:30 -0000
Received: from smtp.citrix.com (HELO SMTP.CITRIX.COM) (66.165.176.89)
	by server-13.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	9 Nov 2015 10:56:30 -0000
X-IronPort-AV: E=Sophos;i="5.20,265,1444694400"; 
	d="asc'?scan'208";a="311209300"
Message-ID: <1447066578.29078.8.camel@citrix.com>
From: Dario Faggioli <dario.faggioli@citrix.com>
To: Lars Kurth <lars.kurth.xen@gmail.com>, Xen-devel
	<xen-devel@lists.xenproject.org>, mirageos-devel
	<mirageos-devel@lists.xenproject.org>, <xen-api@lists.xenproject.org>, 
	<Win-pv-devel@lists.xenproject.org>
Date: Mon, 9 Nov 2015 11:56:18 +0100
In-Reply-To: <B7204A9D-30E9-429A-B727-8199654981C8@gmail.com>
References: <B7204A9D-30E9-429A-B727-8199654981C8@gmail.com>
Organization: Citrix Inc.
X-Mailer: Evolution 3.16.5 (3.16.5-3.fc22) 
MIME-Version: 1.0
X-DLP: MIA1
X-Mailman-Approved-At: Mon, 09 Nov 2015 11:25:07 +0000
Subject: Re: [win-pv-devel] [Xen-devel] Hackathon 2016 Location Preferences
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============4965513970876006069=="
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

--===============4965513970876006069==
Content-Type: multipart/signed; micalg=pgp-sha1;
	protocol="application/pgp-signature"; boundary="=-ZK9WflskDreFL/SjwjEp"

--=-ZK9WflskDreFL/SjwjEp
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Thu, 2015-11-05 at 15:21 +0000, Lars Kurth wrote:
> Hi all,
>=20
> I wanted to do quick straw-poll regarding Hackathon Locations for
> next year. Before I do this though, I wanted to let you know that the
> 2016 Developer Summit will most likely be in Berlin in October (I am
> in the process of finalising space, budget and contract details which
> will need to be approved by the Advisory Board).
>=20
> We do have two options for a Hackathon: China (either Shanghai,
> Hangzhou or Beijing - details TBC) and Cambridge, UK. We are still in
> the early planning phase and the budget for the Hackathon has not yet
> been approved.=20
>=20
So, considering that XS will likely not be in Europe any longer, I vote
Cambridge for the Hackathon.

Regards,
Dario

--=20
<<This happens because I choose it to happen!>> (Raistlin Majere)
-----------------------------------------------------------------
Dario Faggioli, Ph.D, http://about.me/dario.faggioli
Senior Software Engineer, Citrix Systems R&D Ltd., Cambridge (UK)


--=-ZK9WflskDreFL/SjwjEp
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: This is a digitally signed message part
Content-Transfer-Encoding: 7bit

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1

iEYEABECAAYFAlZAe9IACgkQk4XaBE3IOsRUiQCfRRZbWxIkuRh1HTdkC5YokfTI
IgwAn3yKquVefYKDPsUXczJYCXCFg8wb
=f9os
-----END PGP SIGNATURE-----

--=-ZK9WflskDreFL/SjwjEp--


--===============4965513970876006069==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--===============4965513970876006069==--


From win-pv-devel-bounces@lists.xenproject.org Mon Nov 09 11:25:12 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Nov 2015 11:25:12 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZvkZS-0003Of-Km; Mon, 09 Nov 2015 11:25:10 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=74822afd6=dario.faggioli@citrix.com>)
	id 1Zvk5O-0001pZ-Sx; Mon, 09 Nov 2015 10:54:06 +0000
Received: from [85.158.139.211] by server-7.bemta-5.messagelabs.com id
	F8/58-13905-D4B70465; Mon, 09 Nov 2015 10:54:05 +0000
X-Env-Sender: prvs=74822afd6=dario.faggioli@citrix.com
X-Msg-Ref: server-11.tower-206.messagelabs.com!1447066443!2049267!1
X-Originating-IP: [66.165.176.89]
X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: 
	VHJ1c3RlZCBJUDogNjYuMTY1LjE3Ni44OSA9PiAyMDMwMDc=\n,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 29916 invoked from network); 9 Nov 2015 10:54:04 -0000
Received: from smtp.citrix.com (HELO SMTP.CITRIX.COM) (66.165.176.89)
	by server-11.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	9 Nov 2015 10:54:04 -0000
X-IronPort-AV: E=Sophos;i="5.20,265,1444694400"; 
	d="asc'?scan'208";a="311208864"
Message-ID: <1447066395.29078.4.camel@citrix.com>
From: Dario Faggioli <dario.faggioli@citrix.com>
To: Lars Kurth <lars.kurth.xen@gmail.com>, David Vrabel
	<david.vrabel@citrix.com>, =?ISO-8859-1?Q?J=FCrgen_Gro=DF?=
	<jgross@suse.com>, Jan Beulich <jbeulich@suse.com>, <mpohlack@amazon.com>
Date: Mon, 9 Nov 2015 11:53:15 +0100
In-Reply-To: <EF093604-5132-4699-BE81-A46E414D06E3@gmail.com>
References: <4427BD5E-E811-4852-A1CD-A84823F23F70@gmail.com>
	<563C92A5.4080906@citrix.com>
	<EF093604-5132-4699-BE81-A46E414D06E3@gmail.com>
Organization: Citrix Inc.
X-Mailer: Evolution 3.16.5 (3.16.5-3.fc22) 
MIME-Version: 1.0
X-DLP: MIA2
X-Mailman-Approved-At: Mon, 09 Nov 2015 11:25:07 +0000
Cc: Xen-devel <xen-devel@lists.xenproject.org>,
	Win-pv-devel@lists.xenproject.org, mirageos-devel@xenproject.org,
	xen-api@lists.xenproject.org
Subject: Re: [win-pv-devel] [Xen-devel] 2016 Xen Dev Summit Location (input
 needed before next Thu)
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============5376809335967383781=="
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

--===============5376809335967383781==
Content-Type: multipart/signed; micalg=pgp-sha1;
	protocol="application/pgp-signature"; boundary="=-zPy7nyYADJozQ+qAYYfs"

--=-zPy7nyYADJozQ+qAYYfs
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Fri, 2015-11-06 at 12:48 +0000, Lars Kurth wrote:

> So we absolutely no easy option but to go for Toronto, unless=20
> - We can find two smaller rooms on Tuesday Oct 4th, which I can
> investigate
> - Or to start the summit on the Sunday Oct 2nd and run it through
> Monday Oct 3rd, which I can investigate
>=20
So, that would mean holding the event during a Sunday and a local
holiday... I don't think this is that good, for the event itself.

So, even if the above (Oct 2-3, Berlin), would make things a lot easier
for me to attend, I vote for Toronto, as it looks much much more likely
that the event would be successful in that case.

Regards,
Dario
--=20
<<This happens because I choose it to happen!>> (Raistlin Majere)
-----------------------------------------------------------------
Dario Faggioli, Ph.D, http://about.me/dario.faggioli
Senior Software Engineer, Citrix Systems R&D Ltd., Cambridge (UK)


--=-zPy7nyYADJozQ+qAYYfs
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: This is a digitally signed message part
Content-Transfer-Encoding: 7bit

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1

iEYEABECAAYFAlZAexsACgkQk4XaBE3IOsT4UACgjeik8Nhh+Kdty8Jt8YdO2mqD
22UAoJq0lPdszolXV4kIpWwVBE0Bpc8W
=V7Xg
-----END PGP SIGNATURE-----

--=-zPy7nyYADJozQ+qAYYfs--


--===============5376809335967383781==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--===============5376809335967383781==--


From win-pv-devel-bounces@lists.xenproject.org Mon Nov 09 11:25:12 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Nov 2015 11:25:12 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZvkZS-0003Of-Km; Mon, 09 Nov 2015 11:25:10 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=74822afd6=dario.faggioli@citrix.com>)
	id 1Zvk5O-0001pZ-Sx; Mon, 09 Nov 2015 10:54:06 +0000
Received: from [85.158.139.211] by server-7.bemta-5.messagelabs.com id
	F8/58-13905-D4B70465; Mon, 09 Nov 2015 10:54:05 +0000
X-Env-Sender: prvs=74822afd6=dario.faggioli@citrix.com
X-Msg-Ref: server-11.tower-206.messagelabs.com!1447066443!2049267!1
X-Originating-IP: [66.165.176.89]
X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: 
	VHJ1c3RlZCBJUDogNjYuMTY1LjE3Ni44OSA9PiAyMDMwMDc=\n,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 29916 invoked from network); 9 Nov 2015 10:54:04 -0000
Received: from smtp.citrix.com (HELO SMTP.CITRIX.COM) (66.165.176.89)
	by server-11.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	9 Nov 2015 10:54:04 -0000
X-IronPort-AV: E=Sophos;i="5.20,265,1444694400"; 
	d="asc'?scan'208";a="311208864"
Message-ID: <1447066395.29078.4.camel@citrix.com>
From: Dario Faggioli <dario.faggioli@citrix.com>
To: Lars Kurth <lars.kurth.xen@gmail.com>, David Vrabel
	<david.vrabel@citrix.com>, =?ISO-8859-1?Q?J=FCrgen_Gro=DF?=
	<jgross@suse.com>, Jan Beulich <jbeulich@suse.com>, <mpohlack@amazon.com>
Date: Mon, 9 Nov 2015 11:53:15 +0100
In-Reply-To: <EF093604-5132-4699-BE81-A46E414D06E3@gmail.com>
References: <4427BD5E-E811-4852-A1CD-A84823F23F70@gmail.com>
	<563C92A5.4080906@citrix.com>
	<EF093604-5132-4699-BE81-A46E414D06E3@gmail.com>
Organization: Citrix Inc.
X-Mailer: Evolution 3.16.5 (3.16.5-3.fc22) 
MIME-Version: 1.0
X-DLP: MIA2
X-Mailman-Approved-At: Mon, 09 Nov 2015 11:25:07 +0000
Cc: Xen-devel <xen-devel@lists.xenproject.org>,
	Win-pv-devel@lists.xenproject.org, mirageos-devel@xenproject.org,
	xen-api@lists.xenproject.org
Subject: Re: [win-pv-devel] [Xen-devel] 2016 Xen Dev Summit Location (input
 needed before next Thu)
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============5376809335967383781=="
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

--===============5376809335967383781==
Content-Type: multipart/signed; micalg=pgp-sha1;
	protocol="application/pgp-signature"; boundary="=-zPy7nyYADJozQ+qAYYfs"

--=-zPy7nyYADJozQ+qAYYfs
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Fri, 2015-11-06 at 12:48 +0000, Lars Kurth wrote:

> So we absolutely no easy option but to go for Toronto, unless=20
> - We can find two smaller rooms on Tuesday Oct 4th, which I can
> investigate
> - Or to start the summit on the Sunday Oct 2nd and run it through
> Monday Oct 3rd, which I can investigate
>=20
So, that would mean holding the event during a Sunday and a local
holiday... I don't think this is that good, for the event itself.

So, even if the above (Oct 2-3, Berlin), would make things a lot easier
for me to attend, I vote for Toronto, as it looks much much more likely
that the event would be successful in that case.

Regards,
Dario
--=20
<<This happens because I choose it to happen!>> (Raistlin Majere)
-----------------------------------------------------------------
Dario Faggioli, Ph.D, http://about.me/dario.faggioli
Senior Software Engineer, Citrix Systems R&D Ltd., Cambridge (UK)


--=-zPy7nyYADJozQ+qAYYfs
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: This is a digitally signed message part
Content-Transfer-Encoding: 7bit

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1

iEYEABECAAYFAlZAexsACgkQk4XaBE3IOsT4UACgjeik8Nhh+Kdty8Jt8YdO2mqD
22UAoJq0lPdszolXV4kIpWwVBE0Bpc8W
=V7Xg
-----END PGP SIGNATURE-----

--=-zPy7nyYADJozQ+qAYYfs--


--===============5376809335967383781==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--===============5376809335967383781==--


From win-pv-devel-bounces@lists.xenproject.org Mon Nov 09 11:25:12 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Nov 2015 11:25:12 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZvkZS-0003Oj-Md; Mon, 09 Nov 2015 11:25:10 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=74822afd6=dario.faggioli@citrix.com>)
	id 1Zvk7k-00024a-4Z; Mon, 09 Nov 2015 10:56:32 +0000
Received: from [85.158.139.211] by server-4.bemta-5.messagelabs.com id
	35/6B-24856-FDB70465; Mon, 09 Nov 2015 10:56:31 +0000
X-Env-Sender: prvs=74822afd6=dario.faggioli@citrix.com
X-Msg-Ref: server-13.tower-206.messagelabs.com!1447066588!2050068!1
X-Originating-IP: [66.165.176.89]
X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: 
	VHJ1c3RlZCBJUDogNjYuMTY1LjE3Ni44OSA9PiAyMDMwMDc=\n,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 50660 invoked from network); 9 Nov 2015 10:56:30 -0000
Received: from smtp.citrix.com (HELO SMTP.CITRIX.COM) (66.165.176.89)
	by server-13.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	9 Nov 2015 10:56:30 -0000
X-IronPort-AV: E=Sophos;i="5.20,265,1444694400"; 
	d="asc'?scan'208";a="311209300"
Message-ID: <1447066578.29078.8.camel@citrix.com>
From: Dario Faggioli <dario.faggioli@citrix.com>
To: Lars Kurth <lars.kurth.xen@gmail.com>, Xen-devel
	<xen-devel@lists.xenproject.org>, mirageos-devel
	<mirageos-devel@lists.xenproject.org>, <xen-api@lists.xenproject.org>, 
	<Win-pv-devel@lists.xenproject.org>
Date: Mon, 9 Nov 2015 11:56:18 +0100
In-Reply-To: <B7204A9D-30E9-429A-B727-8199654981C8@gmail.com>
References: <B7204A9D-30E9-429A-B727-8199654981C8@gmail.com>
Organization: Citrix Inc.
X-Mailer: Evolution 3.16.5 (3.16.5-3.fc22) 
MIME-Version: 1.0
X-DLP: MIA1
X-Mailman-Approved-At: Mon, 09 Nov 2015 11:25:07 +0000
Subject: Re: [win-pv-devel] [Xen-devel] Hackathon 2016 Location Preferences
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============4965513970876006069=="
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

--===============4965513970876006069==
Content-Type: multipart/signed; micalg=pgp-sha1;
	protocol="application/pgp-signature"; boundary="=-ZK9WflskDreFL/SjwjEp"

--=-ZK9WflskDreFL/SjwjEp
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Thu, 2015-11-05 at 15:21 +0000, Lars Kurth wrote:
> Hi all,
>=20
> I wanted to do quick straw-poll regarding Hackathon Locations for
> next year. Before I do this though, I wanted to let you know that the
> 2016 Developer Summit will most likely be in Berlin in October (I am
> in the process of finalising space, budget and contract details which
> will need to be approved by the Advisory Board).
>=20
> We do have two options for a Hackathon: China (either Shanghai,
> Hangzhou or Beijing - details TBC) and Cambridge, UK. We are still in
> the early planning phase and the budget for the Hackathon has not yet
> been approved.=20
>=20
So, considering that XS will likely not be in Europe any longer, I vote
Cambridge for the Hackathon.

Regards,
Dario

--=20
<<This happens because I choose it to happen!>> (Raistlin Majere)
-----------------------------------------------------------------
Dario Faggioli, Ph.D, http://about.me/dario.faggioli
Senior Software Engineer, Citrix Systems R&D Ltd., Cambridge (UK)


--=-ZK9WflskDreFL/SjwjEp
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: This is a digitally signed message part
Content-Transfer-Encoding: 7bit

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1

iEYEABECAAYFAlZAe9IACgkQk4XaBE3IOsRUiQCfRRZbWxIkuRh1HTdkC5YokfTI
IgwAn3yKquVefYKDPsUXczJYCXCFg8wb
=f9os
-----END PGP SIGNATURE-----

--=-ZK9WflskDreFL/SjwjEp--


--===============4965513970876006069==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--===============4965513970876006069==--


From win-pv-devel-bounces@lists.xenproject.org Mon Nov 09 12:42:51 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Nov 2015 12:42:51 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1Zvlmb-0005Gn-QX; Mon, 09 Nov 2015 12:42:49 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1ZvlmZ-0005GR-Lq
	for win-pv-devel@lists.xenproject.org; Mon, 09 Nov 2015 12:42:48 +0000
Received: from [85.158.139.211] by server-13.bemta-5.messagelabs.com id
	0F/11-06091-2C490465; Mon, 09 Nov 2015 12:42:42 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-2.tower-206.messagelabs.com!1447072960!2096424!1
X-Originating-IP: [74.125.82.49]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 26047 invoked from network); 9 Nov 2015 12:42:40 -0000
Received: from mail-wm0-f49.google.com (HELO mail-wm0-f49.google.com)
	(74.125.82.49)
	by server-2.tower-206.messagelabs.com with AES128-GCM-SHA256 encrypted
	SMTP; 9 Nov 2015 12:42:40 -0000
Received: by wmww144 with SMTP id w144so74435977wmw.1
	for <win-pv-devel@lists.xenproject.org>;
	Mon, 09 Nov 2015 04:42:40 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=m2r_biz.20150623.gappssmtp.com; s=20150623;
	h=to:cc:from:subject:message-id:date:user-agent:mime-version
	:content-type; bh=+eL75AzFeU/eGRkaXXhZds19G8P2KvYx5sI3WhGTE6s=;
	b=r3HtxgTqU9T9O53AdMny/0gPgMfaK9XwGaKRz9Ae+pm/VWfOTe0+LzDWIEJmm7M4/M
	bLQUQ5fhcf8ZpinQTr5thKwx29jTzswy4MBHjhw2W8AH3iXXyBR4dJ0+WmMCj5f8gr3p
	Qktg9jRKEGWFWezwFKtC3lXFK2ntmR/7lS07YJE8cQpn124PZm/1JbFFGxUxPumQ/cCy
	LfIQ9zwNHNPpYQOImwy4SPovj1t5oerQhxEAdZKvQyYaRvyQqY4mgCaZp4tvUrBI9eGI
	lTXupq+EL3moAqYbeiriwFfu8E3KnDVtq1ET8L5nNgxJNkGesOAr2NpOK0LtSpHFlnxi
	R9FA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:to:cc:from:subject:message-id:date:user-agent
	:mime-version:content-type;
	bh=+eL75AzFeU/eGRkaXXhZds19G8P2KvYx5sI3WhGTE6s=;
	b=gMo7GPhkp/UMRKRJdbc0R8N7Wh7HnfWG/fgbGUJAqdSG3haPEIH2Z0D944JYlLHU/W
	AMsQXVCG0p0F7dF4kdGDm64KvxWPH8O1W2hrYk82q16BkHN7gUjvqWQBvfcoyMHHawCW
	XARQs3PVrE07LeRbuafTjvxnE259TLlyDtRcApz98B0zFIv69QxCCN9En0aranSW5KJP
	+2Fl8C8QzLSEVFI3GkziI1tXlkRXJT1qgIouCDtgT3xawvmWG5nVUwEb6cm4qg/NPMh7
	fhQStuCLWVDijSGdEjMPC1omVgDJW6qc9JKWMUZWkQveIYTmnd4NvejgywC/lGpZATSt
	5bmA==
X-Gm-Message-State: ALoCoQlpA7m8KqXWg00F29nQkT7RaPlcV8GX5errX9J/KFBIzWLdtuy/loqlFnF3GEkd/xc2p1OD
X-Received: by 10.28.19.78 with SMTP id 75mr27499467wmt.101.1447072959847;
	Mon, 09 Nov 2015 04:42:39 -0800 (PST)
Received: from [192.168.1.37] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by smtp.googlemail.com with ESMTPSA id
	q141sm14143165wmg.3.2015.11.09.04.42.37
	(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Mon, 09 Nov 2015 04:42:39 -0800 (PST)
To: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
Message-ID: <564094BC.30307@m2r.biz>
Date: Mon, 9 Nov 2015 13:42:36 +0100
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.3.0
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="------------040203080100030609090106"
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] Windows 10 domU hang on boot after pv drivers
 install if dom0 have old kernel (or specific 3.2 problem)
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

This is a multi-part message in MIME format.
--------------040203080100030609090106
Content-Type: text/plain; charset=iso-8859-15; format=flowed
Content-Transfer-Encoding: 7bit

On testing servers I saw in initial tests that newer dom0 kernel seems 
was needed and I always used kernel >=3.14 after start use new winpv 
drivers.
Now I'm using 4.1 kernel in test servers but I had occasional problems 
that I now know exactly was the problem, then for now I use it only for 
tests.
I started to update also few production servers with newer software 
tested and that seems stable, xen 4.6.0, qemu 2.4, spice 0.12.6 and 
seabios 1.8.2.
I tried to use also new winpv drivers, I installed today latest build on 
clean windows 10 pro 64 bit domU with same/similar cfg of testing server 
with same softwares except dom0 kernel (I have 3.2 wheezy from official 
repo, 3.2.68-1+deb7u5).
On boot after winpv install (more exactly the second reboot because the 
first is working but still with emulated disk and network as already 
reported time ago) domU's hang at windows boot, full qemu log with trace 
in attachment.

I know since long time ago that winpv require xen>=4.5.0 and upstream 
qemu>=1.6.1
Probably also backports of these xen patches are needed if xen<4.6 
(based on critical problems had long time ago):
- x86/hvm: add per-vcpu evtchn upcalls
- x86/hvm: extend HVM cpuid leaf with vcpu id

I do not understand for sure if kernel>=N is also needed (for dom0) to 
use winpv drivers or if problem like this are specific to kernel 3.2 (or 
debian patches).
Someone know anything certain about it?


If you need more tests/data tell me and I'll post them.

Thanks for any reply and sorry for my bad english.

--------------040203080100030609090106
Content-Type: text/plain; charset=UTF-8;
 name="qemu-dm-frc-12.log"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
 filename="qemu-dm-frc-12.log"

xc: error: linux_gnttab_set_max_grants: ioctl SET_MAX_GRANTS failed (22 = Invalid argument): Internal error
xen be: qdisk-832: xc_gnttab_set_max_grants failed: Invalid argument
main_channel_link: add main channel client
main_channel_handle_parsed: net test: latency 21.014000 ms, bitrate 1329007138 bps (1267.439974 Mbps)
red_dispatcher_set_cursor_peer: 
inputs_connect: inputs channel client create
1550@1447068918.060511:xen_platform_log xen platform: XEN|DllInitialize: 8.2.0 (82) (23.10.2015)
1550@1447068918.060744:xen_platform_log xen platform: XEN|AcpiFindRsdp: 0x00000000000F65D0
1550@1447068918.060863:xen_platform_log xen platform: XEN|SystemGetStartOptions:  TESTSIGNING  NOEXECUTE=OPTIN
1550@1447068918.060958:xen_platform_log xen platform: XEN|SystemGetVersionInformation: KERNEL: 10.0 (BUILD 10240) PLATFORM WIN32_NT (x64)
1550@1447068918.061026:xen_platform_log xen platform: XEN|SystemGetVersionInformation: SUITES:
1550@1447068918.061092:xen_platform_log xen platform: XEN|SystemGetVersionInformation: - TERMINAL
1550@1447068918.061160:xen_platform_log xen platform: XEN|SystemGetVersionInformation: - SINGLEUSERTS
1550@1447068918.061232:xen_platform_log xen platform: XEN|SystemGetVersionInformation: TYPE: WORKSTATION
1550@1447068918.061319:xen_platform_log xen platform: XEN|SystemGetMemoryInformation: RANGE[0] 00000000.00001000 - 00000000.0009efff
1550@1447068918.061423:xen_platform_log xen platform: XEN|SystemGetMemoryInformation: RANGE[1] 00000000.00100000 - 00000000.00101fff
1550@1447068918.061521:xen_platform_log xen platform: XEN|SystemGetMemoryInformation: RANGE[2] 00000000.00103000 - 00000000.7fffefff
1550@1447068918.061586:xen_platform_log xen platform: XEN|AcpiGetXsdt: 0x00000000FC00A000
1550@1447068918.062597:xen_platform_log xen platform: XEN|SystemViridianInformation: ====>
1550@1447068918.062684:xen_platform_log xen platform: XEN|SystemViridianInformation: Interface Identifier: Hv#1
1550@1447068918.062757:xen_platform_log xen platform: XEN|SystemViridianInformation: Hypervisor Features:
1550@1447068918.062833:xen_platform_log xen platform: XEN|SystemViridianInformation:  - Partition Reference Counter
1550@1447068918.062904:xen_platform_log xen platform: XEN|SystemViridianInformation:  - APIC Access MSRs
1550@1447068918.062973:xen_platform_log xen platform: XEN|SystemViridianInformation:  - Hypercall MSRs
1550@1447068918.063050:xen_platform_log xen platform: XEN|SystemViridianInformation:  - Virtual Processor Index MSR
1550@1447068918.063121:xen_platform_log xen platform: XEN|SystemViridianInformation:  - Timer Frequency MSR
1550@1447068918.063189:xen_platform_log xen platform: XEN|SystemViridianInformation: Recommendations:
1550@1447068918.063268:xen_platform_log xen platform: XEN|SystemViridianInformation:  - EOI, ICR and TPR access via MSR
1550@1447068918.063341:xen_platform_log xen platform: XEN|SystemViridianInformation:  - Use relaxed timing
1550@1447068918.063435:xen_platform_log xen platform: XEN|SystemViridianInformation:  - Retry spinlocks 2047 times
1550@1447068918.063511:xen_platform_log xen platform: XEN|SystemViridianInformation: Hardware Features:
1550@1447068918.063584:xen_platform_log xen platform: XEN|SystemViridianInformation:  - APIC overlay assist
1550@1447068918.063651:xen_platform_log xen platform: XEN|SystemViridianInformation:  - MSR bitmaps
1550@1447068918.063736:xen_platform_log xen platform: XEN|SystemViridianInformation:  - Second Level Address Translation (SLAT)
1550@1447068918.063798:xen_platform_log xen platform: XEN|SystemViridianInformation: <====
1550@1447068918.063864:xen_platform_log xen platform: XEN|SystemProcessorInformation: ====> (0:0)
1550@1447068918.063939:xen_platform_log xen platform: XEN|SystemProcessorInformation: Manufacturer: GenuineIntel
1550@1447068918.064005:xen_platform_log xen platform: XEN|SystemProcessorInformation: APIC ID: 00
1550@1447068918.064073:xen_platform_log xen platform: XEN|SystemProcessorInformation: PROCESSOR ID: 00
1550@1447068918.064149:xen_platform_log xen platform: XEN|SystemProcessorInformation: <==== (0:0)
1550@1447068918.064222:xen_platform_log xen platform: XEN|SystemProcessorInformation: ====> (0:1)
1550@1447068918.064318:xen_platform_log xen platform: XEN|SystemProcessorInformation: Manufacturer: GenuineIntel
1550@1447068918.064394:xen_platform_log xen platform: XEN|SystemProcessorInformation: APIC ID: 02
1550@1447068918.064469:xen_platform_log xen platform: XEN|SystemProcessorInformation: PROCESSOR ID: 01
1550@1447068918.064537:xen_platform_log xen platform: XEN|SystemProcessorInformation: <==== (0:1)
1550@1447068918.065499:xen_platform_log xen platform: XEN: BASE CPUID LEAF @ 40000100
1550@1447068918.065577:xen_platform_log xen platform: XEN: HYPERCALL PAGE 0 @ 00000000.7df31000
1550@1447068918.065772:xen_platform_log xen platform: XEN|UnplugSetRequest: DISKS
1550@1447068918.065846:xen_platform_log xen platform: XEN|UnplugSetRequest: NICS
1550@1447068918.068125:xen_platform_log xen platform: XENFILT|DriverEntry: 8.2.0 (82) (23.10.2015)
1550@1447068918.068204:xen_platform_log xen platform: XEN: 4.6.0 (__XEN_INTERFACE_VERSION__ = 00040600)
1550@1447068918.098513:xen_platform_log xen platform: XENFILT|FdoCreate: FFFFE0002D789880 (ACPI\PNP0A03\0)
1550@1447068918.515610:xen_platform_log xen platform: XENFILT|PdoCreate: FFFFE0002D798C60 (PCI\VEN_8086&DEV_1237&SUBSYS_11001AF4&REV_02\00)
1550@1447068918.515824:xen_platform_log xen platform: XENFILT|PdoCreate: FFFFE0002D798880 (PCI\VEN_8086&DEV_7000&SUBSYS_11001AF4&REV_00\08)
1550@1447068918.516005:xen_platform_log xen platform: XENFILT|PdoCreate: FFFFE0002D7A4C60 (PCI\VEN_8086&DEV_7010&SUBSYS_11001AF4&REV_00\09)
1550@1447068918.516191:xen_platform_log xen platform: XENFILT|PdoCreate: FFFFE0002D7A4880 (PCI\VEN_5853&DEV_0001&SUBSYS_00015853&REV_01\10)
1550@1447068918.516369:xen_platform_log xen platform: XENFILT|PdoCreate: FFFFE0002D794B30 (PCI\VEN_8086&DEV_2668&SUBSYS_11001AF4&REV_01\18)
1550@1447068918.516553:xen_platform_log xen platform: XENFILT|PdoCreate: FFFFE0002D796C60 (PCI\VEN_1AF4&DEV_1003&SUBSYS_00031AF4&REV_00\20)
1550@1447068918.516726:xen_platform_log xen platform: XENFILT|PdoCreate: FFFFE0002D79DC60 (PCI\VEN_1B36&DEV_0100&SUBSYS_11001AF4&REV_04\28)
1550@1447068918.516900:xen_platform_log xen platform: XENFILT|PdoCreate: FFFFE0002D79EC60 (PCI\VEN_10EC&DEV_8139&SUBSYS_11001AF4&REV_20\30)
1550@1447068918.517073:xen_platform_log xen platform: XENFILT|PdoCreate: FFFFE0002D79E880 (PCI\VEN_8086&DEV_2934&SUBSYS_11001AF4&REV_03\E8)
1550@1447068918.517260:xen_platform_log xen platform: XENFILT|PdoCreate: FFFFE0002D7A09F0 (PCI\VEN_8086&DEV_2935&SUBSYS_11001AF4&REV_03\E9)
1550@1447068918.517425:xen_platform_log xen platform: XENFILT|PdoCreate: FFFFE0002D7A2B30 (PCI\VEN_8086&DEV_2936&SUBSYS_11001AF4&REV_03\EA)
1550@1447068918.517594:xen_platform_log xen platform: XENFILT|PdoCreate: FFFFE0002D7A5C60 (PCI\VEN_8086&DEV_293A&SUBSYS_11001AF4&REV_03\EF)
1550@1447068918.517746:xen_platform_log xen platform: XENFILT|PdoCreate: FFFFE0002D7A6C60 (ACPI\PNP0103\0)
1550@1447068918.517840:xen_platform_log xen platform: XENFILT|DriverSetFilterState: ACTIVE DEVICE PRESENT
1550@1447068918.518045:xen_platform_log xen platform: UNPLUG: PRE-AMBLE (DRIVERS NOT BLACKLISTED)
1550@1447068918.551837:xen_platform_log xen platform: UNPLUG: DISKS
1550@1447068918.559507:xen_platform_log xen platform: UNPLUG: NICS
1550@1447068918.559631:xen_platform_log xen platform: XENFILT|DriverSetFilterState: PENDING
1550@1447068918.607832:xen_platform_log xen platform: XENFILT|PdoDestroy: FFFFE0002D79EC60 (PCI\VEN_10EC&DEV_8139&SUBSYS_11001AF4&REV_20\30) (device disappeared)
1550@1447068918.608052:xen_platform_log xen platform: XENFILT|DriverSetFilterState: DISABLED
1550@1447068918.650338:xen_platform_log xen platform: XENBUS|DriverEntry: 8.2.0 (82) (23.10.2015)
1550@1447068918.651545:xen_platform_log xen platform: XENFILT|PdoQueryInterface: PCI\VEN_5853&DEV_0001&SUBSYS_00015853&REV_01\10: PVDEVICE_INTERFACE (VERSION 1)
1550@1447068918.651779:xen_platform_log xen platform: XENBUS|FdoSetFriendlyName: Xen PV Bus (0001)
1550@1447068918.651858:xen_platform_log xen platform: XENBUS|FdoCreate: FFFFE0002D7BC040 (XP0001 XENBUS) [ACTIVE]
1550@1447068918.682180:xen_platform_log xen platform: XENBUS|FdoConnectInterrupt: FFFFE0002D7BDBA8: Shared LevelSensitive CPU 0:0 VECTOR b1
1550@1447068918.682364:xen_platform_log xen platform: XENBUS|FdoConnectInterrupt: FFFFE0002D7C4E98: DeviceExclusive Latched CPU 0:0 VECTOR 50
1550@1447068918.682531:xen_platform_log xen platform: XENBUS|FdoConnectInterrupt: FFFFE0002D7C4A28: DeviceExclusive Latched CPU 0:1 VECTOR 50
1550@1447068918.683574:xen_platform_log xen platform: XENBUS|FdoScan: ====>
1550@1447068918.683661:xen_platform_log xen platform: XENBUS|FdoCreateIoSpace: 00000000.f8000000 - 00000000.f8ffffff
1550@1447068918.683723:xen_platform_log xen platform: XENBUS|FdoSuspend: ====>
1550@1447068918.683787:xen_platform_log xen platform: XEN|HvmSetParam: fail1 (c0000022)
1550@1447068918.683842:xen_platform_log xen platform: XENBUS|FdoBalloon: ====>
1550@1447068918.683920:xen_platform_log xen platform: SHARED_INFO: MAP XENMAPSPACE_shared_info @ 00000000.f8000000
1550@1447068918.684023:xen_platform_log xen platform: EVTCHN_FIFO: CONTROLBLOCK[0] @ 00000000.4dcce000
1550@1447068918.684098:xen_platform_log xen platform: EVTCHN_FIFO: CONTROLBLOCK[1] @ 00000000.4dccf000
1550@1447068918.684155:xen_platform_log xen platform: XENBUS|EvtchnAbiAcquire: FIFO
1550@1447068918.684238:xen_platform_log xen platform: XENBUS|EvtchnInterruptEnable: CPU 0:0 (Vector = 80)
1550@1447068918.684309:xen_platform_log xen platform: XENBUS|EvtchnInterruptEnable: CPU 0:1 (Vector = 80)
1550@1447068918.684384:xen_platform_log xen platform: XENBUS|EvtchnInterruptEnable: CALLBACK VIA (Vector = 24)
1550@1447068918.684452:xen_platform_log xen platform: STORE: PAGE @ 00000000.feffc000
1550@1447068918.684502:xen_platform_log xen platform: STORE: EVTCHN 1
1550@1447068918.684589:xen_platform_log xen platform: EVTCHN_FIFO: EVENTARRAY[0] @ 00000000.4dcd0000
1550@1447068918.684668:xen_platform_log xen platform: XENBUS|EvtchnFifoExpand: added ports [00000000 - 000003ff]
1550@1447068918.685360:xen_platform_log xen platform: XENBUS|PdoCreate: FFFFE0002D7DB9C0 (VBD)
1550@1447068918.685523:xen_platform_log xen platform: XENBUS|PdoDumpRevisions: 08000009 -> SUSPEND v1 SHARED_INFO v2 EVTCHN v4 DEBUG v1 STORE v1 RANGE_SET v1 CACHE v1 GNTTAB v1 UNPLUG v1 EMULATED v1
1550@1447068918.685654:xen_platform_log xen platform: XENBUS|PdoDumpRevisions: 0800000A -> SUSPEND v1 SHARED_INFO v2 EVTCHN v5 DEBUG v1 STORE v1 RANGE_SET v1 CACHE v1 GNTTAB v1 UNPLUG v1 EMULATED v1
1550@1447068918.685787:xen_platform_log xen platform: XENBUS|PdoDumpRevisions: 0800000B -> SUSPEND v1 SHARED_INFO v2 EVTCHN v5 DEBUG v1 STORE v2 RANGE_SET v1 CACHE v1 GNTTAB v2 UNPLUG v1 EMULATED v1
1550@1447068918.685924:xen_platform_log xen platform: XENBUS|PdoCreate: FFFFE0002D7DCD40 (VIF)
1550@1447068918.686053:xen_platform_log xen platform: XENBUS|PdoDumpRevisions: 08000009 -> SUSPEND v1 SHARED_INFO v2 EVTCHN v4 DEBUG v1 STORE v1 RANGE_SET v1 CACHE v1 GNTTAB v1 UNPLUG v1 EMULATED v1
1550@1447068918.686179:xen_platform_log xen platform: XENBUS|PdoDumpRevisions: 0800000A -> SUSPEND v1 SHARED_INFO v2 EVTCHN v5 DEBUG v1 STORE v1 RANGE_SET v1 CACHE v1 GNTTAB v1 UNPLUG v1 EMULATED v1
1550@1447068918.686315:xen_platform_log xen platform: XENBUS|PdoDumpRevisions: 0800000B -> SUSPEND v1 SHARED_INFO v2 EVTCHN v5 DEBUG v1 STORE v2 RANGE_SET v1 CACHE v1 GNTTAB v2 UNPLUG v1 EMULATED v1
1550@1447068918.686473:xen_platform_log xen platform: XENBUS|PdoCreate: FFFFE0002D7DCA20 (IFACE)
1550@1447068918.686605:xen_platform_log xen platform: XENBUS|PdoDumpRevisions: 08000009 -> SUSPEND v1 SHARED_INFO v2 EVTCHN v4 DEBUG v1 STORE v1 RANGE_SET v1 CACHE v1 GNTTAB v1 UNPLUG v1 EMULATED v1
1550@1447068918.686737:xen_platform_log xen platform: XENBUS|PdoDumpRevisions: 0800000A -> SUSPEND v1 SHARED_INFO v2 EVTCHN v5 DEBUG v1 STORE v1 RANGE_SET v1 CACHE v1 GNTTAB v1 UNPLUG v1 EMULATED v1
1550@1447068918.686869:xen_platform_log xen platform: XENBUS|PdoDumpRevisions: 0800000B -> SUSPEND v1 SHARED_INFO v2 EVTCHN v5 DEBUG v1 STORE v2 RANGE_SET v1 CACHE v1 GNTTAB v2 UNPLUG v1 EMULATED v1
1550@1447068918.720165:xen_platform_log xen platform: XENFILT|FdoCreate: FFFFE0002D7F7C60 (PCIIDE\IDEChannel\0)
1550@1447068918.720512:xen_platform_log xen platform: XENFILT|FdoCreate: FFFFE0002D7FDC60 (PCIIDE\IDEChannel\1)
1550@1447068918.734276:xen_platform_log xen platform: XENFILT|PdoCreate: FFFFE0002D8877D0 (IDE\CdRomQEMU_QEMU_DVD-ROM_______________________2.4.____\0.1.0)
1550@1447068919.168069:xen_platform_log xen platform: XENVBD|DriverEntry:8.2.0.37 (30/10/2015)
1550@1447068919.168320:xen_platform_log xen platform: XENVBD|__DriverParseParameterKey:DriverParameters: 
1550@1447068919.168651:xen_platform_log xen platform: XENDISK|DriverEntry:XENDISK 8.2.0 (37) (30.10.2015)
1550@1447068919.168941:xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: BUS_INTERFACE (VERSION 1)
1550@1447068919.170002:xen_platform_log xen platform: XENDISK|FdoCreate:FFFFE0002D88CCE0
1550@1447068919.170146:xen_platform_log xen platform: XENVBD|DispatchPnp:DeviceObject 0xFFFFE0002D88F050 is not FDO (0x0000000000000000) or a PDO
1550@1447068919.170320:xen_platform_log xen platform: XENVBD|DispatchPnp:DeviceObject 0xFFFFE0002D88F050 is not FDO (0x0000000000000000) or a PDO
1550@1447068919.170510:xen_platform_log xen platform: XENVBD|DispatchPnp:DeviceObject 0xFFFFE0002D88F050 is not FDO (0x0000000000000000) or a PDO
1550@1447068919.170665:xen_platform_log xen platform: XENVBD|DispatchPnp:DeviceObject 0xFFFFE0002D88F050 is not FDO (0x0000000000000000) or a PDO
1550@1447068919.171459:xen_platform_log xen platform: XENVBD|DispatchPnp:DeviceObject 0xFFFFE0002D88F050 is not FDO (0x0000000000000000) or a PDO
1550@1447068919.171542:xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: BUS_INTERFACE (VERSION 1)
1550@1447068919.171643:xen_platform_log xen platform: XENVBD|DispatchPnp:DeviceObject 0xFFFFE0002D88F050 is not FDO (0x0000000000000000) or a PDO
1550@1447068919.171744:xen_platform_log xen platform: XENVBD|DispatchPnp:DeviceObject 0xFFFFE0002D88F050 is not FDO (0x0000000000000000) or a PDO
1550@1447068919.171820:xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: BUS_INTERFACE (VERSION 1)
1550@1447068919.171887:xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: Version = 0
1550@1447068919.171955:xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: Master = TRUE
1550@1447068919.172029:xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: ScatterGather = TRUE
1550@1447068919.172100:xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: DemandMode = FALSE
1550@1447068919.172175:xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: AutoInitialize = FALSE
1550@1447068919.172250:xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: Dma32BitAddresses = TRUE
1550@1447068919.172323:xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: IgnoreCount = FALSE
1550@1447068919.172398:xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: Dma64BitAddresses = TRUE
1550@1447068919.172471:xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: BusNumber = 00000000
1550@1447068919.172545:xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: DmaChannel = ffffffff
1550@1447068919.172621:xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: InterfaceType = Internal
1550@1447068919.172692:xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: DmaWidth = 8Bits
1550@1447068919.172763:xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: DmaSpeed = Compatible
1550@1447068919.172836:xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: MaximumLength = 000b0000
1550@1447068919.172906:xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: DmaPort = ffffffff
1550@1447068919.173012:xen_platform_log xen platform: XENVBD|DispatchPnp:DeviceObject 0xFFFFE0002D88F050 is not FDO (0x0000000000000000) or a PDO
1550@1447068919.173088:xen_platform_log xen platform: XENBUS|DmaGetAdapter: no interception
1550@1447068919.173216:xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: STORE_INTERFACE (VERSION 1)
1550@1447068919.173295:xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: EVTCHN_INTERFACE (VERSION 4)
1550@1447068919.173380:xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: GNTTAB_INTERFACE (VERSION 1)
1550@1447068919.173459:xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: SUSPEND_INTERFACE (VERSION 1)
1550@1447068919.173535:xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: DEBUG_INTERFACE (VERSION 1)
1550@1447068919.173613:xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: UNPLUG_INTERFACE (VERSION 1)
1550@1447068919.173691:xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: EMULATED_INTERFACE (VERSION 1)
1550@1447068919.173798:xen_platform_log xen platform: XENFILT|PdoQueryInterface: PCI\VEN_5853&DEV_0001&SUBSYS_00015853&REV_01\10: EMULATED_INTERFACE (VERSION 1)
1550@1447068919.173942:xen_platform_log xen platform: XENBUS|UnplugRequest: DISKS (MAKE)
1550@1447068919.174020:xen_platform_log xen platform: XEN|UnplugIncrementValue: DISKS 1
1550@1447068919.174090:xen_platform_log xen platform: XENVBD|__FdoSetDevicePowerState:POWER D3 to D0
1550@1447068919.174146:xen_platform_log xen platform: XENVBD|__FdoD3ToD0:D3->D0
1550@1447068919.174667:xen_platform_log xen platform: XENVBD|__FdoIsPdoUnplugged:Target[0] : (vbd/768) Emulated NOT_PRESENT
1550@1447068919.174773:xen_platform_log xen platform: XENVBD|PdoCreate:Target[0] : Creating (PV)
1550@1447068919.174866:xen_platform_log xen platform: XENVBD|PdoSetDevicePowerState:Target[0] : POWER D3 to D0
1550@1447068919.174932:xen_platform_log xen platform: XENVBD|PdoD3ToD0:Target[0] : D3->D0 (PV)
1550@1447068919.175009:xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : INITIALIZED ----> ENABLED
1550@1447068919.243947:xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : in state CLOSED
1550@1447068919.369033:xen_platform_log xen platform: XENVBD|FrontendWriteUsage:Target[0] : NOT_DUMP NOT_HIBER NOT_PAGE
1550@1447068919.372090:xen_platform_log xen platform: XENVBD|PdoReadInquiryData:Target[0] : Failed to get Page80 data
1550@1447068919.372307:xen_platform_log xen platform: XENVBD|PdoReadInquiryData:Target[0] : Failed to get Page83 data
1550@1447068919.372517:xen_platform_log xen platform: XENVBD|PdoUpdateInquiryData:Target[0] : VDI-UUID = {00000000-0000-0000-0000-000000000000}
1550@1447068919.372642:xen_platform_log xen platform: XENVBD|FrontendPrepare:Target[0] : BackendId 0 (/local/domain/0/backend/vbd/190/768)
1550@1447068919.372992:xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : in state PREPARED
1550@1447068919.373366:xen_platform_log xen platform: XENBUS|RangeSetPop: fail1 (c000009a)
1550@1447068919.373488:xen_platform_log xen platform: GNTTAB: MAP XENMAPSPACE_grant_table[0] @ 00000000.f8001000
1550@1447068919.373572:xen_platform_log xen platform: XENBUS|GnttabExpand: added references [00000020 - 000001ff]
1550@1447068919.494526:xen_platform_log xen platform: XENVBD|__ReadDiskInfo:Target[0] : 104857600 sectors of 512 bytes (512)
1550@1447068919.494647:xen_platform_log xen platform: XENVBD|__ReadDiskInfo:Target[0] : 50 GB (00000000) 
1550@1447068919.495180:xen_platform_log xen platform: XENVBD|FrontendReadDiskInfo:Target[0] : Features: BARRIER FLUSH DISCARD 
1550@1447068919.495283:xen_platform_log xen platform: XENVBD|FrontendReadDiskInfo:Target[0] : DISCARD 0/1000
1550@1447068919.495668:xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : in state CONNECTED
1550@1447068919.495772:xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : in state ENABLED
1550@1447068919.495854:xen_platform_log xen platform: XENVBD|PdoCreate:Target[0] : Created (PV)
1550@1447068919.497237:xen_platform_log xen platform: XENVBD|FdoLogTargets:ScanThread ===>
1550@1447068919.497350:xen_platform_log xen platform: XENVBD|FdoLogTargets:ScanThread : Target[0] = 0xFFFFE0002D896C70 (present)
1550@1447068919.497459:xen_platform_log xen platform: XENVBD|FdoLogTargets:ScanThread <===
1550@1447068919.503662:xen_platform_log xen platform: XENVBD|FdoDispatchPnp:14:QUERY_PNP_DEVICE_STATE -> c00000bb
1550@1447068919.517945:xen_platform_log xen platform: XENVBD|__HandlePage83:Target[0] : INQUIRY Using Fake Page83 Data
1550@1447068919.518049:xen_platform_log xen platform: XENVBD|__HandlePage80:Target[0] : INQUIRY Using Fake Page80 Data
1550@1447068919.532187:xen_platform_log xen platform: XENDISK|PdoCreate:FFFFE0002D894CA0
1550@1447068919.532331:xen_platform_log xen platform: XENVBD|PdoSetDeviceObject:Target[0] : Setting DeviceObject = 0xFFFFE0002D899060
1550@1447068919.532414:xen_platform_log xen platform: XENVBD|FdoMapDeviceObjectToPdo:0xFFFFE0002D899060 --> Target 0 (000000)
1550@1447068919.532945:xen_platform_log xen platform: XENVBD|PdoDispatchPnp:Target[0] : 13:QUERY_ID -> c00000bb
1550@1447068919.533406:xen_platform_log xen platform: XENVBD|PdoDispatchPnp:Target[0] : 08:QUERY_INTERFACE -> c00000bb
1550@1447068919.533518:xen_platform_log xen platform: XENVBD|PdoDispatchPnp:Target[0] : 15:QUERY_BUS_INFORMATION -> c00000bb
1550@1447068919.534673:xen_platform_log xen platform: XENVBD|PdoDispatchPnp:Target[0] : 19:UNKNOWN -> c00000bb
1550@1447068919.555993:xen_platform_log xen platform: XENVBD|PdoDispatchPnp:Target[0] : 18:UNKNOWN -> c00000bb
1550@1447068919.556200:xen_platform_log xen platform: XENVBD|PdoDispatchPnp:Target[0] : 0d:FILTER_RESOURCE_REQUIREMENTS -> c00000bb
1550@1447068919.556483:xen_platform_log xen platform: XENVBD|PdoSetDevicePnpState:Target[0] : PNP Present to Started
1550@1447068919.556660:xen_platform_log xen platform: XENVBD|PdoDispatchPnp:Target[0] : 08:QUERY_INTERFACE -> c00000bb
1550@1447068919.557682:xen_platform_log xen platform: XENVBD|PdoDispatchPnp:Target[0] : 08:QUERY_INTERFACE -> c00000bb
1550@1447068919.559510:xen_platform_log xen platform: XENVBD|PdoDispatchPnp:Target[0] : 07:QUERY_DEVICE_RELATIONS -> c00000bb
1550@1447068920.294843:xen_platform_log xen platform: XENVBD|FrontendWriteUsage:Target[0] : DUMP NOT_HIBER NOT_PAGE
1550@1447068920.295923:xen_platform_log xen platform: XENBUS|FdoQueryPnpDeviceState: XP0001 XENBUS: not disableable
1550@1447068920.296061:xen_platform_log xen platform: XENBUS|FdoQueryPnpDeviceState: XP0001 XENBUS: not disableable
1550@1447068920.296177:xen_platform_log xen platform: XENBUS|FdoQueryPnpDeviceState: XP0001 XENBUS: not disableable
1550@1447068920.296311:xen_platform_log xen platform: XENVBD|FdoDispatchPnp:14:QUERY_PNP_DEVICE_STATE -> c00000bb
1550@1447068920.333866:xen_platform_log xen platform: XENBUS|RangeSetPop: fail1 (c000009a)
1550@1447068920.333993:xen_platform_log xen platform: GNTTAB: MAP XENMAPSPACE_grant_table[1] @ 00000000.f8002000
1550@1447068920.334101:xen_platform_log xen platform: XENBUS|GnttabExpand: added references [00000200 - 000003ff]
1550@1447068920.456487:xen_platform_log xen platform: XENVIF|DriverEntry: XENVIF 8.2.0 (50) (22.10.2015)
1550@1447068920.456777:xen_platform_log xen platform: XENBUS|PdoQueryInterface: VIF: BUS_INTERFACE (VERSION 1)
1550@1447068920.456930:xen_platform_log xen platform: XENBUS|PdoQueryInterface: VIF: DEBUG_INTERFACE (VERSION 1)
1550@1447068920.457004:xen_platform_log xen platform: XENBUS|PdoQueryInterface: VIF: SUSPEND_INTERFACE (VERSION 1)
1550@1447068920.457083:xen_platform_log xen platform: XENBUS|PdoQueryInterface: VIF: EVTCHN_INTERFACE (VERSION 4)
1550@1447068920.457160:xen_platform_log xen platform: XENBUS|PdoQueryInterface: VIF: STORE_INTERFACE (VERSION 1)
1550@1447068920.457235:xen_platform_log xen platform: XENBUS|PdoQueryInterface: VIF: RANGE_SET_INTERFACE (VERSION 1)
1550@1447068920.457307:xen_platform_log xen platform: XENBUS|PdoQueryInterface: VIF: CACHE_INTERFACE (VERSION 1)
1550@1447068920.457382:xen_platform_log xen platform: XENBUS|PdoQueryInterface: VIF: GNTTAB_INTERFACE (VERSION 1)
1550@1447068920.457459:xen_platform_log xen platform: XENBUS|PdoQueryInterface: VIF: UNPLUG_INTERFACE (VERSION 1)
1550@1447068920.457532:xen_platform_log xen platform: XENVIF|FdoCreate: FFFFE0002DBB84C0 (XP0001 XENVIF)
1550@1447068920.459717:xen_platform_log xen platform: XENIFACE|DriverEntry: 8.2.0.25 (2/11/2015)
1550@1447068920.459925:xen_platform_log xen platform: XENIFACE|ThreadCreate: Create thread FFFFF8015B8F7E3C FFFFE0002DBCA910
1550@1447068920.460049:xen_platform_log xen platform: XENIFACE|ThreadCreate: Create thread FFFFF8015B8F6D78 FFFFE0002DBCA920
1550@1447068920.460202:xen_platform_log xen platform: XENBUS|PdoQueryInterface: IFACE: SUSPEND_INTERFACE (VERSION 1)
1550@1447068920.460308:xen_platform_log xen platform: XENBUS|PdoQueryInterface: IFACE: SHARED_INFO_INTERFACE (VERSION 2)
1550@1447068920.460412:xen_platform_log xen platform: XENBUS|PdoQueryInterface: IFACE: STORE_INTERFACE (VERSION 2)
1550@1447068920.460512:xen_platform_log xen platform: XENBUS|PdoQueryInterface: IFACE: EVTCHN_INTERFACE (VERSION 5)
1550@1447068920.460608:xen_platform_log xen platform: XENBUS|PdoQueryInterface: IFACE: GNTTAB_INTERFACE (VERSION 2)
1550@1447068920.460942:xen_platform_log xen platform: XENIFACE|FdoInitialiseXSRegistryEntries: no such xenstore key
1550@1447068920.461063:xen_platform_log xen platform: XENIFACE|FdoInitialiseXSRegistryEntries: Failed to initialise registry (c0000022)
1550@1447068920.461163:xen_platform_log xen platform: XENIFACE|ThreadCreate: Create thread FFFFF8015B8F792C FFFFE0002DBCACB8
1550@1447068920.461305:xen_platform_log xen platform: XENIFACE|FdoCreate: FFFFE0002DBCAD40 (IFACE)
1550@1447068921.111001:xen_platform_log xen platform: XENVIF|__PdoSetPermanentAddress: 0: 00:16:3e:37:b2:71
1550@1447068921.111221:xen_platform_log xen platform: XENVIF|__PdoSetContainerID: 0 {105ac193-d528-5831-aad1-b818f94686ad}
1550@1447068921.111365:xen_platform_log xen platform: XENVIF|FrontendSetMaxQueues: device/vif/0: 2
1550@1447068921.179280:xen_platform_log xen platform: XENVIF|PdoCreate: FFFFE0002DD73D40 (0)
1550@1447068921.179392:xen_platform_log xen platform: XENVIF|PdoDumpRevisions: 08000002 -> CACHE v1 VIF v2
1550@1447068921.179490:xen_platform_log xen platform: XENVIF|PdoDumpRevisions: 08000003 -> CACHE v1 VIF v3
1550@1447068921.210012:xen_platform_log xen platform: XENNET|DriverEntry: XENNET 8.2.0 (32) (22.10.2015)
1550@1447068921.211204:xen_platform_log xen platform: XENIFACE|WmiRegister: DRV: XenIface WMI Initialisation
1550@1447068921.261933:xen_platform_log xen platform: XENBUS|UnplugRequest: NICS (MAKE)
1550@1447068921.262051:xen_platform_log xen platform: XEN|UnplugIncrementValue: NICS 1
1550@1447068921.262200:xen_platform_log xen platform: XENVIF|PdoSetFriendlyName: Xen PV Network Device #0
1550@1447068921.262559:xen_platform_log xen platform: XENVIF|SettingsRestore: TO Ethernet 2 (Xen PV Network Device #0)
1550@1447068921.263176:xen_platform_log xen platform: XENVIF|SettingsCopyIpAddresses: Version4: ADDRESSES NOT FOUND
1550@1447068921.263276:xen_platform_log xen platform: XENVIF|SettingsCopyIpAddresses: Version6: ADDRESSES NOT FOUND
1550@1447068921.301877:xen_platform_log xen platform: XENVIF|__MacSetPermanentAddress: data/vif/0: 00:16:3E:37:B2:71
1550@1447068921.302906:xen_platform_log xen platform: XENVIF|__MacSetCurrentAddress: data/vif/0: 00:16:3E:37:B2:71
1550@1447068921.303301:xen_platform_log xen platform: XENVIF|FrontendSetNumQueues: device/vif/0: 1

--------------040203080100030609090106
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

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


From win-pv-devel-bounces@lists.xenproject.org Mon Nov 09 12:42:51 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Nov 2015 12:42:51 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1Zvlmb-0005Gn-QX; Mon, 09 Nov 2015 12:42:49 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1ZvlmZ-0005GR-Lq
	for win-pv-devel@lists.xenproject.org; Mon, 09 Nov 2015 12:42:48 +0000
Received: from [85.158.139.211] by server-13.bemta-5.messagelabs.com id
	0F/11-06091-2C490465; Mon, 09 Nov 2015 12:42:42 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-2.tower-206.messagelabs.com!1447072960!2096424!1
X-Originating-IP: [74.125.82.49]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 26047 invoked from network); 9 Nov 2015 12:42:40 -0000
Received: from mail-wm0-f49.google.com (HELO mail-wm0-f49.google.com)
	(74.125.82.49)
	by server-2.tower-206.messagelabs.com with AES128-GCM-SHA256 encrypted
	SMTP; 9 Nov 2015 12:42:40 -0000
Received: by wmww144 with SMTP id w144so74435977wmw.1
	for <win-pv-devel@lists.xenproject.org>;
	Mon, 09 Nov 2015 04:42:40 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=m2r_biz.20150623.gappssmtp.com; s=20150623;
	h=to:cc:from:subject:message-id:date:user-agent:mime-version
	:content-type; bh=+eL75AzFeU/eGRkaXXhZds19G8P2KvYx5sI3WhGTE6s=;
	b=r3HtxgTqU9T9O53AdMny/0gPgMfaK9XwGaKRz9Ae+pm/VWfOTe0+LzDWIEJmm7M4/M
	bLQUQ5fhcf8ZpinQTr5thKwx29jTzswy4MBHjhw2W8AH3iXXyBR4dJ0+WmMCj5f8gr3p
	Qktg9jRKEGWFWezwFKtC3lXFK2ntmR/7lS07YJE8cQpn124PZm/1JbFFGxUxPumQ/cCy
	LfIQ9zwNHNPpYQOImwy4SPovj1t5oerQhxEAdZKvQyYaRvyQqY4mgCaZp4tvUrBI9eGI
	lTXupq+EL3moAqYbeiriwFfu8E3KnDVtq1ET8L5nNgxJNkGesOAr2NpOK0LtSpHFlnxi
	R9FA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:to:cc:from:subject:message-id:date:user-agent
	:mime-version:content-type;
	bh=+eL75AzFeU/eGRkaXXhZds19G8P2KvYx5sI3WhGTE6s=;
	b=gMo7GPhkp/UMRKRJdbc0R8N7Wh7HnfWG/fgbGUJAqdSG3haPEIH2Z0D944JYlLHU/W
	AMsQXVCG0p0F7dF4kdGDm64KvxWPH8O1W2hrYk82q16BkHN7gUjvqWQBvfcoyMHHawCW
	XARQs3PVrE07LeRbuafTjvxnE259TLlyDtRcApz98B0zFIv69QxCCN9En0aranSW5KJP
	+2Fl8C8QzLSEVFI3GkziI1tXlkRXJT1qgIouCDtgT3xawvmWG5nVUwEb6cm4qg/NPMh7
	fhQStuCLWVDijSGdEjMPC1omVgDJW6qc9JKWMUZWkQveIYTmnd4NvejgywC/lGpZATSt
	5bmA==
X-Gm-Message-State: ALoCoQlpA7m8KqXWg00F29nQkT7RaPlcV8GX5errX9J/KFBIzWLdtuy/loqlFnF3GEkd/xc2p1OD
X-Received: by 10.28.19.78 with SMTP id 75mr27499467wmt.101.1447072959847;
	Mon, 09 Nov 2015 04:42:39 -0800 (PST)
Received: from [192.168.1.37] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by smtp.googlemail.com with ESMTPSA id
	q141sm14143165wmg.3.2015.11.09.04.42.37
	(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Mon, 09 Nov 2015 04:42:39 -0800 (PST)
To: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
Message-ID: <564094BC.30307@m2r.biz>
Date: Mon, 9 Nov 2015 13:42:36 +0100
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.3.0
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="------------040203080100030609090106"
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] Windows 10 domU hang on boot after pv drivers
 install if dom0 have old kernel (or specific 3.2 problem)
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

This is a multi-part message in MIME format.
--------------040203080100030609090106
Content-Type: text/plain; charset=iso-8859-15; format=flowed
Content-Transfer-Encoding: 7bit

On testing servers I saw in initial tests that newer dom0 kernel seems 
was needed and I always used kernel >=3.14 after start use new winpv 
drivers.
Now I'm using 4.1 kernel in test servers but I had occasional problems 
that I now know exactly was the problem, then for now I use it only for 
tests.
I started to update also few production servers with newer software 
tested and that seems stable, xen 4.6.0, qemu 2.4, spice 0.12.6 and 
seabios 1.8.2.
I tried to use also new winpv drivers, I installed today latest build on 
clean windows 10 pro 64 bit domU with same/similar cfg of testing server 
with same softwares except dom0 kernel (I have 3.2 wheezy from official 
repo, 3.2.68-1+deb7u5).
On boot after winpv install (more exactly the second reboot because the 
first is working but still with emulated disk and network as already 
reported time ago) domU's hang at windows boot, full qemu log with trace 
in attachment.

I know since long time ago that winpv require xen>=4.5.0 and upstream 
qemu>=1.6.1
Probably also backports of these xen patches are needed if xen<4.6 
(based on critical problems had long time ago):
- x86/hvm: add per-vcpu evtchn upcalls
- x86/hvm: extend HVM cpuid leaf with vcpu id

I do not understand for sure if kernel>=N is also needed (for dom0) to 
use winpv drivers or if problem like this are specific to kernel 3.2 (or 
debian patches).
Someone know anything certain about it?


If you need more tests/data tell me and I'll post them.

Thanks for any reply and sorry for my bad english.

--------------040203080100030609090106
Content-Type: text/plain; charset=UTF-8;
 name="qemu-dm-frc-12.log"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
 filename="qemu-dm-frc-12.log"

xc: error: linux_gnttab_set_max_grants: ioctl SET_MAX_GRANTS failed (22 = Invalid argument): Internal error
xen be: qdisk-832: xc_gnttab_set_max_grants failed: Invalid argument
main_channel_link: add main channel client
main_channel_handle_parsed: net test: latency 21.014000 ms, bitrate 1329007138 bps (1267.439974 Mbps)
red_dispatcher_set_cursor_peer: 
inputs_connect: inputs channel client create
1550@1447068918.060511:xen_platform_log xen platform: XEN|DllInitialize: 8.2.0 (82) (23.10.2015)
1550@1447068918.060744:xen_platform_log xen platform: XEN|AcpiFindRsdp: 0x00000000000F65D0
1550@1447068918.060863:xen_platform_log xen platform: XEN|SystemGetStartOptions:  TESTSIGNING  NOEXECUTE=OPTIN
1550@1447068918.060958:xen_platform_log xen platform: XEN|SystemGetVersionInformation: KERNEL: 10.0 (BUILD 10240) PLATFORM WIN32_NT (x64)
1550@1447068918.061026:xen_platform_log xen platform: XEN|SystemGetVersionInformation: SUITES:
1550@1447068918.061092:xen_platform_log xen platform: XEN|SystemGetVersionInformation: - TERMINAL
1550@1447068918.061160:xen_platform_log xen platform: XEN|SystemGetVersionInformation: - SINGLEUSERTS
1550@1447068918.061232:xen_platform_log xen platform: XEN|SystemGetVersionInformation: TYPE: WORKSTATION
1550@1447068918.061319:xen_platform_log xen platform: XEN|SystemGetMemoryInformation: RANGE[0] 00000000.00001000 - 00000000.0009efff
1550@1447068918.061423:xen_platform_log xen platform: XEN|SystemGetMemoryInformation: RANGE[1] 00000000.00100000 - 00000000.00101fff
1550@1447068918.061521:xen_platform_log xen platform: XEN|SystemGetMemoryInformation: RANGE[2] 00000000.00103000 - 00000000.7fffefff
1550@1447068918.061586:xen_platform_log xen platform: XEN|AcpiGetXsdt: 0x00000000FC00A000
1550@1447068918.062597:xen_platform_log xen platform: XEN|SystemViridianInformation: ====>
1550@1447068918.062684:xen_platform_log xen platform: XEN|SystemViridianInformation: Interface Identifier: Hv#1
1550@1447068918.062757:xen_platform_log xen platform: XEN|SystemViridianInformation: Hypervisor Features:
1550@1447068918.062833:xen_platform_log xen platform: XEN|SystemViridianInformation:  - Partition Reference Counter
1550@1447068918.062904:xen_platform_log xen platform: XEN|SystemViridianInformation:  - APIC Access MSRs
1550@1447068918.062973:xen_platform_log xen platform: XEN|SystemViridianInformation:  - Hypercall MSRs
1550@1447068918.063050:xen_platform_log xen platform: XEN|SystemViridianInformation:  - Virtual Processor Index MSR
1550@1447068918.063121:xen_platform_log xen platform: XEN|SystemViridianInformation:  - Timer Frequency MSR
1550@1447068918.063189:xen_platform_log xen platform: XEN|SystemViridianInformation: Recommendations:
1550@1447068918.063268:xen_platform_log xen platform: XEN|SystemViridianInformation:  - EOI, ICR and TPR access via MSR
1550@1447068918.063341:xen_platform_log xen platform: XEN|SystemViridianInformation:  - Use relaxed timing
1550@1447068918.063435:xen_platform_log xen platform: XEN|SystemViridianInformation:  - Retry spinlocks 2047 times
1550@1447068918.063511:xen_platform_log xen platform: XEN|SystemViridianInformation: Hardware Features:
1550@1447068918.063584:xen_platform_log xen platform: XEN|SystemViridianInformation:  - APIC overlay assist
1550@1447068918.063651:xen_platform_log xen platform: XEN|SystemViridianInformation:  - MSR bitmaps
1550@1447068918.063736:xen_platform_log xen platform: XEN|SystemViridianInformation:  - Second Level Address Translation (SLAT)
1550@1447068918.063798:xen_platform_log xen platform: XEN|SystemViridianInformation: <====
1550@1447068918.063864:xen_platform_log xen platform: XEN|SystemProcessorInformation: ====> (0:0)
1550@1447068918.063939:xen_platform_log xen platform: XEN|SystemProcessorInformation: Manufacturer: GenuineIntel
1550@1447068918.064005:xen_platform_log xen platform: XEN|SystemProcessorInformation: APIC ID: 00
1550@1447068918.064073:xen_platform_log xen platform: XEN|SystemProcessorInformation: PROCESSOR ID: 00
1550@1447068918.064149:xen_platform_log xen platform: XEN|SystemProcessorInformation: <==== (0:0)
1550@1447068918.064222:xen_platform_log xen platform: XEN|SystemProcessorInformation: ====> (0:1)
1550@1447068918.064318:xen_platform_log xen platform: XEN|SystemProcessorInformation: Manufacturer: GenuineIntel
1550@1447068918.064394:xen_platform_log xen platform: XEN|SystemProcessorInformation: APIC ID: 02
1550@1447068918.064469:xen_platform_log xen platform: XEN|SystemProcessorInformation: PROCESSOR ID: 01
1550@1447068918.064537:xen_platform_log xen platform: XEN|SystemProcessorInformation: <==== (0:1)
1550@1447068918.065499:xen_platform_log xen platform: XEN: BASE CPUID LEAF @ 40000100
1550@1447068918.065577:xen_platform_log xen platform: XEN: HYPERCALL PAGE 0 @ 00000000.7df31000
1550@1447068918.065772:xen_platform_log xen platform: XEN|UnplugSetRequest: DISKS
1550@1447068918.065846:xen_platform_log xen platform: XEN|UnplugSetRequest: NICS
1550@1447068918.068125:xen_platform_log xen platform: XENFILT|DriverEntry: 8.2.0 (82) (23.10.2015)
1550@1447068918.068204:xen_platform_log xen platform: XEN: 4.6.0 (__XEN_INTERFACE_VERSION__ = 00040600)
1550@1447068918.098513:xen_platform_log xen platform: XENFILT|FdoCreate: FFFFE0002D789880 (ACPI\PNP0A03\0)
1550@1447068918.515610:xen_platform_log xen platform: XENFILT|PdoCreate: FFFFE0002D798C60 (PCI\VEN_8086&DEV_1237&SUBSYS_11001AF4&REV_02\00)
1550@1447068918.515824:xen_platform_log xen platform: XENFILT|PdoCreate: FFFFE0002D798880 (PCI\VEN_8086&DEV_7000&SUBSYS_11001AF4&REV_00\08)
1550@1447068918.516005:xen_platform_log xen platform: XENFILT|PdoCreate: FFFFE0002D7A4C60 (PCI\VEN_8086&DEV_7010&SUBSYS_11001AF4&REV_00\09)
1550@1447068918.516191:xen_platform_log xen platform: XENFILT|PdoCreate: FFFFE0002D7A4880 (PCI\VEN_5853&DEV_0001&SUBSYS_00015853&REV_01\10)
1550@1447068918.516369:xen_platform_log xen platform: XENFILT|PdoCreate: FFFFE0002D794B30 (PCI\VEN_8086&DEV_2668&SUBSYS_11001AF4&REV_01\18)
1550@1447068918.516553:xen_platform_log xen platform: XENFILT|PdoCreate: FFFFE0002D796C60 (PCI\VEN_1AF4&DEV_1003&SUBSYS_00031AF4&REV_00\20)
1550@1447068918.516726:xen_platform_log xen platform: XENFILT|PdoCreate: FFFFE0002D79DC60 (PCI\VEN_1B36&DEV_0100&SUBSYS_11001AF4&REV_04\28)
1550@1447068918.516900:xen_platform_log xen platform: XENFILT|PdoCreate: FFFFE0002D79EC60 (PCI\VEN_10EC&DEV_8139&SUBSYS_11001AF4&REV_20\30)
1550@1447068918.517073:xen_platform_log xen platform: XENFILT|PdoCreate: FFFFE0002D79E880 (PCI\VEN_8086&DEV_2934&SUBSYS_11001AF4&REV_03\E8)
1550@1447068918.517260:xen_platform_log xen platform: XENFILT|PdoCreate: FFFFE0002D7A09F0 (PCI\VEN_8086&DEV_2935&SUBSYS_11001AF4&REV_03\E9)
1550@1447068918.517425:xen_platform_log xen platform: XENFILT|PdoCreate: FFFFE0002D7A2B30 (PCI\VEN_8086&DEV_2936&SUBSYS_11001AF4&REV_03\EA)
1550@1447068918.517594:xen_platform_log xen platform: XENFILT|PdoCreate: FFFFE0002D7A5C60 (PCI\VEN_8086&DEV_293A&SUBSYS_11001AF4&REV_03\EF)
1550@1447068918.517746:xen_platform_log xen platform: XENFILT|PdoCreate: FFFFE0002D7A6C60 (ACPI\PNP0103\0)
1550@1447068918.517840:xen_platform_log xen platform: XENFILT|DriverSetFilterState: ACTIVE DEVICE PRESENT
1550@1447068918.518045:xen_platform_log xen platform: UNPLUG: PRE-AMBLE (DRIVERS NOT BLACKLISTED)
1550@1447068918.551837:xen_platform_log xen platform: UNPLUG: DISKS
1550@1447068918.559507:xen_platform_log xen platform: UNPLUG: NICS
1550@1447068918.559631:xen_platform_log xen platform: XENFILT|DriverSetFilterState: PENDING
1550@1447068918.607832:xen_platform_log xen platform: XENFILT|PdoDestroy: FFFFE0002D79EC60 (PCI\VEN_10EC&DEV_8139&SUBSYS_11001AF4&REV_20\30) (device disappeared)
1550@1447068918.608052:xen_platform_log xen platform: XENFILT|DriverSetFilterState: DISABLED
1550@1447068918.650338:xen_platform_log xen platform: XENBUS|DriverEntry: 8.2.0 (82) (23.10.2015)
1550@1447068918.651545:xen_platform_log xen platform: XENFILT|PdoQueryInterface: PCI\VEN_5853&DEV_0001&SUBSYS_00015853&REV_01\10: PVDEVICE_INTERFACE (VERSION 1)
1550@1447068918.651779:xen_platform_log xen platform: XENBUS|FdoSetFriendlyName: Xen PV Bus (0001)
1550@1447068918.651858:xen_platform_log xen platform: XENBUS|FdoCreate: FFFFE0002D7BC040 (XP0001 XENBUS) [ACTIVE]
1550@1447068918.682180:xen_platform_log xen platform: XENBUS|FdoConnectInterrupt: FFFFE0002D7BDBA8: Shared LevelSensitive CPU 0:0 VECTOR b1
1550@1447068918.682364:xen_platform_log xen platform: XENBUS|FdoConnectInterrupt: FFFFE0002D7C4E98: DeviceExclusive Latched CPU 0:0 VECTOR 50
1550@1447068918.682531:xen_platform_log xen platform: XENBUS|FdoConnectInterrupt: FFFFE0002D7C4A28: DeviceExclusive Latched CPU 0:1 VECTOR 50
1550@1447068918.683574:xen_platform_log xen platform: XENBUS|FdoScan: ====>
1550@1447068918.683661:xen_platform_log xen platform: XENBUS|FdoCreateIoSpace: 00000000.f8000000 - 00000000.f8ffffff
1550@1447068918.683723:xen_platform_log xen platform: XENBUS|FdoSuspend: ====>
1550@1447068918.683787:xen_platform_log xen platform: XEN|HvmSetParam: fail1 (c0000022)
1550@1447068918.683842:xen_platform_log xen platform: XENBUS|FdoBalloon: ====>
1550@1447068918.683920:xen_platform_log xen platform: SHARED_INFO: MAP XENMAPSPACE_shared_info @ 00000000.f8000000
1550@1447068918.684023:xen_platform_log xen platform: EVTCHN_FIFO: CONTROLBLOCK[0] @ 00000000.4dcce000
1550@1447068918.684098:xen_platform_log xen platform: EVTCHN_FIFO: CONTROLBLOCK[1] @ 00000000.4dccf000
1550@1447068918.684155:xen_platform_log xen platform: XENBUS|EvtchnAbiAcquire: FIFO
1550@1447068918.684238:xen_platform_log xen platform: XENBUS|EvtchnInterruptEnable: CPU 0:0 (Vector = 80)
1550@1447068918.684309:xen_platform_log xen platform: XENBUS|EvtchnInterruptEnable: CPU 0:1 (Vector = 80)
1550@1447068918.684384:xen_platform_log xen platform: XENBUS|EvtchnInterruptEnable: CALLBACK VIA (Vector = 24)
1550@1447068918.684452:xen_platform_log xen platform: STORE: PAGE @ 00000000.feffc000
1550@1447068918.684502:xen_platform_log xen platform: STORE: EVTCHN 1
1550@1447068918.684589:xen_platform_log xen platform: EVTCHN_FIFO: EVENTARRAY[0] @ 00000000.4dcd0000
1550@1447068918.684668:xen_platform_log xen platform: XENBUS|EvtchnFifoExpand: added ports [00000000 - 000003ff]
1550@1447068918.685360:xen_platform_log xen platform: XENBUS|PdoCreate: FFFFE0002D7DB9C0 (VBD)
1550@1447068918.685523:xen_platform_log xen platform: XENBUS|PdoDumpRevisions: 08000009 -> SUSPEND v1 SHARED_INFO v2 EVTCHN v4 DEBUG v1 STORE v1 RANGE_SET v1 CACHE v1 GNTTAB v1 UNPLUG v1 EMULATED v1
1550@1447068918.685654:xen_platform_log xen platform: XENBUS|PdoDumpRevisions: 0800000A -> SUSPEND v1 SHARED_INFO v2 EVTCHN v5 DEBUG v1 STORE v1 RANGE_SET v1 CACHE v1 GNTTAB v1 UNPLUG v1 EMULATED v1
1550@1447068918.685787:xen_platform_log xen platform: XENBUS|PdoDumpRevisions: 0800000B -> SUSPEND v1 SHARED_INFO v2 EVTCHN v5 DEBUG v1 STORE v2 RANGE_SET v1 CACHE v1 GNTTAB v2 UNPLUG v1 EMULATED v1
1550@1447068918.685924:xen_platform_log xen platform: XENBUS|PdoCreate: FFFFE0002D7DCD40 (VIF)
1550@1447068918.686053:xen_platform_log xen platform: XENBUS|PdoDumpRevisions: 08000009 -> SUSPEND v1 SHARED_INFO v2 EVTCHN v4 DEBUG v1 STORE v1 RANGE_SET v1 CACHE v1 GNTTAB v1 UNPLUG v1 EMULATED v1
1550@1447068918.686179:xen_platform_log xen platform: XENBUS|PdoDumpRevisions: 0800000A -> SUSPEND v1 SHARED_INFO v2 EVTCHN v5 DEBUG v1 STORE v1 RANGE_SET v1 CACHE v1 GNTTAB v1 UNPLUG v1 EMULATED v1
1550@1447068918.686315:xen_platform_log xen platform: XENBUS|PdoDumpRevisions: 0800000B -> SUSPEND v1 SHARED_INFO v2 EVTCHN v5 DEBUG v1 STORE v2 RANGE_SET v1 CACHE v1 GNTTAB v2 UNPLUG v1 EMULATED v1
1550@1447068918.686473:xen_platform_log xen platform: XENBUS|PdoCreate: FFFFE0002D7DCA20 (IFACE)
1550@1447068918.686605:xen_platform_log xen platform: XENBUS|PdoDumpRevisions: 08000009 -> SUSPEND v1 SHARED_INFO v2 EVTCHN v4 DEBUG v1 STORE v1 RANGE_SET v1 CACHE v1 GNTTAB v1 UNPLUG v1 EMULATED v1
1550@1447068918.686737:xen_platform_log xen platform: XENBUS|PdoDumpRevisions: 0800000A -> SUSPEND v1 SHARED_INFO v2 EVTCHN v5 DEBUG v1 STORE v1 RANGE_SET v1 CACHE v1 GNTTAB v1 UNPLUG v1 EMULATED v1
1550@1447068918.686869:xen_platform_log xen platform: XENBUS|PdoDumpRevisions: 0800000B -> SUSPEND v1 SHARED_INFO v2 EVTCHN v5 DEBUG v1 STORE v2 RANGE_SET v1 CACHE v1 GNTTAB v2 UNPLUG v1 EMULATED v1
1550@1447068918.720165:xen_platform_log xen platform: XENFILT|FdoCreate: FFFFE0002D7F7C60 (PCIIDE\IDEChannel\0)
1550@1447068918.720512:xen_platform_log xen platform: XENFILT|FdoCreate: FFFFE0002D7FDC60 (PCIIDE\IDEChannel\1)
1550@1447068918.734276:xen_platform_log xen platform: XENFILT|PdoCreate: FFFFE0002D8877D0 (IDE\CdRomQEMU_QEMU_DVD-ROM_______________________2.4.____\0.1.0)
1550@1447068919.168069:xen_platform_log xen platform: XENVBD|DriverEntry:8.2.0.37 (30/10/2015)
1550@1447068919.168320:xen_platform_log xen platform: XENVBD|__DriverParseParameterKey:DriverParameters: 
1550@1447068919.168651:xen_platform_log xen platform: XENDISK|DriverEntry:XENDISK 8.2.0 (37) (30.10.2015)
1550@1447068919.168941:xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: BUS_INTERFACE (VERSION 1)
1550@1447068919.170002:xen_platform_log xen platform: XENDISK|FdoCreate:FFFFE0002D88CCE0
1550@1447068919.170146:xen_platform_log xen platform: XENVBD|DispatchPnp:DeviceObject 0xFFFFE0002D88F050 is not FDO (0x0000000000000000) or a PDO
1550@1447068919.170320:xen_platform_log xen platform: XENVBD|DispatchPnp:DeviceObject 0xFFFFE0002D88F050 is not FDO (0x0000000000000000) or a PDO
1550@1447068919.170510:xen_platform_log xen platform: XENVBD|DispatchPnp:DeviceObject 0xFFFFE0002D88F050 is not FDO (0x0000000000000000) or a PDO
1550@1447068919.170665:xen_platform_log xen platform: XENVBD|DispatchPnp:DeviceObject 0xFFFFE0002D88F050 is not FDO (0x0000000000000000) or a PDO
1550@1447068919.171459:xen_platform_log xen platform: XENVBD|DispatchPnp:DeviceObject 0xFFFFE0002D88F050 is not FDO (0x0000000000000000) or a PDO
1550@1447068919.171542:xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: BUS_INTERFACE (VERSION 1)
1550@1447068919.171643:xen_platform_log xen platform: XENVBD|DispatchPnp:DeviceObject 0xFFFFE0002D88F050 is not FDO (0x0000000000000000) or a PDO
1550@1447068919.171744:xen_platform_log xen platform: XENVBD|DispatchPnp:DeviceObject 0xFFFFE0002D88F050 is not FDO (0x0000000000000000) or a PDO
1550@1447068919.171820:xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: BUS_INTERFACE (VERSION 1)
1550@1447068919.171887:xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: Version = 0
1550@1447068919.171955:xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: Master = TRUE
1550@1447068919.172029:xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: ScatterGather = TRUE
1550@1447068919.172100:xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: DemandMode = FALSE
1550@1447068919.172175:xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: AutoInitialize = FALSE
1550@1447068919.172250:xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: Dma32BitAddresses = TRUE
1550@1447068919.172323:xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: IgnoreCount = FALSE
1550@1447068919.172398:xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: Dma64BitAddresses = TRUE
1550@1447068919.172471:xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: BusNumber = 00000000
1550@1447068919.172545:xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: DmaChannel = ffffffff
1550@1447068919.172621:xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: InterfaceType = Internal
1550@1447068919.172692:xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: DmaWidth = 8Bits
1550@1447068919.172763:xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: DmaSpeed = Compatible
1550@1447068919.172836:xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: MaximumLength = 000b0000
1550@1447068919.172906:xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: DmaPort = ffffffff
1550@1447068919.173012:xen_platform_log xen platform: XENVBD|DispatchPnp:DeviceObject 0xFFFFE0002D88F050 is not FDO (0x0000000000000000) or a PDO
1550@1447068919.173088:xen_platform_log xen platform: XENBUS|DmaGetAdapter: no interception
1550@1447068919.173216:xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: STORE_INTERFACE (VERSION 1)
1550@1447068919.173295:xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: EVTCHN_INTERFACE (VERSION 4)
1550@1447068919.173380:xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: GNTTAB_INTERFACE (VERSION 1)
1550@1447068919.173459:xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: SUSPEND_INTERFACE (VERSION 1)
1550@1447068919.173535:xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: DEBUG_INTERFACE (VERSION 1)
1550@1447068919.173613:xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: UNPLUG_INTERFACE (VERSION 1)
1550@1447068919.173691:xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: EMULATED_INTERFACE (VERSION 1)
1550@1447068919.173798:xen_platform_log xen platform: XENFILT|PdoQueryInterface: PCI\VEN_5853&DEV_0001&SUBSYS_00015853&REV_01\10: EMULATED_INTERFACE (VERSION 1)
1550@1447068919.173942:xen_platform_log xen platform: XENBUS|UnplugRequest: DISKS (MAKE)
1550@1447068919.174020:xen_platform_log xen platform: XEN|UnplugIncrementValue: DISKS 1
1550@1447068919.174090:xen_platform_log xen platform: XENVBD|__FdoSetDevicePowerState:POWER D3 to D0
1550@1447068919.174146:xen_platform_log xen platform: XENVBD|__FdoD3ToD0:D3->D0
1550@1447068919.174667:xen_platform_log xen platform: XENVBD|__FdoIsPdoUnplugged:Target[0] : (vbd/768) Emulated NOT_PRESENT
1550@1447068919.174773:xen_platform_log xen platform: XENVBD|PdoCreate:Target[0] : Creating (PV)
1550@1447068919.174866:xen_platform_log xen platform: XENVBD|PdoSetDevicePowerState:Target[0] : POWER D3 to D0
1550@1447068919.174932:xen_platform_log xen platform: XENVBD|PdoD3ToD0:Target[0] : D3->D0 (PV)
1550@1447068919.175009:xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : INITIALIZED ----> ENABLED
1550@1447068919.243947:xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : in state CLOSED
1550@1447068919.369033:xen_platform_log xen platform: XENVBD|FrontendWriteUsage:Target[0] : NOT_DUMP NOT_HIBER NOT_PAGE
1550@1447068919.372090:xen_platform_log xen platform: XENVBD|PdoReadInquiryData:Target[0] : Failed to get Page80 data
1550@1447068919.372307:xen_platform_log xen platform: XENVBD|PdoReadInquiryData:Target[0] : Failed to get Page83 data
1550@1447068919.372517:xen_platform_log xen platform: XENVBD|PdoUpdateInquiryData:Target[0] : VDI-UUID = {00000000-0000-0000-0000-000000000000}
1550@1447068919.372642:xen_platform_log xen platform: XENVBD|FrontendPrepare:Target[0] : BackendId 0 (/local/domain/0/backend/vbd/190/768)
1550@1447068919.372992:xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : in state PREPARED
1550@1447068919.373366:xen_platform_log xen platform: XENBUS|RangeSetPop: fail1 (c000009a)
1550@1447068919.373488:xen_platform_log xen platform: GNTTAB: MAP XENMAPSPACE_grant_table[0] @ 00000000.f8001000
1550@1447068919.373572:xen_platform_log xen platform: XENBUS|GnttabExpand: added references [00000020 - 000001ff]
1550@1447068919.494526:xen_platform_log xen platform: XENVBD|__ReadDiskInfo:Target[0] : 104857600 sectors of 512 bytes (512)
1550@1447068919.494647:xen_platform_log xen platform: XENVBD|__ReadDiskInfo:Target[0] : 50 GB (00000000) 
1550@1447068919.495180:xen_platform_log xen platform: XENVBD|FrontendReadDiskInfo:Target[0] : Features: BARRIER FLUSH DISCARD 
1550@1447068919.495283:xen_platform_log xen platform: XENVBD|FrontendReadDiskInfo:Target[0] : DISCARD 0/1000
1550@1447068919.495668:xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : in state CONNECTED
1550@1447068919.495772:xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : in state ENABLED
1550@1447068919.495854:xen_platform_log xen platform: XENVBD|PdoCreate:Target[0] : Created (PV)
1550@1447068919.497237:xen_platform_log xen platform: XENVBD|FdoLogTargets:ScanThread ===>
1550@1447068919.497350:xen_platform_log xen platform: XENVBD|FdoLogTargets:ScanThread : Target[0] = 0xFFFFE0002D896C70 (present)
1550@1447068919.497459:xen_platform_log xen platform: XENVBD|FdoLogTargets:ScanThread <===
1550@1447068919.503662:xen_platform_log xen platform: XENVBD|FdoDispatchPnp:14:QUERY_PNP_DEVICE_STATE -> c00000bb
1550@1447068919.517945:xen_platform_log xen platform: XENVBD|__HandlePage83:Target[0] : INQUIRY Using Fake Page83 Data
1550@1447068919.518049:xen_platform_log xen platform: XENVBD|__HandlePage80:Target[0] : INQUIRY Using Fake Page80 Data
1550@1447068919.532187:xen_platform_log xen platform: XENDISK|PdoCreate:FFFFE0002D894CA0
1550@1447068919.532331:xen_platform_log xen platform: XENVBD|PdoSetDeviceObject:Target[0] : Setting DeviceObject = 0xFFFFE0002D899060
1550@1447068919.532414:xen_platform_log xen platform: XENVBD|FdoMapDeviceObjectToPdo:0xFFFFE0002D899060 --> Target 0 (000000)
1550@1447068919.532945:xen_platform_log xen platform: XENVBD|PdoDispatchPnp:Target[0] : 13:QUERY_ID -> c00000bb
1550@1447068919.533406:xen_platform_log xen platform: XENVBD|PdoDispatchPnp:Target[0] : 08:QUERY_INTERFACE -> c00000bb
1550@1447068919.533518:xen_platform_log xen platform: XENVBD|PdoDispatchPnp:Target[0] : 15:QUERY_BUS_INFORMATION -> c00000bb
1550@1447068919.534673:xen_platform_log xen platform: XENVBD|PdoDispatchPnp:Target[0] : 19:UNKNOWN -> c00000bb
1550@1447068919.555993:xen_platform_log xen platform: XENVBD|PdoDispatchPnp:Target[0] : 18:UNKNOWN -> c00000bb
1550@1447068919.556200:xen_platform_log xen platform: XENVBD|PdoDispatchPnp:Target[0] : 0d:FILTER_RESOURCE_REQUIREMENTS -> c00000bb
1550@1447068919.556483:xen_platform_log xen platform: XENVBD|PdoSetDevicePnpState:Target[0] : PNP Present to Started
1550@1447068919.556660:xen_platform_log xen platform: XENVBD|PdoDispatchPnp:Target[0] : 08:QUERY_INTERFACE -> c00000bb
1550@1447068919.557682:xen_platform_log xen platform: XENVBD|PdoDispatchPnp:Target[0] : 08:QUERY_INTERFACE -> c00000bb
1550@1447068919.559510:xen_platform_log xen platform: XENVBD|PdoDispatchPnp:Target[0] : 07:QUERY_DEVICE_RELATIONS -> c00000bb
1550@1447068920.294843:xen_platform_log xen platform: XENVBD|FrontendWriteUsage:Target[0] : DUMP NOT_HIBER NOT_PAGE
1550@1447068920.295923:xen_platform_log xen platform: XENBUS|FdoQueryPnpDeviceState: XP0001 XENBUS: not disableable
1550@1447068920.296061:xen_platform_log xen platform: XENBUS|FdoQueryPnpDeviceState: XP0001 XENBUS: not disableable
1550@1447068920.296177:xen_platform_log xen platform: XENBUS|FdoQueryPnpDeviceState: XP0001 XENBUS: not disableable
1550@1447068920.296311:xen_platform_log xen platform: XENVBD|FdoDispatchPnp:14:QUERY_PNP_DEVICE_STATE -> c00000bb
1550@1447068920.333866:xen_platform_log xen platform: XENBUS|RangeSetPop: fail1 (c000009a)
1550@1447068920.333993:xen_platform_log xen platform: GNTTAB: MAP XENMAPSPACE_grant_table[1] @ 00000000.f8002000
1550@1447068920.334101:xen_platform_log xen platform: XENBUS|GnttabExpand: added references [00000200 - 000003ff]
1550@1447068920.456487:xen_platform_log xen platform: XENVIF|DriverEntry: XENVIF 8.2.0 (50) (22.10.2015)
1550@1447068920.456777:xen_platform_log xen platform: XENBUS|PdoQueryInterface: VIF: BUS_INTERFACE (VERSION 1)
1550@1447068920.456930:xen_platform_log xen platform: XENBUS|PdoQueryInterface: VIF: DEBUG_INTERFACE (VERSION 1)
1550@1447068920.457004:xen_platform_log xen platform: XENBUS|PdoQueryInterface: VIF: SUSPEND_INTERFACE (VERSION 1)
1550@1447068920.457083:xen_platform_log xen platform: XENBUS|PdoQueryInterface: VIF: EVTCHN_INTERFACE (VERSION 4)
1550@1447068920.457160:xen_platform_log xen platform: XENBUS|PdoQueryInterface: VIF: STORE_INTERFACE (VERSION 1)
1550@1447068920.457235:xen_platform_log xen platform: XENBUS|PdoQueryInterface: VIF: RANGE_SET_INTERFACE (VERSION 1)
1550@1447068920.457307:xen_platform_log xen platform: XENBUS|PdoQueryInterface: VIF: CACHE_INTERFACE (VERSION 1)
1550@1447068920.457382:xen_platform_log xen platform: XENBUS|PdoQueryInterface: VIF: GNTTAB_INTERFACE (VERSION 1)
1550@1447068920.457459:xen_platform_log xen platform: XENBUS|PdoQueryInterface: VIF: UNPLUG_INTERFACE (VERSION 1)
1550@1447068920.457532:xen_platform_log xen platform: XENVIF|FdoCreate: FFFFE0002DBB84C0 (XP0001 XENVIF)
1550@1447068920.459717:xen_platform_log xen platform: XENIFACE|DriverEntry: 8.2.0.25 (2/11/2015)
1550@1447068920.459925:xen_platform_log xen platform: XENIFACE|ThreadCreate: Create thread FFFFF8015B8F7E3C FFFFE0002DBCA910
1550@1447068920.460049:xen_platform_log xen platform: XENIFACE|ThreadCreate: Create thread FFFFF8015B8F6D78 FFFFE0002DBCA920
1550@1447068920.460202:xen_platform_log xen platform: XENBUS|PdoQueryInterface: IFACE: SUSPEND_INTERFACE (VERSION 1)
1550@1447068920.460308:xen_platform_log xen platform: XENBUS|PdoQueryInterface: IFACE: SHARED_INFO_INTERFACE (VERSION 2)
1550@1447068920.460412:xen_platform_log xen platform: XENBUS|PdoQueryInterface: IFACE: STORE_INTERFACE (VERSION 2)
1550@1447068920.460512:xen_platform_log xen platform: XENBUS|PdoQueryInterface: IFACE: EVTCHN_INTERFACE (VERSION 5)
1550@1447068920.460608:xen_platform_log xen platform: XENBUS|PdoQueryInterface: IFACE: GNTTAB_INTERFACE (VERSION 2)
1550@1447068920.460942:xen_platform_log xen platform: XENIFACE|FdoInitialiseXSRegistryEntries: no such xenstore key
1550@1447068920.461063:xen_platform_log xen platform: XENIFACE|FdoInitialiseXSRegistryEntries: Failed to initialise registry (c0000022)
1550@1447068920.461163:xen_platform_log xen platform: XENIFACE|ThreadCreate: Create thread FFFFF8015B8F792C FFFFE0002DBCACB8
1550@1447068920.461305:xen_platform_log xen platform: XENIFACE|FdoCreate: FFFFE0002DBCAD40 (IFACE)
1550@1447068921.111001:xen_platform_log xen platform: XENVIF|__PdoSetPermanentAddress: 0: 00:16:3e:37:b2:71
1550@1447068921.111221:xen_platform_log xen platform: XENVIF|__PdoSetContainerID: 0 {105ac193-d528-5831-aad1-b818f94686ad}
1550@1447068921.111365:xen_platform_log xen platform: XENVIF|FrontendSetMaxQueues: device/vif/0: 2
1550@1447068921.179280:xen_platform_log xen platform: XENVIF|PdoCreate: FFFFE0002DD73D40 (0)
1550@1447068921.179392:xen_platform_log xen platform: XENVIF|PdoDumpRevisions: 08000002 -> CACHE v1 VIF v2
1550@1447068921.179490:xen_platform_log xen platform: XENVIF|PdoDumpRevisions: 08000003 -> CACHE v1 VIF v3
1550@1447068921.210012:xen_platform_log xen platform: XENNET|DriverEntry: XENNET 8.2.0 (32) (22.10.2015)
1550@1447068921.211204:xen_platform_log xen platform: XENIFACE|WmiRegister: DRV: XenIface WMI Initialisation
1550@1447068921.261933:xen_platform_log xen platform: XENBUS|UnplugRequest: NICS (MAKE)
1550@1447068921.262051:xen_platform_log xen platform: XEN|UnplugIncrementValue: NICS 1
1550@1447068921.262200:xen_platform_log xen platform: XENVIF|PdoSetFriendlyName: Xen PV Network Device #0
1550@1447068921.262559:xen_platform_log xen platform: XENVIF|SettingsRestore: TO Ethernet 2 (Xen PV Network Device #0)
1550@1447068921.263176:xen_platform_log xen platform: XENVIF|SettingsCopyIpAddresses: Version4: ADDRESSES NOT FOUND
1550@1447068921.263276:xen_platform_log xen platform: XENVIF|SettingsCopyIpAddresses: Version6: ADDRESSES NOT FOUND
1550@1447068921.301877:xen_platform_log xen platform: XENVIF|__MacSetPermanentAddress: data/vif/0: 00:16:3E:37:B2:71
1550@1447068921.302906:xen_platform_log xen platform: XENVIF|__MacSetCurrentAddress: data/vif/0: 00:16:3E:37:B2:71
1550@1447068921.303301:xen_platform_log xen platform: XENVIF|FrontendSetNumQueues: device/vif/0: 1

--------------040203080100030609090106
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

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


From win-pv-devel-bounces@lists.xenproject.org Mon Nov 09 13:19:45 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Nov 2015 13:19:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZvmMJ-0007Fe-TI; Mon, 09 Nov 2015 13:19:43 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=748466bc1=Paul.Durrant@citrix.com>)
	id 1ZvmMI-0007FZ-PC
	for win-pv-devel@lists.xenproject.org; Mon, 09 Nov 2015 13:19:42 +0000
Received: from [85.158.137.68] by server-16.bemta-3.messagelabs.com id
	0A/58-03763-E6D90465; Mon, 09 Nov 2015 13:19:42 +0000
X-Env-Sender: prvs=748466bc1=Paul.Durrant@citrix.com
X-Msg-Ref: server-9.tower-31.messagelabs.com!1447075181!1586445!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=1.7 required=7.0 tests=BIZ_TLD,received_headers: 
	No Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 59654 invoked from network); 9 Nov 2015 13:19:41 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-9.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	9 Nov 2015 13:19:41 -0000
X-IronPort-AV: E=Sophos;i="5.20,266,1444694400"; 
   d="scan'208";a="7247313"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Fabio Fantoni <fabio.fantoni@m2r.biz>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Thread-Topic: Windows 10 domU hang on boot after pv drivers install if dom0
	have old kernel (or specific 3.2 problem)
Thread-Index: AQHRGuwidG4ZcTbeE0qn+S2eGWVU1Z6Tq4QA
Date: Mon, 9 Nov 2015 13:19:40 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F665E16@AMSPEX01CL01.citrite.net>
References: <564094BC.30307@m2r.biz>
In-Reply-To: <564094BC.30307@m2r.biz>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] Windows 10 domU hang on boot after pv drivers
 install if dom0 have old kernel (or specific 3.2 problem)
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> Sent: 09 November 2015 12:43
> To: win-pv-devel@lists.xenproject.org
> Cc: Paul Durrant
> Subject: Windows 10 domU hang on boot after pv drivers install if dom0 have
> old kernel (or specific 3.2 problem)
> 
> On testing servers I saw in initial tests that newer dom0 kernel seems
> was needed and I always used kernel >=3.14 after start use new winpv
> drivers.
> Now I'm using 4.1 kernel in test servers but I had occasional problems
> that I now know exactly was the problem, then for now I use it only for
> tests.
> I started to update also few production servers with newer software
> tested and that seems stable, xen 4.6.0, qemu 2.4, spice 0.12.6 and
> seabios 1.8.2.
> I tried to use also new winpv drivers, I installed today latest build on
> clean windows 10 pro 64 bit domU with same/similar cfg of testing server
> with same softwares except dom0 kernel (I have 3.2 wheezy from official
> repo, 3.2.68-1+deb7u5).
> On boot after winpv install (more exactly the second reboot because the
> first is working but still with emulated disk and network as already
> reported time ago) domU's hang at windows boot, full qemu log with trace
> in attachment.
> 
> I know since long time ago that winpv require xen>=4.5.0 and upstream
> qemu>=1.6.1
> Probably also backports of these xen patches are needed if xen<4.6
> (based on critical problems had long time ago):
> - x86/hvm: add per-vcpu evtchn upcalls

There was a bug in XENBUS which would cause a boot-time hang if you were not running a Xen with this patch, but that was fixed by:

commit 021d1f91ff9c1c10fa59e6d4200628b9d0d37eab
Author: Paul Durrant <paul.durrant@citrix.com>
Date:   Thu Jul 2 10:23:26 2015 +0100

    Fix fall-back to two-level EVTCHN ABI

    When the EVTCHN code attempts to acquire the FIFO ABI it may fail to do
    so because the version of Xen may not support it. In this case the code
    was issuing an EventChannelReset() which has the unfortunate side effect of
    killing any toolstack-created channels, such as the xenstored channel.

    This patch moves the existent EvtchnFifoReset function into the base
    evtchn source module (since it's not ABI specific) and uses that function
    as the only mechanism of issuing an EventChannelReset() since it contains
    code to preserve event channel bindings. (Prior to the move it only
    preserved the xenstore channel but this patch adds code to preserve the
    console event channel too, if it exists).

    Signed-off-by: Paul Durrant <paul.durrant@citrix.com>

...which is in the staging-8.1 branch and hence will be in the 8.1 release.

> - x86/hvm: extend HVM cpuid leaf with vcpu id
> 

This is not relied upon so you should be ok without it.

  Paul

> I do not understand for sure if kernel>=N is also needed (for dom0) to
> use winpv drivers or if problem like this are specific to kernel 3.2 (or
> debian patches).
> Someone know anything certain about it?
> 
> 
> If you need more tests/data tell me and I'll post them.
> 
> Thanks for any reply and sorry for my bad english.

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

From win-pv-devel-bounces@lists.xenproject.org Mon Nov 09 13:19:45 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Nov 2015 13:19:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZvmMJ-0007Fe-TI; Mon, 09 Nov 2015 13:19:43 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=748466bc1=Paul.Durrant@citrix.com>)
	id 1ZvmMI-0007FZ-PC
	for win-pv-devel@lists.xenproject.org; Mon, 09 Nov 2015 13:19:42 +0000
Received: from [85.158.137.68] by server-16.bemta-3.messagelabs.com id
	0A/58-03763-E6D90465; Mon, 09 Nov 2015 13:19:42 +0000
X-Env-Sender: prvs=748466bc1=Paul.Durrant@citrix.com
X-Msg-Ref: server-9.tower-31.messagelabs.com!1447075181!1586445!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=1.7 required=7.0 tests=BIZ_TLD,received_headers: 
	No Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 59654 invoked from network); 9 Nov 2015 13:19:41 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-9.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	9 Nov 2015 13:19:41 -0000
X-IronPort-AV: E=Sophos;i="5.20,266,1444694400"; 
   d="scan'208";a="7247313"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Fabio Fantoni <fabio.fantoni@m2r.biz>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Thread-Topic: Windows 10 domU hang on boot after pv drivers install if dom0
	have old kernel (or specific 3.2 problem)
Thread-Index: AQHRGuwidG4ZcTbeE0qn+S2eGWVU1Z6Tq4QA
Date: Mon, 9 Nov 2015 13:19:40 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F665E16@AMSPEX01CL01.citrite.net>
References: <564094BC.30307@m2r.biz>
In-Reply-To: <564094BC.30307@m2r.biz>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] Windows 10 domU hang on boot after pv drivers
 install if dom0 have old kernel (or specific 3.2 problem)
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> Sent: 09 November 2015 12:43
> To: win-pv-devel@lists.xenproject.org
> Cc: Paul Durrant
> Subject: Windows 10 domU hang on boot after pv drivers install if dom0 have
> old kernel (or specific 3.2 problem)
> 
> On testing servers I saw in initial tests that newer dom0 kernel seems
> was needed and I always used kernel >=3.14 after start use new winpv
> drivers.
> Now I'm using 4.1 kernel in test servers but I had occasional problems
> that I now know exactly was the problem, then for now I use it only for
> tests.
> I started to update also few production servers with newer software
> tested and that seems stable, xen 4.6.0, qemu 2.4, spice 0.12.6 and
> seabios 1.8.2.
> I tried to use also new winpv drivers, I installed today latest build on
> clean windows 10 pro 64 bit domU with same/similar cfg of testing server
> with same softwares except dom0 kernel (I have 3.2 wheezy from official
> repo, 3.2.68-1+deb7u5).
> On boot after winpv install (more exactly the second reboot because the
> first is working but still with emulated disk and network as already
> reported time ago) domU's hang at windows boot, full qemu log with trace
> in attachment.
> 
> I know since long time ago that winpv require xen>=4.5.0 and upstream
> qemu>=1.6.1
> Probably also backports of these xen patches are needed if xen<4.6
> (based on critical problems had long time ago):
> - x86/hvm: add per-vcpu evtchn upcalls

There was a bug in XENBUS which would cause a boot-time hang if you were not running a Xen with this patch, but that was fixed by:

commit 021d1f91ff9c1c10fa59e6d4200628b9d0d37eab
Author: Paul Durrant <paul.durrant@citrix.com>
Date:   Thu Jul 2 10:23:26 2015 +0100

    Fix fall-back to two-level EVTCHN ABI

    When the EVTCHN code attempts to acquire the FIFO ABI it may fail to do
    so because the version of Xen may not support it. In this case the code
    was issuing an EventChannelReset() which has the unfortunate side effect of
    killing any toolstack-created channels, such as the xenstored channel.

    This patch moves the existent EvtchnFifoReset function into the base
    evtchn source module (since it's not ABI specific) and uses that function
    as the only mechanism of issuing an EventChannelReset() since it contains
    code to preserve event channel bindings. (Prior to the move it only
    preserved the xenstore channel but this patch adds code to preserve the
    console event channel too, if it exists).

    Signed-off-by: Paul Durrant <paul.durrant@citrix.com>

...which is in the staging-8.1 branch and hence will be in the 8.1 release.

> - x86/hvm: extend HVM cpuid leaf with vcpu id
> 

This is not relied upon so you should be ok without it.

  Paul

> I do not understand for sure if kernel>=N is also needed (for dom0) to
> use winpv drivers or if problem like this are specific to kernel 3.2 (or
> debian patches).
> Someone know anything certain about it?
> 
> 
> If you need more tests/data tell me and I'll post them.
> 
> Thanks for any reply and sorry for my bad english.

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

From win-pv-devel-bounces@lists.xenproject.org Mon Nov 09 13:58:53 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Nov 2015 13:58:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZvmyC-0000cd-Ee; Mon, 09 Nov 2015 13:58:52 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1ZvmyB-0000cY-Js
	for win-pv-devel@lists.xenproject.org; Mon, 09 Nov 2015 13:58:51 +0000
Received: from [85.158.137.68] by server-4.bemta-3.messagelabs.com id
	E6/21-09570-A96A0465; Mon, 09 Nov 2015 13:58:50 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-15.tower-31.messagelabs.com!1447077530!2085087!1
X-Originating-IP: [74.125.82.45]
X-SpamReason: No, hits=1.7 required=7.0 tests=BIZ_TLD
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 8452 invoked from network); 9 Nov 2015 13:58:50 -0000
Received: from mail-wm0-f45.google.com (HELO mail-wm0-f45.google.com)
	(74.125.82.45)
	by server-15.tower-31.messagelabs.com with AES128-GCM-SHA256 encrypted
	SMTP; 9 Nov 2015 13:58:50 -0000
Received: by wmww144 with SMTP id w144so77271988wmw.1
	for <win-pv-devel@lists.xenproject.org>;
	Mon, 09 Nov 2015 05:58:50 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=m2r_biz.20150623.gappssmtp.com; s=20150623;
	h=subject:to:references:from:message-id:date:user-agent:mime-version
	:in-reply-to:content-type:content-transfer-encoding;
	bh=DOO5AENWGw+MvveBBboyL1l9Y5TKdIX7TmOF+zJDZH4=;
	b=uKTxo6zPOp6DRqvkPDIyqFIWR1j354UkHzIT/p4wnbseQN/9Tb0JJlVxcoZ+3v4OwW
	+WaO+1lmii15IInGe9af1nNqZOr+X0c59YSLyF1Agy5gbewAtoYjn1PHl60yI2vaJGI+
	sYOG3o+IDzR8/UE3stbl+6nFET+DpGBj2DjJQ0PIt9YN+3GLDDiTZKhfmoKu3cEtjmTe
	FalvjXfWHLsCft8TDBijaDcwDHBPAM8m8dfZ9GgR45CoXzZEVzSsOhhGx06VjhC6Gxpe
	2lwSM9CL0VxO5rIuAFORqEpMuqO1VyG2rJLzAeyXubwaTP77Y9NItf4+H7o405g/ARRY
	3xsQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:subject:to:references:from:message-id:date
	:user-agent:mime-version:in-reply-to:content-type
	:content-transfer-encoding;
	bh=DOO5AENWGw+MvveBBboyL1l9Y5TKdIX7TmOF+zJDZH4=;
	b=MdUywqEnkIupPbTqgocBcSOrYiVqiqe/2r359d95VtIN0ihXANplx9YTHxucmRE/z0
	ZMoWJXd3KA24pff49T2+FESkRvtioCNzRZeEM8QsY3j4ak5MYrmoOnMp6qecuBMA92EB
	R7Ob9sxP0ErvHb+rbTCcsudEhR/2ZXZ4C/aumoGfNmtHodDUwp7qcrURegDo4GTx6Zm1
	ntNee7BXR90+1EShKogtRxs91IFu0hsSrim7+YbryiBE3K5YtvOBR9BdDBDGjbNfAijw
	xukliwaabt3UtrOCILrpCX6zi5Sc2ljblllmizHh4kEgeE0SZD1i3CqoSGN+NKpAgS/n
	hN+A==
X-Gm-Message-State: ALoCoQkKNtZRpdABsX5tjycj+q99EY304UztGp/QbJO1FTa+cjyYU99/MUMqO7X9FHNJcwIDf9Ab
X-Received: by 10.28.226.86 with SMTP id z83mr4827779wmg.77.1447077529885;
	Mon, 09 Nov 2015 05:58:49 -0800 (PST)
Received: from [192.168.1.37] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by smtp.googlemail.com with ESMTPSA id
	p75sm14455278wmd.22.2015.11.09.05.58.48
	(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Mon, 09 Nov 2015 05:58:49 -0800 (PST)
To: Paul Durrant <Paul.Durrant@citrix.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <564094BC.30307@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F665E16@AMSPEX01CL01.citrite.net>
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
Message-ID: <5640A697.6010107@m2r.biz>
Date: Mon, 9 Nov 2015 14:58:47 +0100
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.3.0
MIME-Version: 1.0
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F665E16@AMSPEX01CL01.citrite.net>
Subject: Re: [win-pv-devel] Windows 10 domU hang on boot after pv drivers
 install if dom0 have old kernel (or specific 3.2 problem)
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

Il 09/11/2015 14:19, Paul Durrant ha scritto:
>> -----Original Message-----
>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>> Sent: 09 November 2015 12:43
>> To: win-pv-devel@lists.xenproject.org
>> Cc: Paul Durrant
>> Subject: Windows 10 domU hang on boot after pv drivers install if dom0 have
>> old kernel (or specific 3.2 problem)
>>
>> On testing servers I saw in initial tests that newer dom0 kernel seems
>> was needed and I always used kernel >=3.14 after start use new winpv
>> drivers.
>> Now I'm using 4.1 kernel in test servers but I had occasional problems
>> that I now know exactly was the problem, then for now I use it only for
>> tests.
>> I started to update also few production servers with newer software
>> tested and that seems stable, xen 4.6.0, qemu 2.4, spice 0.12.6 and
>> seabios 1.8.2.
>> I tried to use also new winpv drivers, I installed today latest build on
>> clean windows 10 pro 64 bit domU with same/similar cfg of testing server
>> with same softwares except dom0 kernel (I have 3.2 wheezy from official
>> repo, 3.2.68-1+deb7u5).
>> On boot after winpv install (more exactly the second reboot because the
>> first is working but still with emulated disk and network as already
>> reported time ago) domU's hang at windows boot, full qemu log with trace
>> in attachment.
>>
>> I know since long time ago that winpv require xen>=4.5.0 and upstream
>> qemu>=1.6.1
>> Probably also backports of these xen patches are needed if xen<4.6
>> (based on critical problems had long time ago):
>> - x86/hvm: add per-vcpu evtchn upcalls
> There was a bug in XENBUS which would cause a boot-time hang if you were not running a Xen with this patch, but that was fixed by:
>
> commit 021d1f91ff9c1c10fa59e6d4200628b9d0d37eab
> Author: Paul Durrant <paul.durrant@citrix.com>
> Date:   Thu Jul 2 10:23:26 2015 +0100
>
>      Fix fall-back to two-level EVTCHN ABI
>
>      When the EVTCHN code attempts to acquire the FIFO ABI it may fail to do
>      so because the version of Xen may not support it. In this case the code
>      was issuing an EventChannelReset() which has the unfortunate side effect of
>      killing any toolstack-created channels, such as the xenstored channel.
>
>      This patch moves the existent EvtchnFifoReset function into the base
>      evtchn source module (since it's not ABI specific) and uses that function
>      as the only mechanism of issuing an EventChannelReset() since it contains
>      code to preserve event channel bindings. (Prior to the move it only
>      preserved the xenstore channel but this patch adds code to preserve the
>      console event channel too, if it exists).
>
>      Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
>
> ...which is in the staging-8.1 branch and hence will be in the 8.1 release.
>
>> - x86/hvm: extend HVM cpuid leaf with vcpu id
>>
> This is not relied upon so you should be ok without it.
>
>    Paul

Thanks for your reply.
Based on your reply with recent winpv builds don't require backport of 
these xen patches but only require xen>=4.5.0 and upstream qemu>=1.6.1.

About the problem reported in this mail that seems related to the kernel 
(the only different thing comparing with test server), what can you tell 
me about?

Thanks for any reply and sorry for my bad english.

>
>> I do not understand for sure if kernel>=N is also needed (for dom0) to
>> use winpv drivers or if problem like this are specific to kernel 3.2 (or
>> debian patches).
>> Someone know anything certain about it?
>>
>>
>> If you need more tests/data tell me and I'll post them.


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

From win-pv-devel-bounces@lists.xenproject.org Mon Nov 09 13:58:53 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Nov 2015 13:58:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZvmyC-0000cd-Ee; Mon, 09 Nov 2015 13:58:52 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1ZvmyB-0000cY-Js
	for win-pv-devel@lists.xenproject.org; Mon, 09 Nov 2015 13:58:51 +0000
Received: from [85.158.137.68] by server-4.bemta-3.messagelabs.com id
	E6/21-09570-A96A0465; Mon, 09 Nov 2015 13:58:50 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-15.tower-31.messagelabs.com!1447077530!2085087!1
X-Originating-IP: [74.125.82.45]
X-SpamReason: No, hits=1.7 required=7.0 tests=BIZ_TLD
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 8452 invoked from network); 9 Nov 2015 13:58:50 -0000
Received: from mail-wm0-f45.google.com (HELO mail-wm0-f45.google.com)
	(74.125.82.45)
	by server-15.tower-31.messagelabs.com with AES128-GCM-SHA256 encrypted
	SMTP; 9 Nov 2015 13:58:50 -0000
Received: by wmww144 with SMTP id w144so77271988wmw.1
	for <win-pv-devel@lists.xenproject.org>;
	Mon, 09 Nov 2015 05:58:50 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=m2r_biz.20150623.gappssmtp.com; s=20150623;
	h=subject:to:references:from:message-id:date:user-agent:mime-version
	:in-reply-to:content-type:content-transfer-encoding;
	bh=DOO5AENWGw+MvveBBboyL1l9Y5TKdIX7TmOF+zJDZH4=;
	b=uKTxo6zPOp6DRqvkPDIyqFIWR1j354UkHzIT/p4wnbseQN/9Tb0JJlVxcoZ+3v4OwW
	+WaO+1lmii15IInGe9af1nNqZOr+X0c59YSLyF1Agy5gbewAtoYjn1PHl60yI2vaJGI+
	sYOG3o+IDzR8/UE3stbl+6nFET+DpGBj2DjJQ0PIt9YN+3GLDDiTZKhfmoKu3cEtjmTe
	FalvjXfWHLsCft8TDBijaDcwDHBPAM8m8dfZ9GgR45CoXzZEVzSsOhhGx06VjhC6Gxpe
	2lwSM9CL0VxO5rIuAFORqEpMuqO1VyG2rJLzAeyXubwaTP77Y9NItf4+H7o405g/ARRY
	3xsQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:subject:to:references:from:message-id:date
	:user-agent:mime-version:in-reply-to:content-type
	:content-transfer-encoding;
	bh=DOO5AENWGw+MvveBBboyL1l9Y5TKdIX7TmOF+zJDZH4=;
	b=MdUywqEnkIupPbTqgocBcSOrYiVqiqe/2r359d95VtIN0ihXANplx9YTHxucmRE/z0
	ZMoWJXd3KA24pff49T2+FESkRvtioCNzRZeEM8QsY3j4ak5MYrmoOnMp6qecuBMA92EB
	R7Ob9sxP0ErvHb+rbTCcsudEhR/2ZXZ4C/aumoGfNmtHodDUwp7qcrURegDo4GTx6Zm1
	ntNee7BXR90+1EShKogtRxs91IFu0hsSrim7+YbryiBE3K5YtvOBR9BdDBDGjbNfAijw
	xukliwaabt3UtrOCILrpCX6zi5Sc2ljblllmizHh4kEgeE0SZD1i3CqoSGN+NKpAgS/n
	hN+A==
X-Gm-Message-State: ALoCoQkKNtZRpdABsX5tjycj+q99EY304UztGp/QbJO1FTa+cjyYU99/MUMqO7X9FHNJcwIDf9Ab
X-Received: by 10.28.226.86 with SMTP id z83mr4827779wmg.77.1447077529885;
	Mon, 09 Nov 2015 05:58:49 -0800 (PST)
Received: from [192.168.1.37] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by smtp.googlemail.com with ESMTPSA id
	p75sm14455278wmd.22.2015.11.09.05.58.48
	(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Mon, 09 Nov 2015 05:58:49 -0800 (PST)
To: Paul Durrant <Paul.Durrant@citrix.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <564094BC.30307@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F665E16@AMSPEX01CL01.citrite.net>
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
Message-ID: <5640A697.6010107@m2r.biz>
Date: Mon, 9 Nov 2015 14:58:47 +0100
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.3.0
MIME-Version: 1.0
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F665E16@AMSPEX01CL01.citrite.net>
Subject: Re: [win-pv-devel] Windows 10 domU hang on boot after pv drivers
 install if dom0 have old kernel (or specific 3.2 problem)
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

Il 09/11/2015 14:19, Paul Durrant ha scritto:
>> -----Original Message-----
>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>> Sent: 09 November 2015 12:43
>> To: win-pv-devel@lists.xenproject.org
>> Cc: Paul Durrant
>> Subject: Windows 10 domU hang on boot after pv drivers install if dom0 have
>> old kernel (or specific 3.2 problem)
>>
>> On testing servers I saw in initial tests that newer dom0 kernel seems
>> was needed and I always used kernel >=3.14 after start use new winpv
>> drivers.
>> Now I'm using 4.1 kernel in test servers but I had occasional problems
>> that I now know exactly was the problem, then for now I use it only for
>> tests.
>> I started to update also few production servers with newer software
>> tested and that seems stable, xen 4.6.0, qemu 2.4, spice 0.12.6 and
>> seabios 1.8.2.
>> I tried to use also new winpv drivers, I installed today latest build on
>> clean windows 10 pro 64 bit domU with same/similar cfg of testing server
>> with same softwares except dom0 kernel (I have 3.2 wheezy from official
>> repo, 3.2.68-1+deb7u5).
>> On boot after winpv install (more exactly the second reboot because the
>> first is working but still with emulated disk and network as already
>> reported time ago) domU's hang at windows boot, full qemu log with trace
>> in attachment.
>>
>> I know since long time ago that winpv require xen>=4.5.0 and upstream
>> qemu>=1.6.1
>> Probably also backports of these xen patches are needed if xen<4.6
>> (based on critical problems had long time ago):
>> - x86/hvm: add per-vcpu evtchn upcalls
> There was a bug in XENBUS which would cause a boot-time hang if you were not running a Xen with this patch, but that was fixed by:
>
> commit 021d1f91ff9c1c10fa59e6d4200628b9d0d37eab
> Author: Paul Durrant <paul.durrant@citrix.com>
> Date:   Thu Jul 2 10:23:26 2015 +0100
>
>      Fix fall-back to two-level EVTCHN ABI
>
>      When the EVTCHN code attempts to acquire the FIFO ABI it may fail to do
>      so because the version of Xen may not support it. In this case the code
>      was issuing an EventChannelReset() which has the unfortunate side effect of
>      killing any toolstack-created channels, such as the xenstored channel.
>
>      This patch moves the existent EvtchnFifoReset function into the base
>      evtchn source module (since it's not ABI specific) and uses that function
>      as the only mechanism of issuing an EventChannelReset() since it contains
>      code to preserve event channel bindings. (Prior to the move it only
>      preserved the xenstore channel but this patch adds code to preserve the
>      console event channel too, if it exists).
>
>      Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
>
> ...which is in the staging-8.1 branch and hence will be in the 8.1 release.
>
>> - x86/hvm: extend HVM cpuid leaf with vcpu id
>>
> This is not relied upon so you should be ok without it.
>
>    Paul

Thanks for your reply.
Based on your reply with recent winpv builds don't require backport of 
these xen patches but only require xen>=4.5.0 and upstream qemu>=1.6.1.

About the problem reported in this mail that seems related to the kernel 
(the only different thing comparing with test server), what can you tell 
me about?

Thanks for any reply and sorry for my bad english.

>
>> I do not understand for sure if kernel>=N is also needed (for dom0) to
>> use winpv drivers or if problem like this are specific to kernel 3.2 (or
>> debian patches).
>> Someone know anything certain about it?
>>
>>
>> If you need more tests/data tell me and I'll post them.


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

From win-pv-devel-bounces@lists.xenproject.org Mon Nov 09 14:43:04 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Nov 2015 14:43:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1Zvnex-00044j-6s; Mon, 09 Nov 2015 14:43:03 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=748466bc1=Paul.Durrant@citrix.com>)
	id 1Zvnew-00044b-0u
	for win-pv-devel@lists.xenproject.org; Mon, 09 Nov 2015 14:43:02 +0000
Received: from [85.158.139.211] by server-12.bemta-5.messagelabs.com id
	AA/85-12831-5F0B0465; Mon, 09 Nov 2015 14:43:01 +0000
X-Env-Sender: prvs=748466bc1=Paul.Durrant@citrix.com
X-Msg-Ref: server-15.tower-206.messagelabs.com!1447080180!2135968!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 61084 invoked from network); 9 Nov 2015 14:43:00 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-15.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	9 Nov 2015 14:43:00 -0000
X-IronPort-AV: E=Sophos;i="5.20,266,1444694400"; 
   d="scan'208";a="7255600"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Fabio Fantoni <fabio.fantoni@m2r.biz>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Thread-Topic: Windows 10 domU hang on boot after pv drivers install if dom0
	have old kernel (or specific 3.2 problem)
Thread-Index: AQHRGuwidG4ZcTbeE0qn+S2eGWVU1Z6Tq4QA///7YYCAABtyQA==
Date: Mon, 9 Nov 2015 14:42:59 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F665F89@AMSPEX01CL01.citrite.net>
References: <564094BC.30307@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F665E16@AMSPEX01CL01.citrite.net>
	<5640A697.6010107@m2r.biz>
In-Reply-To: <5640A697.6010107@m2r.biz>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] Windows 10 domU hang on boot after pv drivers
 install if dom0 have old kernel (or specific 3.2 problem)
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
[snip]
> >> I know since long time ago that winpv require xen>=4.5.0 and upstream
> >> qemu>=1.6.1
> >> Probably also backports of these xen patches are needed if xen<4.6
> >> (based on critical problems had long time ago):
> >> - x86/hvm: add per-vcpu evtchn upcalls
> > There was a bug in XENBUS which would cause a boot-time hang if you
> were not running a Xen with this patch, but that was fixed by:
> >
> > commit 021d1f91ff9c1c10fa59e6d4200628b9d0d37eab
> > Author: Paul Durrant <paul.durrant@citrix.com>
> > Date:   Thu Jul 2 10:23:26 2015 +0100
> >
> >      Fix fall-back to two-level EVTCHN ABI
> >
> >      When the EVTCHN code attempts to acquire the FIFO ABI it may fail to
> do
> >      so because the version of Xen may not support it. In this case the code
> >      was issuing an EventChannelReset() which has the unfortunate side
> effect of
> >      killing any toolstack-created channels, such as the xenstored channel.
> >
> >      This patch moves the existent EvtchnFifoReset function into the base
> >      evtchn source module (since it's not ABI specific) and uses that function
> >      as the only mechanism of issuing an EventChannelReset() since it
> contains
> >      code to preserve event channel bindings. (Prior to the move it only
> >      preserved the xenstore channel but this patch adds code to preserve
> the
> >      console event channel too, if it exists).
> >
> >      Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
> >
> > ...which is in the staging-8.1 branch and hence will be in the 8.1 release.
> >
> >> - x86/hvm: extend HVM cpuid leaf with vcpu id
> >>
> > This is not relied upon so you should be ok without it.
> >
> >    Paul
> 
> Thanks for your reply.
> Based on your reply with recent winpv builds don't require backport of
> these xen patches but only require xen>=4.5.0 and upstream qemu>=1.6.1.
> 
> About the problem reported in this mail that seems related to the kernel
> (the only different thing comparing with test server), what can you tell
> me about?
> 

The other thing that comes to mind is this fix in xen-netback:

commit 279f438e36c0a70b23b86d2090aeec50155034a9
Author: Paul Durrant <Paul.Durrant@citrix.com>
Date:   Tue Sep 17 17:46:08 2013 +0100

    xen-netback: Don't destroy the netdev until the vif is shut down

    Without this patch, if a frontend cycles through states Closing
    and Closed (which Windows frontends need to do) then the netdev
    will be destroyed and requires re-invocation of hotplug scripts
    to restore state before the frontend can move to Connected. Thus
    when udev is not in use the backend gets stuck in InitWait.

    With this patch, the netdev is left alone whilst the backend is
    still online and is only de-registered and freed just prior to
    destroying the vif (which is also nicely symmetrical with the
    netdev allocation and registration being done during probe) so
    no re-invocation of hotplug scripts is required.

    Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
    Cc: David Vrabel <david.vrabel@citrix.com>
    Cc: Wei Liu <wei.liu2@citrix.com>
    Cc: Ian Campbell <ian.campbell@citrix.com>
    Acked-by: Wei Liu <wei.liu2@citrix.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>

As you can see, it's pretty old, but wheezy is older.

  Paul

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

From win-pv-devel-bounces@lists.xenproject.org Mon Nov 09 14:43:04 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Nov 2015 14:43:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1Zvnex-00044j-6s; Mon, 09 Nov 2015 14:43:03 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=748466bc1=Paul.Durrant@citrix.com>)
	id 1Zvnew-00044b-0u
	for win-pv-devel@lists.xenproject.org; Mon, 09 Nov 2015 14:43:02 +0000
Received: from [85.158.139.211] by server-12.bemta-5.messagelabs.com id
	AA/85-12831-5F0B0465; Mon, 09 Nov 2015 14:43:01 +0000
X-Env-Sender: prvs=748466bc1=Paul.Durrant@citrix.com
X-Msg-Ref: server-15.tower-206.messagelabs.com!1447080180!2135968!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 61084 invoked from network); 9 Nov 2015 14:43:00 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-15.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	9 Nov 2015 14:43:00 -0000
X-IronPort-AV: E=Sophos;i="5.20,266,1444694400"; 
   d="scan'208";a="7255600"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Fabio Fantoni <fabio.fantoni@m2r.biz>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Thread-Topic: Windows 10 domU hang on boot after pv drivers install if dom0
	have old kernel (or specific 3.2 problem)
Thread-Index: AQHRGuwidG4ZcTbeE0qn+S2eGWVU1Z6Tq4QA///7YYCAABtyQA==
Date: Mon, 9 Nov 2015 14:42:59 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F665F89@AMSPEX01CL01.citrite.net>
References: <564094BC.30307@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F665E16@AMSPEX01CL01.citrite.net>
	<5640A697.6010107@m2r.biz>
In-Reply-To: <5640A697.6010107@m2r.biz>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] Windows 10 domU hang on boot after pv drivers
 install if dom0 have old kernel (or specific 3.2 problem)
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
[snip]
> >> I know since long time ago that winpv require xen>=4.5.0 and upstream
> >> qemu>=1.6.1
> >> Probably also backports of these xen patches are needed if xen<4.6
> >> (based on critical problems had long time ago):
> >> - x86/hvm: add per-vcpu evtchn upcalls
> > There was a bug in XENBUS which would cause a boot-time hang if you
> were not running a Xen with this patch, but that was fixed by:
> >
> > commit 021d1f91ff9c1c10fa59e6d4200628b9d0d37eab
> > Author: Paul Durrant <paul.durrant@citrix.com>
> > Date:   Thu Jul 2 10:23:26 2015 +0100
> >
> >      Fix fall-back to two-level EVTCHN ABI
> >
> >      When the EVTCHN code attempts to acquire the FIFO ABI it may fail to
> do
> >      so because the version of Xen may not support it. In this case the code
> >      was issuing an EventChannelReset() which has the unfortunate side
> effect of
> >      killing any toolstack-created channels, such as the xenstored channel.
> >
> >      This patch moves the existent EvtchnFifoReset function into the base
> >      evtchn source module (since it's not ABI specific) and uses that function
> >      as the only mechanism of issuing an EventChannelReset() since it
> contains
> >      code to preserve event channel bindings. (Prior to the move it only
> >      preserved the xenstore channel but this patch adds code to preserve
> the
> >      console event channel too, if it exists).
> >
> >      Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
> >
> > ...which is in the staging-8.1 branch and hence will be in the 8.1 release.
> >
> >> - x86/hvm: extend HVM cpuid leaf with vcpu id
> >>
> > This is not relied upon so you should be ok without it.
> >
> >    Paul
> 
> Thanks for your reply.
> Based on your reply with recent winpv builds don't require backport of
> these xen patches but only require xen>=4.5.0 and upstream qemu>=1.6.1.
> 
> About the problem reported in this mail that seems related to the kernel
> (the only different thing comparing with test server), what can you tell
> me about?
> 

The other thing that comes to mind is this fix in xen-netback:

commit 279f438e36c0a70b23b86d2090aeec50155034a9
Author: Paul Durrant <Paul.Durrant@citrix.com>
Date:   Tue Sep 17 17:46:08 2013 +0100

    xen-netback: Don't destroy the netdev until the vif is shut down

    Without this patch, if a frontend cycles through states Closing
    and Closed (which Windows frontends need to do) then the netdev
    will be destroyed and requires re-invocation of hotplug scripts
    to restore state before the frontend can move to Connected. Thus
    when udev is not in use the backend gets stuck in InitWait.

    With this patch, the netdev is left alone whilst the backend is
    still online and is only de-registered and freed just prior to
    destroying the vif (which is also nicely symmetrical with the
    netdev allocation and registration being done during probe) so
    no re-invocation of hotplug scripts is required.

    Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
    Cc: David Vrabel <david.vrabel@citrix.com>
    Cc: Wei Liu <wei.liu2@citrix.com>
    Cc: Ian Campbell <ian.campbell@citrix.com>
    Acked-by: Wei Liu <wei.liu2@citrix.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>

As you can see, it's pretty old, but wheezy is older.

  Paul

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

From win-pv-devel-bounces@lists.xenproject.org Mon Nov 09 15:15:31 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Nov 2015 15:15:31 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZvoAM-0006Xg-0C; Mon, 09 Nov 2015 15:15:30 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1ZvoAK-0006XW-Kb
	for win-pv-devel@lists.xenproject.org; Mon, 09 Nov 2015 15:15:28 +0000
Received: from [85.158.137.68] by server-3.bemta-3.messagelabs.com id
	DA/26-01753-F88B0465; Mon, 09 Nov 2015 15:15:27 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-7.tower-31.messagelabs.com!1447082126!2230024!1
X-Originating-IP: [74.125.82.49]
X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 20588 invoked from network); 9 Nov 2015 15:15:27 -0000
Received: from mail-wm0-f49.google.com (HELO mail-wm0-f49.google.com)
	(74.125.82.49)
	by server-7.tower-31.messagelabs.com with AES128-GCM-SHA256 encrypted
	SMTP; 9 Nov 2015 15:15:27 -0000
Received: by wmnn186 with SMTP id n186so109375116wmn.1
	for <win-pv-devel@lists.xenproject.org>;
	Mon, 09 Nov 2015 07:15:26 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=m2r_biz.20150623.gappssmtp.com; s=20150623;
	h=subject:to:references:from:message-id:date:user-agent:mime-version
	:in-reply-to:content-type:content-transfer-encoding;
	bh=iZa2PWq04Yu04dfph1eOjEwTzd/iOqrw0Se3x3rI9Xs=;
	b=ZH8swrACmL81LXYPhdBwBMNIBEQBM5hT5ImMSDvlfghEPaXDhOIXEi5EYMUUjazvO2
	opayXqdU+lLcHjeanKmrN0HX9mitQq1rGEgFD0R3Q6ECxKJL+wN1aCKq5yU1UczAu4g9
	EVzokk9k+YdpqQgAGL15VanycB9YUsb4M1jQgPjwqcJLxAfaD5DlR0Car9ihvDX4iQkd
	dgHUs/GbN8Y3o/Ma7yRxDfjQHCIkHTfu8SikWzqgWnncTSbiz8Lii6kprEHL8RX6jsnz
	hDWekMu0PQP2mCSrf/9qc03UIGp4b16dhp/MnknucU78i//zPYXtmDIH8BCTGvfFmPPl
	mOeQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:subject:to:references:from:message-id:date
	:user-agent:mime-version:in-reply-to:content-type
	:content-transfer-encoding;
	bh=iZa2PWq04Yu04dfph1eOjEwTzd/iOqrw0Se3x3rI9Xs=;
	b=dZDtrseLD9v5l+/kYExesW4KLazVmZ848rDbXlcMfNUgTGel3hOtYJovLvVELdEqvi
	3IkmvevxsZezYcW6uUaj8KGAvUfAo0aocrNQxYqXo9s63QADF1XQM0wRbQs8NVXVgs08
	dEfD44v01YrAaU+99Rs5dkQVsPrHw3hF3BfzBjJ1WB5QvuVbX9uF/I6wi/hdNt5qsXHv
	2h2vAh1D3DAWy5dH80PF2CIsWxWK/4gseFYIRWjH+gygpzYbSWOG/ve/WbfmVElEZlyw
	PONE7NaQSwB6jl6ndx8j6xdZXybLvYa1L2rQQ99g48mwjDfpsP6BPTAdp7VguL482dcI
	5+Pg==
X-Gm-Message-State: ALoCoQkPxZUNwuGhyc5s8wIrujSfSOy8OaAWqzSen/eq9gJQIiq9Yz4l7RsDeyu7vFPZKoJ48tBQ
X-Received: by 10.28.14.140 with SMTP id 134mr25066709wmo.44.1447082126697;
	Mon, 09 Nov 2015 07:15:26 -0800 (PST)
Received: from [192.168.1.37] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by smtp.googlemail.com with ESMTPSA id
	wx10sm15896870wjb.40.2015.11.09.07.15.25
	(version=TLSv1/SSLv3 cipher=OTHER);
	Mon, 09 Nov 2015 07:15:25 -0800 (PST)
To: Paul Durrant <Paul.Durrant@citrix.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <564094BC.30307@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F665E16@AMSPEX01CL01.citrite.net>
	<5640A697.6010107@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F665F89@AMSPEX01CL01.citrite.net>
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
Message-ID: <5640B88B.4060105@m2r.biz>
Date: Mon, 9 Nov 2015 16:15:23 +0100
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.3.0
MIME-Version: 1.0
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F665F89@AMSPEX01CL01.citrite.net>
Subject: Re: [win-pv-devel] Windows 10 domU hang on boot after pv drivers
 install if dom0 have old kernel (or specific 3.2 problem)
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

Il 09/11/2015 15:42, Paul Durrant ha scritto:
>> -----Original Message-----
> [snip]
>>>> I know since long time ago that winpv require xen>=4.5.0 and upstream
>>>> qemu>=1.6.1
>>>> Probably also backports of these xen patches are needed if xen<4.6
>>>> (based on critical problems had long time ago):
>>>> - x86/hvm: add per-vcpu evtchn upcalls
>>> There was a bug in XENBUS which would cause a boot-time hang if you
>> were not running a Xen with this patch, but that was fixed by:
>>> commit 021d1f91ff9c1c10fa59e6d4200628b9d0d37eab
>>> Author: Paul Durrant <paul.durrant@citrix.com>
>>> Date:   Thu Jul 2 10:23:26 2015 +0100
>>>
>>>       Fix fall-back to two-level EVTCHN ABI
>>>
>>>       When the EVTCHN code attempts to acquire the FIFO ABI it may fail to
>> do
>>>       so because the version of Xen may not support it. In this case the code
>>>       was issuing an EventChannelReset() which has the unfortunate side
>> effect of
>>>       killing any toolstack-created channels, such as the xenstored channel.
>>>
>>>       This patch moves the existent EvtchnFifoReset function into the base
>>>       evtchn source module (since it's not ABI specific) and uses that function
>>>       as the only mechanism of issuing an EventChannelReset() since it
>> contains
>>>       code to preserve event channel bindings. (Prior to the move it only
>>>       preserved the xenstore channel but this patch adds code to preserve
>> the
>>>       console event channel too, if it exists).
>>>
>>>       Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
>>>
>>> ...which is in the staging-8.1 branch and hence will be in the 8.1 release.
>>>
>>>> - x86/hvm: extend HVM cpuid leaf with vcpu id
>>>>
>>> This is not relied upon so you should be ok without it.
>>>
>>>     Paul
>> Thanks for your reply.
>> Based on your reply with recent winpv builds don't require backport of
>> these xen patches but only require xen>=4.5.0 and upstream qemu>=1.6.1.
>>
>> About the problem reported in this mail that seems related to the kernel
>> (the only different thing comparing with test server), what can you tell
>> me about?
>>
> The other thing that comes to mind is this fix in xen-netback:
>
> commit 279f438e36c0a70b23b86d2090aeec50155034a9
> Author: Paul Durrant <Paul.Durrant@citrix.com>
> Date:   Tue Sep 17 17:46:08 2013 +0100
>
>      xen-netback: Don't destroy the netdev until the vif is shut down
>
>      Without this patch, if a frontend cycles through states Closing
>      and Closed (which Windows frontends need to do) then the netdev
>      will be destroyed and requires re-invocation of hotplug scripts
>      to restore state before the frontend can move to Connected. Thus
>      when udev is not in use the backend gets stuck in InitWait.
>
>      With this patch, the netdev is left alone whilst the backend is
>      still online and is only de-registered and freed just prior to
>      destroying the vif (which is also nicely symmetrical with the
>      netdev allocation and registration being done during probe) so
>      no re-invocation of hotplug scripts is required.
>
>      Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
>      Cc: David Vrabel <david.vrabel@citrix.com>
>      Cc: Wei Liu <wei.liu2@citrix.com>
>      Cc: Ian Campbell <ian.campbell@citrix.com>
>      Acked-by: Wei Liu <wei.liu2@citrix.com>
>      Signed-off-by: David S. Miller <davem@davemloft.net>
>
> As you can see, it's pretty old, but wheezy is older.
>
>    Paul

Big thanks for the reply.
This patch is missed in 3.2 upstream and also in debian patches.
I'll try rebuild with it ASAP for see if it solve the problem and 
backport request is needed (as 3.2 is an LTS)

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

From win-pv-devel-bounces@lists.xenproject.org Mon Nov 09 15:15:31 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Nov 2015 15:15:31 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZvoAM-0006Xg-0C; Mon, 09 Nov 2015 15:15:30 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1ZvoAK-0006XW-Kb
	for win-pv-devel@lists.xenproject.org; Mon, 09 Nov 2015 15:15:28 +0000
Received: from [85.158.137.68] by server-3.bemta-3.messagelabs.com id
	DA/26-01753-F88B0465; Mon, 09 Nov 2015 15:15:27 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-7.tower-31.messagelabs.com!1447082126!2230024!1
X-Originating-IP: [74.125.82.49]
X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 20588 invoked from network); 9 Nov 2015 15:15:27 -0000
Received: from mail-wm0-f49.google.com (HELO mail-wm0-f49.google.com)
	(74.125.82.49)
	by server-7.tower-31.messagelabs.com with AES128-GCM-SHA256 encrypted
	SMTP; 9 Nov 2015 15:15:27 -0000
Received: by wmnn186 with SMTP id n186so109375116wmn.1
	for <win-pv-devel@lists.xenproject.org>;
	Mon, 09 Nov 2015 07:15:26 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=m2r_biz.20150623.gappssmtp.com; s=20150623;
	h=subject:to:references:from:message-id:date:user-agent:mime-version
	:in-reply-to:content-type:content-transfer-encoding;
	bh=iZa2PWq04Yu04dfph1eOjEwTzd/iOqrw0Se3x3rI9Xs=;
	b=ZH8swrACmL81LXYPhdBwBMNIBEQBM5hT5ImMSDvlfghEPaXDhOIXEi5EYMUUjazvO2
	opayXqdU+lLcHjeanKmrN0HX9mitQq1rGEgFD0R3Q6ECxKJL+wN1aCKq5yU1UczAu4g9
	EVzokk9k+YdpqQgAGL15VanycB9YUsb4M1jQgPjwqcJLxAfaD5DlR0Car9ihvDX4iQkd
	dgHUs/GbN8Y3o/Ma7yRxDfjQHCIkHTfu8SikWzqgWnncTSbiz8Lii6kprEHL8RX6jsnz
	hDWekMu0PQP2mCSrf/9qc03UIGp4b16dhp/MnknucU78i//zPYXtmDIH8BCTGvfFmPPl
	mOeQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:subject:to:references:from:message-id:date
	:user-agent:mime-version:in-reply-to:content-type
	:content-transfer-encoding;
	bh=iZa2PWq04Yu04dfph1eOjEwTzd/iOqrw0Se3x3rI9Xs=;
	b=dZDtrseLD9v5l+/kYExesW4KLazVmZ848rDbXlcMfNUgTGel3hOtYJovLvVELdEqvi
	3IkmvevxsZezYcW6uUaj8KGAvUfAo0aocrNQxYqXo9s63QADF1XQM0wRbQs8NVXVgs08
	dEfD44v01YrAaU+99Rs5dkQVsPrHw3hF3BfzBjJ1WB5QvuVbX9uF/I6wi/hdNt5qsXHv
	2h2vAh1D3DAWy5dH80PF2CIsWxWK/4gseFYIRWjH+gygpzYbSWOG/ve/WbfmVElEZlyw
	PONE7NaQSwB6jl6ndx8j6xdZXybLvYa1L2rQQ99g48mwjDfpsP6BPTAdp7VguL482dcI
	5+Pg==
X-Gm-Message-State: ALoCoQkPxZUNwuGhyc5s8wIrujSfSOy8OaAWqzSen/eq9gJQIiq9Yz4l7RsDeyu7vFPZKoJ48tBQ
X-Received: by 10.28.14.140 with SMTP id 134mr25066709wmo.44.1447082126697;
	Mon, 09 Nov 2015 07:15:26 -0800 (PST)
Received: from [192.168.1.37] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by smtp.googlemail.com with ESMTPSA id
	wx10sm15896870wjb.40.2015.11.09.07.15.25
	(version=TLSv1/SSLv3 cipher=OTHER);
	Mon, 09 Nov 2015 07:15:25 -0800 (PST)
To: Paul Durrant <Paul.Durrant@citrix.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <564094BC.30307@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F665E16@AMSPEX01CL01.citrite.net>
	<5640A697.6010107@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F665F89@AMSPEX01CL01.citrite.net>
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
Message-ID: <5640B88B.4060105@m2r.biz>
Date: Mon, 9 Nov 2015 16:15:23 +0100
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.3.0
MIME-Version: 1.0
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F665F89@AMSPEX01CL01.citrite.net>
Subject: Re: [win-pv-devel] Windows 10 domU hang on boot after pv drivers
 install if dom0 have old kernel (or specific 3.2 problem)
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

Il 09/11/2015 15:42, Paul Durrant ha scritto:
>> -----Original Message-----
> [snip]
>>>> I know since long time ago that winpv require xen>=4.5.0 and upstream
>>>> qemu>=1.6.1
>>>> Probably also backports of these xen patches are needed if xen<4.6
>>>> (based on critical problems had long time ago):
>>>> - x86/hvm: add per-vcpu evtchn upcalls
>>> There was a bug in XENBUS which would cause a boot-time hang if you
>> were not running a Xen with this patch, but that was fixed by:
>>> commit 021d1f91ff9c1c10fa59e6d4200628b9d0d37eab
>>> Author: Paul Durrant <paul.durrant@citrix.com>
>>> Date:   Thu Jul 2 10:23:26 2015 +0100
>>>
>>>       Fix fall-back to two-level EVTCHN ABI
>>>
>>>       When the EVTCHN code attempts to acquire the FIFO ABI it may fail to
>> do
>>>       so because the version of Xen may not support it. In this case the code
>>>       was issuing an EventChannelReset() which has the unfortunate side
>> effect of
>>>       killing any toolstack-created channels, such as the xenstored channel.
>>>
>>>       This patch moves the existent EvtchnFifoReset function into the base
>>>       evtchn source module (since it's not ABI specific) and uses that function
>>>       as the only mechanism of issuing an EventChannelReset() since it
>> contains
>>>       code to preserve event channel bindings. (Prior to the move it only
>>>       preserved the xenstore channel but this patch adds code to preserve
>> the
>>>       console event channel too, if it exists).
>>>
>>>       Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
>>>
>>> ...which is in the staging-8.1 branch and hence will be in the 8.1 release.
>>>
>>>> - x86/hvm: extend HVM cpuid leaf with vcpu id
>>>>
>>> This is not relied upon so you should be ok without it.
>>>
>>>     Paul
>> Thanks for your reply.
>> Based on your reply with recent winpv builds don't require backport of
>> these xen patches but only require xen>=4.5.0 and upstream qemu>=1.6.1.
>>
>> About the problem reported in this mail that seems related to the kernel
>> (the only different thing comparing with test server), what can you tell
>> me about?
>>
> The other thing that comes to mind is this fix in xen-netback:
>
> commit 279f438e36c0a70b23b86d2090aeec50155034a9
> Author: Paul Durrant <Paul.Durrant@citrix.com>
> Date:   Tue Sep 17 17:46:08 2013 +0100
>
>      xen-netback: Don't destroy the netdev until the vif is shut down
>
>      Without this patch, if a frontend cycles through states Closing
>      and Closed (which Windows frontends need to do) then the netdev
>      will be destroyed and requires re-invocation of hotplug scripts
>      to restore state before the frontend can move to Connected. Thus
>      when udev is not in use the backend gets stuck in InitWait.
>
>      With this patch, the netdev is left alone whilst the backend is
>      still online and is only de-registered and freed just prior to
>      destroying the vif (which is also nicely symmetrical with the
>      netdev allocation and registration being done during probe) so
>      no re-invocation of hotplug scripts is required.
>
>      Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
>      Cc: David Vrabel <david.vrabel@citrix.com>
>      Cc: Wei Liu <wei.liu2@citrix.com>
>      Cc: Ian Campbell <ian.campbell@citrix.com>
>      Acked-by: Wei Liu <wei.liu2@citrix.com>
>      Signed-off-by: David S. Miller <davem@davemloft.net>
>
> As you can see, it's pretty old, but wheezy is older.
>
>    Paul

Big thanks for the reply.
This patch is missed in 3.2 upstream and also in debian patches.
I'll try rebuild with it ASAP for see if it solve the problem and 
backport request is needed (as 3.2 is an LTS)

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

From win-pv-devel-bounces@lists.xenproject.org Mon Nov 09 16:15:37 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Nov 2015 16:15:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1Zvp6W-0003YG-1k; Mon, 09 Nov 2015 16:15:36 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1Zvp6U-0003YB-AT
	for win-pv-devel@lists.xenproject.org; Mon, 09 Nov 2015 16:15:34 +0000
Received: from [85.158.139.211] by server-12.bemta-5.messagelabs.com id
	EA/20-12831-5A6C0465; Mon, 09 Nov 2015 16:15:33 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-3.tower-206.messagelabs.com!1447085732!2130661!1
X-Originating-IP: [74.125.82.53]
X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 44612 invoked from network); 9 Nov 2015 16:15:32 -0000
Received: from mail-wm0-f53.google.com (HELO mail-wm0-f53.google.com)
	(74.125.82.53)
	by server-3.tower-206.messagelabs.com with AES128-GCM-SHA256 encrypted
	SMTP; 9 Nov 2015 16:15:32 -0000
Received: by wmww144 with SMTP id w144so39070982wmw.0
	for <win-pv-devel@lists.xenproject.org>;
	Mon, 09 Nov 2015 08:15:32 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=m2r_biz.20150623.gappssmtp.com; s=20150623;
	h=subject:to:references:from:message-id:date:user-agent:mime-version
	:in-reply-to:content-type:content-transfer-encoding;
	bh=i7GDbe5czrffJ2W9oaRl9LJjM0Vmt2Ldxu+S/Dfc3hU=;
	b=RTXIUeZvHkZqGlSjQImAFb4qcYml3OBvkw5+fz6GlbIiLuWlRzJbOfrnYT4g6gVzEe
	/IZUrgbLMQuGhSzpvbIYOnJtFLp7XkkCIJjKGItOmGdeqZUHIcGkwAHGDBnTnnp5OqHW
	3DaazSp3fl8gID27WawQwChbYX+LBJ7fPWNgnVwLoxAuogwd/WXpQkRb8gJTfgW/ETx3
	4Z+EHG9hxt1Yzu968FEW6kba3PQwQTMsBVFJRSzh8p2Cl8DmEAK0BIteBB5dislEVs5d
	zvIIg/GLJczDQB5uZ6bJLwPljRmgEFje2aATj4Fn56NlI3khHqqr2WR3pfyrRC90riYv
	+sXg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:subject:to:references:from:message-id:date
	:user-agent:mime-version:in-reply-to:content-type
	:content-transfer-encoding;
	bh=i7GDbe5czrffJ2W9oaRl9LJjM0Vmt2Ldxu+S/Dfc3hU=;
	b=LUvw05YY7jjS4+goBPHVMUhvM8vsIYKm/MUJ1Z5yvafX6Q6kwCZCkSsQGg/IJqjmH1
	YsRIwU97kIYHdADpsuLDcd+o1/NWS7aKYKlowI1MiK8xUWLesD064QpXBtE3ZolwM8cH
	jjKLUiIvRQeILqDRzQMCfBzj8Whc+XKQQxwqiUKnpqO4V5JlRUX2/1bMpMOguorR6zac
	tZY5ekCz/cIMwO53ROt6a5jWKII9J4TBTbMNczXZ/xlqO0MjGpnNBaKiySHxP4OyqY3U
	DDH58jpCQUXCPEcptLL1CM8WZ6DbewYZ+hRJaNj6Qk958IzYR7tJTrB2PZMsmQA5jEaH
	J9Mg==
X-Gm-Message-State: ALoCoQnhjlkNhUKO3XHUZD+/f/DS/u8DKISzh5zBnME+gkeOa/5soWm0r1MpNvUhxl7JykWuwL9l
X-Received: by 10.28.24.144 with SMTP id 138mr25368835wmy.43.1447085731542;
	Mon, 09 Nov 2015 08:15:31 -0800 (PST)
Received: from [192.168.1.24] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by smtp.googlemail.com with ESMTPSA id
	d66sm15030988wma.21.2015.11.09.08.15.30
	(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Mon, 09 Nov 2015 08:15:30 -0800 (PST)
To: Paul Durrant <Paul.Durrant@citrix.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <564094BC.30307@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F665E16@AMSPEX01CL01.citrite.net>
	<5640A697.6010107@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F665F89@AMSPEX01CL01.citrite.net>
	<5640B88B.4060105@m2r.biz>
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
Message-ID: <5640C6A1.5090908@m2r.biz>
Date: Mon, 9 Nov 2015 17:15:29 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101
	Thunderbird/38.3.0
MIME-Version: 1.0
In-Reply-To: <5640B88B.4060105@m2r.biz>
Subject: Re: [win-pv-devel] Windows 10 domU hang on boot after pv drivers
 install if dom0 have old kernel (or specific 3.2 problem)
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org



Il 09/11/2015 16:15, Fabio Fantoni ha scritto:
> Il 09/11/2015 15:42, Paul Durrant ha scritto:
>>> -----Original Message-----
>> [snip]
>>>>> I know since long time ago that winpv require xen>=4.5.0 and upstream
>>>>> qemu>=1.6.1
>>>>> Probably also backports of these xen patches are needed if xen<4.6
>>>>> (based on critical problems had long time ago):
>>>>> - x86/hvm: add per-vcpu evtchn upcalls
>>>> There was a bug in XENBUS which would cause a boot-time hang if you
>>> were not running a Xen with this patch, but that was fixed by:
>>>> commit 021d1f91ff9c1c10fa59e6d4200628b9d0d37eab
>>>> Author: Paul Durrant <paul.durrant@citrix.com>
>>>> Date:   Thu Jul 2 10:23:26 2015 +0100
>>>>
>>>>       Fix fall-back to two-level EVTCHN ABI
>>>>
>>>>       When the EVTCHN code attempts to acquire the FIFO ABI it may 
>>>> fail to
>>> do
>>>>       so because the version of Xen may not support it. In this 
>>>> case the code
>>>>       was issuing an EventChannelReset() which has the unfortunate 
>>>> side
>>> effect of
>>>>       killing any toolstack-created channels, such as the xenstored 
>>>> channel.
>>>>
>>>>       This patch moves the existent EvtchnFifoReset function into 
>>>> the base
>>>>       evtchn source module (since it's not ABI specific) and uses 
>>>> that function
>>>>       as the only mechanism of issuing an EventChannelReset() since it
>>> contains
>>>>       code to preserve event channel bindings. (Prior to the move 
>>>> it only
>>>>       preserved the xenstore channel but this patch adds code to 
>>>> preserve
>>> the
>>>>       console event channel too, if it exists).
>>>>
>>>>       Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
>>>>
>>>> ...which is in the staging-8.1 branch and hence will be in the 8.1 
>>>> release.
>>>>
>>>>> - x86/hvm: extend HVM cpuid leaf with vcpu id
>>>>>
>>>> This is not relied upon so you should be ok without it.
>>>>
>>>>     Paul
>>> Thanks for your reply.
>>> Based on your reply with recent winpv builds don't require backport of
>>> these xen patches but only require xen>=4.5.0 and upstream qemu>=1.6.1.
>>>
>>> About the problem reported in this mail that seems related to the 
>>> kernel
>>> (the only different thing comparing with test server), what can you 
>>> tell
>>> me about?
>>>
>> The other thing that comes to mind is this fix in xen-netback:
>>
>> commit 279f438e36c0a70b23b86d2090aeec50155034a9
>> Author: Paul Durrant <Paul.Durrant@citrix.com>
>> Date:   Tue Sep 17 17:46:08 2013 +0100
>>
>>      xen-netback: Don't destroy the netdev until the vif is shut down
>>
>>      Without this patch, if a frontend cycles through states Closing
>>      and Closed (which Windows frontends need to do) then the netdev
>>      will be destroyed and requires re-invocation of hotplug scripts
>>      to restore state before the frontend can move to Connected. Thus
>>      when udev is not in use the backend gets stuck in InitWait.
>>
>>      With this patch, the netdev is left alone whilst the backend is
>>      still online and is only de-registered and freed just prior to
>>      destroying the vif (which is also nicely symmetrical with the
>>      netdev allocation and registration being done during probe) so
>>      no re-invocation of hotplug scripts is required.
>>
>>      Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
>>      Cc: David Vrabel <david.vrabel@citrix.com>
>>      Cc: Wei Liu <wei.liu2@citrix.com>
>>      Cc: Ian Campbell <ian.campbell@citrix.com>
>>      Acked-by: Wei Liu <wei.liu2@citrix.com>
>>      Signed-off-by: David S. Miller <davem@davemloft.net>
>>
>> As you can see, it's pretty old, but wheezy is older.
>>
>>    Paul
>
> Big thanks for the reply.
> This patch is missed in 3.2 upstream and also in debian patches.
> I'll try rebuild with it ASAP for see if it solve the problem and 
> backport request is needed (as 3.2 is an LTS)

I tried to apply it to latest wheezy (3.2) but fails to apply and there 
are fails in drivers/net/xen-netback/interface.c hunk #2, #3 and #4 for 
parts missed or too different, same with latest upsteam (3.2.72).
I not understand how to adapt it safely :(

Thanks for any reply and sorry for my bad english.

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

From win-pv-devel-bounces@lists.xenproject.org Mon Nov 09 16:15:37 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Nov 2015 16:15:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1Zvp6W-0003YG-1k; Mon, 09 Nov 2015 16:15:36 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1Zvp6U-0003YB-AT
	for win-pv-devel@lists.xenproject.org; Mon, 09 Nov 2015 16:15:34 +0000
Received: from [85.158.139.211] by server-12.bemta-5.messagelabs.com id
	EA/20-12831-5A6C0465; Mon, 09 Nov 2015 16:15:33 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-3.tower-206.messagelabs.com!1447085732!2130661!1
X-Originating-IP: [74.125.82.53]
X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 44612 invoked from network); 9 Nov 2015 16:15:32 -0000
Received: from mail-wm0-f53.google.com (HELO mail-wm0-f53.google.com)
	(74.125.82.53)
	by server-3.tower-206.messagelabs.com with AES128-GCM-SHA256 encrypted
	SMTP; 9 Nov 2015 16:15:32 -0000
Received: by wmww144 with SMTP id w144so39070982wmw.0
	for <win-pv-devel@lists.xenproject.org>;
	Mon, 09 Nov 2015 08:15:32 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=m2r_biz.20150623.gappssmtp.com; s=20150623;
	h=subject:to:references:from:message-id:date:user-agent:mime-version
	:in-reply-to:content-type:content-transfer-encoding;
	bh=i7GDbe5czrffJ2W9oaRl9LJjM0Vmt2Ldxu+S/Dfc3hU=;
	b=RTXIUeZvHkZqGlSjQImAFb4qcYml3OBvkw5+fz6GlbIiLuWlRzJbOfrnYT4g6gVzEe
	/IZUrgbLMQuGhSzpvbIYOnJtFLp7XkkCIJjKGItOmGdeqZUHIcGkwAHGDBnTnnp5OqHW
	3DaazSp3fl8gID27WawQwChbYX+LBJ7fPWNgnVwLoxAuogwd/WXpQkRb8gJTfgW/ETx3
	4Z+EHG9hxt1Yzu968FEW6kba3PQwQTMsBVFJRSzh8p2Cl8DmEAK0BIteBB5dislEVs5d
	zvIIg/GLJczDQB5uZ6bJLwPljRmgEFje2aATj4Fn56NlI3khHqqr2WR3pfyrRC90riYv
	+sXg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:subject:to:references:from:message-id:date
	:user-agent:mime-version:in-reply-to:content-type
	:content-transfer-encoding;
	bh=i7GDbe5czrffJ2W9oaRl9LJjM0Vmt2Ldxu+S/Dfc3hU=;
	b=LUvw05YY7jjS4+goBPHVMUhvM8vsIYKm/MUJ1Z5yvafX6Q6kwCZCkSsQGg/IJqjmH1
	YsRIwU97kIYHdADpsuLDcd+o1/NWS7aKYKlowI1MiK8xUWLesD064QpXBtE3ZolwM8cH
	jjKLUiIvRQeILqDRzQMCfBzj8Whc+XKQQxwqiUKnpqO4V5JlRUX2/1bMpMOguorR6zac
	tZY5ekCz/cIMwO53ROt6a5jWKII9J4TBTbMNczXZ/xlqO0MjGpnNBaKiySHxP4OyqY3U
	DDH58jpCQUXCPEcptLL1CM8WZ6DbewYZ+hRJaNj6Qk958IzYR7tJTrB2PZMsmQA5jEaH
	J9Mg==
X-Gm-Message-State: ALoCoQnhjlkNhUKO3XHUZD+/f/DS/u8DKISzh5zBnME+gkeOa/5soWm0r1MpNvUhxl7JykWuwL9l
X-Received: by 10.28.24.144 with SMTP id 138mr25368835wmy.43.1447085731542;
	Mon, 09 Nov 2015 08:15:31 -0800 (PST)
Received: from [192.168.1.24] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by smtp.googlemail.com with ESMTPSA id
	d66sm15030988wma.21.2015.11.09.08.15.30
	(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Mon, 09 Nov 2015 08:15:30 -0800 (PST)
To: Paul Durrant <Paul.Durrant@citrix.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <564094BC.30307@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F665E16@AMSPEX01CL01.citrite.net>
	<5640A697.6010107@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F665F89@AMSPEX01CL01.citrite.net>
	<5640B88B.4060105@m2r.biz>
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
Message-ID: <5640C6A1.5090908@m2r.biz>
Date: Mon, 9 Nov 2015 17:15:29 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101
	Thunderbird/38.3.0
MIME-Version: 1.0
In-Reply-To: <5640B88B.4060105@m2r.biz>
Subject: Re: [win-pv-devel] Windows 10 domU hang on boot after pv drivers
 install if dom0 have old kernel (or specific 3.2 problem)
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org



Il 09/11/2015 16:15, Fabio Fantoni ha scritto:
> Il 09/11/2015 15:42, Paul Durrant ha scritto:
>>> -----Original Message-----
>> [snip]
>>>>> I know since long time ago that winpv require xen>=4.5.0 and upstream
>>>>> qemu>=1.6.1
>>>>> Probably also backports of these xen patches are needed if xen<4.6
>>>>> (based on critical problems had long time ago):
>>>>> - x86/hvm: add per-vcpu evtchn upcalls
>>>> There was a bug in XENBUS which would cause a boot-time hang if you
>>> were not running a Xen with this patch, but that was fixed by:
>>>> commit 021d1f91ff9c1c10fa59e6d4200628b9d0d37eab
>>>> Author: Paul Durrant <paul.durrant@citrix.com>
>>>> Date:   Thu Jul 2 10:23:26 2015 +0100
>>>>
>>>>       Fix fall-back to two-level EVTCHN ABI
>>>>
>>>>       When the EVTCHN code attempts to acquire the FIFO ABI it may 
>>>> fail to
>>> do
>>>>       so because the version of Xen may not support it. In this 
>>>> case the code
>>>>       was issuing an EventChannelReset() which has the unfortunate 
>>>> side
>>> effect of
>>>>       killing any toolstack-created channels, such as the xenstored 
>>>> channel.
>>>>
>>>>       This patch moves the existent EvtchnFifoReset function into 
>>>> the base
>>>>       evtchn source module (since it's not ABI specific) and uses 
>>>> that function
>>>>       as the only mechanism of issuing an EventChannelReset() since it
>>> contains
>>>>       code to preserve event channel bindings. (Prior to the move 
>>>> it only
>>>>       preserved the xenstore channel but this patch adds code to 
>>>> preserve
>>> the
>>>>       console event channel too, if it exists).
>>>>
>>>>       Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
>>>>
>>>> ...which is in the staging-8.1 branch and hence will be in the 8.1 
>>>> release.
>>>>
>>>>> - x86/hvm: extend HVM cpuid leaf with vcpu id
>>>>>
>>>> This is not relied upon so you should be ok without it.
>>>>
>>>>     Paul
>>> Thanks for your reply.
>>> Based on your reply with recent winpv builds don't require backport of
>>> these xen patches but only require xen>=4.5.0 and upstream qemu>=1.6.1.
>>>
>>> About the problem reported in this mail that seems related to the 
>>> kernel
>>> (the only different thing comparing with test server), what can you 
>>> tell
>>> me about?
>>>
>> The other thing that comes to mind is this fix in xen-netback:
>>
>> commit 279f438e36c0a70b23b86d2090aeec50155034a9
>> Author: Paul Durrant <Paul.Durrant@citrix.com>
>> Date:   Tue Sep 17 17:46:08 2013 +0100
>>
>>      xen-netback: Don't destroy the netdev until the vif is shut down
>>
>>      Without this patch, if a frontend cycles through states Closing
>>      and Closed (which Windows frontends need to do) then the netdev
>>      will be destroyed and requires re-invocation of hotplug scripts
>>      to restore state before the frontend can move to Connected. Thus
>>      when udev is not in use the backend gets stuck in InitWait.
>>
>>      With this patch, the netdev is left alone whilst the backend is
>>      still online and is only de-registered and freed just prior to
>>      destroying the vif (which is also nicely symmetrical with the
>>      netdev allocation and registration being done during probe) so
>>      no re-invocation of hotplug scripts is required.
>>
>>      Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
>>      Cc: David Vrabel <david.vrabel@citrix.com>
>>      Cc: Wei Liu <wei.liu2@citrix.com>
>>      Cc: Ian Campbell <ian.campbell@citrix.com>
>>      Acked-by: Wei Liu <wei.liu2@citrix.com>
>>      Signed-off-by: David S. Miller <davem@davemloft.net>
>>
>> As you can see, it's pretty old, but wheezy is older.
>>
>>    Paul
>
> Big thanks for the reply.
> This patch is missed in 3.2 upstream and also in debian patches.
> I'll try rebuild with it ASAP for see if it solve the problem and 
> backport request is needed (as 3.2 is an LTS)

I tried to apply it to latest wheezy (3.2) but fails to apply and there 
are fails in drivers/net/xen-netback/interface.c hunk #2, #3 and #4 for 
parts missed or too different, same with latest upsteam (3.2.72).
I not understand how to adapt it safely :(

Thanks for any reply and sorry for my bad english.

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

From win-pv-devel-bounces@lists.xenproject.org Mon Nov 09 16:22:07 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Nov 2015 16:22:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZvpCo-0004SK-40; Mon, 09 Nov 2015 16:22:06 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=748466bc1=Paul.Durrant@citrix.com>)
	id 1ZvpCn-0004SF-4M
	for win-pv-devel@lists.xenproject.org; Mon, 09 Nov 2015 16:22:05 +0000
Received: from [193.109.254.147] by server-3.bemta-14.messagelabs.com id
	9C/0F-25435-C28C0465; Mon, 09 Nov 2015 16:22:04 +0000
X-Env-Sender: prvs=748466bc1=Paul.Durrant@citrix.com
X-Msg-Ref: server-9.tower-27.messagelabs.com!1447086123!1737205!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=2.2 required=7.0 tests=BIZ_TLD,BODY_RANDOM_LONG,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 31822 invoked from network); 9 Nov 2015 16:22:03 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-9.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	9 Nov 2015 16:22:03 -0000
X-IronPort-AV: E=Sophos;i="5.20,266,1444694400"; 
   d="scan'208";a="7266698"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Fabio Fantoni <fabio.fantoni@m2r.biz>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Thread-Topic: Windows 10 domU hang on boot after pv drivers install if dom0
	have old kernel (or specific 3.2 problem)
Thread-Index: AQHRGuwidG4ZcTbeE0qn+S2eGWVU1Z6Tq4QA///7YYCAABtyQP//+fWAgAAQy4CAABJosA==
Date: Mon, 9 Nov 2015 16:21:59 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F666347@AMSPEX01CL01.citrite.net>
References: <564094BC.30307@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F665E16@AMSPEX01CL01.citrite.net>
	<5640A697.6010107@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F665F89@AMSPEX01CL01.citrite.net>
	<5640B88B.4060105@m2r.biz> <5640C6A1.5090908@m2r.biz>
In-Reply-To: <5640C6A1.5090908@m2r.biz>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] Windows 10 domU hang on boot after pv drivers
 install if dom0 have old kernel (or specific 3.2 problem)
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> Sent: 09 November 2015 16:15
> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> Subject: Re: Windows 10 domU hang on boot after pv drivers install if dom0
> have old kernel (or specific 3.2 problem)
> 
> 
> 
> Il 09/11/2015 16:15, Fabio Fantoni ha scritto:
> > Il 09/11/2015 15:42, Paul Durrant ha scritto:
> >>> -----Original Message-----
> >> [snip]
> >>>>> I know since long time ago that winpv require xen>=4.5.0 and
> upstream
> >>>>> qemu>=1.6.1
> >>>>> Probably also backports of these xen patches are needed if xen<4.6
> >>>>> (based on critical problems had long time ago):
> >>>>> - x86/hvm: add per-vcpu evtchn upcalls
> >>>> There was a bug in XENBUS which would cause a boot-time hang if you
> >>> were not running a Xen with this patch, but that was fixed by:
> >>>> commit 021d1f91ff9c1c10fa59e6d4200628b9d0d37eab
> >>>> Author: Paul Durrant <paul.durrant@citrix.com>
> >>>> Date:   Thu Jul 2 10:23:26 2015 +0100
> >>>>
> >>>>       Fix fall-back to two-level EVTCHN ABI
> >>>>
> >>>>       When the EVTCHN code attempts to acquire the FIFO ABI it may
> >>>> fail to
> >>> do
> >>>>       so because the version of Xen may not support it. In this
> >>>> case the code
> >>>>       was issuing an EventChannelReset() which has the unfortunate
> >>>> side
> >>> effect of
> >>>>       killing any toolstack-created channels, such as the xenstored
> >>>> channel.
> >>>>
> >>>>       This patch moves the existent EvtchnFifoReset function into
> >>>> the base
> >>>>       evtchn source module (since it's not ABI specific) and uses
> >>>> that function
> >>>>       as the only mechanism of issuing an EventChannelReset() since it
> >>> contains
> >>>>       code to preserve event channel bindings. (Prior to the move
> >>>> it only
> >>>>       preserved the xenstore channel but this patch adds code to
> >>>> preserve
> >>> the
> >>>>       console event channel too, if it exists).
> >>>>
> >>>>       Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
> >>>>
> >>>> ...which is in the staging-8.1 branch and hence will be in the 8.1
> >>>> release.
> >>>>
> >>>>> - x86/hvm: extend HVM cpuid leaf with vcpu id
> >>>>>
> >>>> This is not relied upon so you should be ok without it.
> >>>>
> >>>>     Paul
> >>> Thanks for your reply.
> >>> Based on your reply with recent winpv builds don't require backport of
> >>> these xen patches but only require xen>=4.5.0 and upstream
> qemu>=1.6.1.
> >>>
> >>> About the problem reported in this mail that seems related to the
> >>> kernel
> >>> (the only different thing comparing with test server), what can you
> >>> tell
> >>> me about?
> >>>
> >> The other thing that comes to mind is this fix in xen-netback:
> >>
> >> commit 279f438e36c0a70b23b86d2090aeec50155034a9
> >> Author: Paul Durrant <Paul.Durrant@citrix.com>
> >> Date:   Tue Sep 17 17:46:08 2013 +0100
> >>
> >>      xen-netback: Don't destroy the netdev until the vif is shut down
> >>
> >>      Without this patch, if a frontend cycles through states Closing
> >>      and Closed (which Windows frontends need to do) then the netdev
> >>      will be destroyed and requires re-invocation of hotplug scripts
> >>      to restore state before the frontend can move to Connected. Thus
> >>      when udev is not in use the backend gets stuck in InitWait.
> >>
> >>      With this patch, the netdev is left alone whilst the backend is
> >>      still online and is only de-registered and freed just prior to
> >>      destroying the vif (which is also nicely symmetrical with the
> >>      netdev allocation and registration being done during probe) so
> >>      no re-invocation of hotplug scripts is required.
> >>
> >>      Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
> >>      Cc: David Vrabel <david.vrabel@citrix.com>
> >>      Cc: Wei Liu <wei.liu2@citrix.com>
> >>      Cc: Ian Campbell <ian.campbell@citrix.com>
> >>      Acked-by: Wei Liu <wei.liu2@citrix.com>
> >>      Signed-off-by: David S. Miller <davem@davemloft.net>
> >>
> >> As you can see, it's pretty old, but wheezy is older.
> >>
> >>    Paul
> >
> > Big thanks for the reply.
> > This patch is missed in 3.2 upstream and also in debian patches.
> > I'll try rebuild with it ASAP for see if it solve the problem and
> > backport request is needed (as 3.2 is an LTS)
> 
> I tried to apply it to latest wheezy (3.2) but fails to apply and there
> are fails in drivers/net/xen-netback/interface.c hunk #2, #3 and #4 for
> parts missed or too different, same with latest upsteam (3.2.72).
> I not understand how to adapt it safely :(

Probably best just to use a newer kernel then.

  Paul

> 
> Thanks for any reply and sorry for my bad english.

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

From win-pv-devel-bounces@lists.xenproject.org Mon Nov 09 16:22:07 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Nov 2015 16:22:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZvpCo-0004SK-40; Mon, 09 Nov 2015 16:22:06 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=748466bc1=Paul.Durrant@citrix.com>)
	id 1ZvpCn-0004SF-4M
	for win-pv-devel@lists.xenproject.org; Mon, 09 Nov 2015 16:22:05 +0000
Received: from [193.109.254.147] by server-3.bemta-14.messagelabs.com id
	9C/0F-25435-C28C0465; Mon, 09 Nov 2015 16:22:04 +0000
X-Env-Sender: prvs=748466bc1=Paul.Durrant@citrix.com
X-Msg-Ref: server-9.tower-27.messagelabs.com!1447086123!1737205!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=2.2 required=7.0 tests=BIZ_TLD,BODY_RANDOM_LONG,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 31822 invoked from network); 9 Nov 2015 16:22:03 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-9.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	9 Nov 2015 16:22:03 -0000
X-IronPort-AV: E=Sophos;i="5.20,266,1444694400"; 
   d="scan'208";a="7266698"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Fabio Fantoni <fabio.fantoni@m2r.biz>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Thread-Topic: Windows 10 domU hang on boot after pv drivers install if dom0
	have old kernel (or specific 3.2 problem)
Thread-Index: AQHRGuwidG4ZcTbeE0qn+S2eGWVU1Z6Tq4QA///7YYCAABtyQP//+fWAgAAQy4CAABJosA==
Date: Mon, 9 Nov 2015 16:21:59 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F666347@AMSPEX01CL01.citrite.net>
References: <564094BC.30307@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F665E16@AMSPEX01CL01.citrite.net>
	<5640A697.6010107@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F665F89@AMSPEX01CL01.citrite.net>
	<5640B88B.4060105@m2r.biz> <5640C6A1.5090908@m2r.biz>
In-Reply-To: <5640C6A1.5090908@m2r.biz>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] Windows 10 domU hang on boot after pv drivers
 install if dom0 have old kernel (or specific 3.2 problem)
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> Sent: 09 November 2015 16:15
> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> Subject: Re: Windows 10 domU hang on boot after pv drivers install if dom0
> have old kernel (or specific 3.2 problem)
> 
> 
> 
> Il 09/11/2015 16:15, Fabio Fantoni ha scritto:
> > Il 09/11/2015 15:42, Paul Durrant ha scritto:
> >>> -----Original Message-----
> >> [snip]
> >>>>> I know since long time ago that winpv require xen>=4.5.0 and
> upstream
> >>>>> qemu>=1.6.1
> >>>>> Probably also backports of these xen patches are needed if xen<4.6
> >>>>> (based on critical problems had long time ago):
> >>>>> - x86/hvm: add per-vcpu evtchn upcalls
> >>>> There was a bug in XENBUS which would cause a boot-time hang if you
> >>> were not running a Xen with this patch, but that was fixed by:
> >>>> commit 021d1f91ff9c1c10fa59e6d4200628b9d0d37eab
> >>>> Author: Paul Durrant <paul.durrant@citrix.com>
> >>>> Date:   Thu Jul 2 10:23:26 2015 +0100
> >>>>
> >>>>       Fix fall-back to two-level EVTCHN ABI
> >>>>
> >>>>       When the EVTCHN code attempts to acquire the FIFO ABI it may
> >>>> fail to
> >>> do
> >>>>       so because the version of Xen may not support it. In this
> >>>> case the code
> >>>>       was issuing an EventChannelReset() which has the unfortunate
> >>>> side
> >>> effect of
> >>>>       killing any toolstack-created channels, such as the xenstored
> >>>> channel.
> >>>>
> >>>>       This patch moves the existent EvtchnFifoReset function into
> >>>> the base
> >>>>       evtchn source module (since it's not ABI specific) and uses
> >>>> that function
> >>>>       as the only mechanism of issuing an EventChannelReset() since it
> >>> contains
> >>>>       code to preserve event channel bindings. (Prior to the move
> >>>> it only
> >>>>       preserved the xenstore channel but this patch adds code to
> >>>> preserve
> >>> the
> >>>>       console event channel too, if it exists).
> >>>>
> >>>>       Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
> >>>>
> >>>> ...which is in the staging-8.1 branch and hence will be in the 8.1
> >>>> release.
> >>>>
> >>>>> - x86/hvm: extend HVM cpuid leaf with vcpu id
> >>>>>
> >>>> This is not relied upon so you should be ok without it.
> >>>>
> >>>>     Paul
> >>> Thanks for your reply.
> >>> Based on your reply with recent winpv builds don't require backport of
> >>> these xen patches but only require xen>=4.5.0 and upstream
> qemu>=1.6.1.
> >>>
> >>> About the problem reported in this mail that seems related to the
> >>> kernel
> >>> (the only different thing comparing with test server), what can you
> >>> tell
> >>> me about?
> >>>
> >> The other thing that comes to mind is this fix in xen-netback:
> >>
> >> commit 279f438e36c0a70b23b86d2090aeec50155034a9
> >> Author: Paul Durrant <Paul.Durrant@citrix.com>
> >> Date:   Tue Sep 17 17:46:08 2013 +0100
> >>
> >>      xen-netback: Don't destroy the netdev until the vif is shut down
> >>
> >>      Without this patch, if a frontend cycles through states Closing
> >>      and Closed (which Windows frontends need to do) then the netdev
> >>      will be destroyed and requires re-invocation of hotplug scripts
> >>      to restore state before the frontend can move to Connected. Thus
> >>      when udev is not in use the backend gets stuck in InitWait.
> >>
> >>      With this patch, the netdev is left alone whilst the backend is
> >>      still online and is only de-registered and freed just prior to
> >>      destroying the vif (which is also nicely symmetrical with the
> >>      netdev allocation and registration being done during probe) so
> >>      no re-invocation of hotplug scripts is required.
> >>
> >>      Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
> >>      Cc: David Vrabel <david.vrabel@citrix.com>
> >>      Cc: Wei Liu <wei.liu2@citrix.com>
> >>      Cc: Ian Campbell <ian.campbell@citrix.com>
> >>      Acked-by: Wei Liu <wei.liu2@citrix.com>
> >>      Signed-off-by: David S. Miller <davem@davemloft.net>
> >>
> >> As you can see, it's pretty old, but wheezy is older.
> >>
> >>    Paul
> >
> > Big thanks for the reply.
> > This patch is missed in 3.2 upstream and also in debian patches.
> > I'll try rebuild with it ASAP for see if it solve the problem and
> > backport request is needed (as 3.2 is an LTS)
> 
> I tried to apply it to latest wheezy (3.2) but fails to apply and there
> are fails in drivers/net/xen-netback/interface.c hunk #2, #3 and #4 for
> parts missed or too different, same with latest upsteam (3.2.72).
> I not understand how to adapt it safely :(

Probably best just to use a newer kernel then.

  Paul

> 
> Thanks for any reply and sorry for my bad english.

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

From win-pv-devel-bounces@lists.xenproject.org Mon Nov 16 18:45:50 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 16 Nov 2015 18:45:50 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZyOmj-0003Ys-I5; Mon, 16 Nov 2015 18:45:49 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <jmjaser@gmail.com>) id 1ZyOmi-0003Yn-3g
	for win-pv-devel@lists.xenproject.org; Mon, 16 Nov 2015 18:45:48 +0000
Received: from [85.158.137.68] by server-2.bemta-3.messagelabs.com id
	45/54-21201-B542A465; Mon, 16 Nov 2015 18:45:47 +0000
X-Env-Sender: jmjaser@gmail.com
X-Msg-Ref: server-10.tower-31.messagelabs.com!1447699545!4063926!1
X-Originating-IP: [209.85.214.177]
X-SpamReason: No, hits=0.1 required=7.0 tests=HTML_30_40,HTML_MESSAGE
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 10646 invoked from network); 16 Nov 2015 18:45:46 -0000
Received: from mail-ob0-f177.google.com (HELO mail-ob0-f177.google.com)
	(209.85.214.177)
	by server-10.tower-31.messagelabs.com with AES128-GCM-SHA256 encrypted
	SMTP; 16 Nov 2015 18:45:46 -0000
Received: by obbbj7 with SMTP id bj7so110160587obb.1
	for <win-pv-devel@lists.xenproject.org>;
	Mon, 16 Nov 2015 10:45:45 -0800 (PST)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=mime-version:references:in-reply-to:from:date:message-id:subject:to
	:cc:content-type;
	bh=sQAKSmnK6XAOzGIfwfai8z1rR61PYeuH6hkSn10Klyk=;
	b=gZxrUky/SJ89auWZc6CcWKtSg58QoPROap4V5g9xfV0jCiPc12cdSo2JzEHN0PEMzP
	p7aonwJj70YeJY0HG/+33KV5J6NX33nWj+JFUD/tfqvOxVrGtBVWHG56QL5b/B87R0jD
	I9kussIb8QqsTDLLiV/MIOcKcQBX/WUmCydwbR5IXwK7nwIiah6Qss93X75B8xui7CKt
	HUW61dMxdj1lDnofJGw0+7ISRZRZNCtJXwwAbw3bYmVqCDbcW5xIPQpRt90wTwczAxo8
	bRE5JIT6Oj4Of5r7qU7prIFFmrxgMwRGnJOwlxRRcSo+/LHsArgjrDWkKajAz8AvTR/B
	za8w==
X-Received: by 10.60.42.97 with SMTP id n1mr22632163oel.10.1447699544955; Mon,
	16 Nov 2015 10:45:44 -0800 (PST)
MIME-Version: 1.0
References: <55D5D908.1040506@m2r.biz>
	<sleacjrdcrrvsxgctwyek24q.1440085065667@email.android.com>
	<55D6DB89.9020307@m2r.biz> <561B69BC.2090008@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F60B2DF@AMSPEX01CL01.citrite.net>
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F60B2DF@AMSPEX01CL01.citrite.net>
From: John Jaser <john@jaser.net>
Date: Mon, 16 Nov 2015 18:45:35 +0000
Message-ID: <CAFsYgP1kYBQzuFk=tLHPCz-ZH1jpE3kBGNwGCXRkfwN+BJV0WA@mail.gmail.com>
To: Paul Durrant <Paul.Durrant@citrix.com>,
	Fabio Fantoni <fabio.fantoni@m2r.biz>
Cc: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Subject: Re: [win-pv-devel] Signing new winpv drivers
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============7844470424941704713=="
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

--===============7844470424941704713==
Content-Type: multipart/alternative; boundary=089e014951fa1e5f650524acd10b

--089e014951fa1e5f650524acd10b
Content-Type: text/plain; charset=UTF-8

My test Win 10 system with 8.1.0.xx PV drivers just did the first large
(non insider) upgrade since GA (build 10240) to build 10586, and I am happy
to say, test signing remained honored, and the system upgraded normally.
Very encouraging.  Hats off to the PV dev team.

On Mon, Oct 12, 2015 at 4:19 AM Paul Durrant <Paul.Durrant@citrix.com>
wrote:

> De-htmling...
>
> -----
> [snip]
>
> Any news on signed drivers?
> Actually the automatic build only with new commit in master branch and
> keep only the latest build, is possible to improve it please?
> For example I think is good build also latest commit of staging-8.1 branch
> and all tags (keeeping all rc and stable build in this case).
> This will be easier and faster test also rc builds and any commit for next
> stable versions.
> -----
>
> No news on XenProject driver signing. There should be some signed Citrix
> branded drivers soon though and these should work on any Xen platform, not
> just XenServer.
>
>   Paul
>
>
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
>

--089e014951fa1e5f650524acd10b
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">My test Win 10 system with 8.1.0.xx PV drivers just did th=
e first large (non insider) upgrade since GA (build 10240) to build 10586, =
and I am happy to say, test signing remained honored, and the system upgrad=
ed normally.=C2=A0 Very encouraging.=C2=A0 Hats off to the PV dev team.</di=
v><br><div class=3D"gmail_quote"><div dir=3D"ltr">On Mon, Oct 12, 2015 at 4=
:19 AM Paul Durrant &lt;<a href=3D"mailto:Paul.Durrant@citrix.com">Paul.Dur=
rant@citrix.com</a>&gt; wrote:<br></div><blockquote class=3D"gmail_quote" s=
tyle=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">De-h=
tmling...<br>
<br>
-----<br>
[snip]<br>
<br>
Any news on signed drivers?<br>
Actually the automatic build only with new commit in master branch and keep=
 only the latest build, is possible to improve it please?<br>
For example I think is good build also latest commit of staging-8.1 branch =
and all tags (keeeping all rc and stable build in this case).<br>
This will be easier and faster test also rc builds and any commit for next =
stable versions.<br>
-----<br>
<br>
No news on XenProject driver signing. There should be some signed Citrix br=
anded drivers soon though and these should work on any Xen platform, not ju=
st XenServer.<br>
<br>
=C2=A0 Paul<br>
<br>
<br>
_______________________________________________<br>
win-pv-devel mailing list<br>
<a href=3D"mailto:win-pv-devel@lists.xenproject.org" target=3D"_blank">win-=
pv-devel@lists.xenproject.org</a><br>
<a href=3D"http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-deve=
l" rel=3D"noreferrer" target=3D"_blank">http://lists.xenproject.org/cgi-bin=
/mailman/listinfo/win-pv-devel</a><br>
</blockquote></div>

--089e014951fa1e5f650524acd10b--


--===============7844470424941704713==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--===============7844470424941704713==--


From win-pv-devel-bounces@lists.xenproject.org Mon Nov 16 18:45:50 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 16 Nov 2015 18:45:50 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZyOmj-0003Ys-I5; Mon, 16 Nov 2015 18:45:49 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <jmjaser@gmail.com>) id 1ZyOmi-0003Yn-3g
	for win-pv-devel@lists.xenproject.org; Mon, 16 Nov 2015 18:45:48 +0000
Received: from [85.158.137.68] by server-2.bemta-3.messagelabs.com id
	45/54-21201-B542A465; Mon, 16 Nov 2015 18:45:47 +0000
X-Env-Sender: jmjaser@gmail.com
X-Msg-Ref: server-10.tower-31.messagelabs.com!1447699545!4063926!1
X-Originating-IP: [209.85.214.177]
X-SpamReason: No, hits=0.1 required=7.0 tests=HTML_30_40,HTML_MESSAGE
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 10646 invoked from network); 16 Nov 2015 18:45:46 -0000
Received: from mail-ob0-f177.google.com (HELO mail-ob0-f177.google.com)
	(209.85.214.177)
	by server-10.tower-31.messagelabs.com with AES128-GCM-SHA256 encrypted
	SMTP; 16 Nov 2015 18:45:46 -0000
Received: by obbbj7 with SMTP id bj7so110160587obb.1
	for <win-pv-devel@lists.xenproject.org>;
	Mon, 16 Nov 2015 10:45:45 -0800 (PST)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=mime-version:references:in-reply-to:from:date:message-id:subject:to
	:cc:content-type;
	bh=sQAKSmnK6XAOzGIfwfai8z1rR61PYeuH6hkSn10Klyk=;
	b=gZxrUky/SJ89auWZc6CcWKtSg58QoPROap4V5g9xfV0jCiPc12cdSo2JzEHN0PEMzP
	p7aonwJj70YeJY0HG/+33KV5J6NX33nWj+JFUD/tfqvOxVrGtBVWHG56QL5b/B87R0jD
	I9kussIb8QqsTDLLiV/MIOcKcQBX/WUmCydwbR5IXwK7nwIiah6Qss93X75B8xui7CKt
	HUW61dMxdj1lDnofJGw0+7ISRZRZNCtJXwwAbw3bYmVqCDbcW5xIPQpRt90wTwczAxo8
	bRE5JIT6Oj4Of5r7qU7prIFFmrxgMwRGnJOwlxRRcSo+/LHsArgjrDWkKajAz8AvTR/B
	za8w==
X-Received: by 10.60.42.97 with SMTP id n1mr22632163oel.10.1447699544955; Mon,
	16 Nov 2015 10:45:44 -0800 (PST)
MIME-Version: 1.0
References: <55D5D908.1040506@m2r.biz>
	<sleacjrdcrrvsxgctwyek24q.1440085065667@email.android.com>
	<55D6DB89.9020307@m2r.biz> <561B69BC.2090008@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F60B2DF@AMSPEX01CL01.citrite.net>
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F60B2DF@AMSPEX01CL01.citrite.net>
From: John Jaser <john@jaser.net>
Date: Mon, 16 Nov 2015 18:45:35 +0000
Message-ID: <CAFsYgP1kYBQzuFk=tLHPCz-ZH1jpE3kBGNwGCXRkfwN+BJV0WA@mail.gmail.com>
To: Paul Durrant <Paul.Durrant@citrix.com>,
	Fabio Fantoni <fabio.fantoni@m2r.biz>
Cc: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Subject: Re: [win-pv-devel] Signing new winpv drivers
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============7844470424941704713=="
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

--===============7844470424941704713==
Content-Type: multipart/alternative; boundary=089e014951fa1e5f650524acd10b

--089e014951fa1e5f650524acd10b
Content-Type: text/plain; charset=UTF-8

My test Win 10 system with 8.1.0.xx PV drivers just did the first large
(non insider) upgrade since GA (build 10240) to build 10586, and I am happy
to say, test signing remained honored, and the system upgraded normally.
Very encouraging.  Hats off to the PV dev team.

On Mon, Oct 12, 2015 at 4:19 AM Paul Durrant <Paul.Durrant@citrix.com>
wrote:

> De-htmling...
>
> -----
> [snip]
>
> Any news on signed drivers?
> Actually the automatic build only with new commit in master branch and
> keep only the latest build, is possible to improve it please?
> For example I think is good build also latest commit of staging-8.1 branch
> and all tags (keeeping all rc and stable build in this case).
> This will be easier and faster test also rc builds and any commit for next
> stable versions.
> -----
>
> No news on XenProject driver signing. There should be some signed Citrix
> branded drivers soon though and these should work on any Xen platform, not
> just XenServer.
>
>   Paul
>
>
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
>

--089e014951fa1e5f650524acd10b
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">My test Win 10 system with 8.1.0.xx PV drivers just did th=
e first large (non insider) upgrade since GA (build 10240) to build 10586, =
and I am happy to say, test signing remained honored, and the system upgrad=
ed normally.=C2=A0 Very encouraging.=C2=A0 Hats off to the PV dev team.</di=
v><br><div class=3D"gmail_quote"><div dir=3D"ltr">On Mon, Oct 12, 2015 at 4=
:19 AM Paul Durrant &lt;<a href=3D"mailto:Paul.Durrant@citrix.com">Paul.Dur=
rant@citrix.com</a>&gt; wrote:<br></div><blockquote class=3D"gmail_quote" s=
tyle=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">De-h=
tmling...<br>
<br>
-----<br>
[snip]<br>
<br>
Any news on signed drivers?<br>
Actually the automatic build only with new commit in master branch and keep=
 only the latest build, is possible to improve it please?<br>
For example I think is good build also latest commit of staging-8.1 branch =
and all tags (keeeping all rc and stable build in this case).<br>
This will be easier and faster test also rc builds and any commit for next =
stable versions.<br>
-----<br>
<br>
No news on XenProject driver signing. There should be some signed Citrix br=
anded drivers soon though and these should work on any Xen platform, not ju=
st XenServer.<br>
<br>
=C2=A0 Paul<br>
<br>
<br>
_______________________________________________<br>
win-pv-devel mailing list<br>
<a href=3D"mailto:win-pv-devel@lists.xenproject.org" target=3D"_blank">win-=
pv-devel@lists.xenproject.org</a><br>
<a href=3D"http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-deve=
l" rel=3D"noreferrer" target=3D"_blank">http://lists.xenproject.org/cgi-bin=
/mailman/listinfo/win-pv-devel</a><br>
</blockquote></div>

--089e014951fa1e5f650524acd10b--


--===============7844470424941704713==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--===============7844470424941704713==--


From win-pv-devel-bounces@lists.xenproject.org Tue Nov 17 09:51:12 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 17 Nov 2015 09:51:12 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1Zycut-0001gP-8V; Tue, 17 Nov 2015 09:51:11 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=7567d34c5=Paul.Durrant@citrix.com>)
	id 1Zycur-0001ep-MA
	for win-pv-devel@lists.xenproject.org; Tue, 17 Nov 2015 09:51:10 +0000
Received: from [193.109.254.147] by server-8.bemta-14.messagelabs.com id
	36/41-19110-C88FA465; Tue, 17 Nov 2015 09:51:08 +0000
X-Env-Sender: prvs=7567d34c5=Paul.Durrant@citrix.com
X-Msg-Ref: server-15.tower-27.messagelabs.com!1447753866!3769622!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.6 required=7.0 tests=HTML_90_100,HTML_MESSAGE,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 22388 invoked from network); 17 Nov 2015 09:51:07 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-15.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	17 Nov 2015 09:51:07 -0000
X-IronPort-AV: E=Sophos;i="5.20,307,1444694400"; d="scan'208,217";a="7844276"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: John Jaser <john@jaser.net>, Fabio Fantoni <fabio.fantoni@m2r.biz>
Thread-Topic: [win-pv-devel] Signing new winpv drivers
Thread-Index: AQHQ204xV7V7/m4HJ0ijzg2wZdxHsp4VBb23gADyHICAUbl4AIAAJC2ggDehF4CAAQ2XEA==
Date: Tue, 17 Nov 2015 09:51:05 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F674D2C@AMSPEX01CL01.citrite.net>
References: <55D5D908.1040506@m2r.biz>
	<sleacjrdcrrvsxgctwyek24q.1440085065667@email.android.com>
	<55D6DB89.9020307@m2r.biz> <561B69BC.2090008@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F60B2DF@AMSPEX01CL01.citrite.net>
	<CAFsYgP1kYBQzuFk=tLHPCz-ZH1jpE3kBGNwGCXRkfwN+BJV0WA@mail.gmail.com>
In-Reply-To: <CAFsYgP1kYBQzuFk=tLHPCz-ZH1jpE3kBGNwGCXRkfwN+BJV0WA@mail.gmail.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Cc: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Subject: Re: [win-pv-devel] Signing new winpv drivers
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============6926353541008986977=="
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

--===============6926353541008986977==
Content-Language: en-US
Content-Type: multipart/alternative;
	boundary="_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F674D2CAMSPEX01CL01cit_"

--_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F674D2CAMSPEX01CL01cit_
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64

VmVyeSBnbGFkIHRvIGhlYXIgaXQgYWxsIHdvcmtlZCB3ZWxsLiBUaGFua3MgZm9yIHRoZSBlbmNv
dXJhZ2VtZW50IQ0KDQogIFBhdWwNCg0KRnJvbTogSm9obiBKYXNlciBbbWFpbHRvOmpvaG5AamFz
ZXIubmV0XQ0KU2VudDogMTYgTm92ZW1iZXIgMjAxNSAxODo0Ng0KVG86IFBhdWwgRHVycmFudDsg
RmFiaW8gRmFudG9uaQ0KQ2M6IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZw0KU3Vi
amVjdDogUmU6IFt3aW4tcHYtZGV2ZWxdIFNpZ25pbmcgbmV3IHdpbnB2IGRyaXZlcnMNCg0KTXkg
dGVzdCBXaW4gMTAgc3lzdGVtIHdpdGggOC4xLjAueHggUFYgZHJpdmVycyBqdXN0IGRpZCB0aGUg
Zmlyc3QgbGFyZ2UgKG5vbiBpbnNpZGVyKSB1cGdyYWRlIHNpbmNlIEdBIChidWlsZCAxMDI0MCkg
dG8gYnVpbGQgMTA1ODYsIGFuZCBJIGFtIGhhcHB5IHRvIHNheSwgdGVzdCBzaWduaW5nIHJlbWFp
bmVkIGhvbm9yZWQsIGFuZCB0aGUgc3lzdGVtIHVwZ3JhZGVkIG5vcm1hbGx5LiAgVmVyeSBlbmNv
dXJhZ2luZy4gIEhhdHMgb2ZmIHRvIHRoZSBQViBkZXYgdGVhbS4NCg0KT24gTW9uLCBPY3QgMTIs
IDIwMTUgYXQgNDoxOSBBTSBQYXVsIER1cnJhbnQgPFBhdWwuRHVycmFudEBjaXRyaXguY29tPG1h
aWx0bzpQYXVsLkR1cnJhbnRAY2l0cml4LmNvbT4+IHdyb3RlOg0KRGUtaHRtbGluZy4uLg0KDQot
LS0tLQ0KW3NuaXBdDQoNCkFueSBuZXdzIG9uIHNpZ25lZCBkcml2ZXJzPw0KQWN0dWFsbHkgdGhl
IGF1dG9tYXRpYyBidWlsZCBvbmx5IHdpdGggbmV3IGNvbW1pdCBpbiBtYXN0ZXIgYnJhbmNoIGFu
ZCBrZWVwIG9ubHkgdGhlIGxhdGVzdCBidWlsZCwgaXMgcG9zc2libGUgdG8gaW1wcm92ZSBpdCBw
bGVhc2U/DQpGb3IgZXhhbXBsZSBJIHRoaW5rIGlzIGdvb2QgYnVpbGQgYWxzbyBsYXRlc3QgY29t
bWl0IG9mIHN0YWdpbmctOC4xIGJyYW5jaCBhbmQgYWxsIHRhZ3MgKGtlZWVwaW5nIGFsbCByYyBh
bmQgc3RhYmxlIGJ1aWxkIGluIHRoaXMgY2FzZSkuDQpUaGlzIHdpbGwgYmUgZWFzaWVyIGFuZCBm
YXN0ZXIgdGVzdCBhbHNvIHJjIGJ1aWxkcyBhbmQgYW55IGNvbW1pdCBmb3IgbmV4dCBzdGFibGUg
dmVyc2lvbnMuDQotLS0tLQ0KDQpObyBuZXdzIG9uIFhlblByb2plY3QgZHJpdmVyIHNpZ25pbmcu
IFRoZXJlIHNob3VsZCBiZSBzb21lIHNpZ25lZCBDaXRyaXggYnJhbmRlZCBkcml2ZXJzIHNvb24g
dGhvdWdoIGFuZCB0aGVzZSBzaG91bGQgd29yayBvbiBhbnkgWGVuIHBsYXRmb3JtLCBub3QganVz
dCBYZW5TZXJ2ZXIuDQoNCiAgUGF1bA0KDQoNCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fDQp3aW4tcHYtZGV2ZWwgbWFpbGluZyBsaXN0DQp3aW4tcHYtZGV2
ZWxAbGlzdHMueGVucHJvamVjdC5vcmc8bWFpbHRvOndpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9q
ZWN0Lm9yZz4NCmh0dHA6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9jZ2ktYmluL21haWxtYW4vbGlz
dGluZm8vd2luLXB2LWRldmVsDQo=

--_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F674D2CAMSPEX01CL01cit_
Content-Type: text/html; charset="utf-8"
Content-Transfer-Encoding: base64

PGh0bWwgeG1sbnM6dj0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwiIHhtbG5zOm89InVy
bjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIgeG1sbnM6dz0idXJuOnNjaGVt
YXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIgeG1sbnM6bT0iaHR0cDovL3NjaGVtYXMubWlj
cm9zb2Z0LmNvbS9vZmZpY2UvMjAwNC8xMi9vbW1sIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
VFIvUkVDLWh0bWw0MCI+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIg
Y29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4NCjxtZXRhIG5hbWU9IlByb2dJZCIg
Y29udGVudD0iV29yZC5Eb2N1bWVudCI+DQo8bWV0YSBuYW1lPSJHZW5lcmF0b3IiIGNvbnRlbnQ9
Ik1pY3Jvc29mdCBXb3JkIDE0Ij4NCjxtZXRhIG5hbWU9Ik9yaWdpbmF0b3IiIGNvbnRlbnQ9Ik1p
Y3Jvc29mdCBXb3JkIDE0Ij4NCjxsaW5rIHJlbD0iRmlsZS1MaXN0IiBocmVmPSJjaWQ6ZmlsZWxp
c3QueG1sQDAxRDEyMTFELjc5OThDQkMwIj48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4NCjxvOk9m
ZmljZURvY3VtZW50U2V0dGluZ3M+DQo8bzpBbGxvd1BORy8+DQo8bzpEb05vdFJlbHlPbkNTUy8+
DQo8L286T2ZmaWNlRG9jdW1lbnRTZXR0aW5ncz4NCjwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYg
Z3RlIG1zbyA5XT48eG1sPg0KPHc6V29yZERvY3VtZW50Pg0KPHc6U3BlbGxpbmdTdGF0ZT5DbGVh
bjwvdzpTcGVsbGluZ1N0YXRlPg0KPHc6VHJhY2tNb3Zlcy8+DQo8dzpUcmFja0Zvcm1hdHRpbmcv
Pg0KPHc6RW52ZWxvcGVWaXMvPg0KPHc6VmFsaWRhdGVBZ2FpbnN0U2NoZW1hcy8+DQo8dzpTYXZl
SWZYTUxJbnZhbGlkPmZhbHNlPC93OlNhdmVJZlhNTEludmFsaWQ+DQo8dzpJZ25vcmVNaXhlZENv
bnRlbnQ+ZmFsc2U8L3c6SWdub3JlTWl4ZWRDb250ZW50Pg0KPHc6QWx3YXlzU2hvd1BsYWNlaG9s
ZGVyVGV4dD5mYWxzZTwvdzpBbHdheXNTaG93UGxhY2Vob2xkZXJUZXh0Pg0KPHc6RG9Ob3RQcm9t
b3RlUUYvPg0KPHc6TGlkVGhlbWVPdGhlcj5FTi1HQjwvdzpMaWRUaGVtZU90aGVyPg0KPHc6TGlk
VGhlbWVBc2lhbj5YLU5PTkU8L3c6TGlkVGhlbWVBc2lhbj4NCjx3OkxpZFRoZW1lQ29tcGxleFNj
cmlwdD5YLU5PTkU8L3c6TGlkVGhlbWVDb21wbGV4U2NyaXB0Pg0KPHc6Q29tcGF0aWJpbGl0eT4N
Cjx3OkRvTm90RXhwYW5kU2hpZnRSZXR1cm4vPg0KPHc6QnJlYWtXcmFwcGVkVGFibGVzLz4NCjx3
OlNwbGl0UGdCcmVha0FuZFBhcmFNYXJrLz4NCjx3OkVuYWJsZU9wZW5UeXBlS2VybmluZy8+DQo8
L3c6Q29tcGF0aWJpbGl0eT4NCjxtOm1hdGhQcj4NCjxtOm1hdGhGb250IG06dmFsPSJDYW1icmlh
IE1hdGgiLz4NCjxtOmJya0JpbiBtOnZhbD0iYmVmb3JlIi8+DQo8bTpicmtCaW5TdWIgbTp2YWw9
IiYjNDU7LSIvPg0KPG06c21hbGxGcmFjIG06dmFsPSJvZmYiLz4NCjxtOmRpc3BEZWYvPg0KPG06
bE1hcmdpbiBtOnZhbD0iMCIvPg0KPG06ck1hcmdpbiBtOnZhbD0iMCIvPg0KPG06ZGVmSmMgbTp2
YWw9ImNlbnRlckdyb3VwIi8+DQo8bTp3cmFwSW5kZW50IG06dmFsPSIxNDQwIi8+DQo8bTppbnRM
aW0gbTp2YWw9InN1YlN1cCIvPg0KPG06bmFyeUxpbSBtOnZhbD0idW5kT3ZyIi8+DQo8L206bWF0
aFByPjwvdzpXb3JkRG9jdW1lbnQ+DQo8L3htbD48IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28g
OV0+PHhtbD4NCjx3OkxhdGVudFN0eWxlcyBEZWZMb2NrZWRTdGF0ZT0iZmFsc2UiIERlZlVuaGlk
ZVdoZW5Vc2VkPSJ0cnVlIiBEZWZTZW1pSGlkZGVuPSJ0cnVlIiBEZWZRRm9ybWF0PSJmYWxzZSIg
RGVmUHJpb3JpdHk9Ijk5IiBMYXRlbnRTdHlsZUNvdW50PSIyNjciPg0KPHc6THNkRXhjZXB0aW9u
IExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSIwIiBTZW1pSGlkZGVuPSJmYWxzZSIgVW5oaWRlV2hl
blVzZWQ9ImZhbHNlIiBRRm9ybWF0PSJ0cnVlIiBOYW1lPSJOb3JtYWwiLz4NCjx3OkxzZEV4Y2Vw
dGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iOSIgU2VtaUhpZGRlbj0iZmFsc2UiIFVuaGlk
ZVdoZW5Vc2VkPSJmYWxzZSIgUUZvcm1hdD0idHJ1ZSIgTmFtZT0iaGVhZGluZyAxIi8+DQo8dzpM
c2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjkiIFFGb3JtYXQ9InRydWUiIE5h
bWU9ImhlYWRpbmcgMiIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5
PSI5IiBRRm9ybWF0PSJ0cnVlIiBOYW1lPSJoZWFkaW5nIDMiLz4NCjx3OkxzZEV4Y2VwdGlvbiBM
b2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iOSIgUUZvcm1hdD0idHJ1ZSIgTmFtZT0iaGVhZGluZyA0
Ii8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjkiIFFGb3JtYXQ9
InRydWUiIE5hbWU9ImhlYWRpbmcgNSIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2Ui
IFByaW9yaXR5PSI5IiBRRm9ybWF0PSJ0cnVlIiBOYW1lPSJoZWFkaW5nIDYiLz4NCjx3OkxzZEV4
Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iOSIgUUZvcm1hdD0idHJ1ZSIgTmFtZT0i
aGVhZGluZyA3Ii8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9Ijki
IFFGb3JtYXQ9InRydWUiIE5hbWU9ImhlYWRpbmcgOCIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tl
ZD0iZmFsc2UiIFByaW9yaXR5PSI5IiBRRm9ybWF0PSJ0cnVlIiBOYW1lPSJoZWFkaW5nIDkiLz4N
Cjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iMzkiIE5hbWU9InRvYyAx
Ii8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjM5IiBOYW1lPSJ0
b2MgMiIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSIzOSIgTmFt
ZT0idG9jIDMiLz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iMzki
IE5hbWU9InRvYyA0Ii8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9
IjM5IiBOYW1lPSJ0b2MgNSIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9y
aXR5PSIzOSIgTmFtZT0idG9jIDYiLz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQ
cmlvcml0eT0iMzkiIE5hbWU9InRvYyA3Ii8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxz
ZSIgUHJpb3JpdHk9IjM5IiBOYW1lPSJ0b2MgOCIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tlZD0i
ZmFsc2UiIFByaW9yaXR5PSIzOSIgTmFtZT0idG9jIDkiLz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2Nr
ZWQ9ImZhbHNlIiBQcmlvcml0eT0iMzUiIFFGb3JtYXQ9InRydWUiIE5hbWU9ImNhcHRpb24iLz4N
Cjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iMTAiIFNlbWlIaWRkZW49
ImZhbHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIFFGb3JtYXQ9InRydWUiIE5hbWU9IlRpdGxl
Ii8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjEiIE5hbWU9IkRl
ZmF1bHQgUGFyYWdyYXBoIEZvbnQiLz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQ
cmlvcml0eT0iMTEiIFNlbWlIaWRkZW49ImZhbHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIFFG
b3JtYXQ9InRydWUiIE5hbWU9IlN1YnRpdGxlIi8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJm
YWxzZSIgUHJpb3JpdHk9IjIyIiBTZW1pSGlkZGVuPSJmYWxzZSIgVW5oaWRlV2hlblVzZWQ9ImZh
bHNlIiBRRm9ybWF0PSJ0cnVlIiBOYW1lPSJTdHJvbmciLz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2Nr
ZWQ9ImZhbHNlIiBQcmlvcml0eT0iMjAiIFNlbWlIaWRkZW49ImZhbHNlIiBVbmhpZGVXaGVuVXNl
ZD0iZmFsc2UiIFFGb3JtYXQ9InRydWUiIE5hbWU9IkVtcGhhc2lzIi8+DQo8dzpMc2RFeGNlcHRp
b24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjU5IiBTZW1pSGlkZGVuPSJmYWxzZSIgVW5oaWRl
V2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJUYWJsZSBHcmlkIi8+DQo8dzpMc2RFeGNlcHRpb24gTG9j
a2VkPSJmYWxzZSIgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJQbGFjZWhvbGRlciBUZXh0
Ii8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjEiIFNlbWlIaWRk
ZW49ImZhbHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIFFGb3JtYXQ9InRydWUiIE5hbWU9Ik5v
IFNwYWNpbmciLz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjAi
IFNlbWlIaWRkZW49ImZhbHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9IkxpZ2h0IFNo
YWRpbmciLz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjEiIFNl
bWlIaWRkZW49ImZhbHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9IkxpZ2h0IExpc3Qi
Lz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjIiIFNlbWlIaWRk
ZW49ImZhbHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9IkxpZ2h0IEdyaWQiLz4NCjx3
OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjMiIFNlbWlIaWRkZW49ImZh
bHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9Ik1lZGl1bSBTaGFkaW5nIDEiLz4NCjx3
OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjQiIFNlbWlIaWRkZW49ImZh
bHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9Ik1lZGl1bSBTaGFkaW5nIDIiLz4NCjx3
OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjUiIFNlbWlIaWRkZW49ImZh
bHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9Ik1lZGl1bSBMaXN0IDEiLz4NCjx3Okxz
ZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjYiIFNlbWlIaWRkZW49ImZhbHNl
IiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9Ik1lZGl1bSBMaXN0IDIiLz4NCjx3OkxzZEV4
Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjciIFNlbWlIaWRkZW49ImZhbHNlIiBV
bmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9Ik1lZGl1bSBHcmlkIDEiLz4NCjx3OkxzZEV4Y2Vw
dGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjgiIFNlbWlIaWRkZW49ImZhbHNlIiBVbmhp
ZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9Ik1lZGl1bSBHcmlkIDIiLz4NCjx3OkxzZEV4Y2VwdGlv
biBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjkiIFNlbWlIaWRkZW49ImZhbHNlIiBVbmhpZGVX
aGVuVXNlZD0iZmFsc2UiIE5hbWU9Ik1lZGl1bSBHcmlkIDMiLz4NCjx3OkxzZEV4Y2VwdGlvbiBM
b2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNzAiIFNlbWlIaWRkZW49ImZhbHNlIiBVbmhpZGVXaGVu
VXNlZD0iZmFsc2UiIE5hbWU9IkRhcmsgTGlzdCIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tlZD0i
ZmFsc2UiIFByaW9yaXR5PSI3MSIgU2VtaUhpZGRlbj0iZmFsc2UiIFVuaGlkZVdoZW5Vc2VkPSJm
YWxzZSIgTmFtZT0iQ29sb3JmdWwgU2hhZGluZyIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tlZD0i
ZmFsc2UiIFByaW9yaXR5PSI3MiIgU2VtaUhpZGRlbj0iZmFsc2UiIFVuaGlkZVdoZW5Vc2VkPSJm
YWxzZSIgTmFtZT0iQ29sb3JmdWwgTGlzdCIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFs
c2UiIFByaW9yaXR5PSI3MyIgU2VtaUhpZGRlbj0iZmFsc2UiIFVuaGlkZVdoZW5Vc2VkPSJmYWxz
ZSIgTmFtZT0iQ29sb3JmdWwgR3JpZCIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2Ui
IFByaW9yaXR5PSI2MCIgU2VtaUhpZGRlbj0iZmFsc2UiIFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIg
TmFtZT0iTGlnaHQgU2hhZGluZyBBY2NlbnQgMSIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tlZD0i
ZmFsc2UiIFByaW9yaXR5PSI2MSIgU2VtaUhpZGRlbj0iZmFsc2UiIFVuaGlkZVdoZW5Vc2VkPSJm
YWxzZSIgTmFtZT0iTGlnaHQgTGlzdCBBY2NlbnQgMSIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tl
ZD0iZmFsc2UiIFByaW9yaXR5PSI2MiIgU2VtaUhpZGRlbj0iZmFsc2UiIFVuaGlkZVdoZW5Vc2Vk
PSJmYWxzZSIgTmFtZT0iTGlnaHQgR3JpZCBBY2NlbnQgMSIvPg0KPHc6THNkRXhjZXB0aW9uIExv
Y2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2MyIgU2VtaUhpZGRlbj0iZmFsc2UiIFVuaGlkZVdoZW5V
c2VkPSJmYWxzZSIgTmFtZT0iTWVkaXVtIFNoYWRpbmcgMSBBY2NlbnQgMSIvPg0KPHc6THNkRXhj
ZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2NCIgU2VtaUhpZGRlbj0iZmFsc2UiIFVu
aGlkZVdoZW5Vc2VkPSJmYWxzZSIgTmFtZT0iTWVkaXVtIFNoYWRpbmcgMiBBY2NlbnQgMSIvPg0K
PHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2NSIgU2VtaUhpZGRlbj0i
ZmFsc2UiIFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIgTmFtZT0iTWVkaXVtIExpc3QgMSBBY2NlbnQg
MSIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFVuaGlkZVdoZW5Vc2VkPSJmYWxz
ZSIgTmFtZT0iUmV2aXNpb24iLz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlv
cml0eT0iMzQiIFNlbWlIaWRkZW49ImZhbHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIFFGb3Jt
YXQ9InRydWUiIE5hbWU9Ikxpc3QgUGFyYWdyYXBoIi8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2Vk
PSJmYWxzZSIgUHJpb3JpdHk9IjI5IiBTZW1pSGlkZGVuPSJmYWxzZSIgVW5oaWRlV2hlblVzZWQ9
ImZhbHNlIiBRRm9ybWF0PSJ0cnVlIiBOYW1lPSJRdW90ZSIvPg0KPHc6THNkRXhjZXB0aW9uIExv
Y2tlZD0iZmFsc2UiIFByaW9yaXR5PSIzMCIgU2VtaUhpZGRlbj0iZmFsc2UiIFVuaGlkZVdoZW5V
c2VkPSJmYWxzZSIgUUZvcm1hdD0idHJ1ZSIgTmFtZT0iSW50ZW5zZSBRdW90ZSIvPg0KPHc6THNk
RXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2NiIgU2VtaUhpZGRlbj0iZmFsc2Ui
IFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIgTmFtZT0iTWVkaXVtIExpc3QgMiBBY2NlbnQgMSIvPg0K
PHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2NyIgU2VtaUhpZGRlbj0i
ZmFsc2UiIFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIgTmFtZT0iTWVkaXVtIEdyaWQgMSBBY2NlbnQg
MSIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2OCIgU2VtaUhp
ZGRlbj0iZmFsc2UiIFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIgTmFtZT0iTWVkaXVtIEdyaWQgMiBB
Y2NlbnQgMSIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2OSIg
U2VtaUhpZGRlbj0iZmFsc2UiIFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIgTmFtZT0iTWVkaXVtIEdy
aWQgMyBBY2NlbnQgMSIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5
PSI3MCIgU2VtaUhpZGRlbj0iZmFsc2UiIFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIgTmFtZT0iRGFy
ayBMaXN0IEFjY2VudCAxIi8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3Jp
dHk9IjcxIiBTZW1pSGlkZGVuPSJmYWxzZSIgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJD
b2xvcmZ1bCBTaGFkaW5nIEFjY2VudCAxIi8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxz
ZSIgUHJpb3JpdHk9IjcyIiBTZW1pSGlkZGVuPSJmYWxzZSIgVW5oaWRlV2hlblVzZWQ9ImZhbHNl
IiBOYW1lPSJDb2xvcmZ1bCBMaXN0IEFjY2VudCAxIi8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2Vk
PSJmYWxzZSIgUHJpb3JpdHk9IjczIiBTZW1pSGlkZGVuPSJmYWxzZSIgVW5oaWRlV2hlblVzZWQ9
ImZhbHNlIiBOYW1lPSJDb2xvcmZ1bCBHcmlkIEFjY2VudCAxIi8+DQo8dzpMc2RFeGNlcHRpb24g
TG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjYwIiBTZW1pSGlkZGVuPSJmYWxzZSIgVW5oaWRlV2hl
blVzZWQ9ImZhbHNlIiBOYW1lPSJMaWdodCBTaGFkaW5nIEFjY2VudCAyIi8+DQo8dzpMc2RFeGNl
cHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjYxIiBTZW1pSGlkZGVuPSJmYWxzZSIgVW5o
aWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJMaWdodCBMaXN0IEFjY2VudCAyIi8+DQo8dzpMc2RF
eGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjYyIiBTZW1pSGlkZGVuPSJmYWxzZSIg
VW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJMaWdodCBHcmlkIEFjY2VudCAyIi8+DQo8dzpM
c2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjYzIiBTZW1pSGlkZGVuPSJmYWxz
ZSIgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJNZWRpdW0gU2hhZGluZyAxIEFjY2VudCAy
Ii8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjY0IiBTZW1pSGlk
ZGVuPSJmYWxzZSIgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJNZWRpdW0gU2hhZGluZyAy
IEFjY2VudCAyIi8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjY1
IiBTZW1pSGlkZGVuPSJmYWxzZSIgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJNZWRpdW0g
TGlzdCAxIEFjY2VudCAyIi8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3Jp
dHk9IjY2IiBTZW1pSGlkZGVuPSJmYWxzZSIgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJN
ZWRpdW0gTGlzdCAyIEFjY2VudCAyIi8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIg
UHJpb3JpdHk9IjY3IiBTZW1pSGlkZGVuPSJmYWxzZSIgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBO
YW1lPSJNZWRpdW0gR3JpZCAxIEFjY2VudCAyIi8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJm
YWxzZSIgUHJpb3JpdHk9IjY4IiBTZW1pSGlkZGVuPSJmYWxzZSIgVW5oaWRlV2hlblVzZWQ9ImZh
bHNlIiBOYW1lPSJNZWRpdW0gR3JpZCAyIEFjY2VudCAyIi8+DQo8dzpMc2RFeGNlcHRpb24gTG9j
a2VkPSJmYWxzZSIgUHJpb3JpdHk9IjY5IiBTZW1pSGlkZGVuPSJmYWxzZSIgVW5oaWRlV2hlblVz
ZWQ9ImZhbHNlIiBOYW1lPSJNZWRpdW0gR3JpZCAzIEFjY2VudCAyIi8+DQo8dzpMc2RFeGNlcHRp
b24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjcwIiBTZW1pSGlkZGVuPSJmYWxzZSIgVW5oaWRl
V2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJEYXJrIExpc3QgQWNjZW50IDIiLz4NCjx3OkxzZEV4Y2Vw
dGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNzEiIFNlbWlIaWRkZW49ImZhbHNlIiBVbmhp
ZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9IkNvbG9yZnVsIFNoYWRpbmcgQWNjZW50IDIiLz4NCjx3
OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNzIiIFNlbWlIaWRkZW49ImZh
bHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9IkNvbG9yZnVsIExpc3QgQWNjZW50IDIi
Lz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNzMiIFNlbWlIaWRk
ZW49ImZhbHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9IkNvbG9yZnVsIEdyaWQgQWNj
ZW50IDIiLz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjAiIFNl
bWlIaWRkZW49ImZhbHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9IkxpZ2h0IFNoYWRp
bmcgQWNjZW50IDMiLz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0i
NjEiIFNlbWlIaWRkZW49ImZhbHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9IkxpZ2h0
IExpc3QgQWNjZW50IDMiLz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0
eT0iNjIiIFNlbWlIaWRkZW49ImZhbHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9Ikxp
Z2h0IEdyaWQgQWNjZW50IDMiLz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlv
cml0eT0iNjMiIFNlbWlIaWRkZW49ImZhbHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9
Ik1lZGl1bSBTaGFkaW5nIDEgQWNjZW50IDMiLz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZh
bHNlIiBQcmlvcml0eT0iNjQiIFNlbWlIaWRkZW49ImZhbHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFs
c2UiIE5hbWU9Ik1lZGl1bSBTaGFkaW5nIDIgQWNjZW50IDMiLz4NCjx3OkxzZEV4Y2VwdGlvbiBM
b2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjUiIFNlbWlIaWRkZW49ImZhbHNlIiBVbmhpZGVXaGVu
VXNlZD0iZmFsc2UiIE5hbWU9Ik1lZGl1bSBMaXN0IDEgQWNjZW50IDMiLz4NCjx3OkxzZEV4Y2Vw
dGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjYiIFNlbWlIaWRkZW49ImZhbHNlIiBVbmhp
ZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9Ik1lZGl1bSBMaXN0IDIgQWNjZW50IDMiLz4NCjx3Okxz
ZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjciIFNlbWlIaWRkZW49ImZhbHNl
IiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9Ik1lZGl1bSBHcmlkIDEgQWNjZW50IDMiLz4N
Cjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjgiIFNlbWlIaWRkZW49
ImZhbHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9Ik1lZGl1bSBHcmlkIDIgQWNjZW50
IDMiLz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjkiIFNlbWlI
aWRkZW49ImZhbHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9Ik1lZGl1bSBHcmlkIDMg
QWNjZW50IDMiLz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNzAi
IFNlbWlIaWRkZW49ImZhbHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9IkRhcmsgTGlz
dCBBY2NlbnQgMyIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI3
MSIgU2VtaUhpZGRlbj0iZmFsc2UiIFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIgTmFtZT0iQ29sb3Jm
dWwgU2hhZGluZyBBY2NlbnQgMyIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFBy
aW9yaXR5PSI3MiIgU2VtaUhpZGRlbj0iZmFsc2UiIFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIgTmFt
ZT0iQ29sb3JmdWwgTGlzdCBBY2NlbnQgMyIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFs
c2UiIFByaW9yaXR5PSI3MyIgU2VtaUhpZGRlbj0iZmFsc2UiIFVuaGlkZVdoZW5Vc2VkPSJmYWxz
ZSIgTmFtZT0iQ29sb3JmdWwgR3JpZCBBY2NlbnQgMyIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tl
ZD0iZmFsc2UiIFByaW9yaXR5PSI2MCIgU2VtaUhpZGRlbj0iZmFsc2UiIFVuaGlkZVdoZW5Vc2Vk
PSJmYWxzZSIgTmFtZT0iTGlnaHQgU2hhZGluZyBBY2NlbnQgNCIvPg0KPHc6THNkRXhjZXB0aW9u
IExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2MSIgU2VtaUhpZGRlbj0iZmFsc2UiIFVuaGlkZVdo
ZW5Vc2VkPSJmYWxzZSIgTmFtZT0iTGlnaHQgTGlzdCBBY2NlbnQgNCIvPg0KPHc6THNkRXhjZXB0
aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2MiIgU2VtaUhpZGRlbj0iZmFsc2UiIFVuaGlk
ZVdoZW5Vc2VkPSJmYWxzZSIgTmFtZT0iTGlnaHQgR3JpZCBBY2NlbnQgNCIvPg0KPHc6THNkRXhj
ZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2MyIgU2VtaUhpZGRlbj0iZmFsc2UiIFVu
aGlkZVdoZW5Vc2VkPSJmYWxzZSIgTmFtZT0iTWVkaXVtIFNoYWRpbmcgMSBBY2NlbnQgNCIvPg0K
PHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2NCIgU2VtaUhpZGRlbj0i
ZmFsc2UiIFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIgTmFtZT0iTWVkaXVtIFNoYWRpbmcgMiBBY2Nl
bnQgNCIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2NSIgU2Vt
aUhpZGRlbj0iZmFsc2UiIFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIgTmFtZT0iTWVkaXVtIExpc3Qg
MSBBY2NlbnQgNCIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2
NiIgU2VtaUhpZGRlbj0iZmFsc2UiIFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIgTmFtZT0iTWVkaXVt
IExpc3QgMiBBY2NlbnQgNCIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9y
aXR5PSI2NyIgU2VtaUhpZGRlbj0iZmFsc2UiIFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIgTmFtZT0i
TWVkaXVtIEdyaWQgMSBBY2NlbnQgNCIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2Ui
IFByaW9yaXR5PSI2OCIgU2VtaUhpZGRlbj0iZmFsc2UiIFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIg
TmFtZT0iTWVkaXVtIEdyaWQgMiBBY2NlbnQgNCIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tlZD0i
ZmFsc2UiIFByaW9yaXR5PSI2OSIgU2VtaUhpZGRlbj0iZmFsc2UiIFVuaGlkZVdoZW5Vc2VkPSJm
YWxzZSIgTmFtZT0iTWVkaXVtIEdyaWQgMyBBY2NlbnQgNCIvPg0KPHc6THNkRXhjZXB0aW9uIExv
Y2tlZD0iZmFsc2UiIFByaW9yaXR5PSI3MCIgU2VtaUhpZGRlbj0iZmFsc2UiIFVuaGlkZVdoZW5V
c2VkPSJmYWxzZSIgTmFtZT0iRGFyayBMaXN0IEFjY2VudCA0Ii8+DQo8dzpMc2RFeGNlcHRpb24g
TG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjcxIiBTZW1pSGlkZGVuPSJmYWxzZSIgVW5oaWRlV2hl
blVzZWQ9ImZhbHNlIiBOYW1lPSJDb2xvcmZ1bCBTaGFkaW5nIEFjY2VudCA0Ii8+DQo8dzpMc2RF
eGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjcyIiBTZW1pSGlkZGVuPSJmYWxzZSIg
VW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJDb2xvcmZ1bCBMaXN0IEFjY2VudCA0Ii8+DQo8
dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjczIiBTZW1pSGlkZGVuPSJm
YWxzZSIgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJDb2xvcmZ1bCBHcmlkIEFjY2VudCA0
Ii8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjYwIiBTZW1pSGlk
ZGVuPSJmYWxzZSIgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJMaWdodCBTaGFkaW5nIEFj
Y2VudCA1Ii8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjYxIiBT
ZW1pSGlkZGVuPSJmYWxzZSIgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJMaWdodCBMaXN0
IEFjY2VudCA1Ii8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjYy
IiBTZW1pSGlkZGVuPSJmYWxzZSIgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJMaWdodCBH
cmlkIEFjY2VudCA1Ii8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9
IjYzIiBTZW1pSGlkZGVuPSJmYWxzZSIgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJNZWRp
dW0gU2hhZGluZyAxIEFjY2VudCA1Ii8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIg
UHJpb3JpdHk9IjY0IiBTZW1pSGlkZGVuPSJmYWxzZSIgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBO
YW1lPSJNZWRpdW0gU2hhZGluZyAyIEFjY2VudCA1Ii8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2Vk
PSJmYWxzZSIgUHJpb3JpdHk9IjY1IiBTZW1pSGlkZGVuPSJmYWxzZSIgVW5oaWRlV2hlblVzZWQ9
ImZhbHNlIiBOYW1lPSJNZWRpdW0gTGlzdCAxIEFjY2VudCA1Ii8+DQo8dzpMc2RFeGNlcHRpb24g
TG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjY2IiBTZW1pSGlkZGVuPSJmYWxzZSIgVW5oaWRlV2hl
blVzZWQ9ImZhbHNlIiBOYW1lPSJNZWRpdW0gTGlzdCAyIEFjY2VudCA1Ii8+DQo8dzpMc2RFeGNl
cHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjY3IiBTZW1pSGlkZGVuPSJmYWxzZSIgVW5o
aWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJNZWRpdW0gR3JpZCAxIEFjY2VudCA1Ii8+DQo8dzpM
c2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjY4IiBTZW1pSGlkZGVuPSJmYWxz
ZSIgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJNZWRpdW0gR3JpZCAyIEFjY2VudCA1Ii8+
DQo8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjY5IiBTZW1pSGlkZGVu
PSJmYWxzZSIgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJNZWRpdW0gR3JpZCAzIEFjY2Vu
dCA1Ii8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjcwIiBTZW1p
SGlkZGVuPSJmYWxzZSIgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJEYXJrIExpc3QgQWNj
ZW50IDUiLz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNzEiIFNl
bWlIaWRkZW49ImZhbHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9IkNvbG9yZnVsIFNo
YWRpbmcgQWNjZW50IDUiLz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0
eT0iNzIiIFNlbWlIaWRkZW49ImZhbHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9IkNv
bG9yZnVsIExpc3QgQWNjZW50IDUiLz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQ
cmlvcml0eT0iNzMiIFNlbWlIaWRkZW49ImZhbHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5h
bWU9IkNvbG9yZnVsIEdyaWQgQWNjZW50IDUiLz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZh
bHNlIiBQcmlvcml0eT0iNjAiIFNlbWlIaWRkZW49ImZhbHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFs
c2UiIE5hbWU9IkxpZ2h0IFNoYWRpbmcgQWNjZW50IDYiLz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2Nr
ZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjEiIFNlbWlIaWRkZW49ImZhbHNlIiBVbmhpZGVXaGVuVXNl
ZD0iZmFsc2UiIE5hbWU9IkxpZ2h0IExpc3QgQWNjZW50IDYiLz4NCjx3OkxzZEV4Y2VwdGlvbiBM
b2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjIiIFNlbWlIaWRkZW49ImZhbHNlIiBVbmhpZGVXaGVu
VXNlZD0iZmFsc2UiIE5hbWU9IkxpZ2h0IEdyaWQgQWNjZW50IDYiLz4NCjx3OkxzZEV4Y2VwdGlv
biBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjMiIFNlbWlIaWRkZW49ImZhbHNlIiBVbmhpZGVX
aGVuVXNlZD0iZmFsc2UiIE5hbWU9Ik1lZGl1bSBTaGFkaW5nIDEgQWNjZW50IDYiLz4NCjx3Okxz
ZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjQiIFNlbWlIaWRkZW49ImZhbHNl
IiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9Ik1lZGl1bSBTaGFkaW5nIDIgQWNjZW50IDYi
Lz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjUiIFNlbWlIaWRk
ZW49ImZhbHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9Ik1lZGl1bSBMaXN0IDEgQWNj
ZW50IDYiLz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjYiIFNl
bWlIaWRkZW49ImZhbHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9Ik1lZGl1bSBMaXN0
IDIgQWNjZW50IDYiLz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0i
NjciIFNlbWlIaWRkZW49ImZhbHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9Ik1lZGl1
bSBHcmlkIDEgQWNjZW50IDYiLz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlv
cml0eT0iNjgiIFNlbWlIaWRkZW49ImZhbHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9
Ik1lZGl1bSBHcmlkIDIgQWNjZW50IDYiLz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNl
IiBQcmlvcml0eT0iNjkiIFNlbWlIaWRkZW49ImZhbHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2Ui
IE5hbWU9Ik1lZGl1bSBHcmlkIDMgQWNjZW50IDYiLz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9
ImZhbHNlIiBQcmlvcml0eT0iNzAiIFNlbWlIaWRkZW49ImZhbHNlIiBVbmhpZGVXaGVuVXNlZD0i
ZmFsc2UiIE5hbWU9IkRhcmsgTGlzdCBBY2NlbnQgNiIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tl
ZD0iZmFsc2UiIFByaW9yaXR5PSI3MSIgU2VtaUhpZGRlbj0iZmFsc2UiIFVuaGlkZVdoZW5Vc2Vk
PSJmYWxzZSIgTmFtZT0iQ29sb3JmdWwgU2hhZGluZyBBY2NlbnQgNiIvPg0KPHc6THNkRXhjZXB0
aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI3MiIgU2VtaUhpZGRlbj0iZmFsc2UiIFVuaGlk
ZVdoZW5Vc2VkPSJmYWxzZSIgTmFtZT0iQ29sb3JmdWwgTGlzdCBBY2NlbnQgNiIvPg0KPHc6THNk
RXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI3MyIgU2VtaUhpZGRlbj0iZmFsc2Ui
IFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIgTmFtZT0iQ29sb3JmdWwgR3JpZCBBY2NlbnQgNiIvPg0K
PHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSIxOSIgU2VtaUhpZGRlbj0i
ZmFsc2UiIFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIgUUZvcm1hdD0idHJ1ZSIgTmFtZT0iU3VidGxl
IEVtcGhhc2lzIi8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjIx
IiBTZW1pSGlkZGVuPSJmYWxzZSIgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBRRm9ybWF0PSJ0cnVl
IiBOYW1lPSJJbnRlbnNlIEVtcGhhc2lzIi8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxz
ZSIgUHJpb3JpdHk9IjMxIiBTZW1pSGlkZGVuPSJmYWxzZSIgVW5oaWRlV2hlblVzZWQ9ImZhbHNl
IiBRRm9ybWF0PSJ0cnVlIiBOYW1lPSJTdWJ0bGUgUmVmZXJlbmNlIi8+DQo8dzpMc2RFeGNlcHRp
b24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjMyIiBTZW1pSGlkZGVuPSJmYWxzZSIgVW5oaWRl
V2hlblVzZWQ9ImZhbHNlIiBRRm9ybWF0PSJ0cnVlIiBOYW1lPSJJbnRlbnNlIFJlZmVyZW5jZSIv
Pg0KPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSIzMyIgU2VtaUhpZGRl
bj0iZmFsc2UiIFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIgUUZvcm1hdD0idHJ1ZSIgTmFtZT0iQm9v
ayBUaXRsZSIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSIzNyIg
TmFtZT0iQmlibGlvZ3JhcGh5Ii8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJp
b3JpdHk9IjM5IiBRRm9ybWF0PSJ0cnVlIiBOYW1lPSJUT0MgSGVhZGluZyIvPg0KPC93OkxhdGVu
dFN0eWxlcz4NCjwveG1sPjwhW2VuZGlmXS0tPjxzdHlsZT48IS0tDQovKiBGb250IERlZmluaXRp
b25zICovDQpAZm9udC1mYWNlDQoJe2ZvbnQtZmFtaWx5OkNhbGlicmk7DQoJcGFub3NlLTE6MiAx
NSA1IDIgMiAyIDQgMyAyIDQ7DQoJbXNvLWZvbnQtYWx0OiJBcmlhbCBSb3VuZGVkIE1UIEJvbGQi
Ow0KCW1zby1mb250LWNoYXJzZXQ6MDsNCgltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsN
Cgltc28tZm9udC1waXRjaDp2YXJpYWJsZTsNCgltc28tZm9udC1zaWduYXR1cmU6LTUzNjg3MDE0
NSAxMDczNzg2MTExIDEgMCA0MTUgMDt9DQpAZm9udC1mYWNlDQoJe2ZvbnQtZmFtaWx5OlRhaG9t
YTsNCglwYW5vc2UtMToyIDExIDYgNCAzIDUgNCA0IDIgNDsNCgltc28tZm9udC1jaGFyc2V0OjA7
DQoJbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6c3dpc3M7DQoJbXNvLWZvbnQtcGl0Y2g6dmFyaWFi
bGU7DQoJbXNvLWZvbnQtc2lnbmF0dXJlOi01MjAwODE2NjUgLTEwNzM3MTcxNTcgNDEgMCA2NjA0
NyAwO30NCi8qIFN0eWxlIERlZmluaXRpb25zICovDQpwLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFs
LCBkaXYuTXNvTm9ybWFsDQoJe21zby1zdHlsZS11bmhpZGU6bm87DQoJbXNvLXN0eWxlLXFmb3Jt
YXQ6eWVzOw0KCW1zby1zdHlsZS1wYXJlbnQ6IiI7DQoJbWFyZ2luOjBjbTsNCgltYXJnaW4tYm90
dG9tOi4wMDAxcHQ7DQoJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOw0KCWZvbnQtc2l6ZTox
Mi4wcHQ7DQoJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiIsInNlcmlmIjsNCgltc28tZmFy
ZWFzdC1mb250LWZhbWlseTpDYWxpYnJpO30NCmE6bGluaywgc3Bhbi5Nc29IeXBlcmxpbmsNCgl7
bXNvLXN0eWxlLW5vc2hvdzp5ZXM7DQoJbXNvLXN0eWxlLXByaW9yaXR5Ojk5Ow0KCWNvbG9yOmJs
dWU7DQoJdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTsNCgl0ZXh0LXVuZGVybGluZTpzaW5nbGU7
fQ0KYTp2aXNpdGVkLCBzcGFuLk1zb0h5cGVybGlua0ZvbGxvd2VkDQoJe21zby1zdHlsZS1ub3No
b3c6eWVzOw0KCW1zby1zdHlsZS1wcmlvcml0eTo5OTsNCgljb2xvcjpwdXJwbGU7DQoJdGV4dC1k
ZWNvcmF0aW9uOnVuZGVybGluZTsNCgl0ZXh0LXVuZGVybGluZTpzaW5nbGU7fQ0Kc3Bhbi5FbWFp
bFN0eWxlMTcNCgl7bXNvLXN0eWxlLXR5cGU6cGVyc29uYWwtcmVwbHk7DQoJbXNvLXN0eWxlLW5v
c2hvdzp5ZXM7DQoJbXNvLXN0eWxlLXVuaGlkZTpubzsNCgltc28tYW5zaS1mb250LXNpemU6MTEu
MHB0Ow0KCW1zby1iaWRpLWZvbnQtc2l6ZToxMS4wcHQ7DQoJZm9udC1mYW1pbHk6IkNhbGlicmki
LCJzYW5zLXNlcmlmIjsNCgltc28tYXNjaWktZm9udC1mYW1pbHk6Q2FsaWJyaTsNCgltc28tZmFy
ZWFzdC1mb250LWZhbWlseTpDYWxpYnJpOw0KCW1zby1oYW5zaS1mb250LWZhbWlseTpDYWxpYnJp
Ow0KCW1zby1iaWRpLWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOw0KCWNvbG9yOiMxRjQ5
N0Q7fQ0KLk1zb0NocERlZmF1bHQNCgl7bXNvLXN0eWxlLXR5cGU6ZXhwb3J0LW9ubHk7DQoJbXNv
LWRlZmF1bHQtcHJvcHM6eWVzOw0KCWZvbnQtZmFtaWx5OiJDYWxpYnJpIiwic2Fucy1zZXJpZiI7
DQoJbXNvLWFzY2lpLWZvbnQtZmFtaWx5OkNhbGlicmk7DQoJbXNvLWZhcmVhc3QtZm9udC1mYW1p
bHk6Q2FsaWJyaTsNCgltc28taGFuc2ktZm9udC1mYW1pbHk6Q2FsaWJyaTsNCgltc28tYmlkaS1m
b250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsNCgltc28tZmFyZWFzdC1sYW5ndWFnZTpFTi1V
Uzt9DQpAcGFnZSBXb3JkU2VjdGlvbjENCgl7c2l6ZTo2MTIuMHB0IDc5Mi4wcHQ7DQoJbWFyZ2lu
OjcyLjBwdCA3Mi4wcHQgNzIuMHB0IDcyLjBwdDsNCgltc28taGVhZGVyLW1hcmdpbjozNi4wcHQ7
DQoJbXNvLWZvb3Rlci1tYXJnaW46MzYuMHB0Ow0KCW1zby1wYXBlci1zb3VyY2U6MDt9DQpkaXYu
V29yZFNlY3Rpb24xDQoJe3BhZ2U6V29yZFNlY3Rpb24xO30NCi0tPjwvc3R5bGU+PCEtLVtpZiBn
dGUgbXNvIDEwXT48c3R5bGU+LyogU3R5bGUgRGVmaW5pdGlvbnMgKi8NCnRhYmxlLk1zb05vcm1h
bFRhYmxlDQoJe21zby1zdHlsZS1uYW1lOiJUYWJsZSBOb3JtYWwiOw0KCW1zby10c3R5bGUtcm93
YmFuZC1zaXplOjA7DQoJbXNvLXRzdHlsZS1jb2xiYW5kLXNpemU6MDsNCgltc28tc3R5bGUtbm9z
aG93OnllczsNCgltc28tc3R5bGUtcHJpb3JpdHk6OTk7DQoJbXNvLXN0eWxlLXBhcmVudDoiIjsN
Cgltc28tcGFkZGluZy1hbHQ6MGNtIDUuNHB0IDBjbSA1LjRwdDsNCgltc28tcGFyYS1tYXJnaW46
MGNtOw0KCW1zby1wYXJhLW1hcmdpbi1ib3R0b206LjAwMDFwdDsNCgltc28tcGFnaW5hdGlvbjp3
aWRvdy1vcnBoYW47DQoJZm9udC1zaXplOjExLjBwdDsNCglmb250LWZhbWlseToiQ2FsaWJyaSIs
InNhbnMtc2VyaWYiOw0KCW1zby1hc2NpaS1mb250LWZhbWlseTpDYWxpYnJpOw0KCW1zby1oYW5z
aS1mb250LWZhbWlseTpDYWxpYnJpOw0KCW1zby1mYXJlYXN0LWxhbmd1YWdlOkVOLVVTO30NCjwv
c3R5bGU+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+DQo8bzpzaGFwZWRlZmF1
bHRzIHY6ZXh0PSJlZGl0IiBzcGlkbWF4PSIxMDI2IiAvPg0KPC94bWw+PCFbZW5kaWZdLS0+PCEt
LVtpZiBndGUgbXNvIDldPjx4bWw+DQo8bzpzaGFwZWxheW91dCB2OmV4dD0iZWRpdCI+DQo8bzpp
ZG1hcCB2OmV4dD0iZWRpdCIgZGF0YT0iMSIgLz4NCjwvbzpzaGFwZWxheW91dD48L3htbD48IVtl
bmRpZl0tLT4NCjwvaGVhZD4NCjxib2R5IGxhbmc9IkVOLUdCIiBsaW5rPSJibHVlIiB2bGluaz0i
cHVycGxlIiBzdHlsZT0idGFiLWludGVydmFsOjM2LjBwdCI+DQo8ZGl2IGNsYXNzPSJXb3JkU2Vj
dGlvbjEiPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PGZvbnQgc2l6ZT0iMiIgY29sb3I9IiMxZjQ5
N2QiIGZhY2U9IkNhbGlicmkiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFt
aWx5OiZxdW90O0NhbGlicmkmcXVvdDssJnF1b3Q7c2Fucy1zZXJpZiZxdW90Ozttc28tYmlkaS1m
b250LWZhbWlseTomcXVvdDtUaW1lcyBOZXcgUm9tYW4mcXVvdDs7Y29sb3I6IzFGNDk3RCI+VmVy
eSBnbGFkIHRvIGhlYXIgaXQgYWxsIHdvcmtlZCB3ZWxsLiBUaGFua3MgZm9yIHRoZSBlbmNvdXJh
Z2VtZW50ITxvOnA+PC9vOnA+PC9zcGFuPjwvZm9udD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFs
Ij48Zm9udCBzaXplPSIyIiBjb2xvcj0iIzFmNDk3ZCIgZmFjZT0iQ2FsaWJyaSI+PHNwYW4gc3R5
bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OywmcXVv
dDtzYW5zLXNlcmlmJnF1b3Q7O21zby1iaWRpLWZvbnQtZmFtaWx5OiZxdW90O1RpbWVzIE5ldyBS
b21hbiZxdW90Oztjb2xvcjojMUY0OTdEIj48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L2ZvbnQ+
PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PGZvbnQgc2l6ZT0iMiIgY29sb3I9IiMxZjQ5N2Qi
IGZhY2U9IkNhbGlicmkiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5
OiZxdW90O0NhbGlicmkmcXVvdDssJnF1b3Q7c2Fucy1zZXJpZiZxdW90Ozttc28tYmlkaS1mb250
LWZhbWlseTomcXVvdDtUaW1lcyBOZXcgUm9tYW4mcXVvdDs7Y29sb3I6IzFGNDk3RCI+PHNwYW4g
c3R5bGU9Im1zby1zcGFjZXJ1bjp5ZXMiPiZuYnNwOw0KPC9zcGFuPlBhdWw8bzpwPjwvbzpwPjwv
c3Bhbj48L2ZvbnQ+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PGZvbnQgc2l6ZT0iMiIgY29s
b3I9IiMxZjQ5N2QiIGZhY2U9IkNhbGlicmkiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0
O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssJnF1b3Q7c2Fucy1zZXJpZiZxdW90Oztt
c28tYmlkaS1mb250LWZhbWlseTomcXVvdDtUaW1lcyBOZXcgUm9tYW4mcXVvdDs7Y29sb3I6IzFG
NDk3RCI+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9mb250PjwvcD4NCjxkaXYgc3R5bGU9ImJv
cmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIGJsdWUgMS41cHQ7cGFkZGluZzowY20gMGNtIDBj
bSA0LjBwdCI+DQo8ZGl2Pg0KPGRpdiBzdHlsZT0iYm9yZGVyOm5vbmU7Ym9yZGVyLXRvcDpzb2xp
ZCAjQjVDNERGIDEuMHB0O3BhZGRpbmc6My4wcHQgMGNtIDBjbSAwY20iPg0KPHAgY2xhc3M9Ik1z
b05vcm1hbCI+PGI+PGZvbnQgc2l6ZT0iMiIgZmFjZT0iVGFob21hIj48c3BhbiBsYW5nPSJFTi1V
UyIgc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7VGFob21hJnF1b3Q7
LCZxdW90O3NhbnMtc2VyaWYmcXVvdDs7bXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6JnF1b3Q7VGlt
ZXMgTmV3IFJvbWFuJnF1b3Q7O21zby1hbnNpLWxhbmd1YWdlOkVOLVVTO2ZvbnQtd2VpZ2h0OmJv
bGQiPkZyb206PC9zcGFuPjwvZm9udD48L2I+PGZvbnQgc2l6ZT0iMiIgZmFjZT0iVGFob21hIj48
c3BhbiBsYW5nPSJFTi1VUyIgc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6JnF1
b3Q7VGFob21hJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYmcXVvdDs7bXNvLWZhcmVhc3QtZm9udC1m
YW1pbHk6JnF1b3Q7VGltZXMgTmV3IFJvbWFuJnF1b3Q7O21zby1hbnNpLWxhbmd1YWdlOkVOLVVT
Ij4NCiBKb2huIEphc2VyIFttYWlsdG86am9obkBqYXNlci5uZXRdIDxicj4NCjxiPjxzcGFuIHN0
eWxlPSJmb250LXdlaWdodDpib2xkIj5TZW50Ojwvc3Bhbj48L2I+IDE2IE5vdmVtYmVyIDIwMTUg
MTg6NDY8YnI+DQo8Yj48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6Ym9sZCI+VG86PC9zcGFuPjwv
Yj4gUGF1bCBEdXJyYW50OyBGYWJpbyBGYW50b25pPGJyPg0KPGI+PHNwYW4gc3R5bGU9ImZvbnQt
d2VpZ2h0OmJvbGQiPkNjOjwvc3Bhbj48L2I+IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0
Lm9yZzxicj4NCjxiPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDpib2xkIj5TdWJqZWN0Ojwvc3Bh
bj48L2I+IFJlOiBbd2luLXB2LWRldmVsXSBTaWduaW5nIG5ldyB3aW5wdiBkcml2ZXJzPG86cD48
L286cD48L3NwYW4+PC9mb250PjwvcD4NCjwvZGl2Pg0KPC9kaXY+DQo8cCBjbGFzcz0iTXNvTm9y
bWFsIj48Zm9udCBzaXplPSIzIiBmYWNlPSJUaW1lcyBOZXcgUm9tYW4iPjxzcGFuIHN0eWxlPSJm
b250LXNpemU6MTIuMHB0Ij48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L2ZvbnQ+PC9wPg0KPGRp
dj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxmb250IHNpemU9IjMiIGZhY2U9IlRpbWVzIE5ldyBS
b21hbiI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMi4wcHQiPk15IHRlc3QgV2luIDEwIHN5c3Rl
bSB3aXRoIDguMS4wLnh4IFBWIGRyaXZlcnMganVzdCBkaWQgdGhlIGZpcnN0IGxhcmdlIChub24g
aW5zaWRlcikgdXBncmFkZSBzaW5jZSBHQSAoYnVpbGQgMTAyNDApIHRvIGJ1aWxkIDEwNTg2LCBh
bmQgSSBhbSBoYXBweSB0byBzYXksIHRlc3Qgc2lnbmluZw0KIHJlbWFpbmVkIGhvbm9yZWQsIGFu
ZCB0aGUgc3lzdGVtIHVwZ3JhZGVkIG5vcm1hbGx5LiZuYnNwOyBWZXJ5IGVuY291cmFnaW5nLiZu
YnNwOyBIYXRzIG9mZiB0byB0aGUgUFYgZGV2IHRlYW0uPG86cD48L286cD48L3NwYW4+PC9mb250
PjwvcD4NCjwvZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PGZvbnQgc2l6ZT0iMyIgZmFjZT0i
VGltZXMgTmV3IFJvbWFuIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEyLjBwdCI+PG86cD4mbmJz
cDs8L286cD48L3NwYW4+PC9mb250PjwvcD4NCjxkaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05v
cm1hbCI+PGZvbnQgc2l6ZT0iMyIgZmFjZT0iVGltZXMgTmV3IFJvbWFuIj48c3BhbiBzdHlsZT0i
Zm9udC1zaXplOjEyLjBwdCI+T24gTW9uLCBPY3QgMTIsIDIwMTUgYXQgNDoxOSBBTSBQYXVsIER1
cnJhbnQgJmx0OzxhIGhyZWY9Im1haWx0bzpQYXVsLkR1cnJhbnRAY2l0cml4LmNvbSI+UGF1bC5E
dXJyYW50QGNpdHJpeC5jb208L2E+Jmd0OyB3cm90ZTo8bzpwPjwvbzpwPjwvc3Bhbj48L2ZvbnQ+
PC9wPg0KPC9kaXY+DQo8YmxvY2txdW90ZSBzdHlsZT0iYm9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6
c29saWQgI0NDQ0NDQyAxLjBwdDttc28tYm9yZGVyLWxlZnQtYWx0OnNvbGlkICNDQ0NDQ0MgLjc1
cHQ7cGFkZGluZzowY20gMGNtIDBjbSA2LjBwdDttYXJnaW4tbGVmdDo0LjhwdDttYXJnaW4tcmln
aHQ6MGNtIj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxmb250IHNpemU9IjMiIGZhY2U9IlRpbWVz
IE5ldyBSb21hbiI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMi4wcHQiPkRlLWh0bWxpbmcuLi48
YnI+DQo8YnI+DQotLS0tLTxicj4NCltzbmlwXTxicj4NCjxicj4NCkFueSBuZXdzIG9uIHNpZ25l
ZCBkcml2ZXJzPzxicj4NCkFjdHVhbGx5IHRoZSBhdXRvbWF0aWMgYnVpbGQgb25seSB3aXRoIG5l
dyBjb21taXQgaW4gbWFzdGVyIGJyYW5jaCBhbmQga2VlcCBvbmx5IHRoZSBsYXRlc3QgYnVpbGQs
IGlzIHBvc3NpYmxlIHRvIGltcHJvdmUgaXQgcGxlYXNlPzxicj4NCkZvciBleGFtcGxlIEkgdGhp
bmsgaXMgZ29vZCBidWlsZCBhbHNvIGxhdGVzdCBjb21taXQgb2Ygc3RhZ2luZy04LjEgYnJhbmNo
IGFuZCBhbGwgdGFncyAoa2VlZXBpbmcgYWxsIHJjIGFuZCBzdGFibGUgYnVpbGQgaW4gdGhpcyBj
YXNlKS48YnI+DQpUaGlzIHdpbGwgYmUgZWFzaWVyIGFuZCBmYXN0ZXIgdGVzdCBhbHNvIHJjIGJ1
aWxkcyBhbmQgYW55IGNvbW1pdCBmb3IgbmV4dCBzdGFibGUgdmVyc2lvbnMuPGJyPg0KLS0tLS08
YnI+DQo8YnI+DQpObyBuZXdzIG9uIFhlblByb2plY3QgZHJpdmVyIHNpZ25pbmcuIFRoZXJlIHNo
b3VsZCBiZSBzb21lIHNpZ25lZCBDaXRyaXggYnJhbmRlZCBkcml2ZXJzIHNvb24gdGhvdWdoIGFu
ZCB0aGVzZSBzaG91bGQgd29yayBvbiBhbnkgWGVuIHBsYXRmb3JtLCBub3QganVzdCBYZW5TZXJ2
ZXIuPGJyPg0KPGJyPg0KJm5ic3A7IFBhdWw8YnI+DQo8YnI+DQo8YnI+DQpfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXzxicj4NCndpbi1wdi1kZXZlbCBtYWls
aW5nIGxpc3Q8YnI+DQo8YSBocmVmPSJtYWlsdG86d2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2pl
Y3Qub3JnIiB0YXJnZXQ9Il9ibGFuayI+d2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3Jn
PC9hPjxicj4NCjxhIGhyZWY9Imh0dHA6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9jZ2ktYmluL21h
aWxtYW4vbGlzdGluZm8vd2luLXB2LWRldmVsIiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL2xpc3Rz
LnhlbnByb2plY3Qub3JnL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby93aW4tcHYtZGV2ZWw8L2E+
PG86cD48L286cD48L3NwYW4+PC9mb250PjwvcD4NCjwvYmxvY2txdW90ZT4NCjwvZGl2Pg0KPC9k
aXY+DQo8L2Rpdj4NCjwvYm9keT4NCjwvaHRtbD4NCg==

--_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F674D2CAMSPEX01CL01cit_--


--===============6926353541008986977==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--===============6926353541008986977==--


From win-pv-devel-bounces@lists.xenproject.org Tue Nov 17 09:51:12 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 17 Nov 2015 09:51:12 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1Zycut-0001gP-8V; Tue, 17 Nov 2015 09:51:11 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=7567d34c5=Paul.Durrant@citrix.com>)
	id 1Zycur-0001ep-MA
	for win-pv-devel@lists.xenproject.org; Tue, 17 Nov 2015 09:51:10 +0000
Received: from [193.109.254.147] by server-8.bemta-14.messagelabs.com id
	36/41-19110-C88FA465; Tue, 17 Nov 2015 09:51:08 +0000
X-Env-Sender: prvs=7567d34c5=Paul.Durrant@citrix.com
X-Msg-Ref: server-15.tower-27.messagelabs.com!1447753866!3769622!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.6 required=7.0 tests=HTML_90_100,HTML_MESSAGE,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 22388 invoked from network); 17 Nov 2015 09:51:07 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-15.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	17 Nov 2015 09:51:07 -0000
X-IronPort-AV: E=Sophos;i="5.20,307,1444694400"; d="scan'208,217";a="7844276"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: John Jaser <john@jaser.net>, Fabio Fantoni <fabio.fantoni@m2r.biz>
Thread-Topic: [win-pv-devel] Signing new winpv drivers
Thread-Index: AQHQ204xV7V7/m4HJ0ijzg2wZdxHsp4VBb23gADyHICAUbl4AIAAJC2ggDehF4CAAQ2XEA==
Date: Tue, 17 Nov 2015 09:51:05 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F674D2C@AMSPEX01CL01.citrite.net>
References: <55D5D908.1040506@m2r.biz>
	<sleacjrdcrrvsxgctwyek24q.1440085065667@email.android.com>
	<55D6DB89.9020307@m2r.biz> <561B69BC.2090008@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F60B2DF@AMSPEX01CL01.citrite.net>
	<CAFsYgP1kYBQzuFk=tLHPCz-ZH1jpE3kBGNwGCXRkfwN+BJV0WA@mail.gmail.com>
In-Reply-To: <CAFsYgP1kYBQzuFk=tLHPCz-ZH1jpE3kBGNwGCXRkfwN+BJV0WA@mail.gmail.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Cc: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Subject: Re: [win-pv-devel] Signing new winpv drivers
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============6926353541008986977=="
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

--===============6926353541008986977==
Content-Language: en-US
Content-Type: multipart/alternative;
	boundary="_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F674D2CAMSPEX01CL01cit_"

--_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F674D2CAMSPEX01CL01cit_
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64

VmVyeSBnbGFkIHRvIGhlYXIgaXQgYWxsIHdvcmtlZCB3ZWxsLiBUaGFua3MgZm9yIHRoZSBlbmNv
dXJhZ2VtZW50IQ0KDQogIFBhdWwNCg0KRnJvbTogSm9obiBKYXNlciBbbWFpbHRvOmpvaG5AamFz
ZXIubmV0XQ0KU2VudDogMTYgTm92ZW1iZXIgMjAxNSAxODo0Ng0KVG86IFBhdWwgRHVycmFudDsg
RmFiaW8gRmFudG9uaQ0KQ2M6IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZw0KU3Vi
amVjdDogUmU6IFt3aW4tcHYtZGV2ZWxdIFNpZ25pbmcgbmV3IHdpbnB2IGRyaXZlcnMNCg0KTXkg
dGVzdCBXaW4gMTAgc3lzdGVtIHdpdGggOC4xLjAueHggUFYgZHJpdmVycyBqdXN0IGRpZCB0aGUg
Zmlyc3QgbGFyZ2UgKG5vbiBpbnNpZGVyKSB1cGdyYWRlIHNpbmNlIEdBIChidWlsZCAxMDI0MCkg
dG8gYnVpbGQgMTA1ODYsIGFuZCBJIGFtIGhhcHB5IHRvIHNheSwgdGVzdCBzaWduaW5nIHJlbWFp
bmVkIGhvbm9yZWQsIGFuZCB0aGUgc3lzdGVtIHVwZ3JhZGVkIG5vcm1hbGx5LiAgVmVyeSBlbmNv
dXJhZ2luZy4gIEhhdHMgb2ZmIHRvIHRoZSBQViBkZXYgdGVhbS4NCg0KT24gTW9uLCBPY3QgMTIs
IDIwMTUgYXQgNDoxOSBBTSBQYXVsIER1cnJhbnQgPFBhdWwuRHVycmFudEBjaXRyaXguY29tPG1h
aWx0bzpQYXVsLkR1cnJhbnRAY2l0cml4LmNvbT4+IHdyb3RlOg0KRGUtaHRtbGluZy4uLg0KDQot
LS0tLQ0KW3NuaXBdDQoNCkFueSBuZXdzIG9uIHNpZ25lZCBkcml2ZXJzPw0KQWN0dWFsbHkgdGhl
IGF1dG9tYXRpYyBidWlsZCBvbmx5IHdpdGggbmV3IGNvbW1pdCBpbiBtYXN0ZXIgYnJhbmNoIGFu
ZCBrZWVwIG9ubHkgdGhlIGxhdGVzdCBidWlsZCwgaXMgcG9zc2libGUgdG8gaW1wcm92ZSBpdCBw
bGVhc2U/DQpGb3IgZXhhbXBsZSBJIHRoaW5rIGlzIGdvb2QgYnVpbGQgYWxzbyBsYXRlc3QgY29t
bWl0IG9mIHN0YWdpbmctOC4xIGJyYW5jaCBhbmQgYWxsIHRhZ3MgKGtlZWVwaW5nIGFsbCByYyBh
bmQgc3RhYmxlIGJ1aWxkIGluIHRoaXMgY2FzZSkuDQpUaGlzIHdpbGwgYmUgZWFzaWVyIGFuZCBm
YXN0ZXIgdGVzdCBhbHNvIHJjIGJ1aWxkcyBhbmQgYW55IGNvbW1pdCBmb3IgbmV4dCBzdGFibGUg
dmVyc2lvbnMuDQotLS0tLQ0KDQpObyBuZXdzIG9uIFhlblByb2plY3QgZHJpdmVyIHNpZ25pbmcu
IFRoZXJlIHNob3VsZCBiZSBzb21lIHNpZ25lZCBDaXRyaXggYnJhbmRlZCBkcml2ZXJzIHNvb24g
dGhvdWdoIGFuZCB0aGVzZSBzaG91bGQgd29yayBvbiBhbnkgWGVuIHBsYXRmb3JtLCBub3QganVz
dCBYZW5TZXJ2ZXIuDQoNCiAgUGF1bA0KDQoNCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fDQp3aW4tcHYtZGV2ZWwgbWFpbGluZyBsaXN0DQp3aW4tcHYtZGV2
ZWxAbGlzdHMueGVucHJvamVjdC5vcmc8bWFpbHRvOndpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9q
ZWN0Lm9yZz4NCmh0dHA6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9jZ2ktYmluL21haWxtYW4vbGlz
dGluZm8vd2luLXB2LWRldmVsDQo=

--_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F674D2CAMSPEX01CL01cit_
Content-Type: text/html; charset="utf-8"
Content-Transfer-Encoding: base64

PGh0bWwgeG1sbnM6dj0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwiIHhtbG5zOm89InVy
bjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIgeG1sbnM6dz0idXJuOnNjaGVt
YXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIgeG1sbnM6bT0iaHR0cDovL3NjaGVtYXMubWlj
cm9zb2Z0LmNvbS9vZmZpY2UvMjAwNC8xMi9vbW1sIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
VFIvUkVDLWh0bWw0MCI+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIg
Y29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4NCjxtZXRhIG5hbWU9IlByb2dJZCIg
Y29udGVudD0iV29yZC5Eb2N1bWVudCI+DQo8bWV0YSBuYW1lPSJHZW5lcmF0b3IiIGNvbnRlbnQ9
Ik1pY3Jvc29mdCBXb3JkIDE0Ij4NCjxtZXRhIG5hbWU9Ik9yaWdpbmF0b3IiIGNvbnRlbnQ9Ik1p
Y3Jvc29mdCBXb3JkIDE0Ij4NCjxsaW5rIHJlbD0iRmlsZS1MaXN0IiBocmVmPSJjaWQ6ZmlsZWxp
c3QueG1sQDAxRDEyMTFELjc5OThDQkMwIj48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4NCjxvOk9m
ZmljZURvY3VtZW50U2V0dGluZ3M+DQo8bzpBbGxvd1BORy8+DQo8bzpEb05vdFJlbHlPbkNTUy8+
DQo8L286T2ZmaWNlRG9jdW1lbnRTZXR0aW5ncz4NCjwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYg
Z3RlIG1zbyA5XT48eG1sPg0KPHc6V29yZERvY3VtZW50Pg0KPHc6U3BlbGxpbmdTdGF0ZT5DbGVh
bjwvdzpTcGVsbGluZ1N0YXRlPg0KPHc6VHJhY2tNb3Zlcy8+DQo8dzpUcmFja0Zvcm1hdHRpbmcv
Pg0KPHc6RW52ZWxvcGVWaXMvPg0KPHc6VmFsaWRhdGVBZ2FpbnN0U2NoZW1hcy8+DQo8dzpTYXZl
SWZYTUxJbnZhbGlkPmZhbHNlPC93OlNhdmVJZlhNTEludmFsaWQ+DQo8dzpJZ25vcmVNaXhlZENv
bnRlbnQ+ZmFsc2U8L3c6SWdub3JlTWl4ZWRDb250ZW50Pg0KPHc6QWx3YXlzU2hvd1BsYWNlaG9s
ZGVyVGV4dD5mYWxzZTwvdzpBbHdheXNTaG93UGxhY2Vob2xkZXJUZXh0Pg0KPHc6RG9Ob3RQcm9t
b3RlUUYvPg0KPHc6TGlkVGhlbWVPdGhlcj5FTi1HQjwvdzpMaWRUaGVtZU90aGVyPg0KPHc6TGlk
VGhlbWVBc2lhbj5YLU5PTkU8L3c6TGlkVGhlbWVBc2lhbj4NCjx3OkxpZFRoZW1lQ29tcGxleFNj
cmlwdD5YLU5PTkU8L3c6TGlkVGhlbWVDb21wbGV4U2NyaXB0Pg0KPHc6Q29tcGF0aWJpbGl0eT4N
Cjx3OkRvTm90RXhwYW5kU2hpZnRSZXR1cm4vPg0KPHc6QnJlYWtXcmFwcGVkVGFibGVzLz4NCjx3
OlNwbGl0UGdCcmVha0FuZFBhcmFNYXJrLz4NCjx3OkVuYWJsZU9wZW5UeXBlS2VybmluZy8+DQo8
L3c6Q29tcGF0aWJpbGl0eT4NCjxtOm1hdGhQcj4NCjxtOm1hdGhGb250IG06dmFsPSJDYW1icmlh
IE1hdGgiLz4NCjxtOmJya0JpbiBtOnZhbD0iYmVmb3JlIi8+DQo8bTpicmtCaW5TdWIgbTp2YWw9
IiYjNDU7LSIvPg0KPG06c21hbGxGcmFjIG06dmFsPSJvZmYiLz4NCjxtOmRpc3BEZWYvPg0KPG06
bE1hcmdpbiBtOnZhbD0iMCIvPg0KPG06ck1hcmdpbiBtOnZhbD0iMCIvPg0KPG06ZGVmSmMgbTp2
YWw9ImNlbnRlckdyb3VwIi8+DQo8bTp3cmFwSW5kZW50IG06dmFsPSIxNDQwIi8+DQo8bTppbnRM
aW0gbTp2YWw9InN1YlN1cCIvPg0KPG06bmFyeUxpbSBtOnZhbD0idW5kT3ZyIi8+DQo8L206bWF0
aFByPjwvdzpXb3JkRG9jdW1lbnQ+DQo8L3htbD48IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28g
OV0+PHhtbD4NCjx3OkxhdGVudFN0eWxlcyBEZWZMb2NrZWRTdGF0ZT0iZmFsc2UiIERlZlVuaGlk
ZVdoZW5Vc2VkPSJ0cnVlIiBEZWZTZW1pSGlkZGVuPSJ0cnVlIiBEZWZRRm9ybWF0PSJmYWxzZSIg
RGVmUHJpb3JpdHk9Ijk5IiBMYXRlbnRTdHlsZUNvdW50PSIyNjciPg0KPHc6THNkRXhjZXB0aW9u
IExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSIwIiBTZW1pSGlkZGVuPSJmYWxzZSIgVW5oaWRlV2hl
blVzZWQ9ImZhbHNlIiBRRm9ybWF0PSJ0cnVlIiBOYW1lPSJOb3JtYWwiLz4NCjx3OkxzZEV4Y2Vw
dGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iOSIgU2VtaUhpZGRlbj0iZmFsc2UiIFVuaGlk
ZVdoZW5Vc2VkPSJmYWxzZSIgUUZvcm1hdD0idHJ1ZSIgTmFtZT0iaGVhZGluZyAxIi8+DQo8dzpM
c2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjkiIFFGb3JtYXQ9InRydWUiIE5h
bWU9ImhlYWRpbmcgMiIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5
PSI5IiBRRm9ybWF0PSJ0cnVlIiBOYW1lPSJoZWFkaW5nIDMiLz4NCjx3OkxzZEV4Y2VwdGlvbiBM
b2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iOSIgUUZvcm1hdD0idHJ1ZSIgTmFtZT0iaGVhZGluZyA0
Ii8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjkiIFFGb3JtYXQ9
InRydWUiIE5hbWU9ImhlYWRpbmcgNSIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2Ui
IFByaW9yaXR5PSI5IiBRRm9ybWF0PSJ0cnVlIiBOYW1lPSJoZWFkaW5nIDYiLz4NCjx3OkxzZEV4
Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iOSIgUUZvcm1hdD0idHJ1ZSIgTmFtZT0i
aGVhZGluZyA3Ii8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9Ijki
IFFGb3JtYXQ9InRydWUiIE5hbWU9ImhlYWRpbmcgOCIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tl
ZD0iZmFsc2UiIFByaW9yaXR5PSI5IiBRRm9ybWF0PSJ0cnVlIiBOYW1lPSJoZWFkaW5nIDkiLz4N
Cjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iMzkiIE5hbWU9InRvYyAx
Ii8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjM5IiBOYW1lPSJ0
b2MgMiIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSIzOSIgTmFt
ZT0idG9jIDMiLz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iMzki
IE5hbWU9InRvYyA0Ii8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9
IjM5IiBOYW1lPSJ0b2MgNSIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9y
aXR5PSIzOSIgTmFtZT0idG9jIDYiLz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQ
cmlvcml0eT0iMzkiIE5hbWU9InRvYyA3Ii8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxz
ZSIgUHJpb3JpdHk9IjM5IiBOYW1lPSJ0b2MgOCIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tlZD0i
ZmFsc2UiIFByaW9yaXR5PSIzOSIgTmFtZT0idG9jIDkiLz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2Nr
ZWQ9ImZhbHNlIiBQcmlvcml0eT0iMzUiIFFGb3JtYXQ9InRydWUiIE5hbWU9ImNhcHRpb24iLz4N
Cjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iMTAiIFNlbWlIaWRkZW49
ImZhbHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIFFGb3JtYXQ9InRydWUiIE5hbWU9IlRpdGxl
Ii8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjEiIE5hbWU9IkRl
ZmF1bHQgUGFyYWdyYXBoIEZvbnQiLz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQ
cmlvcml0eT0iMTEiIFNlbWlIaWRkZW49ImZhbHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIFFG
b3JtYXQ9InRydWUiIE5hbWU9IlN1YnRpdGxlIi8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJm
YWxzZSIgUHJpb3JpdHk9IjIyIiBTZW1pSGlkZGVuPSJmYWxzZSIgVW5oaWRlV2hlblVzZWQ9ImZh
bHNlIiBRRm9ybWF0PSJ0cnVlIiBOYW1lPSJTdHJvbmciLz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2Nr
ZWQ9ImZhbHNlIiBQcmlvcml0eT0iMjAiIFNlbWlIaWRkZW49ImZhbHNlIiBVbmhpZGVXaGVuVXNl
ZD0iZmFsc2UiIFFGb3JtYXQ9InRydWUiIE5hbWU9IkVtcGhhc2lzIi8+DQo8dzpMc2RFeGNlcHRp
b24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjU5IiBTZW1pSGlkZGVuPSJmYWxzZSIgVW5oaWRl
V2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJUYWJsZSBHcmlkIi8+DQo8dzpMc2RFeGNlcHRpb24gTG9j
a2VkPSJmYWxzZSIgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJQbGFjZWhvbGRlciBUZXh0
Ii8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjEiIFNlbWlIaWRk
ZW49ImZhbHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIFFGb3JtYXQ9InRydWUiIE5hbWU9Ik5v
IFNwYWNpbmciLz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjAi
IFNlbWlIaWRkZW49ImZhbHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9IkxpZ2h0IFNo
YWRpbmciLz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjEiIFNl
bWlIaWRkZW49ImZhbHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9IkxpZ2h0IExpc3Qi
Lz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjIiIFNlbWlIaWRk
ZW49ImZhbHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9IkxpZ2h0IEdyaWQiLz4NCjx3
OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjMiIFNlbWlIaWRkZW49ImZh
bHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9Ik1lZGl1bSBTaGFkaW5nIDEiLz4NCjx3
OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjQiIFNlbWlIaWRkZW49ImZh
bHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9Ik1lZGl1bSBTaGFkaW5nIDIiLz4NCjx3
OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjUiIFNlbWlIaWRkZW49ImZh
bHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9Ik1lZGl1bSBMaXN0IDEiLz4NCjx3Okxz
ZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjYiIFNlbWlIaWRkZW49ImZhbHNl
IiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9Ik1lZGl1bSBMaXN0IDIiLz4NCjx3OkxzZEV4
Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjciIFNlbWlIaWRkZW49ImZhbHNlIiBV
bmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9Ik1lZGl1bSBHcmlkIDEiLz4NCjx3OkxzZEV4Y2Vw
dGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjgiIFNlbWlIaWRkZW49ImZhbHNlIiBVbmhp
ZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9Ik1lZGl1bSBHcmlkIDIiLz4NCjx3OkxzZEV4Y2VwdGlv
biBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjkiIFNlbWlIaWRkZW49ImZhbHNlIiBVbmhpZGVX
aGVuVXNlZD0iZmFsc2UiIE5hbWU9Ik1lZGl1bSBHcmlkIDMiLz4NCjx3OkxzZEV4Y2VwdGlvbiBM
b2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNzAiIFNlbWlIaWRkZW49ImZhbHNlIiBVbmhpZGVXaGVu
VXNlZD0iZmFsc2UiIE5hbWU9IkRhcmsgTGlzdCIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tlZD0i
ZmFsc2UiIFByaW9yaXR5PSI3MSIgU2VtaUhpZGRlbj0iZmFsc2UiIFVuaGlkZVdoZW5Vc2VkPSJm
YWxzZSIgTmFtZT0iQ29sb3JmdWwgU2hhZGluZyIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tlZD0i
ZmFsc2UiIFByaW9yaXR5PSI3MiIgU2VtaUhpZGRlbj0iZmFsc2UiIFVuaGlkZVdoZW5Vc2VkPSJm
YWxzZSIgTmFtZT0iQ29sb3JmdWwgTGlzdCIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFs
c2UiIFByaW9yaXR5PSI3MyIgU2VtaUhpZGRlbj0iZmFsc2UiIFVuaGlkZVdoZW5Vc2VkPSJmYWxz
ZSIgTmFtZT0iQ29sb3JmdWwgR3JpZCIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2Ui
IFByaW9yaXR5PSI2MCIgU2VtaUhpZGRlbj0iZmFsc2UiIFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIg
TmFtZT0iTGlnaHQgU2hhZGluZyBBY2NlbnQgMSIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tlZD0i
ZmFsc2UiIFByaW9yaXR5PSI2MSIgU2VtaUhpZGRlbj0iZmFsc2UiIFVuaGlkZVdoZW5Vc2VkPSJm
YWxzZSIgTmFtZT0iTGlnaHQgTGlzdCBBY2NlbnQgMSIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tl
ZD0iZmFsc2UiIFByaW9yaXR5PSI2MiIgU2VtaUhpZGRlbj0iZmFsc2UiIFVuaGlkZVdoZW5Vc2Vk
PSJmYWxzZSIgTmFtZT0iTGlnaHQgR3JpZCBBY2NlbnQgMSIvPg0KPHc6THNkRXhjZXB0aW9uIExv
Y2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2MyIgU2VtaUhpZGRlbj0iZmFsc2UiIFVuaGlkZVdoZW5V
c2VkPSJmYWxzZSIgTmFtZT0iTWVkaXVtIFNoYWRpbmcgMSBBY2NlbnQgMSIvPg0KPHc6THNkRXhj
ZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2NCIgU2VtaUhpZGRlbj0iZmFsc2UiIFVu
aGlkZVdoZW5Vc2VkPSJmYWxzZSIgTmFtZT0iTWVkaXVtIFNoYWRpbmcgMiBBY2NlbnQgMSIvPg0K
PHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2NSIgU2VtaUhpZGRlbj0i
ZmFsc2UiIFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIgTmFtZT0iTWVkaXVtIExpc3QgMSBBY2NlbnQg
MSIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFVuaGlkZVdoZW5Vc2VkPSJmYWxz
ZSIgTmFtZT0iUmV2aXNpb24iLz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlv
cml0eT0iMzQiIFNlbWlIaWRkZW49ImZhbHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIFFGb3Jt
YXQ9InRydWUiIE5hbWU9Ikxpc3QgUGFyYWdyYXBoIi8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2Vk
PSJmYWxzZSIgUHJpb3JpdHk9IjI5IiBTZW1pSGlkZGVuPSJmYWxzZSIgVW5oaWRlV2hlblVzZWQ9
ImZhbHNlIiBRRm9ybWF0PSJ0cnVlIiBOYW1lPSJRdW90ZSIvPg0KPHc6THNkRXhjZXB0aW9uIExv
Y2tlZD0iZmFsc2UiIFByaW9yaXR5PSIzMCIgU2VtaUhpZGRlbj0iZmFsc2UiIFVuaGlkZVdoZW5V
c2VkPSJmYWxzZSIgUUZvcm1hdD0idHJ1ZSIgTmFtZT0iSW50ZW5zZSBRdW90ZSIvPg0KPHc6THNk
RXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2NiIgU2VtaUhpZGRlbj0iZmFsc2Ui
IFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIgTmFtZT0iTWVkaXVtIExpc3QgMiBBY2NlbnQgMSIvPg0K
PHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2NyIgU2VtaUhpZGRlbj0i
ZmFsc2UiIFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIgTmFtZT0iTWVkaXVtIEdyaWQgMSBBY2NlbnQg
MSIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2OCIgU2VtaUhp
ZGRlbj0iZmFsc2UiIFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIgTmFtZT0iTWVkaXVtIEdyaWQgMiBB
Y2NlbnQgMSIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2OSIg
U2VtaUhpZGRlbj0iZmFsc2UiIFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIgTmFtZT0iTWVkaXVtIEdy
aWQgMyBBY2NlbnQgMSIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5
PSI3MCIgU2VtaUhpZGRlbj0iZmFsc2UiIFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIgTmFtZT0iRGFy
ayBMaXN0IEFjY2VudCAxIi8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3Jp
dHk9IjcxIiBTZW1pSGlkZGVuPSJmYWxzZSIgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJD
b2xvcmZ1bCBTaGFkaW5nIEFjY2VudCAxIi8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxz
ZSIgUHJpb3JpdHk9IjcyIiBTZW1pSGlkZGVuPSJmYWxzZSIgVW5oaWRlV2hlblVzZWQ9ImZhbHNl
IiBOYW1lPSJDb2xvcmZ1bCBMaXN0IEFjY2VudCAxIi8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2Vk
PSJmYWxzZSIgUHJpb3JpdHk9IjczIiBTZW1pSGlkZGVuPSJmYWxzZSIgVW5oaWRlV2hlblVzZWQ9
ImZhbHNlIiBOYW1lPSJDb2xvcmZ1bCBHcmlkIEFjY2VudCAxIi8+DQo8dzpMc2RFeGNlcHRpb24g
TG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjYwIiBTZW1pSGlkZGVuPSJmYWxzZSIgVW5oaWRlV2hl
blVzZWQ9ImZhbHNlIiBOYW1lPSJMaWdodCBTaGFkaW5nIEFjY2VudCAyIi8+DQo8dzpMc2RFeGNl
cHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjYxIiBTZW1pSGlkZGVuPSJmYWxzZSIgVW5o
aWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJMaWdodCBMaXN0IEFjY2VudCAyIi8+DQo8dzpMc2RF
eGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjYyIiBTZW1pSGlkZGVuPSJmYWxzZSIg
VW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJMaWdodCBHcmlkIEFjY2VudCAyIi8+DQo8dzpM
c2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjYzIiBTZW1pSGlkZGVuPSJmYWxz
ZSIgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJNZWRpdW0gU2hhZGluZyAxIEFjY2VudCAy
Ii8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjY0IiBTZW1pSGlk
ZGVuPSJmYWxzZSIgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJNZWRpdW0gU2hhZGluZyAy
IEFjY2VudCAyIi8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjY1
IiBTZW1pSGlkZGVuPSJmYWxzZSIgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJNZWRpdW0g
TGlzdCAxIEFjY2VudCAyIi8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3Jp
dHk9IjY2IiBTZW1pSGlkZGVuPSJmYWxzZSIgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJN
ZWRpdW0gTGlzdCAyIEFjY2VudCAyIi8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIg
UHJpb3JpdHk9IjY3IiBTZW1pSGlkZGVuPSJmYWxzZSIgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBO
YW1lPSJNZWRpdW0gR3JpZCAxIEFjY2VudCAyIi8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJm
YWxzZSIgUHJpb3JpdHk9IjY4IiBTZW1pSGlkZGVuPSJmYWxzZSIgVW5oaWRlV2hlblVzZWQ9ImZh
bHNlIiBOYW1lPSJNZWRpdW0gR3JpZCAyIEFjY2VudCAyIi8+DQo8dzpMc2RFeGNlcHRpb24gTG9j
a2VkPSJmYWxzZSIgUHJpb3JpdHk9IjY5IiBTZW1pSGlkZGVuPSJmYWxzZSIgVW5oaWRlV2hlblVz
ZWQ9ImZhbHNlIiBOYW1lPSJNZWRpdW0gR3JpZCAzIEFjY2VudCAyIi8+DQo8dzpMc2RFeGNlcHRp
b24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjcwIiBTZW1pSGlkZGVuPSJmYWxzZSIgVW5oaWRl
V2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJEYXJrIExpc3QgQWNjZW50IDIiLz4NCjx3OkxzZEV4Y2Vw
dGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNzEiIFNlbWlIaWRkZW49ImZhbHNlIiBVbmhp
ZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9IkNvbG9yZnVsIFNoYWRpbmcgQWNjZW50IDIiLz4NCjx3
OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNzIiIFNlbWlIaWRkZW49ImZh
bHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9IkNvbG9yZnVsIExpc3QgQWNjZW50IDIi
Lz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNzMiIFNlbWlIaWRk
ZW49ImZhbHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9IkNvbG9yZnVsIEdyaWQgQWNj
ZW50IDIiLz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjAiIFNl
bWlIaWRkZW49ImZhbHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9IkxpZ2h0IFNoYWRp
bmcgQWNjZW50IDMiLz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0i
NjEiIFNlbWlIaWRkZW49ImZhbHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9IkxpZ2h0
IExpc3QgQWNjZW50IDMiLz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0
eT0iNjIiIFNlbWlIaWRkZW49ImZhbHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9Ikxp
Z2h0IEdyaWQgQWNjZW50IDMiLz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlv
cml0eT0iNjMiIFNlbWlIaWRkZW49ImZhbHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9
Ik1lZGl1bSBTaGFkaW5nIDEgQWNjZW50IDMiLz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZh
bHNlIiBQcmlvcml0eT0iNjQiIFNlbWlIaWRkZW49ImZhbHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFs
c2UiIE5hbWU9Ik1lZGl1bSBTaGFkaW5nIDIgQWNjZW50IDMiLz4NCjx3OkxzZEV4Y2VwdGlvbiBM
b2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjUiIFNlbWlIaWRkZW49ImZhbHNlIiBVbmhpZGVXaGVu
VXNlZD0iZmFsc2UiIE5hbWU9Ik1lZGl1bSBMaXN0IDEgQWNjZW50IDMiLz4NCjx3OkxzZEV4Y2Vw
dGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjYiIFNlbWlIaWRkZW49ImZhbHNlIiBVbmhp
ZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9Ik1lZGl1bSBMaXN0IDIgQWNjZW50IDMiLz4NCjx3Okxz
ZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjciIFNlbWlIaWRkZW49ImZhbHNl
IiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9Ik1lZGl1bSBHcmlkIDEgQWNjZW50IDMiLz4N
Cjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjgiIFNlbWlIaWRkZW49
ImZhbHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9Ik1lZGl1bSBHcmlkIDIgQWNjZW50
IDMiLz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjkiIFNlbWlI
aWRkZW49ImZhbHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9Ik1lZGl1bSBHcmlkIDMg
QWNjZW50IDMiLz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNzAi
IFNlbWlIaWRkZW49ImZhbHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9IkRhcmsgTGlz
dCBBY2NlbnQgMyIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI3
MSIgU2VtaUhpZGRlbj0iZmFsc2UiIFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIgTmFtZT0iQ29sb3Jm
dWwgU2hhZGluZyBBY2NlbnQgMyIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFBy
aW9yaXR5PSI3MiIgU2VtaUhpZGRlbj0iZmFsc2UiIFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIgTmFt
ZT0iQ29sb3JmdWwgTGlzdCBBY2NlbnQgMyIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFs
c2UiIFByaW9yaXR5PSI3MyIgU2VtaUhpZGRlbj0iZmFsc2UiIFVuaGlkZVdoZW5Vc2VkPSJmYWxz
ZSIgTmFtZT0iQ29sb3JmdWwgR3JpZCBBY2NlbnQgMyIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tl
ZD0iZmFsc2UiIFByaW9yaXR5PSI2MCIgU2VtaUhpZGRlbj0iZmFsc2UiIFVuaGlkZVdoZW5Vc2Vk
PSJmYWxzZSIgTmFtZT0iTGlnaHQgU2hhZGluZyBBY2NlbnQgNCIvPg0KPHc6THNkRXhjZXB0aW9u
IExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2MSIgU2VtaUhpZGRlbj0iZmFsc2UiIFVuaGlkZVdo
ZW5Vc2VkPSJmYWxzZSIgTmFtZT0iTGlnaHQgTGlzdCBBY2NlbnQgNCIvPg0KPHc6THNkRXhjZXB0
aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2MiIgU2VtaUhpZGRlbj0iZmFsc2UiIFVuaGlk
ZVdoZW5Vc2VkPSJmYWxzZSIgTmFtZT0iTGlnaHQgR3JpZCBBY2NlbnQgNCIvPg0KPHc6THNkRXhj
ZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2MyIgU2VtaUhpZGRlbj0iZmFsc2UiIFVu
aGlkZVdoZW5Vc2VkPSJmYWxzZSIgTmFtZT0iTWVkaXVtIFNoYWRpbmcgMSBBY2NlbnQgNCIvPg0K
PHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2NCIgU2VtaUhpZGRlbj0i
ZmFsc2UiIFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIgTmFtZT0iTWVkaXVtIFNoYWRpbmcgMiBBY2Nl
bnQgNCIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2NSIgU2Vt
aUhpZGRlbj0iZmFsc2UiIFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIgTmFtZT0iTWVkaXVtIExpc3Qg
MSBBY2NlbnQgNCIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2
NiIgU2VtaUhpZGRlbj0iZmFsc2UiIFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIgTmFtZT0iTWVkaXVt
IExpc3QgMiBBY2NlbnQgNCIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9y
aXR5PSI2NyIgU2VtaUhpZGRlbj0iZmFsc2UiIFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIgTmFtZT0i
TWVkaXVtIEdyaWQgMSBBY2NlbnQgNCIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2Ui
IFByaW9yaXR5PSI2OCIgU2VtaUhpZGRlbj0iZmFsc2UiIFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIg
TmFtZT0iTWVkaXVtIEdyaWQgMiBBY2NlbnQgNCIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tlZD0i
ZmFsc2UiIFByaW9yaXR5PSI2OSIgU2VtaUhpZGRlbj0iZmFsc2UiIFVuaGlkZVdoZW5Vc2VkPSJm
YWxzZSIgTmFtZT0iTWVkaXVtIEdyaWQgMyBBY2NlbnQgNCIvPg0KPHc6THNkRXhjZXB0aW9uIExv
Y2tlZD0iZmFsc2UiIFByaW9yaXR5PSI3MCIgU2VtaUhpZGRlbj0iZmFsc2UiIFVuaGlkZVdoZW5V
c2VkPSJmYWxzZSIgTmFtZT0iRGFyayBMaXN0IEFjY2VudCA0Ii8+DQo8dzpMc2RFeGNlcHRpb24g
TG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjcxIiBTZW1pSGlkZGVuPSJmYWxzZSIgVW5oaWRlV2hl
blVzZWQ9ImZhbHNlIiBOYW1lPSJDb2xvcmZ1bCBTaGFkaW5nIEFjY2VudCA0Ii8+DQo8dzpMc2RF
eGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjcyIiBTZW1pSGlkZGVuPSJmYWxzZSIg
VW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJDb2xvcmZ1bCBMaXN0IEFjY2VudCA0Ii8+DQo8
dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjczIiBTZW1pSGlkZGVuPSJm
YWxzZSIgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJDb2xvcmZ1bCBHcmlkIEFjY2VudCA0
Ii8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjYwIiBTZW1pSGlk
ZGVuPSJmYWxzZSIgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJMaWdodCBTaGFkaW5nIEFj
Y2VudCA1Ii8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjYxIiBT
ZW1pSGlkZGVuPSJmYWxzZSIgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJMaWdodCBMaXN0
IEFjY2VudCA1Ii8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjYy
IiBTZW1pSGlkZGVuPSJmYWxzZSIgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJMaWdodCBH
cmlkIEFjY2VudCA1Ii8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9
IjYzIiBTZW1pSGlkZGVuPSJmYWxzZSIgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJNZWRp
dW0gU2hhZGluZyAxIEFjY2VudCA1Ii8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIg
UHJpb3JpdHk9IjY0IiBTZW1pSGlkZGVuPSJmYWxzZSIgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBO
YW1lPSJNZWRpdW0gU2hhZGluZyAyIEFjY2VudCA1Ii8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2Vk
PSJmYWxzZSIgUHJpb3JpdHk9IjY1IiBTZW1pSGlkZGVuPSJmYWxzZSIgVW5oaWRlV2hlblVzZWQ9
ImZhbHNlIiBOYW1lPSJNZWRpdW0gTGlzdCAxIEFjY2VudCA1Ii8+DQo8dzpMc2RFeGNlcHRpb24g
TG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjY2IiBTZW1pSGlkZGVuPSJmYWxzZSIgVW5oaWRlV2hl
blVzZWQ9ImZhbHNlIiBOYW1lPSJNZWRpdW0gTGlzdCAyIEFjY2VudCA1Ii8+DQo8dzpMc2RFeGNl
cHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjY3IiBTZW1pSGlkZGVuPSJmYWxzZSIgVW5o
aWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJNZWRpdW0gR3JpZCAxIEFjY2VudCA1Ii8+DQo8dzpM
c2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjY4IiBTZW1pSGlkZGVuPSJmYWxz
ZSIgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJNZWRpdW0gR3JpZCAyIEFjY2VudCA1Ii8+
DQo8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjY5IiBTZW1pSGlkZGVu
PSJmYWxzZSIgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJNZWRpdW0gR3JpZCAzIEFjY2Vu
dCA1Ii8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjcwIiBTZW1p
SGlkZGVuPSJmYWxzZSIgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBOYW1lPSJEYXJrIExpc3QgQWNj
ZW50IDUiLz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNzEiIFNl
bWlIaWRkZW49ImZhbHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9IkNvbG9yZnVsIFNo
YWRpbmcgQWNjZW50IDUiLz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0
eT0iNzIiIFNlbWlIaWRkZW49ImZhbHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9IkNv
bG9yZnVsIExpc3QgQWNjZW50IDUiLz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQ
cmlvcml0eT0iNzMiIFNlbWlIaWRkZW49ImZhbHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5h
bWU9IkNvbG9yZnVsIEdyaWQgQWNjZW50IDUiLz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZh
bHNlIiBQcmlvcml0eT0iNjAiIFNlbWlIaWRkZW49ImZhbHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFs
c2UiIE5hbWU9IkxpZ2h0IFNoYWRpbmcgQWNjZW50IDYiLz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2Nr
ZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjEiIFNlbWlIaWRkZW49ImZhbHNlIiBVbmhpZGVXaGVuVXNl
ZD0iZmFsc2UiIE5hbWU9IkxpZ2h0IExpc3QgQWNjZW50IDYiLz4NCjx3OkxzZEV4Y2VwdGlvbiBM
b2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjIiIFNlbWlIaWRkZW49ImZhbHNlIiBVbmhpZGVXaGVu
VXNlZD0iZmFsc2UiIE5hbWU9IkxpZ2h0IEdyaWQgQWNjZW50IDYiLz4NCjx3OkxzZEV4Y2VwdGlv
biBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjMiIFNlbWlIaWRkZW49ImZhbHNlIiBVbmhpZGVX
aGVuVXNlZD0iZmFsc2UiIE5hbWU9Ik1lZGl1bSBTaGFkaW5nIDEgQWNjZW50IDYiLz4NCjx3Okxz
ZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjQiIFNlbWlIaWRkZW49ImZhbHNl
IiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9Ik1lZGl1bSBTaGFkaW5nIDIgQWNjZW50IDYi
Lz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjUiIFNlbWlIaWRk
ZW49ImZhbHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9Ik1lZGl1bSBMaXN0IDEgQWNj
ZW50IDYiLz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjYiIFNl
bWlIaWRkZW49ImZhbHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9Ik1lZGl1bSBMaXN0
IDIgQWNjZW50IDYiLz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0i
NjciIFNlbWlIaWRkZW49ImZhbHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9Ik1lZGl1
bSBHcmlkIDEgQWNjZW50IDYiLz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlv
cml0eT0iNjgiIFNlbWlIaWRkZW49ImZhbHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2UiIE5hbWU9
Ik1lZGl1bSBHcmlkIDIgQWNjZW50IDYiLz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNl
IiBQcmlvcml0eT0iNjkiIFNlbWlIaWRkZW49ImZhbHNlIiBVbmhpZGVXaGVuVXNlZD0iZmFsc2Ui
IE5hbWU9Ik1lZGl1bSBHcmlkIDMgQWNjZW50IDYiLz4NCjx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9
ImZhbHNlIiBQcmlvcml0eT0iNzAiIFNlbWlIaWRkZW49ImZhbHNlIiBVbmhpZGVXaGVuVXNlZD0i
ZmFsc2UiIE5hbWU9IkRhcmsgTGlzdCBBY2NlbnQgNiIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tl
ZD0iZmFsc2UiIFByaW9yaXR5PSI3MSIgU2VtaUhpZGRlbj0iZmFsc2UiIFVuaGlkZVdoZW5Vc2Vk
PSJmYWxzZSIgTmFtZT0iQ29sb3JmdWwgU2hhZGluZyBBY2NlbnQgNiIvPg0KPHc6THNkRXhjZXB0
aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI3MiIgU2VtaUhpZGRlbj0iZmFsc2UiIFVuaGlk
ZVdoZW5Vc2VkPSJmYWxzZSIgTmFtZT0iQ29sb3JmdWwgTGlzdCBBY2NlbnQgNiIvPg0KPHc6THNk
RXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI3MyIgU2VtaUhpZGRlbj0iZmFsc2Ui
IFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIgTmFtZT0iQ29sb3JmdWwgR3JpZCBBY2NlbnQgNiIvPg0K
PHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSIxOSIgU2VtaUhpZGRlbj0i
ZmFsc2UiIFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIgUUZvcm1hdD0idHJ1ZSIgTmFtZT0iU3VidGxl
IEVtcGhhc2lzIi8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjIx
IiBTZW1pSGlkZGVuPSJmYWxzZSIgVW5oaWRlV2hlblVzZWQ9ImZhbHNlIiBRRm9ybWF0PSJ0cnVl
IiBOYW1lPSJJbnRlbnNlIEVtcGhhc2lzIi8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxz
ZSIgUHJpb3JpdHk9IjMxIiBTZW1pSGlkZGVuPSJmYWxzZSIgVW5oaWRlV2hlblVzZWQ9ImZhbHNl
IiBRRm9ybWF0PSJ0cnVlIiBOYW1lPSJTdWJ0bGUgUmVmZXJlbmNlIi8+DQo8dzpMc2RFeGNlcHRp
b24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjMyIiBTZW1pSGlkZGVuPSJmYWxzZSIgVW5oaWRl
V2hlblVzZWQ9ImZhbHNlIiBRRm9ybWF0PSJ0cnVlIiBOYW1lPSJJbnRlbnNlIFJlZmVyZW5jZSIv
Pg0KPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSIzMyIgU2VtaUhpZGRl
bj0iZmFsc2UiIFVuaGlkZVdoZW5Vc2VkPSJmYWxzZSIgUUZvcm1hdD0idHJ1ZSIgTmFtZT0iQm9v
ayBUaXRsZSIvPg0KPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSIzNyIg
TmFtZT0iQmlibGlvZ3JhcGh5Ii8+DQo8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJp
b3JpdHk9IjM5IiBRRm9ybWF0PSJ0cnVlIiBOYW1lPSJUT0MgSGVhZGluZyIvPg0KPC93OkxhdGVu
dFN0eWxlcz4NCjwveG1sPjwhW2VuZGlmXS0tPjxzdHlsZT48IS0tDQovKiBGb250IERlZmluaXRp
b25zICovDQpAZm9udC1mYWNlDQoJe2ZvbnQtZmFtaWx5OkNhbGlicmk7DQoJcGFub3NlLTE6MiAx
NSA1IDIgMiAyIDQgMyAyIDQ7DQoJbXNvLWZvbnQtYWx0OiJBcmlhbCBSb3VuZGVkIE1UIEJvbGQi
Ow0KCW1zby1mb250LWNoYXJzZXQ6MDsNCgltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsN
Cgltc28tZm9udC1waXRjaDp2YXJpYWJsZTsNCgltc28tZm9udC1zaWduYXR1cmU6LTUzNjg3MDE0
NSAxMDczNzg2MTExIDEgMCA0MTUgMDt9DQpAZm9udC1mYWNlDQoJe2ZvbnQtZmFtaWx5OlRhaG9t
YTsNCglwYW5vc2UtMToyIDExIDYgNCAzIDUgNCA0IDIgNDsNCgltc28tZm9udC1jaGFyc2V0OjA7
DQoJbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6c3dpc3M7DQoJbXNvLWZvbnQtcGl0Y2g6dmFyaWFi
bGU7DQoJbXNvLWZvbnQtc2lnbmF0dXJlOi01MjAwODE2NjUgLTEwNzM3MTcxNTcgNDEgMCA2NjA0
NyAwO30NCi8qIFN0eWxlIERlZmluaXRpb25zICovDQpwLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFs
LCBkaXYuTXNvTm9ybWFsDQoJe21zby1zdHlsZS11bmhpZGU6bm87DQoJbXNvLXN0eWxlLXFmb3Jt
YXQ6eWVzOw0KCW1zby1zdHlsZS1wYXJlbnQ6IiI7DQoJbWFyZ2luOjBjbTsNCgltYXJnaW4tYm90
dG9tOi4wMDAxcHQ7DQoJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOw0KCWZvbnQtc2l6ZTox
Mi4wcHQ7DQoJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiIsInNlcmlmIjsNCgltc28tZmFy
ZWFzdC1mb250LWZhbWlseTpDYWxpYnJpO30NCmE6bGluaywgc3Bhbi5Nc29IeXBlcmxpbmsNCgl7
bXNvLXN0eWxlLW5vc2hvdzp5ZXM7DQoJbXNvLXN0eWxlLXByaW9yaXR5Ojk5Ow0KCWNvbG9yOmJs
dWU7DQoJdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTsNCgl0ZXh0LXVuZGVybGluZTpzaW5nbGU7
fQ0KYTp2aXNpdGVkLCBzcGFuLk1zb0h5cGVybGlua0ZvbGxvd2VkDQoJe21zby1zdHlsZS1ub3No
b3c6eWVzOw0KCW1zby1zdHlsZS1wcmlvcml0eTo5OTsNCgljb2xvcjpwdXJwbGU7DQoJdGV4dC1k
ZWNvcmF0aW9uOnVuZGVybGluZTsNCgl0ZXh0LXVuZGVybGluZTpzaW5nbGU7fQ0Kc3Bhbi5FbWFp
bFN0eWxlMTcNCgl7bXNvLXN0eWxlLXR5cGU6cGVyc29uYWwtcmVwbHk7DQoJbXNvLXN0eWxlLW5v
c2hvdzp5ZXM7DQoJbXNvLXN0eWxlLXVuaGlkZTpubzsNCgltc28tYW5zaS1mb250LXNpemU6MTEu
MHB0Ow0KCW1zby1iaWRpLWZvbnQtc2l6ZToxMS4wcHQ7DQoJZm9udC1mYW1pbHk6IkNhbGlicmki
LCJzYW5zLXNlcmlmIjsNCgltc28tYXNjaWktZm9udC1mYW1pbHk6Q2FsaWJyaTsNCgltc28tZmFy
ZWFzdC1mb250LWZhbWlseTpDYWxpYnJpOw0KCW1zby1oYW5zaS1mb250LWZhbWlseTpDYWxpYnJp
Ow0KCW1zby1iaWRpLWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOw0KCWNvbG9yOiMxRjQ5
N0Q7fQ0KLk1zb0NocERlZmF1bHQNCgl7bXNvLXN0eWxlLXR5cGU6ZXhwb3J0LW9ubHk7DQoJbXNv
LWRlZmF1bHQtcHJvcHM6eWVzOw0KCWZvbnQtZmFtaWx5OiJDYWxpYnJpIiwic2Fucy1zZXJpZiI7
DQoJbXNvLWFzY2lpLWZvbnQtZmFtaWx5OkNhbGlicmk7DQoJbXNvLWZhcmVhc3QtZm9udC1mYW1p
bHk6Q2FsaWJyaTsNCgltc28taGFuc2ktZm9udC1mYW1pbHk6Q2FsaWJyaTsNCgltc28tYmlkaS1m
b250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsNCgltc28tZmFyZWFzdC1sYW5ndWFnZTpFTi1V
Uzt9DQpAcGFnZSBXb3JkU2VjdGlvbjENCgl7c2l6ZTo2MTIuMHB0IDc5Mi4wcHQ7DQoJbWFyZ2lu
OjcyLjBwdCA3Mi4wcHQgNzIuMHB0IDcyLjBwdDsNCgltc28taGVhZGVyLW1hcmdpbjozNi4wcHQ7
DQoJbXNvLWZvb3Rlci1tYXJnaW46MzYuMHB0Ow0KCW1zby1wYXBlci1zb3VyY2U6MDt9DQpkaXYu
V29yZFNlY3Rpb24xDQoJe3BhZ2U6V29yZFNlY3Rpb24xO30NCi0tPjwvc3R5bGU+PCEtLVtpZiBn
dGUgbXNvIDEwXT48c3R5bGU+LyogU3R5bGUgRGVmaW5pdGlvbnMgKi8NCnRhYmxlLk1zb05vcm1h
bFRhYmxlDQoJe21zby1zdHlsZS1uYW1lOiJUYWJsZSBOb3JtYWwiOw0KCW1zby10c3R5bGUtcm93
YmFuZC1zaXplOjA7DQoJbXNvLXRzdHlsZS1jb2xiYW5kLXNpemU6MDsNCgltc28tc3R5bGUtbm9z
aG93OnllczsNCgltc28tc3R5bGUtcHJpb3JpdHk6OTk7DQoJbXNvLXN0eWxlLXBhcmVudDoiIjsN
Cgltc28tcGFkZGluZy1hbHQ6MGNtIDUuNHB0IDBjbSA1LjRwdDsNCgltc28tcGFyYS1tYXJnaW46
MGNtOw0KCW1zby1wYXJhLW1hcmdpbi1ib3R0b206LjAwMDFwdDsNCgltc28tcGFnaW5hdGlvbjp3
aWRvdy1vcnBoYW47DQoJZm9udC1zaXplOjExLjBwdDsNCglmb250LWZhbWlseToiQ2FsaWJyaSIs
InNhbnMtc2VyaWYiOw0KCW1zby1hc2NpaS1mb250LWZhbWlseTpDYWxpYnJpOw0KCW1zby1oYW5z
aS1mb250LWZhbWlseTpDYWxpYnJpOw0KCW1zby1mYXJlYXN0LWxhbmd1YWdlOkVOLVVTO30NCjwv
c3R5bGU+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+DQo8bzpzaGFwZWRlZmF1
bHRzIHY6ZXh0PSJlZGl0IiBzcGlkbWF4PSIxMDI2IiAvPg0KPC94bWw+PCFbZW5kaWZdLS0+PCEt
LVtpZiBndGUgbXNvIDldPjx4bWw+DQo8bzpzaGFwZWxheW91dCB2OmV4dD0iZWRpdCI+DQo8bzpp
ZG1hcCB2OmV4dD0iZWRpdCIgZGF0YT0iMSIgLz4NCjwvbzpzaGFwZWxheW91dD48L3htbD48IVtl
bmRpZl0tLT4NCjwvaGVhZD4NCjxib2R5IGxhbmc9IkVOLUdCIiBsaW5rPSJibHVlIiB2bGluaz0i
cHVycGxlIiBzdHlsZT0idGFiLWludGVydmFsOjM2LjBwdCI+DQo8ZGl2IGNsYXNzPSJXb3JkU2Vj
dGlvbjEiPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PGZvbnQgc2l6ZT0iMiIgY29sb3I9IiMxZjQ5
N2QiIGZhY2U9IkNhbGlicmkiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFt
aWx5OiZxdW90O0NhbGlicmkmcXVvdDssJnF1b3Q7c2Fucy1zZXJpZiZxdW90Ozttc28tYmlkaS1m
b250LWZhbWlseTomcXVvdDtUaW1lcyBOZXcgUm9tYW4mcXVvdDs7Y29sb3I6IzFGNDk3RCI+VmVy
eSBnbGFkIHRvIGhlYXIgaXQgYWxsIHdvcmtlZCB3ZWxsLiBUaGFua3MgZm9yIHRoZSBlbmNvdXJh
Z2VtZW50ITxvOnA+PC9vOnA+PC9zcGFuPjwvZm9udD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFs
Ij48Zm9udCBzaXplPSIyIiBjb2xvcj0iIzFmNDk3ZCIgZmFjZT0iQ2FsaWJyaSI+PHNwYW4gc3R5
bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OywmcXVv
dDtzYW5zLXNlcmlmJnF1b3Q7O21zby1iaWRpLWZvbnQtZmFtaWx5OiZxdW90O1RpbWVzIE5ldyBS
b21hbiZxdW90Oztjb2xvcjojMUY0OTdEIj48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L2ZvbnQ+
PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PGZvbnQgc2l6ZT0iMiIgY29sb3I9IiMxZjQ5N2Qi
IGZhY2U9IkNhbGlicmkiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5
OiZxdW90O0NhbGlicmkmcXVvdDssJnF1b3Q7c2Fucy1zZXJpZiZxdW90Ozttc28tYmlkaS1mb250
LWZhbWlseTomcXVvdDtUaW1lcyBOZXcgUm9tYW4mcXVvdDs7Y29sb3I6IzFGNDk3RCI+PHNwYW4g
c3R5bGU9Im1zby1zcGFjZXJ1bjp5ZXMiPiZuYnNwOw0KPC9zcGFuPlBhdWw8bzpwPjwvbzpwPjwv
c3Bhbj48L2ZvbnQ+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PGZvbnQgc2l6ZT0iMiIgY29s
b3I9IiMxZjQ5N2QiIGZhY2U9IkNhbGlicmkiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0
O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssJnF1b3Q7c2Fucy1zZXJpZiZxdW90Oztt
c28tYmlkaS1mb250LWZhbWlseTomcXVvdDtUaW1lcyBOZXcgUm9tYW4mcXVvdDs7Y29sb3I6IzFG
NDk3RCI+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9mb250PjwvcD4NCjxkaXYgc3R5bGU9ImJv
cmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIGJsdWUgMS41cHQ7cGFkZGluZzowY20gMGNtIDBj
bSA0LjBwdCI+DQo8ZGl2Pg0KPGRpdiBzdHlsZT0iYm9yZGVyOm5vbmU7Ym9yZGVyLXRvcDpzb2xp
ZCAjQjVDNERGIDEuMHB0O3BhZGRpbmc6My4wcHQgMGNtIDBjbSAwY20iPg0KPHAgY2xhc3M9Ik1z
b05vcm1hbCI+PGI+PGZvbnQgc2l6ZT0iMiIgZmFjZT0iVGFob21hIj48c3BhbiBsYW5nPSJFTi1V
UyIgc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7VGFob21hJnF1b3Q7
LCZxdW90O3NhbnMtc2VyaWYmcXVvdDs7bXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6JnF1b3Q7VGlt
ZXMgTmV3IFJvbWFuJnF1b3Q7O21zby1hbnNpLWxhbmd1YWdlOkVOLVVTO2ZvbnQtd2VpZ2h0OmJv
bGQiPkZyb206PC9zcGFuPjwvZm9udD48L2I+PGZvbnQgc2l6ZT0iMiIgZmFjZT0iVGFob21hIj48
c3BhbiBsYW5nPSJFTi1VUyIgc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6JnF1
b3Q7VGFob21hJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYmcXVvdDs7bXNvLWZhcmVhc3QtZm9udC1m
YW1pbHk6JnF1b3Q7VGltZXMgTmV3IFJvbWFuJnF1b3Q7O21zby1hbnNpLWxhbmd1YWdlOkVOLVVT
Ij4NCiBKb2huIEphc2VyIFttYWlsdG86am9obkBqYXNlci5uZXRdIDxicj4NCjxiPjxzcGFuIHN0
eWxlPSJmb250LXdlaWdodDpib2xkIj5TZW50Ojwvc3Bhbj48L2I+IDE2IE5vdmVtYmVyIDIwMTUg
MTg6NDY8YnI+DQo8Yj48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6Ym9sZCI+VG86PC9zcGFuPjwv
Yj4gUGF1bCBEdXJyYW50OyBGYWJpbyBGYW50b25pPGJyPg0KPGI+PHNwYW4gc3R5bGU9ImZvbnQt
d2VpZ2h0OmJvbGQiPkNjOjwvc3Bhbj48L2I+IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0
Lm9yZzxicj4NCjxiPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDpib2xkIj5TdWJqZWN0Ojwvc3Bh
bj48L2I+IFJlOiBbd2luLXB2LWRldmVsXSBTaWduaW5nIG5ldyB3aW5wdiBkcml2ZXJzPG86cD48
L286cD48L3NwYW4+PC9mb250PjwvcD4NCjwvZGl2Pg0KPC9kaXY+DQo8cCBjbGFzcz0iTXNvTm9y
bWFsIj48Zm9udCBzaXplPSIzIiBmYWNlPSJUaW1lcyBOZXcgUm9tYW4iPjxzcGFuIHN0eWxlPSJm
b250LXNpemU6MTIuMHB0Ij48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L2ZvbnQ+PC9wPg0KPGRp
dj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxmb250IHNpemU9IjMiIGZhY2U9IlRpbWVzIE5ldyBS
b21hbiI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMi4wcHQiPk15IHRlc3QgV2luIDEwIHN5c3Rl
bSB3aXRoIDguMS4wLnh4IFBWIGRyaXZlcnMganVzdCBkaWQgdGhlIGZpcnN0IGxhcmdlIChub24g
aW5zaWRlcikgdXBncmFkZSBzaW5jZSBHQSAoYnVpbGQgMTAyNDApIHRvIGJ1aWxkIDEwNTg2LCBh
bmQgSSBhbSBoYXBweSB0byBzYXksIHRlc3Qgc2lnbmluZw0KIHJlbWFpbmVkIGhvbm9yZWQsIGFu
ZCB0aGUgc3lzdGVtIHVwZ3JhZGVkIG5vcm1hbGx5LiZuYnNwOyBWZXJ5IGVuY291cmFnaW5nLiZu
YnNwOyBIYXRzIG9mZiB0byB0aGUgUFYgZGV2IHRlYW0uPG86cD48L286cD48L3NwYW4+PC9mb250
PjwvcD4NCjwvZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PGZvbnQgc2l6ZT0iMyIgZmFjZT0i
VGltZXMgTmV3IFJvbWFuIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEyLjBwdCI+PG86cD4mbmJz
cDs8L286cD48L3NwYW4+PC9mb250PjwvcD4NCjxkaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05v
cm1hbCI+PGZvbnQgc2l6ZT0iMyIgZmFjZT0iVGltZXMgTmV3IFJvbWFuIj48c3BhbiBzdHlsZT0i
Zm9udC1zaXplOjEyLjBwdCI+T24gTW9uLCBPY3QgMTIsIDIwMTUgYXQgNDoxOSBBTSBQYXVsIER1
cnJhbnQgJmx0OzxhIGhyZWY9Im1haWx0bzpQYXVsLkR1cnJhbnRAY2l0cml4LmNvbSI+UGF1bC5E
dXJyYW50QGNpdHJpeC5jb208L2E+Jmd0OyB3cm90ZTo8bzpwPjwvbzpwPjwvc3Bhbj48L2ZvbnQ+
PC9wPg0KPC9kaXY+DQo8YmxvY2txdW90ZSBzdHlsZT0iYm9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6
c29saWQgI0NDQ0NDQyAxLjBwdDttc28tYm9yZGVyLWxlZnQtYWx0OnNvbGlkICNDQ0NDQ0MgLjc1
cHQ7cGFkZGluZzowY20gMGNtIDBjbSA2LjBwdDttYXJnaW4tbGVmdDo0LjhwdDttYXJnaW4tcmln
aHQ6MGNtIj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxmb250IHNpemU9IjMiIGZhY2U9IlRpbWVz
IE5ldyBSb21hbiI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMi4wcHQiPkRlLWh0bWxpbmcuLi48
YnI+DQo8YnI+DQotLS0tLTxicj4NCltzbmlwXTxicj4NCjxicj4NCkFueSBuZXdzIG9uIHNpZ25l
ZCBkcml2ZXJzPzxicj4NCkFjdHVhbGx5IHRoZSBhdXRvbWF0aWMgYnVpbGQgb25seSB3aXRoIG5l
dyBjb21taXQgaW4gbWFzdGVyIGJyYW5jaCBhbmQga2VlcCBvbmx5IHRoZSBsYXRlc3QgYnVpbGQs
IGlzIHBvc3NpYmxlIHRvIGltcHJvdmUgaXQgcGxlYXNlPzxicj4NCkZvciBleGFtcGxlIEkgdGhp
bmsgaXMgZ29vZCBidWlsZCBhbHNvIGxhdGVzdCBjb21taXQgb2Ygc3RhZ2luZy04LjEgYnJhbmNo
IGFuZCBhbGwgdGFncyAoa2VlZXBpbmcgYWxsIHJjIGFuZCBzdGFibGUgYnVpbGQgaW4gdGhpcyBj
YXNlKS48YnI+DQpUaGlzIHdpbGwgYmUgZWFzaWVyIGFuZCBmYXN0ZXIgdGVzdCBhbHNvIHJjIGJ1
aWxkcyBhbmQgYW55IGNvbW1pdCBmb3IgbmV4dCBzdGFibGUgdmVyc2lvbnMuPGJyPg0KLS0tLS08
YnI+DQo8YnI+DQpObyBuZXdzIG9uIFhlblByb2plY3QgZHJpdmVyIHNpZ25pbmcuIFRoZXJlIHNo
b3VsZCBiZSBzb21lIHNpZ25lZCBDaXRyaXggYnJhbmRlZCBkcml2ZXJzIHNvb24gdGhvdWdoIGFu
ZCB0aGVzZSBzaG91bGQgd29yayBvbiBhbnkgWGVuIHBsYXRmb3JtLCBub3QganVzdCBYZW5TZXJ2
ZXIuPGJyPg0KPGJyPg0KJm5ic3A7IFBhdWw8YnI+DQo8YnI+DQo8YnI+DQpfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXzxicj4NCndpbi1wdi1kZXZlbCBtYWls
aW5nIGxpc3Q8YnI+DQo8YSBocmVmPSJtYWlsdG86d2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2pl
Y3Qub3JnIiB0YXJnZXQ9Il9ibGFuayI+d2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3Jn
PC9hPjxicj4NCjxhIGhyZWY9Imh0dHA6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9jZ2ktYmluL21h
aWxtYW4vbGlzdGluZm8vd2luLXB2LWRldmVsIiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL2xpc3Rz
LnhlbnByb2plY3Qub3JnL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby93aW4tcHYtZGV2ZWw8L2E+
PG86cD48L286cD48L3NwYW4+PC9mb250PjwvcD4NCjwvYmxvY2txdW90ZT4NCjwvZGl2Pg0KPC9k
aXY+DQo8L2Rpdj4NCjwvYm9keT4NCjwvaHRtbD4NCg==

--_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F674D2CAMSPEX01CL01cit_--


--===============6926353541008986977==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--===============6926353541008986977==--


From win-pv-devel-bounces@lists.xenproject.org Tue Nov 17 10:22:34 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 17 Nov 2015 10:22:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZydPG-0006YV-4h; Tue, 17 Nov 2015 10:22:34 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1ZydPD-0006Xb-LY
	for win-pv-devel@lists.xenproject.org; Tue, 17 Nov 2015 10:22:32 +0000
Received: from [85.158.137.68] by server-5.bemta-3.messagelabs.com id
	36/0F-01748-6EFFA465; Tue, 17 Nov 2015 10:22:30 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-7.tower-31.messagelabs.com!1447755749!4334256!1
X-Originating-IP: [74.125.82.48]
X-SpamReason: No, hits=1.1 required=7.0 tests=BODY_RANDOM_LONG,
	HTML_90_100,HTML_MESSAGE
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 27428 invoked from network); 17 Nov 2015 10:22:30 -0000
Received: from mail-wm0-f48.google.com (HELO mail-wm0-f48.google.com)
	(74.125.82.48)
	by server-7.tower-31.messagelabs.com with AES128-GCM-SHA256 encrypted
	SMTP; 17 Nov 2015 10:22:30 -0000
Received: by wmww144 with SMTP id w144so18690269wmw.0
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 17 Nov 2015 02:22:29 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=m2r_biz.20150623.gappssmtp.com; s=20150623;
	h=subject:to:references:cc:from:message-id:date:user-agent
	:mime-version:in-reply-to:content-type;
	bh=puDz4CQ0JH8osFJ2/Vg4jMujBU/5K3oxqIEhbY+V8og=;
	b=YpcmOwJMubIaIOjs7A6B7nNX+eLMGCxk3lhC3ae9TRwnmXfLjXCXGFcjWyB65iVDEy
	4IdZKUKwk54yMhvu67kOPcVyxDnR8BGVHUMdeF/ACSWxaBmHp/QZLsMngUTagUXwaefK
	SmEnBiGs3lBBUhw5S6OH2TiLWSCJ2TgsooeGRJ/rvwunGaoS7YoNIYttoaq8tAHGjCuj
	2gtmg/XgFo3OaVT8qHGAoOPnlvNfaLXh8vBG3BBJYBQUqbNTCff4OvFg4wCF3p2mMhQS
	oKXLdzReyMX8ko/LEMrWrisGDYo+34c6WdAMx3SXMNYKvUZ8B7X8Wi71VV/i+g7/KsPO
	E3Lg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:subject:to:references:cc:from:message-id:date
	:user-agent:mime-version:in-reply-to:content-type;
	bh=puDz4CQ0JH8osFJ2/Vg4jMujBU/5K3oxqIEhbY+V8og=;
	b=liNrLS+3dbJZpDkIcCrN6aEzO99m2J7sJKXx11QXtWqBDlscXNVU7h62xkz30bfapq
	VRWF710mgH9bGeMCUy1bCduvqfV/i7m34M6UY1abulWvdQeSEi2UfUf2iblxL1G+qdqL
	sQ5w/F3fp/Dcf6KuRhLJIbWuk4TYSWKDoWOeC+lxZ6tu2CNsz0T1l03ybWegdcv/tjEV
	cVgZ6Z7BuBfPfwLneCG4yLGwE6nAHRHcqkVuLlu68i/Viktu9vbyOANRN21EfeLUb+pM
	NLwpyUaRdbqHqeMAmt0VYdQatffbXPfsZdBXYXXPBgkJKtvpLVV9JhvCDgNu7DmucrUX
	LwZw==
X-Gm-Message-State: ALoCoQkpNF32kkyggtQmZH8WzNbN4MnTsVkNqf25U/WTGfWNuOfrhkUqk63pu4E3nYmgkfLALe6y
X-Received: by 10.194.6.40 with SMTP id x8mr40033526wjx.50.1447755749690;
	Tue, 17 Nov 2015 02:22:29 -0800 (PST)
Received: from [192.168.1.37] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by smtp.googlemail.com with ESMTPSA id
	gl4sm32082608wjd.17.2015.11.17.02.22.27
	(version=TLSv1/SSLv3 cipher=OTHER);
	Tue, 17 Nov 2015 02:22:28 -0800 (PST)
To: Paul Durrant <Paul.Durrant@citrix.com>, John Jaser <john@jaser.net>
References: <55D5D908.1040506@m2r.biz>
	<sleacjrdcrrvsxgctwyek24q.1440085065667@email.android.com>
	<55D6DB89.9020307@m2r.biz> <561B69BC.2090008@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F60B2DF@AMSPEX01CL01.citrite.net>
	<CAFsYgP1kYBQzuFk=tLHPCz-ZH1jpE3kBGNwGCXRkfwN+BJV0WA@mail.gmail.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F674D2C@AMSPEX01CL01.citrite.net>
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
Message-ID: <564AFFE6.1090005@m2r.biz>
Date: Tue, 17 Nov 2015 11:22:30 +0100
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.3.0
MIME-Version: 1.0
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F674D2C@AMSPEX01CL01.citrite.net>
Cc: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Subject: Re: [win-pv-devel] Signing new winpv drivers
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============6953147278384775149=="
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

This is a multi-part message in MIME format.
--===============6953147278384775149==
Content-Type: multipart/alternative;
 boundary="------------010303040605020904040400"

This is a multi-part message in MIME format.
--------------010303040605020904040400
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit

Il 17/11/2015 10:51, Paul Durrant ha scritto:
>
> Very glad to hear it all worked well. Thanks for the encouragement!
>
> Paul
>
> *From:*John Jaser [mailto:john@jaser.net]
> *Sent:* 16 November 2015 18:46
> *To:* Paul Durrant; Fabio Fantoni
> *Cc:* win-pv-devel@lists.xenproject.org
> *Subject:* Re: [win-pv-devel] Signing new winpv drivers
>
> My test Win 10 system with 8.1.0.xx PV drivers just did the first 
> large (non insider) upgrade since GA (build 10240) to build 10586, and 
> I am happy to say, test signing remained honored, and the system 
> upgraded normally.  Very encouraging.  Hats off to the PV dev team.
>

Few weeks ago I did another tests with latest insider build and it had 
maintained testsigning setting also on my domUs (I suppose was a windows 
bug of previous build now fixed), after windows upgrade the pv drivers 
was not working (used the emulated disks and network instead) but after 
a windows reboot pv device returned working. I hope that with signed 
drivers will remain enabled to avoid manual reboot when will be used in 
production and improving performance during windows upgrade (on low cost 
notebook was visibly faster than on domUs on server with better 
hardware, I suppose was for pv disabled during win upgrade)
Same with ovmf instead of seabios except the test with pv disks (without 
emulated one) where update always fails (tried 4 times total), I don't 
know if during windows upgrade testsigned drivers are always disabled or 
is a winpv unexpected case, I'll retry when signed drivers will be 
available.

I'll keep new winpv drivers tested, thanks to anyone works on them.

> On Mon, Oct 12, 2015 at 4:19 AM Paul Durrant <Paul.Durrant@citrix.com 
> <mailto:Paul.Durrant@citrix.com>> wrote:
>
>     De-htmling...
>
>     -----
>     [snip]
>
>     Any news on signed drivers?
>     Actually the automatic build only with new commit in master branch
>     and keep only the latest build, is possible to improve it please?
>     For example I think is good build also latest commit of
>     staging-8.1 branch and all tags (keeeping all rc and stable build
>     in this case).
>     This will be easier and faster test also rc builds and any commit
>     for next stable versions.
>     -----
>
>     No news on XenProject driver signing. There should be some signed
>     Citrix branded drivers soon though and these should work on any
>     Xen platform, not just XenServer.
>
>       Paul
>
>
>     _______________________________________________
>     win-pv-devel mailing list
>     win-pv-devel@lists.xenproject.org
>     <mailto:win-pv-devel@lists.xenproject.org>
>     http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
>


--------------010303040605020904040400
Content-Type: text/html; charset=utf-8
Content-Length: 29865
Content-Transfer-Encoding: quoted-printable

<html>
  <head>
    <meta content=3D"text/html; charset=3Dutf-8" http-equiv=3D"Content-Type">
  </head>
  <body text=3D"#000000" bgcolor=3D"#FFFFFF">
    <div class=3D"moz-cite-prefix">Il 17/11/2015 10:51, Paul Durrant ha
      scritto:<br>
    </div>
    <blockquote
cite=3D"mid:9AAE0902D5BC7E449B7C8E4E778ABCD02F674D2C@AMSPEX01CL01.citrite.net"
      type=3D"cite">
      <meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dutf-8">
      <meta name=3D"ProgId" content=3D"Word.Document">
      <meta name=3D"Generator" content=3D"Microsoft Word 14">
      <meta name=3D"Originator" content=3D"Microsoft Word 14">
      <link rel=3D"File-List" href=3D"cid:filelist.xml@01D1211D.7998CBC0">
      <!--[if gte mso 9]><xml>
<o:OfficeDocumentSettings>
<o:AllowPNG/>
<o:DoNotRelyOnCSS/>
</o:OfficeDocumentSettings>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:WordDocument>
<w:SpellingState>Clean</w:SpellingState>
<w:TrackMoves/>
<w:TrackFormatting/>
<w:EnvelopeVis/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:DoNotPromoteQF/>
<w:LidThemeOther>EN-GB</w:LidThemeOther>
<w:LidThemeAsian>X-NONE</w:LidThemeAsian>
<w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
<w:Compatibility>
<w:DoNotExpandShiftReturn/>
<w:BreakWrappedTables/>
<w:SplitPgBreakAndParaMark/>
<w:EnableOpenTypeKerning/>
</w:Compatibility>
<m:mathPr>
<m:mathFont m:val=3D"Cambria Math"/>
<m:brkBin m:val=3D"before"/>
<m:brkBinSub m:val=3D"&#45;-"/>
<m:smallFrac m:val=3D"off"/>
<m:dispDef/>
<m:lMargin m:val=3D"0"/>
<m:rMargin m:val=3D"0"/>
<m:defJc m:val=3D"centerGroup"/>
<m:wrapIndent m:val=3D"1440"/>
<m:intLim m:val=3D"subSup"/>
<m:naryLim m:val=3D"undOvr"/>
</m:mathPr></w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState=3D"false" DefUnhideWhenUsed=3D"true" DefSemiHidden=3D"true" DefQFormat=3D"false" DefPriority=3D"99" LatentStyleCount=3D"267">
<w:LsdException Locked=3D"false" Priority=3D"0" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Normal"/>
<w:LsdException Locked=3D"false" Priority=3D"9" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"heading 1"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"heading 2"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"heading 3"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"heading 4"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"heading 5"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"heading 6"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"heading 7"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"heading 8"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"heading 9"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 1"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 2"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 3"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 4"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 5"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 6"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 7"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 8"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 9"/>
<w:LsdException Locked=3D"false" Priority=3D"35" QFormat=3D"true" Name=3D"caption"/>
<w:LsdException Locked=3D"false" Priority=3D"10" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Title"/>
<w:LsdException Locked=3D"false" Priority=3D"1" Name=3D"Default Paragraph Font"/>
<w:LsdException Locked=3D"false" Priority=3D"11" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtitle"/>
<w:LsdException Locked=3D"false" Priority=3D"22" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Strong"/>
<w:LsdException Locked=3D"false" Priority=3D"20" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"59" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Table Grid"/>
<w:LsdException Locked=3D"false" UnhideWhenUsed=3D"false" Name=3D"Placeholder Text"/>
<w:LsdException Locked=3D"false" Priority=3D"1" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"No Spacing"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Shading"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light List"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Grid"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 1"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 2"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 1"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 2"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 1"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 2"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 3"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Dark List"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Shading"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful List"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Grid"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Shading Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Grid Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 1 Accent 1"/>
<w:LsdException Locked=3D"false" UnhideWhenUsed=3D"false" Name=3D"Revision"/>
<w:LsdException Locked=3D"false" Priority=3D"34" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"List Paragraph"/>
<w:LsdException Locked=3D"false" Priority=3D"29" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Quote"/>
<w:LsdException Locked=3D"false" Priority=3D"30" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Quote"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Dark List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Shading Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Grid Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Shading Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Grid Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Dark List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Shading Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Grid Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Shading Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Grid Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Dark List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Shading Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Grid Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Shading Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Grid Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Dark List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Shading Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Grid Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Shading Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Grid Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Dark List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Shading Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Grid Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Shading Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Grid Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Dark List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Shading Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Grid Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"19" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtle Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"21" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"31" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtle Reference"/>
<w:LsdException Locked=3D"false" Priority=3D"32" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Reference"/>
<w:LsdException Locked=3D"false" Priority=3D"33" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Book Title"/>
<w:LsdException Locked=3D"false" Priority=3D"37" Name=3D"Bibliography"/>
<w:LsdException Locked=3D"false" Priority=3D"39" QFormat=3D"true" Name=3D"TOC Heading"/>
</w:LatentStyles>
</xml><![endif]-->
      <style><!--
/* Font Definitions */
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;
	mso-font-alt:"Arial Rounded MT Bold";
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-536870145 1073786111 1 0 415 0;}
@font-face
	{font-family:Tahoma;
	panose-1:2 11 6 4 3 5 4 4 2 4;
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-520081665 -1073717157 41 0 66047 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{mso-style-unhide:no;
	mso-style-qformat:yes;
	mso-style-parent:"";
	margin:0cm;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman","serif";
	mso-fareast-font-family:Calibri;}
a:link, span.MsoHyperlink
	{mso-style-noshow:yes;
	mso-style-priority:99;
	color:blue;
	text-decoration:underline;
	text-underline:single;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-noshow:yes;
	mso-style-priority:99;
	color:purple;
	text-decoration:underline;
	text-underline:single;}
span.EmailStyle17
	{mso-style-type:personal-reply;
	mso-style-noshow:yes;
	mso-style-unhide:no;
	mso-ansi-font-size:11.0pt;
	mso-bidi-font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-fareast-font-family:Calibri;
	mso-hansi-font-family:Calibri;
	mso-bidi-font-family:"Times New Roman";
	color:#1F497D;}
.MsoChpDefault
	{mso-style-type:export-only;
	mso-default-props:yes;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-fareast-font-family:Calibri;
	mso-hansi-font-family:Calibri;
	mso-bidi-font-family:"Times New Roman";
	mso-fareast-language:EN-US;}
@page WordSection1
	{size:612.0pt 792.0pt;
	margin:72.0pt 72.0pt 72.0pt 72.0pt;
	mso-header-margin:36.0pt;
	mso-footer-margin:36.0pt;
	mso-paper-source:0;}
div.WordSection1
	{page:WordSection1;}
--></style><!--[if gte mso 10]><style>/* Style Definitions */
table.MsoNormalTable
	{mso-style-name:"Table Normal";
	mso-tstyle-rowband-size:0;
	mso-tstyle-colband-size:0;
	mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-parent:"";
	mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
	mso-para-margin:0cm;
	mso-para-margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-hansi-font-family:Calibri;
	mso-fareast-language:EN-US;}
</style><![endif]--><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext=3D"edit" spidmax=3D"1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext=3D"edit">
<o:idmap v:ext=3D"edit" data=3D"1" />
</o:shapelayout></xml><![endif]-->
      <div class=3D"WordSection1">
        <p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d"
            face=3D"Calibri"><span
              style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-bidi-font-family:&quot;Times
              New Roman&quot;;color:#1F497D">Very glad to hear it all
              worked well. Thanks for the encouragement!<o:p></o:p></span></font></p>
        <p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d"
            face=3D"Calibri"><span
              style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-bidi-font-family:&quot;Times
              New Roman&quot;;color:#1F497D"><o:p>=C2=A0</o:p></span></font></p>
        <p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d"
            face=3D"Calibri"><span
              style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-bidi-font-family:&quot;Times
              New Roman&quot;;color:#1F497D"><span
                style=3D"mso-spacerun:yes">=C2=A0
              </span>Paul<o:p></o:p></span></font></p>
        <p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d"
            face=3D"Calibri"><span
              style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-bidi-font-family:&quot;Times
              New Roman&quot;;color:#1F497D"><o:p>=C2=A0</o:p></span></font></p>
        <div style=3D"border:none;border-left:solid blue 1.5pt;padding:0cm
          0cm 0cm 4.0pt">
          <div>
            <div style=3D"border:none;border-top:solid #B5C4DF
              1.0pt;padding:3.0pt 0cm 0cm 0cm">
              <p class=3D"MsoNormal"><b><font size=3D"2" face=3D"Tahoma"><span
                      style=3D"font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;mso-fareast-font-family:&quot;Times
                      New
                      Roman&quot;;mso-ansi-language:EN-US;font-weight:bold"
                      lang=3D"EN-US">From:</span></font></b><font size=3D"2"
                  face=3D"Tahoma"><span
                    style=3D"font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;mso-fareast-font-family:&quot;Times
                    New Roman&quot;;mso-ansi-language:EN-US"
                    lang=3D"EN-US"> John Jaser [<a class=3D"moz-txt-link-freetext" href=3D"mailto:john@jaser.net">mailto:john@jaser.net</a>] <br>
                    <b><span style=3D"font-weight:bold">Sent:</span></b>
                    16 November 2015 18:46<br>
                    <b><span style=3D"font-weight:bold">To:</span></b>
                    Paul Durrant; Fabio Fantoni<br>
                    <b><span style=3D"font-weight:bold">Cc:</span></b>
                    <a class=3D"moz-txt-link-abbreviated" href=3D"mailto:win-pv-devel@lists.xenproject.org">win-pv-devel@lists.xenproject.org</a><br>
                    <b><span style=3D"font-weight:bold">Subject:</span></b>
                    Re: [win-pv-devel] Signing new winpv drivers<o:p></o:p></span></font></p>
            </div>
          </div>
          <p class=3D"MsoNormal"><font size=3D"3" face=3D"Times New Roman"><span
                style=3D"font-size:12.0pt"><o:p>=C2=A0</o:p></span></font></p>
          <div>
            <p class=3D"MsoNormal"><font size=3D"3" face=3D"Times New Roman"><span
                  style=3D"font-size:12.0pt">My test Win 10 system with
                  8.1.0.xx PV drivers just did the first large (non
                  insider) upgrade since GA (build 10240) to build
                  10586, and I am happy to say, test signing remained
                  honored, and the system upgraded normally.=C2=A0 Very
                  encouraging.=C2=A0 Hats off to the PV dev team.</span></font></p>
          </div>
        </div>
      </div>
    </blockquote>
    <br>
    Few weeks ago I did another tests with latest insider build and it
    had maintained testsigning setting also on my domUs (I suppose was a
    windows bug of previous build now fixed), after windows upgrade the
    pv drivers was not working (used the emulated disks and network
    instead) but after a windows reboot pv device returned working. I
    hope that with signed drivers will remain enabled to avoid manual
    reboot when will be used in production and improving performance
    during windows upgrade (on low cost notebook was <span
      id=3D"result_box" class=3D"short_text" lang=3D"en"><span class=3D"hps">visibly</span>
      <span class=3D"hps">faster than on domUs on server with better
        hardware, I suppose was for pv disabled during win upgrade</span></span>)<br>
    Same with ovmf instead of seabios except the test with pv disks
    (without emulated one) where update always fails (tried 4 times
    total), I don't know if during windows upgrade testsigned drivers
    are always disabled or is a winpv unexpected case, I'll retry when
    signed drivers will be available.<br>
    <br>
    I'll keep new winpv drivers tested, thanks to anyone works on them.<br>
    <br>
    <blockquote
cite=3D"mid:9AAE0902D5BC7E449B7C8E4E778ABCD02F674D2C@AMSPEX01CL01.citrite.net"
      type=3D"cite">
      <div class=3D"WordSection1">
        <div style=3D"border:none;border-left:solid blue 1.5pt;padding:0cm
          0cm 0cm 4.0pt">
          <div>
            <p class=3D"MsoNormal"><font size=3D"3" face=3D"Times New Roman"><span
                  style=3D"font-size:12.0pt"><o:p></o:p></span></font></p>
          </div>
          <p class=3D"MsoNormal"><font size=3D"3" face=3D"Times New Roman"><span
                style=3D"font-size:12.0pt"><o:p>=C2=A0</o:p></span></font></p>
          <div>
            <div>
              <p class=3D"MsoNormal"><font size=3D"3" face=3D"Times New Roman"><span
                    style=3D"font-size:12.0pt">On Mon, Oct 12, 2015 at
                    4:19 AM Paul Durrant &lt;<a moz-do-not-send=3D"true"
                      href=3D"mailto:Paul.Durrant@citrix.com">Paul.Durrant@citrix.com</a>&gt;
                    wrote:<o:p></o:p></span></font></p>
            </div>
            <blockquote style=3D"border:none;border-left:solid #CCCCCC
              1.0pt;mso-border-left-alt:solid #CCCCCC .75pt;padding:0cm
              0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm">
              <p class=3D"MsoNormal"><font size=3D"3" face=3D"Times New Roman"><span
                    style=3D"font-size:12.0pt">De-htmling...<br>
                    <br>
                    -----<br>
                    [snip]<br>
                    <br>
                    Any news on signed drivers=3F<br>
                    Actually the automatic build only with new commit in
                    master branch and keep only the latest build, is
                    possible to improve it please=3F<br>
                    For example I think is good build also latest commit
                    of staging-8.1 branch and all tags (keeeping all rc
                    and stable build in this case).<br>
                    This will be easier and faster test also rc builds
                    and any commit for next stable versions.<br>
                    -----<br>
                    <br>
                    No news on XenProject driver signing. There should
                    be some signed Citrix branded drivers soon though
                    and these should work on any Xen platform, not just
                    XenServer.<br>
                    <br>
                    =C2=A0 Paul<br>
                    <br>
                    <br>
                    _______________________________________________<br>
                    win-pv-devel mailing list<br>
                    <a moz-do-not-send=3D"true"
                      href=3D"mailto:win-pv-devel@lists.xenproject.org"
                      target=3D"_blank">win-pv-devel@lists.xenproject.org</a><br>
                    <a moz-do-not-send=3D"true"
                      href=3D"http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel"
                      target=3D"_blank">http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel</a><o:p></o:p></span></font></p>
            </blockquote>
          </div>
        </div>
      </div>
    </blockquote>
    <br>
  </body>
</html>

--------------010303040605020904040400--


--===============6953147278384775149==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--===============6953147278384775149==--


From win-pv-devel-bounces@lists.xenproject.org Tue Nov 17 10:22:34 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 17 Nov 2015 10:22:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZydPG-0006YV-4h; Tue, 17 Nov 2015 10:22:34 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1ZydPD-0006Xb-LY
	for win-pv-devel@lists.xenproject.org; Tue, 17 Nov 2015 10:22:32 +0000
Received: from [85.158.137.68] by server-5.bemta-3.messagelabs.com id
	36/0F-01748-6EFFA465; Tue, 17 Nov 2015 10:22:30 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-7.tower-31.messagelabs.com!1447755749!4334256!1
X-Originating-IP: [74.125.82.48]
X-SpamReason: No, hits=1.1 required=7.0 tests=BODY_RANDOM_LONG,
	HTML_90_100,HTML_MESSAGE
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 27428 invoked from network); 17 Nov 2015 10:22:30 -0000
Received: from mail-wm0-f48.google.com (HELO mail-wm0-f48.google.com)
	(74.125.82.48)
	by server-7.tower-31.messagelabs.com with AES128-GCM-SHA256 encrypted
	SMTP; 17 Nov 2015 10:22:30 -0000
Received: by wmww144 with SMTP id w144so18690269wmw.0
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 17 Nov 2015 02:22:29 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=m2r_biz.20150623.gappssmtp.com; s=20150623;
	h=subject:to:references:cc:from:message-id:date:user-agent
	:mime-version:in-reply-to:content-type;
	bh=puDz4CQ0JH8osFJ2/Vg4jMujBU/5K3oxqIEhbY+V8og=;
	b=YpcmOwJMubIaIOjs7A6B7nNX+eLMGCxk3lhC3ae9TRwnmXfLjXCXGFcjWyB65iVDEy
	4IdZKUKwk54yMhvu67kOPcVyxDnR8BGVHUMdeF/ACSWxaBmHp/QZLsMngUTagUXwaefK
	SmEnBiGs3lBBUhw5S6OH2TiLWSCJ2TgsooeGRJ/rvwunGaoS7YoNIYttoaq8tAHGjCuj
	2gtmg/XgFo3OaVT8qHGAoOPnlvNfaLXh8vBG3BBJYBQUqbNTCff4OvFg4wCF3p2mMhQS
	oKXLdzReyMX8ko/LEMrWrisGDYo+34c6WdAMx3SXMNYKvUZ8B7X8Wi71VV/i+g7/KsPO
	E3Lg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:subject:to:references:cc:from:message-id:date
	:user-agent:mime-version:in-reply-to:content-type;
	bh=puDz4CQ0JH8osFJ2/Vg4jMujBU/5K3oxqIEhbY+V8og=;
	b=liNrLS+3dbJZpDkIcCrN6aEzO99m2J7sJKXx11QXtWqBDlscXNVU7h62xkz30bfapq
	VRWF710mgH9bGeMCUy1bCduvqfV/i7m34M6UY1abulWvdQeSEi2UfUf2iblxL1G+qdqL
	sQ5w/F3fp/Dcf6KuRhLJIbWuk4TYSWKDoWOeC+lxZ6tu2CNsz0T1l03ybWegdcv/tjEV
	cVgZ6Z7BuBfPfwLneCG4yLGwE6nAHRHcqkVuLlu68i/Viktu9vbyOANRN21EfeLUb+pM
	NLwpyUaRdbqHqeMAmt0VYdQatffbXPfsZdBXYXXPBgkJKtvpLVV9JhvCDgNu7DmucrUX
	LwZw==
X-Gm-Message-State: ALoCoQkpNF32kkyggtQmZH8WzNbN4MnTsVkNqf25U/WTGfWNuOfrhkUqk63pu4E3nYmgkfLALe6y
X-Received: by 10.194.6.40 with SMTP id x8mr40033526wjx.50.1447755749690;
	Tue, 17 Nov 2015 02:22:29 -0800 (PST)
Received: from [192.168.1.37] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by smtp.googlemail.com with ESMTPSA id
	gl4sm32082608wjd.17.2015.11.17.02.22.27
	(version=TLSv1/SSLv3 cipher=OTHER);
	Tue, 17 Nov 2015 02:22:28 -0800 (PST)
To: Paul Durrant <Paul.Durrant@citrix.com>, John Jaser <john@jaser.net>
References: <55D5D908.1040506@m2r.biz>
	<sleacjrdcrrvsxgctwyek24q.1440085065667@email.android.com>
	<55D6DB89.9020307@m2r.biz> <561B69BC.2090008@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F60B2DF@AMSPEX01CL01.citrite.net>
	<CAFsYgP1kYBQzuFk=tLHPCz-ZH1jpE3kBGNwGCXRkfwN+BJV0WA@mail.gmail.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F674D2C@AMSPEX01CL01.citrite.net>
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
Message-ID: <564AFFE6.1090005@m2r.biz>
Date: Tue, 17 Nov 2015 11:22:30 +0100
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.3.0
MIME-Version: 1.0
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F674D2C@AMSPEX01CL01.citrite.net>
Cc: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Subject: Re: [win-pv-devel] Signing new winpv drivers
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============6953147278384775149=="
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

This is a multi-part message in MIME format.
--===============6953147278384775149==
Content-Type: multipart/alternative;
 boundary="------------010303040605020904040400"

This is a multi-part message in MIME format.
--------------010303040605020904040400
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit

Il 17/11/2015 10:51, Paul Durrant ha scritto:
>
> Very glad to hear it all worked well. Thanks for the encouragement!
>
> Paul
>
> *From:*John Jaser [mailto:john@jaser.net]
> *Sent:* 16 November 2015 18:46
> *To:* Paul Durrant; Fabio Fantoni
> *Cc:* win-pv-devel@lists.xenproject.org
> *Subject:* Re: [win-pv-devel] Signing new winpv drivers
>
> My test Win 10 system with 8.1.0.xx PV drivers just did the first 
> large (non insider) upgrade since GA (build 10240) to build 10586, and 
> I am happy to say, test signing remained honored, and the system 
> upgraded normally.  Very encouraging.  Hats off to the PV dev team.
>

Few weeks ago I did another tests with latest insider build and it had 
maintained testsigning setting also on my domUs (I suppose was a windows 
bug of previous build now fixed), after windows upgrade the pv drivers 
was not working (used the emulated disks and network instead) but after 
a windows reboot pv device returned working. I hope that with signed 
drivers will remain enabled to avoid manual reboot when will be used in 
production and improving performance during windows upgrade (on low cost 
notebook was visibly faster than on domUs on server with better 
hardware, I suppose was for pv disabled during win upgrade)
Same with ovmf instead of seabios except the test with pv disks (without 
emulated one) where update always fails (tried 4 times total), I don't 
know if during windows upgrade testsigned drivers are always disabled or 
is a winpv unexpected case, I'll retry when signed drivers will be 
available.

I'll keep new winpv drivers tested, thanks to anyone works on them.

> On Mon, Oct 12, 2015 at 4:19 AM Paul Durrant <Paul.Durrant@citrix.com 
> <mailto:Paul.Durrant@citrix.com>> wrote:
>
>     De-htmling...
>
>     -----
>     [snip]
>
>     Any news on signed drivers?
>     Actually the automatic build only with new commit in master branch
>     and keep only the latest build, is possible to improve it please?
>     For example I think is good build also latest commit of
>     staging-8.1 branch and all tags (keeeping all rc and stable build
>     in this case).
>     This will be easier and faster test also rc builds and any commit
>     for next stable versions.
>     -----
>
>     No news on XenProject driver signing. There should be some signed
>     Citrix branded drivers soon though and these should work on any
>     Xen platform, not just XenServer.
>
>       Paul
>
>
>     _______________________________________________
>     win-pv-devel mailing list
>     win-pv-devel@lists.xenproject.org
>     <mailto:win-pv-devel@lists.xenproject.org>
>     http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
>


--------------010303040605020904040400
Content-Type: text/html; charset=utf-8
Content-Length: 29865
Content-Transfer-Encoding: quoted-printable

<html>
  <head>
    <meta content=3D"text/html; charset=3Dutf-8" http-equiv=3D"Content-Type">
  </head>
  <body text=3D"#000000" bgcolor=3D"#FFFFFF">
    <div class=3D"moz-cite-prefix">Il 17/11/2015 10:51, Paul Durrant ha
      scritto:<br>
    </div>
    <blockquote
cite=3D"mid:9AAE0902D5BC7E449B7C8E4E778ABCD02F674D2C@AMSPEX01CL01.citrite.net"
      type=3D"cite">
      <meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dutf-8">
      <meta name=3D"ProgId" content=3D"Word.Document">
      <meta name=3D"Generator" content=3D"Microsoft Word 14">
      <meta name=3D"Originator" content=3D"Microsoft Word 14">
      <link rel=3D"File-List" href=3D"cid:filelist.xml@01D1211D.7998CBC0">
      <!--[if gte mso 9]><xml>
<o:OfficeDocumentSettings>
<o:AllowPNG/>
<o:DoNotRelyOnCSS/>
</o:OfficeDocumentSettings>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:WordDocument>
<w:SpellingState>Clean</w:SpellingState>
<w:TrackMoves/>
<w:TrackFormatting/>
<w:EnvelopeVis/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:DoNotPromoteQF/>
<w:LidThemeOther>EN-GB</w:LidThemeOther>
<w:LidThemeAsian>X-NONE</w:LidThemeAsian>
<w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
<w:Compatibility>
<w:DoNotExpandShiftReturn/>
<w:BreakWrappedTables/>
<w:SplitPgBreakAndParaMark/>
<w:EnableOpenTypeKerning/>
</w:Compatibility>
<m:mathPr>
<m:mathFont m:val=3D"Cambria Math"/>
<m:brkBin m:val=3D"before"/>
<m:brkBinSub m:val=3D"&#45;-"/>
<m:smallFrac m:val=3D"off"/>
<m:dispDef/>
<m:lMargin m:val=3D"0"/>
<m:rMargin m:val=3D"0"/>
<m:defJc m:val=3D"centerGroup"/>
<m:wrapIndent m:val=3D"1440"/>
<m:intLim m:val=3D"subSup"/>
<m:naryLim m:val=3D"undOvr"/>
</m:mathPr></w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState=3D"false" DefUnhideWhenUsed=3D"true" DefSemiHidden=3D"true" DefQFormat=3D"false" DefPriority=3D"99" LatentStyleCount=3D"267">
<w:LsdException Locked=3D"false" Priority=3D"0" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Normal"/>
<w:LsdException Locked=3D"false" Priority=3D"9" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"heading 1"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"heading 2"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"heading 3"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"heading 4"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"heading 5"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"heading 6"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"heading 7"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"heading 8"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"heading 9"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 1"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 2"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 3"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 4"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 5"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 6"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 7"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 8"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 9"/>
<w:LsdException Locked=3D"false" Priority=3D"35" QFormat=3D"true" Name=3D"caption"/>
<w:LsdException Locked=3D"false" Priority=3D"10" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Title"/>
<w:LsdException Locked=3D"false" Priority=3D"1" Name=3D"Default Paragraph Font"/>
<w:LsdException Locked=3D"false" Priority=3D"11" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtitle"/>
<w:LsdException Locked=3D"false" Priority=3D"22" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Strong"/>
<w:LsdException Locked=3D"false" Priority=3D"20" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"59" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Table Grid"/>
<w:LsdException Locked=3D"false" UnhideWhenUsed=3D"false" Name=3D"Placeholder Text"/>
<w:LsdException Locked=3D"false" Priority=3D"1" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"No Spacing"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Shading"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light List"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Grid"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 1"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 2"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 1"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 2"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 1"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 2"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 3"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Dark List"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Shading"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful List"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Grid"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Shading Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Grid Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 1 Accent 1"/>
<w:LsdException Locked=3D"false" UnhideWhenUsed=3D"false" Name=3D"Revision"/>
<w:LsdException Locked=3D"false" Priority=3D"34" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"List Paragraph"/>
<w:LsdException Locked=3D"false" Priority=3D"29" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Quote"/>
<w:LsdException Locked=3D"false" Priority=3D"30" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Quote"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Dark List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Shading Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Grid Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Shading Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Grid Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Dark List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Shading Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Grid Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Shading Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Grid Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Dark List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Shading Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Grid Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Shading Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Grid Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Dark List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Shading Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Grid Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Shading Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Grid Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Dark List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Shading Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Grid Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Shading Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Grid Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Dark List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Shading Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Grid Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"19" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtle Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"21" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"31" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtle Reference"/>
<w:LsdException Locked=3D"false" Priority=3D"32" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Reference"/>
<w:LsdException Locked=3D"false" Priority=3D"33" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Book Title"/>
<w:LsdException Locked=3D"false" Priority=3D"37" Name=3D"Bibliography"/>
<w:LsdException Locked=3D"false" Priority=3D"39" QFormat=3D"true" Name=3D"TOC Heading"/>
</w:LatentStyles>
</xml><![endif]-->
      <style><!--
/* Font Definitions */
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;
	mso-font-alt:"Arial Rounded MT Bold";
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-536870145 1073786111 1 0 415 0;}
@font-face
	{font-family:Tahoma;
	panose-1:2 11 6 4 3 5 4 4 2 4;
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-520081665 -1073717157 41 0 66047 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{mso-style-unhide:no;
	mso-style-qformat:yes;
	mso-style-parent:"";
	margin:0cm;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman","serif";
	mso-fareast-font-family:Calibri;}
a:link, span.MsoHyperlink
	{mso-style-noshow:yes;
	mso-style-priority:99;
	color:blue;
	text-decoration:underline;
	text-underline:single;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-noshow:yes;
	mso-style-priority:99;
	color:purple;
	text-decoration:underline;
	text-underline:single;}
span.EmailStyle17
	{mso-style-type:personal-reply;
	mso-style-noshow:yes;
	mso-style-unhide:no;
	mso-ansi-font-size:11.0pt;
	mso-bidi-font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-fareast-font-family:Calibri;
	mso-hansi-font-family:Calibri;
	mso-bidi-font-family:"Times New Roman";
	color:#1F497D;}
.MsoChpDefault
	{mso-style-type:export-only;
	mso-default-props:yes;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-fareast-font-family:Calibri;
	mso-hansi-font-family:Calibri;
	mso-bidi-font-family:"Times New Roman";
	mso-fareast-language:EN-US;}
@page WordSection1
	{size:612.0pt 792.0pt;
	margin:72.0pt 72.0pt 72.0pt 72.0pt;
	mso-header-margin:36.0pt;
	mso-footer-margin:36.0pt;
	mso-paper-source:0;}
div.WordSection1
	{page:WordSection1;}
--></style><!--[if gte mso 10]><style>/* Style Definitions */
table.MsoNormalTable
	{mso-style-name:"Table Normal";
	mso-tstyle-rowband-size:0;
	mso-tstyle-colband-size:0;
	mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-parent:"";
	mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
	mso-para-margin:0cm;
	mso-para-margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-hansi-font-family:Calibri;
	mso-fareast-language:EN-US;}
</style><![endif]--><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext=3D"edit" spidmax=3D"1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext=3D"edit">
<o:idmap v:ext=3D"edit" data=3D"1" />
</o:shapelayout></xml><![endif]-->
      <div class=3D"WordSection1">
        <p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d"
            face=3D"Calibri"><span
              style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-bidi-font-family:&quot;Times
              New Roman&quot;;color:#1F497D">Very glad to hear it all
              worked well. Thanks for the encouragement!<o:p></o:p></span></font></p>
        <p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d"
            face=3D"Calibri"><span
              style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-bidi-font-family:&quot;Times
              New Roman&quot;;color:#1F497D"><o:p>=C2=A0</o:p></span></font></p>
        <p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d"
            face=3D"Calibri"><span
              style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-bidi-font-family:&quot;Times
              New Roman&quot;;color:#1F497D"><span
                style=3D"mso-spacerun:yes">=C2=A0
              </span>Paul<o:p></o:p></span></font></p>
        <p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d"
            face=3D"Calibri"><span
              style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-bidi-font-family:&quot;Times
              New Roman&quot;;color:#1F497D"><o:p>=C2=A0</o:p></span></font></p>
        <div style=3D"border:none;border-left:solid blue 1.5pt;padding:0cm
          0cm 0cm 4.0pt">
          <div>
            <div style=3D"border:none;border-top:solid #B5C4DF
              1.0pt;padding:3.0pt 0cm 0cm 0cm">
              <p class=3D"MsoNormal"><b><font size=3D"2" face=3D"Tahoma"><span
                      style=3D"font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;mso-fareast-font-family:&quot;Times
                      New
                      Roman&quot;;mso-ansi-language:EN-US;font-weight:bold"
                      lang=3D"EN-US">From:</span></font></b><font size=3D"2"
                  face=3D"Tahoma"><span
                    style=3D"font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;mso-fareast-font-family:&quot;Times
                    New Roman&quot;;mso-ansi-language:EN-US"
                    lang=3D"EN-US"> John Jaser [<a class=3D"moz-txt-link-freetext" href=3D"mailto:john@jaser.net">mailto:john@jaser.net</a>] <br>
                    <b><span style=3D"font-weight:bold">Sent:</span></b>
                    16 November 2015 18:46<br>
                    <b><span style=3D"font-weight:bold">To:</span></b>
                    Paul Durrant; Fabio Fantoni<br>
                    <b><span style=3D"font-weight:bold">Cc:</span></b>
                    <a class=3D"moz-txt-link-abbreviated" href=3D"mailto:win-pv-devel@lists.xenproject.org">win-pv-devel@lists.xenproject.org</a><br>
                    <b><span style=3D"font-weight:bold">Subject:</span></b>
                    Re: [win-pv-devel] Signing new winpv drivers<o:p></o:p></span></font></p>
            </div>
          </div>
          <p class=3D"MsoNormal"><font size=3D"3" face=3D"Times New Roman"><span
                style=3D"font-size:12.0pt"><o:p>=C2=A0</o:p></span></font></p>
          <div>
            <p class=3D"MsoNormal"><font size=3D"3" face=3D"Times New Roman"><span
                  style=3D"font-size:12.0pt">My test Win 10 system with
                  8.1.0.xx PV drivers just did the first large (non
                  insider) upgrade since GA (build 10240) to build
                  10586, and I am happy to say, test signing remained
                  honored, and the system upgraded normally.=C2=A0 Very
                  encouraging.=C2=A0 Hats off to the PV dev team.</span></font></p>
          </div>
        </div>
      </div>
    </blockquote>
    <br>
    Few weeks ago I did another tests with latest insider build and it
    had maintained testsigning setting also on my domUs (I suppose was a
    windows bug of previous build now fixed), after windows upgrade the
    pv drivers was not working (used the emulated disks and network
    instead) but after a windows reboot pv device returned working. I
    hope that with signed drivers will remain enabled to avoid manual
    reboot when will be used in production and improving performance
    during windows upgrade (on low cost notebook was <span
      id=3D"result_box" class=3D"short_text" lang=3D"en"><span class=3D"hps">visibly</span>
      <span class=3D"hps">faster than on domUs on server with better
        hardware, I suppose was for pv disabled during win upgrade</span></span>)<br>
    Same with ovmf instead of seabios except the test with pv disks
    (without emulated one) where update always fails (tried 4 times
    total), I don't know if during windows upgrade testsigned drivers
    are always disabled or is a winpv unexpected case, I'll retry when
    signed drivers will be available.<br>
    <br>
    I'll keep new winpv drivers tested, thanks to anyone works on them.<br>
    <br>
    <blockquote
cite=3D"mid:9AAE0902D5BC7E449B7C8E4E778ABCD02F674D2C@AMSPEX01CL01.citrite.net"
      type=3D"cite">
      <div class=3D"WordSection1">
        <div style=3D"border:none;border-left:solid blue 1.5pt;padding:0cm
          0cm 0cm 4.0pt">
          <div>
            <p class=3D"MsoNormal"><font size=3D"3" face=3D"Times New Roman"><span
                  style=3D"font-size:12.0pt"><o:p></o:p></span></font></p>
          </div>
          <p class=3D"MsoNormal"><font size=3D"3" face=3D"Times New Roman"><span
                style=3D"font-size:12.0pt"><o:p>=C2=A0</o:p></span></font></p>
          <div>
            <div>
              <p class=3D"MsoNormal"><font size=3D"3" face=3D"Times New Roman"><span
                    style=3D"font-size:12.0pt">On Mon, Oct 12, 2015 at
                    4:19 AM Paul Durrant &lt;<a moz-do-not-send=3D"true"
                      href=3D"mailto:Paul.Durrant@citrix.com">Paul.Durrant@citrix.com</a>&gt;
                    wrote:<o:p></o:p></span></font></p>
            </div>
            <blockquote style=3D"border:none;border-left:solid #CCCCCC
              1.0pt;mso-border-left-alt:solid #CCCCCC .75pt;padding:0cm
              0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm">
              <p class=3D"MsoNormal"><font size=3D"3" face=3D"Times New Roman"><span
                    style=3D"font-size:12.0pt">De-htmling...<br>
                    <br>
                    -----<br>
                    [snip]<br>
                    <br>
                    Any news on signed drivers=3F<br>
                    Actually the automatic build only with new commit in
                    master branch and keep only the latest build, is
                    possible to improve it please=3F<br>
                    For example I think is good build also latest commit
                    of staging-8.1 branch and all tags (keeeping all rc
                    and stable build in this case).<br>
                    This will be easier and faster test also rc builds
                    and any commit for next stable versions.<br>
                    -----<br>
                    <br>
                    No news on XenProject driver signing. There should
                    be some signed Citrix branded drivers soon though
                    and these should work on any Xen platform, not just
                    XenServer.<br>
                    <br>
                    =C2=A0 Paul<br>
                    <br>
                    <br>
                    _______________________________________________<br>
                    win-pv-devel mailing list<br>
                    <a moz-do-not-send=3D"true"
                      href=3D"mailto:win-pv-devel@lists.xenproject.org"
                      target=3D"_blank">win-pv-devel@lists.xenproject.org</a><br>
                    <a moz-do-not-send=3D"true"
                      href=3D"http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel"
                      target=3D"_blank">http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel</a><o:p></o:p></span></font></p>
            </blockquote>
          </div>
        </div>
      </div>
    </blockquote>
    <br>
  </body>
</html>

--------------010303040605020904040400--


--===============6953147278384775149==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--===============6953147278384775149==--


From win-pv-devel-bounces@lists.xenproject.org Tue Nov 17 17:05:41 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 17 Nov 2015 17:05:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZyjhM-0000Ew-RR; Tue, 17 Nov 2015 17:05:40 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=75668042f=owen.smith@citrix.com>)
	id 1ZyjhL-0000El-QG
	for win-pv-devel@lists.xenproject.org; Tue, 17 Nov 2015 17:05:39 +0000
Received: from [85.158.137.68] by server-11.bemta-3.messagelabs.com id
	23/64-32641-26E5B465; Tue, 17 Nov 2015 17:05:38 +0000
X-Env-Sender: prvs=75668042f=owen.smith@citrix.com
X-Msg-Ref: server-16.tower-31.messagelabs.com!1447779936!3823506!1
X-Originating-IP: [66.165.176.89]
X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: 
	VHJ1c3RlZCBJUDogNjYuMTY1LjE3Ni44OSA9PiAyMDMwMDc=\n,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 21179 invoked from network); 17 Nov 2015 17:05:38 -0000
Received: from smtp.citrix.com (HELO SMTP.CITRIX.COM) (66.165.176.89)
	by server-16.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	17 Nov 2015 17:05:38 -0000
X-IronPort-AV: E=Sophos;i="5.20,308,1444694400"; d="scan'208";a="312809368"
From: Owen Smith <owen.smith@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
Date: Tue, 17 Nov 2015 17:05:23 +0000
Message-ID: <1447779923-15352-1-git-send-email-owen.smith@citrix.com>
X-Mailer: git-send-email 1.9.4.msysgit.1
MIME-Version: 1.0
X-DLP: MIA2
Cc: Owen Smith <owen.smith@citrix.com>
Subject: [win-pv-devel] [PATCH] Dont force a WMI event when reregistering a
	watch
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

When a watch is registered, the watch gets triggered. This will result
in a WMI event being fired. There is no need to manually fire a WMI
event in this case, as it can lead to the WMI event being discarded.

Signed-off-by: Owen Smith <owen.smith@citrix.com>
---
 src/xeniface/wmi.c | 22 +++++++++-------------
 1 file changed, 9 insertions(+), 13 deletions(-)

diff --git a/src/xeniface/wmi.c b/src/xeniface/wmi.c
index c73e990..b3e4c55 100644
--- a/src/xeniface/wmi.c
+++ b/src/xeniface/wmi.c
@@ -875,19 +875,15 @@ VOID WatchCallbackThread(__in PVOID StartContext) {
                 ExFreePool(watch);
                 session->mapchanged = TRUE;
                 session->watchcount --;
-            }
-            else
-            {
-                if (!session->suspended) {
-                    if (watch->suspendcount !=XENBUS_SUSPEND(GetCount, &watch->fdoData->SuspendInterface)) {
-                        watch->suspendcount = XENBUS_SUSPEND(GetCount, &watch->fdoData->SuspendInterface);
-                        XenIfaceDebugPrint(WARNING,"SessionSuspendResumeUnwatch %p\n", watch->watchhandle);
-
-                        XENBUS_STORE(WatchRemove, &watch->fdoData->StoreInterface, watch->watchhandle);
-                        watch->watchhandle = NULL;
-                        StartWatch(watch->fdoData, watch);
-                    }
-                }
+            } else if (!session->suspended &&
+                       watch->suspendcount != XENBUS_SUSPEND(GetCount, &watch->fdoData->SuspendInterface)) {
+                watch->suspendcount = XENBUS_SUSPEND(GetCount, &watch->fdoData->SuspendInterface);
+                XenIfaceDebugPrint(WARNING,"SessionSuspendResumeUnwatch %p\n", watch->watchhandle);
+
+                XENBUS_STORE(WatchRemove, &watch->fdoData->StoreInterface, watch->watchhandle);
+                watch->watchhandle = NULL;
+                StartWatch(watch->fdoData, watch);
+            } else {
                 FireWatch(watch);
             }
             ExReleaseFastMutex(&session->WatchMapLock);
-- 
1.9.4.msysgit.1


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

From win-pv-devel-bounces@lists.xenproject.org Tue Nov 17 17:05:41 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 17 Nov 2015 17:05:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZyjhM-0000Ew-RR; Tue, 17 Nov 2015 17:05:40 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=75668042f=owen.smith@citrix.com>)
	id 1ZyjhL-0000El-QG
	for win-pv-devel@lists.xenproject.org; Tue, 17 Nov 2015 17:05:39 +0000
Received: from [85.158.137.68] by server-11.bemta-3.messagelabs.com id
	23/64-32641-26E5B465; Tue, 17 Nov 2015 17:05:38 +0000
X-Env-Sender: prvs=75668042f=owen.smith@citrix.com
X-Msg-Ref: server-16.tower-31.messagelabs.com!1447779936!3823506!1
X-Originating-IP: [66.165.176.89]
X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: 
	VHJ1c3RlZCBJUDogNjYuMTY1LjE3Ni44OSA9PiAyMDMwMDc=\n,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 21179 invoked from network); 17 Nov 2015 17:05:38 -0000
Received: from smtp.citrix.com (HELO SMTP.CITRIX.COM) (66.165.176.89)
	by server-16.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	17 Nov 2015 17:05:38 -0000
X-IronPort-AV: E=Sophos;i="5.20,308,1444694400"; d="scan'208";a="312809368"
From: Owen Smith <owen.smith@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
Date: Tue, 17 Nov 2015 17:05:23 +0000
Message-ID: <1447779923-15352-1-git-send-email-owen.smith@citrix.com>
X-Mailer: git-send-email 1.9.4.msysgit.1
MIME-Version: 1.0
X-DLP: MIA2
Cc: Owen Smith <owen.smith@citrix.com>
Subject: [win-pv-devel] [PATCH] Dont force a WMI event when reregistering a
	watch
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

When a watch is registered, the watch gets triggered. This will result
in a WMI event being fired. There is no need to manually fire a WMI
event in this case, as it can lead to the WMI event being discarded.

Signed-off-by: Owen Smith <owen.smith@citrix.com>
---
 src/xeniface/wmi.c | 22 +++++++++-------------
 1 file changed, 9 insertions(+), 13 deletions(-)

diff --git a/src/xeniface/wmi.c b/src/xeniface/wmi.c
index c73e990..b3e4c55 100644
--- a/src/xeniface/wmi.c
+++ b/src/xeniface/wmi.c
@@ -875,19 +875,15 @@ VOID WatchCallbackThread(__in PVOID StartContext) {
                 ExFreePool(watch);
                 session->mapchanged = TRUE;
                 session->watchcount --;
-            }
-            else
-            {
-                if (!session->suspended) {
-                    if (watch->suspendcount !=XENBUS_SUSPEND(GetCount, &watch->fdoData->SuspendInterface)) {
-                        watch->suspendcount = XENBUS_SUSPEND(GetCount, &watch->fdoData->SuspendInterface);
-                        XenIfaceDebugPrint(WARNING,"SessionSuspendResumeUnwatch %p\n", watch->watchhandle);
-
-                        XENBUS_STORE(WatchRemove, &watch->fdoData->StoreInterface, watch->watchhandle);
-                        watch->watchhandle = NULL;
-                        StartWatch(watch->fdoData, watch);
-                    }
-                }
+            } else if (!session->suspended &&
+                       watch->suspendcount != XENBUS_SUSPEND(GetCount, &watch->fdoData->SuspendInterface)) {
+                watch->suspendcount = XENBUS_SUSPEND(GetCount, &watch->fdoData->SuspendInterface);
+                XenIfaceDebugPrint(WARNING,"SessionSuspendResumeUnwatch %p\n", watch->watchhandle);
+
+                XENBUS_STORE(WatchRemove, &watch->fdoData->StoreInterface, watch->watchhandle);
+                watch->watchhandle = NULL;
+                StartWatch(watch->fdoData, watch);
+            } else {
                 FireWatch(watch);
             }
             ExReleaseFastMutex(&session->WatchMapLock);
-- 
1.9.4.msysgit.1


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

From win-pv-devel-bounces@lists.xenproject.org Wed Nov 18 11:03:51 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 18 Nov 2015 11:03:51 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1Zz0Wk-0006u6-M8; Wed, 18 Nov 2015 11:03:50 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=757da4842=Paul.Durrant@citrix.com>)
	id 1Zz0Wi-0006u0-Ud
	for win-pv-devel@lists.xenproject.org; Wed, 18 Nov 2015 11:03:49 +0000
Received: from [85.158.139.211] by server-3.bemta-5.messagelabs.com id
	D5/FC-13487-41B5C465; Wed, 18 Nov 2015 11:03:48 +0000
X-Env-Sender: prvs=757da4842=Paul.Durrant@citrix.com
X-Msg-Ref: server-14.tower-206.messagelabs.com!1447844627!4592514!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 36476 invoked from network); 18 Nov 2015 11:03:47 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-14.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	18 Nov 2015 11:03:47 -0000
X-IronPort-AV: E=Sophos;i="5.20,312,1444694400"; 
   d="scan'208";a="7945032"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Owen Smith <owen.smith@citrix.com>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [PATCH] Dont force a WMI event when
	reregistering a	watch
Thread-Index: AQHRIVpFuUq/s5sfCke68Ur3ycB2/J6hnpNQ
Date: Wed, 18 Nov 2015 11:03:46 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F67935F@AMSPEX01CL01.citrite.net>
References: <1447779923-15352-1-git-send-email-owen.smith@citrix.com>
In-Reply-To: <1447779923-15352-1-git-send-email-owen.smith@citrix.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Cc: Owen Smith <owen.smith@citrix.com>
Subject: Re: [win-pv-devel] [PATCH] Dont force a WMI event when
 reregistering a	watch
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> bounces@lists.xenproject.org] On Behalf Of Owen Smith
> Sent: 17 November 2015 17:05
> To: win-pv-devel@lists.xenproject.org
> Cc: Owen Smith
> Subject: [win-pv-devel] [PATCH] Dont force a WMI event when reregistering
> a watch
> 
> When a watch is registered, the watch gets triggered. This will result
> in a WMI event being fired. There is no need to manually fire a WMI
> event in this case, as it can lead to the WMI event being discarded.
> 
> Signed-off-by: Owen Smith <owen.smith@citrix.com>

Acked-by: Paul Durrant <paul.durrant@citrix.com>

I think this should also be backported to 8.1.

> ---
>  src/xeniface/wmi.c | 22 +++++++++-------------
>  1 file changed, 9 insertions(+), 13 deletions(-)
> 
> diff --git a/src/xeniface/wmi.c b/src/xeniface/wmi.c
> index c73e990..b3e4c55 100644
> --- a/src/xeniface/wmi.c
> +++ b/src/xeniface/wmi.c
> @@ -875,19 +875,15 @@ VOID WatchCallbackThread(__in PVOID
> StartContext) {
>                  ExFreePool(watch);
>                  session->mapchanged = TRUE;
>                  session->watchcount --;
> -            }
> -            else
> -            {
> -                if (!session->suspended) {
> -                    if (watch->suspendcount !=XENBUS_SUSPEND(GetCount,
> &watch->fdoData->SuspendInterface)) {
> -                        watch->suspendcount = XENBUS_SUSPEND(GetCount, &watch-
> >fdoData->SuspendInterface);
> -
> XenIfaceDebugPrint(WARNING,"SessionSuspendResumeUnwatch %p\n",
> watch->watchhandle);
> -
> -                        XENBUS_STORE(WatchRemove, &watch->fdoData-
> >StoreInterface, watch->watchhandle);
> -                        watch->watchhandle = NULL;
> -                        StartWatch(watch->fdoData, watch);
> -                    }
> -                }
> +            } else if (!session->suspended &&
> +                       watch->suspendcount != XENBUS_SUSPEND(GetCount,
> &watch->fdoData->SuspendInterface)) {
> +                watch->suspendcount = XENBUS_SUSPEND(GetCount, &watch-
> >fdoData->SuspendInterface);
> +                XenIfaceDebugPrint(WARNING,"SessionSuspendResumeUnwatch
> %p\n", watch->watchhandle);
> +
> +                XENBUS_STORE(WatchRemove, &watch->fdoData->StoreInterface,
> watch->watchhandle);
> +                watch->watchhandle = NULL;
> +                StartWatch(watch->fdoData, watch);
> +            } else {
>                  FireWatch(watch);
>              }
>              ExReleaseFastMutex(&session->WatchMapLock);
> --
> 1.9.4.msysgit.1
> 
> 
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

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

From win-pv-devel-bounces@lists.xenproject.org Wed Nov 18 11:03:51 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 18 Nov 2015 11:03:51 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1Zz0Wk-0006u6-M8; Wed, 18 Nov 2015 11:03:50 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=757da4842=Paul.Durrant@citrix.com>)
	id 1Zz0Wi-0006u0-Ud
	for win-pv-devel@lists.xenproject.org; Wed, 18 Nov 2015 11:03:49 +0000
Received: from [85.158.139.211] by server-3.bemta-5.messagelabs.com id
	D5/FC-13487-41B5C465; Wed, 18 Nov 2015 11:03:48 +0000
X-Env-Sender: prvs=757da4842=Paul.Durrant@citrix.com
X-Msg-Ref: server-14.tower-206.messagelabs.com!1447844627!4592514!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 36476 invoked from network); 18 Nov 2015 11:03:47 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-14.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	18 Nov 2015 11:03:47 -0000
X-IronPort-AV: E=Sophos;i="5.20,312,1444694400"; 
   d="scan'208";a="7945032"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Owen Smith <owen.smith@citrix.com>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [PATCH] Dont force a WMI event when
	reregistering a	watch
Thread-Index: AQHRIVpFuUq/s5sfCke68Ur3ycB2/J6hnpNQ
Date: Wed, 18 Nov 2015 11:03:46 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F67935F@AMSPEX01CL01.citrite.net>
References: <1447779923-15352-1-git-send-email-owen.smith@citrix.com>
In-Reply-To: <1447779923-15352-1-git-send-email-owen.smith@citrix.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Cc: Owen Smith <owen.smith@citrix.com>
Subject: Re: [win-pv-devel] [PATCH] Dont force a WMI event when
 reregistering a	watch
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> bounces@lists.xenproject.org] On Behalf Of Owen Smith
> Sent: 17 November 2015 17:05
> To: win-pv-devel@lists.xenproject.org
> Cc: Owen Smith
> Subject: [win-pv-devel] [PATCH] Dont force a WMI event when reregistering
> a watch
> 
> When a watch is registered, the watch gets triggered. This will result
> in a WMI event being fired. There is no need to manually fire a WMI
> event in this case, as it can lead to the WMI event being discarded.
> 
> Signed-off-by: Owen Smith <owen.smith@citrix.com>

Acked-by: Paul Durrant <paul.durrant@citrix.com>

I think this should also be backported to 8.1.

> ---
>  src/xeniface/wmi.c | 22 +++++++++-------------
>  1 file changed, 9 insertions(+), 13 deletions(-)
> 
> diff --git a/src/xeniface/wmi.c b/src/xeniface/wmi.c
> index c73e990..b3e4c55 100644
> --- a/src/xeniface/wmi.c
> +++ b/src/xeniface/wmi.c
> @@ -875,19 +875,15 @@ VOID WatchCallbackThread(__in PVOID
> StartContext) {
>                  ExFreePool(watch);
>                  session->mapchanged = TRUE;
>                  session->watchcount --;
> -            }
> -            else
> -            {
> -                if (!session->suspended) {
> -                    if (watch->suspendcount !=XENBUS_SUSPEND(GetCount,
> &watch->fdoData->SuspendInterface)) {
> -                        watch->suspendcount = XENBUS_SUSPEND(GetCount, &watch-
> >fdoData->SuspendInterface);
> -
> XenIfaceDebugPrint(WARNING,"SessionSuspendResumeUnwatch %p\n",
> watch->watchhandle);
> -
> -                        XENBUS_STORE(WatchRemove, &watch->fdoData-
> >StoreInterface, watch->watchhandle);
> -                        watch->watchhandle = NULL;
> -                        StartWatch(watch->fdoData, watch);
> -                    }
> -                }
> +            } else if (!session->suspended &&
> +                       watch->suspendcount != XENBUS_SUSPEND(GetCount,
> &watch->fdoData->SuspendInterface)) {
> +                watch->suspendcount = XENBUS_SUSPEND(GetCount, &watch-
> >fdoData->SuspendInterface);
> +                XenIfaceDebugPrint(WARNING,"SessionSuspendResumeUnwatch
> %p\n", watch->watchhandle);
> +
> +                XENBUS_STORE(WatchRemove, &watch->fdoData->StoreInterface,
> watch->watchhandle);
> +                watch->watchhandle = NULL;
> +                StartWatch(watch->fdoData, watch);
> +            } else {
>                  FireWatch(watch);
>              }
>              ExReleaseFastMutex(&session->WatchMapLock);
> --
> 1.9.4.msysgit.1
> 
> 
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

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

From win-pv-devel-bounces@lists.xenproject.org Wed Nov 18 19:29:30 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 18 Nov 2015 19:29:30 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1Zz8Q3-00073e-Tj; Wed, 18 Nov 2015 19:29:27 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <brandon@thinkhuge.net>) id 1Zz8Q1-00073G-UD
	for win-pv-devel@lists.xenproject.org; Wed, 18 Nov 2015 19:29:26 +0000
Received: from [85.158.139.211] by server-3.bemta-5.messagelabs.com id
	92/59-13487-591DC465; Wed, 18 Nov 2015 19:29:25 +0000
X-Env-Sender: brandon@thinkhuge.net
X-Msg-Ref: server-9.tower-206.messagelabs.com!1447874964!4739121!1
X-Originating-IP: [74.125.82.48]
X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG, HTML_MESSAGE
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 9177 invoked from network); 18 Nov 2015 19:29:24 -0000
Received: from mail-wm0-f48.google.com (HELO mail-wm0-f48.google.com)
	(74.125.82.48)
	by server-9.tower-206.messagelabs.com with AES128-GCM-SHA256 encrypted
	SMTP; 18 Nov 2015 19:29:24 -0000
Received: by wmdw130 with SMTP id w130so212586136wmd.0
	for <win-pv-devel@lists.xenproject.org>;
	Wed, 18 Nov 2015 11:29:24 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=thinkhuge-net.20150623.gappssmtp.com; s=20150623;
	h=from:to:subject:date:message-id:mime-version:content-type
	:thread-index:content-language;
	bh=BWGrN4xlDSCq0PL9sLH8sZywJQkEQJ8J8cc73MoFO7M=;
	b=ToHvMiUY7n42MvSQEMTiDhY4/BLHvMOywARh+WObmDsqyL601Bm/Uj/BkPY3jfwo19
	8bv2hDBxgjj7A3QQ7MboCrsioG/mFzSuFt46zOjcez+Lm/FSXtvQ8xbODxMGseHEgBJl
	FitgUShYeeb97/aoU5YLko15MV8HSFlcPXIykF3rx2coklpkAHl0BkQl2YTJze8l2gt4
	CZnWcIb8yLlWmJx0N6+QTfcXe/12pjehqZoZ/PqKc35cLU4HEtf8NzgEMfGwb1l/n/K6
	6PNhOIeQNYOBnpCGxHND+ylFjo2oVbm3KW64FsU4WfNPTHCbU1zCShbDVIMrZ3hzOB5S
	4c0w==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:from:to:subject:date:message-id:mime-version
	:content-type:thread-index:content-language;
	bh=BWGrN4xlDSCq0PL9sLH8sZywJQkEQJ8J8cc73MoFO7M=;
	b=Z6Uop5zK8pf8+S7OHzGLLwRikQsDiy6M1dS1gVXjjaDYgFrUZUXEzCs82ry8iQ6INz
	gOVdlb6nlykPsAePgbBcQFi3d36LEPubWCtvBCoTx95vlFVQ2zgiEyqacK/XjF7tb7Fy
	XZPBYQefkaiaE48QI6+v0VenNAiNTl8dSYW9YdzMQxRV2WA9ZQXLmMSwiihFOP2cqbN7
	vJMvpdBuC2VwEtjMhJRILqUJXhkbMtIaTBaGmvyVKB8OoOh2KZSZOg5FE7xqunt+wgew
	IGDzWPdlXHKNtynHWAjywz2GcaaGK1ZxABxMKGrrZmJYZkS8rbxF+KvMepiRBLLQ5p5T
	pAsA==
X-Gm-Message-State: ALoCoQmoM/0Jr86brmDahwqdVa+1VcjA/jjvKv2t7qIzxPBV0m3Cov6JRvsmXa5MplVGUSyVpB2h
X-Received: by 10.28.146.136 with SMTP id u130mr6128277wmd.91.1447874963802;
	Wed, 18 Nov 2015 11:29:23 -0800 (PST)
Received: from venus (ip68-108-144-100.lv.lv.cox.net. [68.108.144.100])
	by smtp.gmail.com with ESMTPSA id 193sm392274wmp.16.2015.11.18.11.29.22
	for <win-pv-devel@lists.xenproject.org>
	(version=TLS1 cipher=ECDHE-RSA-AES128-SHA bits=128/128);
	Wed, 18 Nov 2015 11:29:22 -0800 (PST)
From: "Brandon Shoemaker" <brandon@thinkhuge.net>
To: <win-pv-devel@lists.xenproject.org>
Date: Wed, 18 Nov 2015 11:29:19 -0800
Message-ID: <024601d12237$6d256d10$47704730$@thinkhuge.net>
MIME-Version: 1.0
X-Mailer: Microsoft Outlook 14.0
Thread-Index: AdEiNxP+JW7DRxirS26vsP8ej5h/iA==
Content-Language: en-us
Subject: [win-pv-devel] signed Windows driver availability
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============3596023584185625314=="
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

This is a multipart message in MIME format.

--===============3596023584185625314==
Content-Type: multipart/alternative;
	boundary="----=_NextPart_000_0247_01D121F4.5F02A240"
Content-Language: en-us

This is a multipart message in MIME format.

------=_NextPart_000_0247_01D121F4.5F02A240
Content-Type: text/plain;
	charset="us-ascii"
Content-Transfer-Encoding: 7bit

Hello,

 

I just joined the list and was hoping I could ask is anyone managing updated
signed Windows drivers yet?    The signed Windows driver availability
situation with XEN is really unacceptable.   We greatly need this to
improve.

 

The last version I obtained was "ejbpv_Vista2008x64_1.0.1105.msi" before the
website went down that was hosting it on the Xen website.

 

I have a VERY large amount of Xen Windows guests so I appreciate if anyone
can give me any information on this.

 

Thanks,

 

Brandon

 


------=_NextPart_000_0247_01D121F4.5F02A240
Content-Type: text/html;
	charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<html xmlns:v=3D"urn:schemas-microsoft-com:vml" =
xmlns:o=3D"urn:schemas-microsoft-com:office:office" =
xmlns:w=3D"urn:schemas-microsoft-com:office:word" =
xmlns:m=3D"http://schemas.microsoft.com/office/2004/12/omml" =
xmlns=3D"http://www.w3.org/TR/REC-html40"><head><meta =
http-equiv=3DContent-Type content=3D"text/html; =
charset=3Dus-ascii"><meta name=3DGenerator content=3D"Microsoft Word 14 =
(filtered medium)"><style><!--
/* Font Definitions */
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{margin:0in;
	margin-bottom:.0001pt;
	font-size:11.0pt;
	font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:blue;
	text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-priority:99;
	color:purple;
	text-decoration:underline;}
span.EmailStyle17
	{mso-style-type:personal-compose;
	font-family:"Calibri","sans-serif";
	color:windowtext;}
.MsoChpDefault
	{mso-style-type:export-only;
	font-family:"Calibri","sans-serif";}
@page WordSection1
	{size:8.5in 11.0in;
	margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
	{page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext=3D"edit" spidmax=3D"1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext=3D"edit">
<o:idmap v:ext=3D"edit" data=3D"1" />
</o:shapelayout></xml><![endif]--></head><body lang=3DEN-US link=3Dblue =
vlink=3Dpurple><div class=3DWordSection1><p =
class=3DMsoNormal>Hello,<o:p></o:p></p><p =
class=3DMsoNormal><o:p>&nbsp;</o:p></p><p class=3DMsoNormal>I just =
joined the list and was hoping I could ask is anyone managing updated =
signed Windows drivers yet?&nbsp;&nbsp;&nbsp; The signed Windows driver =
availability situation with XEN is really unacceptable.&nbsp;&nbsp; We =
greatly need this to improve.<o:p></o:p></p><p =
class=3DMsoNormal><o:p>&nbsp;</o:p></p><p class=3DMsoNormal>The last =
version I obtained was &#8220;ejbpv_Vista2008x64_1.0.1105.msi&#8221; =
before the website went down that was hosting it on the Xen =
website.<o:p></o:p></p><p class=3DMsoNormal><o:p>&nbsp;</o:p></p><p =
class=3DMsoNormal>I have a VERY large amount of Xen Windows guests so I =
appreciate if anyone can give me any information on =
this.<o:p></o:p></p><p class=3DMsoNormal><o:p>&nbsp;</o:p></p><p =
class=3DMsoNormal>Thanks,<o:p></o:p></p><p =
class=3DMsoNormal><o:p>&nbsp;</o:p></p><p =
class=3DMsoNormal>Brandon<o:p></o:p></p><p =
class=3DMsoNormal><o:p>&nbsp;</o:p></p></div></body></html>
------=_NextPart_000_0247_01D121F4.5F02A240--



--===============3596023584185625314==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--===============3596023584185625314==--



From win-pv-devel-bounces@lists.xenproject.org Wed Nov 18 19:29:30 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 18 Nov 2015 19:29:30 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1Zz8Q3-00073e-Tj; Wed, 18 Nov 2015 19:29:27 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <brandon@thinkhuge.net>) id 1Zz8Q1-00073G-UD
	for win-pv-devel@lists.xenproject.org; Wed, 18 Nov 2015 19:29:26 +0000
Received: from [85.158.139.211] by server-3.bemta-5.messagelabs.com id
	92/59-13487-591DC465; Wed, 18 Nov 2015 19:29:25 +0000
X-Env-Sender: brandon@thinkhuge.net
X-Msg-Ref: server-9.tower-206.messagelabs.com!1447874964!4739121!1
X-Originating-IP: [74.125.82.48]
X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG, HTML_MESSAGE
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 9177 invoked from network); 18 Nov 2015 19:29:24 -0000
Received: from mail-wm0-f48.google.com (HELO mail-wm0-f48.google.com)
	(74.125.82.48)
	by server-9.tower-206.messagelabs.com with AES128-GCM-SHA256 encrypted
	SMTP; 18 Nov 2015 19:29:24 -0000
Received: by wmdw130 with SMTP id w130so212586136wmd.0
	for <win-pv-devel@lists.xenproject.org>;
	Wed, 18 Nov 2015 11:29:24 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=thinkhuge-net.20150623.gappssmtp.com; s=20150623;
	h=from:to:subject:date:message-id:mime-version:content-type
	:thread-index:content-language;
	bh=BWGrN4xlDSCq0PL9sLH8sZywJQkEQJ8J8cc73MoFO7M=;
	b=ToHvMiUY7n42MvSQEMTiDhY4/BLHvMOywARh+WObmDsqyL601Bm/Uj/BkPY3jfwo19
	8bv2hDBxgjj7A3QQ7MboCrsioG/mFzSuFt46zOjcez+Lm/FSXtvQ8xbODxMGseHEgBJl
	FitgUShYeeb97/aoU5YLko15MV8HSFlcPXIykF3rx2coklpkAHl0BkQl2YTJze8l2gt4
	CZnWcIb8yLlWmJx0N6+QTfcXe/12pjehqZoZ/PqKc35cLU4HEtf8NzgEMfGwb1l/n/K6
	6PNhOIeQNYOBnpCGxHND+ylFjo2oVbm3KW64FsU4WfNPTHCbU1zCShbDVIMrZ3hzOB5S
	4c0w==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:from:to:subject:date:message-id:mime-version
	:content-type:thread-index:content-language;
	bh=BWGrN4xlDSCq0PL9sLH8sZywJQkEQJ8J8cc73MoFO7M=;
	b=Z6Uop5zK8pf8+S7OHzGLLwRikQsDiy6M1dS1gVXjjaDYgFrUZUXEzCs82ry8iQ6INz
	gOVdlb6nlykPsAePgbBcQFi3d36LEPubWCtvBCoTx95vlFVQ2zgiEyqacK/XjF7tb7Fy
	XZPBYQefkaiaE48QI6+v0VenNAiNTl8dSYW9YdzMQxRV2WA9ZQXLmMSwiihFOP2cqbN7
	vJMvpdBuC2VwEtjMhJRILqUJXhkbMtIaTBaGmvyVKB8OoOh2KZSZOg5FE7xqunt+wgew
	IGDzWPdlXHKNtynHWAjywz2GcaaGK1ZxABxMKGrrZmJYZkS8rbxF+KvMepiRBLLQ5p5T
	pAsA==
X-Gm-Message-State: ALoCoQmoM/0Jr86brmDahwqdVa+1VcjA/jjvKv2t7qIzxPBV0m3Cov6JRvsmXa5MplVGUSyVpB2h
X-Received: by 10.28.146.136 with SMTP id u130mr6128277wmd.91.1447874963802;
	Wed, 18 Nov 2015 11:29:23 -0800 (PST)
Received: from venus (ip68-108-144-100.lv.lv.cox.net. [68.108.144.100])
	by smtp.gmail.com with ESMTPSA id 193sm392274wmp.16.2015.11.18.11.29.22
	for <win-pv-devel@lists.xenproject.org>
	(version=TLS1 cipher=ECDHE-RSA-AES128-SHA bits=128/128);
	Wed, 18 Nov 2015 11:29:22 -0800 (PST)
From: "Brandon Shoemaker" <brandon@thinkhuge.net>
To: <win-pv-devel@lists.xenproject.org>
Date: Wed, 18 Nov 2015 11:29:19 -0800
Message-ID: <024601d12237$6d256d10$47704730$@thinkhuge.net>
MIME-Version: 1.0
X-Mailer: Microsoft Outlook 14.0
Thread-Index: AdEiNxP+JW7DRxirS26vsP8ej5h/iA==
Content-Language: en-us
Subject: [win-pv-devel] signed Windows driver availability
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============3596023584185625314=="
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

This is a multipart message in MIME format.

--===============3596023584185625314==
Content-Type: multipart/alternative;
	boundary="----=_NextPart_000_0247_01D121F4.5F02A240"
Content-Language: en-us

This is a multipart message in MIME format.

------=_NextPart_000_0247_01D121F4.5F02A240
Content-Type: text/plain;
	charset="us-ascii"
Content-Transfer-Encoding: 7bit

Hello,

 

I just joined the list and was hoping I could ask is anyone managing updated
signed Windows drivers yet?    The signed Windows driver availability
situation with XEN is really unacceptable.   We greatly need this to
improve.

 

The last version I obtained was "ejbpv_Vista2008x64_1.0.1105.msi" before the
website went down that was hosting it on the Xen website.

 

I have a VERY large amount of Xen Windows guests so I appreciate if anyone
can give me any information on this.

 

Thanks,

 

Brandon

 


------=_NextPart_000_0247_01D121F4.5F02A240
Content-Type: text/html;
	charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<html xmlns:v=3D"urn:schemas-microsoft-com:vml" =
xmlns:o=3D"urn:schemas-microsoft-com:office:office" =
xmlns:w=3D"urn:schemas-microsoft-com:office:word" =
xmlns:m=3D"http://schemas.microsoft.com/office/2004/12/omml" =
xmlns=3D"http://www.w3.org/TR/REC-html40"><head><meta =
http-equiv=3DContent-Type content=3D"text/html; =
charset=3Dus-ascii"><meta name=3DGenerator content=3D"Microsoft Word 14 =
(filtered medium)"><style><!--
/* Font Definitions */
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{margin:0in;
	margin-bottom:.0001pt;
	font-size:11.0pt;
	font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:blue;
	text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-priority:99;
	color:purple;
	text-decoration:underline;}
span.EmailStyle17
	{mso-style-type:personal-compose;
	font-family:"Calibri","sans-serif";
	color:windowtext;}
.MsoChpDefault
	{mso-style-type:export-only;
	font-family:"Calibri","sans-serif";}
@page WordSection1
	{size:8.5in 11.0in;
	margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
	{page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext=3D"edit" spidmax=3D"1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext=3D"edit">
<o:idmap v:ext=3D"edit" data=3D"1" />
</o:shapelayout></xml><![endif]--></head><body lang=3DEN-US link=3Dblue =
vlink=3Dpurple><div class=3DWordSection1><p =
class=3DMsoNormal>Hello,<o:p></o:p></p><p =
class=3DMsoNormal><o:p>&nbsp;</o:p></p><p class=3DMsoNormal>I just =
joined the list and was hoping I could ask is anyone managing updated =
signed Windows drivers yet?&nbsp;&nbsp;&nbsp; The signed Windows driver =
availability situation with XEN is really unacceptable.&nbsp;&nbsp; We =
greatly need this to improve.<o:p></o:p></p><p =
class=3DMsoNormal><o:p>&nbsp;</o:p></p><p class=3DMsoNormal>The last =
version I obtained was &#8220;ejbpv_Vista2008x64_1.0.1105.msi&#8221; =
before the website went down that was hosting it on the Xen =
website.<o:p></o:p></p><p class=3DMsoNormal><o:p>&nbsp;</o:p></p><p =
class=3DMsoNormal>I have a VERY large amount of Xen Windows guests so I =
appreciate if anyone can give me any information on =
this.<o:p></o:p></p><p class=3DMsoNormal><o:p>&nbsp;</o:p></p><p =
class=3DMsoNormal>Thanks,<o:p></o:p></p><p =
class=3DMsoNormal><o:p>&nbsp;</o:p></p><p =
class=3DMsoNormal>Brandon<o:p></o:p></p><p =
class=3DMsoNormal><o:p>&nbsp;</o:p></p></div></body></html>
------=_NextPart_000_0247_01D121F4.5F02A240--



--===============3596023584185625314==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--===============3596023584185625314==--



From win-pv-devel-bounces@lists.xenproject.org Thu Nov 19 11:40:23 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Nov 2015 11:40:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZzNZe-0002c3-D1; Thu, 19 Nov 2015 11:40:22 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=7588f64ec=owen.smith@citrix.com>)
	id 1ZzNZd-0002bo-Ld
	for win-pv-devel@lists.xenproject.org; Thu, 19 Nov 2015 11:40:21 +0000
Received: from [193.109.254.147] by server-11.bemta-14.messagelabs.com id
	7E/CA-15765-425BD465; Thu, 19 Nov 2015 11:40:20 +0000
X-Env-Sender: prvs=7588f64ec=owen.smith@citrix.com
X-Msg-Ref: server-2.tower-27.messagelabs.com!1447933219!4499287!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 26510 invoked from network); 19 Nov 2015 11:40:19 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-2.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	19 Nov 2015 11:40:19 -0000
X-IronPort-AV: E=Sophos;i="5.20,317,1444694400"; 
   d="scan'208";a="8099905"
From: Owen Smith <owen.smith@citrix.com>
To: Paul Durrant <Paul.Durrant@citrix.com>
Thread-Topic: Backport afb2582faf997f331233238e6dad3e7e8c3af965 to staging-8.1
Thread-Index: AdEivpphYmJVoe5GQgO3k82JhyGu5A==
Date: Thu, 19 Nov 2015 11:40:15 +0000
Message-ID: <6624BC057AF4E240B6D036F5CC505B12212AC3BA@AMSPEX01CL02.citrite.net>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Cc: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Subject: [win-pv-devel] Backport afb2582faf997f331233238e6dad3e7e8c3af965 to
	staging-8.1
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

XenVbd: afb2582faf997f331233238e6dad3e7e8c3af965 (Kick notifier DPC directly.) should be a candidate for 8.1,
as it prevents IOPs dropping off over a queue depth of about 24.

Owen

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

From win-pv-devel-bounces@lists.xenproject.org Thu Nov 19 11:40:23 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Nov 2015 11:40:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZzNZe-0002c3-D1; Thu, 19 Nov 2015 11:40:22 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=7588f64ec=owen.smith@citrix.com>)
	id 1ZzNZd-0002bo-Ld
	for win-pv-devel@lists.xenproject.org; Thu, 19 Nov 2015 11:40:21 +0000
Received: from [193.109.254.147] by server-11.bemta-14.messagelabs.com id
	7E/CA-15765-425BD465; Thu, 19 Nov 2015 11:40:20 +0000
X-Env-Sender: prvs=7588f64ec=owen.smith@citrix.com
X-Msg-Ref: server-2.tower-27.messagelabs.com!1447933219!4499287!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 26510 invoked from network); 19 Nov 2015 11:40:19 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-2.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	19 Nov 2015 11:40:19 -0000
X-IronPort-AV: E=Sophos;i="5.20,317,1444694400"; 
   d="scan'208";a="8099905"
From: Owen Smith <owen.smith@citrix.com>
To: Paul Durrant <Paul.Durrant@citrix.com>
Thread-Topic: Backport afb2582faf997f331233238e6dad3e7e8c3af965 to staging-8.1
Thread-Index: AdEivpphYmJVoe5GQgO3k82JhyGu5A==
Date: Thu, 19 Nov 2015 11:40:15 +0000
Message-ID: <6624BC057AF4E240B6D036F5CC505B12212AC3BA@AMSPEX01CL02.citrite.net>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Cc: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Subject: [win-pv-devel] Backport afb2582faf997f331233238e6dad3e7e8c3af965 to
	staging-8.1
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

XenVbd: afb2582faf997f331233238e6dad3e7e8c3af965 (Kick notifier DPC directly.) should be a candidate for 8.1,
as it prevents IOPs dropping off over a queue depth of about 24.

Owen

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

From win-pv-devel-bounces@lists.xenproject.org Thu Nov 19 12:41:17 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Nov 2015 12:41:17 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZzOWa-0005Uh-AP; Thu, 19 Nov 2015 12:41:16 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=75868b7bf=Paul.Durrant@citrix.com>)
	id 1ZzOWY-0005UX-OZ
	for win-pv-devel@lists.xenproject.org; Thu, 19 Nov 2015 12:41:14 +0000
Received: from [85.158.137.68] by server-4.bemta-3.messagelabs.com id
	65/3F-09570-963CD465; Thu, 19 Nov 2015 12:41:13 +0000
X-Env-Sender: prvs=75868b7bf=Paul.Durrant@citrix.com
X-Msg-Ref: server-13.tower-31.messagelabs.com!1447936873!4390532!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 37397 invoked from network); 19 Nov 2015 12:41:13 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-13.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	19 Nov 2015 12:41:13 -0000
X-IronPort-AV: E=Sophos;i="5.20,317,1444694400"; 
   d="scan'208";a="8112082"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Owen Smith <owen.smith@citrix.com>
Thread-Topic: Backport afb2582faf997f331233238e6dad3e7e8c3af965 to staging-8.1
Thread-Index: AdEivpphYmJVoe5GQgO3k82JhyGu5AACIgJQ
Date: Thu, 19 Nov 2015 12:38:29 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F67B34A@AMSPEX01CL01.citrite.net>
References: <6624BC057AF4E240B6D036F5CC505B12212AC3BA@AMSPEX01CL02.citrite.net>
In-Reply-To: <6624BC057AF4E240B6D036F5CC505B12212AC3BA@AMSPEX01CL02.citrite.net>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Cc: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Subject: Re: [win-pv-devel] Backport
	afb2582faf997f331233238e6dad3e7e8c3af965 to staging-8.1
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: Owen Smith
> Sent: 19 November 2015 11:40
> To: Paul Durrant
> Cc: win-pv-devel@lists.xenproject.org
> Subject: Backport afb2582faf997f331233238e6dad3e7e8c3af965 to staging-8.1
> 
> XenVbd: afb2582faf997f331233238e6dad3e7e8c3af965 (Kick notifier DPC
> directly.) should be a candidate for 8.1,
> as it prevents IOPs dropping off over a queue depth of about 24.
> 

Agreed. I will cherry-pick it across.

  Paul

> Owen

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

From win-pv-devel-bounces@lists.xenproject.org Thu Nov 19 12:41:17 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Nov 2015 12:41:17 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZzOWa-0005Uh-AP; Thu, 19 Nov 2015 12:41:16 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=75868b7bf=Paul.Durrant@citrix.com>)
	id 1ZzOWY-0005UX-OZ
	for win-pv-devel@lists.xenproject.org; Thu, 19 Nov 2015 12:41:14 +0000
Received: from [85.158.137.68] by server-4.bemta-3.messagelabs.com id
	65/3F-09570-963CD465; Thu, 19 Nov 2015 12:41:13 +0000
X-Env-Sender: prvs=75868b7bf=Paul.Durrant@citrix.com
X-Msg-Ref: server-13.tower-31.messagelabs.com!1447936873!4390532!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 37397 invoked from network); 19 Nov 2015 12:41:13 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-13.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	19 Nov 2015 12:41:13 -0000
X-IronPort-AV: E=Sophos;i="5.20,317,1444694400"; 
   d="scan'208";a="8112082"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Owen Smith <owen.smith@citrix.com>
Thread-Topic: Backport afb2582faf997f331233238e6dad3e7e8c3af965 to staging-8.1
Thread-Index: AdEivpphYmJVoe5GQgO3k82JhyGu5AACIgJQ
Date: Thu, 19 Nov 2015 12:38:29 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F67B34A@AMSPEX01CL01.citrite.net>
References: <6624BC057AF4E240B6D036F5CC505B12212AC3BA@AMSPEX01CL02.citrite.net>
In-Reply-To: <6624BC057AF4E240B6D036F5CC505B12212AC3BA@AMSPEX01CL02.citrite.net>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Cc: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Subject: Re: [win-pv-devel] Backport
	afb2582faf997f331233238e6dad3e7e8c3af965 to staging-8.1
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: Owen Smith
> Sent: 19 November 2015 11:40
> To: Paul Durrant
> Cc: win-pv-devel@lists.xenproject.org
> Subject: Backport afb2582faf997f331233238e6dad3e7e8c3af965 to staging-8.1
> 
> XenVbd: afb2582faf997f331233238e6dad3e7e8c3af965 (Kick notifier DPC
> directly.) should be a candidate for 8.1,
> as it prevents IOPs dropping off over a queue depth of about 24.
> 

Agreed. I will cherry-pick it across.

  Paul

> Owen

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

From win-pv-devel-bounces@lists.xenproject.org Thu Nov 19 16:27:46 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Nov 2015 16:27:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZzS3l-0006mR-2C; Thu, 19 Nov 2015 16:27:45 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <meisners@ainfosec.com>) id 1ZzS3j-0006mL-Py
	for win-pv-devel@lists.xenproject.org; Thu, 19 Nov 2015 16:27:43 +0000
Received: from [85.158.139.211] by server-11.bemta-5.messagelabs.com id
	F6/5A-24494-E78FD465; Thu, 19 Nov 2015 16:27:42 +0000
X-Env-Sender: meisners@ainfosec.com
X-Msg-Ref: server-5.tower-206.messagelabs.com!1447950460!5022877!1
X-Originating-IP: [209.217.208.232]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 42675 invoked from network); 19 Nov 2015 16:27:41 -0000
Received: from mail.ainfosec.com (HELO mail.ainfosec.com) (209.217.208.232)
	by server-5.tower-206.messagelabs.com with AES256-SHA256 encrypted SMTP;
	19 Nov 2015 16:27:41 -0000
Received: from AISXSV10.ainfosec.com ([10.201.1.30]) by AISXSV10.ainfosec.com
	([10.201.1.30]) with mapi id 14.03.0266.001;
	Thu, 19 Nov 2015 11:27:40 -0500
From: Steven Meisner <meisners@ainfosec.com>
To: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: OpenXT, Windows 10 guest and Windbg question
Thread-Index: AdEi5UwJzJGhv6wRQj+Kw284VcWtQw==
Date: Thu, 19 Nov 2015 16:27:40 +0000
Message-ID: <146569058C2DB948916D80E46A81CF74011E0DAC@AISXSV10.ainfosec.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-originating-ip: [70.88.247.169]
MIME-Version: 1.0
Subject: [win-pv-devel] OpenXT, Windows 10 guest and Windbg question
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

I am new to the list, but have been doing Windows Xen PV driver development=
 for quite some time. I am trying to use a Windows 10 x64 guest to develop =
a new driver and am having problems connecting Windbg. BTW, I am working on=
 OpenXT.

This is what I've done so far:

- Disabled SELinux
- Disabled stub domains (to allow the guest to indirectly connect out to th=
e debugger)
- Run sockpipe on the debugger system to allow the guest to connect (via a =
QEMU emulated COM port) over a local pipe
- In the guest:
  o bcdedit /copy {current} /d "Debugger Enabled"
  o bcdedit /debug {UUID} on
  o bcdedit /set {UUID} testsigning on
  o bcdedit /set {UUID} recoveryenabled off
Also tried:
  o bcdedit /set {UUID} loadoptions DDISABLE_INTEGRITY_CHECK

On OpenXT platform, setup QEMU to connect to sockpipe on the debug system:
- xec-vm -n win10 set extra-xenvm "serial=3Dtcp:192.168.2.60:7204,nodelay"

When I start the guest, QEMU creates the virtual com port and connects to s=
ockpipe. Then the Win10 starts in the VM and attempts to connect, but it ju=
st halts after Windbg issues a reset (which is normal).

I have tested the serial comms.and it works fine. I have also tried Win10 3=
2-bit.did not work. I tried Win7 and Win8 targets .they work fine in the sa=
me environment.

So my questions;
1. Is there any problem using Windbg (version 10.0.10240.9) with Windows 10=
 as a target? Did the protocol change and the latest Windbg is not compatib=
le?
2. Are there any settings I missed in the bcdedit settings?
3. Any other things to try?

Thanks,
Steve


=A0 =

Steve Meisner
Assured Information Security, Inc.
50 Burlington Mall Road Road
Burlington, MA 01805
Cell: (603) 305-3539


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

From win-pv-devel-bounces@lists.xenproject.org Thu Nov 19 16:27:46 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Nov 2015 16:27:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZzS3l-0006mR-2C; Thu, 19 Nov 2015 16:27:45 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <meisners@ainfosec.com>) id 1ZzS3j-0006mL-Py
	for win-pv-devel@lists.xenproject.org; Thu, 19 Nov 2015 16:27:43 +0000
Received: from [85.158.139.211] by server-11.bemta-5.messagelabs.com id
	F6/5A-24494-E78FD465; Thu, 19 Nov 2015 16:27:42 +0000
X-Env-Sender: meisners@ainfosec.com
X-Msg-Ref: server-5.tower-206.messagelabs.com!1447950460!5022877!1
X-Originating-IP: [209.217.208.232]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 42675 invoked from network); 19 Nov 2015 16:27:41 -0000
Received: from mail.ainfosec.com (HELO mail.ainfosec.com) (209.217.208.232)
	by server-5.tower-206.messagelabs.com with AES256-SHA256 encrypted SMTP;
	19 Nov 2015 16:27:41 -0000
Received: from AISXSV10.ainfosec.com ([10.201.1.30]) by AISXSV10.ainfosec.com
	([10.201.1.30]) with mapi id 14.03.0266.001;
	Thu, 19 Nov 2015 11:27:40 -0500
From: Steven Meisner <meisners@ainfosec.com>
To: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: OpenXT, Windows 10 guest and Windbg question
Thread-Index: AdEi5UwJzJGhv6wRQj+Kw284VcWtQw==
Date: Thu, 19 Nov 2015 16:27:40 +0000
Message-ID: <146569058C2DB948916D80E46A81CF74011E0DAC@AISXSV10.ainfosec.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-originating-ip: [70.88.247.169]
MIME-Version: 1.0
Subject: [win-pv-devel] OpenXT, Windows 10 guest and Windbg question
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

I am new to the list, but have been doing Windows Xen PV driver development=
 for quite some time. I am trying to use a Windows 10 x64 guest to develop =
a new driver and am having problems connecting Windbg. BTW, I am working on=
 OpenXT.

This is what I've done so far:

- Disabled SELinux
- Disabled stub domains (to allow the guest to indirectly connect out to th=
e debugger)
- Run sockpipe on the debugger system to allow the guest to connect (via a =
QEMU emulated COM port) over a local pipe
- In the guest:
  o bcdedit /copy {current} /d "Debugger Enabled"
  o bcdedit /debug {UUID} on
  o bcdedit /set {UUID} testsigning on
  o bcdedit /set {UUID} recoveryenabled off
Also tried:
  o bcdedit /set {UUID} loadoptions DDISABLE_INTEGRITY_CHECK

On OpenXT platform, setup QEMU to connect to sockpipe on the debug system:
- xec-vm -n win10 set extra-xenvm "serial=3Dtcp:192.168.2.60:7204,nodelay"

When I start the guest, QEMU creates the virtual com port and connects to s=
ockpipe. Then the Win10 starts in the VM and attempts to connect, but it ju=
st halts after Windbg issues a reset (which is normal).

I have tested the serial comms.and it works fine. I have also tried Win10 3=
2-bit.did not work. I tried Win7 and Win8 targets .they work fine in the sa=
me environment.

So my questions;
1. Is there any problem using Windbg (version 10.0.10240.9) with Windows 10=
 as a target? Did the protocol change and the latest Windbg is not compatib=
le?
2. Are there any settings I missed in the bcdedit settings?
3. Any other things to try?

Thanks,
Steve


=A0 =

Steve Meisner
Assured Information Security, Inc.
50 Burlington Mall Road Road
Burlington, MA 01805
Cell: (603) 305-3539


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

From win-pv-devel-bounces@lists.xenproject.org Fri Nov 20 11:16:42 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 20 Nov 2015 11:16:42 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZzjgG-0004Oo-Tf; Fri, 20 Nov 2015 11:16:40 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=75942051b=Paul.Durrant@citrix.com>)
	id 1ZzjgG-0004Oj-8A
	for win-pv-devel@lists.xenproject.org; Fri, 20 Nov 2015 11:16:40 +0000
Received: from [85.158.137.68] by server-9.bemta-3.messagelabs.com id
	67/FE-10678-7110F465; Fri, 20 Nov 2015 11:16:39 +0000
X-Env-Sender: prvs=75942051b=Paul.Durrant@citrix.com
X-Msg-Ref: server-3.tower-31.messagelabs.com!1448018198!5219895!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 19693 invoked from network); 20 Nov 2015 11:16:38 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-3.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	20 Nov 2015 11:16:38 -0000
X-IronPort-AV: E=Sophos;i="5.20,322,1444694400"; 
   d="scan'208";a="8218493"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Steven Meisner <meisners@ainfosec.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: OpenXT, Windows 10 guest and Windbg question
Thread-Index: AdEi5UwJzJGhv6wRQj+Kw284VcWtQwAnxBMw
Date: Fri, 20 Nov 2015 11:16:38 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F67C8A9@AMSPEX01CL01.citrite.net>
References: <146569058C2DB948916D80E46A81CF74011E0DAC@AISXSV10.ainfosec.com>
In-Reply-To: <146569058C2DB948916D80E46A81CF74011E0DAC@AISXSV10.ainfosec.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] OpenXT, Windows 10 guest and Windbg question
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> bounces@lists.xenproject.org] On Behalf Of Steven Meisner
> Sent: 19 November 2015 16:28
> To: win-pv-devel@lists.xenproject.org
> Subject: [win-pv-devel] OpenXT, Windows 10 guest and Windbg question
> 
> I am new to the list, but have been doing Windows Xen PV driver
> development for quite some time. I am trying to use a Windows 10 x64 guest
> to develop a new driver and am having problems connecting Windbg. BTW, I
> am working on OpenXT.
> 
> This is what I've done so far:
> 
> - Disabled SELinux
> - Disabled stub domains (to allow the guest to indirectly connect out to the
> debugger)
> - Run sockpipe on the debugger system to allow the guest to connect (via a
> QEMU emulated COM port) over a local pipe
> - In the guest:
>   o bcdedit /copy {current} /d "Debugger Enabled"
>   o bcdedit /debug {UUID} on
>   o bcdedit /set {UUID} testsigning on
>   o bcdedit /set {UUID} recoveryenabled off
> Also tried:
>   o bcdedit /set {UUID} loadoptions DDISABLE_INTEGRITY_CHECK
> 
> On OpenXT platform, setup QEMU to connect to sockpipe on the debug
> system:
> - xec-vm -n win10 set extra-xenvm "serial=tcp:192.168.2.60:7204,nodelay"
> 
> When I start the guest, QEMU creates the virtual com port and connects to
> sockpipe. Then the Win10 starts in the VM and attempts to connect, but it
> just halts after Windbg issues a reset (which is normal).
> 
> I have tested the serial comms.and it works fine. I have also tried Win10 32-
> bit.did not work. I tried Win7 and Win8 targets .they work fine in the same
> environment.
> 
> So my questions;
> 1. Is there any problem using Windbg (version 10.0.10240.9) with Windows 10
> as a target? Did the protocol change and the latest Windbg is not compatible?

Steve,

I've not had any problem using the Win 8 WDK version of Windbg against my 64-bit win10 VM running on my upstream (Xen + dom0) test host.

> 2. Are there any settings I missed in the bcdedit settings?

I don't think so. I guess you may want to check the default serial settings to see if there's any difference that may conflict with your QEMU UART device model.

> 3. Any other things to try?
> 

Try connecting the other way round? (I.e. set up Sockpipe in passive open and have your QEMU connect to it).

  Paul

> Thanks,
> Steve
> 
> 
> 
> Steve Meisner
> Assured Information Security, Inc.
> 50 Burlington Mall Road Road
> Burlington, MA 01805
> Cell: (603) 305-3539
> 
> 
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

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

From win-pv-devel-bounces@lists.xenproject.org Fri Nov 20 11:16:42 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 20 Nov 2015 11:16:42 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZzjgG-0004Oo-Tf; Fri, 20 Nov 2015 11:16:40 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=75942051b=Paul.Durrant@citrix.com>)
	id 1ZzjgG-0004Oj-8A
	for win-pv-devel@lists.xenproject.org; Fri, 20 Nov 2015 11:16:40 +0000
Received: from [85.158.137.68] by server-9.bemta-3.messagelabs.com id
	67/FE-10678-7110F465; Fri, 20 Nov 2015 11:16:39 +0000
X-Env-Sender: prvs=75942051b=Paul.Durrant@citrix.com
X-Msg-Ref: server-3.tower-31.messagelabs.com!1448018198!5219895!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 19693 invoked from network); 20 Nov 2015 11:16:38 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-3.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	20 Nov 2015 11:16:38 -0000
X-IronPort-AV: E=Sophos;i="5.20,322,1444694400"; 
   d="scan'208";a="8218493"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Steven Meisner <meisners@ainfosec.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: OpenXT, Windows 10 guest and Windbg question
Thread-Index: AdEi5UwJzJGhv6wRQj+Kw284VcWtQwAnxBMw
Date: Fri, 20 Nov 2015 11:16:38 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F67C8A9@AMSPEX01CL01.citrite.net>
References: <146569058C2DB948916D80E46A81CF74011E0DAC@AISXSV10.ainfosec.com>
In-Reply-To: <146569058C2DB948916D80E46A81CF74011E0DAC@AISXSV10.ainfosec.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] OpenXT, Windows 10 guest and Windbg question
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> bounces@lists.xenproject.org] On Behalf Of Steven Meisner
> Sent: 19 November 2015 16:28
> To: win-pv-devel@lists.xenproject.org
> Subject: [win-pv-devel] OpenXT, Windows 10 guest and Windbg question
> 
> I am new to the list, but have been doing Windows Xen PV driver
> development for quite some time. I am trying to use a Windows 10 x64 guest
> to develop a new driver and am having problems connecting Windbg. BTW, I
> am working on OpenXT.
> 
> This is what I've done so far:
> 
> - Disabled SELinux
> - Disabled stub domains (to allow the guest to indirectly connect out to the
> debugger)
> - Run sockpipe on the debugger system to allow the guest to connect (via a
> QEMU emulated COM port) over a local pipe
> - In the guest:
>   o bcdedit /copy {current} /d "Debugger Enabled"
>   o bcdedit /debug {UUID} on
>   o bcdedit /set {UUID} testsigning on
>   o bcdedit /set {UUID} recoveryenabled off
> Also tried:
>   o bcdedit /set {UUID} loadoptions DDISABLE_INTEGRITY_CHECK
> 
> On OpenXT platform, setup QEMU to connect to sockpipe on the debug
> system:
> - xec-vm -n win10 set extra-xenvm "serial=tcp:192.168.2.60:7204,nodelay"
> 
> When I start the guest, QEMU creates the virtual com port and connects to
> sockpipe. Then the Win10 starts in the VM and attempts to connect, but it
> just halts after Windbg issues a reset (which is normal).
> 
> I have tested the serial comms.and it works fine. I have also tried Win10 32-
> bit.did not work. I tried Win7 and Win8 targets .they work fine in the same
> environment.
> 
> So my questions;
> 1. Is there any problem using Windbg (version 10.0.10240.9) with Windows 10
> as a target? Did the protocol change and the latest Windbg is not compatible?

Steve,

I've not had any problem using the Win 8 WDK version of Windbg against my 64-bit win10 VM running on my upstream (Xen + dom0) test host.

> 2. Are there any settings I missed in the bcdedit settings?

I don't think so. I guess you may want to check the default serial settings to see if there's any difference that may conflict with your QEMU UART device model.

> 3. Any other things to try?
> 

Try connecting the other way round? (I.e. set up Sockpipe in passive open and have your QEMU connect to it).

  Paul

> Thanks,
> Steve
> 
> 
> 
> Steve Meisner
> Assured Information Security, Inc.
> 50 Burlington Mall Road Road
> Burlington, MA 01805
> Cell: (603) 305-3539
> 
> 
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

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

From win-pv-devel-bounces@lists.xenproject.org Tue Nov 24 13:27:40 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 24 Nov 2015 13:27:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1a1DdC-0005I7-Kt; Tue, 24 Nov 2015 13:27:38 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1a1DdA-0005I2-Jq
	for win-pv-devel@lists.xenproject.org; Tue, 24 Nov 2015 13:27:37 +0000
Received: from [193.109.254.147] by server-7.bemta-14.messagelabs.com id
	74/2E-28221-6C564565; Tue, 24 Nov 2015 13:27:34 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-14.tower-27.messagelabs.com!1448371653!5865120!1
X-Originating-IP: [74.125.82.41]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 36729 invoked from network); 24 Nov 2015 13:27:33 -0000
Received: from mail-wm0-f41.google.com (HELO mail-wm0-f41.google.com)
	(74.125.82.41)
	by server-14.tower-27.messagelabs.com with AES128-GCM-SHA256 encrypted
	SMTP; 24 Nov 2015 13:27:33 -0000
Received: by wmuu63 with SMTP id u63so96367674wmu.0
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 24 Nov 2015 05:27:32 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=nwBKpslijR5Ti9JLMgDu/HUMNGlPOhDgz+M0kixq85s=;
	b=vkpQAGYcNJ/MZLUZL0pbEBc0Zx+FOot4y3R5OThxN3e0LVTSE4F25enOr4/Cg63+zi
	WYU9bt0vxpgfN0H9xzf5OE1zLm8gahLlvmZ5itQ9FYNOjbvVaq3OW03adZF39y5v3+Uc
	4FptZ8k8eYFaWgiznX+pbhCoLGUfOHcfTZeN456CGnM04KyqAU3cBeelzvS+fGgn438U
	x82P124Iz2pHxBPNMca51duIiAlRw3RJs1zR0LQ+/FpcED3TXI6R4pb0rAYH/W/vRg8P
	ky8vkOZe/O3L+FSd7BrlvgMm0bWPuVOzzD20tJTGXxlIHKqLGFOQ5WWJSghK/uENVzqs
	ilsw==
X-Received: by 10.28.1.8 with SMTP id 8mr24771001wmb.40.1448371652754;
	Tue, 24 Nov 2015 05:27:32 -0800 (PST)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	t194sm18252879wmt.11.2015.11.24.05.27.31
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Tue, 24 Nov 2015 05:27:32 -0800 (PST)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Tue, 24 Nov 2015 13:27:20 +0000
Message-Id: <1448371640-8204-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH] Publish distribution information to xenstore
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

My recent patch series to Xen added a documented path and format for
publishing information about PV driver distributions to xenstore.

This patch adds code to populate the documented path (should it exist)
with information about the XENBUS driver package.

Suggested-by: Owen Smith <owen.smith@citrix.com>
Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/xenbus/fdo.c | 222 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 221 insertions(+), 1 deletion(-)

diff --git a/src/xenbus/fdo.c b/src/xenbus/fdo.c
index 354438f..a9650e3 100644
--- a/src/xenbus/fdo.c
+++ b/src/xenbus/fdo.c
@@ -2414,7 +2414,221 @@ FdoEvtchnCallback(
     return TRUE;
 }
 
-#define BALLOON_PAUSE   60
+static FORCEINLINE BOOLEAN
+__FdoMatchDistribution(
+    IN  PXENBUS_FDO Fdo,
+    IN  PCHAR       Buffer
+    )
+{
+    PCHAR           Vendor;
+    PCHAR           Product;
+    PCHAR           Context;
+    const CHAR      *Text;
+    BOOLEAN         Match;
+    ULONG           Index;
+    NTSTATUS        status;
+
+    UNREFERENCED_PARAMETER(Fdo);
+
+    status = STATUS_INVALID_PARAMETER;
+
+    Vendor = __strtok_r(Buffer, " ", &Context);
+    if (Vendor == NULL)
+        goto fail1;
+
+    Product = __strtok_r(NULL, " ", &Context);
+    if (Product == NULL)
+        goto fail2;
+
+    Match = TRUE;
+
+    Text = VENDOR_NAME_STR;
+
+    for (Index = 0; Text[Index] != 0; Index++) {
+        if (!isalnum(Text[Index])) {
+            if (Vendor[Index] != '_') {
+                Match = FALSE;
+                break;
+            }
+        } else {
+            if (Vendor[Index] != Text[Index]) {
+                Match = FALSE;
+                break;
+            }
+        }
+    }
+
+    Text = "XENBUS";
+
+    if (_stricmp(Product, Text) != 0)
+        Match = FALSE;
+
+    return Match;
+
+fail2:
+    Error("fail2\n");
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return FALSE;
+}
+
+static VOID
+FdoClearDistribution(
+    IN  PXENBUS_FDO Fdo
+    )
+{
+    PCHAR           Buffer;
+    PANSI_STRING    Distributions;
+    ULONG           Index;
+    NTSTATUS        status;
+
+    Trace("====>\n");
+
+    status = XENBUS_STORE(Directory,
+                          &Fdo->StoreInterface,
+                          NULL,
+                          NULL,
+                          "drivers",
+                          &Buffer);
+    if (NT_SUCCESS(status)) {
+        Distributions = FdoMultiSzToUpcaseAnsi(Buffer);
+
+        XENBUS_STORE(Free,
+                     &Fdo->StoreInterface,
+                     Buffer);
+    } else {
+        Distributions = NULL;
+    }
+
+    if (Distributions == NULL)
+        goto done;
+
+    for (Index = 0; Distributions[Index].Buffer != NULL; Index++) {
+        PANSI_STRING    Distribution = &Distributions[Index];
+
+        status = XENBUS_STORE(Read,
+                              &Fdo->StoreInterface,
+                              NULL,
+                              "drivers",
+                              Distribution->Buffer,
+                              &Buffer);
+        if (!NT_SUCCESS(status))
+            continue;
+
+        if (__FdoMatchDistribution(Fdo, Buffer))
+            (VOID) XENBUS_STORE(Remove,
+                                &Fdo->StoreInterface,
+                                NULL,
+                                "drivers",
+                                Distribution->Buffer);
+
+        XENBUS_STORE(Free,
+                     &Fdo->StoreInterface,
+                     Buffer);
+    }
+
+    FdoFreeAnsi(Distributions);
+
+done:
+    Trace("<====\n");
+}
+
+#define MAXIMUM_INDEX   255
+
+static NTSTATUS
+FdoSetDistribution(
+    IN  PXENBUS_FDO Fdo
+    )
+{
+    ULONG           Index;
+    CHAR            Distribution[MAXNAMELEN];
+    CHAR            Vendor[MAXNAMELEN];
+    const CHAR      *Product;
+    NTSTATUS        status;
+
+    Trace("====>\n");
+
+    Index = 0;
+    while (Index <= MAXIMUM_INDEX) {
+        PCHAR   Buffer;
+
+        status = RtlStringCbPrintfA(Distribution,
+                                    MAXNAMELEN,
+                                    "%u",
+                                    Index);
+        ASSERT(NT_SUCCESS(status));
+
+        status = XENBUS_STORE(Read,
+                              &Fdo->StoreInterface,
+                              NULL,
+                              "drivers",
+                              Distribution,
+                              &Buffer);
+        if (!NT_SUCCESS(status)) {
+            if (status == STATUS_OBJECT_NAME_NOT_FOUND)
+                goto update;
+
+            goto fail1;
+        }
+
+        XENBUS_STORE(Free,
+                     &Fdo->StoreInterface,
+                     Buffer);
+
+        Index++;
+    }
+
+    status = STATUS_UNSUCCESSFUL;
+    goto fail2;
+
+update:
+    status = RtlStringCbPrintfA(Vendor,
+                                MAXNAMELEN,
+                                "%s",
+                                VENDOR_NAME_STR);
+    ASSERT(NT_SUCCESS(status));
+
+    for (Index  = 0; Vendor[Index] != '\0'; Index++)
+        if (!isalnum(Vendor[Index]))
+            Vendor[Index] = '_';
+
+    Product = "XENBUS";
+
+#if DBG
+#define ATTRIBUTES   "(DEBUG)"
+#else
+#define ATTRIBUTES   ""
+#endif
+
+    (VOID) XENBUS_STORE(Printf,
+                        &Fdo->StoreInterface,
+                        NULL,
+                        "drivers",
+                        Distribution,
+                        "%s %s %u.%u.%u %s",
+                        Vendor,
+                        Product,
+                        MAJOR_VERSION,
+                        MINOR_VERSION,
+                        MICRO_VERSION,
+                        ATTRIBUTES
+                        );
+
+#undef  ATTRIBUTES
+
+    Trace("<====\n");
+    return STATUS_SUCCESS;
+
+fail2:
+    Error("fail2\n");
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return status;
+}
 
 static FORCEINLINE NTSTATUS
 __FdoD3ToD0(
@@ -2427,6 +2641,8 @@ __FdoD3ToD0(
 
     ASSERT3U(KeGetCurrentIrql(), ==, DISPATCH_LEVEL);
 
+    (VOID) FdoSetDistribution(Fdo);
+
     Fdo->Channel = XENBUS_EVTCHN(Open,
                                  &Fdo->EvtchnInterface,
                                  XENBUS_EVTCHN_TYPE_VIRQ,
@@ -2571,6 +2787,8 @@ __FdoD0ToD3(
                   Fdo->Channel);
     Fdo->Channel = NULL;
 
+    FdoClearDistribution(Fdo);
+
     Trace("<====\n");
 }
 
@@ -3049,6 +3267,8 @@ FdoFilterCmPartialResourceList(
     }
 }
 
+#define BALLOON_PAUSE   60
+
 static NTSTATUS
 FdoStartDevice(
     IN  PXENBUS_FDO                 Fdo,
-- 
2.1.1


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

From win-pv-devel-bounces@lists.xenproject.org Tue Nov 24 13:27:40 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 24 Nov 2015 13:27:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1a1DdC-0005I7-Kt; Tue, 24 Nov 2015 13:27:38 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1a1DdA-0005I2-Jq
	for win-pv-devel@lists.xenproject.org; Tue, 24 Nov 2015 13:27:37 +0000
Received: from [193.109.254.147] by server-7.bemta-14.messagelabs.com id
	74/2E-28221-6C564565; Tue, 24 Nov 2015 13:27:34 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-14.tower-27.messagelabs.com!1448371653!5865120!1
X-Originating-IP: [74.125.82.41]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 36729 invoked from network); 24 Nov 2015 13:27:33 -0000
Received: from mail-wm0-f41.google.com (HELO mail-wm0-f41.google.com)
	(74.125.82.41)
	by server-14.tower-27.messagelabs.com with AES128-GCM-SHA256 encrypted
	SMTP; 24 Nov 2015 13:27:33 -0000
Received: by wmuu63 with SMTP id u63so96367674wmu.0
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 24 Nov 2015 05:27:32 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=nwBKpslijR5Ti9JLMgDu/HUMNGlPOhDgz+M0kixq85s=;
	b=vkpQAGYcNJ/MZLUZL0pbEBc0Zx+FOot4y3R5OThxN3e0LVTSE4F25enOr4/Cg63+zi
	WYU9bt0vxpgfN0H9xzf5OE1zLm8gahLlvmZ5itQ9FYNOjbvVaq3OW03adZF39y5v3+Uc
	4FptZ8k8eYFaWgiznX+pbhCoLGUfOHcfTZeN456CGnM04KyqAU3cBeelzvS+fGgn438U
	x82P124Iz2pHxBPNMca51duIiAlRw3RJs1zR0LQ+/FpcED3TXI6R4pb0rAYH/W/vRg8P
	ky8vkOZe/O3L+FSd7BrlvgMm0bWPuVOzzD20tJTGXxlIHKqLGFOQ5WWJSghK/uENVzqs
	ilsw==
X-Received: by 10.28.1.8 with SMTP id 8mr24771001wmb.40.1448371652754;
	Tue, 24 Nov 2015 05:27:32 -0800 (PST)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	t194sm18252879wmt.11.2015.11.24.05.27.31
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Tue, 24 Nov 2015 05:27:32 -0800 (PST)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Tue, 24 Nov 2015 13:27:20 +0000
Message-Id: <1448371640-8204-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH] Publish distribution information to xenstore
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

My recent patch series to Xen added a documented path and format for
publishing information about PV driver distributions to xenstore.

This patch adds code to populate the documented path (should it exist)
with information about the XENBUS driver package.

Suggested-by: Owen Smith <owen.smith@citrix.com>
Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/xenbus/fdo.c | 222 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 221 insertions(+), 1 deletion(-)

diff --git a/src/xenbus/fdo.c b/src/xenbus/fdo.c
index 354438f..a9650e3 100644
--- a/src/xenbus/fdo.c
+++ b/src/xenbus/fdo.c
@@ -2414,7 +2414,221 @@ FdoEvtchnCallback(
     return TRUE;
 }
 
-#define BALLOON_PAUSE   60
+static FORCEINLINE BOOLEAN
+__FdoMatchDistribution(
+    IN  PXENBUS_FDO Fdo,
+    IN  PCHAR       Buffer
+    )
+{
+    PCHAR           Vendor;
+    PCHAR           Product;
+    PCHAR           Context;
+    const CHAR      *Text;
+    BOOLEAN         Match;
+    ULONG           Index;
+    NTSTATUS        status;
+
+    UNREFERENCED_PARAMETER(Fdo);
+
+    status = STATUS_INVALID_PARAMETER;
+
+    Vendor = __strtok_r(Buffer, " ", &Context);
+    if (Vendor == NULL)
+        goto fail1;
+
+    Product = __strtok_r(NULL, " ", &Context);
+    if (Product == NULL)
+        goto fail2;
+
+    Match = TRUE;
+
+    Text = VENDOR_NAME_STR;
+
+    for (Index = 0; Text[Index] != 0; Index++) {
+        if (!isalnum(Text[Index])) {
+            if (Vendor[Index] != '_') {
+                Match = FALSE;
+                break;
+            }
+        } else {
+            if (Vendor[Index] != Text[Index]) {
+                Match = FALSE;
+                break;
+            }
+        }
+    }
+
+    Text = "XENBUS";
+
+    if (_stricmp(Product, Text) != 0)
+        Match = FALSE;
+
+    return Match;
+
+fail2:
+    Error("fail2\n");
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return FALSE;
+}
+
+static VOID
+FdoClearDistribution(
+    IN  PXENBUS_FDO Fdo
+    )
+{
+    PCHAR           Buffer;
+    PANSI_STRING    Distributions;
+    ULONG           Index;
+    NTSTATUS        status;
+
+    Trace("====>\n");
+
+    status = XENBUS_STORE(Directory,
+                          &Fdo->StoreInterface,
+                          NULL,
+                          NULL,
+                          "drivers",
+                          &Buffer);
+    if (NT_SUCCESS(status)) {
+        Distributions = FdoMultiSzToUpcaseAnsi(Buffer);
+
+        XENBUS_STORE(Free,
+                     &Fdo->StoreInterface,
+                     Buffer);
+    } else {
+        Distributions = NULL;
+    }
+
+    if (Distributions == NULL)
+        goto done;
+
+    for (Index = 0; Distributions[Index].Buffer != NULL; Index++) {
+        PANSI_STRING    Distribution = &Distributions[Index];
+
+        status = XENBUS_STORE(Read,
+                              &Fdo->StoreInterface,
+                              NULL,
+                              "drivers",
+                              Distribution->Buffer,
+                              &Buffer);
+        if (!NT_SUCCESS(status))
+            continue;
+
+        if (__FdoMatchDistribution(Fdo, Buffer))
+            (VOID) XENBUS_STORE(Remove,
+                                &Fdo->StoreInterface,
+                                NULL,
+                                "drivers",
+                                Distribution->Buffer);
+
+        XENBUS_STORE(Free,
+                     &Fdo->StoreInterface,
+                     Buffer);
+    }
+
+    FdoFreeAnsi(Distributions);
+
+done:
+    Trace("<====\n");
+}
+
+#define MAXIMUM_INDEX   255
+
+static NTSTATUS
+FdoSetDistribution(
+    IN  PXENBUS_FDO Fdo
+    )
+{
+    ULONG           Index;
+    CHAR            Distribution[MAXNAMELEN];
+    CHAR            Vendor[MAXNAMELEN];
+    const CHAR      *Product;
+    NTSTATUS        status;
+
+    Trace("====>\n");
+
+    Index = 0;
+    while (Index <= MAXIMUM_INDEX) {
+        PCHAR   Buffer;
+
+        status = RtlStringCbPrintfA(Distribution,
+                                    MAXNAMELEN,
+                                    "%u",
+                                    Index);
+        ASSERT(NT_SUCCESS(status));
+
+        status = XENBUS_STORE(Read,
+                              &Fdo->StoreInterface,
+                              NULL,
+                              "drivers",
+                              Distribution,
+                              &Buffer);
+        if (!NT_SUCCESS(status)) {
+            if (status == STATUS_OBJECT_NAME_NOT_FOUND)
+                goto update;
+
+            goto fail1;
+        }
+
+        XENBUS_STORE(Free,
+                     &Fdo->StoreInterface,
+                     Buffer);
+
+        Index++;
+    }
+
+    status = STATUS_UNSUCCESSFUL;
+    goto fail2;
+
+update:
+    status = RtlStringCbPrintfA(Vendor,
+                                MAXNAMELEN,
+                                "%s",
+                                VENDOR_NAME_STR);
+    ASSERT(NT_SUCCESS(status));
+
+    for (Index  = 0; Vendor[Index] != '\0'; Index++)
+        if (!isalnum(Vendor[Index]))
+            Vendor[Index] = '_';
+
+    Product = "XENBUS";
+
+#if DBG
+#define ATTRIBUTES   "(DEBUG)"
+#else
+#define ATTRIBUTES   ""
+#endif
+
+    (VOID) XENBUS_STORE(Printf,
+                        &Fdo->StoreInterface,
+                        NULL,
+                        "drivers",
+                        Distribution,
+                        "%s %s %u.%u.%u %s",
+                        Vendor,
+                        Product,
+                        MAJOR_VERSION,
+                        MINOR_VERSION,
+                        MICRO_VERSION,
+                        ATTRIBUTES
+                        );
+
+#undef  ATTRIBUTES
+
+    Trace("<====\n");
+    return STATUS_SUCCESS;
+
+fail2:
+    Error("fail2\n");
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return status;
+}
 
 static FORCEINLINE NTSTATUS
 __FdoD3ToD0(
@@ -2427,6 +2641,8 @@ __FdoD3ToD0(
 
     ASSERT3U(KeGetCurrentIrql(), ==, DISPATCH_LEVEL);
 
+    (VOID) FdoSetDistribution(Fdo);
+
     Fdo->Channel = XENBUS_EVTCHN(Open,
                                  &Fdo->EvtchnInterface,
                                  XENBUS_EVTCHN_TYPE_VIRQ,
@@ -2571,6 +2787,8 @@ __FdoD0ToD3(
                   Fdo->Channel);
     Fdo->Channel = NULL;
 
+    FdoClearDistribution(Fdo);
+
     Trace("<====\n");
 }
 
@@ -3049,6 +3267,8 @@ FdoFilterCmPartialResourceList(
     }
 }
 
+#define BALLOON_PAUSE   60
+
 static NTSTATUS
 FdoStartDevice(
     IN  PXENBUS_FDO                 Fdo,
-- 
2.1.1


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

From win-pv-devel-bounces@lists.xenproject.org Tue Nov 24 14:04:50 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 24 Nov 2015 14:04:50 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1a1EDB-0007OF-IW; Tue, 24 Nov 2015 14:04:49 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1a1EDA-0007O5-9m
	for win-pv-devel@lists.xenproject.org; Tue, 24 Nov 2015 14:04:48 +0000
Received: from [85.158.139.211] by server-7.bemta-5.messagelabs.com id
	B5/26-13905-F7E64565; Tue, 24 Nov 2015 14:04:47 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-12.tower-206.messagelabs.com!1448373885!6156499!1
X-Originating-IP: [209.85.160.178]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 65079 invoked from network); 24 Nov 2015 14:04:46 -0000
Received: from mail-yk0-f178.google.com (HELO mail-yk0-f178.google.com)
	(209.85.160.178)
	by server-12.tower-206.messagelabs.com with AES128-GCM-SHA256 encrypted
	SMTP; 24 Nov 2015 14:04:46 -0000
Received: by ykdr82 with SMTP id r82so19009156ykd.3
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 24 Nov 2015 06:04:45 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id:in-reply-to:references;
	bh=aE9ravF0OqkFUQOnVlXzjizAj+d/kZDVI6m/eN0WerU=;
	b=Wu7/xHRErBtm2TxZpRf6996Tl/op4dkgUjXLBnixX0TEKMi6lFOZcWNQT4yLoz1DIx
	zlFxb84AWZJnHiYNKHvSoERneb7xDsSS60zkNlzywKgFXF0lztKhZGfy/6ou8iHVM6DY
	1FJBaCRj1uv1UAO89rYEQ/fM3w80dZ2You4oCgFs4CO06aC4Xbtyuy2UlgQBTRf/QSBi
	bTq+8khtMJQKjvMyQSFCEQmGb9aKbvCGdO1yNsCmpEnpW6TbiPkylknITfW8NnR6S748
	Veg3yexxjWm9kjz57SA/dqg+rDZwKEEPFFMGHmDlMCsHat9PHwrVUlme2DWbRKk9nyo4
	J6qg==
X-Received: by 10.129.93.5 with SMTP id r5mr30785853ywb.285.1448373885724;
	Tue, 24 Nov 2015 06:04:45 -0800 (PST)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	s83sm15746851ywg.21.2015.11.24.06.04.44
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Tue, 24 Nov 2015 06:04:45 -0800 (PST)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Tue, 24 Nov 2015 14:04:30 +0000
Message-Id: <1448373871-2924-2-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
In-Reply-To: <1448373871-2924-1-git-send-email-paul.durrant@citrix.com>
References: <1448373871-2924-1-git-send-email-paul.durrant@citrix.com>
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH 1/2] Publish distribution information to
	xenstore
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

My recent patch series to Xen added a documented path and format for
publishing information about PV driver distributions to xenstore.

This patch adds code to populate the documented path (should it exist)
with information about the XENBUS driver package.

Suggested-by: Owen Smith <owen.smith@citrix.com>
Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/xenvif/fdo.c | 220 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 220 insertions(+)

diff --git a/src/xenvif/fdo.c b/src/xenvif/fdo.c
index 67916d6..479de93 100644
--- a/src/xenvif/fdo.c
+++ b/src/xenvif/fdo.c
@@ -1080,6 +1080,222 @@ FdoParseResources(
     }
 }
 
+static FORCEINLINE BOOLEAN
+__FdoMatchDistribution(
+    IN  PXENVIF_FDO Fdo,
+    IN  PCHAR       Buffer
+    )
+{
+    PCHAR           Vendor;
+    PCHAR           Product;
+    PCHAR           Context;
+    const CHAR      *Text;
+    BOOLEAN         Match;
+    ULONG           Index;
+    NTSTATUS        status;
+
+    UNREFERENCED_PARAMETER(Fdo);
+
+    status = STATUS_INVALID_PARAMETER;
+
+    Vendor = __strtok_r(Buffer, " ", &Context);
+    if (Vendor == NULL)
+        goto fail1;
+
+    Product = __strtok_r(NULL, " ", &Context);
+    if (Product == NULL)
+        goto fail2;
+
+    Match = TRUE;
+
+    Text = VENDOR_NAME_STR;
+
+    for (Index = 0; Text[Index] != 0; Index++) {
+        if (!isalnum(Text[Index])) {
+            if (Vendor[Index] != '_') {
+                Match = FALSE;
+                break;
+            }
+        } else {
+            if (Vendor[Index] != Text[Index]) {
+                Match = FALSE;
+                break;
+            }
+        }
+    }
+
+    Text = "XENVIF";
+
+    if (_stricmp(Product, Text) != 0)
+        Match = FALSE;
+
+    return Match;
+
+fail2:
+    Error("fail2\n");
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return FALSE;
+}
+
+static VOID
+FdoClearDistribution(
+    IN  PXENVIF_FDO Fdo
+    )
+{
+    PCHAR           Buffer;
+    PANSI_STRING    Distributions;
+    ULONG           Index;
+    NTSTATUS        status;
+
+    Trace("====>\n");
+
+    status = XENBUS_STORE(Directory,
+                          &Fdo->StoreInterface,
+                          NULL,
+                          NULL,
+                          "drivers",
+                          &Buffer);
+    if (NT_SUCCESS(status)) {
+        Distributions = __FdoMultiSzToUpcaseAnsi(Buffer);
+
+        XENBUS_STORE(Free,
+                     &Fdo->StoreInterface,
+                     Buffer);
+    } else {
+        Distributions = NULL;
+    }
+
+    if (Distributions == NULL)
+        goto done;
+
+    for (Index = 0; Distributions[Index].Buffer != NULL; Index++) {
+        PANSI_STRING    Distribution = &Distributions[Index];
+
+        status = XENBUS_STORE(Read,
+                              &Fdo->StoreInterface,
+                              NULL,
+                              "drivers",
+                              Distribution->Buffer,
+                              &Buffer);
+        if (!NT_SUCCESS(status))
+            continue;
+
+        if (__FdoMatchDistribution(Fdo, Buffer))
+            (VOID) XENBUS_STORE(Remove,
+                                &Fdo->StoreInterface,
+                                NULL,
+                                "drivers",
+                                Distribution->Buffer);
+
+        XENBUS_STORE(Free,
+                     &Fdo->StoreInterface,
+                     Buffer);
+    }
+
+    __FdoFreeAnsi(Distributions);
+
+done:
+    Trace("<====\n");
+}
+
+#define MAXIMUM_INDEX   255
+
+static NTSTATUS
+FdoSetDistribution(
+    IN  PXENVIF_FDO Fdo
+    )
+{
+    ULONG           Index;
+    CHAR            Distribution[MAXNAMELEN];
+    CHAR            Vendor[MAXNAMELEN];
+    const CHAR      *Product;
+    NTSTATUS        status;
+
+    Trace("====>\n");
+
+    Index = 0;
+    while (Index <= MAXIMUM_INDEX) {
+        PCHAR   Buffer;
+
+        status = RtlStringCbPrintfA(Distribution,
+                                    MAXNAMELEN,
+                                    "%u",
+                                    Index);
+        ASSERT(NT_SUCCESS(status));
+
+        status = XENBUS_STORE(Read,
+                              &Fdo->StoreInterface,
+                              NULL,
+                              "drivers",
+                              Distribution,
+                              &Buffer);
+        if (!NT_SUCCESS(status)) {
+            if (status == STATUS_OBJECT_NAME_NOT_FOUND)
+                goto update;
+
+            goto fail1;
+        }
+
+        XENBUS_STORE(Free,
+                     &Fdo->StoreInterface,
+                     Buffer);
+
+        Index++;
+    }
+
+    status = STATUS_UNSUCCESSFUL;
+    goto fail2;
+
+update:
+    status = RtlStringCbPrintfA(Vendor,
+                                MAXNAMELEN,
+                                "%s",
+                                VENDOR_NAME_STR);
+    ASSERT(NT_SUCCESS(status));
+
+    for (Index  = 0; Vendor[Index] != '\0'; Index++)
+        if (!isalnum(Vendor[Index]))
+            Vendor[Index] = '_';
+
+    Product = "XENVIF";
+
+#if DBG
+#define ATTRIBUTES   "(DEBUG)"
+#else
+#define ATTRIBUTES   ""
+#endif
+
+    (VOID) XENBUS_STORE(Printf,
+                        &Fdo->StoreInterface,
+                        NULL,
+                        "drivers",
+                        Distribution,
+                        "%s %s %u.%u.%u %s",
+                        Vendor,
+                        Product,
+                        MAJOR_VERSION,
+                        MINOR_VERSION,
+                        MICRO_VERSION,
+                        ATTRIBUTES
+                        );
+
+#undef  ATTRIBUTES
+
+    Trace("<====\n");
+    return STATUS_SUCCESS;
+
+fail2:
+    Error("fail2\n");
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return status;
+}
+
 static FORCEINLINE NTSTATUS
 __FdoD3ToD0(
     IN  PXENVIF_FDO Fdo
@@ -1091,6 +1307,8 @@ __FdoD3ToD0(
 
     ASSERT3U(KeGetCurrentIrql(), ==, DISPATCH_LEVEL);
 
+    (VOID) FdoSetDistribution(Fdo);
+
     status = XENBUS_STORE(WatchAdd,
                           &Fdo->StoreInterface,
                           "device",
@@ -1290,6 +1508,8 @@ FdoD0ToD3(
 
     KeLowerIrql(Irql);
 
+    FdoClearDistribution(Fdo);
+
     Trace("<====\n");
 }
 
-- 
2.1.1


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

From win-pv-devel-bounces@lists.xenproject.org Tue Nov 24 14:04:50 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 24 Nov 2015 14:04:50 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1a1EDA-0007O6-Fa; Tue, 24 Nov 2015 14:04:48 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1a1ED8-0007O0-RY
	for win-pv-devel@lists.xenproject.org; Tue, 24 Nov 2015 14:04:46 +0000
Received: from [85.158.137.68] by server-4.bemta-3.messagelabs.com id
	17/1D-09570-E7E64565; Tue, 24 Nov 2015 14:04:46 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-7.tower-31.messagelabs.com!1448373885!6222031!1
X-Originating-IP: [209.85.160.181]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 29078 invoked from network); 24 Nov 2015 14:04:45 -0000
Received: from mail-yk0-f181.google.com (HELO mail-yk0-f181.google.com)
	(209.85.160.181)
	by server-7.tower-31.messagelabs.com with AES128-GCM-SHA256 encrypted
	SMTP; 24 Nov 2015 14:04:45 -0000
Received: by ykba77 with SMTP id a77so19053689ykb.2
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 24 Nov 2015 06:04:44 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:subject:date:message-id;
	bh=66TiuD9vQMnQRuEihEXQZtm/2L2gniAwp6MwUcMtoIc=;
	b=PUdNY3iG/aT/dDmIWhwKQwQWD+U4SVQ/hPquPu3yo+rx3JKhdQvhDMGsBzgPZetHob
	YID6zaw+V45tNuD0kqE79fDU7BhTWTknEnKKICIcEerEn9VBVwTj1jysdFpZD8Pb+vFP
	3Uk8YxY/ANRzJiYVzdtWpU7kn20TxVKAT604g0jjHJAF3vj+bh3cISyDBELReiorPxeI
	vpI6RXveaEGvSMvdkLXUwL0Wal6mvRhj90nF919ReW+Vimy+F/9sB/CoxdwtKqeaj/bE
	mFqhKx1jQj470UVn0UF3CNBmezwDwD1VmLKUyp9TJgNj3dL5Okm7pf8MybDes589EpMB
	qyWg==
X-Received: by 10.13.204.19 with SMTP id o19mr22159378ywd.333.1448373884629;
	Tue, 24 Nov 2015 06:04:44 -0800 (PST)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	s83sm15746851ywg.21.2015.11.24.06.04.43
	for <win-pv-devel@lists.xenproject.org>
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Tue, 24 Nov 2015 06:04:44 -0800 (PST)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Tue, 24 Nov 2015 14:04:29 +0000
Message-Id: <1448373871-2924-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Subject: [win-pv-devel] [PATCH 0/2] Publish information to xenstore
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

My recent patch series to Xen added documentation for various xenstore
paths which PV drivers may use to publish information.

Patch #1 publishes driver distribution information

Patch #2 publishes hotplug and network inforamtion


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

From win-pv-devel-bounces@lists.xenproject.org Tue Nov 24 14:04:50 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 24 Nov 2015 14:04:50 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1a1EDB-0007OF-IW; Tue, 24 Nov 2015 14:04:49 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1a1EDA-0007O5-9m
	for win-pv-devel@lists.xenproject.org; Tue, 24 Nov 2015 14:04:48 +0000
Received: from [85.158.139.211] by server-7.bemta-5.messagelabs.com id
	B5/26-13905-F7E64565; Tue, 24 Nov 2015 14:04:47 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-12.tower-206.messagelabs.com!1448373885!6156499!1
X-Originating-IP: [209.85.160.178]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 65079 invoked from network); 24 Nov 2015 14:04:46 -0000
Received: from mail-yk0-f178.google.com (HELO mail-yk0-f178.google.com)
	(209.85.160.178)
	by server-12.tower-206.messagelabs.com with AES128-GCM-SHA256 encrypted
	SMTP; 24 Nov 2015 14:04:46 -0000
Received: by ykdr82 with SMTP id r82so19009156ykd.3
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 24 Nov 2015 06:04:45 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id:in-reply-to:references;
	bh=aE9ravF0OqkFUQOnVlXzjizAj+d/kZDVI6m/eN0WerU=;
	b=Wu7/xHRErBtm2TxZpRf6996Tl/op4dkgUjXLBnixX0TEKMi6lFOZcWNQT4yLoz1DIx
	zlFxb84AWZJnHiYNKHvSoERneb7xDsSS60zkNlzywKgFXF0lztKhZGfy/6ou8iHVM6DY
	1FJBaCRj1uv1UAO89rYEQ/fM3w80dZ2You4oCgFs4CO06aC4Xbtyuy2UlgQBTRf/QSBi
	bTq+8khtMJQKjvMyQSFCEQmGb9aKbvCGdO1yNsCmpEnpW6TbiPkylknITfW8NnR6S748
	Veg3yexxjWm9kjz57SA/dqg+rDZwKEEPFFMGHmDlMCsHat9PHwrVUlme2DWbRKk9nyo4
	J6qg==
X-Received: by 10.129.93.5 with SMTP id r5mr30785853ywb.285.1448373885724;
	Tue, 24 Nov 2015 06:04:45 -0800 (PST)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	s83sm15746851ywg.21.2015.11.24.06.04.44
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Tue, 24 Nov 2015 06:04:45 -0800 (PST)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Tue, 24 Nov 2015 14:04:30 +0000
Message-Id: <1448373871-2924-2-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
In-Reply-To: <1448373871-2924-1-git-send-email-paul.durrant@citrix.com>
References: <1448373871-2924-1-git-send-email-paul.durrant@citrix.com>
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH 1/2] Publish distribution information to
	xenstore
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

My recent patch series to Xen added a documented path and format for
publishing information about PV driver distributions to xenstore.

This patch adds code to populate the documented path (should it exist)
with information about the XENBUS driver package.

Suggested-by: Owen Smith <owen.smith@citrix.com>
Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/xenvif/fdo.c | 220 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 220 insertions(+)

diff --git a/src/xenvif/fdo.c b/src/xenvif/fdo.c
index 67916d6..479de93 100644
--- a/src/xenvif/fdo.c
+++ b/src/xenvif/fdo.c
@@ -1080,6 +1080,222 @@ FdoParseResources(
     }
 }
 
+static FORCEINLINE BOOLEAN
+__FdoMatchDistribution(
+    IN  PXENVIF_FDO Fdo,
+    IN  PCHAR       Buffer
+    )
+{
+    PCHAR           Vendor;
+    PCHAR           Product;
+    PCHAR           Context;
+    const CHAR      *Text;
+    BOOLEAN         Match;
+    ULONG           Index;
+    NTSTATUS        status;
+
+    UNREFERENCED_PARAMETER(Fdo);
+
+    status = STATUS_INVALID_PARAMETER;
+
+    Vendor = __strtok_r(Buffer, " ", &Context);
+    if (Vendor == NULL)
+        goto fail1;
+
+    Product = __strtok_r(NULL, " ", &Context);
+    if (Product == NULL)
+        goto fail2;
+
+    Match = TRUE;
+
+    Text = VENDOR_NAME_STR;
+
+    for (Index = 0; Text[Index] != 0; Index++) {
+        if (!isalnum(Text[Index])) {
+            if (Vendor[Index] != '_') {
+                Match = FALSE;
+                break;
+            }
+        } else {
+            if (Vendor[Index] != Text[Index]) {
+                Match = FALSE;
+                break;
+            }
+        }
+    }
+
+    Text = "XENVIF";
+
+    if (_stricmp(Product, Text) != 0)
+        Match = FALSE;
+
+    return Match;
+
+fail2:
+    Error("fail2\n");
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return FALSE;
+}
+
+static VOID
+FdoClearDistribution(
+    IN  PXENVIF_FDO Fdo
+    )
+{
+    PCHAR           Buffer;
+    PANSI_STRING    Distributions;
+    ULONG           Index;
+    NTSTATUS        status;
+
+    Trace("====>\n");
+
+    status = XENBUS_STORE(Directory,
+                          &Fdo->StoreInterface,
+                          NULL,
+                          NULL,
+                          "drivers",
+                          &Buffer);
+    if (NT_SUCCESS(status)) {
+        Distributions = __FdoMultiSzToUpcaseAnsi(Buffer);
+
+        XENBUS_STORE(Free,
+                     &Fdo->StoreInterface,
+                     Buffer);
+    } else {
+        Distributions = NULL;
+    }
+
+    if (Distributions == NULL)
+        goto done;
+
+    for (Index = 0; Distributions[Index].Buffer != NULL; Index++) {
+        PANSI_STRING    Distribution = &Distributions[Index];
+
+        status = XENBUS_STORE(Read,
+                              &Fdo->StoreInterface,
+                              NULL,
+                              "drivers",
+                              Distribution->Buffer,
+                              &Buffer);
+        if (!NT_SUCCESS(status))
+            continue;
+
+        if (__FdoMatchDistribution(Fdo, Buffer))
+            (VOID) XENBUS_STORE(Remove,
+                                &Fdo->StoreInterface,
+                                NULL,
+                                "drivers",
+                                Distribution->Buffer);
+
+        XENBUS_STORE(Free,
+                     &Fdo->StoreInterface,
+                     Buffer);
+    }
+
+    __FdoFreeAnsi(Distributions);
+
+done:
+    Trace("<====\n");
+}
+
+#define MAXIMUM_INDEX   255
+
+static NTSTATUS
+FdoSetDistribution(
+    IN  PXENVIF_FDO Fdo
+    )
+{
+    ULONG           Index;
+    CHAR            Distribution[MAXNAMELEN];
+    CHAR            Vendor[MAXNAMELEN];
+    const CHAR      *Product;
+    NTSTATUS        status;
+
+    Trace("====>\n");
+
+    Index = 0;
+    while (Index <= MAXIMUM_INDEX) {
+        PCHAR   Buffer;
+
+        status = RtlStringCbPrintfA(Distribution,
+                                    MAXNAMELEN,
+                                    "%u",
+                                    Index);
+        ASSERT(NT_SUCCESS(status));
+
+        status = XENBUS_STORE(Read,
+                              &Fdo->StoreInterface,
+                              NULL,
+                              "drivers",
+                              Distribution,
+                              &Buffer);
+        if (!NT_SUCCESS(status)) {
+            if (status == STATUS_OBJECT_NAME_NOT_FOUND)
+                goto update;
+
+            goto fail1;
+        }
+
+        XENBUS_STORE(Free,
+                     &Fdo->StoreInterface,
+                     Buffer);
+
+        Index++;
+    }
+
+    status = STATUS_UNSUCCESSFUL;
+    goto fail2;
+
+update:
+    status = RtlStringCbPrintfA(Vendor,
+                                MAXNAMELEN,
+                                "%s",
+                                VENDOR_NAME_STR);
+    ASSERT(NT_SUCCESS(status));
+
+    for (Index  = 0; Vendor[Index] != '\0'; Index++)
+        if (!isalnum(Vendor[Index]))
+            Vendor[Index] = '_';
+
+    Product = "XENVIF";
+
+#if DBG
+#define ATTRIBUTES   "(DEBUG)"
+#else
+#define ATTRIBUTES   ""
+#endif
+
+    (VOID) XENBUS_STORE(Printf,
+                        &Fdo->StoreInterface,
+                        NULL,
+                        "drivers",
+                        Distribution,
+                        "%s %s %u.%u.%u %s",
+                        Vendor,
+                        Product,
+                        MAJOR_VERSION,
+                        MINOR_VERSION,
+                        MICRO_VERSION,
+                        ATTRIBUTES
+                        );
+
+#undef  ATTRIBUTES
+
+    Trace("<====\n");
+    return STATUS_SUCCESS;
+
+fail2:
+    Error("fail2\n");
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return status;
+}
+
 static FORCEINLINE NTSTATUS
 __FdoD3ToD0(
     IN  PXENVIF_FDO Fdo
@@ -1091,6 +1307,8 @@ __FdoD3ToD0(
 
     ASSERT3U(KeGetCurrentIrql(), ==, DISPATCH_LEVEL);
 
+    (VOID) FdoSetDistribution(Fdo);
+
     status = XENBUS_STORE(WatchAdd,
                           &Fdo->StoreInterface,
                           "device",
@@ -1290,6 +1508,8 @@ FdoD0ToD3(
 
     KeLowerIrql(Irql);
 
+    FdoClearDistribution(Fdo);
+
     Trace("<====\n");
 }
 
-- 
2.1.1


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

From win-pv-devel-bounces@lists.xenproject.org Tue Nov 24 14:04:50 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 24 Nov 2015 14:04:50 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1a1EDA-0007O6-Fa; Tue, 24 Nov 2015 14:04:48 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1a1ED8-0007O0-RY
	for win-pv-devel@lists.xenproject.org; Tue, 24 Nov 2015 14:04:46 +0000
Received: from [85.158.137.68] by server-4.bemta-3.messagelabs.com id
	17/1D-09570-E7E64565; Tue, 24 Nov 2015 14:04:46 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-7.tower-31.messagelabs.com!1448373885!6222031!1
X-Originating-IP: [209.85.160.181]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 29078 invoked from network); 24 Nov 2015 14:04:45 -0000
Received: from mail-yk0-f181.google.com (HELO mail-yk0-f181.google.com)
	(209.85.160.181)
	by server-7.tower-31.messagelabs.com with AES128-GCM-SHA256 encrypted
	SMTP; 24 Nov 2015 14:04:45 -0000
Received: by ykba77 with SMTP id a77so19053689ykb.2
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 24 Nov 2015 06:04:44 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:subject:date:message-id;
	bh=66TiuD9vQMnQRuEihEXQZtm/2L2gniAwp6MwUcMtoIc=;
	b=PUdNY3iG/aT/dDmIWhwKQwQWD+U4SVQ/hPquPu3yo+rx3JKhdQvhDMGsBzgPZetHob
	YID6zaw+V45tNuD0kqE79fDU7BhTWTknEnKKICIcEerEn9VBVwTj1jysdFpZD8Pb+vFP
	3Uk8YxY/ANRzJiYVzdtWpU7kn20TxVKAT604g0jjHJAF3vj+bh3cISyDBELReiorPxeI
	vpI6RXveaEGvSMvdkLXUwL0Wal6mvRhj90nF919ReW+Vimy+F/9sB/CoxdwtKqeaj/bE
	mFqhKx1jQj470UVn0UF3CNBmezwDwD1VmLKUyp9TJgNj3dL5Okm7pf8MybDes589EpMB
	qyWg==
X-Received: by 10.13.204.19 with SMTP id o19mr22159378ywd.333.1448373884629;
	Tue, 24 Nov 2015 06:04:44 -0800 (PST)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	s83sm15746851ywg.21.2015.11.24.06.04.43
	for <win-pv-devel@lists.xenproject.org>
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Tue, 24 Nov 2015 06:04:44 -0800 (PST)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Tue, 24 Nov 2015 14:04:29 +0000
Message-Id: <1448373871-2924-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Subject: [win-pv-devel] [PATCH 0/2] Publish information to xenstore
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

My recent patch series to Xen added documentation for various xenstore
paths which PV drivers may use to publish information.

Patch #1 publishes driver distribution information

Patch #2 publishes hotplug and network inforamtion


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

From win-pv-devel-bounces@lists.xenproject.org Tue Nov 24 14:04:51 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 24 Nov 2015 14:04:51 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1a1EDD-0007PX-Ka; Tue, 24 Nov 2015 14:04:51 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1a1EDB-0007OE-LI
	for win-pv-devel@lists.xenproject.org; Tue, 24 Nov 2015 14:04:49 +0000
Received: from [85.158.137.68] by server-8.bemta-3.messagelabs.com id
	2B/2A-31069-08E64565; Tue, 24 Nov 2015 14:04:48 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-6.tower-31.messagelabs.com!1448373887!6155038!1
X-Originating-IP: [209.85.160.176]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 778 invoked from network); 24 Nov 2015 14:04:47 -0000
Received: from mail-yk0-f176.google.com (HELO mail-yk0-f176.google.com)
	(209.85.160.176)
	by server-6.tower-31.messagelabs.com with AES128-GCM-SHA256 encrypted
	SMTP; 24 Nov 2015 14:04:47 -0000
Received: by ykdv3 with SMTP id v3so19163563ykd.0
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 24 Nov 2015 06:04:46 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id:in-reply-to:references;
	bh=VwkNvTRg8fCKQ2p6wOahrzhSRw+Yq/QRRQJvkcXwUHo=;
	b=0FNbDeG1HYgML+hkl11+c3toYOc9V5uP4l+mxWFmWs3vgCNFtTyZ9GoGOb3G55Z/ac
	aixhhEkCXa9AOUsUBAxNf22H5Wzid43lbBolYs+KQZKstDHefojwvKo1my7h+UtMjpL3
	yUH2+mW1bJRRZElySFIgRcye2Cv59VQrPf6MAwGUzkCB5xw9D320tPMguUpZOlIo/eaI
	lbZtSZE00CPaRnL5oTPo8Pp9bC/oEcvlK1FaN1NWNCwfSKVKfB8HH7cjoYzI9JdzEfn+
	NU341RRvAYo5q7xVL2sguiHzAu6dccutiD5HF9eTtaFJJbVFlu+MXETEtW83mX9gox0z
	Nfjw==
X-Received: by 10.129.72.204 with SMTP id v195mr27770204ywa.101.1448373886852; 
	Tue, 24 Nov 2015 06:04:46 -0800 (PST)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	s83sm15746851ywg.21.2015.11.24.06.04.45
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Tue, 24 Nov 2015 06:04:46 -0800 (PST)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Tue, 24 Nov 2015 14:04:31 +0000
Message-Id: <1448373871-2924-3-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
In-Reply-To: <1448373871-2924-1-git-send-email-paul.durrant@citrix.com>
References: <1448373871-2924-1-git-send-email-paul.durrant@citrix.com>
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH 2/2] Publish network information to xenstore
	using documented paths
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

My recent patch series to Xen added documented paths for advertising vif
hotplug capability and paths for publishing network interface information
(name, IP addresses, etc.).

This patch modifies XENVIF to make use of those new paths.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/xenvif/fdo.c      |   8 +++
 src/xenvif/frontend.c | 134 +++++++++++++++++++++++++++++++-------------------
 src/xenvif/mac.c      |  91 +++++++++++-----------------------
 3 files changed, 120 insertions(+), 113 deletions(-)

diff --git a/src/xenvif/fdo.c b/src/xenvif/fdo.c
index 479de93..0fc27ca 100644
--- a/src/xenvif/fdo.c
+++ b/src/xenvif/fdo.c
@@ -1318,6 +1318,14 @@ __FdoD3ToD0(
     if (!NT_SUCCESS(status))
         goto fail1;
 
+    (VOID) XENBUS_STORE(Printf,
+                        &Fdo->StoreInterface,
+                        NULL,
+                        "feature/hotplug",
+                        "vif",
+                        "%u",
+                        TRUE);
+
     Trace("<====\n");
 
     return STATUS_SUCCESS;
diff --git a/src/xenvif/frontend.c b/src/xenvif/frontend.c
index 69aed73..98efee5 100644
--- a/src/xenvif/frontend.c
+++ b/src/xenvif/frontend.c
@@ -87,6 +87,8 @@ struct _XENVIF_FRONTEND {
     ULONG                       StatisticsCount;
 
     PXENVIF_THREAD              MibThread;
+    CHAR                        Alias[IF_MAX_STRING_SIZE + 1];
+    NET_IFINDEX                 InterfaceIndex;
     PSOCKADDR_INET              AddressTable;
     ULONG                       AddressCount;
 };
@@ -458,15 +460,15 @@ fail1:
 }
 
 static NTSTATUS
-FrontendGetInterfaceIndex(
+FrontendProcessInterfaceTable(
     IN  PXENVIF_FRONTEND    Frontend,
-    IN  PMIB_IF_TABLE2      Table,
-    OUT PNET_IFINDEX        InterfaceIndex
+    IN  PMIB_IF_TABLE2      Table
     )
 {
     ETHERNET_ADDRESS        PermanentPhysicalAddress;
     ULONG                   Index;
     PMIB_IF_ROW2            Row;
+    NTSTATUS                status;
 
     MacQueryPermanentAddress(__FrontendGetMac(Frontend),
                              &PermanentPhysicalAddress);
@@ -494,12 +496,13 @@ FrontendGetInterfaceIndex(
     return STATUS_UNSUCCESSFUL;
 
 found:
-    *InterfaceIndex = Row->InterfaceIndex;
+    Frontend->InterfaceIndex = Row->InterfaceIndex;
 
-    Trace("[%u]: %ws (%ws)\n",
-          Row->InterfaceIndex,
-          Row->Alias,
-          Row->Description);
+    status = RtlStringCbPrintfA(Frontend->Alias,
+                                sizeof (Frontend->Alias),
+                                "%ws",
+                                Row->Alias);
+    ASSERT(NT_SUCCESS(status));
 
     return STATUS_SUCCESS;
 }
@@ -564,8 +567,7 @@ fail1:
 static NTSTATUS
 FrontendProcessAddressTable(
     IN  PXENVIF_FRONTEND            Frontend,
-    IN  PMIB_UNICASTIPADDRESS_TABLE Table,
-    IN  NET_IFINDEX                 InterfaceIndex
+    IN  PMIB_UNICASTIPADDRESS_TABLE Table
     )
 {
     ULONG                           Index;
@@ -583,7 +585,7 @@ FrontendProcessAddressTable(
     for (Index = 0; Index < Table->NumEntries; Index++) {
         PMIB_UNICASTIPADDRESS_ROW   Row = &Table->Table[Index];
 
-        if (Row->InterfaceIndex != InterfaceIndex)
+        if (Row->InterfaceIndex != Frontend->InterfaceIndex)
             continue;
 
         if (Row->Address.si_family != AF_INET &&
@@ -604,6 +606,43 @@ fail1:
 }
 
 static NTSTATUS
+FrontendDumpAlias(
+    IN  PXENVIF_FRONTEND    Frontend
+    )
+{
+    NTSTATUS                status;
+
+    status = XENBUS_STORE(Remove,
+                          &Frontend->StoreInterface,
+                          NULL,
+                          __FrontendGetPrefix(Frontend),
+                          "name");
+    if (!NT_SUCCESS(status) &&
+        status != STATUS_OBJECT_NAME_NOT_FOUND)
+        goto fail1;
+
+    status = XENBUS_STORE(Printf,
+                          &Frontend->StoreInterface,
+                          NULL,
+                          __FrontendGetPrefix(Frontend),
+                          "name",
+                          "%s",
+                          Frontend->Alias);
+    if (!NT_SUCCESS(status))
+        goto fail2;
+
+    return STATUS_SUCCESS;
+
+fail2:
+    Error("fail2\n");
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return status;
+}
+
+static NTSTATUS
 FrontendDumpAddressTable(
     IN  PXENVIF_FRONTEND        Frontend
     )
@@ -647,7 +686,7 @@ FrontendDumpAddressTable(
         switch (Frontend->AddressTable[Index].si_family) {
         case AF_INET: {
             IPV4_ADDRESS    Address;
-            CHAR            Node[sizeof ("ipv4/address/XXXXXXXX")];
+            CHAR            Node[sizeof ("ipv4/XXXXXXXX")];
 
             RtlCopyMemory(Address.Byte,
                           &Frontend->AddressTable[Index].Ipv4.sin_addr.s_addr,
@@ -655,7 +694,7 @@ FrontendDumpAddressTable(
 
             status = RtlStringCbPrintfA(Node,
                                         sizeof (Node),
-                                        "ipv4/address/%u",
+                                        "ipv4/%u",
                                         IpVersion4Count);
             ASSERT(NT_SUCCESS(status));
 
@@ -672,19 +711,12 @@ FrontendDumpAddressTable(
             if (!NT_SUCCESS(status))
                 goto fail4;
 
-            Trace("%s: %u.%u.%u.%u\n",
-                  __FrontendGetPrefix(Frontend),
-                  Address.Byte[0],
-                  Address.Byte[1],
-                  Address.Byte[2],
-                  Address.Byte[3]);
-
             IpVersion4Count++;
             break;
         }
         case AF_INET6: {
             IPV6_ADDRESS    Address;
-            CHAR            Node[sizeof ("ipv6/address/XXXXXXXX")];
+            CHAR            Node[sizeof ("ipv6/XXXXXXXX")];
 
             RtlCopyMemory(Address.Byte,
                           &Frontend->AddressTable[Index].Ipv6.sin6_addr.s6_addr,
@@ -692,7 +724,7 @@ FrontendDumpAddressTable(
 
             status = RtlStringCbPrintfA(Node,
                                         sizeof (Node),
-                                        "ipv6/address/%u",
+                                        "ipv6/%u",
                                         IpVersion6Count);
             ASSERT(NT_SUCCESS(status));
 
@@ -713,17 +745,6 @@ FrontendDumpAddressTable(
             if (!NT_SUCCESS(status))
                 goto fail4;
 
-            Trace("%s: %04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x\n",
-                  __FrontendGetPrefix(Frontend),
-                  NTOHS(Address.Word[0]),
-                  NTOHS(Address.Word[1]),
-                  NTOHS(Address.Word[2]),
-                  NTOHS(Address.Word[3]),
-                  NTOHS(Address.Word[4]),
-                  NTOHS(Address.Word[5]),
-                  NTOHS(Address.Word[6]),
-                  NTOHS(Address.Word[7]));
-
             IpVersion6Count++;
             break;
         }
@@ -842,7 +863,6 @@ FrontendMib(
 
     for (;;) { 
         PMIB_IF_TABLE2              IfTable;
-        NET_IFINDEX                 InterfaceIndex;
         PMIB_UNICASTIPADDRESS_TABLE UnicastIpAddressTable;
         KIRQL                       Irql;
 
@@ -867,9 +887,8 @@ FrontendMib(
         if (!NT_SUCCESS(status))
             goto loop;
 
-        status = FrontendGetInterfaceIndex(Frontend,
-                                           IfTable,
-                                           &InterfaceIndex);
+        status = FrontendProcessInterfaceTable(Frontend,
+                                               IfTable);
         if (!NT_SUCCESS(status))
             goto loop;
 
@@ -878,22 +897,19 @@ FrontendMib(
         if (!NT_SUCCESS(status))
             goto loop;
 
-        KeAcquireSpinLock(&Frontend->Lock, &Irql);
-
-        // It is not safe to use interfaces before this point
-        if (Frontend->State != FRONTEND_CONNECTED &&
-            Frontend->State != FRONTEND_ENABLED)
-            goto unlock;
-
         status = FrontendProcessAddressTable(Frontend,
-                                             UnicastIpAddressTable,
-                                             InterfaceIndex);
+                                             UnicastIpAddressTable);
         if (!NT_SUCCESS(status))
-            goto unlock;
+            goto loop;
 
-        (VOID) FrontendDumpAddressTable(Frontend);
+        KeAcquireSpinLock(&Frontend->Lock, &Irql);
+
+        if (Frontend->State == FRONTEND_CONNECTED ||
+            Frontend->State == FRONTEND_ENABLED) {
+            (VOID) FrontendDumpAlias(Frontend);
+            (VOID) FrontendDumpAddressTable(Frontend);
+        }
 
-unlock:
         KeReleaseSpinLock(&Frontend->Lock, Irql);
 
 loop:
@@ -1409,6 +1425,12 @@ FrontendClose(
 
     FrontendReleaseBackend(Frontend);
 
+    (VOID) XENBUS_STORE(Remove,
+                        &Frontend->StoreInterface,
+                        NULL,
+                        NULL,
+                        __FrontendGetPrefix(Frontend));
+
     XENBUS_STORE(Release, &Frontend->StoreInterface);
 
     Trace("<====\n");
@@ -2262,7 +2284,7 @@ FrontendInitialize(
     if (!NT_SUCCESS(status))
         goto fail2;
 
-    Length = sizeof ("data/vif/") + (ULONG)strlen(Name);
+    Length = sizeof ("attr/vif/") + (ULONG)strlen(Name);
     Prefix = __FrontendAllocate(Length);
 
     status = STATUS_NO_MEMORY;
@@ -2271,7 +2293,7 @@ FrontendInitialize(
 
     status = RtlStringCbPrintfA(Prefix, 
                                 Length,
-                                "data/vif/%s", 
+                                "attr/vif/%s",
                                 Name);
     if (!NT_SUCCESS(status))
         goto fail4;
@@ -2415,6 +2437,16 @@ FrontendTeardown(
     ThreadJoin(Frontend->MibThread);
     Frontend->MibThread = NULL;
 
+    if (Frontend->AddressCount != 0) {
+        __FrontendFree(Frontend->AddressTable);
+
+        Frontend->AddressTable = NULL;
+        Frontend->AddressCount = 0;
+    }
+
+    RtlZeroMemory(Frontend->Alias, sizeof (Frontend->Alias));
+    Frontend->InterfaceIndex = 0;
+
     ThreadAlert(Frontend->EjectThread);
     ThreadJoin(Frontend->EjectThread);
     Frontend->EjectThread = NULL;
diff --git a/src/xenvif/mac.c b/src/xenvif/mac.c
index 91467d6..0a771a4 100644
--- a/src/xenvif/mac.c
+++ b/src/xenvif/mac.c
@@ -101,19 +101,6 @@ __MacSetPermanentAddress(
 
     Mac->PermanentAddress = *Address;
 
-    (VOID) XENBUS_STORE(Printf,
-                        &Mac->StoreInterface,
-                        NULL,
-                        FrontendGetPrefix(Frontend),
-                        "mac/unicast/permanent",
-                        "%02x:%02x:%02x:%02x:%02x:%02x",
-                        Mac->PermanentAddress.Byte[0],
-                        Mac->PermanentAddress.Byte[1],
-                        Mac->PermanentAddress.Byte[2],
-                        Mac->PermanentAddress.Byte[3],
-                        Mac->PermanentAddress.Byte[4],
-                        Mac->PermanentAddress.Byte[5]);
-
     Info("%s: %02X:%02X:%02X:%02X:%02X:%02X\n",
          FrontendGetPrefix(Frontend),
          Mac->PermanentAddress.Byte[0],
@@ -155,19 +142,6 @@ __MacSetCurrentAddress(
 
     Mac->CurrentAddress = *Address;
 
-    (VOID) XENBUS_STORE(Printf,
-                        &Mac->StoreInterface,
-                        NULL,
-                        FrontendGetPrefix(Frontend),
-                        "mac/unicast/current",
-                        "%02x:%02x:%02x:%02x:%02x:%02x",
-                        Mac->CurrentAddress.Byte[0],
-                        Mac->CurrentAddress.Byte[1],
-                        Mac->CurrentAddress.Byte[2],
-                        Mac->CurrentAddress.Byte[3],
-                        Mac->CurrentAddress.Byte[4],
-                        Mac->CurrentAddress.Byte[5]);
-
     Info("%s: %02X:%02X:%02X:%02X:%02X:%02X\n",
          FrontendGetPrefix(Frontend),
          Mac->CurrentAddress.Byte[0],
@@ -261,7 +235,7 @@ fail1:
 }
 
 static NTSTATUS
-MacDumpMulticastList(
+MacDumpAddressTable(
     IN  PXENVIF_MAC     Mac
     )
 {
@@ -283,46 +257,48 @@ MacDumpMulticastList(
     if (!Mac->Connected)
         goto fail1;
 
-    if (Mac->MulticastCount != 0) {
-        Address = __MacAllocate(sizeof (ETHERNET_ADDRESS) *
-                                Mac->MulticastCount);
+    Count = 1 + Mac->MulticastCount;
+
+    Address = __MacAllocate(sizeof (ETHERNET_ADDRESS) *
+                            Count);
 
-        status = STATUS_NO_MEMORY;
-        if (Address == NULL)
-            goto fail2;
+    status = STATUS_NO_MEMORY;
+    if (Address == NULL)
+        goto fail2;
 
-        Count = 0;
-        for (ListEntry = Mac->MulticastList.Flink;
-             ListEntry != &Mac->MulticastList;
-             ListEntry = ListEntry->Flink) {
-            PXENVIF_MAC_MULTICAST   Multicast;
+    Index = 0;
 
-            Multicast = CONTAINING_RECORD(ListEntry,
-                                          XENVIF_MAC_MULTICAST,
-                                          ListEntry);
+    MacQueryCurrentAddress(Mac, &Address[Index]);
+    Index++;
 
-            Address[Count++] = Multicast->Address;
-        }
-        ASSERT3U(Count, ==, Mac->MulticastCount);
-    } else {
-        Address = NULL;
-        Count = 0;
+    for (ListEntry = Mac->MulticastList.Flink;
+         ListEntry != &Mac->MulticastList;
+         ListEntry = ListEntry->Flink) {
+        PXENVIF_MAC_MULTICAST   Multicast;
+
+        Multicast = CONTAINING_RECORD(ListEntry,
+                                      XENVIF_MAC_MULTICAST,
+                                      ListEntry);
+
+        Address[Index++] = Multicast->Address;
     }
 
+    ASSERT3U(Index, ==, Count);
+
     KeReleaseSpinLock(&Mac->Lock, Irql);
 
     (VOID) XENBUS_STORE(Remove,
                         &Mac->StoreInterface,
                         NULL,
                         FrontendGetPrefix(Frontend),
-                        "mac/multicast");
+                        "mac");
 
     for (Index = 0; Index < Count; Index++) {
-        CHAR    Node[sizeof ("mac/multicast/XX")];
+        CHAR    Node[sizeof ("mac/XX")];
 
         status = RtlStringCbPrintfA(Node,
                                     sizeof (Node),
-                                    "mac/multicast/%u",
+                                    "mac/%u",
                                     Index);
         ASSERT(NT_SUCCESS(status));
 
@@ -338,15 +314,6 @@ MacDumpMulticastList(
                             Address[Index].Byte[3],
                             Address[Index].Byte[4],
                             Address[Index].Byte[5]);
-
-        Trace("%s: %02x:%02x:%02x:%02x:%02x:%02x\n",
-              FrontendGetPrefix(Frontend),
-              Address[Index].Byte[0],
-              Address[Index].Byte[1],
-              Address[Index].Byte[2],
-              Address[Index].Byte[3],
-              Address[Index].Byte[4],
-              Address[Index].Byte[5]);
     }
 
     if (Address != NULL)
@@ -454,7 +421,7 @@ MacConnect(
     Mac->Connected = TRUE;
     KeReleaseSpinLockFromDpcLevel(&Mac->Lock);
 
-    (VOID) MacDumpMulticastList(Mac);
+    (VOID) MacDumpAddressTable(Mac);
 
     return STATUS_SUCCESS;
 
@@ -767,7 +734,7 @@ MacAddMulticastAddress(
     Mac->MulticastCount++;
     KeReleaseSpinLock(&Mac->Lock, Irql);
 
-    (VOID) MacDumpMulticastList(Mac);
+    (VOID) MacDumpAddressTable(Mac);
 
     Trace("%s: %02X:%02X:%02X:%02X:%02X:%02X\n",
           FrontendGetPrefix(Frontend),
@@ -827,7 +794,7 @@ found:
 
     KeReleaseSpinLock(&Mac->Lock, Irql);
 
-    (VOID) MacDumpMulticastList(Mac);
+    (VOID) MacDumpAddressTable(Mac);
 
     Trace("%s: %02X:%02X:%02X:%02X:%02X:%02X\n",
           FrontendGetPrefix(Frontend),
-- 
2.1.1


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

From win-pv-devel-bounces@lists.xenproject.org Tue Nov 24 14:04:51 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 24 Nov 2015 14:04:51 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1a1EDD-0007PX-Ka; Tue, 24 Nov 2015 14:04:51 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1a1EDB-0007OE-LI
	for win-pv-devel@lists.xenproject.org; Tue, 24 Nov 2015 14:04:49 +0000
Received: from [85.158.137.68] by server-8.bemta-3.messagelabs.com id
	2B/2A-31069-08E64565; Tue, 24 Nov 2015 14:04:48 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-6.tower-31.messagelabs.com!1448373887!6155038!1
X-Originating-IP: [209.85.160.176]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 778 invoked from network); 24 Nov 2015 14:04:47 -0000
Received: from mail-yk0-f176.google.com (HELO mail-yk0-f176.google.com)
	(209.85.160.176)
	by server-6.tower-31.messagelabs.com with AES128-GCM-SHA256 encrypted
	SMTP; 24 Nov 2015 14:04:47 -0000
Received: by ykdv3 with SMTP id v3so19163563ykd.0
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 24 Nov 2015 06:04:46 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id:in-reply-to:references;
	bh=VwkNvTRg8fCKQ2p6wOahrzhSRw+Yq/QRRQJvkcXwUHo=;
	b=0FNbDeG1HYgML+hkl11+c3toYOc9V5uP4l+mxWFmWs3vgCNFtTyZ9GoGOb3G55Z/ac
	aixhhEkCXa9AOUsUBAxNf22H5Wzid43lbBolYs+KQZKstDHefojwvKo1my7h+UtMjpL3
	yUH2+mW1bJRRZElySFIgRcye2Cv59VQrPf6MAwGUzkCB5xw9D320tPMguUpZOlIo/eaI
	lbZtSZE00CPaRnL5oTPo8Pp9bC/oEcvlK1FaN1NWNCwfSKVKfB8HH7cjoYzI9JdzEfn+
	NU341RRvAYo5q7xVL2sguiHzAu6dccutiD5HF9eTtaFJJbVFlu+MXETEtW83mX9gox0z
	Nfjw==
X-Received: by 10.129.72.204 with SMTP id v195mr27770204ywa.101.1448373886852; 
	Tue, 24 Nov 2015 06:04:46 -0800 (PST)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	s83sm15746851ywg.21.2015.11.24.06.04.45
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Tue, 24 Nov 2015 06:04:46 -0800 (PST)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Tue, 24 Nov 2015 14:04:31 +0000
Message-Id: <1448373871-2924-3-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
In-Reply-To: <1448373871-2924-1-git-send-email-paul.durrant@citrix.com>
References: <1448373871-2924-1-git-send-email-paul.durrant@citrix.com>
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH 2/2] Publish network information to xenstore
	using documented paths
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

My recent patch series to Xen added documented paths for advertising vif
hotplug capability and paths for publishing network interface information
(name, IP addresses, etc.).

This patch modifies XENVIF to make use of those new paths.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/xenvif/fdo.c      |   8 +++
 src/xenvif/frontend.c | 134 +++++++++++++++++++++++++++++++-------------------
 src/xenvif/mac.c      |  91 +++++++++++-----------------------
 3 files changed, 120 insertions(+), 113 deletions(-)

diff --git a/src/xenvif/fdo.c b/src/xenvif/fdo.c
index 479de93..0fc27ca 100644
--- a/src/xenvif/fdo.c
+++ b/src/xenvif/fdo.c
@@ -1318,6 +1318,14 @@ __FdoD3ToD0(
     if (!NT_SUCCESS(status))
         goto fail1;
 
+    (VOID) XENBUS_STORE(Printf,
+                        &Fdo->StoreInterface,
+                        NULL,
+                        "feature/hotplug",
+                        "vif",
+                        "%u",
+                        TRUE);
+
     Trace("<====\n");
 
     return STATUS_SUCCESS;
diff --git a/src/xenvif/frontend.c b/src/xenvif/frontend.c
index 69aed73..98efee5 100644
--- a/src/xenvif/frontend.c
+++ b/src/xenvif/frontend.c
@@ -87,6 +87,8 @@ struct _XENVIF_FRONTEND {
     ULONG                       StatisticsCount;
 
     PXENVIF_THREAD              MibThread;
+    CHAR                        Alias[IF_MAX_STRING_SIZE + 1];
+    NET_IFINDEX                 InterfaceIndex;
     PSOCKADDR_INET              AddressTable;
     ULONG                       AddressCount;
 };
@@ -458,15 +460,15 @@ fail1:
 }
 
 static NTSTATUS
-FrontendGetInterfaceIndex(
+FrontendProcessInterfaceTable(
     IN  PXENVIF_FRONTEND    Frontend,
-    IN  PMIB_IF_TABLE2      Table,
-    OUT PNET_IFINDEX        InterfaceIndex
+    IN  PMIB_IF_TABLE2      Table
     )
 {
     ETHERNET_ADDRESS        PermanentPhysicalAddress;
     ULONG                   Index;
     PMIB_IF_ROW2            Row;
+    NTSTATUS                status;
 
     MacQueryPermanentAddress(__FrontendGetMac(Frontend),
                              &PermanentPhysicalAddress);
@@ -494,12 +496,13 @@ FrontendGetInterfaceIndex(
     return STATUS_UNSUCCESSFUL;
 
 found:
-    *InterfaceIndex = Row->InterfaceIndex;
+    Frontend->InterfaceIndex = Row->InterfaceIndex;
 
-    Trace("[%u]: %ws (%ws)\n",
-          Row->InterfaceIndex,
-          Row->Alias,
-          Row->Description);
+    status = RtlStringCbPrintfA(Frontend->Alias,
+                                sizeof (Frontend->Alias),
+                                "%ws",
+                                Row->Alias);
+    ASSERT(NT_SUCCESS(status));
 
     return STATUS_SUCCESS;
 }
@@ -564,8 +567,7 @@ fail1:
 static NTSTATUS
 FrontendProcessAddressTable(
     IN  PXENVIF_FRONTEND            Frontend,
-    IN  PMIB_UNICASTIPADDRESS_TABLE Table,
-    IN  NET_IFINDEX                 InterfaceIndex
+    IN  PMIB_UNICASTIPADDRESS_TABLE Table
     )
 {
     ULONG                           Index;
@@ -583,7 +585,7 @@ FrontendProcessAddressTable(
     for (Index = 0; Index < Table->NumEntries; Index++) {
         PMIB_UNICASTIPADDRESS_ROW   Row = &Table->Table[Index];
 
-        if (Row->InterfaceIndex != InterfaceIndex)
+        if (Row->InterfaceIndex != Frontend->InterfaceIndex)
             continue;
 
         if (Row->Address.si_family != AF_INET &&
@@ -604,6 +606,43 @@ fail1:
 }
 
 static NTSTATUS
+FrontendDumpAlias(
+    IN  PXENVIF_FRONTEND    Frontend
+    )
+{
+    NTSTATUS                status;
+
+    status = XENBUS_STORE(Remove,
+                          &Frontend->StoreInterface,
+                          NULL,
+                          __FrontendGetPrefix(Frontend),
+                          "name");
+    if (!NT_SUCCESS(status) &&
+        status != STATUS_OBJECT_NAME_NOT_FOUND)
+        goto fail1;
+
+    status = XENBUS_STORE(Printf,
+                          &Frontend->StoreInterface,
+                          NULL,
+                          __FrontendGetPrefix(Frontend),
+                          "name",
+                          "%s",
+                          Frontend->Alias);
+    if (!NT_SUCCESS(status))
+        goto fail2;
+
+    return STATUS_SUCCESS;
+
+fail2:
+    Error("fail2\n");
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return status;
+}
+
+static NTSTATUS
 FrontendDumpAddressTable(
     IN  PXENVIF_FRONTEND        Frontend
     )
@@ -647,7 +686,7 @@ FrontendDumpAddressTable(
         switch (Frontend->AddressTable[Index].si_family) {
         case AF_INET: {
             IPV4_ADDRESS    Address;
-            CHAR            Node[sizeof ("ipv4/address/XXXXXXXX")];
+            CHAR            Node[sizeof ("ipv4/XXXXXXXX")];
 
             RtlCopyMemory(Address.Byte,
                           &Frontend->AddressTable[Index].Ipv4.sin_addr.s_addr,
@@ -655,7 +694,7 @@ FrontendDumpAddressTable(
 
             status = RtlStringCbPrintfA(Node,
                                         sizeof (Node),
-                                        "ipv4/address/%u",
+                                        "ipv4/%u",
                                         IpVersion4Count);
             ASSERT(NT_SUCCESS(status));
 
@@ -672,19 +711,12 @@ FrontendDumpAddressTable(
             if (!NT_SUCCESS(status))
                 goto fail4;
 
-            Trace("%s: %u.%u.%u.%u\n",
-                  __FrontendGetPrefix(Frontend),
-                  Address.Byte[0],
-                  Address.Byte[1],
-                  Address.Byte[2],
-                  Address.Byte[3]);
-
             IpVersion4Count++;
             break;
         }
         case AF_INET6: {
             IPV6_ADDRESS    Address;
-            CHAR            Node[sizeof ("ipv6/address/XXXXXXXX")];
+            CHAR            Node[sizeof ("ipv6/XXXXXXXX")];
 
             RtlCopyMemory(Address.Byte,
                           &Frontend->AddressTable[Index].Ipv6.sin6_addr.s6_addr,
@@ -692,7 +724,7 @@ FrontendDumpAddressTable(
 
             status = RtlStringCbPrintfA(Node,
                                         sizeof (Node),
-                                        "ipv6/address/%u",
+                                        "ipv6/%u",
                                         IpVersion6Count);
             ASSERT(NT_SUCCESS(status));
 
@@ -713,17 +745,6 @@ FrontendDumpAddressTable(
             if (!NT_SUCCESS(status))
                 goto fail4;
 
-            Trace("%s: %04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x\n",
-                  __FrontendGetPrefix(Frontend),
-                  NTOHS(Address.Word[0]),
-                  NTOHS(Address.Word[1]),
-                  NTOHS(Address.Word[2]),
-                  NTOHS(Address.Word[3]),
-                  NTOHS(Address.Word[4]),
-                  NTOHS(Address.Word[5]),
-                  NTOHS(Address.Word[6]),
-                  NTOHS(Address.Word[7]));
-
             IpVersion6Count++;
             break;
         }
@@ -842,7 +863,6 @@ FrontendMib(
 
     for (;;) { 
         PMIB_IF_TABLE2              IfTable;
-        NET_IFINDEX                 InterfaceIndex;
         PMIB_UNICASTIPADDRESS_TABLE UnicastIpAddressTable;
         KIRQL                       Irql;
 
@@ -867,9 +887,8 @@ FrontendMib(
         if (!NT_SUCCESS(status))
             goto loop;
 
-        status = FrontendGetInterfaceIndex(Frontend,
-                                           IfTable,
-                                           &InterfaceIndex);
+        status = FrontendProcessInterfaceTable(Frontend,
+                                               IfTable);
         if (!NT_SUCCESS(status))
             goto loop;
 
@@ -878,22 +897,19 @@ FrontendMib(
         if (!NT_SUCCESS(status))
             goto loop;
 
-        KeAcquireSpinLock(&Frontend->Lock, &Irql);
-
-        // It is not safe to use interfaces before this point
-        if (Frontend->State != FRONTEND_CONNECTED &&
-            Frontend->State != FRONTEND_ENABLED)
-            goto unlock;
-
         status = FrontendProcessAddressTable(Frontend,
-                                             UnicastIpAddressTable,
-                                             InterfaceIndex);
+                                             UnicastIpAddressTable);
         if (!NT_SUCCESS(status))
-            goto unlock;
+            goto loop;
 
-        (VOID) FrontendDumpAddressTable(Frontend);
+        KeAcquireSpinLock(&Frontend->Lock, &Irql);
+
+        if (Frontend->State == FRONTEND_CONNECTED ||
+            Frontend->State == FRONTEND_ENABLED) {
+            (VOID) FrontendDumpAlias(Frontend);
+            (VOID) FrontendDumpAddressTable(Frontend);
+        }
 
-unlock:
         KeReleaseSpinLock(&Frontend->Lock, Irql);
 
 loop:
@@ -1409,6 +1425,12 @@ FrontendClose(
 
     FrontendReleaseBackend(Frontend);
 
+    (VOID) XENBUS_STORE(Remove,
+                        &Frontend->StoreInterface,
+                        NULL,
+                        NULL,
+                        __FrontendGetPrefix(Frontend));
+
     XENBUS_STORE(Release, &Frontend->StoreInterface);
 
     Trace("<====\n");
@@ -2262,7 +2284,7 @@ FrontendInitialize(
     if (!NT_SUCCESS(status))
         goto fail2;
 
-    Length = sizeof ("data/vif/") + (ULONG)strlen(Name);
+    Length = sizeof ("attr/vif/") + (ULONG)strlen(Name);
     Prefix = __FrontendAllocate(Length);
 
     status = STATUS_NO_MEMORY;
@@ -2271,7 +2293,7 @@ FrontendInitialize(
 
     status = RtlStringCbPrintfA(Prefix, 
                                 Length,
-                                "data/vif/%s", 
+                                "attr/vif/%s",
                                 Name);
     if (!NT_SUCCESS(status))
         goto fail4;
@@ -2415,6 +2437,16 @@ FrontendTeardown(
     ThreadJoin(Frontend->MibThread);
     Frontend->MibThread = NULL;
 
+    if (Frontend->AddressCount != 0) {
+        __FrontendFree(Frontend->AddressTable);
+
+        Frontend->AddressTable = NULL;
+        Frontend->AddressCount = 0;
+    }
+
+    RtlZeroMemory(Frontend->Alias, sizeof (Frontend->Alias));
+    Frontend->InterfaceIndex = 0;
+
     ThreadAlert(Frontend->EjectThread);
     ThreadJoin(Frontend->EjectThread);
     Frontend->EjectThread = NULL;
diff --git a/src/xenvif/mac.c b/src/xenvif/mac.c
index 91467d6..0a771a4 100644
--- a/src/xenvif/mac.c
+++ b/src/xenvif/mac.c
@@ -101,19 +101,6 @@ __MacSetPermanentAddress(
 
     Mac->PermanentAddress = *Address;
 
-    (VOID) XENBUS_STORE(Printf,
-                        &Mac->StoreInterface,
-                        NULL,
-                        FrontendGetPrefix(Frontend),
-                        "mac/unicast/permanent",
-                        "%02x:%02x:%02x:%02x:%02x:%02x",
-                        Mac->PermanentAddress.Byte[0],
-                        Mac->PermanentAddress.Byte[1],
-                        Mac->PermanentAddress.Byte[2],
-                        Mac->PermanentAddress.Byte[3],
-                        Mac->PermanentAddress.Byte[4],
-                        Mac->PermanentAddress.Byte[5]);
-
     Info("%s: %02X:%02X:%02X:%02X:%02X:%02X\n",
          FrontendGetPrefix(Frontend),
          Mac->PermanentAddress.Byte[0],
@@ -155,19 +142,6 @@ __MacSetCurrentAddress(
 
     Mac->CurrentAddress = *Address;
 
-    (VOID) XENBUS_STORE(Printf,
-                        &Mac->StoreInterface,
-                        NULL,
-                        FrontendGetPrefix(Frontend),
-                        "mac/unicast/current",
-                        "%02x:%02x:%02x:%02x:%02x:%02x",
-                        Mac->CurrentAddress.Byte[0],
-                        Mac->CurrentAddress.Byte[1],
-                        Mac->CurrentAddress.Byte[2],
-                        Mac->CurrentAddress.Byte[3],
-                        Mac->CurrentAddress.Byte[4],
-                        Mac->CurrentAddress.Byte[5]);
-
     Info("%s: %02X:%02X:%02X:%02X:%02X:%02X\n",
          FrontendGetPrefix(Frontend),
          Mac->CurrentAddress.Byte[0],
@@ -261,7 +235,7 @@ fail1:
 }
 
 static NTSTATUS
-MacDumpMulticastList(
+MacDumpAddressTable(
     IN  PXENVIF_MAC     Mac
     )
 {
@@ -283,46 +257,48 @@ MacDumpMulticastList(
     if (!Mac->Connected)
         goto fail1;
 
-    if (Mac->MulticastCount != 0) {
-        Address = __MacAllocate(sizeof (ETHERNET_ADDRESS) *
-                                Mac->MulticastCount);
+    Count = 1 + Mac->MulticastCount;
+
+    Address = __MacAllocate(sizeof (ETHERNET_ADDRESS) *
+                            Count);
 
-        status = STATUS_NO_MEMORY;
-        if (Address == NULL)
-            goto fail2;
+    status = STATUS_NO_MEMORY;
+    if (Address == NULL)
+        goto fail2;
 
-        Count = 0;
-        for (ListEntry = Mac->MulticastList.Flink;
-             ListEntry != &Mac->MulticastList;
-             ListEntry = ListEntry->Flink) {
-            PXENVIF_MAC_MULTICAST   Multicast;
+    Index = 0;
 
-            Multicast = CONTAINING_RECORD(ListEntry,
-                                          XENVIF_MAC_MULTICAST,
-                                          ListEntry);
+    MacQueryCurrentAddress(Mac, &Address[Index]);
+    Index++;
 
-            Address[Count++] = Multicast->Address;
-        }
-        ASSERT3U(Count, ==, Mac->MulticastCount);
-    } else {
-        Address = NULL;
-        Count = 0;
+    for (ListEntry = Mac->MulticastList.Flink;
+         ListEntry != &Mac->MulticastList;
+         ListEntry = ListEntry->Flink) {
+        PXENVIF_MAC_MULTICAST   Multicast;
+
+        Multicast = CONTAINING_RECORD(ListEntry,
+                                      XENVIF_MAC_MULTICAST,
+                                      ListEntry);
+
+        Address[Index++] = Multicast->Address;
     }
 
+    ASSERT3U(Index, ==, Count);
+
     KeReleaseSpinLock(&Mac->Lock, Irql);
 
     (VOID) XENBUS_STORE(Remove,
                         &Mac->StoreInterface,
                         NULL,
                         FrontendGetPrefix(Frontend),
-                        "mac/multicast");
+                        "mac");
 
     for (Index = 0; Index < Count; Index++) {
-        CHAR    Node[sizeof ("mac/multicast/XX")];
+        CHAR    Node[sizeof ("mac/XX")];
 
         status = RtlStringCbPrintfA(Node,
                                     sizeof (Node),
-                                    "mac/multicast/%u",
+                                    "mac/%u",
                                     Index);
         ASSERT(NT_SUCCESS(status));
 
@@ -338,15 +314,6 @@ MacDumpMulticastList(
                             Address[Index].Byte[3],
                             Address[Index].Byte[4],
                             Address[Index].Byte[5]);
-
-        Trace("%s: %02x:%02x:%02x:%02x:%02x:%02x\n",
-              FrontendGetPrefix(Frontend),
-              Address[Index].Byte[0],
-              Address[Index].Byte[1],
-              Address[Index].Byte[2],
-              Address[Index].Byte[3],
-              Address[Index].Byte[4],
-              Address[Index].Byte[5]);
     }
 
     if (Address != NULL)
@@ -454,7 +421,7 @@ MacConnect(
     Mac->Connected = TRUE;
     KeReleaseSpinLockFromDpcLevel(&Mac->Lock);
 
-    (VOID) MacDumpMulticastList(Mac);
+    (VOID) MacDumpAddressTable(Mac);
 
     return STATUS_SUCCESS;
 
@@ -767,7 +734,7 @@ MacAddMulticastAddress(
     Mac->MulticastCount++;
     KeReleaseSpinLock(&Mac->Lock, Irql);
 
-    (VOID) MacDumpMulticastList(Mac);
+    (VOID) MacDumpAddressTable(Mac);
 
     Trace("%s: %02X:%02X:%02X:%02X:%02X:%02X\n",
           FrontendGetPrefix(Frontend),
@@ -827,7 +794,7 @@ found:
 
     KeReleaseSpinLock(&Mac->Lock, Irql);
 
-    (VOID) MacDumpMulticastList(Mac);
+    (VOID) MacDumpAddressTable(Mac);
 
     Trace("%s: %02X:%02X:%02X:%02X:%02X:%02X\n",
           FrontendGetPrefix(Frontend),
-- 
2.1.1


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

From win-pv-devel-bounces@lists.xenproject.org Tue Nov 24 14:31:17 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 24 Nov 2015 14:31:17 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1a1Ecl-0000hl-VI; Tue, 24 Nov 2015 14:31:15 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1a1Eck-0000hg-JO
	for win-pv-devel@lists.xenproject.org; Tue, 24 Nov 2015 14:31:14 +0000
Received: from [85.158.137.68] by server-15.bemta-3.messagelabs.com id
	5B/70-12946-1B474565; Tue, 24 Nov 2015 14:31:13 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-2.tower-31.messagelabs.com!1448375472!6163451!1
X-Originating-IP: [74.125.82.48]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 2982 invoked from network); 24 Nov 2015 14:31:12 -0000
Received: from mail-wm0-f48.google.com (HELO mail-wm0-f48.google.com)
	(74.125.82.48)
	by server-2.tower-31.messagelabs.com with AES128-GCM-SHA256 encrypted
	SMTP; 24 Nov 2015 14:31:12 -0000
Received: by wmuu63 with SMTP id u63so98929322wmu.0
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 24 Nov 2015 06:31:11 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=PVsYTaadkFlLboZ8J44l8k6EOAPdENA3o6QOY+Lcqoc=;
	b=P7uhOQUb6EnHx/dpNkjRw42U7CkdC8Pk1KFVpqdYiidt9S92Cpvj9qvuKQFq/Ys0oq
	m/lozsfkiObLEJM2GqrkRygWeqbVxhyuLitaUHmB8TP9JbkmzAb9kj5LmDpLCcDSAg9P
	MHm2pTZsKQFdCy7gpBHND8mDKUEHJ9o6A9fCj+2yTHhiOBNTZH2hT8da89V6hJdlaGR5
	QaJTauhyFQ1HFJndp+RVpgV/9o/GOurk/BS0C47akfqPiXsI/eNWuKSjJeAZSYRszXuY
	9ov7yDFuht0ZZlibOaEHeVJnlgnOBM91VS6nXwRJZJ95Qwvbiplo7BC/1U6ioog8NIck
	bL+A==
X-Received: by 10.194.250.39 with SMTP id yz7mr41489809wjc.92.1448375471818;
	Tue, 24 Nov 2015 06:31:11 -0800 (PST)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	u205sm18376030wmb.12.2015.11.24.06.31.11
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Tue, 24 Nov 2015 06:31:11 -0800 (PST)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Tue, 24 Nov 2015 14:31:00 +0000
Message-Id: <1448375460-9368-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>, Owen Smith <owen.smith@citrix.com>
Subject: [win-pv-devel] [PATCH] Add XENBUS_STORE and XENBUS_SUSPEND
	interfaces to exported set
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

To advertise driver distribution information to xenstore XENNET needs to
make use of the XENBUS_STORE and XENBUS_SUSPEND interfaces. As XENVIF is
XENNET's parent driver, it must export them. Adding them to the exported
set also requires update of the PDO revision number.

Signed-off-by: Owen Smith <owen.smith@citrix.com>

Import updated store_interface.h from XENBUS and revised commit comment.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 include/revision.h        | 11 +++++---
 include/store_interface.h | 68 ++++++++++++++++++++++++++++++++++++++++++++---
 src/coinst/coinst.c       |  2 +-
 src/xenvif/pdo.c          | 32 +++++++++++++++++++---
 4 files changed, 100 insertions(+), 13 deletions(-)

diff --git a/include/revision.h b/include/revision.h
index e2decd0..77d1405 100644
--- a/include/revision.h
+++ b/include/revision.h
@@ -35,10 +35,13 @@
 // Key:
 // C  - XENBUS_CACHE_INTERFACE
 // V  - XENVIF_VIF_INTERFACE
+// ST - XENBUS_STORE_INTERFACE
+// SU - XENBUS_SUSPEND_INTERFACE
 
-//                    REVISION   C   V
-#define DEFINE_REVISION_TABLE               \
-    DEFINE_REVISION(0x08000002,  1,  2),    \
-    DEFINE_REVISION(0x08000003,  1,  3)
+//                    REVISION   C   V   ST  SU
+#define DEFINE_REVISION_TABLE                       \
+    DEFINE_REVISION(0x08000002,  1,  2,  0,  0),    \
+    DEFINE_REVISION(0x08000003,  1,  3,  0,  0),    \
+    DEFINE_REVISION(0x08000004,  1,  3,  2,  1)
 
 #endif  // _REVISION_H
diff --git a/include/store_interface.h b/include/store_interface.h
index 5bcbba3..52f1a1d 100644
--- a/include/store_interface.h
+++ b/include/store_interface.h
@@ -50,6 +50,23 @@ typedef struct _XENBUS_STORE_TRANSACTION    XENBUS_STORE_TRANSACTION, *PXENBUS_S
 */
 typedef struct _XENBUS_STORE_WATCH          XENBUS_STORE_WATCH, *PXENBUS_STORE_WATCH;
 
+/*! \typedef XENBUS_STORE_PERMISSION_MASK
+    \brief Bitmask of XenStore key permissions
+*/
+typedef enum _XENBUS_STORE_PERMISSION_MASK {
+    XENBUS_STORE_PERM_NONE = 0,
+    XENBUS_STORE_PERM_READ = 1,
+    XENBUS_STORE_PERM_WRITE = 2,
+} XENBUS_STORE_PERMISSION_MASK;
+
+/*! \typedef XENBUS_STORE_PERMISSION
+    \brief XenStore key permissions entry for a single domain
+*/
+typedef struct _XENBUS_STORE_PERMISSION {
+    USHORT                          Domain;
+    XENBUS_STORE_PERMISSION_MASK    Mask;
+} XENBUS_STORE_PERMISSION, *PXENBUS_STORE_PERMISSION;
+
 /*! \typedef XENBUS_STORE_ACQUIRE
     \brief Acquire a reference to the STORE interface
 
@@ -247,10 +264,36 @@ typedef VOID
     IN  PINTERFACE  Interface
     );
 
+/*! \typedef XENBUS_STORE_PERMISSIONS_SET
+    \brief Set permissions for a XenStore key
+
+    \param Interface The interface header
+    \param Transaction The transaction handle (NULL if this is not
+    part of a transaction)
+    \param Prefix An optional prefix for the \a Node
+    \param Node The concatenation of the \a Prefix and this value specifies
+    the XenStore key to set permissions of
+    \param Permissions An array of permissions to set
+    \param NumberPermissions Number of elements in the \a Permissions array
+*/
+typedef NTSTATUS
+(*XENBUS_STORE_PERMISSIONS_SET)(
+    IN  PINTERFACE                  Interface,
+    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
+    IN  PCHAR                       Prefix OPTIONAL,
+    IN  PCHAR                       Node,
+    IN  PXENBUS_STORE_PERMISSION    Permissions,
+    IN  ULONG                       NumberPermissions
+    );
+
 // {86824C3B-D34E-4753-B281-2F1E3AD214D7}
 DEFINE_GUID(GUID_XENBUS_STORE_INTERFACE, 
 0x86824c3b, 0xd34e, 0x4753, 0xb2, 0x81, 0x2f, 0x1e, 0x3a, 0xd2, 0x14, 0xd7);
 
+/*! \struct _XENBUS_STORE_INTERFACE_V1
+    \brief STORE interface version 1
+    \ingroup interfaces
+*/
 struct _XENBUS_STORE_INTERFACE_V1 {
     INTERFACE                       Interface;
     XENBUS_STORE_ACQUIRE            StoreAcquire;
@@ -267,11 +310,28 @@ struct _XENBUS_STORE_INTERFACE_V1 {
     XENBUS_STORE_POLL               StorePoll;
 };
 
-/*! \struct _XENBUS_STORE_INTERFACE_V1
-    \brief STORE interface version 1
+/*! \struct _XENBUS_STORE_INTERFACE_V2
+    \brief STORE interface version 2
     \ingroup interfaces
 */
-typedef struct _XENBUS_STORE_INTERFACE_V1 XENBUS_STORE_INTERFACE, *PXENBUS_STORE_INTERFACE;
+struct _XENBUS_STORE_INTERFACE_V2 {
+    INTERFACE                       Interface;
+    XENBUS_STORE_ACQUIRE            StoreAcquire;
+    XENBUS_STORE_RELEASE            StoreRelease;
+    XENBUS_STORE_FREE               StoreFree;
+    XENBUS_STORE_READ               StoreRead;
+    XENBUS_STORE_PRINTF             StorePrintf;
+    XENBUS_STORE_PERMISSIONS_SET    StorePermissionsSet;
+    XENBUS_STORE_REMOVE             StoreRemove;
+    XENBUS_STORE_DIRECTORY          StoreDirectory;
+    XENBUS_STORE_TRANSACTION_START  StoreTransactionStart;
+    XENBUS_STORE_TRANSACTION_END    StoreTransactionEnd;
+    XENBUS_STORE_WATCH_ADD          StoreWatchAdd;
+    XENBUS_STORE_WATCH_REMOVE       StoreWatchRemove;
+    XENBUS_STORE_POLL               StorePoll;
+};
+
+typedef struct _XENBUS_STORE_INTERFACE_V2 XENBUS_STORE_INTERFACE, *PXENBUS_STORE_INTERFACE;
 
 /*! \def XENBUS_STORE
     \brief Macro at assist in method invocation
@@ -282,7 +342,7 @@ typedef struct _XENBUS_STORE_INTERFACE_V1 XENBUS_STORE_INTERFACE, *PXENBUS_STORE
 #endif  // _WINDLL
 
 #define XENBUS_STORE_INTERFACE_VERSION_MIN  1
-#define XENBUS_STORE_INTERFACE_VERSION_MAX  1
+#define XENBUS_STORE_INTERFACE_VERSION_MAX  2
 
 #endif  // _XENBUS_STORE_INTERFACE_H
 
diff --git a/src/coinst/coinst.c b/src/coinst/coinst.c
index 156a6a3..0d792f7 100644
--- a/src/coinst/coinst.c
+++ b/src/coinst/coinst.c
@@ -717,7 +717,7 @@ fail1:
     return FALSE;
 }
 
-#define DEFINE_REVISION(_N, _C, _V) \
+#define DEFINE_REVISION(_N, _C, _V, _ST, _SU) \
     (_N)
 
 static DWORD    DeviceRevision[] = {
diff --git a/src/xenvif/pdo.c b/src/xenvif/pdo.c
index 53bed7a..07cf23a 100644
--- a/src/xenvif/pdo.c
+++ b/src/xenvif/pdo.c
@@ -534,10 +534,12 @@ typedef struct _XENVIF_PDO_REVISION {
     ULONG   Number;
     ULONG   CacheInterfaceVersion;
     ULONG   VifInterfaceVersion;
+    ULONG   StoreInterfaceVersion;
+    ULONG   SuspendInterfaceVersion;
 } XENVIF_PDO_REVISION, *PXENVIF_PDO_REVISION;
 
-#define DEFINE_REVISION(_N, _C, _V) \
-    { (_N), (_C), (_V) }
+#define DEFINE_REVISION(_N, _C, _V, _ST, _SU) \
+    { (_N), (_C), (_V), (_ST), (_SU) }
 
 static XENVIF_PDO_REVISION PdoRevision[] = {
     DEFINE_REVISION_TABLE
@@ -567,14 +569,34 @@ PdoDumpRevisions(
         ASSERT(IMPLY(Index == ARRAYSIZE(PdoRevision) - 1,
                      Revision->VifInterfaceVersion == XENVIF_VIF_INTERFACE_VERSION_MAX));
 
+        if (Revision->StoreInterfaceVersion == 0) { // not-supported
+            ASSERT(Index != ARRAYSIZE(PdoRevision) - 1);
+            goto show_revision;
+        }
+
+        ASSERT3U(Revision->StoreInterfaceVersion, >=, XENBUS_STORE_INTERFACE_VERSION_MIN);
+        ASSERT3U(Revision->StoreInterfaceVersion, <=, XENBUS_STORE_INTERFACE_VERSION_MAX);
+        ASSERT(IMPLY(Index == ARRAYSIZE(PdoRevision) - 1,
+                     Revision->StoreInterfaceVersion == XENBUS_STORE_INTERFACE_VERSION_MAX));
+
+        ASSERT3U(Revision->SuspendInterfaceVersion, >=, XENBUS_SUSPEND_INTERFACE_VERSION_MIN);
+        ASSERT3U(Revision->SuspendInterfaceVersion, <=, XENBUS_SUSPEND_INTERFACE_VERSION_MAX);
+        ASSERT(IMPLY(Index == ARRAYSIZE(PdoRevision) - 1,
+                     Revision->SuspendInterfaceVersion == XENBUS_SUSPEND_INTERFACE_VERSION_MAX));
+
+show_revision:
         ASSERT3U(Revision->Number >> 24, ==, MAJOR_VERSION);
 
         Info("%08X -> "
              "CACHE v%u "
-             "VIF v%u\n",
+             "VIF v%u "
+             "STORE v%u "
+             "SUSPEND v%u\n",
              Revision->Number,
              Revision->CacheInterfaceVersion,
-             Revision->VifInterfaceVersion);
+             Revision->VifInterfaceVersion,
+             Revision->StoreInterfaceVersion,
+             Revision->SuspendInterfaceVersion);
     }
 }
 
@@ -1628,6 +1650,8 @@ struct _INTERFACE_ENTRY PdoInterfaceTable[] = {
     { &GUID_BUS_INTERFACE_STANDARD, "BUS_INTERFACE", PdoQueryBusInterface },
     { &GUID_XENVIF_VIF_INTERFACE, "VIF_INTERFACE", PdoQueryVifInterface },
     { &GUID_XENBUS_CACHE_INTERFACE, "CACHE_INTERFACE", PdoDelegateIrp },
+    { &GUID_XENBUS_STORE_INTERFACE, "STORE_INTERFACE", PdoDelegateIrp },
+    { &GUID_XENBUS_SUSPEND_INTERFACE, "SUSPEND_INTERFACE", PdoDelegateIrp },
     { NULL, NULL, NULL }
 };
 
-- 
2.1.1


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

From win-pv-devel-bounces@lists.xenproject.org Tue Nov 24 14:31:17 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 24 Nov 2015 14:31:17 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1a1Ecl-0000hl-VI; Tue, 24 Nov 2015 14:31:15 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1a1Eck-0000hg-JO
	for win-pv-devel@lists.xenproject.org; Tue, 24 Nov 2015 14:31:14 +0000
Received: from [85.158.137.68] by server-15.bemta-3.messagelabs.com id
	5B/70-12946-1B474565; Tue, 24 Nov 2015 14:31:13 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-2.tower-31.messagelabs.com!1448375472!6163451!1
X-Originating-IP: [74.125.82.48]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 2982 invoked from network); 24 Nov 2015 14:31:12 -0000
Received: from mail-wm0-f48.google.com (HELO mail-wm0-f48.google.com)
	(74.125.82.48)
	by server-2.tower-31.messagelabs.com with AES128-GCM-SHA256 encrypted
	SMTP; 24 Nov 2015 14:31:12 -0000
Received: by wmuu63 with SMTP id u63so98929322wmu.0
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 24 Nov 2015 06:31:11 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=PVsYTaadkFlLboZ8J44l8k6EOAPdENA3o6QOY+Lcqoc=;
	b=P7uhOQUb6EnHx/dpNkjRw42U7CkdC8Pk1KFVpqdYiidt9S92Cpvj9qvuKQFq/Ys0oq
	m/lozsfkiObLEJM2GqrkRygWeqbVxhyuLitaUHmB8TP9JbkmzAb9kj5LmDpLCcDSAg9P
	MHm2pTZsKQFdCy7gpBHND8mDKUEHJ9o6A9fCj+2yTHhiOBNTZH2hT8da89V6hJdlaGR5
	QaJTauhyFQ1HFJndp+RVpgV/9o/GOurk/BS0C47akfqPiXsI/eNWuKSjJeAZSYRszXuY
	9ov7yDFuht0ZZlibOaEHeVJnlgnOBM91VS6nXwRJZJ95Qwvbiplo7BC/1U6ioog8NIck
	bL+A==
X-Received: by 10.194.250.39 with SMTP id yz7mr41489809wjc.92.1448375471818;
	Tue, 24 Nov 2015 06:31:11 -0800 (PST)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	u205sm18376030wmb.12.2015.11.24.06.31.11
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Tue, 24 Nov 2015 06:31:11 -0800 (PST)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Tue, 24 Nov 2015 14:31:00 +0000
Message-Id: <1448375460-9368-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>, Owen Smith <owen.smith@citrix.com>
Subject: [win-pv-devel] [PATCH] Add XENBUS_STORE and XENBUS_SUSPEND
	interfaces to exported set
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

To advertise driver distribution information to xenstore XENNET needs to
make use of the XENBUS_STORE and XENBUS_SUSPEND interfaces. As XENVIF is
XENNET's parent driver, it must export them. Adding them to the exported
set also requires update of the PDO revision number.

Signed-off-by: Owen Smith <owen.smith@citrix.com>

Import updated store_interface.h from XENBUS and revised commit comment.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 include/revision.h        | 11 +++++---
 include/store_interface.h | 68 ++++++++++++++++++++++++++++++++++++++++++++---
 src/coinst/coinst.c       |  2 +-
 src/xenvif/pdo.c          | 32 +++++++++++++++++++---
 4 files changed, 100 insertions(+), 13 deletions(-)

diff --git a/include/revision.h b/include/revision.h
index e2decd0..77d1405 100644
--- a/include/revision.h
+++ b/include/revision.h
@@ -35,10 +35,13 @@
 // Key:
 // C  - XENBUS_CACHE_INTERFACE
 // V  - XENVIF_VIF_INTERFACE
+// ST - XENBUS_STORE_INTERFACE
+// SU - XENBUS_SUSPEND_INTERFACE
 
-//                    REVISION   C   V
-#define DEFINE_REVISION_TABLE               \
-    DEFINE_REVISION(0x08000002,  1,  2),    \
-    DEFINE_REVISION(0x08000003,  1,  3)
+//                    REVISION   C   V   ST  SU
+#define DEFINE_REVISION_TABLE                       \
+    DEFINE_REVISION(0x08000002,  1,  2,  0,  0),    \
+    DEFINE_REVISION(0x08000003,  1,  3,  0,  0),    \
+    DEFINE_REVISION(0x08000004,  1,  3,  2,  1)
 
 #endif  // _REVISION_H
diff --git a/include/store_interface.h b/include/store_interface.h
index 5bcbba3..52f1a1d 100644
--- a/include/store_interface.h
+++ b/include/store_interface.h
@@ -50,6 +50,23 @@ typedef struct _XENBUS_STORE_TRANSACTION    XENBUS_STORE_TRANSACTION, *PXENBUS_S
 */
 typedef struct _XENBUS_STORE_WATCH          XENBUS_STORE_WATCH, *PXENBUS_STORE_WATCH;
 
+/*! \typedef XENBUS_STORE_PERMISSION_MASK
+    \brief Bitmask of XenStore key permissions
+*/
+typedef enum _XENBUS_STORE_PERMISSION_MASK {
+    XENBUS_STORE_PERM_NONE = 0,
+    XENBUS_STORE_PERM_READ = 1,
+    XENBUS_STORE_PERM_WRITE = 2,
+} XENBUS_STORE_PERMISSION_MASK;
+
+/*! \typedef XENBUS_STORE_PERMISSION
+    \brief XenStore key permissions entry for a single domain
+*/
+typedef struct _XENBUS_STORE_PERMISSION {
+    USHORT                          Domain;
+    XENBUS_STORE_PERMISSION_MASK    Mask;
+} XENBUS_STORE_PERMISSION, *PXENBUS_STORE_PERMISSION;
+
 /*! \typedef XENBUS_STORE_ACQUIRE
     \brief Acquire a reference to the STORE interface
 
@@ -247,10 +264,36 @@ typedef VOID
     IN  PINTERFACE  Interface
     );
 
+/*! \typedef XENBUS_STORE_PERMISSIONS_SET
+    \brief Set permissions for a XenStore key
+
+    \param Interface The interface header
+    \param Transaction The transaction handle (NULL if this is not
+    part of a transaction)
+    \param Prefix An optional prefix for the \a Node
+    \param Node The concatenation of the \a Prefix and this value specifies
+    the XenStore key to set permissions of
+    \param Permissions An array of permissions to set
+    \param NumberPermissions Number of elements in the \a Permissions array
+*/
+typedef NTSTATUS
+(*XENBUS_STORE_PERMISSIONS_SET)(
+    IN  PINTERFACE                  Interface,
+    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
+    IN  PCHAR                       Prefix OPTIONAL,
+    IN  PCHAR                       Node,
+    IN  PXENBUS_STORE_PERMISSION    Permissions,
+    IN  ULONG                       NumberPermissions
+    );
+
 // {86824C3B-D34E-4753-B281-2F1E3AD214D7}
 DEFINE_GUID(GUID_XENBUS_STORE_INTERFACE, 
 0x86824c3b, 0xd34e, 0x4753, 0xb2, 0x81, 0x2f, 0x1e, 0x3a, 0xd2, 0x14, 0xd7);
 
+/*! \struct _XENBUS_STORE_INTERFACE_V1
+    \brief STORE interface version 1
+    \ingroup interfaces
+*/
 struct _XENBUS_STORE_INTERFACE_V1 {
     INTERFACE                       Interface;
     XENBUS_STORE_ACQUIRE            StoreAcquire;
@@ -267,11 +310,28 @@ struct _XENBUS_STORE_INTERFACE_V1 {
     XENBUS_STORE_POLL               StorePoll;
 };
 
-/*! \struct _XENBUS_STORE_INTERFACE_V1
-    \brief STORE interface version 1
+/*! \struct _XENBUS_STORE_INTERFACE_V2
+    \brief STORE interface version 2
     \ingroup interfaces
 */
-typedef struct _XENBUS_STORE_INTERFACE_V1 XENBUS_STORE_INTERFACE, *PXENBUS_STORE_INTERFACE;
+struct _XENBUS_STORE_INTERFACE_V2 {
+    INTERFACE                       Interface;
+    XENBUS_STORE_ACQUIRE            StoreAcquire;
+    XENBUS_STORE_RELEASE            StoreRelease;
+    XENBUS_STORE_FREE               StoreFree;
+    XENBUS_STORE_READ               StoreRead;
+    XENBUS_STORE_PRINTF             StorePrintf;
+    XENBUS_STORE_PERMISSIONS_SET    StorePermissionsSet;
+    XENBUS_STORE_REMOVE             StoreRemove;
+    XENBUS_STORE_DIRECTORY          StoreDirectory;
+    XENBUS_STORE_TRANSACTION_START  StoreTransactionStart;
+    XENBUS_STORE_TRANSACTION_END    StoreTransactionEnd;
+    XENBUS_STORE_WATCH_ADD          StoreWatchAdd;
+    XENBUS_STORE_WATCH_REMOVE       StoreWatchRemove;
+    XENBUS_STORE_POLL               StorePoll;
+};
+
+typedef struct _XENBUS_STORE_INTERFACE_V2 XENBUS_STORE_INTERFACE, *PXENBUS_STORE_INTERFACE;
 
 /*! \def XENBUS_STORE
     \brief Macro at assist in method invocation
@@ -282,7 +342,7 @@ typedef struct _XENBUS_STORE_INTERFACE_V1 XENBUS_STORE_INTERFACE, *PXENBUS_STORE
 #endif  // _WINDLL
 
 #define XENBUS_STORE_INTERFACE_VERSION_MIN  1
-#define XENBUS_STORE_INTERFACE_VERSION_MAX  1
+#define XENBUS_STORE_INTERFACE_VERSION_MAX  2
 
 #endif  // _XENBUS_STORE_INTERFACE_H
 
diff --git a/src/coinst/coinst.c b/src/coinst/coinst.c
index 156a6a3..0d792f7 100644
--- a/src/coinst/coinst.c
+++ b/src/coinst/coinst.c
@@ -717,7 +717,7 @@ fail1:
     return FALSE;
 }
 
-#define DEFINE_REVISION(_N, _C, _V) \
+#define DEFINE_REVISION(_N, _C, _V, _ST, _SU) \
     (_N)
 
 static DWORD    DeviceRevision[] = {
diff --git a/src/xenvif/pdo.c b/src/xenvif/pdo.c
index 53bed7a..07cf23a 100644
--- a/src/xenvif/pdo.c
+++ b/src/xenvif/pdo.c
@@ -534,10 +534,12 @@ typedef struct _XENVIF_PDO_REVISION {
     ULONG   Number;
     ULONG   CacheInterfaceVersion;
     ULONG   VifInterfaceVersion;
+    ULONG   StoreInterfaceVersion;
+    ULONG   SuspendInterfaceVersion;
 } XENVIF_PDO_REVISION, *PXENVIF_PDO_REVISION;
 
-#define DEFINE_REVISION(_N, _C, _V) \
-    { (_N), (_C), (_V) }
+#define DEFINE_REVISION(_N, _C, _V, _ST, _SU) \
+    { (_N), (_C), (_V), (_ST), (_SU) }
 
 static XENVIF_PDO_REVISION PdoRevision[] = {
     DEFINE_REVISION_TABLE
@@ -567,14 +569,34 @@ PdoDumpRevisions(
         ASSERT(IMPLY(Index == ARRAYSIZE(PdoRevision) - 1,
                      Revision->VifInterfaceVersion == XENVIF_VIF_INTERFACE_VERSION_MAX));
 
+        if (Revision->StoreInterfaceVersion == 0) { // not-supported
+            ASSERT(Index != ARRAYSIZE(PdoRevision) - 1);
+            goto show_revision;
+        }
+
+        ASSERT3U(Revision->StoreInterfaceVersion, >=, XENBUS_STORE_INTERFACE_VERSION_MIN);
+        ASSERT3U(Revision->StoreInterfaceVersion, <=, XENBUS_STORE_INTERFACE_VERSION_MAX);
+        ASSERT(IMPLY(Index == ARRAYSIZE(PdoRevision) - 1,
+                     Revision->StoreInterfaceVersion == XENBUS_STORE_INTERFACE_VERSION_MAX));
+
+        ASSERT3U(Revision->SuspendInterfaceVersion, >=, XENBUS_SUSPEND_INTERFACE_VERSION_MIN);
+        ASSERT3U(Revision->SuspendInterfaceVersion, <=, XENBUS_SUSPEND_INTERFACE_VERSION_MAX);
+        ASSERT(IMPLY(Index == ARRAYSIZE(PdoRevision) - 1,
+                     Revision->SuspendInterfaceVersion == XENBUS_SUSPEND_INTERFACE_VERSION_MAX));
+
+show_revision:
         ASSERT3U(Revision->Number >> 24, ==, MAJOR_VERSION);
 
         Info("%08X -> "
              "CACHE v%u "
-             "VIF v%u\n",
+             "VIF v%u "
+             "STORE v%u "
+             "SUSPEND v%u\n",
              Revision->Number,
              Revision->CacheInterfaceVersion,
-             Revision->VifInterfaceVersion);
+             Revision->VifInterfaceVersion,
+             Revision->StoreInterfaceVersion,
+             Revision->SuspendInterfaceVersion);
     }
 }
 
@@ -1628,6 +1650,8 @@ struct _INTERFACE_ENTRY PdoInterfaceTable[] = {
     { &GUID_BUS_INTERFACE_STANDARD, "BUS_INTERFACE", PdoQueryBusInterface },
     { &GUID_XENVIF_VIF_INTERFACE, "VIF_INTERFACE", PdoQueryVifInterface },
     { &GUID_XENBUS_CACHE_INTERFACE, "CACHE_INTERFACE", PdoDelegateIrp },
+    { &GUID_XENBUS_STORE_INTERFACE, "STORE_INTERFACE", PdoDelegateIrp },
+    { &GUID_XENBUS_SUSPEND_INTERFACE, "SUSPEND_INTERFACE", PdoDelegateIrp },
     { NULL, NULL, NULL }
 };
 
-- 
2.1.1


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

From win-pv-devel-bounces@lists.xenproject.org Tue Nov 24 15:46:07 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 24 Nov 2015 15:46:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1a1FnB-0005u9-Sr; Tue, 24 Nov 2015 15:46:05 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1a1Fn8-0005u4-Qz
	for win-pv-devel@lists.xenproject.org; Tue, 24 Nov 2015 15:46:03 +0000
Received: from [193.109.254.147] by server-9.bemta-14.messagelabs.com id
	61/DD-13475-93684565; Tue, 24 Nov 2015 15:46:01 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-10.tower-27.messagelabs.com!1448379960!5916664!1
X-Originating-IP: [74.125.82.50]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 26381 invoked from network); 24 Nov 2015 15:46:00 -0000
Received: from mail-wm0-f50.google.com (HELO mail-wm0-f50.google.com)
	(74.125.82.50)
	by server-10.tower-27.messagelabs.com with AES128-GCM-SHA256 encrypted
	SMTP; 24 Nov 2015 15:46:00 -0000
Received: by wmww144 with SMTP id w144so31940521wmw.0
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 24 Nov 2015 07:46:00 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=mCmh/EDTECUdVdYdgLUwN2Q6mcJHTHQav8j35xSgxes=;
	b=Yn6V6xLSLXwzQ7kGUEWf2fmKUzSc7S1u2bO1zU4RxVDLExrr9/n30k8n0EcTr2r5N9
	pP0Bt8pGU4Qmi7hzDrRk3WwUjjGAPVRcCYr/aYXsvCyD5RUf09RxKPTWtVe6H/NzrltW
	eJwFwa/Irptnhy42RIOxG1Z4Wq4FHk98HMtCOq9MOzH76NeNqCa+Vl3BWcNKRlGajDIZ
	c2and5KuWbMsluvlbE8qiCRtgzaRQzrtpC2EEhX+HAd0N5tBL3AWd/adJ1d3jy97NkMi
	Ql+FoUzNbMXoOZigNn3JHGeDhdFKGu/VyTO+qWJxjp+X4dUS1KMYhs3357GRf/doBlz9
	QUyg==
X-Received: by 10.28.60.84 with SMTP id j81mr25154070wma.15.1448379959974;
	Tue, 24 Nov 2015 07:45:59 -0800 (PST)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	d10sm18887631wje.14.2015.11.24.07.45.59
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Tue, 24 Nov 2015 07:45:59 -0800 (PST)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Tue, 24 Nov 2015 15:45:48 +0000
Message-Id: <1448379948-920-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH] Publish distribution information to xenstore
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

My recent patch series to Xen added a documented path and format for
publishing information about PV driver distributions to xenstore.

This patch adds code to populate the documented path (should it exist)
with information about the XENNET driver package.

Suggested-by: Owen Smith <owen.smith@citrix.com>
Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/xennet.inf               |   6 +-
 src/xennet/adapter.c         | 532 ++++++++++++++++++++++++++++++++++++++++---
 vs2012/xennet/xennet.vcxproj |   2 +-
 vs2013/xennet/xennet.vcxproj |  40 +---
 4 files changed, 501 insertions(+), 79 deletions(-)

diff --git a/src/xennet.inf b/src/xennet.inf
index 5aa8c6c..6c4c457 100644
--- a/src/xennet.inf
+++ b/src/xennet.inf
@@ -61,9 +61,9 @@ xennet_coinst_@MAJOR_VERSION@_@MINOR_VERSION@_@MICRO_VERSION@_@BUILD_NUMBER@.dll
 ; DisplayName		Section		DeviceID
 ; -----------		-------		--------
 
-%XenNetDesc%		=XenNet_Inst,	XENVIF\VEN_@VENDOR_PREFIX@@VENDOR_DEVICE_ID@&DEV_NET&REV_08000002
-%XenNetDesc%		=XenNet_Inst,	XENVIF\VEN_@VENDOR_PREFIX@0001&DEV_NET&REV_08000002
-%XenNetDesc%		=XenNet_Inst,	XENVIF\VEN_@VENDOR_PREFIX@0002&DEV_NET&REV_08000002
+%XenNetDesc%		=XenNet_Inst,	XENVIF\VEN_@VENDOR_PREFIX@@VENDOR_DEVICE_ID@&DEV_NET&REV_08000004
+%XenNetDesc%		=XenNet_Inst,	XENVIF\VEN_@VENDOR_PREFIX@0001&DEV_NET&REV_08000004
+%XenNetDesc%		=XenNet_Inst,	XENVIF\VEN_@VENDOR_PREFIX@0002&DEV_NET&REV_08000004
 
 [XenNet_Inst] 
 Characteristics=0x84
diff --git a/src/xennet/adapter.c b/src/xennet/adapter.c
index 1e88754..54823d8 100644
--- a/src/xennet/adapter.c
+++ b/src/xennet/adapter.c
@@ -32,18 +32,24 @@
 #define INITGUID 1
 
 #include <ndis.h>
+#include <ntstrsafe.h>
 #include <stdlib.h>
 #include <version.h>
 
 #include <vif_interface.h>
 #include <cache_interface.h>
+#include <store_interface.h>
+#include <suspend_interface.h>
 
 #include "adapter.h"
 #include "transmitter.h"
 #include "receiver.h"
+#include "util.h"
 #include "dbg_print.h"
 #include "assert.h"
 
+#define MAXNAMELEN  128
+
 typedef struct _PROPERTIES {
     int ipv4_csum;
     int tcpv4_csum;
@@ -59,23 +65,29 @@ typedef struct _PROPERTIES {
 } PROPERTIES, *PPROPERTIES;
 
 struct _XENNET_ADAPTER {
-    XENVIF_VIF_INTERFACE    VifInterface;
-    XENBUS_CACHE_INTERFACE  CacheInterface;
+    XENVIF_VIF_INTERFACE        VifInterface;
+    XENBUS_CACHE_INTERFACE      CacheInterface;
+    XENBUS_STORE_INTERFACE      StoreInterface;
+    XENBUS_SUSPEND_INTERFACE    SuspendInterface;
+
+    PXENBUS_SUSPEND_CALLBACK    SuspendCallbackLate;
 
-    ULONG                   MaximumFrameSize;
-    ULONG                   CurrentLookahead;
+    ULONG                       MaximumFrameSize;
+    ULONG                       CurrentLookahead;
 
-    NDIS_HANDLE             NdisAdapterHandle;
-    NDIS_HANDLE             NdisDmaHandle;
-    NDIS_PNP_CAPABILITIES   Capabilities;
-    NDIS_OFFLOAD            Offload;
-    PROPERTIES              Properties;
+    NDIS_HANDLE                 NdisAdapterHandle;
+    NDIS_HANDLE                 NdisDmaHandle;
+    NDIS_PNP_CAPABILITIES       Capabilities;
+    NDIS_OFFLOAD                Offload;
+    PROPERTIES                  Properties;
 
-    PXENNET_RECEIVER        Receiver;
-    PXENNET_TRANSMITTER     Transmitter;
-    BOOLEAN                 Enabled;
+    PXENNET_RECEIVER            Receiver;
+    PXENNET_TRANSMITTER         Transmitter;
+    BOOLEAN                     Enabled;
 };
 
+static LONG AdapterCount;
+
 static NDIS_OID XennetSupportedOids[] =
 {
     OID_GEN_SUPPORTED_LIST,
@@ -2245,6 +2257,396 @@ fail1:
     return NdisStatus;
 }
 
+static FORCEINLINE PVOID
+__AdapterAllocate(
+    IN  ULONG   Length
+    )
+{
+    return __AllocateNonPagedPoolWithTag(Length, ADAPTER_POOL_TAG);
+}
+
+static FORCEINLINE VOID
+__AdapterFree(
+    IN  PVOID   Buffer
+    )
+{
+    __FreePoolWithTag(Buffer, ADAPTER_POOL_TAG);
+}
+
+static FORCEINLINE PANSI_STRING
+__AdapterMultiSzToUpcaseAnsi(
+    IN  PCHAR       Buffer
+    )
+{
+    PANSI_STRING    Ansi;
+    LONG            Index;
+    LONG            Count;
+    NTSTATUS        status;
+
+    Index = 0;
+    Count = 0;
+    for (;;) {
+        if (Buffer[Index] == '\0') {
+            Count++;
+            Index++;
+
+            // Check for double NUL
+            if (Buffer[Index] == '\0')
+                break;
+        } else {
+            Buffer[Index] = (CHAR)toupper(Buffer[Index]);
+            Index++;
+        }
+    }
+
+    Ansi = __AdapterAllocate(sizeof (ANSI_STRING) * (Count + 1));
+
+    status = STATUS_NO_MEMORY;
+    if (Ansi == NULL)
+        goto fail1;
+
+    for (Index = 0; Index < Count; Index++) {
+        ULONG   Length;
+
+        Length = (ULONG)strlen(Buffer);
+        Ansi[Index].MaximumLength = (USHORT)(Length + 1);
+        Ansi[Index].Buffer = __AdapterAllocate(Ansi[Index].MaximumLength);
+
+        status = STATUS_NO_MEMORY;
+        if (Ansi[Index].Buffer == NULL)
+            goto fail2;
+
+        RtlCopyMemory(Ansi[Index].Buffer, Buffer, Length);
+        Ansi[Index].Length = (USHORT)Length;
+
+        Buffer += Length + 1;
+    }
+
+    return Ansi;
+
+fail2:
+    Error("fail2\n");
+
+    while (--Index >= 0)
+        __AdapterFree(Ansi[Index].Buffer);
+
+    __AdapterFree(Ansi);
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return NULL;
+}
+
+static FORCEINLINE VOID
+__AdapterFreeAnsi(
+    IN  PANSI_STRING    Ansi
+    )
+{
+    ULONG               Index;
+
+    for (Index = 0; Ansi[Index].Buffer != NULL; Index++)
+        __AdapterFree(Ansi[Index].Buffer);
+
+    __AdapterFree(Ansi);
+}
+
+static FORCEINLINE BOOLEAN
+__AdapterMatchDistribution(
+    IN  PXENNET_ADAPTER Adapter,
+    IN  PCHAR           Buffer
+    )
+{
+    PCHAR               Vendor;
+    PCHAR               Product;
+    PCHAR               Context;
+    const CHAR          *Text;
+    BOOLEAN             Match;
+    ULONG               Index;
+    NTSTATUS            status;
+
+    UNREFERENCED_PARAMETER(Adapter);
+
+    status = STATUS_INVALID_PARAMETER;
+
+    Vendor = __strtok_r(Buffer, " ", &Context);
+    if (Vendor == NULL)
+        goto fail1;
+
+    Product = __strtok_r(NULL, " ", &Context);
+    if (Product == NULL)
+        goto fail2;
+
+    Match = TRUE;
+
+    Text = VENDOR_NAME_STR;
+
+    for (Index = 0; Text[Index] != 0; Index++) {
+        if (!isalnum(Text[Index])) {
+            if (Vendor[Index] != '_') {
+                Match = FALSE;
+                break;
+            }
+        } else {
+            if (Vendor[Index] != Text[Index]) {
+                Match = FALSE;
+                break;
+            }
+        }
+    }
+
+    Text = "XENNET";
+
+    if (_stricmp(Product, Text) != 0)
+        Match = FALSE;
+
+    return Match;
+
+fail2:
+    Error("fail2\n");
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return FALSE;
+}
+
+static FORCEINLINE VOID
+__AdapterClearDistribution(
+    IN  PXENNET_ADAPTER Adapter
+    )
+{
+    PCHAR               Buffer;
+    PANSI_STRING        Distributions;
+    ULONG               Index;
+    NTSTATUS            status;
+
+    Trace("====>\n");
+
+    status = XENBUS_STORE(Directory,
+                          &Adapter->StoreInterface,
+                          NULL,
+                          NULL,
+                          "drivers",
+                          &Buffer);
+    if (NT_SUCCESS(status)) {
+        Distributions = __AdapterMultiSzToUpcaseAnsi(Buffer);
+
+        XENBUS_STORE(Free,
+                     &Adapter->StoreInterface,
+                     Buffer);
+    } else {
+        Distributions = NULL;
+    }
+
+    if (Distributions == NULL)
+        goto done;
+
+    for (Index = 0; Distributions[Index].Buffer != NULL; Index++) {
+        PANSI_STRING    Distribution = &Distributions[Index];
+
+        status = XENBUS_STORE(Read,
+                              &Adapter->StoreInterface,
+                              NULL,
+                              "drivers",
+                              Distribution->Buffer,
+                              &Buffer);
+        if (!NT_SUCCESS(status))
+            continue;
+
+        if (__AdapterMatchDistribution(Adapter, Buffer))
+            (VOID) XENBUS_STORE(Remove,
+                                &Adapter->StoreInterface,
+                                NULL,
+                                "drivers",
+                                Distribution->Buffer);
+
+        XENBUS_STORE(Free,
+                     &Adapter->StoreInterface,
+                     Buffer);
+    }
+
+    __AdapterFreeAnsi(Distributions);
+
+done:
+    Trace("<====\n");
+}
+
+#define MAXIMUM_INDEX   255
+
+static FORCEINLINE NTSTATUS
+__AdapterSetDistribution(
+    IN  PXENNET_ADAPTER Adapter
+    )
+{
+    ULONG               Index;
+    CHAR                Distribution[MAXNAMELEN];
+    CHAR                Vendor[MAXNAMELEN];
+    const CHAR          *Product;
+    NTSTATUS            status;
+
+    Trace("====>\n");
+
+    Index = 0;
+    while (Index <= MAXIMUM_INDEX) {
+        PCHAR   Buffer;
+
+        status = RtlStringCbPrintfA(Distribution,
+                                    MAXNAMELEN,
+                                    "%u",
+                                    Index);
+        ASSERT(NT_SUCCESS(status));
+
+        status = XENBUS_STORE(Read,
+                              &Adapter->StoreInterface,
+                              NULL,
+                              "drivers",
+                              Distribution,
+                              &Buffer);
+        if (!NT_SUCCESS(status)) {
+            if (status == STATUS_OBJECT_NAME_NOT_FOUND)
+                goto update;
+
+            goto fail1;
+        }
+
+        XENBUS_STORE(Free,
+                     &Adapter->StoreInterface,
+                     Buffer);
+
+        Index++;
+    }
+
+    status = STATUS_UNSUCCESSFUL;
+    goto fail2;
+
+update:
+    status = RtlStringCbPrintfA(Vendor,
+                                MAXNAMELEN,
+                                "%s",
+                                VENDOR_NAME_STR);
+    ASSERT(NT_SUCCESS(status));
+
+    for (Index  = 0; Vendor[Index] != '\0'; Index++)
+        if (!isalnum(Vendor[Index]))
+            Vendor[Index] = '_';
+
+    Product = "XENNET";
+
+#if DBG
+#define ATTRIBUTES   "(DEBUG)"
+#else
+#define ATTRIBUTES   ""
+#endif
+
+    (VOID) XENBUS_STORE(Printf,
+                        &Adapter->StoreInterface,
+                        NULL,
+                        "drivers",
+                        Distribution,
+                        "%s %s %u.%u.%u %s",
+                        Vendor,
+                        Product,
+                        MAJOR_VERSION,
+                        MINOR_VERSION,
+                        MICRO_VERSION,
+                        ATTRIBUTES
+                        );
+
+#undef  ATTRIBUTES
+
+    Trace("<====\n");
+    return STATUS_SUCCESS;
+
+fail2:
+    Error("fail2\n");
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return status;
+}
+
+static DECLSPEC_NOINLINE VOID
+AdapterSuspendCallbackLate(
+    IN  PVOID       Argument
+    )
+{
+    PXENNET_ADAPTER Adapter = Argument;
+
+    (VOID) __AdapterSetDistribution(Adapter);
+}
+
+static NTSTATUS
+AdapterSetDistribution(
+    IN  PXENNET_ADAPTER Adapter
+    )
+{
+    LONG                Count;
+    NTSTATUS            status;
+
+    Trace("====>\n");
+
+    Count = InterlockedIncrement(&AdapterCount);
+    ASSERT(Count != 0);
+
+    if (Count != 1)
+        goto done;
+
+    status = __AdapterSetDistribution(Adapter);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    status = XENBUS_SUSPEND(Register,
+                            &Adapter->SuspendInterface,
+                            SUSPEND_CALLBACK_LATE,
+                            AdapterSuspendCallbackLate,
+                            Adapter,
+                            &Adapter->SuspendCallbackLate);
+    if (!NT_SUCCESS(status))
+        goto fail2;
+
+done:
+    Trace("<====\n");
+    return STATUS_SUCCESS;
+
+fail2:
+    Error("fail2\n");
+
+    __AdapterClearDistribution(Adapter);
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return status;
+}
+
+static VOID
+AdapterClearDistribution(
+    IN  PXENNET_ADAPTER Adapter
+    )
+{
+    LONG                Count;
+
+    Trace("====>\n");
+
+    ASSERT(AdapterCount != 0);
+    Count = InterlockedDecrement(&AdapterCount);
+
+    if (Count != 0)
+        goto done;
+
+    XENBUS_SUSPEND(Deregister,
+                   &Adapter->SuspendInterface,
+                   Adapter->SuspendCallbackLate);
+    Adapter->SuspendCallbackLate = NULL;
+
+    __AdapterClearDistribution(Adapter);
+
+done:
+    Trace("<====\n");
+}
+
 NDIS_STATUS
 AdapterInitialize(
     IN  NDIS_HANDLE         Handle,
@@ -2256,9 +2658,7 @@ AdapterInitialize(
     PDEVICE_OBJECT          DeviceObject;
     NDIS_SG_DMA_DESCRIPTION Dma;
 
-    *Adapter = ExAllocatePoolWithTag(NonPagedPool,
-                                     sizeof(XENNET_ADAPTER),
-                                     ADAPTER_POOL_TAG);
+    *Adapter = __AdapterAllocate(sizeof (XENNET_ADAPTER));
 
     ndisStatus = NDIS_STATUS_RESOURCES;
     if (*Adapter == NULL)
@@ -2293,45 +2693,75 @@ AdapterInitialize(
     if (!NT_SUCCESS(status))
         goto fail3;
 
+    status = __QueryInterface(DeviceObject,
+                              &GUID_XENBUS_STORE_INTERFACE,
+                              XENBUS_STORE_INTERFACE_VERSION_MAX,
+                              (PINTERFACE)&(*Adapter)->StoreInterface,
+                              sizeof(XENBUS_STORE_INTERFACE),
+                              FALSE);
+    if (!NT_SUCCESS(status))
+        goto fail4;
+
+    status = __QueryInterface(DeviceObject,
+                              &GUID_XENBUS_SUSPEND_INTERFACE,
+                              XENBUS_SUSPEND_INTERFACE_VERSION_MAX,
+                              (PINTERFACE)&(*Adapter)->SuspendInterface,
+                              sizeof(XENBUS_SUSPEND_INTERFACE),
+                              FALSE);
+    if (!NT_SUCCESS(status))
+        goto fail5;
+
     status = XENVIF_VIF(Acquire,
                         &(*Adapter)->VifInterface);
     if (!NT_SUCCESS(status))
-        goto fail4;
+        goto fail6;
 
     status = XENBUS_CACHE(Acquire,
                           &(*Adapter)->CacheInterface);
     if (!NT_SUCCESS(status))
-        goto fail5;
+        goto fail7;
+
+    status = XENBUS_STORE(Acquire,
+                          &(*Adapter)->StoreInterface);
+    if (!NT_SUCCESS(status))
+        goto fail8;
+
+    status = XENBUS_SUSPEND(Acquire,
+                            &(*Adapter)->SuspendInterface);
+    if (!NT_SUCCESS(status))
+        goto fail9;
+
+    (VOID) AdapterSetDistribution(*Adapter);
 
     (*Adapter)->NdisAdapterHandle = Handle;
 
     ndisStatus = TransmitterInitialize(*Adapter, &(*Adapter)->Transmitter);
     if (ndisStatus != NDIS_STATUS_SUCCESS)
-        goto fail6;
+        goto fail10;
 
     ndisStatus = ReceiverInitialize(*Adapter, &(*Adapter)->Receiver);
     if (ndisStatus != NDIS_STATUS_SUCCESS)
-        goto fail7;
+        goto fail11;
 
     ndisStatus = AdapterGetAdvancedSettings(*Adapter);
     if (ndisStatus != NDIS_STATUS_SUCCESS)
-        goto fail8;
+        goto fail12;
 
     ndisStatus = AdapterSetRegistrationAttributes(*Adapter);
     if (ndisStatus != NDIS_STATUS_SUCCESS)
-        goto fail9;
+        goto fail13;
 
     ndisStatus = AdapterSetGeneralAttributes(*Adapter);
     if (ndisStatus != NDIS_STATUS_SUCCESS)
-        goto fail10;
+        goto fail14;
 
     ndisStatus = AdapterSetOffloadAttributes(*Adapter);
     if (ndisStatus != NDIS_STATUS_SUCCESS)
-        goto fail11;
+        goto fail15;
 
     ndisStatus = AdapterSetHeaderDataSplitAttributes(*Adapter);
     if (ndisStatus != NDIS_STATUS_SUCCESS)
-        goto fail12;
+        goto fail16;
 
     RtlZeroMemory(&Dma, sizeof(NDIS_SG_DMA_DESCRIPTION));
     Dma.Header.Type = NDIS_OBJECT_TYPE_SG_DMA_DESCRIPTION;
@@ -2350,36 +2780,58 @@ AdapterInitialize(
 
     ndisStatus = AdapterEnable(*Adapter);
     if (ndisStatus != NDIS_STATUS_SUCCESS)
-        goto fail13;
+        goto fail17;
 
     return NDIS_STATUS_SUCCESS;
 
-fail13:
+fail17:
     if ((*Adapter)->NdisDmaHandle)
         NdisMDeregisterScatterGatherDma((*Adapter)->NdisDmaHandle);
     (*Adapter)->NdisDmaHandle = NULL;
+
+fail16:
+fail15:
+fail14:
+fail13:
 fail12:
-fail11:
-fail10:
-fail9:
-fail8:
     ReceiverTeardown((*Adapter)->Receiver);
     (*Adapter)->Receiver = NULL;
-fail7:
+fail11:
+
     TransmitterTeardown((*Adapter)->Transmitter);
     (*Adapter)->Transmitter = NULL;
-fail6:
+
+fail10:
     (*Adapter)->NdisAdapterHandle = NULL;
 
+    AdapterClearDistribution(*Adapter);
+
+    XENBUS_SUSPEND(Release, &(*Adapter)->SuspendInterface);
+
+fail9:
+    XENBUS_STORE(Release, &(*Adapter)->StoreInterface);
+
+fail8:
     XENBUS_CACHE(Release, &(*Adapter)->CacheInterface);
-fail5:
+
+fail7:
     XENVIF_VIF(Release, &(*Adapter)->VifInterface);
+
+fail6:
+    RtlZeroMemory(&(*Adapter)->SuspendInterface, sizeof(XENBUS_SUSPEND_INTERFACE));
+
+fail5:
+    RtlZeroMemory(&(*Adapter)->StoreInterface, sizeof(XENBUS_STORE_INTERFACE));
+
 fail4:
     RtlZeroMemory(&(*Adapter)->CacheInterface, sizeof(XENBUS_CACHE_INTERFACE));
+
 fail3:
     RtlZeroMemory(&(*Adapter)->VifInterface, sizeof(XENVIF_VIF_INTERFACE));
+
 fail2:
-    ExFreePoolWithTag(*Adapter, ADAPTER_POOL_TAG);
+    __AdapterFree(*Adapter);
+
 fail1:
     return ndisStatus;
 }
@@ -2399,11 +2851,17 @@ AdapterTeardown(
         NdisMDeregisterScatterGatherDma(Adapter->NdisDmaHandle);
     Adapter->NdisDmaHandle = NULL;
 
-    XENBUS_CACHE(Release, &Adapter->CacheInterface);
-    RtlZeroMemory(&Adapter->CacheInterface, sizeof(XENBUS_CACHE_INTERFACE));
+    AdapterClearDistribution(Adapter);
 
+    XENBUS_SUSPEND(Release, &Adapter->SuspendInterface);
+    XENBUS_STORE(Release, &Adapter->StoreInterface);
+    XENBUS_CACHE(Release, &Adapter->CacheInterface);
     XENVIF_VIF(Release, &Adapter->VifInterface);
+
+    RtlZeroMemory(&Adapter->SuspendInterface, sizeof(XENBUS_SUSPEND_INTERFACE));
+    RtlZeroMemory(&Adapter->StoreInterface, sizeof(XENBUS_STORE_INTERFACE));
+    RtlZeroMemory(&Adapter->CacheInterface, sizeof(XENBUS_CACHE_INTERFACE));
     RtlZeroMemory(&Adapter->VifInterface, sizeof(XENVIF_VIF_INTERFACE));
 
-    ExFreePoolWithTag(Adapter, ADAPTER_POOL_TAG);
+    __AdapterFree(Adapter);
 }
diff --git a/vs2012/xennet/xennet.vcxproj b/vs2012/xennet/xennet.vcxproj
index d69391e..3ca7407 100644
--- a/vs2012/xennet/xennet.vcxproj
+++ b/vs2012/xennet/xennet.vcxproj
@@ -40,7 +40,7 @@
 		</ClCompile>
 		<Link>
 			<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
-			<AdditionalDependencies>$(DDK_LIB_PATH)\ndis.lib;%(AdditionalDependencies)</AdditionalDependencies>
+			<AdditionalDependencies>$(DDK_LIB_PATH)\ndis.lib;$(DDK_LIB_PATH)/libcntpr.lib;%(AdditionalDependencies)</AdditionalDependencies>
 			<EnableCOMDATFolding>false</EnableCOMDATFolding>
 		</Link>
 		<Inf>
diff --git a/vs2013/xennet/xennet.vcxproj b/vs2013/xennet/xennet.vcxproj
index c50bb44..0064a92 100644
--- a/vs2013/xennet/xennet.vcxproj
+++ b/vs2013/xennet/xennet.vcxproj
@@ -11,43 +11,7 @@
     <DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Windows 8 Release|x64'">
-    <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Windows 8 Release|Win32'">
-    <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Windows Vista Debug|x64'">
-    <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Windows Vista Debug|Win32'">
-    <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Windows Vista Release|x64'">
-    <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Windows Vista Release|Win32'">
-    <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Windows 7 Release|x64'">
-    <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Windows 7 Release|Win32'">
-    <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Windows8 Debug|x64'">
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Windows 7 Debug|Win32'">
-    <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Windows 7 Debug|x64'">
-    <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Windows 8 Debug|Win32'">
-    <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Windows 8 Debug|x64'">
+  <PropertyGroup Label="Configuration">
     <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Label="Globals">
@@ -72,7 +36,7 @@
     </ClCompile>
     <Link>
       <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
-      <AdditionalDependencies>$(DDK_LIB_PATH)\ndis.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalDependencies>$(DDK_LIB_PATH)/libcntpr.lib;$(DDK_LIB_PATH)\ndis.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <EnableCOMDATFolding>false</EnableCOMDATFolding>
     </Link>
     <Inf>
-- 
2.1.1


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

From win-pv-devel-bounces@lists.xenproject.org Tue Nov 24 15:46:07 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 24 Nov 2015 15:46:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1a1FnB-0005u9-Sr; Tue, 24 Nov 2015 15:46:05 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1a1Fn8-0005u4-Qz
	for win-pv-devel@lists.xenproject.org; Tue, 24 Nov 2015 15:46:03 +0000
Received: from [193.109.254.147] by server-9.bemta-14.messagelabs.com id
	61/DD-13475-93684565; Tue, 24 Nov 2015 15:46:01 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-10.tower-27.messagelabs.com!1448379960!5916664!1
X-Originating-IP: [74.125.82.50]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 26381 invoked from network); 24 Nov 2015 15:46:00 -0000
Received: from mail-wm0-f50.google.com (HELO mail-wm0-f50.google.com)
	(74.125.82.50)
	by server-10.tower-27.messagelabs.com with AES128-GCM-SHA256 encrypted
	SMTP; 24 Nov 2015 15:46:00 -0000
Received: by wmww144 with SMTP id w144so31940521wmw.0
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 24 Nov 2015 07:46:00 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=mCmh/EDTECUdVdYdgLUwN2Q6mcJHTHQav8j35xSgxes=;
	b=Yn6V6xLSLXwzQ7kGUEWf2fmKUzSc7S1u2bO1zU4RxVDLExrr9/n30k8n0EcTr2r5N9
	pP0Bt8pGU4Qmi7hzDrRk3WwUjjGAPVRcCYr/aYXsvCyD5RUf09RxKPTWtVe6H/NzrltW
	eJwFwa/Irptnhy42RIOxG1Z4Wq4FHk98HMtCOq9MOzH76NeNqCa+Vl3BWcNKRlGajDIZ
	c2and5KuWbMsluvlbE8qiCRtgzaRQzrtpC2EEhX+HAd0N5tBL3AWd/adJ1d3jy97NkMi
	Ql+FoUzNbMXoOZigNn3JHGeDhdFKGu/VyTO+qWJxjp+X4dUS1KMYhs3357GRf/doBlz9
	QUyg==
X-Received: by 10.28.60.84 with SMTP id j81mr25154070wma.15.1448379959974;
	Tue, 24 Nov 2015 07:45:59 -0800 (PST)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	d10sm18887631wje.14.2015.11.24.07.45.59
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Tue, 24 Nov 2015 07:45:59 -0800 (PST)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Tue, 24 Nov 2015 15:45:48 +0000
Message-Id: <1448379948-920-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH] Publish distribution information to xenstore
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

My recent patch series to Xen added a documented path and format for
publishing information about PV driver distributions to xenstore.

This patch adds code to populate the documented path (should it exist)
with information about the XENNET driver package.

Suggested-by: Owen Smith <owen.smith@citrix.com>
Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/xennet.inf               |   6 +-
 src/xennet/adapter.c         | 532 ++++++++++++++++++++++++++++++++++++++++---
 vs2012/xennet/xennet.vcxproj |   2 +-
 vs2013/xennet/xennet.vcxproj |  40 +---
 4 files changed, 501 insertions(+), 79 deletions(-)

diff --git a/src/xennet.inf b/src/xennet.inf
index 5aa8c6c..6c4c457 100644
--- a/src/xennet.inf
+++ b/src/xennet.inf
@@ -61,9 +61,9 @@ xennet_coinst_@MAJOR_VERSION@_@MINOR_VERSION@_@MICRO_VERSION@_@BUILD_NUMBER@.dll
 ; DisplayName		Section		DeviceID
 ; -----------		-------		--------
 
-%XenNetDesc%		=XenNet_Inst,	XENVIF\VEN_@VENDOR_PREFIX@@VENDOR_DEVICE_ID@&DEV_NET&REV_08000002
-%XenNetDesc%		=XenNet_Inst,	XENVIF\VEN_@VENDOR_PREFIX@0001&DEV_NET&REV_08000002
-%XenNetDesc%		=XenNet_Inst,	XENVIF\VEN_@VENDOR_PREFIX@0002&DEV_NET&REV_08000002
+%XenNetDesc%		=XenNet_Inst,	XENVIF\VEN_@VENDOR_PREFIX@@VENDOR_DEVICE_ID@&DEV_NET&REV_08000004
+%XenNetDesc%		=XenNet_Inst,	XENVIF\VEN_@VENDOR_PREFIX@0001&DEV_NET&REV_08000004
+%XenNetDesc%		=XenNet_Inst,	XENVIF\VEN_@VENDOR_PREFIX@0002&DEV_NET&REV_08000004
 
 [XenNet_Inst] 
 Characteristics=0x84
diff --git a/src/xennet/adapter.c b/src/xennet/adapter.c
index 1e88754..54823d8 100644
--- a/src/xennet/adapter.c
+++ b/src/xennet/adapter.c
@@ -32,18 +32,24 @@
 #define INITGUID 1
 
 #include <ndis.h>
+#include <ntstrsafe.h>
 #include <stdlib.h>
 #include <version.h>
 
 #include <vif_interface.h>
 #include <cache_interface.h>
+#include <store_interface.h>
+#include <suspend_interface.h>
 
 #include "adapter.h"
 #include "transmitter.h"
 #include "receiver.h"
+#include "util.h"
 #include "dbg_print.h"
 #include "assert.h"
 
+#define MAXNAMELEN  128
+
 typedef struct _PROPERTIES {
     int ipv4_csum;
     int tcpv4_csum;
@@ -59,23 +65,29 @@ typedef struct _PROPERTIES {
 } PROPERTIES, *PPROPERTIES;
 
 struct _XENNET_ADAPTER {
-    XENVIF_VIF_INTERFACE    VifInterface;
-    XENBUS_CACHE_INTERFACE  CacheInterface;
+    XENVIF_VIF_INTERFACE        VifInterface;
+    XENBUS_CACHE_INTERFACE      CacheInterface;
+    XENBUS_STORE_INTERFACE      StoreInterface;
+    XENBUS_SUSPEND_INTERFACE    SuspendInterface;
+
+    PXENBUS_SUSPEND_CALLBACK    SuspendCallbackLate;
 
-    ULONG                   MaximumFrameSize;
-    ULONG                   CurrentLookahead;
+    ULONG                       MaximumFrameSize;
+    ULONG                       CurrentLookahead;
 
-    NDIS_HANDLE             NdisAdapterHandle;
-    NDIS_HANDLE             NdisDmaHandle;
-    NDIS_PNP_CAPABILITIES   Capabilities;
-    NDIS_OFFLOAD            Offload;
-    PROPERTIES              Properties;
+    NDIS_HANDLE                 NdisAdapterHandle;
+    NDIS_HANDLE                 NdisDmaHandle;
+    NDIS_PNP_CAPABILITIES       Capabilities;
+    NDIS_OFFLOAD                Offload;
+    PROPERTIES                  Properties;
 
-    PXENNET_RECEIVER        Receiver;
-    PXENNET_TRANSMITTER     Transmitter;
-    BOOLEAN                 Enabled;
+    PXENNET_RECEIVER            Receiver;
+    PXENNET_TRANSMITTER         Transmitter;
+    BOOLEAN                     Enabled;
 };
 
+static LONG AdapterCount;
+
 static NDIS_OID XennetSupportedOids[] =
 {
     OID_GEN_SUPPORTED_LIST,
@@ -2245,6 +2257,396 @@ fail1:
     return NdisStatus;
 }
 
+static FORCEINLINE PVOID
+__AdapterAllocate(
+    IN  ULONG   Length
+    )
+{
+    return __AllocateNonPagedPoolWithTag(Length, ADAPTER_POOL_TAG);
+}
+
+static FORCEINLINE VOID
+__AdapterFree(
+    IN  PVOID   Buffer
+    )
+{
+    __FreePoolWithTag(Buffer, ADAPTER_POOL_TAG);
+}
+
+static FORCEINLINE PANSI_STRING
+__AdapterMultiSzToUpcaseAnsi(
+    IN  PCHAR       Buffer
+    )
+{
+    PANSI_STRING    Ansi;
+    LONG            Index;
+    LONG            Count;
+    NTSTATUS        status;
+
+    Index = 0;
+    Count = 0;
+    for (;;) {
+        if (Buffer[Index] == '\0') {
+            Count++;
+            Index++;
+
+            // Check for double NUL
+            if (Buffer[Index] == '\0')
+                break;
+        } else {
+            Buffer[Index] = (CHAR)toupper(Buffer[Index]);
+            Index++;
+        }
+    }
+
+    Ansi = __AdapterAllocate(sizeof (ANSI_STRING) * (Count + 1));
+
+    status = STATUS_NO_MEMORY;
+    if (Ansi == NULL)
+        goto fail1;
+
+    for (Index = 0; Index < Count; Index++) {
+        ULONG   Length;
+
+        Length = (ULONG)strlen(Buffer);
+        Ansi[Index].MaximumLength = (USHORT)(Length + 1);
+        Ansi[Index].Buffer = __AdapterAllocate(Ansi[Index].MaximumLength);
+
+        status = STATUS_NO_MEMORY;
+        if (Ansi[Index].Buffer == NULL)
+            goto fail2;
+
+        RtlCopyMemory(Ansi[Index].Buffer, Buffer, Length);
+        Ansi[Index].Length = (USHORT)Length;
+
+        Buffer += Length + 1;
+    }
+
+    return Ansi;
+
+fail2:
+    Error("fail2\n");
+
+    while (--Index >= 0)
+        __AdapterFree(Ansi[Index].Buffer);
+
+    __AdapterFree(Ansi);
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return NULL;
+}
+
+static FORCEINLINE VOID
+__AdapterFreeAnsi(
+    IN  PANSI_STRING    Ansi
+    )
+{
+    ULONG               Index;
+
+    for (Index = 0; Ansi[Index].Buffer != NULL; Index++)
+        __AdapterFree(Ansi[Index].Buffer);
+
+    __AdapterFree(Ansi);
+}
+
+static FORCEINLINE BOOLEAN
+__AdapterMatchDistribution(
+    IN  PXENNET_ADAPTER Adapter,
+    IN  PCHAR           Buffer
+    )
+{
+    PCHAR               Vendor;
+    PCHAR               Product;
+    PCHAR               Context;
+    const CHAR          *Text;
+    BOOLEAN             Match;
+    ULONG               Index;
+    NTSTATUS            status;
+
+    UNREFERENCED_PARAMETER(Adapter);
+
+    status = STATUS_INVALID_PARAMETER;
+
+    Vendor = __strtok_r(Buffer, " ", &Context);
+    if (Vendor == NULL)
+        goto fail1;
+
+    Product = __strtok_r(NULL, " ", &Context);
+    if (Product == NULL)
+        goto fail2;
+
+    Match = TRUE;
+
+    Text = VENDOR_NAME_STR;
+
+    for (Index = 0; Text[Index] != 0; Index++) {
+        if (!isalnum(Text[Index])) {
+            if (Vendor[Index] != '_') {
+                Match = FALSE;
+                break;
+            }
+        } else {
+            if (Vendor[Index] != Text[Index]) {
+                Match = FALSE;
+                break;
+            }
+        }
+    }
+
+    Text = "XENNET";
+
+    if (_stricmp(Product, Text) != 0)
+        Match = FALSE;
+
+    return Match;
+
+fail2:
+    Error("fail2\n");
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return FALSE;
+}
+
+static FORCEINLINE VOID
+__AdapterClearDistribution(
+    IN  PXENNET_ADAPTER Adapter
+    )
+{
+    PCHAR               Buffer;
+    PANSI_STRING        Distributions;
+    ULONG               Index;
+    NTSTATUS            status;
+
+    Trace("====>\n");
+
+    status = XENBUS_STORE(Directory,
+                          &Adapter->StoreInterface,
+                          NULL,
+                          NULL,
+                          "drivers",
+                          &Buffer);
+    if (NT_SUCCESS(status)) {
+        Distributions = __AdapterMultiSzToUpcaseAnsi(Buffer);
+
+        XENBUS_STORE(Free,
+                     &Adapter->StoreInterface,
+                     Buffer);
+    } else {
+        Distributions = NULL;
+    }
+
+    if (Distributions == NULL)
+        goto done;
+
+    for (Index = 0; Distributions[Index].Buffer != NULL; Index++) {
+        PANSI_STRING    Distribution = &Distributions[Index];
+
+        status = XENBUS_STORE(Read,
+                              &Adapter->StoreInterface,
+                              NULL,
+                              "drivers",
+                              Distribution->Buffer,
+                              &Buffer);
+        if (!NT_SUCCESS(status))
+            continue;
+
+        if (__AdapterMatchDistribution(Adapter, Buffer))
+            (VOID) XENBUS_STORE(Remove,
+                                &Adapter->StoreInterface,
+                                NULL,
+                                "drivers",
+                                Distribution->Buffer);
+
+        XENBUS_STORE(Free,
+                     &Adapter->StoreInterface,
+                     Buffer);
+    }
+
+    __AdapterFreeAnsi(Distributions);
+
+done:
+    Trace("<====\n");
+}
+
+#define MAXIMUM_INDEX   255
+
+static FORCEINLINE NTSTATUS
+__AdapterSetDistribution(
+    IN  PXENNET_ADAPTER Adapter
+    )
+{
+    ULONG               Index;
+    CHAR                Distribution[MAXNAMELEN];
+    CHAR                Vendor[MAXNAMELEN];
+    const CHAR          *Product;
+    NTSTATUS            status;
+
+    Trace("====>\n");
+
+    Index = 0;
+    while (Index <= MAXIMUM_INDEX) {
+        PCHAR   Buffer;
+
+        status = RtlStringCbPrintfA(Distribution,
+                                    MAXNAMELEN,
+                                    "%u",
+                                    Index);
+        ASSERT(NT_SUCCESS(status));
+
+        status = XENBUS_STORE(Read,
+                              &Adapter->StoreInterface,
+                              NULL,
+                              "drivers",
+                              Distribution,
+                              &Buffer);
+        if (!NT_SUCCESS(status)) {
+            if (status == STATUS_OBJECT_NAME_NOT_FOUND)
+                goto update;
+
+            goto fail1;
+        }
+
+        XENBUS_STORE(Free,
+                     &Adapter->StoreInterface,
+                     Buffer);
+
+        Index++;
+    }
+
+    status = STATUS_UNSUCCESSFUL;
+    goto fail2;
+
+update:
+    status = RtlStringCbPrintfA(Vendor,
+                                MAXNAMELEN,
+                                "%s",
+                                VENDOR_NAME_STR);
+    ASSERT(NT_SUCCESS(status));
+
+    for (Index  = 0; Vendor[Index] != '\0'; Index++)
+        if (!isalnum(Vendor[Index]))
+            Vendor[Index] = '_';
+
+    Product = "XENNET";
+
+#if DBG
+#define ATTRIBUTES   "(DEBUG)"
+#else
+#define ATTRIBUTES   ""
+#endif
+
+    (VOID) XENBUS_STORE(Printf,
+                        &Adapter->StoreInterface,
+                        NULL,
+                        "drivers",
+                        Distribution,
+                        "%s %s %u.%u.%u %s",
+                        Vendor,
+                        Product,
+                        MAJOR_VERSION,
+                        MINOR_VERSION,
+                        MICRO_VERSION,
+                        ATTRIBUTES
+                        );
+
+#undef  ATTRIBUTES
+
+    Trace("<====\n");
+    return STATUS_SUCCESS;
+
+fail2:
+    Error("fail2\n");
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return status;
+}
+
+static DECLSPEC_NOINLINE VOID
+AdapterSuspendCallbackLate(
+    IN  PVOID       Argument
+    )
+{
+    PXENNET_ADAPTER Adapter = Argument;
+
+    (VOID) __AdapterSetDistribution(Adapter);
+}
+
+static NTSTATUS
+AdapterSetDistribution(
+    IN  PXENNET_ADAPTER Adapter
+    )
+{
+    LONG                Count;
+    NTSTATUS            status;
+
+    Trace("====>\n");
+
+    Count = InterlockedIncrement(&AdapterCount);
+    ASSERT(Count != 0);
+
+    if (Count != 1)
+        goto done;
+
+    status = __AdapterSetDistribution(Adapter);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    status = XENBUS_SUSPEND(Register,
+                            &Adapter->SuspendInterface,
+                            SUSPEND_CALLBACK_LATE,
+                            AdapterSuspendCallbackLate,
+                            Adapter,
+                            &Adapter->SuspendCallbackLate);
+    if (!NT_SUCCESS(status))
+        goto fail2;
+
+done:
+    Trace("<====\n");
+    return STATUS_SUCCESS;
+
+fail2:
+    Error("fail2\n");
+
+    __AdapterClearDistribution(Adapter);
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return status;
+}
+
+static VOID
+AdapterClearDistribution(
+    IN  PXENNET_ADAPTER Adapter
+    )
+{
+    LONG                Count;
+
+    Trace("====>\n");
+
+    ASSERT(AdapterCount != 0);
+    Count = InterlockedDecrement(&AdapterCount);
+
+    if (Count != 0)
+        goto done;
+
+    XENBUS_SUSPEND(Deregister,
+                   &Adapter->SuspendInterface,
+                   Adapter->SuspendCallbackLate);
+    Adapter->SuspendCallbackLate = NULL;
+
+    __AdapterClearDistribution(Adapter);
+
+done:
+    Trace("<====\n");
+}
+
 NDIS_STATUS
 AdapterInitialize(
     IN  NDIS_HANDLE         Handle,
@@ -2256,9 +2658,7 @@ AdapterInitialize(
     PDEVICE_OBJECT          DeviceObject;
     NDIS_SG_DMA_DESCRIPTION Dma;
 
-    *Adapter = ExAllocatePoolWithTag(NonPagedPool,
-                                     sizeof(XENNET_ADAPTER),
-                                     ADAPTER_POOL_TAG);
+    *Adapter = __AdapterAllocate(sizeof (XENNET_ADAPTER));
 
     ndisStatus = NDIS_STATUS_RESOURCES;
     if (*Adapter == NULL)
@@ -2293,45 +2693,75 @@ AdapterInitialize(
     if (!NT_SUCCESS(status))
         goto fail3;
 
+    status = __QueryInterface(DeviceObject,
+                              &GUID_XENBUS_STORE_INTERFACE,
+                              XENBUS_STORE_INTERFACE_VERSION_MAX,
+                              (PINTERFACE)&(*Adapter)->StoreInterface,
+                              sizeof(XENBUS_STORE_INTERFACE),
+                              FALSE);
+    if (!NT_SUCCESS(status))
+        goto fail4;
+
+    status = __QueryInterface(DeviceObject,
+                              &GUID_XENBUS_SUSPEND_INTERFACE,
+                              XENBUS_SUSPEND_INTERFACE_VERSION_MAX,
+                              (PINTERFACE)&(*Adapter)->SuspendInterface,
+                              sizeof(XENBUS_SUSPEND_INTERFACE),
+                              FALSE);
+    if (!NT_SUCCESS(status))
+        goto fail5;
+
     status = XENVIF_VIF(Acquire,
                         &(*Adapter)->VifInterface);
     if (!NT_SUCCESS(status))
-        goto fail4;
+        goto fail6;
 
     status = XENBUS_CACHE(Acquire,
                           &(*Adapter)->CacheInterface);
     if (!NT_SUCCESS(status))
-        goto fail5;
+        goto fail7;
+
+    status = XENBUS_STORE(Acquire,
+                          &(*Adapter)->StoreInterface);
+    if (!NT_SUCCESS(status))
+        goto fail8;
+
+    status = XENBUS_SUSPEND(Acquire,
+                            &(*Adapter)->SuspendInterface);
+    if (!NT_SUCCESS(status))
+        goto fail9;
+
+    (VOID) AdapterSetDistribution(*Adapter);
 
     (*Adapter)->NdisAdapterHandle = Handle;
 
     ndisStatus = TransmitterInitialize(*Adapter, &(*Adapter)->Transmitter);
     if (ndisStatus != NDIS_STATUS_SUCCESS)
-        goto fail6;
+        goto fail10;
 
     ndisStatus = ReceiverInitialize(*Adapter, &(*Adapter)->Receiver);
     if (ndisStatus != NDIS_STATUS_SUCCESS)
-        goto fail7;
+        goto fail11;
 
     ndisStatus = AdapterGetAdvancedSettings(*Adapter);
     if (ndisStatus != NDIS_STATUS_SUCCESS)
-        goto fail8;
+        goto fail12;
 
     ndisStatus = AdapterSetRegistrationAttributes(*Adapter);
     if (ndisStatus != NDIS_STATUS_SUCCESS)
-        goto fail9;
+        goto fail13;
 
     ndisStatus = AdapterSetGeneralAttributes(*Adapter);
     if (ndisStatus != NDIS_STATUS_SUCCESS)
-        goto fail10;
+        goto fail14;
 
     ndisStatus = AdapterSetOffloadAttributes(*Adapter);
     if (ndisStatus != NDIS_STATUS_SUCCESS)
-        goto fail11;
+        goto fail15;
 
     ndisStatus = AdapterSetHeaderDataSplitAttributes(*Adapter);
     if (ndisStatus != NDIS_STATUS_SUCCESS)
-        goto fail12;
+        goto fail16;
 
     RtlZeroMemory(&Dma, sizeof(NDIS_SG_DMA_DESCRIPTION));
     Dma.Header.Type = NDIS_OBJECT_TYPE_SG_DMA_DESCRIPTION;
@@ -2350,36 +2780,58 @@ AdapterInitialize(
 
     ndisStatus = AdapterEnable(*Adapter);
     if (ndisStatus != NDIS_STATUS_SUCCESS)
-        goto fail13;
+        goto fail17;
 
     return NDIS_STATUS_SUCCESS;
 
-fail13:
+fail17:
     if ((*Adapter)->NdisDmaHandle)
         NdisMDeregisterScatterGatherDma((*Adapter)->NdisDmaHandle);
     (*Adapter)->NdisDmaHandle = NULL;
+
+fail16:
+fail15:
+fail14:
+fail13:
 fail12:
-fail11:
-fail10:
-fail9:
-fail8:
     ReceiverTeardown((*Adapter)->Receiver);
     (*Adapter)->Receiver = NULL;
-fail7:
+fail11:
+
     TransmitterTeardown((*Adapter)->Transmitter);
     (*Adapter)->Transmitter = NULL;
-fail6:
+
+fail10:
     (*Adapter)->NdisAdapterHandle = NULL;
 
+    AdapterClearDistribution(*Adapter);
+
+    XENBUS_SUSPEND(Release, &(*Adapter)->SuspendInterface);
+
+fail9:
+    XENBUS_STORE(Release, &(*Adapter)->StoreInterface);
+
+fail8:
     XENBUS_CACHE(Release, &(*Adapter)->CacheInterface);
-fail5:
+
+fail7:
     XENVIF_VIF(Release, &(*Adapter)->VifInterface);
+
+fail6:
+    RtlZeroMemory(&(*Adapter)->SuspendInterface, sizeof(XENBUS_SUSPEND_INTERFACE));
+
+fail5:
+    RtlZeroMemory(&(*Adapter)->StoreInterface, sizeof(XENBUS_STORE_INTERFACE));
+
 fail4:
     RtlZeroMemory(&(*Adapter)->CacheInterface, sizeof(XENBUS_CACHE_INTERFACE));
+
 fail3:
     RtlZeroMemory(&(*Adapter)->VifInterface, sizeof(XENVIF_VIF_INTERFACE));
+
 fail2:
-    ExFreePoolWithTag(*Adapter, ADAPTER_POOL_TAG);
+    __AdapterFree(*Adapter);
+
 fail1:
     return ndisStatus;
 }
@@ -2399,11 +2851,17 @@ AdapterTeardown(
         NdisMDeregisterScatterGatherDma(Adapter->NdisDmaHandle);
     Adapter->NdisDmaHandle = NULL;
 
-    XENBUS_CACHE(Release, &Adapter->CacheInterface);
-    RtlZeroMemory(&Adapter->CacheInterface, sizeof(XENBUS_CACHE_INTERFACE));
+    AdapterClearDistribution(Adapter);
 
+    XENBUS_SUSPEND(Release, &Adapter->SuspendInterface);
+    XENBUS_STORE(Release, &Adapter->StoreInterface);
+    XENBUS_CACHE(Release, &Adapter->CacheInterface);
     XENVIF_VIF(Release, &Adapter->VifInterface);
+
+    RtlZeroMemory(&Adapter->SuspendInterface, sizeof(XENBUS_SUSPEND_INTERFACE));
+    RtlZeroMemory(&Adapter->StoreInterface, sizeof(XENBUS_STORE_INTERFACE));
+    RtlZeroMemory(&Adapter->CacheInterface, sizeof(XENBUS_CACHE_INTERFACE));
     RtlZeroMemory(&Adapter->VifInterface, sizeof(XENVIF_VIF_INTERFACE));
 
-    ExFreePoolWithTag(Adapter, ADAPTER_POOL_TAG);
+    __AdapterFree(Adapter);
 }
diff --git a/vs2012/xennet/xennet.vcxproj b/vs2012/xennet/xennet.vcxproj
index d69391e..3ca7407 100644
--- a/vs2012/xennet/xennet.vcxproj
+++ b/vs2012/xennet/xennet.vcxproj
@@ -40,7 +40,7 @@
 		</ClCompile>
 		<Link>
 			<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
-			<AdditionalDependencies>$(DDK_LIB_PATH)\ndis.lib;%(AdditionalDependencies)</AdditionalDependencies>
+			<AdditionalDependencies>$(DDK_LIB_PATH)\ndis.lib;$(DDK_LIB_PATH)/libcntpr.lib;%(AdditionalDependencies)</AdditionalDependencies>
 			<EnableCOMDATFolding>false</EnableCOMDATFolding>
 		</Link>
 		<Inf>
diff --git a/vs2013/xennet/xennet.vcxproj b/vs2013/xennet/xennet.vcxproj
index c50bb44..0064a92 100644
--- a/vs2013/xennet/xennet.vcxproj
+++ b/vs2013/xennet/xennet.vcxproj
@@ -11,43 +11,7 @@
     <DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Windows 8 Release|x64'">
-    <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Windows 8 Release|Win32'">
-    <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Windows Vista Debug|x64'">
-    <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Windows Vista Debug|Win32'">
-    <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Windows Vista Release|x64'">
-    <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Windows Vista Release|Win32'">
-    <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Windows 7 Release|x64'">
-    <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Windows 7 Release|Win32'">
-    <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Windows8 Debug|x64'">
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Windows 7 Debug|Win32'">
-    <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Windows 7 Debug|x64'">
-    <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Windows 8 Debug|Win32'">
-    <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Windows 8 Debug|x64'">
+  <PropertyGroup Label="Configuration">
     <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Label="Globals">
@@ -72,7 +36,7 @@
     </ClCompile>
     <Link>
       <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
-      <AdditionalDependencies>$(DDK_LIB_PATH)\ndis.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalDependencies>$(DDK_LIB_PATH)/libcntpr.lib;$(DDK_LIB_PATH)\ndis.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <EnableCOMDATFolding>false</EnableCOMDATFolding>
     </Link>
     <Inf>
-- 
2.1.1


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

From win-pv-devel-bounces@lists.xenproject.org Tue Nov 24 17:51:34 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 24 Nov 2015 17:51:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1a1Hkb-0000Cv-Lr; Tue, 24 Nov 2015 17:51:33 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1a1HkZ-0000Cm-Av
	for win-pv-devel@lists.xenproject.org; Tue, 24 Nov 2015 17:51:31 +0000
Received: from [193.109.254.147] by server-7.bemta-14.messagelabs.com id
	C2/00-28221-2A3A4565; Tue, 24 Nov 2015 17:51:30 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-3.tower-27.messagelabs.com!1448387489!5957694!1
X-Originating-IP: [74.125.82.53]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 23656 invoked from network); 24 Nov 2015 17:51:29 -0000
Received: from mail-wm0-f53.google.com (HELO mail-wm0-f53.google.com)
	(74.125.82.53)
	by server-3.tower-27.messagelabs.com with AES128-GCM-SHA256 encrypted
	SMTP; 24 Nov 2015 17:51:29 -0000
Received: by wmww144 with SMTP id w144so37022464wmw.0
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 24 Nov 2015 09:51:29 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=p0Bkn701WGnnnne6YMIZbvdztec8o4TGBjPRULyxvGU=;
	b=I7YXm4mHOJrLHMWysN2AbLEkRSlvhKO7O4GS7nkXeENNFKWaME4Hkl8drapvGOeR82
	74LLWwCmFbdEvjo0HgLd2tTAaRyDaTClcVLRXKIXfQ2npLJdntlerJe4nDu6Q/A7D8wF
	kv3dYQmFKemV69P4U1H5bI7nuFpccJPs9yvSjrOsrxQUV/AE/hRsk/ijEos86DDz3wWf
	KyFOl/vt6ew1igabWah1CfyRPtP/GUHdjnwxEFDZxDMv+NNwp7wkc3apor8AQ1c/oCFs
	lOREHt1yi7UxXeEj3I75IfJyNJzeYUUv08cc3Bl1+7e/0KX906Alidj3FYXmXS2byptq
	M1Jg==
X-Received: by 10.28.4.212 with SMTP id 203mr25396314wme.89.1448387489447;
	Tue, 24 Nov 2015 09:51:29 -0800 (PST)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	lx4sm19333727wjb.5.2015.11.24.09.51.28
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Tue, 24 Nov 2015 09:51:28 -0800 (PST)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Tue, 24 Nov 2015 17:51:18 +0000
Message-Id: <1448387478-1724-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH] Publish distribution information and hotplug
	capability to xenstore
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

My recent patch series to Xen added a documented path and format for
publishing information about PV driver distributions and hotplug
capability to xenstore.

This patch adds code to populate the documented paths (should they exist)
with information about the XENVBD driver package and the driver's ability
to handle hotplug events.

Suggested-by: Owen Smith <owen.smith@citrix.com>
Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/xenvbd/fdo.c | 445 ++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 file changed, 395 insertions(+), 50 deletions(-)

diff --git a/src/xenvbd/fdo.c b/src/xenvbd/fdo.c
index 9d1fb7d..68a682c 100644
--- a/src/xenvbd/fdo.c
+++ b/src/xenvbd/fdo.c
@@ -53,6 +53,8 @@
 
 #include <stdlib.h>
 
+#define MAXNAMELEN  128
+
 #define FDO_SIGNATURE   'odfX'
 
 struct _XENVBD_FDO {
@@ -804,30 +806,6 @@ FdoFrontend(
 
 //=============================================================================
 // Initialize, Start, Stop
-__drv_requiresIRQL(DISPATCH_LEVEL)
-static VOID
-FdoSuspendLateCallback(
-    __in PVOID                   Argument
-    )
-{
-    PXENVBD_FDO     Fdo = Argument;
-    NTSTATUS        Status;
-
-    Verbose("%s (%s)\n",
-         MAJOR_VERSION_STR "." MINOR_VERSION_STR "." MICRO_VERSION_STR "." BUILD_NUMBER_STR,
-         DAY_STR "/" MONTH_STR "/" YEAR_STR);
-
-    // remove watch
-    if (Fdo->RescanWatch != NULL) {
-        XENBUS_STORE(WatchRemove, &Fdo->Store, Fdo->RescanWatch);
-        Fdo->RescanWatch = NULL;
-    }
-
-    // re-create watch
-    Status = XENBUS_STORE(WatchAdd, &Fdo->Store, "device", FdoEnum(Fdo), 
-                          ThreadGetEvent(Fdo->RescanThread), &Fdo->RescanWatch);
-    ASSERT(NT_SUCCESS(Status));
-}
 
 __checkReturn
 __drv_maxIRQL(APC_LEVEL)
@@ -1016,8 +994,388 @@ __FdoRelease(
         XENFILT_EMULATED(Release, &Fdo->Emulated);
 }
 
+static FORCEINLINE PANSI_STRING
+__FdoMultiSzToUpcaseAnsi(
+    IN  PCHAR       Buffer
+    )
+{
+    PANSI_STRING    Ansi;
+    LONG            Index;
+    LONG            Count;
+    NTSTATUS        status;
+
+    Index = 0;
+    Count = 0;
+    for (;;) {
+        if (Buffer[Index] == '\0') {
+            Count++;
+            Index++;
+
+            // Check for double NUL
+            if (Buffer[Index] == '\0')
+                break;
+        } else {
+            Buffer[Index] = (CHAR)toupper(Buffer[Index]);
+            Index++;
+        }
+    }
+
+    Ansi = __AllocateNonPagedPoolWithTag(__FUNCTION__,
+                                         __LINE__,
+                                         sizeof (ANSI_STRING) * (Count + 1),
+                                         FDO_SIGNATURE);
+
+    status = STATUS_NO_MEMORY;
+    if (Ansi == NULL)
+        goto fail1;
+
+    for (Index = 0; Index < Count; Index++) {
+        ULONG   Length;
+
+        Length = (ULONG)strlen(Buffer);
+        Ansi[Index].MaximumLength = (USHORT)(Length + 1);
+        Ansi[Index].Buffer = __AllocateNonPagedPoolWithTag(__FUNCTION__,
+                                                           __LINE__,
+                                                           Ansi[Index].MaximumLength,
+                                                           FDO_SIGNATURE);
+
+        status = STATUS_NO_MEMORY;
+        if (Ansi[Index].Buffer == NULL)
+            goto fail2;
+
+        RtlCopyMemory(Ansi[Index].Buffer, Buffer, Length);
+        Ansi[Index].Length = (USHORT)Length;
+
+        Buffer += Length + 1;
+    }
+
+    return Ansi;
+
+fail2:
+    Error("fail2\n");
+
+    while (--Index >= 0)
+            __FreePoolWithTag(Ansi[Index].Buffer, FDO_SIGNATURE);
+
+    __FreePoolWithTag(Ansi, FDO_SIGNATURE);
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return NULL;
+}
+
+static FORCEINLINE VOID
+__FdoFreeAnsi(
+    IN  PANSI_STRING    Ansi
+    )
+{
+    ULONG               Index;
+
+    for (Index = 0; Ansi[Index].Buffer != NULL; Index++)
+            __FreePoolWithTag(Ansi[Index].Buffer, FDO_SIGNATURE);
+
+    __FreePoolWithTag(Ansi, FDO_SIGNATURE);
+}
+
+static FORCEINLINE BOOLEAN
+__FdoMatchDistribution(
+    IN  PXENVBD_FDO Fdo,
+    IN  PCHAR       Buffer
+    )
+{
+    PCHAR           Vendor;
+    PCHAR           Product;
+    PCHAR           Context;
+    const CHAR      *Text;
+    BOOLEAN         Match;
+    ULONG           Index;
+    NTSTATUS        status;
+
+    UNREFERENCED_PARAMETER(Fdo);
+
+    status = STATUS_INVALID_PARAMETER;
+
+    Vendor = __strtok_r(Buffer, " ", &Context);
+    if (Vendor == NULL)
+        goto fail1;
+
+    Product = __strtok_r(NULL, " ", &Context);
+    if (Product == NULL)
+        goto fail2;
+
+    Match = TRUE;
+
+    Text = VENDOR_NAME_STR;
+
+    for (Index = 0; Text[Index] != 0; Index++) {
+        if (!isalnum(Text[Index])) {
+            if (Vendor[Index] != '_') {
+                Match = FALSE;
+                break;
+            }
+        } else {
+            if (Vendor[Index] != Text[Index]) {
+                Match = FALSE;
+                break;
+            }
+        }
+    }
+
+    Text = "XENVBD";
+
+    if (_stricmp(Product, Text) != 0)
+        Match = FALSE;
+
+    return Match;
+
+fail2:
+    Error("fail2\n");
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return FALSE;
+}
+
+static VOID
+FdoClearDistribution(
+    IN  PXENVBD_FDO Fdo
+    )
+{
+    PCHAR           Buffer;
+    PANSI_STRING    Distributions;
+    ULONG           Index;
+    NTSTATUS        status;
+
+    Trace("====>\n");
+
+    status = XENBUS_STORE(Directory,
+                          &Fdo->Store,
+                          NULL,
+                          NULL,
+                          "drivers",
+                          &Buffer);
+    if (NT_SUCCESS(status)) {
+        Distributions = __FdoMultiSzToUpcaseAnsi(Buffer);
+
+        XENBUS_STORE(Free,
+                     &Fdo->Store,
+                     Buffer);
+    } else {
+        Distributions = NULL;
+    }
+
+    if (Distributions == NULL)
+        goto done;
+
+    for (Index = 0; Distributions[Index].Buffer != NULL; Index++) {
+        PANSI_STRING    Distribution = &Distributions[Index];
+
+        status = XENBUS_STORE(Read,
+                              &Fdo->Store,
+                              NULL,
+                              "drivers",
+                              Distribution->Buffer,
+                              &Buffer);
+        if (!NT_SUCCESS(status))
+            continue;
+
+        if (__FdoMatchDistribution(Fdo, Buffer))
+            (VOID) XENBUS_STORE(Remove,
+                                &Fdo->Store,
+                                NULL,
+                                "drivers",
+                                Distribution->Buffer);
+
+        XENBUS_STORE(Free,
+                     &Fdo->Store,
+                     Buffer);
+    }
+
+    __FdoFreeAnsi(Distributions);
+
+done:
+    Trace("<====\n");
+}
+
+#define MAXIMUM_INDEX   255
+
 static NTSTATUS
+FdoSetDistribution(
+    IN  PXENVBD_FDO Fdo
+    )
+{
+    ULONG           Index;
+    CHAR            Distribution[MAXNAMELEN];
+    CHAR            Vendor[MAXNAMELEN];
+    const CHAR      *Product;
+    NTSTATUS        status;
+
+    Trace("====>\n");
+
+    Index = 0;
+    while (Index <= MAXIMUM_INDEX) {
+        PCHAR   Buffer;
+
+        status = RtlStringCbPrintfA(Distribution,
+                                    MAXNAMELEN,
+                                    "%u",
+                                    Index);
+        ASSERT(NT_SUCCESS(status));
+
+        status = XENBUS_STORE(Read,
+                              &Fdo->Store,
+                              NULL,
+                              "drivers",
+                              Distribution,
+                              &Buffer);
+        if (!NT_SUCCESS(status)) {
+            if (status == STATUS_OBJECT_NAME_NOT_FOUND)
+                goto update;
+
+            goto fail1;
+        }
+
+        XENBUS_STORE(Free,
+                     &Fdo->Store,
+                     Buffer);
+
+        Index++;
+    }
+
+    status = STATUS_UNSUCCESSFUL;
+    goto fail2;
+
+update:
+    status = RtlStringCbPrintfA(Vendor,
+                                MAXNAMELEN,
+                                "%s",
+                                VENDOR_NAME_STR);
+    ASSERT(NT_SUCCESS(status));
+
+    for (Index  = 0; Vendor[Index] != '\0'; Index++)
+        if (!isalnum(Vendor[Index]))
+            Vendor[Index] = '_';
+
+    Product = "XENVBD";
+
+#if DBG
+#define ATTRIBUTES   "(DEBUG)"
+#else
+#define ATTRIBUTES   ""
+#endif
+
+    (VOID) XENBUS_STORE(Printf,
+                        &Fdo->Store,
+                        NULL,
+                        "drivers",
+                        Distribution,
+                        "%s %s %u.%u.%u %s",
+                        Vendor,
+                        Product,
+                        MAJOR_VERSION,
+                        MINOR_VERSION,
+                        MICRO_VERSION,
+                        ATTRIBUTES
+                        );
+
+#undef  ATTRIBUTES
+
+    Trace("<====\n");
+    return STATUS_SUCCESS;
+
+fail2:
+    Error("fail2\n");
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
 __FdoD3ToD0(
+    __in PXENVBD_FDO    Fdo
+    )
+{
+    NTSTATUS            Status;
+
+    Trace("=====>\n");
+
+    (VOID) FdoSetDistribution(Fdo);
+
+    ASSERT3P(Fdo->RescanWatch, ==, NULL);
+    Status = XENBUS_STORE(WatchAdd,
+                          &Fdo->Store,
+                          "device",
+                          FdoEnum(Fdo),
+                          ThreadGetEvent(Fdo->RescanThread),
+                          &Fdo->RescanWatch);
+    if (!NT_SUCCESS(Status))
+        goto fail1;
+
+    (VOID) XENBUS_STORE(Printf,
+                        &Fdo->Store,
+                        NULL,
+                        "feature/hotplug",
+                        "vbd",
+                        "%u",
+                        TRUE);
+
+    Trace("<=====\n");
+    return STATUS_SUCCESS;
+
+fail1:
+    Error("fail1 (%08x)\n", Status);
+
+    return Status;
+}
+
+static FORCEINLINE VOID
+__FdoD0ToD3(
+    __in PXENVBD_FDO    Fdo
+    )
+{
+    Trace("=====>\n");
+
+    (VOID) XENBUS_STORE(Remove,
+                        &Fdo->Store,
+                        NULL,
+                        "feature/hotplug",
+                        "vbd");
+
+    (VOID) XENBUS_STORE(WatchRemove,
+                        &Fdo->Store,
+                        Fdo->RescanWatch);
+    Fdo->RescanWatch = NULL;
+
+    FdoClearDistribution(Fdo);
+
+    Trace("<=====\n");
+}
+
+__drv_requiresIRQL(DISPATCH_LEVEL)
+static VOID
+FdoSuspendLateCallback(
+    __in PVOID                   Argument
+    )
+{
+    PXENVBD_FDO     Fdo = Argument;
+    NTSTATUS        Status;
+
+    Verbose("%s (%s)\n",
+         MAJOR_VERSION_STR "." MINOR_VERSION_STR "." MICRO_VERSION_STR "." BUILD_NUMBER_STR,
+         DAY_STR "/" MONTH_STR "/" YEAR_STR);
+
+    __FdoD0ToD3(Fdo);
+
+    Status = __FdoD3ToD0(Fdo);
+    ASSERT(NT_SUCCESS(Status));
+}
+
+static NTSTATUS
+FdoD3ToD0(
     __in PXENVBD_FDO             Fdo
     )
 {
@@ -1058,6 +1416,10 @@ __FdoD3ToD0(
         }
     }
 
+    Status = __FdoD3ToD0(Fdo);
+    if (!NT_SUCCESS(Status))
+        goto fail4;
+
     // register suspend callback to re-register the watch
     ASSERT3P(Fdo->SuspendCallback, ==, NULL);
     Status = XENBUS_SUSPEND(Register,
@@ -1067,17 +1429,6 @@ __FdoD3ToD0(
                             Fdo,
                             &Fdo->SuspendCallback);
     if (!NT_SUCCESS(Status))
-        goto fail4;
-
-    // register watch on device/vbd
-    ASSERT3P(Fdo->RescanWatch, ==, NULL);
-    Status = XENBUS_STORE(WatchAdd,
-                          &Fdo->Store,
-                          "device",
-                          FdoEnum(Fdo), 
-                          ThreadGetEvent(Fdo->RescanThread),
-                          &Fdo->RescanWatch);
-    if (!NT_SUCCESS(Status))
         goto fail5;
 
     Trace("<===== (%d)\n", KeGetCurrentIrql());
@@ -1085,8 +1436,8 @@ __FdoD3ToD0(
 
 fail5:
     Error("Fail5\n");
-    XENBUS_SUSPEND(Deregister, &Fdo->Suspend, Fdo->SuspendCallback);
-    Fdo->SuspendCallback = NULL;
+
+    __FdoD0ToD3(Fdo);
 
 fail4:
     Error("Fail4\n");
@@ -1116,8 +1467,9 @@ fail1:
     __FdoSetDevicePowerState(Fdo, PowerDeviceD3);
     return Status;
 }
+
 static VOID
-__FdoD0ToD3(
+FdoD0ToD3(
     __in PXENVBD_FDO             Fdo
     )
 {
@@ -1130,16 +1482,9 @@ __FdoD0ToD3(
     Verbose("D0->D3\n");
 
     // remove suspend callback
-    if (Fdo->SuspendCallback != NULL) {
-        XENBUS_SUSPEND(Deregister, &Fdo->Suspend, Fdo->SuspendCallback);
-        Fdo->SuspendCallback = NULL;
-    }
+    XENBUS_SUSPEND(Deregister, &Fdo->Suspend, Fdo->SuspendCallback);
 
-    // unregister watch on device/vbd
-    if (Fdo->RescanWatch != NULL) {
-        XENBUS_STORE(WatchRemove, &Fdo->Store, Fdo->RescanWatch);
-        Fdo->RescanWatch = NULL;
-    }
+    __FdoD0ToD3(Fdo);
 
     // Power DOWN any PDOs
     for (TargetId = 0; TargetId < XENVBD_MAX_TARGETS; ++TargetId) {
@@ -1196,12 +1541,12 @@ FdoDevicePower(
             switch (DeviceState) {
             case PowerDeviceD0:
                 Verbose("FDO:PowerDeviceD0\n");
-                __FdoD3ToD0(Fdo);
+                FdoD3ToD0(Fdo);
                 break;
 
             case PowerDeviceD3:
                 Verbose("FDO:PowerDeviceD3 (%s)\n", PowerActionName(Action));
-                __FdoD0ToD3(Fdo);
+                FdoD0ToD3(Fdo);
                 break;
 
             default:
@@ -1559,7 +1904,7 @@ FdoFindAdapter(
 
     FdoUnplugRequest(Fdo, TRUE);
 
-    if (!NT_SUCCESS(__FdoD3ToD0(Fdo)))
+    if (!NT_SUCCESS(FdoD3ToD0(Fdo)))
         return SP_RETURN_ERROR;
 
     return SP_RETURN_FOUND;
-- 
2.1.1


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

From win-pv-devel-bounces@lists.xenproject.org Tue Nov 24 17:51:34 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 24 Nov 2015 17:51:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1a1Hkb-0000Cv-Lr; Tue, 24 Nov 2015 17:51:33 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1a1HkZ-0000Cm-Av
	for win-pv-devel@lists.xenproject.org; Tue, 24 Nov 2015 17:51:31 +0000
Received: from [193.109.254.147] by server-7.bemta-14.messagelabs.com id
	C2/00-28221-2A3A4565; Tue, 24 Nov 2015 17:51:30 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-3.tower-27.messagelabs.com!1448387489!5957694!1
X-Originating-IP: [74.125.82.53]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 23656 invoked from network); 24 Nov 2015 17:51:29 -0000
Received: from mail-wm0-f53.google.com (HELO mail-wm0-f53.google.com)
	(74.125.82.53)
	by server-3.tower-27.messagelabs.com with AES128-GCM-SHA256 encrypted
	SMTP; 24 Nov 2015 17:51:29 -0000
Received: by wmww144 with SMTP id w144so37022464wmw.0
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 24 Nov 2015 09:51:29 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=p0Bkn701WGnnnne6YMIZbvdztec8o4TGBjPRULyxvGU=;
	b=I7YXm4mHOJrLHMWysN2AbLEkRSlvhKO7O4GS7nkXeENNFKWaME4Hkl8drapvGOeR82
	74LLWwCmFbdEvjo0HgLd2tTAaRyDaTClcVLRXKIXfQ2npLJdntlerJe4nDu6Q/A7D8wF
	kv3dYQmFKemV69P4U1H5bI7nuFpccJPs9yvSjrOsrxQUV/AE/hRsk/ijEos86DDz3wWf
	KyFOl/vt6ew1igabWah1CfyRPtP/GUHdjnwxEFDZxDMv+NNwp7wkc3apor8AQ1c/oCFs
	lOREHt1yi7UxXeEj3I75IfJyNJzeYUUv08cc3Bl1+7e/0KX906Alidj3FYXmXS2byptq
	M1Jg==
X-Received: by 10.28.4.212 with SMTP id 203mr25396314wme.89.1448387489447;
	Tue, 24 Nov 2015 09:51:29 -0800 (PST)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	lx4sm19333727wjb.5.2015.11.24.09.51.28
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Tue, 24 Nov 2015 09:51:28 -0800 (PST)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Tue, 24 Nov 2015 17:51:18 +0000
Message-Id: <1448387478-1724-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH] Publish distribution information and hotplug
	capability to xenstore
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

My recent patch series to Xen added a documented path and format for
publishing information about PV driver distributions and hotplug
capability to xenstore.

This patch adds code to populate the documented paths (should they exist)
with information about the XENVBD driver package and the driver's ability
to handle hotplug events.

Suggested-by: Owen Smith <owen.smith@citrix.com>
Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/xenvbd/fdo.c | 445 ++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 file changed, 395 insertions(+), 50 deletions(-)

diff --git a/src/xenvbd/fdo.c b/src/xenvbd/fdo.c
index 9d1fb7d..68a682c 100644
--- a/src/xenvbd/fdo.c
+++ b/src/xenvbd/fdo.c
@@ -53,6 +53,8 @@
 
 #include <stdlib.h>
 
+#define MAXNAMELEN  128
+
 #define FDO_SIGNATURE   'odfX'
 
 struct _XENVBD_FDO {
@@ -804,30 +806,6 @@ FdoFrontend(
 
 //=============================================================================
 // Initialize, Start, Stop
-__drv_requiresIRQL(DISPATCH_LEVEL)
-static VOID
-FdoSuspendLateCallback(
-    __in PVOID                   Argument
-    )
-{
-    PXENVBD_FDO     Fdo = Argument;
-    NTSTATUS        Status;
-
-    Verbose("%s (%s)\n",
-         MAJOR_VERSION_STR "." MINOR_VERSION_STR "." MICRO_VERSION_STR "." BUILD_NUMBER_STR,
-         DAY_STR "/" MONTH_STR "/" YEAR_STR);
-
-    // remove watch
-    if (Fdo->RescanWatch != NULL) {
-        XENBUS_STORE(WatchRemove, &Fdo->Store, Fdo->RescanWatch);
-        Fdo->RescanWatch = NULL;
-    }
-
-    // re-create watch
-    Status = XENBUS_STORE(WatchAdd, &Fdo->Store, "device", FdoEnum(Fdo), 
-                          ThreadGetEvent(Fdo->RescanThread), &Fdo->RescanWatch);
-    ASSERT(NT_SUCCESS(Status));
-}
 
 __checkReturn
 __drv_maxIRQL(APC_LEVEL)
@@ -1016,8 +994,388 @@ __FdoRelease(
         XENFILT_EMULATED(Release, &Fdo->Emulated);
 }
 
+static FORCEINLINE PANSI_STRING
+__FdoMultiSzToUpcaseAnsi(
+    IN  PCHAR       Buffer
+    )
+{
+    PANSI_STRING    Ansi;
+    LONG            Index;
+    LONG            Count;
+    NTSTATUS        status;
+
+    Index = 0;
+    Count = 0;
+    for (;;) {
+        if (Buffer[Index] == '\0') {
+            Count++;
+            Index++;
+
+            // Check for double NUL
+            if (Buffer[Index] == '\0')
+                break;
+        } else {
+            Buffer[Index] = (CHAR)toupper(Buffer[Index]);
+            Index++;
+        }
+    }
+
+    Ansi = __AllocateNonPagedPoolWithTag(__FUNCTION__,
+                                         __LINE__,
+                                         sizeof (ANSI_STRING) * (Count + 1),
+                                         FDO_SIGNATURE);
+
+    status = STATUS_NO_MEMORY;
+    if (Ansi == NULL)
+        goto fail1;
+
+    for (Index = 0; Index < Count; Index++) {
+        ULONG   Length;
+
+        Length = (ULONG)strlen(Buffer);
+        Ansi[Index].MaximumLength = (USHORT)(Length + 1);
+        Ansi[Index].Buffer = __AllocateNonPagedPoolWithTag(__FUNCTION__,
+                                                           __LINE__,
+                                                           Ansi[Index].MaximumLength,
+                                                           FDO_SIGNATURE);
+
+        status = STATUS_NO_MEMORY;
+        if (Ansi[Index].Buffer == NULL)
+            goto fail2;
+
+        RtlCopyMemory(Ansi[Index].Buffer, Buffer, Length);
+        Ansi[Index].Length = (USHORT)Length;
+
+        Buffer += Length + 1;
+    }
+
+    return Ansi;
+
+fail2:
+    Error("fail2\n");
+
+    while (--Index >= 0)
+            __FreePoolWithTag(Ansi[Index].Buffer, FDO_SIGNATURE);
+
+    __FreePoolWithTag(Ansi, FDO_SIGNATURE);
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return NULL;
+}
+
+static FORCEINLINE VOID
+__FdoFreeAnsi(
+    IN  PANSI_STRING    Ansi
+    )
+{
+    ULONG               Index;
+
+    for (Index = 0; Ansi[Index].Buffer != NULL; Index++)
+            __FreePoolWithTag(Ansi[Index].Buffer, FDO_SIGNATURE);
+
+    __FreePoolWithTag(Ansi, FDO_SIGNATURE);
+}
+
+static FORCEINLINE BOOLEAN
+__FdoMatchDistribution(
+    IN  PXENVBD_FDO Fdo,
+    IN  PCHAR       Buffer
+    )
+{
+    PCHAR           Vendor;
+    PCHAR           Product;
+    PCHAR           Context;
+    const CHAR      *Text;
+    BOOLEAN         Match;
+    ULONG           Index;
+    NTSTATUS        status;
+
+    UNREFERENCED_PARAMETER(Fdo);
+
+    status = STATUS_INVALID_PARAMETER;
+
+    Vendor = __strtok_r(Buffer, " ", &Context);
+    if (Vendor == NULL)
+        goto fail1;
+
+    Product = __strtok_r(NULL, " ", &Context);
+    if (Product == NULL)
+        goto fail2;
+
+    Match = TRUE;
+
+    Text = VENDOR_NAME_STR;
+
+    for (Index = 0; Text[Index] != 0; Index++) {
+        if (!isalnum(Text[Index])) {
+            if (Vendor[Index] != '_') {
+                Match = FALSE;
+                break;
+            }
+        } else {
+            if (Vendor[Index] != Text[Index]) {
+                Match = FALSE;
+                break;
+            }
+        }
+    }
+
+    Text = "XENVBD";
+
+    if (_stricmp(Product, Text) != 0)
+        Match = FALSE;
+
+    return Match;
+
+fail2:
+    Error("fail2\n");
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return FALSE;
+}
+
+static VOID
+FdoClearDistribution(
+    IN  PXENVBD_FDO Fdo
+    )
+{
+    PCHAR           Buffer;
+    PANSI_STRING    Distributions;
+    ULONG           Index;
+    NTSTATUS        status;
+
+    Trace("====>\n");
+
+    status = XENBUS_STORE(Directory,
+                          &Fdo->Store,
+                          NULL,
+                          NULL,
+                          "drivers",
+                          &Buffer);
+    if (NT_SUCCESS(status)) {
+        Distributions = __FdoMultiSzToUpcaseAnsi(Buffer);
+
+        XENBUS_STORE(Free,
+                     &Fdo->Store,
+                     Buffer);
+    } else {
+        Distributions = NULL;
+    }
+
+    if (Distributions == NULL)
+        goto done;
+
+    for (Index = 0; Distributions[Index].Buffer != NULL; Index++) {
+        PANSI_STRING    Distribution = &Distributions[Index];
+
+        status = XENBUS_STORE(Read,
+                              &Fdo->Store,
+                              NULL,
+                              "drivers",
+                              Distribution->Buffer,
+                              &Buffer);
+        if (!NT_SUCCESS(status))
+            continue;
+
+        if (__FdoMatchDistribution(Fdo, Buffer))
+            (VOID) XENBUS_STORE(Remove,
+                                &Fdo->Store,
+                                NULL,
+                                "drivers",
+                                Distribution->Buffer);
+
+        XENBUS_STORE(Free,
+                     &Fdo->Store,
+                     Buffer);
+    }
+
+    __FdoFreeAnsi(Distributions);
+
+done:
+    Trace("<====\n");
+}
+
+#define MAXIMUM_INDEX   255
+
 static NTSTATUS
+FdoSetDistribution(
+    IN  PXENVBD_FDO Fdo
+    )
+{
+    ULONG           Index;
+    CHAR            Distribution[MAXNAMELEN];
+    CHAR            Vendor[MAXNAMELEN];
+    const CHAR      *Product;
+    NTSTATUS        status;
+
+    Trace("====>\n");
+
+    Index = 0;
+    while (Index <= MAXIMUM_INDEX) {
+        PCHAR   Buffer;
+
+        status = RtlStringCbPrintfA(Distribution,
+                                    MAXNAMELEN,
+                                    "%u",
+                                    Index);
+        ASSERT(NT_SUCCESS(status));
+
+        status = XENBUS_STORE(Read,
+                              &Fdo->Store,
+                              NULL,
+                              "drivers",
+                              Distribution,
+                              &Buffer);
+        if (!NT_SUCCESS(status)) {
+            if (status == STATUS_OBJECT_NAME_NOT_FOUND)
+                goto update;
+
+            goto fail1;
+        }
+
+        XENBUS_STORE(Free,
+                     &Fdo->Store,
+                     Buffer);
+
+        Index++;
+    }
+
+    status = STATUS_UNSUCCESSFUL;
+    goto fail2;
+
+update:
+    status = RtlStringCbPrintfA(Vendor,
+                                MAXNAMELEN,
+                                "%s",
+                                VENDOR_NAME_STR);
+    ASSERT(NT_SUCCESS(status));
+
+    for (Index  = 0; Vendor[Index] != '\0'; Index++)
+        if (!isalnum(Vendor[Index]))
+            Vendor[Index] = '_';
+
+    Product = "XENVBD";
+
+#if DBG
+#define ATTRIBUTES   "(DEBUG)"
+#else
+#define ATTRIBUTES   ""
+#endif
+
+    (VOID) XENBUS_STORE(Printf,
+                        &Fdo->Store,
+                        NULL,
+                        "drivers",
+                        Distribution,
+                        "%s %s %u.%u.%u %s",
+                        Vendor,
+                        Product,
+                        MAJOR_VERSION,
+                        MINOR_VERSION,
+                        MICRO_VERSION,
+                        ATTRIBUTES
+                        );
+
+#undef  ATTRIBUTES
+
+    Trace("<====\n");
+    return STATUS_SUCCESS;
+
+fail2:
+    Error("fail2\n");
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
 __FdoD3ToD0(
+    __in PXENVBD_FDO    Fdo
+    )
+{
+    NTSTATUS            Status;
+
+    Trace("=====>\n");
+
+    (VOID) FdoSetDistribution(Fdo);
+
+    ASSERT3P(Fdo->RescanWatch, ==, NULL);
+    Status = XENBUS_STORE(WatchAdd,
+                          &Fdo->Store,
+                          "device",
+                          FdoEnum(Fdo),
+                          ThreadGetEvent(Fdo->RescanThread),
+                          &Fdo->RescanWatch);
+    if (!NT_SUCCESS(Status))
+        goto fail1;
+
+    (VOID) XENBUS_STORE(Printf,
+                        &Fdo->Store,
+                        NULL,
+                        "feature/hotplug",
+                        "vbd",
+                        "%u",
+                        TRUE);
+
+    Trace("<=====\n");
+    return STATUS_SUCCESS;
+
+fail1:
+    Error("fail1 (%08x)\n", Status);
+
+    return Status;
+}
+
+static FORCEINLINE VOID
+__FdoD0ToD3(
+    __in PXENVBD_FDO    Fdo
+    )
+{
+    Trace("=====>\n");
+
+    (VOID) XENBUS_STORE(Remove,
+                        &Fdo->Store,
+                        NULL,
+                        "feature/hotplug",
+                        "vbd");
+
+    (VOID) XENBUS_STORE(WatchRemove,
+                        &Fdo->Store,
+                        Fdo->RescanWatch);
+    Fdo->RescanWatch = NULL;
+
+    FdoClearDistribution(Fdo);
+
+    Trace("<=====\n");
+}
+
+__drv_requiresIRQL(DISPATCH_LEVEL)
+static VOID
+FdoSuspendLateCallback(
+    __in PVOID                   Argument
+    )
+{
+    PXENVBD_FDO     Fdo = Argument;
+    NTSTATUS        Status;
+
+    Verbose("%s (%s)\n",
+         MAJOR_VERSION_STR "." MINOR_VERSION_STR "." MICRO_VERSION_STR "." BUILD_NUMBER_STR,
+         DAY_STR "/" MONTH_STR "/" YEAR_STR);
+
+    __FdoD0ToD3(Fdo);
+
+    Status = __FdoD3ToD0(Fdo);
+    ASSERT(NT_SUCCESS(Status));
+}
+
+static NTSTATUS
+FdoD3ToD0(
     __in PXENVBD_FDO             Fdo
     )
 {
@@ -1058,6 +1416,10 @@ __FdoD3ToD0(
         }
     }
 
+    Status = __FdoD3ToD0(Fdo);
+    if (!NT_SUCCESS(Status))
+        goto fail4;
+
     // register suspend callback to re-register the watch
     ASSERT3P(Fdo->SuspendCallback, ==, NULL);
     Status = XENBUS_SUSPEND(Register,
@@ -1067,17 +1429,6 @@ __FdoD3ToD0(
                             Fdo,
                             &Fdo->SuspendCallback);
     if (!NT_SUCCESS(Status))
-        goto fail4;
-
-    // register watch on device/vbd
-    ASSERT3P(Fdo->RescanWatch, ==, NULL);
-    Status = XENBUS_STORE(WatchAdd,
-                          &Fdo->Store,
-                          "device",
-                          FdoEnum(Fdo), 
-                          ThreadGetEvent(Fdo->RescanThread),
-                          &Fdo->RescanWatch);
-    if (!NT_SUCCESS(Status))
         goto fail5;
 
     Trace("<===== (%d)\n", KeGetCurrentIrql());
@@ -1085,8 +1436,8 @@ __FdoD3ToD0(
 
 fail5:
     Error("Fail5\n");
-    XENBUS_SUSPEND(Deregister, &Fdo->Suspend, Fdo->SuspendCallback);
-    Fdo->SuspendCallback = NULL;
+
+    __FdoD0ToD3(Fdo);
 
 fail4:
     Error("Fail4\n");
@@ -1116,8 +1467,9 @@ fail1:
     __FdoSetDevicePowerState(Fdo, PowerDeviceD3);
     return Status;
 }
+
 static VOID
-__FdoD0ToD3(
+FdoD0ToD3(
     __in PXENVBD_FDO             Fdo
     )
 {
@@ -1130,16 +1482,9 @@ __FdoD0ToD3(
     Verbose("D0->D3\n");
 
     // remove suspend callback
-    if (Fdo->SuspendCallback != NULL) {
-        XENBUS_SUSPEND(Deregister, &Fdo->Suspend, Fdo->SuspendCallback);
-        Fdo->SuspendCallback = NULL;
-    }
+    XENBUS_SUSPEND(Deregister, &Fdo->Suspend, Fdo->SuspendCallback);
 
-    // unregister watch on device/vbd
-    if (Fdo->RescanWatch != NULL) {
-        XENBUS_STORE(WatchRemove, &Fdo->Store, Fdo->RescanWatch);
-        Fdo->RescanWatch = NULL;
-    }
+    __FdoD0ToD3(Fdo);
 
     // Power DOWN any PDOs
     for (TargetId = 0; TargetId < XENVBD_MAX_TARGETS; ++TargetId) {
@@ -1196,12 +1541,12 @@ FdoDevicePower(
             switch (DeviceState) {
             case PowerDeviceD0:
                 Verbose("FDO:PowerDeviceD0\n");
-                __FdoD3ToD0(Fdo);
+                FdoD3ToD0(Fdo);
                 break;
 
             case PowerDeviceD3:
                 Verbose("FDO:PowerDeviceD3 (%s)\n", PowerActionName(Action));
-                __FdoD0ToD3(Fdo);
+                FdoD0ToD3(Fdo);
                 break;
 
             default:
@@ -1559,7 +1904,7 @@ FdoFindAdapter(
 
     FdoUnplugRequest(Fdo, TRUE);
 
-    if (!NT_SUCCESS(__FdoD3ToD0(Fdo)))
+    if (!NT_SUCCESS(FdoD3ToD0(Fdo)))
         return SP_RETURN_ERROR;
 
     return SP_RETURN_FOUND;
-- 
2.1.1


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

From win-pv-devel-bounces@lists.xenproject.org Wed Nov 25 12:45:48 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 25 Nov 2015 12:45:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1a1ZSF-0000v4-TG; Wed, 25 Nov 2015 12:45:47 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1a1ZSE-0000uf-I5
	for win-pv-devel@lists.xenproject.org; Wed, 25 Nov 2015 12:45:46 +0000
Received: from [193.109.254.147] by server-6.bemta-14.messagelabs.com id
	CB/CD-16618-57DA5565; Wed, 25 Nov 2015 12:45:41 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-15.tower-27.messagelabs.com!1448455540!6193385!1
X-Originating-IP: [74.125.82.43]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 64766 invoked from network); 25 Nov 2015 12:45:40 -0000
Received: from mail-wm0-f43.google.com (HELO mail-wm0-f43.google.com)
	(74.125.82.43)
	by server-15.tower-27.messagelabs.com with AES128-GCM-SHA256 encrypted
	SMTP; 25 Nov 2015 12:45:40 -0000
Received: by wmec201 with SMTP id c201so254650488wme.0
	for <win-pv-devel@lists.xenproject.org>;
	Wed, 25 Nov 2015 04:45:40 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=p3qTmCzGJIRbLw4H4l5IbCLm5NX2cvtJhSX95foGrjI=;
	b=n0kfKUdxiQw1di6RjPhpVD0zRa1Jjq+lxFz5vM9MdJeCfEvnI1BeTKlqgfOaNkI6gJ
	NHcmiNYzapzft2fz2HFyaAsrxN3j/iZbgtZwm1FlnyF6kQIbQicOLRSravh1uFdy+otM
	oIhm2lEE38Bae037wgrazQmDjM4jD+Dyy3f7M2HI0kQvioVKbOL5ZUa5j+eK+ve7YJN9
	NYxGMW1fvnQgxBmzO9IyNxQ7sca2yt6qND3GmDCow84N2QhWShV4N7WBvQXUUL3KTika
	4sWT6AMU01elIWJqh+CbzXIY82WEqSDSavtg2S3/EiX8lyCsxZthFVeSDV2Rk0qY7CDV
	u/9A==
X-Received: by 10.28.50.70 with SMTP id y67mr4460882wmy.91.1448455539846;
	Wed, 25 Nov 2015 04:45:39 -0800 (PST)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id n7sm3350355wmf.21.2015.11.25.04.45.39
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Wed, 25 Nov 2015 04:45:39 -0800 (PST)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Wed, 25 Nov 2015 12:45:29 +0000
Message-Id: <1448455529-8828-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH] Fix xenstore cleanup
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

The distribution information is not cleared in the correct place and
cleanup of the hotplug feature flag is missing. This patch fixes both
issues.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/xenvif/fdo.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/xenvif/fdo.c b/src/xenvif/fdo.c
index 0fc27ca..7d4d015 100644
--- a/src/xenvif/fdo.c
+++ b/src/xenvif/fdo.c
@@ -1345,11 +1345,19 @@ __FdoD0ToD3(
 
     ASSERT3U(KeGetCurrentIrql(), ==, DISPATCH_LEVEL);
 
+    (VOID) XENBUS_STORE(Remove,
+                        &Fdo->StoreInterface,
+                        NULL,
+                        "feature/hotplug",
+                        "vif");
+
     (VOID) XENBUS_STORE(WatchRemove,
                         &Fdo->StoreInterface,
                         Fdo->ScanWatch);
     Fdo->ScanWatch = NULL;
 
+    FdoClearDistribution(Fdo);
+
     Trace("<====\n");
 }
 
@@ -1516,8 +1524,6 @@ FdoD0ToD3(
 
     KeLowerIrql(Irql);
 
-    FdoClearDistribution(Fdo);
-
     Trace("<====\n");
 }
 
-- 
2.1.1


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

From win-pv-devel-bounces@lists.xenproject.org Wed Nov 25 12:45:48 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 25 Nov 2015 12:45:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1a1ZSF-0000v4-TG; Wed, 25 Nov 2015 12:45:47 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1a1ZSE-0000uf-I5
	for win-pv-devel@lists.xenproject.org; Wed, 25 Nov 2015 12:45:46 +0000
Received: from [193.109.254.147] by server-6.bemta-14.messagelabs.com id
	CB/CD-16618-57DA5565; Wed, 25 Nov 2015 12:45:41 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-15.tower-27.messagelabs.com!1448455540!6193385!1
X-Originating-IP: [74.125.82.43]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 64766 invoked from network); 25 Nov 2015 12:45:40 -0000
Received: from mail-wm0-f43.google.com (HELO mail-wm0-f43.google.com)
	(74.125.82.43)
	by server-15.tower-27.messagelabs.com with AES128-GCM-SHA256 encrypted
	SMTP; 25 Nov 2015 12:45:40 -0000
Received: by wmec201 with SMTP id c201so254650488wme.0
	for <win-pv-devel@lists.xenproject.org>;
	Wed, 25 Nov 2015 04:45:40 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=p3qTmCzGJIRbLw4H4l5IbCLm5NX2cvtJhSX95foGrjI=;
	b=n0kfKUdxiQw1di6RjPhpVD0zRa1Jjq+lxFz5vM9MdJeCfEvnI1BeTKlqgfOaNkI6gJ
	NHcmiNYzapzft2fz2HFyaAsrxN3j/iZbgtZwm1FlnyF6kQIbQicOLRSravh1uFdy+otM
	oIhm2lEE38Bae037wgrazQmDjM4jD+Dyy3f7M2HI0kQvioVKbOL5ZUa5j+eK+ve7YJN9
	NYxGMW1fvnQgxBmzO9IyNxQ7sca2yt6qND3GmDCow84N2QhWShV4N7WBvQXUUL3KTika
	4sWT6AMU01elIWJqh+CbzXIY82WEqSDSavtg2S3/EiX8lyCsxZthFVeSDV2Rk0qY7CDV
	u/9A==
X-Received: by 10.28.50.70 with SMTP id y67mr4460882wmy.91.1448455539846;
	Wed, 25 Nov 2015 04:45:39 -0800 (PST)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id n7sm3350355wmf.21.2015.11.25.04.45.39
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Wed, 25 Nov 2015 04:45:39 -0800 (PST)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Wed, 25 Nov 2015 12:45:29 +0000
Message-Id: <1448455529-8828-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH] Fix xenstore cleanup
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

The distribution information is not cleared in the correct place and
cleanup of the hotplug feature flag is missing. This patch fixes both
issues.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/xenvif/fdo.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/xenvif/fdo.c b/src/xenvif/fdo.c
index 0fc27ca..7d4d015 100644
--- a/src/xenvif/fdo.c
+++ b/src/xenvif/fdo.c
@@ -1345,11 +1345,19 @@ __FdoD0ToD3(
 
     ASSERT3U(KeGetCurrentIrql(), ==, DISPATCH_LEVEL);
 
+    (VOID) XENBUS_STORE(Remove,
+                        &Fdo->StoreInterface,
+                        NULL,
+                        "feature/hotplug",
+                        "vif");
+
     (VOID) XENBUS_STORE(WatchRemove,
                         &Fdo->StoreInterface,
                         Fdo->ScanWatch);
     Fdo->ScanWatch = NULL;
 
+    FdoClearDistribution(Fdo);
+
     Trace("<====\n");
 }
 
@@ -1516,8 +1524,6 @@ FdoD0ToD3(
 
     KeLowerIrql(Irql);
 
-    FdoClearDistribution(Fdo);
-
     Trace("<====\n");
 }
 
-- 
2.1.1


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

From win-pv-devel-bounces@lists.xenproject.org Wed Nov 25 14:28:48 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 25 Nov 2015 14:28:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1a1b3v-0006hN-Kt; Wed, 25 Nov 2015 14:28:47 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1a1b3u-0006h3-G3
	for win-pv-devel@lists.xenproject.org; Wed, 25 Nov 2015 14:28:46 +0000
Received: from [85.158.139.211] by server-9.bemta-5.messagelabs.com id
	AE/C1-30270-D95C5565; Wed, 25 Nov 2015 14:28:45 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-3.tower-206.messagelabs.com!1448461725!6390220!1
X-Originating-IP: [74.125.82.52]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 59674 invoked from network); 25 Nov 2015 14:28:45 -0000
Received: from mail-wm0-f52.google.com (HELO mail-wm0-f52.google.com)
	(74.125.82.52)
	by server-3.tower-206.messagelabs.com with AES128-GCM-SHA256 encrypted
	SMTP; 25 Nov 2015 14:28:45 -0000
Received: by wmww144 with SMTP id w144so182374300wmw.1
	for <win-pv-devel@lists.xenproject.org>;
	Wed, 25 Nov 2015 06:28:44 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=DMrmYotmCLoWlr3ehu7EbhnS62Qu1RmDxyjunU3vf+g=;
	b=F9AvzsCK31mux2kUcqTvcfX88fbpcM2tCx40L5+Le2U15ZVCBeaimPniKT8xcFCJHE
	FuZPodDSWdOw690bCBlyueXTaNEJR3iDmnck5WwxPUk6XDm9+o4yE2tvKQMU18Cp6/WI
	6Ro9h4k5UWyzrVg49S78z2mD8wEF73HIQn5Xj7WeEihpUv6bsy3iP9qv39if2s5P0Lqo
	wrBVHTIP0vd5e/iec68mAh6BiGqTeuFCdmO4sRMV/tKKRB4BfaVSyK8lOlxrSejKZz0M
	9MQbjMEPa7jUxbwqlDYMCbNtGre2fCBe9KTdTjnD9OWrhqPR8eumNEDcSqi4BUnhZUW4
	uGCg==
X-Received: by 10.28.101.195 with SMTP id z186mr5284879wmb.52.1448461724786;
	Wed, 25 Nov 2015 06:28:44 -0800 (PST)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id q9sm10594089wjo.9.2015.11.25.06.28.43
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Wed, 25 Nov 2015 06:28:44 -0800 (PST)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Wed, 25 Nov 2015 14:28:30 +0000
Message-Id: <1448461710-4700-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH] Publish distribution information to xenstore
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

My recent patch series to Xen added a documented path and format for
publishing information about PV driver distributions to xenstore.

This patch adds code to populate the documented path (should it exist)
with information about the XENIFACE driver package.

Suggested-by: Owen Smith <owen.smith@citrix.com>
Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/xeniface/fdo.c | 445 ++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 405 insertions(+), 40 deletions(-)

diff --git a/src/xeniface/fdo.c b/src/xeniface/fdo.c
index c1467b7..d30a08b 100644
--- a/src/xeniface/fdo.c
+++ b/src/xeniface/fdo.c
@@ -40,7 +40,7 @@
 #include <evtchn_interface.h>
 #include <gnttab_interface.h>
 #include <suspend_interface.h>
-
+#include <version.h>
 
 #include "driver.h"
 #include "registry.h"
@@ -570,16 +570,359 @@ FdoParseResources(
     }
 }
 
+static FORCEINLINE PANSI_STRING
+__FdoMultiSzToUpcaseAnsi(
+    IN  PCHAR       Buffer
+    )
+{
+    PANSI_STRING    Ansi;
+    LONG            Index;
+    LONG            Count;
+    NTSTATUS        status;
+
+    Index = 0;
+    Count = 0;
+    for (;;) {
+        if (Buffer[Index] == '\0') {
+            Count++;
+            Index++;
+
+            // Check for double NUL
+            if (Buffer[Index] == '\0')
+                break;
+        } else {
+            Buffer[Index] = (CHAR)toupper(Buffer[Index]);
+            Index++;
+        }
+    }
+
+    Ansi = __FdoAllocate(sizeof (ANSI_STRING) * (Count + 1));
+
+    status = STATUS_NO_MEMORY;
+    if (Ansi == NULL)
+        goto fail1;
+
+    for (Index = 0; Index < Count; Index++) {
+        ULONG   Length;
+
+        Length = (ULONG)strlen(Buffer);
+        Ansi[Index].MaximumLength = (USHORT)(Length + 1);
+        Ansi[Index].Buffer = __FdoAllocate(Ansi[Index].MaximumLength);
+
+        status = STATUS_NO_MEMORY;
+        if (Ansi[Index].Buffer == NULL)
+            goto fail2;
+
+        RtlCopyMemory(Ansi[Index].Buffer, Buffer, Length);
+        Ansi[Index].Length = (USHORT)Length;
+
+        Buffer += Length + 1;
+    }
+
+    return Ansi;
+
+fail2:
+    Error("fail2\n");
+
+    while (--Index >= 0)
+        __FdoFree(Ansi[Index].Buffer);
+
+    __FdoFree(Ansi);
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return NULL;
+}
+
+static FORCEINLINE VOID
+__FdoFreeAnsi(
+    IN  PANSI_STRING    Ansi
+    )
+{
+    ULONG               Index;
+
+    for (Index = 0; Ansi[Index].Buffer != NULL; Index++)
+        __FdoFree(Ansi[Index].Buffer);
+        
+    __FdoFree(Ansi);
+}
+
+static FORCEINLINE BOOLEAN
+__FdoMatchDistribution(
+    IN  PXENIFACE_FDO   Fdo,
+    IN  PCHAR           Buffer
+    )
+{
+    PCHAR               Vendor;
+    PCHAR               Product;
+    PCHAR               Context;
+    const CHAR          *Text;
+    BOOLEAN             Match;
+    ULONG               Index;
+    NTSTATUS            status;
+
+    UNREFERENCED_PARAMETER(Fdo);
+
+    status = STATUS_INVALID_PARAMETER;
+
+    Vendor = __strtok_r(Buffer, " ", &Context);
+    if (Vendor == NULL)
+        goto fail1;
+
+    Product = __strtok_r(NULL, " ", &Context);
+    if (Product == NULL)
+        goto fail2;
+
+    Match = TRUE;
+
+    Text = VENDOR_NAME_STR;
+
+    for (Index = 0; Text[Index] != 0; Index++) {
+        if (!isalnum((UCHAR)Text[Index])) {
+            if (Vendor[Index] != '_') {
+                Match = FALSE;
+                break;
+            }
+        } else {
+            if (Vendor[Index] != Text[Index]) {
+                Match = FALSE;
+                break;
+            }
+        }
+    }
+
+    Text = "XENIFACE";
+
+    if (_stricmp(Product, Text) != 0)
+        Match = FALSE;
+
+    return Match;
+
+fail2:
+    Error("fail2\n");
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return FALSE;
+}
+
+static VOID
+FdoClearDistribution(
+    IN  PXENIFACE_FDO   Fdo
+    )
+{
+    PCHAR               Buffer;
+    PANSI_STRING        Distributions;
+    ULONG               Index;
+    NTSTATUS            status;
+
+    Trace("====>\n");
+
+    status = XENBUS_STORE(Directory,
+                          &Fdo->StoreInterface,
+                          NULL,
+                          NULL,
+                          "drivers",
+                          &Buffer);
+    if (NT_SUCCESS(status)) {
+        Distributions = __FdoMultiSzToUpcaseAnsi(Buffer);
+
+        XENBUS_STORE(Free,
+                     &Fdo->StoreInterface,
+                     Buffer);
+    } else {
+        Distributions = NULL;
+    }
+
+    if (Distributions == NULL)
+        goto done;
+
+    for (Index = 0; Distributions[Index].Buffer != NULL; Index++) {
+        PANSI_STRING    Distribution = &Distributions[Index];
+
+        status = XENBUS_STORE(Read,
+                              &Fdo->StoreInterface,
+                              NULL,
+                              "drivers",
+                              Distribution->Buffer,
+                              &Buffer);
+        if (!NT_SUCCESS(status))
+            continue;
+
+        if (__FdoMatchDistribution(Fdo, Buffer))
+            (VOID) XENBUS_STORE(Remove,
+                                &Fdo->StoreInterface,
+                                NULL,
+                                "drivers",
+                                Distribution->Buffer);
+
+        XENBUS_STORE(Free,
+                     &Fdo->StoreInterface,
+                     Buffer);
+    }
+
+    __FdoFreeAnsi(Distributions);
+
+done:
+    Trace("<====\n");
+}
+
+#define MAXIMUM_INDEX   255
+
+static NTSTATUS
+FdoSetDistribution(
+    IN  PXENIFACE_FDO   Fdo
+    )
+{
+    ULONG               Index;
+    CHAR                Distribution[MAXNAMELEN];
+    CHAR                Vendor[MAXNAMELEN];
+    const CHAR          *Product;
+    NTSTATUS            status;
+
+    Trace("====>\n");
+
+    Index = 0;
+    while (Index <= MAXIMUM_INDEX) {
+        PCHAR   Buffer;
+
+        status = RtlStringCbPrintfA(Distribution,
+                                    MAXNAMELEN,
+                                    "%u",
+                                    Index);
+        ASSERT(NT_SUCCESS(status));
+
+        status = XENBUS_STORE(Read,
+                              &Fdo->StoreInterface,
+                              NULL,
+                              "drivers",
+                              Distribution,
+                              &Buffer);
+        if (!NT_SUCCESS(status)) {
+            if (status == STATUS_OBJECT_NAME_NOT_FOUND)
+                goto update;
+
+            goto fail1;
+        }
+
+        XENBUS_STORE(Free,
+                     &Fdo->StoreInterface,
+                     Buffer);
+
+        Index++;
+    }
+
+    status = STATUS_UNSUCCESSFUL;
+    goto fail2;
+
+update:
+    status = RtlStringCbPrintfA(Vendor,
+                                MAXNAMELEN,
+                                "%s",
+                                VENDOR_NAME_STR);
+    ASSERT(NT_SUCCESS(status));
+
+    for (Index  = 0; Vendor[Index] != '\0'; Index++)
+        if (!isalnum((UCHAR)Vendor[Index]))
+            Vendor[Index] = '_';
+
+    Product = "XENIFACE";
+
+#if DBG
+#define ATTRIBUTES   "(DEBUG)"
+#else
+#define ATTRIBUTES   ""
+#endif
+
+    (VOID) XENBUS_STORE(Printf,
+                        &Fdo->StoreInterface,
+                        NULL,
+                        "drivers",
+                        Distribution,
+                        "%s %s %u.%u.%u %s",
+                        Vendor,
+                        Product,
+                        MAJOR_VERSION,
+                        MINOR_VERSION,
+                        MICRO_VERSION,
+                        ATTRIBUTES
+                        );
+
+#undef  ATTRIBUTES
+
+    Trace("<====\n");
+    return STATUS_SUCCESS;
+
+fail2:
+    Error("fail2\n");
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__FdoD3ToD0(
+    IN  PXENIFACE_FDO   Fdo
+    )
+{
+    Trace("====>\n");
+
+    ASSERT3U(KeGetCurrentIrql(), ==, DISPATCH_LEVEL);
+
+    (VOID) FdoSetDistribution(Fdo);
+
+    Trace("<====\n");
+
+    return STATUS_SUCCESS;
+}
+
+static FORCEINLINE VOID
+__FdoD0ToD3(
+    IN  PXENIFACE_FDO   Fdo
+    )
+{
+    Trace("====>\n");
+
+    ASSERT3U(KeGetCurrentIrql(), ==, DISPATCH_LEVEL);
+
+    FdoClearDistribution(Fdo);
+
+    Trace("<====\n");
+}
+
+static DECLSPEC_NOINLINE VOID
+FdoSuspendCallbackLate(
+    IN  PVOID       Argument
+    )
+{
+    PXENIFACE_FDO   Fdo = Argument;
+    NTSTATUS        status;
+
+    __FdoD0ToD3(Fdo);
+
+    status = __FdoD3ToD0(Fdo);
+    ASSERT(NT_SUCCESS(status));
+
+    WmiFireSuspendEvent(Fdo);
+}
+
 static DECLSPEC_NOINLINE NTSTATUS
 FdoD3ToD0(
-    IN  PXENIFACE_FDO Fdo
+    IN  PXENIFACE_FDO   Fdo
     )
 {
-    KIRQL           Irql;
-    NTSTATUS        status;
-    POWER_STATE     PowerState;
+    KIRQL               Irql;
+    NTSTATUS            status;
+    POWER_STATE         PowerState;
 
     ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
+    ASSERT3U(__FdoGetDevicePowerState(Fdo), ==, PowerDeviceD3);
+
+    Trace("====>\n");
 
     KeRaiseIrql(DISPATCH_LEVEL, &Irql);
 
@@ -597,34 +940,42 @@ FdoD3ToD0(
     if (!NT_SUCCESS(status))
         goto fail3;
 
-    status = XENBUS_GNTTAB(CreateCache,
-                           &Fdo->GnttabInterface,
-                           "xeniface-gnttab",
-                           0,
-                           GnttabAcquireLock,
-                           GnttabReleaseLock,
-                           Fdo,
-                           &Fdo->GnttabCache);
+    status = XENBUS_SUSPEND(Acquire, &Fdo->SuspendInterface);
     if (!NT_SUCCESS(status))
         goto fail4;
 
-    status = XENBUS_SUSPEND(Acquire, &Fdo->SuspendInterface);
+    status = XENBUS_SHARED_INFO(Acquire, &Fdo->SharedInfoInterface);
     if (!NT_SUCCESS(status))
         goto fail5;
 
-    status = XENBUS_SHARED_INFO(Acquire, &Fdo->SharedInfoInterface);
+    Fdo->InterfacesAcquired = TRUE;
+
+    status = __FdoD3ToD0(Fdo);
     if (!NT_SUCCESS(status))
         goto fail6;
 
     status = XENBUS_SUSPEND(Register,
                             &Fdo->SuspendInterface,
                             SUSPEND_CALLBACK_LATE,
-                            WmiFireSuspendEvent,
+                            FdoSuspendCallbackLate,
                             Fdo,
                             &Fdo->SuspendCallbackLate);
     if (!NT_SUCCESS(status))
         goto fail7;
 
+    status = XENBUS_GNTTAB(CreateCache,
+                           &Fdo->GnttabInterface,
+                           "xeniface-gnttab",
+                           0,
+                           GnttabAcquireLock,
+                           GnttabReleaseLock,
+                           Fdo,
+                           &Fdo->GnttabCache);
+    if (!NT_SUCCESS(status))
+        goto fail8;
+
+    KeLowerIrql(Irql);
+
     __FdoSetDevicePowerState(Fdo, PowerDeviceD0);
 
     PowerState.DeviceState = PowerDeviceD0;
@@ -632,30 +983,34 @@ FdoD3ToD0(
                     DevicePowerState,
                     PowerState);
 
-    Fdo->InterfacesAcquired = TRUE;
-    KeLowerIrql(Irql);
-
     WmiSessionsResumeAll(Fdo);
 
+    Trace("<====\n");
+
     return STATUS_SUCCESS;
 
+fail8:
+    Error("fail8\n");
+
+    XENBUS_SUSPEND(Deregister,
+                   &Fdo->SuspendInterface,
+                   Fdo->SuspendCallbackLate);
+    Fdo->SuspendCallbackLate = NULL;
+
 fail7:
     Error("fail7\n");
 
-    XENBUS_SHARED_INFO(Release, &Fdo->SharedInfoInterface);
+    __FdoD0ToD3(Fdo);
 
 fail6:
     Error("fail6\n");
 
-    XENBUS_SUSPEND(Release, &Fdo->SuspendInterface);
+    XENBUS_SHARED_INFO(Release, &Fdo->SharedInfoInterface);
 
 fail5:
     Error("fail5\n");
 
-    XENBUS_GNTTAB(DestroyCache,
-                  &Fdo->GnttabInterface,
-                  Fdo->GnttabCache);
-    Fdo->GnttabCache = NULL;
+    XENBUS_SUSPEND(Release, &Fdo->SuspendInterface);
 
 fail4:
     Error("fail4\n");
@@ -682,45 +1037,55 @@ fail1:
 
 static DECLSPEC_NOINLINE VOID
 FdoD0ToD3(
-    IN  PXENIFACE_FDO Fdo
+    IN  PXENIFACE_FDO   Fdo
     )
 {
-    KIRQL           Irql;
-    POWER_STATE     PowerState;
+    KIRQL               Irql;
+    POWER_STATE         PowerState;
 
     ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
+    ASSERT3U(__FdoGetDevicePowerState(Fdo), ==, PowerDeviceD0);
+
+    Trace("====>\n");
 
     WmiSessionsSuspendAll(Fdo);
 
+    PowerState.DeviceState = PowerDeviceD3;
+    PoSetPowerState(Fdo->Dx->DeviceObject,
+                    DevicePowerState,
+                    PowerState);
+
+    __FdoSetDevicePowerState(Fdo, PowerDeviceD3);
+
     KeRaiseIrql(DISPATCH_LEVEL, &Irql);
 
     Fdo->InterfacesAcquired = FALSE;
 
+    XENBUS_GNTTAB(DestroyCache,
+                  &Fdo->GnttabInterface,
+                  Fdo->GnttabCache);
+    Fdo->GnttabCache = NULL;
+
     XENBUS_SUSPEND(Deregister,
                    &Fdo->SuspendInterface,
                    Fdo->SuspendCallbackLate);
     Fdo->SuspendCallbackLate = NULL;
 
+    __FdoD0ToD3(Fdo);
+
     XENBUS_SHARED_INFO(Release, &Fdo->SharedInfoInterface);
-    XENBUS_SUSPEND(Release, &Fdo->SuspendInterface);
 
-    XENBUS_GNTTAB(DestroyCache,
-                  &Fdo->GnttabInterface,
-                  Fdo->GnttabCache);
-    Fdo->GnttabCache = NULL;
+    XENBUS_SUSPEND(Release, &Fdo->SuspendInterface);
 
     XENBUS_GNTTAB(Release, &Fdo->GnttabInterface);
-    XENBUS_EVTCHN(Release, &Fdo->EvtchnInterface);
-    XENBUS_STORE(Release, &Fdo->StoreInterface);
 
-    PowerState.DeviceState = PowerDeviceD3;
-    PoSetPowerState(Fdo->Dx->DeviceObject,
-                    DevicePowerState,
-                    PowerState);
+    XENBUS_EVTCHN(Release, &Fdo->EvtchnInterface);
 
-    __FdoSetDevicePowerState(Fdo, PowerDeviceD3);
+    XENBUS_STORE(Release, &Fdo->StoreInterface);
 
     KeLowerIrql(Irql);
+
+    Trace("<====\n");
 }
 
 static DECLSPEC_NOINLINE VOID
-- 
2.1.1


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

From win-pv-devel-bounces@lists.xenproject.org Wed Nov 25 14:28:48 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 25 Nov 2015 14:28:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1a1b3v-0006hN-Kt; Wed, 25 Nov 2015 14:28:47 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1a1b3u-0006h3-G3
	for win-pv-devel@lists.xenproject.org; Wed, 25 Nov 2015 14:28:46 +0000
Received: from [85.158.139.211] by server-9.bemta-5.messagelabs.com id
	AE/C1-30270-D95C5565; Wed, 25 Nov 2015 14:28:45 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-3.tower-206.messagelabs.com!1448461725!6390220!1
X-Originating-IP: [74.125.82.52]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 59674 invoked from network); 25 Nov 2015 14:28:45 -0000
Received: from mail-wm0-f52.google.com (HELO mail-wm0-f52.google.com)
	(74.125.82.52)
	by server-3.tower-206.messagelabs.com with AES128-GCM-SHA256 encrypted
	SMTP; 25 Nov 2015 14:28:45 -0000
Received: by wmww144 with SMTP id w144so182374300wmw.1
	for <win-pv-devel@lists.xenproject.org>;
	Wed, 25 Nov 2015 06:28:44 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=DMrmYotmCLoWlr3ehu7EbhnS62Qu1RmDxyjunU3vf+g=;
	b=F9AvzsCK31mux2kUcqTvcfX88fbpcM2tCx40L5+Le2U15ZVCBeaimPniKT8xcFCJHE
	FuZPodDSWdOw690bCBlyueXTaNEJR3iDmnck5WwxPUk6XDm9+o4yE2tvKQMU18Cp6/WI
	6Ro9h4k5UWyzrVg49S78z2mD8wEF73HIQn5Xj7WeEihpUv6bsy3iP9qv39if2s5P0Lqo
	wrBVHTIP0vd5e/iec68mAh6BiGqTeuFCdmO4sRMV/tKKRB4BfaVSyK8lOlxrSejKZz0M
	9MQbjMEPa7jUxbwqlDYMCbNtGre2fCBe9KTdTjnD9OWrhqPR8eumNEDcSqi4BUnhZUW4
	uGCg==
X-Received: by 10.28.101.195 with SMTP id z186mr5284879wmb.52.1448461724786;
	Wed, 25 Nov 2015 06:28:44 -0800 (PST)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id q9sm10594089wjo.9.2015.11.25.06.28.43
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Wed, 25 Nov 2015 06:28:44 -0800 (PST)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Wed, 25 Nov 2015 14:28:30 +0000
Message-Id: <1448461710-4700-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH] Publish distribution information to xenstore
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

My recent patch series to Xen added a documented path and format for
publishing information about PV driver distributions to xenstore.

This patch adds code to populate the documented path (should it exist)
with information about the XENIFACE driver package.

Suggested-by: Owen Smith <owen.smith@citrix.com>
Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/xeniface/fdo.c | 445 ++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 405 insertions(+), 40 deletions(-)

diff --git a/src/xeniface/fdo.c b/src/xeniface/fdo.c
index c1467b7..d30a08b 100644
--- a/src/xeniface/fdo.c
+++ b/src/xeniface/fdo.c
@@ -40,7 +40,7 @@
 #include <evtchn_interface.h>
 #include <gnttab_interface.h>
 #include <suspend_interface.h>
-
+#include <version.h>
 
 #include "driver.h"
 #include "registry.h"
@@ -570,16 +570,359 @@ FdoParseResources(
     }
 }
 
+static FORCEINLINE PANSI_STRING
+__FdoMultiSzToUpcaseAnsi(
+    IN  PCHAR       Buffer
+    )
+{
+    PANSI_STRING    Ansi;
+    LONG            Index;
+    LONG            Count;
+    NTSTATUS        status;
+
+    Index = 0;
+    Count = 0;
+    for (;;) {
+        if (Buffer[Index] == '\0') {
+            Count++;
+            Index++;
+
+            // Check for double NUL
+            if (Buffer[Index] == '\0')
+                break;
+        } else {
+            Buffer[Index] = (CHAR)toupper(Buffer[Index]);
+            Index++;
+        }
+    }
+
+    Ansi = __FdoAllocate(sizeof (ANSI_STRING) * (Count + 1));
+
+    status = STATUS_NO_MEMORY;
+    if (Ansi == NULL)
+        goto fail1;
+
+    for (Index = 0; Index < Count; Index++) {
+        ULONG   Length;
+
+        Length = (ULONG)strlen(Buffer);
+        Ansi[Index].MaximumLength = (USHORT)(Length + 1);
+        Ansi[Index].Buffer = __FdoAllocate(Ansi[Index].MaximumLength);
+
+        status = STATUS_NO_MEMORY;
+        if (Ansi[Index].Buffer == NULL)
+            goto fail2;
+
+        RtlCopyMemory(Ansi[Index].Buffer, Buffer, Length);
+        Ansi[Index].Length = (USHORT)Length;
+
+        Buffer += Length + 1;
+    }
+
+    return Ansi;
+
+fail2:
+    Error("fail2\n");
+
+    while (--Index >= 0)
+        __FdoFree(Ansi[Index].Buffer);
+
+    __FdoFree(Ansi);
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return NULL;
+}
+
+static FORCEINLINE VOID
+__FdoFreeAnsi(
+    IN  PANSI_STRING    Ansi
+    )
+{
+    ULONG               Index;
+
+    for (Index = 0; Ansi[Index].Buffer != NULL; Index++)
+        __FdoFree(Ansi[Index].Buffer);
+        
+    __FdoFree(Ansi);
+}
+
+static FORCEINLINE BOOLEAN
+__FdoMatchDistribution(
+    IN  PXENIFACE_FDO   Fdo,
+    IN  PCHAR           Buffer
+    )
+{
+    PCHAR               Vendor;
+    PCHAR               Product;
+    PCHAR               Context;
+    const CHAR          *Text;
+    BOOLEAN             Match;
+    ULONG               Index;
+    NTSTATUS            status;
+
+    UNREFERENCED_PARAMETER(Fdo);
+
+    status = STATUS_INVALID_PARAMETER;
+
+    Vendor = __strtok_r(Buffer, " ", &Context);
+    if (Vendor == NULL)
+        goto fail1;
+
+    Product = __strtok_r(NULL, " ", &Context);
+    if (Product == NULL)
+        goto fail2;
+
+    Match = TRUE;
+
+    Text = VENDOR_NAME_STR;
+
+    for (Index = 0; Text[Index] != 0; Index++) {
+        if (!isalnum((UCHAR)Text[Index])) {
+            if (Vendor[Index] != '_') {
+                Match = FALSE;
+                break;
+            }
+        } else {
+            if (Vendor[Index] != Text[Index]) {
+                Match = FALSE;
+                break;
+            }
+        }
+    }
+
+    Text = "XENIFACE";
+
+    if (_stricmp(Product, Text) != 0)
+        Match = FALSE;
+
+    return Match;
+
+fail2:
+    Error("fail2\n");
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return FALSE;
+}
+
+static VOID
+FdoClearDistribution(
+    IN  PXENIFACE_FDO   Fdo
+    )
+{
+    PCHAR               Buffer;
+    PANSI_STRING        Distributions;
+    ULONG               Index;
+    NTSTATUS            status;
+
+    Trace("====>\n");
+
+    status = XENBUS_STORE(Directory,
+                          &Fdo->StoreInterface,
+                          NULL,
+                          NULL,
+                          "drivers",
+                          &Buffer);
+    if (NT_SUCCESS(status)) {
+        Distributions = __FdoMultiSzToUpcaseAnsi(Buffer);
+
+        XENBUS_STORE(Free,
+                     &Fdo->StoreInterface,
+                     Buffer);
+    } else {
+        Distributions = NULL;
+    }
+
+    if (Distributions == NULL)
+        goto done;
+
+    for (Index = 0; Distributions[Index].Buffer != NULL; Index++) {
+        PANSI_STRING    Distribution = &Distributions[Index];
+
+        status = XENBUS_STORE(Read,
+                              &Fdo->StoreInterface,
+                              NULL,
+                              "drivers",
+                              Distribution->Buffer,
+                              &Buffer);
+        if (!NT_SUCCESS(status))
+            continue;
+
+        if (__FdoMatchDistribution(Fdo, Buffer))
+            (VOID) XENBUS_STORE(Remove,
+                                &Fdo->StoreInterface,
+                                NULL,
+                                "drivers",
+                                Distribution->Buffer);
+
+        XENBUS_STORE(Free,
+                     &Fdo->StoreInterface,
+                     Buffer);
+    }
+
+    __FdoFreeAnsi(Distributions);
+
+done:
+    Trace("<====\n");
+}
+
+#define MAXIMUM_INDEX   255
+
+static NTSTATUS
+FdoSetDistribution(
+    IN  PXENIFACE_FDO   Fdo
+    )
+{
+    ULONG               Index;
+    CHAR                Distribution[MAXNAMELEN];
+    CHAR                Vendor[MAXNAMELEN];
+    const CHAR          *Product;
+    NTSTATUS            status;
+
+    Trace("====>\n");
+
+    Index = 0;
+    while (Index <= MAXIMUM_INDEX) {
+        PCHAR   Buffer;
+
+        status = RtlStringCbPrintfA(Distribution,
+                                    MAXNAMELEN,
+                                    "%u",
+                                    Index);
+        ASSERT(NT_SUCCESS(status));
+
+        status = XENBUS_STORE(Read,
+                              &Fdo->StoreInterface,
+                              NULL,
+                              "drivers",
+                              Distribution,
+                              &Buffer);
+        if (!NT_SUCCESS(status)) {
+            if (status == STATUS_OBJECT_NAME_NOT_FOUND)
+                goto update;
+
+            goto fail1;
+        }
+
+        XENBUS_STORE(Free,
+                     &Fdo->StoreInterface,
+                     Buffer);
+
+        Index++;
+    }
+
+    status = STATUS_UNSUCCESSFUL;
+    goto fail2;
+
+update:
+    status = RtlStringCbPrintfA(Vendor,
+                                MAXNAMELEN,
+                                "%s",
+                                VENDOR_NAME_STR);
+    ASSERT(NT_SUCCESS(status));
+
+    for (Index  = 0; Vendor[Index] != '\0'; Index++)
+        if (!isalnum((UCHAR)Vendor[Index]))
+            Vendor[Index] = '_';
+
+    Product = "XENIFACE";
+
+#if DBG
+#define ATTRIBUTES   "(DEBUG)"
+#else
+#define ATTRIBUTES   ""
+#endif
+
+    (VOID) XENBUS_STORE(Printf,
+                        &Fdo->StoreInterface,
+                        NULL,
+                        "drivers",
+                        Distribution,
+                        "%s %s %u.%u.%u %s",
+                        Vendor,
+                        Product,
+                        MAJOR_VERSION,
+                        MINOR_VERSION,
+                        MICRO_VERSION,
+                        ATTRIBUTES
+                        );
+
+#undef  ATTRIBUTES
+
+    Trace("<====\n");
+    return STATUS_SUCCESS;
+
+fail2:
+    Error("fail2\n");
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__FdoD3ToD0(
+    IN  PXENIFACE_FDO   Fdo
+    )
+{
+    Trace("====>\n");
+
+    ASSERT3U(KeGetCurrentIrql(), ==, DISPATCH_LEVEL);
+
+    (VOID) FdoSetDistribution(Fdo);
+
+    Trace("<====\n");
+
+    return STATUS_SUCCESS;
+}
+
+static FORCEINLINE VOID
+__FdoD0ToD3(
+    IN  PXENIFACE_FDO   Fdo
+    )
+{
+    Trace("====>\n");
+
+    ASSERT3U(KeGetCurrentIrql(), ==, DISPATCH_LEVEL);
+
+    FdoClearDistribution(Fdo);
+
+    Trace("<====\n");
+}
+
+static DECLSPEC_NOINLINE VOID
+FdoSuspendCallbackLate(
+    IN  PVOID       Argument
+    )
+{
+    PXENIFACE_FDO   Fdo = Argument;
+    NTSTATUS        status;
+
+    __FdoD0ToD3(Fdo);
+
+    status = __FdoD3ToD0(Fdo);
+    ASSERT(NT_SUCCESS(status));
+
+    WmiFireSuspendEvent(Fdo);
+}
+
 static DECLSPEC_NOINLINE NTSTATUS
 FdoD3ToD0(
-    IN  PXENIFACE_FDO Fdo
+    IN  PXENIFACE_FDO   Fdo
     )
 {
-    KIRQL           Irql;
-    NTSTATUS        status;
-    POWER_STATE     PowerState;
+    KIRQL               Irql;
+    NTSTATUS            status;
+    POWER_STATE         PowerState;
 
     ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
+    ASSERT3U(__FdoGetDevicePowerState(Fdo), ==, PowerDeviceD3);
+
+    Trace("====>\n");
 
     KeRaiseIrql(DISPATCH_LEVEL, &Irql);
 
@@ -597,34 +940,42 @@ FdoD3ToD0(
     if (!NT_SUCCESS(status))
         goto fail3;
 
-    status = XENBUS_GNTTAB(CreateCache,
-                           &Fdo->GnttabInterface,
-                           "xeniface-gnttab",
-                           0,
-                           GnttabAcquireLock,
-                           GnttabReleaseLock,
-                           Fdo,
-                           &Fdo->GnttabCache);
+    status = XENBUS_SUSPEND(Acquire, &Fdo->SuspendInterface);
     if (!NT_SUCCESS(status))
         goto fail4;
 
-    status = XENBUS_SUSPEND(Acquire, &Fdo->SuspendInterface);
+    status = XENBUS_SHARED_INFO(Acquire, &Fdo->SharedInfoInterface);
     if (!NT_SUCCESS(status))
         goto fail5;
 
-    status = XENBUS_SHARED_INFO(Acquire, &Fdo->SharedInfoInterface);
+    Fdo->InterfacesAcquired = TRUE;
+
+    status = __FdoD3ToD0(Fdo);
     if (!NT_SUCCESS(status))
         goto fail6;
 
     status = XENBUS_SUSPEND(Register,
                             &Fdo->SuspendInterface,
                             SUSPEND_CALLBACK_LATE,
-                            WmiFireSuspendEvent,
+                            FdoSuspendCallbackLate,
                             Fdo,
                             &Fdo->SuspendCallbackLate);
     if (!NT_SUCCESS(status))
         goto fail7;
 
+    status = XENBUS_GNTTAB(CreateCache,
+                           &Fdo->GnttabInterface,
+                           "xeniface-gnttab",
+                           0,
+                           GnttabAcquireLock,
+                           GnttabReleaseLock,
+                           Fdo,
+                           &Fdo->GnttabCache);
+    if (!NT_SUCCESS(status))
+        goto fail8;
+
+    KeLowerIrql(Irql);
+
     __FdoSetDevicePowerState(Fdo, PowerDeviceD0);
 
     PowerState.DeviceState = PowerDeviceD0;
@@ -632,30 +983,34 @@ FdoD3ToD0(
                     DevicePowerState,
                     PowerState);
 
-    Fdo->InterfacesAcquired = TRUE;
-    KeLowerIrql(Irql);
-
     WmiSessionsResumeAll(Fdo);
 
+    Trace("<====\n");
+
     return STATUS_SUCCESS;
 
+fail8:
+    Error("fail8\n");
+
+    XENBUS_SUSPEND(Deregister,
+                   &Fdo->SuspendInterface,
+                   Fdo->SuspendCallbackLate);
+    Fdo->SuspendCallbackLate = NULL;
+
 fail7:
     Error("fail7\n");
 
-    XENBUS_SHARED_INFO(Release, &Fdo->SharedInfoInterface);
+    __FdoD0ToD3(Fdo);
 
 fail6:
     Error("fail6\n");
 
-    XENBUS_SUSPEND(Release, &Fdo->SuspendInterface);
+    XENBUS_SHARED_INFO(Release, &Fdo->SharedInfoInterface);
 
 fail5:
     Error("fail5\n");
 
-    XENBUS_GNTTAB(DestroyCache,
-                  &Fdo->GnttabInterface,
-                  Fdo->GnttabCache);
-    Fdo->GnttabCache = NULL;
+    XENBUS_SUSPEND(Release, &Fdo->SuspendInterface);
 
 fail4:
     Error("fail4\n");
@@ -682,45 +1037,55 @@ fail1:
 
 static DECLSPEC_NOINLINE VOID
 FdoD0ToD3(
-    IN  PXENIFACE_FDO Fdo
+    IN  PXENIFACE_FDO   Fdo
     )
 {
-    KIRQL           Irql;
-    POWER_STATE     PowerState;
+    KIRQL               Irql;
+    POWER_STATE         PowerState;
 
     ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
+    ASSERT3U(__FdoGetDevicePowerState(Fdo), ==, PowerDeviceD0);
+
+    Trace("====>\n");
 
     WmiSessionsSuspendAll(Fdo);
 
+    PowerState.DeviceState = PowerDeviceD3;
+    PoSetPowerState(Fdo->Dx->DeviceObject,
+                    DevicePowerState,
+                    PowerState);
+
+    __FdoSetDevicePowerState(Fdo, PowerDeviceD3);
+
     KeRaiseIrql(DISPATCH_LEVEL, &Irql);
 
     Fdo->InterfacesAcquired = FALSE;
 
+    XENBUS_GNTTAB(DestroyCache,
+                  &Fdo->GnttabInterface,
+                  Fdo->GnttabCache);
+    Fdo->GnttabCache = NULL;
+
     XENBUS_SUSPEND(Deregister,
                    &Fdo->SuspendInterface,
                    Fdo->SuspendCallbackLate);
     Fdo->SuspendCallbackLate = NULL;
 
+    __FdoD0ToD3(Fdo);
+
     XENBUS_SHARED_INFO(Release, &Fdo->SharedInfoInterface);
-    XENBUS_SUSPEND(Release, &Fdo->SuspendInterface);
 
-    XENBUS_GNTTAB(DestroyCache,
-                  &Fdo->GnttabInterface,
-                  Fdo->GnttabCache);
-    Fdo->GnttabCache = NULL;
+    XENBUS_SUSPEND(Release, &Fdo->SuspendInterface);
 
     XENBUS_GNTTAB(Release, &Fdo->GnttabInterface);
-    XENBUS_EVTCHN(Release, &Fdo->EvtchnInterface);
-    XENBUS_STORE(Release, &Fdo->StoreInterface);
 
-    PowerState.DeviceState = PowerDeviceD3;
-    PoSetPowerState(Fdo->Dx->DeviceObject,
-                    DevicePowerState,
-                    PowerState);
+    XENBUS_EVTCHN(Release, &Fdo->EvtchnInterface);
 
-    __FdoSetDevicePowerState(Fdo, PowerDeviceD3);
+    XENBUS_STORE(Release, &Fdo->StoreInterface);
 
     KeLowerIrql(Irql);
+
+    Trace("<====\n");
 }
 
 static DECLSPEC_NOINLINE VOID
-- 
2.1.1


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

From win-pv-devel-bounces@lists.xenproject.org Thu Nov 26 14:19:37 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 26 Nov 2015 14:19:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1a1xOa-0007Z3-0k; Thu, 26 Nov 2015 14:19:36 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1a1xOY-0007Yo-Gb
	for win-pv-devel@lists.xenproject.org; Thu, 26 Nov 2015 14:19:34 +0000
Received: from [85.158.139.211] by server-14.bemta-5.messagelabs.com id
	EA/E2-22142-5F417565; Thu, 26 Nov 2015 14:19:33 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-16.tower-206.messagelabs.com!1448547572!6723592!1
X-Originating-IP: [74.125.82.44]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 28980 invoked from network); 26 Nov 2015 14:19:32 -0000
Received: from mail-wm0-f44.google.com (HELO mail-wm0-f44.google.com)
	(74.125.82.44)
	by server-16.tower-206.messagelabs.com with AES128-GCM-SHA256 encrypted
	SMTP; 26 Nov 2015 14:19:32 -0000
Received: by wmww144 with SMTP id w144so24364496wmw.0
	for <win-pv-devel@lists.xenproject.org>;
	Thu, 26 Nov 2015 06:19:32 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id:in-reply-to:references;
	bh=rk6uE7uaXHtyubW3hXGQUcwbOQijALyTaraqswos5Hc=;
	b=LKncvNjvuQThWA5ydNg4C7hRXQHS+8Y3AK5Ogax2f8ZDMo0OdIvxOj7zzLQzQKtYxi
	hwD9xcLwvJ82K+3SBZynDbKWd8FKCbaB6l+KkIJQ8/dcmz3Vd1QxbbDsJikQ7o+9KF4F
	1r2819SeFKMA/CtimAt5+qpyOBlSiwtgaJg64Lms+/wkh9M10E5wJDIFNaOQtVCYSGhm
	0DPrIGnl32ipkpNFIQ/XQk/Rxmgucc2YXerpqoui1CqkrSX426fHUnKxPBcUdBWzvGC8
	vcUfz/De336kHwgx9BvZrHCmVw5qY3/FHy3GFkGxYIGV3tRepRaq+wi/NHWBQw4Y0pRZ
	1P2g==
X-Received: by 10.194.71.104 with SMTP id t8mr48122599wju.177.1448547572680;
	Thu, 26 Nov 2015 06:19:32 -0800 (PST)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	m191sm2944792wma.3.2015.11.26.06.19.31
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Thu, 26 Nov 2015 06:19:32 -0800 (PST)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Thu, 26 Nov 2015 14:19:18 +0000
Message-Id: <1448547558-11436-2-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
In-Reply-To: <1448547558-11436-1-git-send-email-paul.durrant@citrix.com>
References: <1448547558-11436-1-git-send-email-paul.durrant@citrix.com>
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH 2/2] Remove defunct XENFILT_PVDEVICE interface
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

Nothing should now need this interface so the code can be removed.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 include/pvdevice_interface.h   | 132 ------------
 src/xenbus/fdo.c               |   1 -
 src/xenfilt/driver.c           | 137 +++++++------
 src/xenfilt/driver.h           |  13 +-
 src/xenfilt/pdo.c              |  45 +----
 src/xenfilt/pvdevice.c         | 447 -----------------------------------------
 src/xenfilt/pvdevice.h         |  59 ------
 vs2012/xenfilt/xenfilt.vcxproj |   1 -
 vs2013/xenfilt/xenfilt.vcxproj |   1 -
 9 files changed, 81 insertions(+), 755 deletions(-)
 delete mode 100644 include/pvdevice_interface.h
 delete mode 100644 src/xenfilt/pvdevice.c
 delete mode 100644 src/xenfilt/pvdevice.h

diff --git a/include/pvdevice_interface.h b/include/pvdevice_interface.h
deleted file mode 100644
index 9024396..0000000
--- a/include/pvdevice_interface.h
+++ /dev/null
@@ -1,132 +0,0 @@
-/* Copyright (c) Citrix Systems Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms,
- * with or without modification, are permitted provided
- * that the following conditions are met:
- *
- * *   Redistributions of source code must retain the above
- *     copyright notice, this list of conditions and the
- *     following disclaimer.
- * *   Redistributions in binary form must reproduce the above
- *     copyright notice, this list of conditions and the
- *     following disclaimer in the documentation and/or other
- *     materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*! \file pvdevice_interface.h
-    \brief XENFILT PVDEVICE Interface
-
-    This interface provides primitives to determine whether a pvdevice
-    device is active (and claim the active device id if not)
-*/
-
-#ifndef _XENFILT_PVDEVICE_INTERFACE_H
-#define _XENFILT_PVDEVICE_INTERFACE_H
-
-#ifndef _WINDLL
-
-/*! \typedef XENFILT_PVDEVICE_ACQUIRE
-    \brief Acquire a reference to the PVDEVICE interface
-
-    \param Interface The interface header
-*/
-typedef NTSTATUS
-(*XENFILT_PVDEVICE_ACQUIRE)(
-    IN  PINTERFACE  Interface
-    );
-
-/*! \typedef XENFILT_PVDEVICE_RELEASE
-    \brief Release a reference to the PVDEVICE interface
-
-    \param Interface The interface header
-*/
-typedef VOID
-(*XENFILT_PVDEVICE_RELEASE)(
-    IN  PINTERFACE  Interface
-    );
-
-/*! \typedef XENFILT_PVDEVICE_GET_ACTIVE
-    \brief Get the active device instance
-
-    \param Interface The interface header
-    \param DeviceID A buffer of length MAXNAMELEN to receive the device id
-    \param InstanceID A buffer of length MAXNAMELEN to receive the instance id
-*/
-typedef NTSTATUS
-(*XENFILT_PVDEVICE_GET_ACTIVE)(
-    IN  PVOID   Context,
-    OUT PCHAR   DeviceID,
-    OUT PCHAR   InstanceID
-    );
-
-/*! \typedef XENFILT_PVDEVICE_SET_ACTIVE
-    \brief Set the active device instance
-
-    \param Interface The interface header
-    \param DeviceID Buffer containing the device id
-    \param InstanceID Buffer containing the instance id
-*/
-typedef NTSTATUS
-(*XENFILT_PVDEVICE_SET_ACTIVE)(
-    IN  PVOID   Context,
-    IN  PCHAR   DeviceID,
-    IN  PCHAR   InstanceID
-    );
-
-/*! \typedef XENFILT_PVDEVICE_CLEAR_ACTIVE
-    \brief Clear the active device instance
-
-    \param Interface The interface header
-*/
-typedef NTSTATUS
-(*XENFILT_PVDEVICE_CLEAR_ACTIVE)(
-    IN  PVOID   Context
-    );
-
-// {7d09b250-898f-4fea-b7fa-e0490e46f95f}
-DEFINE_GUID(GUID_XENFILT_PVDEVICE_INTERFACE,
-0x7d09b250, 0x898f, 0x4fea, 0xb7, 0xfa, 0xe0, 0x49, 0x0e, 0x46, 0xf9, 0x5f);
-
-/*! \struct _XENFILT_PVDEVICE_INTERFACE_V1
-    \brief PVDEVICE interface version 1
-    \ingroup interfaces
-*/
-struct _XENFILT_PVDEVICE_INTERFACE_V1 {
-    INTERFACE                       Interface;
-    XENFILT_PVDEVICE_ACQUIRE        PvdeviceAcquire;
-    XENFILT_PVDEVICE_RELEASE        PvdeviceRelease;
-    XENFILT_PVDEVICE_GET_ACTIVE     PvdeviceGetActive;
-    XENFILT_PVDEVICE_SET_ACTIVE     PvdeviceSetActive;
-    XENFILT_PVDEVICE_CLEAR_ACTIVE   PvdeviceClearActive;
-};
-
-typedef struct _XENFILT_PVDEVICE_INTERFACE_V1 XENFILT_PVDEVICE_INTERFACE, *PXENFILT_PVDEVICE_INTERFACE;
-
-/*! \def XENFILT_PVDEVICE
-    \brief Macro at assist in method invocation
-*/
-#define XENFILT_PVDEVICE(_Method, _Interface, ...)    \
-    (_Interface)->Pvdevice ## _Method((PINTERFACE)(_Interface), __VA_ARGS__)
-
-#endif  // _WINDLL
-
-#define XENFILT_PVDEVICE_INTERFACE_VERSION_MIN  1
-#define XENFILT_PVDEVICE_INTERFACE_VERSION_MAX  1
-
-#endif  // _XENFILT_PVDEVICE_INTERFACE_H
diff --git a/src/xenbus/fdo.c b/src/xenbus/fdo.c
index 49ae08d..ce4840c 100644
--- a/src/xenbus/fdo.c
+++ b/src/xenbus/fdo.c
@@ -38,7 +38,6 @@
 #include <stdlib.h>
 #include <xen.h>
 
-#include <pvdevice_interface.h>
 #include <version.h>
 
 #include "names.h"
diff --git a/src/xenfilt/driver.c b/src/xenfilt/driver.c
index 342d2b2..bfc96ee 100644
--- a/src/xenfilt/driver.c
+++ b/src/xenfilt/driver.c
@@ -39,7 +39,6 @@
 #include "pdo.h"
 #include "driver.h"
 #include "emulated.h"
-#include "pvdevice.h"
 #include "mutex.h"
 #include "dbg_print.h"
 #include "assert.h"
@@ -60,9 +59,6 @@ typedef struct _XENFILT_DRIVER {
 
     PXENFILT_EMULATED_CONTEXT   EmulatedContext;
     XENFILT_EMULATED_INTERFACE  EmulatedInterface;
-
-    PXENFILT_PVDEVICE_CONTEXT   PvdeviceContext;
-    XENFILT_PVDEVICE_INTERFACE  PvdeviceInterface;
 } XENFILT_DRIVER, *PXENFILT_DRIVER;
 
 static XENFILT_DRIVER   Driver;
@@ -158,30 +154,6 @@ DriverGetEmulatedContext(
 }
 
 static FORCEINLINE VOID
-__DriverSetPvdeviceContext(
-    IN  PXENFILT_PVDEVICE_CONTEXT   Context
-    )
-{
-    Driver.PvdeviceContext = Context;
-}
-
-static FORCEINLINE PXENFILT_PVDEVICE_CONTEXT
-__DriverGetPvdeviceContext(
-    VOID
-    )
-{
-    return Driver.PvdeviceContext;
-}
-
-PXENFILT_PVDEVICE_CONTEXT
-DriverGetPvdeviceContext(
-    VOID
-    )
-{
-    return __DriverGetPvdeviceContext();
-}
-
-static FORCEINLINE VOID
 __DriverAcquireMutex(
     VOID
     )
@@ -246,6 +218,74 @@ DriverRemoveFunctionDeviceObject(
     --Driver.References;
 }
 
+static FORCEINLINE NTSTATUS
+__DriverGetActive(
+    OUT PCHAR       DeviceID,
+    OUT PCHAR       InstanceID
+    )
+{
+    HANDLE          ParametersKey;
+    PANSI_STRING    Ansi;
+    NTSTATUS        status;
+
+    Trace("====>\n");
+
+    ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
+
+    ParametersKey = __DriverGetParametersKey();
+
+    status = RegistryQuerySzValue(ParametersKey,
+                                  "ActiveDeviceID",
+                                  NULL,
+                                  &Ansi);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    status = RtlStringCbPrintfA(DeviceID,
+                                MAX_DEVICE_ID_LEN,
+                                "%Z",
+                                &Ansi[0]);
+    ASSERT(NT_SUCCESS(status));
+
+    RegistryFreeSzValue(Ansi);
+
+    status = RegistryQuerySzValue(ParametersKey,
+                                  "ActiveInstanceID",
+                                  NULL,
+                                  &Ansi);
+    if (!NT_SUCCESS(status))
+        goto fail2;
+
+    status = RtlStringCbPrintfA(InstanceID,
+                                MAX_DEVICE_ID_LEN,
+                                "%Z",
+                                &Ansi[0]);
+    ASSERT(NT_SUCCESS(status));
+
+    RegistryFreeSzValue(Ansi);
+
+    Trace("<====\n");
+
+    return STATUS_SUCCESS;
+
+fail2:
+    Error("fail2\n");
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return status;
+}
+
+NTSTATUS
+DriverGetActive(
+    OUT PCHAR       DeviceID,
+    OUT PCHAR       InstanceID
+    )
+{
+    return __DriverGetActive(DeviceID, InstanceID);
+}
+
 static BOOLEAN
 DriverIsActivePresent(
     VOID
@@ -256,20 +296,14 @@ DriverIsActivePresent(
     BOOLEAN     Present;
     NTSTATUS    status;
 
-    status = XENFILT_PVDEVICE(Acquire, &Driver.PvdeviceInterface);
-    if (!NT_SUCCESS(status))
-        goto fail1;
-
     status = XENFILT_EMULATED(Acquire, &Driver.EmulatedInterface);
     if (!NT_SUCCESS(status))
-        goto fail2;
+        goto fail1;
 
     Present = FALSE;
 
-    status = XENFILT_PVDEVICE(GetActive,
-                              &Driver.PvdeviceInterface,
-                              ActiveDeviceID,
-                              ActiveInstanceID);
+    status = __DriverGetActive(ActiveDeviceID,
+                               ActiveInstanceID);
     if (!NT_SUCCESS(status))
         goto done;
 
@@ -280,13 +314,9 @@ DriverIsActivePresent(
 
 done:
     XENFILT_EMULATED(Release, &Driver.EmulatedInterface);
-    XENFILT_PVDEVICE(Release, &Driver.PvdeviceInterface);
 
     return Present;
 
-fail2:
-    Error("fail2\n");
-
 fail1:
     Error("fail1 (%08x)\n", status);
 
@@ -385,15 +415,9 @@ DriverUnload(
     RtlZeroMemory(&Driver.List, sizeof (LIST_ENTRY));
     RtlZeroMemory(&Driver.Mutex, sizeof (MUTEX));
 
-    RtlZeroMemory(&Driver.PvdeviceInterface,
-                  sizeof (XENFILT_PVDEVICE_INTERFACE));
-
     RtlZeroMemory(&Driver.EmulatedInterface,
                   sizeof (XENFILT_EMULATED_INTERFACE));
 
-    PvdeviceTeardown(Driver.PvdeviceContext);
-    Driver.PvdeviceContext = NULL;
-
     EmulatedTeardown(Driver.EmulatedContext);
     Driver.EmulatedContext = NULL;
 
@@ -654,7 +678,6 @@ DriverEntry(
     HANDLE                      ServiceKey;
     HANDLE                      ParametersKey;
     PXENFILT_EMULATED_CONTEXT   EmulatedContext;
-    PXENFILT_PVDEVICE_CONTEXT   PvdeviceContext;
     ULONG                       Index;
     NTSTATUS                    status;
 
@@ -711,24 +734,12 @@ DriverEntry(
 
     __DriverSetEmulatedContext(EmulatedContext);
 
-    status = PvdeviceInitialize(&PvdeviceContext);
-    if (!NT_SUCCESS(status))
-        goto fail5;
-
-    __DriverSetPvdeviceContext(PvdeviceContext);
-
     status = EmulatedGetInterface(__DriverGetEmulatedContext(),
                                   XENFILT_EMULATED_INTERFACE_VERSION_MAX,
                                   (PINTERFACE)&Driver.EmulatedInterface,
                                   sizeof (Driver.EmulatedInterface));
     ASSERT(NT_SUCCESS(status));
 
-    status = PvdeviceGetInterface(__DriverGetPvdeviceContext(),
-                                  XENFILT_PVDEVICE_INTERFACE_VERSION_MAX,
-                                  (PINTERFACE)&Driver.PvdeviceInterface,
-                                  sizeof (Driver.PvdeviceInterface));
-    ASSERT(NT_SUCCESS(status));
-
     RegistryCloseKey(ServiceKey);
 
     DriverObject->DriverExtension->AddDevice = DriverAddDevice;
@@ -747,12 +758,6 @@ done:
     Trace("<====\n");
     return STATUS_SUCCESS;
 
-fail5:
-    Error("fail5\n");
-
-    EmulatedTeardown(Driver.EmulatedContext);
-    Driver.EmulatedContext = NULL;
-
 fail4:
     Error("fail4\n");
 
diff --git a/src/xenfilt/driver.h b/src/xenfilt/driver.h
index 772436d..c6ae957 100644
--- a/src/xenfilt/driver.h
+++ b/src/xenfilt/driver.h
@@ -52,6 +52,12 @@ DriverReleaseMutex(
     VOID
      );
 
+extern NTSTATUS
+DriverGetActive(
+    OUT PCHAR   DeviceID,
+    OUT PCHAR   InstanceID
+    );
+
 typedef enum _XENFILT_FILTER_STATE {
     XENFILT_FILTER_ENABLED = 0,
     XENFILT_FILTER_PENDING,
@@ -75,13 +81,6 @@ DriverGetEmulatedContext(
     VOID
     );
 
-#include "pvdevice.h"
-
-PXENFILT_PVDEVICE_CONTEXT
-DriverGetPvdeviceContext(
-    VOID
-    );
-
 typedef struct _XENFILT_FDO XENFILT_FDO, *PXENFILT_FDO;
 typedef struct _XENFILT_PDO XENFILT_PDO, *PXENFILT_PDO;
 
diff --git a/src/xenfilt/pdo.c b/src/xenfilt/pdo.c
index e2c8c81..6be7a76 100644
--- a/src/xenfilt/pdo.c
+++ b/src/xenfilt/pdo.c
@@ -37,7 +37,6 @@
 #include <stdlib.h>
 
 #include "emulated.h"
-#include "pvdevice.h"
 #include "names.h"
 #include "fdo.h"
 #include "pdo.h"
@@ -68,8 +67,6 @@ struct _XENFILT_PDO {
 
     XENFILT_EMULATED_OBJECT_TYPE    Type;
     PXENFILT_EMULATED_OBJECT        EmulatedObject;
-
-    XENFILT_PVDEVICE_INTERFACE      PvdeviceInterface;
 };
 
 static FORCEINLINE PVOID
@@ -253,7 +250,7 @@ __PdoGetFdo(
     return Pdo->Fdo;
 }
 
-static NTSTATUS
+static VOID
 PdoSetDeviceInstance(
     IN  PXENFILT_PDO    Pdo,
     IN  PCHAR           DeviceID,
@@ -265,14 +262,8 @@ PdoSetDeviceInstance(
     CHAR                ActiveInstanceID[MAX_DEVICE_ID_LEN];
     NTSTATUS            status;
 
-    status = XENFILT_PVDEVICE(Acquire, &Pdo->PvdeviceInterface);
-    if (!NT_SUCCESS(status))
-        goto fail1;
-
-    status = XENFILT_PVDEVICE(GetActive,
-                              &Pdo->PvdeviceInterface,
-                              ActiveDeviceID,
-                              ActiveInstanceID);
+    status = DriverGetActive(ActiveDeviceID,
+                             ActiveInstanceID);
     if (!NT_SUCCESS(status))
         goto done;
 
@@ -288,8 +279,6 @@ PdoSetDeviceInstance(
     }
 
 done:
-    XENFILT_PVDEVICE(Release, &Pdo->PvdeviceInterface);
-
     status = RtlStringCbPrintfA(Dx->DeviceID,
                                 MAX_DEVICE_ID_LEN,
                                 "%s",
@@ -301,13 +290,6 @@ done:
                                 "%s",
                                 InstanceID);
     ASSERT(NT_SUCCESS(status));
-
-    return STATUS_SUCCESS;
-
-fail1:
-    Error("fail1 (%08x)\n", status);
-
-    return status;
 }
 
 static FORCEINLINE PCHAR
@@ -920,7 +902,6 @@ done:                                                               \
 }                                                                   \
 
 DEFINE_PDO_QUERY_INTERFACE(Emulated)
-DEFINE_PDO_QUERY_INTERFACE(Pvdevice)
 
 struct _INTERFACE_ENTRY {
     const GUID  *Guid;
@@ -933,7 +914,6 @@ struct _INTERFACE_ENTRY {
 
 struct _INTERFACE_ENTRY PdoInterfaceTable[] = {
     DEFINE_INTERFACE_ENTRY(EMULATED_INTERFACE, Emulated),
-    DEFINE_INTERFACE_ENTRY(PVDEVICE_INTERFACE, Pvdevice),
     { NULL, NULL, NULL }
 };
 
@@ -2015,15 +1995,7 @@ PdoCreate(
     if (!NT_SUCCESS(status))
         goto fail6;
 
-    status = PvdeviceGetInterface(DriverGetPvdeviceContext(),
-                                  XENFILT_PVDEVICE_INTERFACE_VERSION_MAX,
-                                  (PINTERFACE)&Pdo->PvdeviceInterface,
-                                  sizeof (Pdo->PvdeviceInterface));
-    ASSERT(NT_SUCCESS(status));
-
-    status = PdoSetDeviceInstance(Pdo, DeviceID, InstanceID);
-    if (!NT_SUCCESS(status))
-        goto fail7;
+    PdoSetDeviceInstance(Pdo, DeviceID, InstanceID);
 
     __PdoSetName(Pdo);
 
@@ -2044,12 +2016,6 @@ PdoCreate(
 
     return STATUS_SUCCESS;
 
-fail7:
-    Error("fail7\n");
-
-    RtlZeroMemory(&Pdo->PvdeviceInterface,
-                  sizeof (XENFILT_PVDEVICE_INTERFACE));
-
 fail6:
     Error("fail6\n");
 
@@ -2119,9 +2085,6 @@ PdoDestroy(
 
     RtlZeroMemory(Pdo->Name, sizeof (Pdo->Name));
 
-    RtlZeroMemory(&Pdo->PvdeviceInterface,
-                  sizeof (XENFILT_PVDEVICE_INTERFACE));
-
     EmulatedRemoveObject(DriverGetEmulatedContext(),
                          Pdo->EmulatedObject);
     Pdo->EmulatedObject = NULL;
diff --git a/src/xenfilt/pvdevice.c b/src/xenfilt/pvdevice.c
deleted file mode 100644
index 179dc3d..0000000
--- a/src/xenfilt/pvdevice.c
+++ /dev/null
@@ -1,447 +0,0 @@
-/* Copyright (c) Citrix Systems Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms,
- * with or without modification, are permitted provided
- * that the following conditions are met:
- *
- * *   Redistributions of source code must retain the above
- *     copyright notice, this list of conditions and the
- *     following disclaimer.
- * *   Redistributions in binary form must reproduce the above
- *     copyright notice, this list of conditions and the
- *     following disclaimer in the documentation and/or other
- *     materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <ntddk.h>
-#include <ntstrsafe.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <xen.h>
-
-#include "driver.h"
-#include "registry.h"
-#include "emulated.h"
-#include "pvdevice.h"
-#include "mutex.h"
-#include "dbg_print.h"
-#include "assert.h"
-#include "util.h"
-
-struct _XENFILT_PVDEVICE_CONTEXT {
-    KSPIN_LOCK                  Lock;
-    LONG                        References;
-    XENFILT_EMULATED_INTERFACE  EmulatedInterface;
-    MUTEX                       Mutex;
-};
-
-#define XENFILT_PVDEVICE_TAG    'EDVP'
-
-static FORCEINLINE PVOID
-__PvdeviceAllocate(
-    IN  ULONG   Length
-    )
-{
-    return __AllocatePoolWithTag(NonPagedPool, Length, XENFILT_PVDEVICE_TAG);
-}
-
-static FORCEINLINE VOID
-__PvdeviceFree(
-    IN  PVOID   Buffer
-    )
-{
-    ExFreePoolWithTag(Buffer, XENFILT_PVDEVICE_TAG);
-}
-
-static const CHAR *PvdeviceLegacyPrefix[] = {
-    "PCI\\VEN_5853&DEV_0001",
-    "PCI\\VEN_5853&DEV_0002",
-    NULL
-};
-
-static BOOLEAN
-PvdeviceIsLegacy(
-    IN  PXENFILT_PVDEVICE_CONTEXT   Context,
-    IN  PCHAR                       DeviceID
-    )
-{
-    ULONG                           Index;
-
-    UNREFERENCED_PARAMETER(Context);
-
-    for (Index = 0; PvdeviceLegacyPrefix[Index] != NULL; Index++) {
-        const CHAR  *Prefix = PvdeviceLegacyPrefix[Index];
-
-        if (_strnicmp(DeviceID, Prefix, strlen(Prefix)) == 0)
-            return TRUE;
-    }
-
-    return FALSE;
-}
-
-static const CHAR *PvdeviceVendorDeviceID[] = {
-#ifdef VENDOR_DEVICE_ID_STR
-    "PCI\\VEN_5853&DEV_" VENDOR_DEVICE_ID_STR "&SUBSYS_C0005853&REV_01",
-#endif
-    NULL
-};
-
-static BOOLEAN
-PvdeviceIsVendorPresent(
-    IN  PXENFILT_PVDEVICE_CONTEXT   Context
-    )
-{
-    ULONG                           Index;
-
-    for (Index = 0; PvdeviceVendorDeviceID[Index] != NULL; Index++) {
-        const CHAR  *DeviceID = PvdeviceVendorDeviceID[Index];
-
-        if (XENFILT_EMULATED(IsDevicePresent,
-                             &Context->EmulatedInterface,
-                             (PCHAR)DeviceID,
-                             NULL))
-            return TRUE;
-    }
-
-    return FALSE;
-}
-
-static NTSTATUS
-PvdeviceGetActive(
-    IN  PINTERFACE              Interface,
-    OUT PCHAR                   DeviceID,
-    OUT PCHAR                   InstanceID
-    )
-{
-    PXENFILT_PVDEVICE_CONTEXT   Context = Interface->Context;
-    HANDLE                      ParametersKey;
-    PANSI_STRING                Ansi;
-    NTSTATUS                    status;
-
-    Trace("====>\n");
-
-    ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
-
-    ParametersKey = DriverGetParametersKey();
-
-    AcquireMutex(&Context->Mutex);
-
-    status = RegistryQuerySzValue(ParametersKey,
-                                  "ActiveDeviceID",
-                                  NULL,
-                                  &Ansi);
-    if (!NT_SUCCESS(status))
-        goto fail1;
-
-    status = RtlStringCbPrintfA(DeviceID,
-                                MAX_DEVICE_ID_LEN,
-                                "%Z",
-                                &Ansi[0]);
-    ASSERT(NT_SUCCESS(status));
-
-    RegistryFreeSzValue(Ansi);
-
-    status = RegistryQuerySzValue(ParametersKey,
-                                  "ActiveInstanceID",
-                                  NULL,
-                                  &Ansi);
-    if (!NT_SUCCESS(status))
-        goto fail2;
-
-    status = RtlStringCbPrintfA(InstanceID,
-                                MAX_DEVICE_ID_LEN,
-                                "%Z",
-                                &Ansi[0]);
-    ASSERT(NT_SUCCESS(status));
-
-    RegistryFreeSzValue(Ansi);
-
-    ReleaseMutex(&Context->Mutex);
-
-    Trace("<====\n");
-
-    return STATUS_SUCCESS;
-
-fail2:
-fail1:
-    ReleaseMutex(&Context->Mutex);
-
-    return status;
-}
-
-static NTSTATUS
-PvdeviceSetActive(
-    IN  PINTERFACE              Interface,
-    IN  PCHAR                   DeviceID,
-    IN  PCHAR                   InstanceID
-    )
-{
-    PXENFILT_PVDEVICE_CONTEXT   Context = Interface->Context;
-    HANDLE                      ParametersKey;
-    ANSI_STRING                 Ansi[2];
-    NTSTATUS                    status;
-
-    Trace("====>\n");
-
-    ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
-
-    ParametersKey = DriverGetParametersKey();
-
-    AcquireMutex(&Context->Mutex);
-
-    status = STATUS_UNSUCCESSFUL;
-    if (PvdeviceIsLegacy(Context, DeviceID) &&
-        PvdeviceIsVendorPresent(Context))
-        goto fail1;
-
-    RtlZeroMemory(Ansi, sizeof (ANSI_STRING) * 2);
-
-    RtlInitAnsiString(&Ansi[0], DeviceID);
-
-    status = RegistryUpdateSzValue(ParametersKey,
-                                   "ActiveDeviceID",
-                                   REG_SZ,
-                                   Ansi);
-    if (!NT_SUCCESS(status))
-        goto fail2;
-
-    RtlInitAnsiString(&Ansi[0], InstanceID);
-
-    status = RegistryUpdateSzValue(ParametersKey,
-                                   "ActiveInstanceID",
-                                   REG_SZ,
-                                   Ansi);
-    if (!NT_SUCCESS(status))
-        goto fail3;
-
-    Info("%s\\%s\n", DeviceID, InstanceID);
-
-    ReleaseMutex(&Context->Mutex);
-
-    Trace("<====\n");
-
-    return STATUS_SUCCESS;
-
-fail3:
-fail2:
-fail1:
-    ReleaseMutex(&Context->Mutex);
-
-    return status;
-}
-
-static NTSTATUS
-PvdeviceClearActive(
-    IN  PINTERFACE              Interface
-    )
-{
-    PXENFILT_PVDEVICE_CONTEXT   Context = Interface->Context;
-    HANDLE                      ParametersKey;
-    NTSTATUS                    status;
-
-    Trace("====>\n");
-
-    ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
-
-    ParametersKey = DriverGetParametersKey();
-
-    AcquireMutex(&Context->Mutex);
-
-    status = RegistryDeleteValue(ParametersKey,
-                                 "ActiveDeviceID");
-    if (!NT_SUCCESS(status))
-        goto fail1;
-
-    status = RegistryDeleteValue(ParametersKey,
-                                 "ActiveInstanceID");
-    if (!NT_SUCCESS(status))
-        goto fail2;
-
-    Info("DONE\n");
-
-    ReleaseMutex(&Context->Mutex);
-
-    Trace("<====\n");
-
-    return STATUS_SUCCESS;
-
-fail2:
-fail1:
-    ReleaseMutex(&Context->Mutex);
-
-    return status;
-}
-
-static NTSTATUS
-PvdeviceAcquire(
-    IN  PINTERFACE              Interface
-    )
-{
-    PXENFILT_PVDEVICE_CONTEXT   Context = Interface->Context;
-    KIRQL                       Irql;
-    NTSTATUS                    status;
-
-    KeAcquireSpinLock(&Context->Lock, &Irql);
-
-    if (Context->References++ != 0)
-        goto done;
-
-    Trace("====>\n");
-
-    status = XENFILT_EMULATED(Acquire, &Context->EmulatedInterface);
-    if (!NT_SUCCESS(status))
-        goto fail1;
-
-    Trace("<====\n");
-
-done:
-    KeReleaseSpinLock(&Context->Lock, Irql);
-
-    return STATUS_SUCCESS;
-
-fail1:
-    Error("fail1 (%08x)\n", status);
-
-    KeReleaseSpinLock(&Context->Lock, Irql);
-
-    return status;
-}
-
-static VOID
-PvdeviceRelease(
-    IN  PINTERFACE              Interface
-    )
-{
-    PXENFILT_PVDEVICE_CONTEXT   Context = Interface->Context;
-    KIRQL                       Irql;
-
-    KeAcquireSpinLock(&Context->Lock, &Irql);
-
-    if (--Context->References > 0)
-        goto done;
-
-    Trace("====>\n");
-
-    XENFILT_EMULATED(Release, &Context->EmulatedInterface);
-
-    Trace("<====\n");
-
-done:
-    KeReleaseSpinLock(&Context->Lock, Irql);
-}
-
-static struct _XENFILT_PVDEVICE_INTERFACE_V1 PvdeviceInterfaceVersion1 = {
-    { sizeof (struct _XENFILT_PVDEVICE_INTERFACE_V1), 1, NULL, NULL, NULL },
-    PvdeviceAcquire,
-    PvdeviceRelease,
-    PvdeviceGetActive,
-    PvdeviceSetActive,
-    PvdeviceClearActive
-};
-
-NTSTATUS
-PvdeviceInitialize(
-    OUT PXENFILT_PVDEVICE_CONTEXT   *Context
-    )
-{
-    NTSTATUS                        status;
-
-    Trace("====>\n");
-
-    *Context = __PvdeviceAllocate(sizeof (XENFILT_PVDEVICE_CONTEXT));
-
-    status = STATUS_NO_MEMORY;
-    if (*Context == NULL)
-        goto fail1;
-
-    status = EmulatedGetInterface(DriverGetEmulatedContext(),
-                                  XENFILT_EMULATED_INTERFACE_VERSION_MAX,
-                                  (PINTERFACE)&(*Context)->EmulatedInterface,
-                                  sizeof ((*Context)->EmulatedInterface));
-    ASSERT(NT_SUCCESS(status));
-
-    KeInitializeSpinLock(&(*Context)->Lock);
-    InitializeMutex(&(*Context)->Mutex);
-
-    Trace("<====\n");
-
-    return STATUS_SUCCESS;
-
-fail1:
-    Error("fail1 (%08x)\n", status);
-
-    return status;
-}
-
-NTSTATUS
-PvdeviceGetInterface(
-    IN      PXENFILT_PVDEVICE_CONTEXT   Context,
-    IN      ULONG                       Version,
-    IN OUT  PINTERFACE                  Interface,
-    IN      ULONG                       Size
-    )
-{
-    NTSTATUS                            status;
-
-    ASSERT(Context != NULL);
-
-    switch (Version) {
-    case 1: {
-        struct _XENFILT_PVDEVICE_INTERFACE_V1   *PvdeviceInterface;
-
-        PvdeviceInterface = (struct _XENFILT_PVDEVICE_INTERFACE_V1 *)Interface;
-
-        status = STATUS_BUFFER_OVERFLOW;
-        if (Size < sizeof (struct _XENFILT_PVDEVICE_INTERFACE_V1))
-            break;
-
-        *PvdeviceInterface = PvdeviceInterfaceVersion1;
-
-        ASSERT3U(Interface->Version, ==, Version);
-        Interface->Context = Context;
-
-        status = STATUS_SUCCESS;
-        break;
-    }
-    default:
-        status = STATUS_NOT_SUPPORTED;
-        break;
-    }
-
-    return status;
-}
-
-VOID
-PvdeviceTeardown(
-    IN  PXENFILT_PVDEVICE_CONTEXT   Context
-    )
-{
-    Trace("====>\n");
-
-    RtlZeroMemory(&Context->Mutex, sizeof (MUTEX));
-    RtlZeroMemory(&Context->Lock, sizeof (KSPIN_LOCK));
-
-    RtlZeroMemory(&Context->EmulatedInterface,
-                  sizeof (XENFILT_EMULATED_INTERFACE));
-
-    ASSERT(IsZeroMemory(Context, sizeof (XENFILT_PVDEVICE_CONTEXT)));
-    __PvdeviceFree(Context);
-
-    Trace("<====\n");
-}
diff --git a/src/xenfilt/pvdevice.h b/src/xenfilt/pvdevice.h
deleted file mode 100644
index 30cd81c..0000000
--- a/src/xenfilt/pvdevice.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/* Copyright (c) Citrix Systems Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms,
- * with or without modification, are permitted provided
- * that the following conditions are met:
- *
- * *   Redistributions of source code must retain the above
- *     copyright notice, this list of conditions and the
- *     following disclaimer.
- * *   Redistributions in binary form must reproduce the above
- *     copyright notice, this list of conditions and the
- *     following disclaimer in the documentation and/or other
- *     materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#ifndef _XENFILT_PVDEVICE_H
-#define _XENFILT_PVDEVICE_H
-
-#include <ntddk.h>
-#include <xen.h>
-#include <pvdevice_interface.h>
-
-typedef struct _XENFILT_PVDEVICE_CONTEXT XENFILT_PVDEVICE_CONTEXT, *PXENFILT_PVDEVICE_CONTEXT;
-
-extern NTSTATUS
-PvdeviceInitialize(
-    OUT PXENFILT_PVDEVICE_CONTEXT   *Context
-    );
-
-extern NTSTATUS
-PvdeviceGetInterface(
-    IN      PXENFILT_PVDEVICE_CONTEXT   Context,
-    IN      ULONG                       Version,
-    IN OUT  PINTERFACE                  Interface,
-    IN      ULONG                       Size
-    );
-
-extern VOID
-PvdeviceTeardown(
-    IN  PXENFILT_PVDEVICE_CONTEXT   Context
-    );
-
-#endif  // _XENFILT_PVDEVICE_H
diff --git a/vs2012/xenfilt/xenfilt.vcxproj b/vs2012/xenfilt/xenfilt.vcxproj
index 6554ec9..4d5747d 100644
--- a/vs2012/xenfilt/xenfilt.vcxproj
+++ b/vs2012/xenfilt/xenfilt.vcxproj
@@ -69,7 +69,6 @@
     <ClCompile Include="../../src/common/registry.c" />
     <ClCompile Include="../../src/xenfilt/driver.c" />
     <ClCompile Include="../../src/xenfilt/emulated.c" />
-    <ClCompile Include="../../src/xenfilt/pvdevice.c" />
     <ClCompile Include="../../src/xenfilt/fdo.c" />
     <ClCompile Include="../../src/xenfilt/pdo.c" />
     <ClCompile Include="../../src/xenfilt/thread.c" />
diff --git a/vs2013/xenfilt/xenfilt.vcxproj b/vs2013/xenfilt/xenfilt.vcxproj
index 6250fcb..4f749b1 100644
--- a/vs2013/xenfilt/xenfilt.vcxproj
+++ b/vs2013/xenfilt/xenfilt.vcxproj
@@ -72,7 +72,6 @@
     <ClCompile Include="../../src/common/registry.c" />
     <ClCompile Include="../../src/xenfilt/driver.c" />
     <ClCompile Include="../../src/xenfilt/emulated.c" />
-    <ClCompile Include="../../src/xenfilt/pvdevice.c" />
     <ClCompile Include="../../src/xenfilt/fdo.c" />
     <ClCompile Include="../../src/xenfilt/pdo.c" />
     <ClCompile Include="../../src/xenfilt/thread.c" />
-- 
2.1.1


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

From win-pv-devel-bounces@lists.xenproject.org Thu Nov 26 14:19:37 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 26 Nov 2015 14:19:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1a1xOZ-0007Yw-Tv; Thu, 26 Nov 2015 14:19:35 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1a1xOX-0007Ym-Lg
	for win-pv-devel@lists.xenproject.org; Thu, 26 Nov 2015 14:19:33 +0000
Received: from [85.158.137.68] by server-17.bemta-3.messagelabs.com id
	61/2C-02940-4F417565; Thu, 26 Nov 2015 14:19:32 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-8.tower-31.messagelabs.com!1448547572!6924739!1
X-Originating-IP: [74.125.82.42]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 6721 invoked from network); 26 Nov 2015 14:19:32 -0000
Received: from mail-wm0-f42.google.com (HELO mail-wm0-f42.google.com)
	(74.125.82.42)
	by server-8.tower-31.messagelabs.com with AES128-GCM-SHA256 encrypted
	SMTP; 26 Nov 2015 14:19:32 -0000
Received: by wmww144 with SMTP id w144so24364017wmw.0
	for <win-pv-devel@lists.xenproject.org>;
	Thu, 26 Nov 2015 06:19:31 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=6iZgEjSnM18j24JPQ2e81arSTuLE/2XEAWURSTJOzKw=;
	b=IfLSiQ29yr2IzTTL9lwFVOBfMwj5vkrnYqYSFeRnpmYLfL+EuJ3QyviAuQ1riix7Id
	cnFR72jQqCXJQrsbsb8UkAz7b79vEGZfw4hgkbBf7chX756KJqEKWN8YpFeTpvxKPSEs
	uHMIlFjGrI07+GO1OKWeGqdlL/anr6bkNs2RdKXYxr5WoVBvKx9HcnrjtUB2pdDAdGlL
	iannwSMo0B8AUHTBkwll0WfGfensLOX9IjukY0blKoQRQQva5m8dipSbXEx7GkjCc0ll
	Ty7BgTWAul7SjhY1TMjNzXbO2E9KR1Lh0+8eqLjWAEr+sYjKfhuzq7hSVf7Kb8mc9AhF
	GfGg==
X-Received: by 10.28.33.136 with SMTP id h130mr4346262wmh.93.1448547571836;
	Thu, 26 Nov 2015 06:19:31 -0800 (PST)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	m191sm2944792wma.3.2015.11.26.06.19.31
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Thu, 26 Nov 2015 06:19:31 -0800 (PST)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Thu, 26 Nov 2015 14:19:17 +0000
Message-Id: <1448547558-11436-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH 1/2] Use the registry to check for vendor
	device
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

Using the XENFILT_PVDEVICE interface to select active device (which entails
checking for the presence of a vendor device) means that XENBUS requires a
reboot on installation before any instance can create PDOs. By using the
registry to check for vendor device presence (by looking if there is a key
under HKLM/System/CurrentControlset/Enum) there is no longer any need for
that reboot.

This patch amends the code as necessary, essentially pulling most of the
implementation of XENFILT_PVDEVICE into src/xenbus/driver.c.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/xenbus/driver.c | 270 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/xenbus/driver.h |  17 ++++
 src/xenbus/fdo.c    | 131 ++++++++-----------------
 3 files changed, 327 insertions(+), 91 deletions(-)

diff --git a/src/xenbus/driver.c b/src/xenbus/driver.c
index 46712e3..b1a5cb3 100644
--- a/src/xenbus/driver.c
+++ b/src/xenbus/driver.c
@@ -228,6 +228,276 @@ DriverRemoveFunctionDeviceObject(
         FiltersUninstall();
 }
 
+//
+// The canonical location for active device information is the XENFILT
+// Parameters key.
+//
+#define ACTIVE_PATH "\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Services\\XENFILT\\Parameters"
+
+NTSTATUS
+DriverGetActive(
+    OUT PCHAR       DeviceID,
+    OUT PCHAR       InstanceID
+    )
+{
+    HANDLE          ActiveKey;
+    PANSI_STRING    Ansi;
+    NTSTATUS        status;
+
+    Trace("====>\n");
+
+    ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
+
+    status = RegistryOpenSubKey(NULL,
+                                ACTIVE_PATH,
+                                KEY_READ,
+                                &ActiveKey);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    status = RegistryQuerySzValue(ActiveKey,
+                                  "ActiveDeviceID",
+                                  NULL,
+                                  &Ansi);
+    if (!NT_SUCCESS(status))
+        goto fail2;
+
+    status = RtlStringCbPrintfA(DeviceID,
+                                MAX_DEVICE_ID_LEN,
+                                "%Z",
+                                &Ansi[0]);
+    ASSERT(NT_SUCCESS(status));
+
+    RegistryFreeSzValue(Ansi);
+
+    status = RegistryQuerySzValue(ActiveKey,
+                                  "ActiveInstanceID",
+                                  NULL,
+                                  &Ansi);
+    if (!NT_SUCCESS(status))
+        goto fail3;
+
+    status = RtlStringCbPrintfA(InstanceID,
+                                MAX_DEVICE_ID_LEN,
+                                "%Z",
+                                &Ansi[0]);
+    ASSERT(NT_SUCCESS(status));
+
+    RegistryFreeSzValue(Ansi);
+
+    RegistryCloseKey(ActiveKey);
+
+    Trace("<====\n");
+
+    return STATUS_SUCCESS;
+
+fail3:
+    Error("fail3\n");
+
+fail2:
+    Error("fail2\n");
+
+    RegistryCloseKey(ActiveKey);
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return status;
+}
+
+static const CHAR *DriverLegacyDevicePrefix[] = {
+    "PCI\\VEN_5853&DEV_0001",
+    "PCI\\VEN_5853&DEV_0002"
+};
+
+static FORCEINLINE BOOLEAN
+__DriverIsDeviceLegacy(
+    IN  PCHAR   DeviceID
+    )
+{
+    ULONG       Index;
+
+    for (Index = 0; Index < ARRAYSIZE(DriverLegacyDevicePrefix); Index++) {
+        const CHAR  *Prefix = DriverLegacyDevicePrefix[Index];
+
+        if (_strnicmp(DeviceID, Prefix, strlen(Prefix)) == 0)
+            return TRUE;
+    }
+
+    return FALSE;
+}
+
+static const CHAR *DriverVendorDeviceID =
+#ifdef VENDOR_DEVICE_ID_STR
+    "PCI\\VEN_5853&DEV_" VENDOR_DEVICE_ID_STR "&SUBSYS_C0005853&REV_01";
+#else
+    NULL;
+#endif
+
+#define ENUM_PATH "\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Enum"
+
+static FORCEINLINE BOOLEAN
+__DriverIsVendorDevicePresent(
+    VOID
+    )
+{
+    HANDLE      EnumKey;
+    HANDLE      DeviceKey;
+    BOOLEAN     Found;
+    NTSTATUS    status;
+
+    status = RegistryOpenSubKey(NULL,
+                                ENUM_PATH,
+                                KEY_READ,
+                                &EnumKey);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    Found = FALSE;
+
+    status = RegistryOpenSubKey(EnumKey,
+                                (PCHAR)DriverVendorDeviceID,
+                                KEY_READ,
+                                &DeviceKey);
+    if (!NT_SUCCESS(status))
+        goto done;
+
+    RegistryCloseKey(DeviceKey);
+    Found = TRUE;
+
+done:
+    RegistryCloseKey(EnumKey);
+
+    return Found;
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return FALSE;
+}
+
+NTSTATUS
+DriverSetActive(
+    IN  PCHAR   DeviceID,
+    IN  PCHAR   InstanceID
+    )
+{
+    HANDLE      ActiveKey;
+    ANSI_STRING Ansi[2];
+    NTSTATUS    status;
+
+    Trace("====>\n");
+
+    ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
+
+    status = RegistryOpenSubKey(NULL,
+                                ACTIVE_PATH,
+                                KEY_ALL_ACCESS,
+                                &ActiveKey);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    status = STATUS_UNSUCCESSFUL;
+    if (__DriverIsDeviceLegacy(DeviceID) &&
+        __DriverIsVendorDevicePresent())
+        goto fail2;
+
+    RtlZeroMemory(Ansi, sizeof (ANSI_STRING) * 2);
+
+    RtlInitAnsiString(&Ansi[0], DeviceID);
+
+    status = RegistryUpdateSzValue(ActiveKey,
+                                   "ActiveDeviceID",
+                                   REG_SZ,
+                                   Ansi);
+    if (!NT_SUCCESS(status))
+        goto fail3;
+
+    RtlInitAnsiString(&Ansi[0], InstanceID);
+
+    status = RegistryUpdateSzValue(ActiveKey,
+                                   "ActiveInstanceID",
+                                   REG_SZ,
+                                   Ansi);
+    if (!NT_SUCCESS(status))
+        goto fail4;
+
+    Info("%s\\%s\n", DeviceID, InstanceID);
+
+    RegistryCloseKey(ActiveKey);
+
+    Trace("<====\n");
+
+    return STATUS_SUCCESS;
+
+fail4:
+    Error("fail4\n");
+
+fail3:
+    Error("fail3\n");
+
+fail2:
+    Error("fail2\n");
+
+    RegistryCloseKey(ActiveKey);
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return status;
+}
+
+NTSTATUS
+DriverClearActive(
+    VOID
+    )
+{
+    HANDLE      ActiveKey;
+    NTSTATUS    status;
+
+    Trace("====>\n");
+
+    ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
+
+    status = RegistryOpenSubKey(NULL,
+                                ACTIVE_PATH,
+                                KEY_ALL_ACCESS,
+                                &ActiveKey);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    status = RegistryDeleteValue(ActiveKey,
+                                 "ActiveDeviceID");
+    if (!NT_SUCCESS(status))
+        goto fail2;
+
+    status = RegistryDeleteValue(ActiveKey,
+                                 "ActiveInstanceID");
+    if (!NT_SUCCESS(status))
+        goto fail3;
+
+    Info("DONE\n");
+
+    RegistryCloseKey(ActiveKey);
+
+    Trace("<====\n");
+
+    return STATUS_SUCCESS;
+
+fail3:
+    Error("fail3\n");
+
+fail2:
+    Error("fail2\n");
+
+    RegistryCloseKey(ActiveKey);
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return status;
+}
+
 DRIVER_UNLOAD       DriverUnload;
 
 VOID
diff --git a/src/xenbus/driver.h b/src/xenbus/driver.h
index 78b1b25..dd81e4c 100644
--- a/src/xenbus/driver.h
+++ b/src/xenbus/driver.h
@@ -57,6 +57,23 @@ DriverReleaseMutex(
     VOID
      );
 
+extern NTSTATUS
+DriverGetActive(
+    OUT PCHAR   DeviceID,
+    OUT PCHAR   InstanceID
+    );
+
+NTSTATUS
+DriverSetActive(
+    IN  PCHAR   DeviceID,
+    IN  PCHAR   InstanceID
+    );
+
+NTSTATUS
+DriverClearActive(
+    VOID
+    );
+
 typedef struct _XENBUS_FDO      XENBUS_FDO, *PXENBUS_FDO;
 typedef struct _XENBUS_PDO      XENBUS_PDO, *PXENBUS_PDO;
 
diff --git a/src/xenbus/fdo.c b/src/xenbus/fdo.c
index 0c33a57..49ae08d 100644
--- a/src/xenbus/fdo.c
+++ b/src/xenbus/fdo.c
@@ -116,7 +116,6 @@ struct _XENBUS_FDO {
     PCM_PARTIAL_RESOURCE_LIST       RawResourceList;
     PCM_PARTIAL_RESOURCE_LIST       TranslatedResourceList;
 
-    XENFILT_PVDEVICE_INTERFACE      PvdeviceInterface;
     BOOLEAN                         Active;
 
     PXENBUS_SUSPEND_CONTEXT         SuspendContext;
@@ -634,22 +633,14 @@ FdoSetActive(
     if (!NT_SUCCESS(status))
         goto fail2;
 
-    status = XENFILT_PVDEVICE(Acquire, &Fdo->PvdeviceInterface);
-    if (!NT_SUCCESS(status))
-        goto fail3;
-
-    status = XENFILT_PVDEVICE(GetActive,
-                              &Fdo->PvdeviceInterface,
-                              ActiveDeviceID,
-                              ActiveInstanceID);
+    status = DriverGetActive(ActiveDeviceID,
+                             ActiveInstanceID);
     if (NT_SUCCESS(status)) {
         if (_stricmp(DeviceID, ActiveDeviceID) != 0)
             goto done;
     } else {
-        status = XENFILT_PVDEVICE(SetActive,
-                                  &Fdo->PvdeviceInterface,
-                                  DeviceID,
-                                  InstanceID);
+        status = DriverSetActive(DeviceID,
+                                 InstanceID);
         if (!NT_SUCCESS(status))
             goto done;
     }
@@ -657,13 +648,8 @@ FdoSetActive(
     Fdo->Active = TRUE;
 
 done:
-    XENFILT_PVDEVICE(Release, &Fdo->PvdeviceInterface);
-
     return STATUS_SUCCESS;
 
-fail3:
-    Error("fail3\n");
-
 fail2:
     Error("fail2\n");
 
@@ -673,30 +659,14 @@ fail1:
     return status;
 }
 
-static NTSTATUS
+static VOID
 FdoClearActive(
     IN  PXENBUS_FDO Fdo
     )
 {
-    NTSTATUS        status;
-
-    status = XENFILT_PVDEVICE(Acquire, &Fdo->PvdeviceInterface);
-    if (!NT_SUCCESS(status))
-        goto fail1;
-
-    (VOID) XENFILT_PVDEVICE(ClearActive,
-                            &Fdo->PvdeviceInterface);
+    (VOID) DriverClearActive();
 
     Fdo->Active = FALSE;
-
-    XENFILT_PVDEVICE(Release, &Fdo->PvdeviceInterface);
-
-    return STATUS_SUCCESS;
-
-fail1:
-    Error("fail1 (%08x)\n", status);
-
-    return status;
 }
 
 static FORCEINLINE BOOLEAN
@@ -5056,67 +5026,53 @@ FdoCreate(
 
     __FdoSetName(Fdo);
 
-    status = FDO_QUERY_INTERFACE(Fdo,
-                                 XENFILT,
-                                 PVDEVICE,
-                                 (PINTERFACE)&Fdo->PvdeviceInterface,
-                                 sizeof (Fdo->PvdeviceInterface),
-                                 TRUE);
-    if (!NT_SUCCESS(status))
-        goto fail8;
-
-    if (Fdo->PvdeviceInterface.Interface.Context == NULL) {
-        DriverRequestReboot();
-        goto done;
-    }
-
     status = FdoSetActive(Fdo);
     if (!NT_SUCCESS(status))
-        goto fail9;
+        goto fail8;
 
     if (!__FdoIsActive(Fdo))
         goto done;
 
     status = DebugInitialize(Fdo, &Fdo->DebugContext);
     if (!NT_SUCCESS(status))
-        goto fail10;
+        goto fail9;
 
     status = SuspendInitialize(Fdo, &Fdo->SuspendContext);
     if (!NT_SUCCESS(status))
-        goto fail11;
+        goto fail10;
 
     status = SharedInfoInitialize(Fdo, &Fdo->SharedInfoContext);
     if (!NT_SUCCESS(status))
-        goto fail12;
+        goto fail11;
 
     status = EvtchnInitialize(Fdo, &Fdo->EvtchnContext);
     if (!NT_SUCCESS(status))
-        goto fail13;
+        goto fail12;
 
     status = StoreInitialize(Fdo, &Fdo->StoreContext);
     if (!NT_SUCCESS(status))
-        goto fail14;
+        goto fail13;
 
     status = RangeSetInitialize(Fdo, &Fdo->RangeSetContext);
     if (!NT_SUCCESS(status))
-        goto fail15;
+        goto fail14;
 
     status = CacheInitialize(Fdo, &Fdo->CacheContext);
     if (!NT_SUCCESS(status))
-        goto fail16;
+        goto fail15;
 
     status = GnttabInitialize(Fdo, &Fdo->GnttabContext);
     if (!NT_SUCCESS(status))
-        goto fail17;
+        goto fail16;
 
     status = UnplugInitialize(Fdo, &Fdo->UnplugContext);
     if (!NT_SUCCESS(status))
-        goto fail18;
+        goto fail17;
 
     if (FdoIsBalloonEnabled(Fdo)) {
         status = BalloonInitialize(Fdo, &Fdo->BalloonContext);
         if (!NT_SUCCESS(status))
-            goto fail19;
+            goto fail18;
     }
 
     status = DebugGetInterface(__FdoGetDebugContext(Fdo),
@@ -5179,70 +5135,68 @@ done:
 
     return STATUS_SUCCESS;
 
-fail19:
-    Error("fail19\n");
-
-    UnplugTeardown(Fdo->UnplugContext);
-    Fdo->UnplugContext = NULL;
-
 fail18:
     Error("fail18\n");
 
-    GnttabTeardown(Fdo->GnttabContext);
-    Fdo->GnttabContext = NULL;
+    UnplugTeardown(Fdo->UnplugContext);
+    Fdo->UnplugContext = NULL;
 
 fail17:
     Error("fail17\n");
 
-    CacheTeardown(Fdo->CacheContext);
-    Fdo->CacheContext = NULL;
+    GnttabTeardown(Fdo->GnttabContext);
+    Fdo->GnttabContext = NULL;
 
 fail16:
     Error("fail16\n");
 
-    RangeSetTeardown(Fdo->RangeSetContext);
-    Fdo->RangeSetContext = NULL;
+    CacheTeardown(Fdo->CacheContext);
+    Fdo->CacheContext = NULL;
 
 fail15:
     Error("fail15\n");
 
-    StoreTeardown(Fdo->StoreContext);
-    Fdo->StoreContext = NULL;
+    RangeSetTeardown(Fdo->RangeSetContext);
+    Fdo->RangeSetContext = NULL;
 
 fail14:
     Error("fail14\n");
 
-    EvtchnTeardown(Fdo->EvtchnContext);
-    Fdo->EvtchnContext = NULL;
+    StoreTeardown(Fdo->StoreContext);
+    Fdo->StoreContext = NULL;
 
 fail13:
     Error("fail13\n");
 
-    SharedInfoTeardown(Fdo->SharedInfoContext);
-    Fdo->SharedInfoContext = NULL;
+    EvtchnTeardown(Fdo->EvtchnContext);
+    Fdo->EvtchnContext = NULL;
 
 fail12:
     Error("fail12\n");
 
-    SuspendTeardown(Fdo->SuspendContext);
-    Fdo->SuspendContext = NULL;
+    SharedInfoTeardown(Fdo->SharedInfoContext);
+    Fdo->SharedInfoContext = NULL;
 
 fail11:
     Error("fail11\n");
 
-    DebugTeardown(Fdo->DebugContext);
-    Fdo->DebugContext = NULL;
+    SuspendTeardown(Fdo->SuspendContext);
+    Fdo->SuspendContext = NULL;
 
 fail10:
     Error("fail10\n");
 
-    Fdo->Active = FALSE;
+    DebugTeardown(Fdo->DebugContext);
+    Fdo->DebugContext = NULL;
 
 fail9:
     Error("fail9\n");
 
-    RtlZeroMemory(&Fdo->PvdeviceInterface,
-                  sizeof (XENFILT_PVDEVICE_INTERFACE));
+    //
+    // We don't want to call DriverClearActive() so just
+    // clear the FDO flag.
+    //
+    Fdo->Active = FALSE;
 
 fail8:
     Error("fail8\n");
@@ -5371,14 +5325,9 @@ FdoDestroy(
         DebugTeardown(Fdo->DebugContext);
         Fdo->DebugContext = NULL;
 
-        Fdo->Active = FALSE;
-
         FdoClearActive(Fdo);
     }
 
-    RtlZeroMemory(&Fdo->PvdeviceInterface,
-                  sizeof (XENFILT_PVDEVICE_INTERFACE));
-
     RtlZeroMemory(Fdo->VendorName, MAXNAMELEN);
 
     FdoReleaseLowerBusInterface(Fdo);
-- 
2.1.1


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

From win-pv-devel-bounces@lists.xenproject.org Thu Nov 26 14:19:37 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 26 Nov 2015 14:19:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1a1xOZ-0007Yw-Tv; Thu, 26 Nov 2015 14:19:35 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1a1xOX-0007Ym-Lg
	for win-pv-devel@lists.xenproject.org; Thu, 26 Nov 2015 14:19:33 +0000
Received: from [85.158.137.68] by server-17.bemta-3.messagelabs.com id
	61/2C-02940-4F417565; Thu, 26 Nov 2015 14:19:32 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-8.tower-31.messagelabs.com!1448547572!6924739!1
X-Originating-IP: [74.125.82.42]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 6721 invoked from network); 26 Nov 2015 14:19:32 -0000
Received: from mail-wm0-f42.google.com (HELO mail-wm0-f42.google.com)
	(74.125.82.42)
	by server-8.tower-31.messagelabs.com with AES128-GCM-SHA256 encrypted
	SMTP; 26 Nov 2015 14:19:32 -0000
Received: by wmww144 with SMTP id w144so24364017wmw.0
	for <win-pv-devel@lists.xenproject.org>;
	Thu, 26 Nov 2015 06:19:31 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=6iZgEjSnM18j24JPQ2e81arSTuLE/2XEAWURSTJOzKw=;
	b=IfLSiQ29yr2IzTTL9lwFVOBfMwj5vkrnYqYSFeRnpmYLfL+EuJ3QyviAuQ1riix7Id
	cnFR72jQqCXJQrsbsb8UkAz7b79vEGZfw4hgkbBf7chX756KJqEKWN8YpFeTpvxKPSEs
	uHMIlFjGrI07+GO1OKWeGqdlL/anr6bkNs2RdKXYxr5WoVBvKx9HcnrjtUB2pdDAdGlL
	iannwSMo0B8AUHTBkwll0WfGfensLOX9IjukY0blKoQRQQva5m8dipSbXEx7GkjCc0ll
	Ty7BgTWAul7SjhY1TMjNzXbO2E9KR1Lh0+8eqLjWAEr+sYjKfhuzq7hSVf7Kb8mc9AhF
	GfGg==
X-Received: by 10.28.33.136 with SMTP id h130mr4346262wmh.93.1448547571836;
	Thu, 26 Nov 2015 06:19:31 -0800 (PST)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	m191sm2944792wma.3.2015.11.26.06.19.31
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Thu, 26 Nov 2015 06:19:31 -0800 (PST)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Thu, 26 Nov 2015 14:19:17 +0000
Message-Id: <1448547558-11436-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH 1/2] Use the registry to check for vendor
	device
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

Using the XENFILT_PVDEVICE interface to select active device (which entails
checking for the presence of a vendor device) means that XENBUS requires a
reboot on installation before any instance can create PDOs. By using the
registry to check for vendor device presence (by looking if there is a key
under HKLM/System/CurrentControlset/Enum) there is no longer any need for
that reboot.

This patch amends the code as necessary, essentially pulling most of the
implementation of XENFILT_PVDEVICE into src/xenbus/driver.c.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/xenbus/driver.c | 270 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/xenbus/driver.h |  17 ++++
 src/xenbus/fdo.c    | 131 ++++++++-----------------
 3 files changed, 327 insertions(+), 91 deletions(-)

diff --git a/src/xenbus/driver.c b/src/xenbus/driver.c
index 46712e3..b1a5cb3 100644
--- a/src/xenbus/driver.c
+++ b/src/xenbus/driver.c
@@ -228,6 +228,276 @@ DriverRemoveFunctionDeviceObject(
         FiltersUninstall();
 }
 
+//
+// The canonical location for active device information is the XENFILT
+// Parameters key.
+//
+#define ACTIVE_PATH "\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Services\\XENFILT\\Parameters"
+
+NTSTATUS
+DriverGetActive(
+    OUT PCHAR       DeviceID,
+    OUT PCHAR       InstanceID
+    )
+{
+    HANDLE          ActiveKey;
+    PANSI_STRING    Ansi;
+    NTSTATUS        status;
+
+    Trace("====>\n");
+
+    ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
+
+    status = RegistryOpenSubKey(NULL,
+                                ACTIVE_PATH,
+                                KEY_READ,
+                                &ActiveKey);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    status = RegistryQuerySzValue(ActiveKey,
+                                  "ActiveDeviceID",
+                                  NULL,
+                                  &Ansi);
+    if (!NT_SUCCESS(status))
+        goto fail2;
+
+    status = RtlStringCbPrintfA(DeviceID,
+                                MAX_DEVICE_ID_LEN,
+                                "%Z",
+                                &Ansi[0]);
+    ASSERT(NT_SUCCESS(status));
+
+    RegistryFreeSzValue(Ansi);
+
+    status = RegistryQuerySzValue(ActiveKey,
+                                  "ActiveInstanceID",
+                                  NULL,
+                                  &Ansi);
+    if (!NT_SUCCESS(status))
+        goto fail3;
+
+    status = RtlStringCbPrintfA(InstanceID,
+                                MAX_DEVICE_ID_LEN,
+                                "%Z",
+                                &Ansi[0]);
+    ASSERT(NT_SUCCESS(status));
+
+    RegistryFreeSzValue(Ansi);
+
+    RegistryCloseKey(ActiveKey);
+
+    Trace("<====\n");
+
+    return STATUS_SUCCESS;
+
+fail3:
+    Error("fail3\n");
+
+fail2:
+    Error("fail2\n");
+
+    RegistryCloseKey(ActiveKey);
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return status;
+}
+
+static const CHAR *DriverLegacyDevicePrefix[] = {
+    "PCI\\VEN_5853&DEV_0001",
+    "PCI\\VEN_5853&DEV_0002"
+};
+
+static FORCEINLINE BOOLEAN
+__DriverIsDeviceLegacy(
+    IN  PCHAR   DeviceID
+    )
+{
+    ULONG       Index;
+
+    for (Index = 0; Index < ARRAYSIZE(DriverLegacyDevicePrefix); Index++) {
+        const CHAR  *Prefix = DriverLegacyDevicePrefix[Index];
+
+        if (_strnicmp(DeviceID, Prefix, strlen(Prefix)) == 0)
+            return TRUE;
+    }
+
+    return FALSE;
+}
+
+static const CHAR *DriverVendorDeviceID =
+#ifdef VENDOR_DEVICE_ID_STR
+    "PCI\\VEN_5853&DEV_" VENDOR_DEVICE_ID_STR "&SUBSYS_C0005853&REV_01";
+#else
+    NULL;
+#endif
+
+#define ENUM_PATH "\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Enum"
+
+static FORCEINLINE BOOLEAN
+__DriverIsVendorDevicePresent(
+    VOID
+    )
+{
+    HANDLE      EnumKey;
+    HANDLE      DeviceKey;
+    BOOLEAN     Found;
+    NTSTATUS    status;
+
+    status = RegistryOpenSubKey(NULL,
+                                ENUM_PATH,
+                                KEY_READ,
+                                &EnumKey);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    Found = FALSE;
+
+    status = RegistryOpenSubKey(EnumKey,
+                                (PCHAR)DriverVendorDeviceID,
+                                KEY_READ,
+                                &DeviceKey);
+    if (!NT_SUCCESS(status))
+        goto done;
+
+    RegistryCloseKey(DeviceKey);
+    Found = TRUE;
+
+done:
+    RegistryCloseKey(EnumKey);
+
+    return Found;
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return FALSE;
+}
+
+NTSTATUS
+DriverSetActive(
+    IN  PCHAR   DeviceID,
+    IN  PCHAR   InstanceID
+    )
+{
+    HANDLE      ActiveKey;
+    ANSI_STRING Ansi[2];
+    NTSTATUS    status;
+
+    Trace("====>\n");
+
+    ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
+
+    status = RegistryOpenSubKey(NULL,
+                                ACTIVE_PATH,
+                                KEY_ALL_ACCESS,
+                                &ActiveKey);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    status = STATUS_UNSUCCESSFUL;
+    if (__DriverIsDeviceLegacy(DeviceID) &&
+        __DriverIsVendorDevicePresent())
+        goto fail2;
+
+    RtlZeroMemory(Ansi, sizeof (ANSI_STRING) * 2);
+
+    RtlInitAnsiString(&Ansi[0], DeviceID);
+
+    status = RegistryUpdateSzValue(ActiveKey,
+                                   "ActiveDeviceID",
+                                   REG_SZ,
+                                   Ansi);
+    if (!NT_SUCCESS(status))
+        goto fail3;
+
+    RtlInitAnsiString(&Ansi[0], InstanceID);
+
+    status = RegistryUpdateSzValue(ActiveKey,
+                                   "ActiveInstanceID",
+                                   REG_SZ,
+                                   Ansi);
+    if (!NT_SUCCESS(status))
+        goto fail4;
+
+    Info("%s\\%s\n", DeviceID, InstanceID);
+
+    RegistryCloseKey(ActiveKey);
+
+    Trace("<====\n");
+
+    return STATUS_SUCCESS;
+
+fail4:
+    Error("fail4\n");
+
+fail3:
+    Error("fail3\n");
+
+fail2:
+    Error("fail2\n");
+
+    RegistryCloseKey(ActiveKey);
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return status;
+}
+
+NTSTATUS
+DriverClearActive(
+    VOID
+    )
+{
+    HANDLE      ActiveKey;
+    NTSTATUS    status;
+
+    Trace("====>\n");
+
+    ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
+
+    status = RegistryOpenSubKey(NULL,
+                                ACTIVE_PATH,
+                                KEY_ALL_ACCESS,
+                                &ActiveKey);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    status = RegistryDeleteValue(ActiveKey,
+                                 "ActiveDeviceID");
+    if (!NT_SUCCESS(status))
+        goto fail2;
+
+    status = RegistryDeleteValue(ActiveKey,
+                                 "ActiveInstanceID");
+    if (!NT_SUCCESS(status))
+        goto fail3;
+
+    Info("DONE\n");
+
+    RegistryCloseKey(ActiveKey);
+
+    Trace("<====\n");
+
+    return STATUS_SUCCESS;
+
+fail3:
+    Error("fail3\n");
+
+fail2:
+    Error("fail2\n");
+
+    RegistryCloseKey(ActiveKey);
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return status;
+}
+
 DRIVER_UNLOAD       DriverUnload;
 
 VOID
diff --git a/src/xenbus/driver.h b/src/xenbus/driver.h
index 78b1b25..dd81e4c 100644
--- a/src/xenbus/driver.h
+++ b/src/xenbus/driver.h
@@ -57,6 +57,23 @@ DriverReleaseMutex(
     VOID
      );
 
+extern NTSTATUS
+DriverGetActive(
+    OUT PCHAR   DeviceID,
+    OUT PCHAR   InstanceID
+    );
+
+NTSTATUS
+DriverSetActive(
+    IN  PCHAR   DeviceID,
+    IN  PCHAR   InstanceID
+    );
+
+NTSTATUS
+DriverClearActive(
+    VOID
+    );
+
 typedef struct _XENBUS_FDO      XENBUS_FDO, *PXENBUS_FDO;
 typedef struct _XENBUS_PDO      XENBUS_PDO, *PXENBUS_PDO;
 
diff --git a/src/xenbus/fdo.c b/src/xenbus/fdo.c
index 0c33a57..49ae08d 100644
--- a/src/xenbus/fdo.c
+++ b/src/xenbus/fdo.c
@@ -116,7 +116,6 @@ struct _XENBUS_FDO {
     PCM_PARTIAL_RESOURCE_LIST       RawResourceList;
     PCM_PARTIAL_RESOURCE_LIST       TranslatedResourceList;
 
-    XENFILT_PVDEVICE_INTERFACE      PvdeviceInterface;
     BOOLEAN                         Active;
 
     PXENBUS_SUSPEND_CONTEXT         SuspendContext;
@@ -634,22 +633,14 @@ FdoSetActive(
     if (!NT_SUCCESS(status))
         goto fail2;
 
-    status = XENFILT_PVDEVICE(Acquire, &Fdo->PvdeviceInterface);
-    if (!NT_SUCCESS(status))
-        goto fail3;
-
-    status = XENFILT_PVDEVICE(GetActive,
-                              &Fdo->PvdeviceInterface,
-                              ActiveDeviceID,
-                              ActiveInstanceID);
+    status = DriverGetActive(ActiveDeviceID,
+                             ActiveInstanceID);
     if (NT_SUCCESS(status)) {
         if (_stricmp(DeviceID, ActiveDeviceID) != 0)
             goto done;
     } else {
-        status = XENFILT_PVDEVICE(SetActive,
-                                  &Fdo->PvdeviceInterface,
-                                  DeviceID,
-                                  InstanceID);
+        status = DriverSetActive(DeviceID,
+                                 InstanceID);
         if (!NT_SUCCESS(status))
             goto done;
     }
@@ -657,13 +648,8 @@ FdoSetActive(
     Fdo->Active = TRUE;
 
 done:
-    XENFILT_PVDEVICE(Release, &Fdo->PvdeviceInterface);
-
     return STATUS_SUCCESS;
 
-fail3:
-    Error("fail3\n");
-
 fail2:
     Error("fail2\n");
 
@@ -673,30 +659,14 @@ fail1:
     return status;
 }
 
-static NTSTATUS
+static VOID
 FdoClearActive(
     IN  PXENBUS_FDO Fdo
     )
 {
-    NTSTATUS        status;
-
-    status = XENFILT_PVDEVICE(Acquire, &Fdo->PvdeviceInterface);
-    if (!NT_SUCCESS(status))
-        goto fail1;
-
-    (VOID) XENFILT_PVDEVICE(ClearActive,
-                            &Fdo->PvdeviceInterface);
+    (VOID) DriverClearActive();
 
     Fdo->Active = FALSE;
-
-    XENFILT_PVDEVICE(Release, &Fdo->PvdeviceInterface);
-
-    return STATUS_SUCCESS;
-
-fail1:
-    Error("fail1 (%08x)\n", status);
-
-    return status;
 }
 
 static FORCEINLINE BOOLEAN
@@ -5056,67 +5026,53 @@ FdoCreate(
 
     __FdoSetName(Fdo);
 
-    status = FDO_QUERY_INTERFACE(Fdo,
-                                 XENFILT,
-                                 PVDEVICE,
-                                 (PINTERFACE)&Fdo->PvdeviceInterface,
-                                 sizeof (Fdo->PvdeviceInterface),
-                                 TRUE);
-    if (!NT_SUCCESS(status))
-        goto fail8;
-
-    if (Fdo->PvdeviceInterface.Interface.Context == NULL) {
-        DriverRequestReboot();
-        goto done;
-    }
-
     status = FdoSetActive(Fdo);
     if (!NT_SUCCESS(status))
-        goto fail9;
+        goto fail8;
 
     if (!__FdoIsActive(Fdo))
         goto done;
 
     status = DebugInitialize(Fdo, &Fdo->DebugContext);
     if (!NT_SUCCESS(status))
-        goto fail10;
+        goto fail9;
 
     status = SuspendInitialize(Fdo, &Fdo->SuspendContext);
     if (!NT_SUCCESS(status))
-        goto fail11;
+        goto fail10;
 
     status = SharedInfoInitialize(Fdo, &Fdo->SharedInfoContext);
     if (!NT_SUCCESS(status))
-        goto fail12;
+        goto fail11;
 
     status = EvtchnInitialize(Fdo, &Fdo->EvtchnContext);
     if (!NT_SUCCESS(status))
-        goto fail13;
+        goto fail12;
 
     status = StoreInitialize(Fdo, &Fdo->StoreContext);
     if (!NT_SUCCESS(status))
-        goto fail14;
+        goto fail13;
 
     status = RangeSetInitialize(Fdo, &Fdo->RangeSetContext);
     if (!NT_SUCCESS(status))
-        goto fail15;
+        goto fail14;
 
     status = CacheInitialize(Fdo, &Fdo->CacheContext);
     if (!NT_SUCCESS(status))
-        goto fail16;
+        goto fail15;
 
     status = GnttabInitialize(Fdo, &Fdo->GnttabContext);
     if (!NT_SUCCESS(status))
-        goto fail17;
+        goto fail16;
 
     status = UnplugInitialize(Fdo, &Fdo->UnplugContext);
     if (!NT_SUCCESS(status))
-        goto fail18;
+        goto fail17;
 
     if (FdoIsBalloonEnabled(Fdo)) {
         status = BalloonInitialize(Fdo, &Fdo->BalloonContext);
         if (!NT_SUCCESS(status))
-            goto fail19;
+            goto fail18;
     }
 
     status = DebugGetInterface(__FdoGetDebugContext(Fdo),
@@ -5179,70 +5135,68 @@ done:
 
     return STATUS_SUCCESS;
 
-fail19:
-    Error("fail19\n");
-
-    UnplugTeardown(Fdo->UnplugContext);
-    Fdo->UnplugContext = NULL;
-
 fail18:
     Error("fail18\n");
 
-    GnttabTeardown(Fdo->GnttabContext);
-    Fdo->GnttabContext = NULL;
+    UnplugTeardown(Fdo->UnplugContext);
+    Fdo->UnplugContext = NULL;
 
 fail17:
     Error("fail17\n");
 
-    CacheTeardown(Fdo->CacheContext);
-    Fdo->CacheContext = NULL;
+    GnttabTeardown(Fdo->GnttabContext);
+    Fdo->GnttabContext = NULL;
 
 fail16:
     Error("fail16\n");
 
-    RangeSetTeardown(Fdo->RangeSetContext);
-    Fdo->RangeSetContext = NULL;
+    CacheTeardown(Fdo->CacheContext);
+    Fdo->CacheContext = NULL;
 
 fail15:
     Error("fail15\n");
 
-    StoreTeardown(Fdo->StoreContext);
-    Fdo->StoreContext = NULL;
+    RangeSetTeardown(Fdo->RangeSetContext);
+    Fdo->RangeSetContext = NULL;
 
 fail14:
     Error("fail14\n");
 
-    EvtchnTeardown(Fdo->EvtchnContext);
-    Fdo->EvtchnContext = NULL;
+    StoreTeardown(Fdo->StoreContext);
+    Fdo->StoreContext = NULL;
 
 fail13:
     Error("fail13\n");
 
-    SharedInfoTeardown(Fdo->SharedInfoContext);
-    Fdo->SharedInfoContext = NULL;
+    EvtchnTeardown(Fdo->EvtchnContext);
+    Fdo->EvtchnContext = NULL;
 
 fail12:
     Error("fail12\n");
 
-    SuspendTeardown(Fdo->SuspendContext);
-    Fdo->SuspendContext = NULL;
+    SharedInfoTeardown(Fdo->SharedInfoContext);
+    Fdo->SharedInfoContext = NULL;
 
 fail11:
     Error("fail11\n");
 
-    DebugTeardown(Fdo->DebugContext);
-    Fdo->DebugContext = NULL;
+    SuspendTeardown(Fdo->SuspendContext);
+    Fdo->SuspendContext = NULL;
 
 fail10:
     Error("fail10\n");
 
-    Fdo->Active = FALSE;
+    DebugTeardown(Fdo->DebugContext);
+    Fdo->DebugContext = NULL;
 
 fail9:
     Error("fail9\n");
 
-    RtlZeroMemory(&Fdo->PvdeviceInterface,
-                  sizeof (XENFILT_PVDEVICE_INTERFACE));
+    //
+    // We don't want to call DriverClearActive() so just
+    // clear the FDO flag.
+    //
+    Fdo->Active = FALSE;
 
 fail8:
     Error("fail8\n");
@@ -5371,14 +5325,9 @@ FdoDestroy(
         DebugTeardown(Fdo->DebugContext);
         Fdo->DebugContext = NULL;
 
-        Fdo->Active = FALSE;
-
         FdoClearActive(Fdo);
     }
 
-    RtlZeroMemory(&Fdo->PvdeviceInterface,
-                  sizeof (XENFILT_PVDEVICE_INTERFACE));
-
     RtlZeroMemory(Fdo->VendorName, MAXNAMELEN);
 
     FdoReleaseLowerBusInterface(Fdo);
-- 
2.1.1


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

From win-pv-devel-bounces@lists.xenproject.org Thu Nov 26 14:19:37 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 26 Nov 2015 14:19:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1a1xOa-0007Z3-0k; Thu, 26 Nov 2015 14:19:36 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1a1xOY-0007Yo-Gb
	for win-pv-devel@lists.xenproject.org; Thu, 26 Nov 2015 14:19:34 +0000
Received: from [85.158.139.211] by server-14.bemta-5.messagelabs.com id
	EA/E2-22142-5F417565; Thu, 26 Nov 2015 14:19:33 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-16.tower-206.messagelabs.com!1448547572!6723592!1
X-Originating-IP: [74.125.82.44]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 28980 invoked from network); 26 Nov 2015 14:19:32 -0000
Received: from mail-wm0-f44.google.com (HELO mail-wm0-f44.google.com)
	(74.125.82.44)
	by server-16.tower-206.messagelabs.com with AES128-GCM-SHA256 encrypted
	SMTP; 26 Nov 2015 14:19:32 -0000
Received: by wmww144 with SMTP id w144so24364496wmw.0
	for <win-pv-devel@lists.xenproject.org>;
	Thu, 26 Nov 2015 06:19:32 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id:in-reply-to:references;
	bh=rk6uE7uaXHtyubW3hXGQUcwbOQijALyTaraqswos5Hc=;
	b=LKncvNjvuQThWA5ydNg4C7hRXQHS+8Y3AK5Ogax2f8ZDMo0OdIvxOj7zzLQzQKtYxi
	hwD9xcLwvJ82K+3SBZynDbKWd8FKCbaB6l+KkIJQ8/dcmz3Vd1QxbbDsJikQ7o+9KF4F
	1r2819SeFKMA/CtimAt5+qpyOBlSiwtgaJg64Lms+/wkh9M10E5wJDIFNaOQtVCYSGhm
	0DPrIGnl32ipkpNFIQ/XQk/Rxmgucc2YXerpqoui1CqkrSX426fHUnKxPBcUdBWzvGC8
	vcUfz/De336kHwgx9BvZrHCmVw5qY3/FHy3GFkGxYIGV3tRepRaq+wi/NHWBQw4Y0pRZ
	1P2g==
X-Received: by 10.194.71.104 with SMTP id t8mr48122599wju.177.1448547572680;
	Thu, 26 Nov 2015 06:19:32 -0800 (PST)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	m191sm2944792wma.3.2015.11.26.06.19.31
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Thu, 26 Nov 2015 06:19:32 -0800 (PST)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Thu, 26 Nov 2015 14:19:18 +0000
Message-Id: <1448547558-11436-2-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
In-Reply-To: <1448547558-11436-1-git-send-email-paul.durrant@citrix.com>
References: <1448547558-11436-1-git-send-email-paul.durrant@citrix.com>
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH 2/2] Remove defunct XENFILT_PVDEVICE interface
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

Nothing should now need this interface so the code can be removed.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 include/pvdevice_interface.h   | 132 ------------
 src/xenbus/fdo.c               |   1 -
 src/xenfilt/driver.c           | 137 +++++++------
 src/xenfilt/driver.h           |  13 +-
 src/xenfilt/pdo.c              |  45 +----
 src/xenfilt/pvdevice.c         | 447 -----------------------------------------
 src/xenfilt/pvdevice.h         |  59 ------
 vs2012/xenfilt/xenfilt.vcxproj |   1 -
 vs2013/xenfilt/xenfilt.vcxproj |   1 -
 9 files changed, 81 insertions(+), 755 deletions(-)
 delete mode 100644 include/pvdevice_interface.h
 delete mode 100644 src/xenfilt/pvdevice.c
 delete mode 100644 src/xenfilt/pvdevice.h

diff --git a/include/pvdevice_interface.h b/include/pvdevice_interface.h
deleted file mode 100644
index 9024396..0000000
--- a/include/pvdevice_interface.h
+++ /dev/null
@@ -1,132 +0,0 @@
-/* Copyright (c) Citrix Systems Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms,
- * with or without modification, are permitted provided
- * that the following conditions are met:
- *
- * *   Redistributions of source code must retain the above
- *     copyright notice, this list of conditions and the
- *     following disclaimer.
- * *   Redistributions in binary form must reproduce the above
- *     copyright notice, this list of conditions and the
- *     following disclaimer in the documentation and/or other
- *     materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*! \file pvdevice_interface.h
-    \brief XENFILT PVDEVICE Interface
-
-    This interface provides primitives to determine whether a pvdevice
-    device is active (and claim the active device id if not)
-*/
-
-#ifndef _XENFILT_PVDEVICE_INTERFACE_H
-#define _XENFILT_PVDEVICE_INTERFACE_H
-
-#ifndef _WINDLL
-
-/*! \typedef XENFILT_PVDEVICE_ACQUIRE
-    \brief Acquire a reference to the PVDEVICE interface
-
-    \param Interface The interface header
-*/
-typedef NTSTATUS
-(*XENFILT_PVDEVICE_ACQUIRE)(
-    IN  PINTERFACE  Interface
-    );
-
-/*! \typedef XENFILT_PVDEVICE_RELEASE
-    \brief Release a reference to the PVDEVICE interface
-
-    \param Interface The interface header
-*/
-typedef VOID
-(*XENFILT_PVDEVICE_RELEASE)(
-    IN  PINTERFACE  Interface
-    );
-
-/*! \typedef XENFILT_PVDEVICE_GET_ACTIVE
-    \brief Get the active device instance
-
-    \param Interface The interface header
-    \param DeviceID A buffer of length MAXNAMELEN to receive the device id
-    \param InstanceID A buffer of length MAXNAMELEN to receive the instance id
-*/
-typedef NTSTATUS
-(*XENFILT_PVDEVICE_GET_ACTIVE)(
-    IN  PVOID   Context,
-    OUT PCHAR   DeviceID,
-    OUT PCHAR   InstanceID
-    );
-
-/*! \typedef XENFILT_PVDEVICE_SET_ACTIVE
-    \brief Set the active device instance
-
-    \param Interface The interface header
-    \param DeviceID Buffer containing the device id
-    \param InstanceID Buffer containing the instance id
-*/
-typedef NTSTATUS
-(*XENFILT_PVDEVICE_SET_ACTIVE)(
-    IN  PVOID   Context,
-    IN  PCHAR   DeviceID,
-    IN  PCHAR   InstanceID
-    );
-
-/*! \typedef XENFILT_PVDEVICE_CLEAR_ACTIVE
-    \brief Clear the active device instance
-
-    \param Interface The interface header
-*/
-typedef NTSTATUS
-(*XENFILT_PVDEVICE_CLEAR_ACTIVE)(
-    IN  PVOID   Context
-    );
-
-// {7d09b250-898f-4fea-b7fa-e0490e46f95f}
-DEFINE_GUID(GUID_XENFILT_PVDEVICE_INTERFACE,
-0x7d09b250, 0x898f, 0x4fea, 0xb7, 0xfa, 0xe0, 0x49, 0x0e, 0x46, 0xf9, 0x5f);
-
-/*! \struct _XENFILT_PVDEVICE_INTERFACE_V1
-    \brief PVDEVICE interface version 1
-    \ingroup interfaces
-*/
-struct _XENFILT_PVDEVICE_INTERFACE_V1 {
-    INTERFACE                       Interface;
-    XENFILT_PVDEVICE_ACQUIRE        PvdeviceAcquire;
-    XENFILT_PVDEVICE_RELEASE        PvdeviceRelease;
-    XENFILT_PVDEVICE_GET_ACTIVE     PvdeviceGetActive;
-    XENFILT_PVDEVICE_SET_ACTIVE     PvdeviceSetActive;
-    XENFILT_PVDEVICE_CLEAR_ACTIVE   PvdeviceClearActive;
-};
-
-typedef struct _XENFILT_PVDEVICE_INTERFACE_V1 XENFILT_PVDEVICE_INTERFACE, *PXENFILT_PVDEVICE_INTERFACE;
-
-/*! \def XENFILT_PVDEVICE
-    \brief Macro at assist in method invocation
-*/
-#define XENFILT_PVDEVICE(_Method, _Interface, ...)    \
-    (_Interface)->Pvdevice ## _Method((PINTERFACE)(_Interface), __VA_ARGS__)
-
-#endif  // _WINDLL
-
-#define XENFILT_PVDEVICE_INTERFACE_VERSION_MIN  1
-#define XENFILT_PVDEVICE_INTERFACE_VERSION_MAX  1
-
-#endif  // _XENFILT_PVDEVICE_INTERFACE_H
diff --git a/src/xenbus/fdo.c b/src/xenbus/fdo.c
index 49ae08d..ce4840c 100644
--- a/src/xenbus/fdo.c
+++ b/src/xenbus/fdo.c
@@ -38,7 +38,6 @@
 #include <stdlib.h>
 #include <xen.h>
 
-#include <pvdevice_interface.h>
 #include <version.h>
 
 #include "names.h"
diff --git a/src/xenfilt/driver.c b/src/xenfilt/driver.c
index 342d2b2..bfc96ee 100644
--- a/src/xenfilt/driver.c
+++ b/src/xenfilt/driver.c
@@ -39,7 +39,6 @@
 #include "pdo.h"
 #include "driver.h"
 #include "emulated.h"
-#include "pvdevice.h"
 #include "mutex.h"
 #include "dbg_print.h"
 #include "assert.h"
@@ -60,9 +59,6 @@ typedef struct _XENFILT_DRIVER {
 
     PXENFILT_EMULATED_CONTEXT   EmulatedContext;
     XENFILT_EMULATED_INTERFACE  EmulatedInterface;
-
-    PXENFILT_PVDEVICE_CONTEXT   PvdeviceContext;
-    XENFILT_PVDEVICE_INTERFACE  PvdeviceInterface;
 } XENFILT_DRIVER, *PXENFILT_DRIVER;
 
 static XENFILT_DRIVER   Driver;
@@ -158,30 +154,6 @@ DriverGetEmulatedContext(
 }
 
 static FORCEINLINE VOID
-__DriverSetPvdeviceContext(
-    IN  PXENFILT_PVDEVICE_CONTEXT   Context
-    )
-{
-    Driver.PvdeviceContext = Context;
-}
-
-static FORCEINLINE PXENFILT_PVDEVICE_CONTEXT
-__DriverGetPvdeviceContext(
-    VOID
-    )
-{
-    return Driver.PvdeviceContext;
-}
-
-PXENFILT_PVDEVICE_CONTEXT
-DriverGetPvdeviceContext(
-    VOID
-    )
-{
-    return __DriverGetPvdeviceContext();
-}
-
-static FORCEINLINE VOID
 __DriverAcquireMutex(
     VOID
     )
@@ -246,6 +218,74 @@ DriverRemoveFunctionDeviceObject(
     --Driver.References;
 }
 
+static FORCEINLINE NTSTATUS
+__DriverGetActive(
+    OUT PCHAR       DeviceID,
+    OUT PCHAR       InstanceID
+    )
+{
+    HANDLE          ParametersKey;
+    PANSI_STRING    Ansi;
+    NTSTATUS        status;
+
+    Trace("====>\n");
+
+    ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
+
+    ParametersKey = __DriverGetParametersKey();
+
+    status = RegistryQuerySzValue(ParametersKey,
+                                  "ActiveDeviceID",
+                                  NULL,
+                                  &Ansi);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    status = RtlStringCbPrintfA(DeviceID,
+                                MAX_DEVICE_ID_LEN,
+                                "%Z",
+                                &Ansi[0]);
+    ASSERT(NT_SUCCESS(status));
+
+    RegistryFreeSzValue(Ansi);
+
+    status = RegistryQuerySzValue(ParametersKey,
+                                  "ActiveInstanceID",
+                                  NULL,
+                                  &Ansi);
+    if (!NT_SUCCESS(status))
+        goto fail2;
+
+    status = RtlStringCbPrintfA(InstanceID,
+                                MAX_DEVICE_ID_LEN,
+                                "%Z",
+                                &Ansi[0]);
+    ASSERT(NT_SUCCESS(status));
+
+    RegistryFreeSzValue(Ansi);
+
+    Trace("<====\n");
+
+    return STATUS_SUCCESS;
+
+fail2:
+    Error("fail2\n");
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return status;
+}
+
+NTSTATUS
+DriverGetActive(
+    OUT PCHAR       DeviceID,
+    OUT PCHAR       InstanceID
+    )
+{
+    return __DriverGetActive(DeviceID, InstanceID);
+}
+
 static BOOLEAN
 DriverIsActivePresent(
     VOID
@@ -256,20 +296,14 @@ DriverIsActivePresent(
     BOOLEAN     Present;
     NTSTATUS    status;
 
-    status = XENFILT_PVDEVICE(Acquire, &Driver.PvdeviceInterface);
-    if (!NT_SUCCESS(status))
-        goto fail1;
-
     status = XENFILT_EMULATED(Acquire, &Driver.EmulatedInterface);
     if (!NT_SUCCESS(status))
-        goto fail2;
+        goto fail1;
 
     Present = FALSE;
 
-    status = XENFILT_PVDEVICE(GetActive,
-                              &Driver.PvdeviceInterface,
-                              ActiveDeviceID,
-                              ActiveInstanceID);
+    status = __DriverGetActive(ActiveDeviceID,
+                               ActiveInstanceID);
     if (!NT_SUCCESS(status))
         goto done;
 
@@ -280,13 +314,9 @@ DriverIsActivePresent(
 
 done:
     XENFILT_EMULATED(Release, &Driver.EmulatedInterface);
-    XENFILT_PVDEVICE(Release, &Driver.PvdeviceInterface);
 
     return Present;
 
-fail2:
-    Error("fail2\n");
-
 fail1:
     Error("fail1 (%08x)\n", status);
 
@@ -385,15 +415,9 @@ DriverUnload(
     RtlZeroMemory(&Driver.List, sizeof (LIST_ENTRY));
     RtlZeroMemory(&Driver.Mutex, sizeof (MUTEX));
 
-    RtlZeroMemory(&Driver.PvdeviceInterface,
-                  sizeof (XENFILT_PVDEVICE_INTERFACE));
-
     RtlZeroMemory(&Driver.EmulatedInterface,
                   sizeof (XENFILT_EMULATED_INTERFACE));
 
-    PvdeviceTeardown(Driver.PvdeviceContext);
-    Driver.PvdeviceContext = NULL;
-
     EmulatedTeardown(Driver.EmulatedContext);
     Driver.EmulatedContext = NULL;
 
@@ -654,7 +678,6 @@ DriverEntry(
     HANDLE                      ServiceKey;
     HANDLE                      ParametersKey;
     PXENFILT_EMULATED_CONTEXT   EmulatedContext;
-    PXENFILT_PVDEVICE_CONTEXT   PvdeviceContext;
     ULONG                       Index;
     NTSTATUS                    status;
 
@@ -711,24 +734,12 @@ DriverEntry(
 
     __DriverSetEmulatedContext(EmulatedContext);
 
-    status = PvdeviceInitialize(&PvdeviceContext);
-    if (!NT_SUCCESS(status))
-        goto fail5;
-
-    __DriverSetPvdeviceContext(PvdeviceContext);
-
     status = EmulatedGetInterface(__DriverGetEmulatedContext(),
                                   XENFILT_EMULATED_INTERFACE_VERSION_MAX,
                                   (PINTERFACE)&Driver.EmulatedInterface,
                                   sizeof (Driver.EmulatedInterface));
     ASSERT(NT_SUCCESS(status));
 
-    status = PvdeviceGetInterface(__DriverGetPvdeviceContext(),
-                                  XENFILT_PVDEVICE_INTERFACE_VERSION_MAX,
-                                  (PINTERFACE)&Driver.PvdeviceInterface,
-                                  sizeof (Driver.PvdeviceInterface));
-    ASSERT(NT_SUCCESS(status));
-
     RegistryCloseKey(ServiceKey);
 
     DriverObject->DriverExtension->AddDevice = DriverAddDevice;
@@ -747,12 +758,6 @@ done:
     Trace("<====\n");
     return STATUS_SUCCESS;
 
-fail5:
-    Error("fail5\n");
-
-    EmulatedTeardown(Driver.EmulatedContext);
-    Driver.EmulatedContext = NULL;
-
 fail4:
     Error("fail4\n");
 
diff --git a/src/xenfilt/driver.h b/src/xenfilt/driver.h
index 772436d..c6ae957 100644
--- a/src/xenfilt/driver.h
+++ b/src/xenfilt/driver.h
@@ -52,6 +52,12 @@ DriverReleaseMutex(
     VOID
      );
 
+extern NTSTATUS
+DriverGetActive(
+    OUT PCHAR   DeviceID,
+    OUT PCHAR   InstanceID
+    );
+
 typedef enum _XENFILT_FILTER_STATE {
     XENFILT_FILTER_ENABLED = 0,
     XENFILT_FILTER_PENDING,
@@ -75,13 +81,6 @@ DriverGetEmulatedContext(
     VOID
     );
 
-#include "pvdevice.h"
-
-PXENFILT_PVDEVICE_CONTEXT
-DriverGetPvdeviceContext(
-    VOID
-    );
-
 typedef struct _XENFILT_FDO XENFILT_FDO, *PXENFILT_FDO;
 typedef struct _XENFILT_PDO XENFILT_PDO, *PXENFILT_PDO;
 
diff --git a/src/xenfilt/pdo.c b/src/xenfilt/pdo.c
index e2c8c81..6be7a76 100644
--- a/src/xenfilt/pdo.c
+++ b/src/xenfilt/pdo.c
@@ -37,7 +37,6 @@
 #include <stdlib.h>
 
 #include "emulated.h"
-#include "pvdevice.h"
 #include "names.h"
 #include "fdo.h"
 #include "pdo.h"
@@ -68,8 +67,6 @@ struct _XENFILT_PDO {
 
     XENFILT_EMULATED_OBJECT_TYPE    Type;
     PXENFILT_EMULATED_OBJECT        EmulatedObject;
-
-    XENFILT_PVDEVICE_INTERFACE      PvdeviceInterface;
 };
 
 static FORCEINLINE PVOID
@@ -253,7 +250,7 @@ __PdoGetFdo(
     return Pdo->Fdo;
 }
 
-static NTSTATUS
+static VOID
 PdoSetDeviceInstance(
     IN  PXENFILT_PDO    Pdo,
     IN  PCHAR           DeviceID,
@@ -265,14 +262,8 @@ PdoSetDeviceInstance(
     CHAR                ActiveInstanceID[MAX_DEVICE_ID_LEN];
     NTSTATUS            status;
 
-    status = XENFILT_PVDEVICE(Acquire, &Pdo->PvdeviceInterface);
-    if (!NT_SUCCESS(status))
-        goto fail1;
-
-    status = XENFILT_PVDEVICE(GetActive,
-                              &Pdo->PvdeviceInterface,
-                              ActiveDeviceID,
-                              ActiveInstanceID);
+    status = DriverGetActive(ActiveDeviceID,
+                             ActiveInstanceID);
     if (!NT_SUCCESS(status))
         goto done;
 
@@ -288,8 +279,6 @@ PdoSetDeviceInstance(
     }
 
 done:
-    XENFILT_PVDEVICE(Release, &Pdo->PvdeviceInterface);
-
     status = RtlStringCbPrintfA(Dx->DeviceID,
                                 MAX_DEVICE_ID_LEN,
                                 "%s",
@@ -301,13 +290,6 @@ done:
                                 "%s",
                                 InstanceID);
     ASSERT(NT_SUCCESS(status));
-
-    return STATUS_SUCCESS;
-
-fail1:
-    Error("fail1 (%08x)\n", status);
-
-    return status;
 }
 
 static FORCEINLINE PCHAR
@@ -920,7 +902,6 @@ done:                                                               \
 }                                                                   \
 
 DEFINE_PDO_QUERY_INTERFACE(Emulated)
-DEFINE_PDO_QUERY_INTERFACE(Pvdevice)
 
 struct _INTERFACE_ENTRY {
     const GUID  *Guid;
@@ -933,7 +914,6 @@ struct _INTERFACE_ENTRY {
 
 struct _INTERFACE_ENTRY PdoInterfaceTable[] = {
     DEFINE_INTERFACE_ENTRY(EMULATED_INTERFACE, Emulated),
-    DEFINE_INTERFACE_ENTRY(PVDEVICE_INTERFACE, Pvdevice),
     { NULL, NULL, NULL }
 };
 
@@ -2015,15 +1995,7 @@ PdoCreate(
     if (!NT_SUCCESS(status))
         goto fail6;
 
-    status = PvdeviceGetInterface(DriverGetPvdeviceContext(),
-                                  XENFILT_PVDEVICE_INTERFACE_VERSION_MAX,
-                                  (PINTERFACE)&Pdo->PvdeviceInterface,
-                                  sizeof (Pdo->PvdeviceInterface));
-    ASSERT(NT_SUCCESS(status));
-
-    status = PdoSetDeviceInstance(Pdo, DeviceID, InstanceID);
-    if (!NT_SUCCESS(status))
-        goto fail7;
+    PdoSetDeviceInstance(Pdo, DeviceID, InstanceID);
 
     __PdoSetName(Pdo);
 
@@ -2044,12 +2016,6 @@ PdoCreate(
 
     return STATUS_SUCCESS;
 
-fail7:
-    Error("fail7\n");
-
-    RtlZeroMemory(&Pdo->PvdeviceInterface,
-                  sizeof (XENFILT_PVDEVICE_INTERFACE));
-
 fail6:
     Error("fail6\n");
 
@@ -2119,9 +2085,6 @@ PdoDestroy(
 
     RtlZeroMemory(Pdo->Name, sizeof (Pdo->Name));
 
-    RtlZeroMemory(&Pdo->PvdeviceInterface,
-                  sizeof (XENFILT_PVDEVICE_INTERFACE));
-
     EmulatedRemoveObject(DriverGetEmulatedContext(),
                          Pdo->EmulatedObject);
     Pdo->EmulatedObject = NULL;
diff --git a/src/xenfilt/pvdevice.c b/src/xenfilt/pvdevice.c
deleted file mode 100644
index 179dc3d..0000000
--- a/src/xenfilt/pvdevice.c
+++ /dev/null
@@ -1,447 +0,0 @@
-/* Copyright (c) Citrix Systems Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms,
- * with or without modification, are permitted provided
- * that the following conditions are met:
- *
- * *   Redistributions of source code must retain the above
- *     copyright notice, this list of conditions and the
- *     following disclaimer.
- * *   Redistributions in binary form must reproduce the above
- *     copyright notice, this list of conditions and the
- *     following disclaimer in the documentation and/or other
- *     materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <ntddk.h>
-#include <ntstrsafe.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <xen.h>
-
-#include "driver.h"
-#include "registry.h"
-#include "emulated.h"
-#include "pvdevice.h"
-#include "mutex.h"
-#include "dbg_print.h"
-#include "assert.h"
-#include "util.h"
-
-struct _XENFILT_PVDEVICE_CONTEXT {
-    KSPIN_LOCK                  Lock;
-    LONG                        References;
-    XENFILT_EMULATED_INTERFACE  EmulatedInterface;
-    MUTEX                       Mutex;
-};
-
-#define XENFILT_PVDEVICE_TAG    'EDVP'
-
-static FORCEINLINE PVOID
-__PvdeviceAllocate(
-    IN  ULONG   Length
-    )
-{
-    return __AllocatePoolWithTag(NonPagedPool, Length, XENFILT_PVDEVICE_TAG);
-}
-
-static FORCEINLINE VOID
-__PvdeviceFree(
-    IN  PVOID   Buffer
-    )
-{
-    ExFreePoolWithTag(Buffer, XENFILT_PVDEVICE_TAG);
-}
-
-static const CHAR *PvdeviceLegacyPrefix[] = {
-    "PCI\\VEN_5853&DEV_0001",
-    "PCI\\VEN_5853&DEV_0002",
-    NULL
-};
-
-static BOOLEAN
-PvdeviceIsLegacy(
-    IN  PXENFILT_PVDEVICE_CONTEXT   Context,
-    IN  PCHAR                       DeviceID
-    )
-{
-    ULONG                           Index;
-
-    UNREFERENCED_PARAMETER(Context);
-
-    for (Index = 0; PvdeviceLegacyPrefix[Index] != NULL; Index++) {
-        const CHAR  *Prefix = PvdeviceLegacyPrefix[Index];
-
-        if (_strnicmp(DeviceID, Prefix, strlen(Prefix)) == 0)
-            return TRUE;
-    }
-
-    return FALSE;
-}
-
-static const CHAR *PvdeviceVendorDeviceID[] = {
-#ifdef VENDOR_DEVICE_ID_STR
-    "PCI\\VEN_5853&DEV_" VENDOR_DEVICE_ID_STR "&SUBSYS_C0005853&REV_01",
-#endif
-    NULL
-};
-
-static BOOLEAN
-PvdeviceIsVendorPresent(
-    IN  PXENFILT_PVDEVICE_CONTEXT   Context
-    )
-{
-    ULONG                           Index;
-
-    for (Index = 0; PvdeviceVendorDeviceID[Index] != NULL; Index++) {
-        const CHAR  *DeviceID = PvdeviceVendorDeviceID[Index];
-
-        if (XENFILT_EMULATED(IsDevicePresent,
-                             &Context->EmulatedInterface,
-                             (PCHAR)DeviceID,
-                             NULL))
-            return TRUE;
-    }
-
-    return FALSE;
-}
-
-static NTSTATUS
-PvdeviceGetActive(
-    IN  PINTERFACE              Interface,
-    OUT PCHAR                   DeviceID,
-    OUT PCHAR                   InstanceID
-    )
-{
-    PXENFILT_PVDEVICE_CONTEXT   Context = Interface->Context;
-    HANDLE                      ParametersKey;
-    PANSI_STRING                Ansi;
-    NTSTATUS                    status;
-
-    Trace("====>\n");
-
-    ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
-
-    ParametersKey = DriverGetParametersKey();
-
-    AcquireMutex(&Context->Mutex);
-
-    status = RegistryQuerySzValue(ParametersKey,
-                                  "ActiveDeviceID",
-                                  NULL,
-                                  &Ansi);
-    if (!NT_SUCCESS(status))
-        goto fail1;
-
-    status = RtlStringCbPrintfA(DeviceID,
-                                MAX_DEVICE_ID_LEN,
-                                "%Z",
-                                &Ansi[0]);
-    ASSERT(NT_SUCCESS(status));
-
-    RegistryFreeSzValue(Ansi);
-
-    status = RegistryQuerySzValue(ParametersKey,
-                                  "ActiveInstanceID",
-                                  NULL,
-                                  &Ansi);
-    if (!NT_SUCCESS(status))
-        goto fail2;
-
-    status = RtlStringCbPrintfA(InstanceID,
-                                MAX_DEVICE_ID_LEN,
-                                "%Z",
-                                &Ansi[0]);
-    ASSERT(NT_SUCCESS(status));
-
-    RegistryFreeSzValue(Ansi);
-
-    ReleaseMutex(&Context->Mutex);
-
-    Trace("<====\n");
-
-    return STATUS_SUCCESS;
-
-fail2:
-fail1:
-    ReleaseMutex(&Context->Mutex);
-
-    return status;
-}
-
-static NTSTATUS
-PvdeviceSetActive(
-    IN  PINTERFACE              Interface,
-    IN  PCHAR                   DeviceID,
-    IN  PCHAR                   InstanceID
-    )
-{
-    PXENFILT_PVDEVICE_CONTEXT   Context = Interface->Context;
-    HANDLE                      ParametersKey;
-    ANSI_STRING                 Ansi[2];
-    NTSTATUS                    status;
-
-    Trace("====>\n");
-
-    ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
-
-    ParametersKey = DriverGetParametersKey();
-
-    AcquireMutex(&Context->Mutex);
-
-    status = STATUS_UNSUCCESSFUL;
-    if (PvdeviceIsLegacy(Context, DeviceID) &&
-        PvdeviceIsVendorPresent(Context))
-        goto fail1;
-
-    RtlZeroMemory(Ansi, sizeof (ANSI_STRING) * 2);
-
-    RtlInitAnsiString(&Ansi[0], DeviceID);
-
-    status = RegistryUpdateSzValue(ParametersKey,
-                                   "ActiveDeviceID",
-                                   REG_SZ,
-                                   Ansi);
-    if (!NT_SUCCESS(status))
-        goto fail2;
-
-    RtlInitAnsiString(&Ansi[0], InstanceID);
-
-    status = RegistryUpdateSzValue(ParametersKey,
-                                   "ActiveInstanceID",
-                                   REG_SZ,
-                                   Ansi);
-    if (!NT_SUCCESS(status))
-        goto fail3;
-
-    Info("%s\\%s\n", DeviceID, InstanceID);
-
-    ReleaseMutex(&Context->Mutex);
-
-    Trace("<====\n");
-
-    return STATUS_SUCCESS;
-
-fail3:
-fail2:
-fail1:
-    ReleaseMutex(&Context->Mutex);
-
-    return status;
-}
-
-static NTSTATUS
-PvdeviceClearActive(
-    IN  PINTERFACE              Interface
-    )
-{
-    PXENFILT_PVDEVICE_CONTEXT   Context = Interface->Context;
-    HANDLE                      ParametersKey;
-    NTSTATUS                    status;
-
-    Trace("====>\n");
-
-    ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
-
-    ParametersKey = DriverGetParametersKey();
-
-    AcquireMutex(&Context->Mutex);
-
-    status = RegistryDeleteValue(ParametersKey,
-                                 "ActiveDeviceID");
-    if (!NT_SUCCESS(status))
-        goto fail1;
-
-    status = RegistryDeleteValue(ParametersKey,
-                                 "ActiveInstanceID");
-    if (!NT_SUCCESS(status))
-        goto fail2;
-
-    Info("DONE\n");
-
-    ReleaseMutex(&Context->Mutex);
-
-    Trace("<====\n");
-
-    return STATUS_SUCCESS;
-
-fail2:
-fail1:
-    ReleaseMutex(&Context->Mutex);
-
-    return status;
-}
-
-static NTSTATUS
-PvdeviceAcquire(
-    IN  PINTERFACE              Interface
-    )
-{
-    PXENFILT_PVDEVICE_CONTEXT   Context = Interface->Context;
-    KIRQL                       Irql;
-    NTSTATUS                    status;
-
-    KeAcquireSpinLock(&Context->Lock, &Irql);
-
-    if (Context->References++ != 0)
-        goto done;
-
-    Trace("====>\n");
-
-    status = XENFILT_EMULATED(Acquire, &Context->EmulatedInterface);
-    if (!NT_SUCCESS(status))
-        goto fail1;
-
-    Trace("<====\n");
-
-done:
-    KeReleaseSpinLock(&Context->Lock, Irql);
-
-    return STATUS_SUCCESS;
-
-fail1:
-    Error("fail1 (%08x)\n", status);
-
-    KeReleaseSpinLock(&Context->Lock, Irql);
-
-    return status;
-}
-
-static VOID
-PvdeviceRelease(
-    IN  PINTERFACE              Interface
-    )
-{
-    PXENFILT_PVDEVICE_CONTEXT   Context = Interface->Context;
-    KIRQL                       Irql;
-
-    KeAcquireSpinLock(&Context->Lock, &Irql);
-
-    if (--Context->References > 0)
-        goto done;
-
-    Trace("====>\n");
-
-    XENFILT_EMULATED(Release, &Context->EmulatedInterface);
-
-    Trace("<====\n");
-
-done:
-    KeReleaseSpinLock(&Context->Lock, Irql);
-}
-
-static struct _XENFILT_PVDEVICE_INTERFACE_V1 PvdeviceInterfaceVersion1 = {
-    { sizeof (struct _XENFILT_PVDEVICE_INTERFACE_V1), 1, NULL, NULL, NULL },
-    PvdeviceAcquire,
-    PvdeviceRelease,
-    PvdeviceGetActive,
-    PvdeviceSetActive,
-    PvdeviceClearActive
-};
-
-NTSTATUS
-PvdeviceInitialize(
-    OUT PXENFILT_PVDEVICE_CONTEXT   *Context
-    )
-{
-    NTSTATUS                        status;
-
-    Trace("====>\n");
-
-    *Context = __PvdeviceAllocate(sizeof (XENFILT_PVDEVICE_CONTEXT));
-
-    status = STATUS_NO_MEMORY;
-    if (*Context == NULL)
-        goto fail1;
-
-    status = EmulatedGetInterface(DriverGetEmulatedContext(),
-                                  XENFILT_EMULATED_INTERFACE_VERSION_MAX,
-                                  (PINTERFACE)&(*Context)->EmulatedInterface,
-                                  sizeof ((*Context)->EmulatedInterface));
-    ASSERT(NT_SUCCESS(status));
-
-    KeInitializeSpinLock(&(*Context)->Lock);
-    InitializeMutex(&(*Context)->Mutex);
-
-    Trace("<====\n");
-
-    return STATUS_SUCCESS;
-
-fail1:
-    Error("fail1 (%08x)\n", status);
-
-    return status;
-}
-
-NTSTATUS
-PvdeviceGetInterface(
-    IN      PXENFILT_PVDEVICE_CONTEXT   Context,
-    IN      ULONG                       Version,
-    IN OUT  PINTERFACE                  Interface,
-    IN      ULONG                       Size
-    )
-{
-    NTSTATUS                            status;
-
-    ASSERT(Context != NULL);
-
-    switch (Version) {
-    case 1: {
-        struct _XENFILT_PVDEVICE_INTERFACE_V1   *PvdeviceInterface;
-
-        PvdeviceInterface = (struct _XENFILT_PVDEVICE_INTERFACE_V1 *)Interface;
-
-        status = STATUS_BUFFER_OVERFLOW;
-        if (Size < sizeof (struct _XENFILT_PVDEVICE_INTERFACE_V1))
-            break;
-
-        *PvdeviceInterface = PvdeviceInterfaceVersion1;
-
-        ASSERT3U(Interface->Version, ==, Version);
-        Interface->Context = Context;
-
-        status = STATUS_SUCCESS;
-        break;
-    }
-    default:
-        status = STATUS_NOT_SUPPORTED;
-        break;
-    }
-
-    return status;
-}
-
-VOID
-PvdeviceTeardown(
-    IN  PXENFILT_PVDEVICE_CONTEXT   Context
-    )
-{
-    Trace("====>\n");
-
-    RtlZeroMemory(&Context->Mutex, sizeof (MUTEX));
-    RtlZeroMemory(&Context->Lock, sizeof (KSPIN_LOCK));
-
-    RtlZeroMemory(&Context->EmulatedInterface,
-                  sizeof (XENFILT_EMULATED_INTERFACE));
-
-    ASSERT(IsZeroMemory(Context, sizeof (XENFILT_PVDEVICE_CONTEXT)));
-    __PvdeviceFree(Context);
-
-    Trace("<====\n");
-}
diff --git a/src/xenfilt/pvdevice.h b/src/xenfilt/pvdevice.h
deleted file mode 100644
index 30cd81c..0000000
--- a/src/xenfilt/pvdevice.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/* Copyright (c) Citrix Systems Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms,
- * with or without modification, are permitted provided
- * that the following conditions are met:
- *
- * *   Redistributions of source code must retain the above
- *     copyright notice, this list of conditions and the
- *     following disclaimer.
- * *   Redistributions in binary form must reproduce the above
- *     copyright notice, this list of conditions and the
- *     following disclaimer in the documentation and/or other
- *     materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#ifndef _XENFILT_PVDEVICE_H
-#define _XENFILT_PVDEVICE_H
-
-#include <ntddk.h>
-#include <xen.h>
-#include <pvdevice_interface.h>
-
-typedef struct _XENFILT_PVDEVICE_CONTEXT XENFILT_PVDEVICE_CONTEXT, *PXENFILT_PVDEVICE_CONTEXT;
-
-extern NTSTATUS
-PvdeviceInitialize(
-    OUT PXENFILT_PVDEVICE_CONTEXT   *Context
-    );
-
-extern NTSTATUS
-PvdeviceGetInterface(
-    IN      PXENFILT_PVDEVICE_CONTEXT   Context,
-    IN      ULONG                       Version,
-    IN OUT  PINTERFACE                  Interface,
-    IN      ULONG                       Size
-    );
-
-extern VOID
-PvdeviceTeardown(
-    IN  PXENFILT_PVDEVICE_CONTEXT   Context
-    );
-
-#endif  // _XENFILT_PVDEVICE_H
diff --git a/vs2012/xenfilt/xenfilt.vcxproj b/vs2012/xenfilt/xenfilt.vcxproj
index 6554ec9..4d5747d 100644
--- a/vs2012/xenfilt/xenfilt.vcxproj
+++ b/vs2012/xenfilt/xenfilt.vcxproj
@@ -69,7 +69,6 @@
     <ClCompile Include="../../src/common/registry.c" />
     <ClCompile Include="../../src/xenfilt/driver.c" />
     <ClCompile Include="../../src/xenfilt/emulated.c" />
-    <ClCompile Include="../../src/xenfilt/pvdevice.c" />
     <ClCompile Include="../../src/xenfilt/fdo.c" />
     <ClCompile Include="../../src/xenfilt/pdo.c" />
     <ClCompile Include="../../src/xenfilt/thread.c" />
diff --git a/vs2013/xenfilt/xenfilt.vcxproj b/vs2013/xenfilt/xenfilt.vcxproj
index 6250fcb..4f749b1 100644
--- a/vs2013/xenfilt/xenfilt.vcxproj
+++ b/vs2013/xenfilt/xenfilt.vcxproj
@@ -72,7 +72,6 @@
     <ClCompile Include="../../src/common/registry.c" />
     <ClCompile Include="../../src/xenfilt/driver.c" />
     <ClCompile Include="../../src/xenfilt/emulated.c" />
-    <ClCompile Include="../../src/xenfilt/pvdevice.c" />
     <ClCompile Include="../../src/xenfilt/fdo.c" />
     <ClCompile Include="../../src/xenfilt/pdo.c" />
     <ClCompile Include="../../src/xenfilt/thread.c" />
-- 
2.1.1


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

From win-pv-devel-bounces@lists.xenproject.org Thu Nov 26 16:20:30 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 26 Nov 2015 16:20:30 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1a1zHZ-0002sr-6u; Thu, 26 Nov 2015 16:20:29 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1a1zHW-0002sb-UC
	for win-pv-devel@lists.xenproject.org; Thu, 26 Nov 2015 16:20:27 +0000
Received: from [85.158.139.211] by server-3.bemta-5.messagelabs.com id
	41/68-13487-A4137565; Thu, 26 Nov 2015 16:20:26 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-15.tower-206.messagelabs.com!1448554825!6764591!1
X-Originating-IP: [74.125.82.44]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 40636 invoked from network); 26 Nov 2015 16:20:25 -0000
Received: from mail-wm0-f44.google.com (HELO mail-wm0-f44.google.com)
	(74.125.82.44)
	by server-15.tower-206.messagelabs.com with AES128-GCM-SHA256 encrypted
	SMTP; 26 Nov 2015 16:20:25 -0000
Received: by wmuu63 with SMTP id u63so27323067wmu.0
	for <win-pv-devel@lists.xenproject.org>;
	Thu, 26 Nov 2015 08:20:25 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=xGd/kMkEv6daPWRdIBmu3ieFplWX1VHL05h0RNvpVXY=;
	b=BYi0+Cf9vrgQMYWEiHvg31bysER+dKiYGRdn5KmdyTHv/Y5w4hZ9VvAT5cJ5/700ye
	tY3WfM3O80Sh4Adtw8jL2jeKxTQ5d60pkLciHZsg87toDjat4Whpk1oPARpfUIJVTI5D
	WfRZuYnfWrQwaz/HCM1QPMUfBcHn0vfdegljRNizjFxjDVVyZ9sw/uq6/TolFeaLm15a
	6TBynxO/6VuvkRtpfhuzn7ufXTMuCsPbzFvzvHOyENGhL/6mLc108L457JD6nSeLlWCG
	u2bQplt386FosHhl7qQQCz8kq4yXQ6/kkJRu4T5jJfWN75HffWqJUa1NdvqbVG09Vi5R
	Y6cQ==
X-Received: by 10.28.32.65 with SMTP id g62mr4534591wmg.81.1448554825461;
	Thu, 26 Nov 2015 08:20:25 -0800 (PST)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id z10sm3421353wmg.4.2015.11.26.08.20.24
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Thu, 26 Nov 2015 08:20:24 -0800 (PST)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Thu, 26 Nov 2015 16:20:11 +0000
Message-Id: <1448554811-8312-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH] Make sure registry updates and deletes are
	flushed
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

In most cases it is desirable to makre sure any updates are committed to
the registry hive on storage before any further operations are performed.
This patch adds ZwFlushKey() calls to ensure that is the case.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/common/registry.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/src/common/registry.c b/src/common/registry.c
index b75f16b..9e9f79a 100644
--- a/src/common/registry.c
+++ b/src/common/registry.c
@@ -372,6 +372,8 @@ RegistryDeleteSubKey(
 
     ZwClose(SubKey);
 
+    (VOID) ZwFlushKey(Key);
+
     RtlFreeUnicodeString(&Unicode);
 
     return STATUS_SUCCESS;
@@ -610,6 +612,8 @@ RegistryDeleteValue(
 
     RtlFreeUnicodeString(&Unicode);
 
+    (VOID) ZwFlushKey(Key);
+
     return STATUS_SUCCESS;
 
 fail2:
@@ -730,6 +734,8 @@ RegistryUpdateDwordValue(
 
     __RegistryFree(Partial);
 
+    (VOID) ZwFlushKey(Key);
+
     RtlFreeUnicodeString(&Unicode);
 
     return STATUS_SUCCESS;
@@ -1060,6 +1066,8 @@ RegistryUpdateBinaryValue(
 
     __RegistryFree(Partial);
 
+    (VOID) ZwFlushKey(Key);
+
     RtlFreeUnicodeString(&Unicode);
 
     return STATUS_SUCCESS;
@@ -1350,6 +1358,8 @@ RegistryUpdateSzValue(
 
     __RegistryFree(Partial);
 
+    (VOID) ZwFlushKey(Key);
+
     RtlFreeUnicodeString(&Unicode);
 
     return STATUS_SUCCESS;
-- 
2.1.1


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

From win-pv-devel-bounces@lists.xenproject.org Thu Nov 26 16:20:30 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 26 Nov 2015 16:20:30 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1a1zHZ-0002sr-6u; Thu, 26 Nov 2015 16:20:29 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1a1zHW-0002sb-UC
	for win-pv-devel@lists.xenproject.org; Thu, 26 Nov 2015 16:20:27 +0000
Received: from [85.158.139.211] by server-3.bemta-5.messagelabs.com id
	41/68-13487-A4137565; Thu, 26 Nov 2015 16:20:26 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-15.tower-206.messagelabs.com!1448554825!6764591!1
X-Originating-IP: [74.125.82.44]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 7.19.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 40636 invoked from network); 26 Nov 2015 16:20:25 -0000
Received: from mail-wm0-f44.google.com (HELO mail-wm0-f44.google.com)
	(74.125.82.44)
	by server-15.tower-206.messagelabs.com with AES128-GCM-SHA256 encrypted
	SMTP; 26 Nov 2015 16:20:25 -0000
Received: by wmuu63 with SMTP id u63so27323067wmu.0
	for <win-pv-devel@lists.xenproject.org>;
	Thu, 26 Nov 2015 08:20:25 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=xGd/kMkEv6daPWRdIBmu3ieFplWX1VHL05h0RNvpVXY=;
	b=BYi0+Cf9vrgQMYWEiHvg31bysER+dKiYGRdn5KmdyTHv/Y5w4hZ9VvAT5cJ5/700ye
	tY3WfM3O80Sh4Adtw8jL2jeKxTQ5d60pkLciHZsg87toDjat4Whpk1oPARpfUIJVTI5D
	WfRZuYnfWrQwaz/HCM1QPMUfBcHn0vfdegljRNizjFxjDVVyZ9sw/uq6/TolFeaLm15a
	6TBynxO/6VuvkRtpfhuzn7ufXTMuCsPbzFvzvHOyENGhL/6mLc108L457JD6nSeLlWCG
	u2bQplt386FosHhl7qQQCz8kq4yXQ6/kkJRu4T5jJfWN75HffWqJUa1NdvqbVG09Vi5R
	Y6cQ==
X-Received: by 10.28.32.65 with SMTP id g62mr4534591wmg.81.1448554825461;
	Thu, 26 Nov 2015 08:20:25 -0800 (PST)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id z10sm3421353wmg.4.2015.11.26.08.20.24
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Thu, 26 Nov 2015 08:20:24 -0800 (PST)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Thu, 26 Nov 2015 16:20:11 +0000
Message-Id: <1448554811-8312-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH] Make sure registry updates and deletes are
	flushed
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

In most cases it is desirable to makre sure any updates are committed to
the registry hive on storage before any further operations are performed.
This patch adds ZwFlushKey() calls to ensure that is the case.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/common/registry.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/src/common/registry.c b/src/common/registry.c
index b75f16b..9e9f79a 100644
--- a/src/common/registry.c
+++ b/src/common/registry.c
@@ -372,6 +372,8 @@ RegistryDeleteSubKey(
 
     ZwClose(SubKey);
 
+    (VOID) ZwFlushKey(Key);
+
     RtlFreeUnicodeString(&Unicode);
 
     return STATUS_SUCCESS;
@@ -610,6 +612,8 @@ RegistryDeleteValue(
 
     RtlFreeUnicodeString(&Unicode);
 
+    (VOID) ZwFlushKey(Key);
+
     return STATUS_SUCCESS;
 
 fail2:
@@ -730,6 +734,8 @@ RegistryUpdateDwordValue(
 
     __RegistryFree(Partial);
 
+    (VOID) ZwFlushKey(Key);
+
     RtlFreeUnicodeString(&Unicode);
 
     return STATUS_SUCCESS;
@@ -1060,6 +1066,8 @@ RegistryUpdateBinaryValue(
 
     __RegistryFree(Partial);
 
+    (VOID) ZwFlushKey(Key);
+
     RtlFreeUnicodeString(&Unicode);
 
     return STATUS_SUCCESS;
@@ -1350,6 +1358,8 @@ RegistryUpdateSzValue(
 
     __RegistryFree(Partial);
 
+    (VOID) ZwFlushKey(Key);
+
     RtlFreeUnicodeString(&Unicode);
 
     return STATUS_SUCCESS;
-- 
2.1.1


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

From win-pv-devel-bounces@lists.xenproject.org Sun Nov 29 09:54:09 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sun, 29 Nov 2015 09:54:09 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1a2ygH-0005yD-P7; Sun, 29 Nov 2015 09:54:05 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=768f07970=Paul.Durrant@citrix.com>)
	id 1a2ygH-0005y3-2J
	for win-pv-devel@lists.xenproject.org; Sun, 29 Nov 2015 09:54:05 +0000
Received: from [193.109.254.147] by server-7.bemta-14.messagelabs.com id
	0E/B7-28221-C3BCA565; Sun, 29 Nov 2015 09:54:04 +0000
X-Env-Sender: prvs=768f07970=Paul.Durrant@citrix.com
X-Msg-Ref: server-11.tower-27.messagelabs.com!1448790843!7173269!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.35; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 5907 invoked from network); 29 Nov 2015 09:54:03 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-11.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	29 Nov 2015 09:54:03 -0000
X-IronPort-AV: E=Sophos;i="5.20,360,1444694400"; 
   d="scan'208";a="8779197"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Andrew Cooper <Andrew.Cooper3@citrix.com>, Ian Campbell
	<Ian.Campbell@citrix.com>, Ian Jackson <Ian.Jackson@citrix.com>
Thread-Topic: [PATCH XEN v5 13/23] tools: Refactor foreign memory mapping
	into libxenforeignmemory
Thread-Index: AQHRKTe7lSwDG6vubkG1wt5RSiVjhZ6wFH6AgAKvZYA=
Date: Sun, 29 Nov 2015 09:54:00 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F69D32F@AMSPEX01CL01.citrite.net>
References: <1447070397.27774.11.camel@citrix.com>
	<1447070458-31104-1-git-send-email-ian.campbell@citrix.com>
	<1447070458-31104-14-git-send-email-ian.campbell@citrix.com>
	<22083.23332.222797.887453@mariner.uk.xensource.com>
	<1447428109.18450.188.camel@citrix.com>
	<22086.340.522438.701042@mariner.uk.xensource.com>
	<1448644706.13576.138.camel@citrix.com> <56589777.3000601@citrix.com>
In-Reply-To: <56589777.3000601@citrix.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Cc: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>,
	Wei Liu <wei.liu2@citrix.com>,
	"xen-devel@lists.xen.org" <xen-devel@lists.xen.org>
Subject: Re: [win-pv-devel] [PATCH XEN v5 13/23] tools: Refactor foreign
 memory mapping into libxenforeignmemory
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
[snip]
> > C99 was 16 years ago now, I'm struggling to think of a reason not to move
> > the baseline for tools stuff at least to that.
> >
> > https://en.wikipedia.org/wiki/Visual_C%2B%2B might be one such reason I
> > suppose, although I'm not convinced a libvchan port to Windows, even if
> not
> > entirely hypothetical, would be using any of xen.git/tools/libs/* rather
> > than the equivalent frameworks provided by the Windows PV drivers.
> 
> It would be nice to at least be able to use the same header files, for
> ease of porting userspace software.
> 

It's possible that libvchan on Windows will make use of the tools/libs headers. As Andy says it would ease porting client software.

> In this case, VLAs are just being used as an aid for the compiler to
> spot errors.  It doesn't change the API/ABI, and could be #ifdef'd
> around, if we care both for using C99 in general, and Windows support.
> 

We still compile with VS2012 in Citrix and Xen Project uses VS2013 so we can't rely on C99. A #ifdef here does seem like the best solution.

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

From win-pv-devel-bounces@lists.xenproject.org Sun Nov 29 09:54:09 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sun, 29 Nov 2015 09:54:09 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1a2ygH-0005yD-P7; Sun, 29 Nov 2015 09:54:05 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=768f07970=Paul.Durrant@citrix.com>)
	id 1a2ygH-0005y3-2J
	for win-pv-devel@lists.xenproject.org; Sun, 29 Nov 2015 09:54:05 +0000
Received: from [193.109.254.147] by server-7.bemta-14.messagelabs.com id
	0E/B7-28221-C3BCA565; Sun, 29 Nov 2015 09:54:04 +0000
X-Env-Sender: prvs=768f07970=Paul.Durrant@citrix.com
X-Msg-Ref: server-11.tower-27.messagelabs.com!1448790843!7173269!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.35; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 5907 invoked from network); 29 Nov 2015 09:54:03 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-11.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	29 Nov 2015 09:54:03 -0000
X-IronPort-AV: E=Sophos;i="5.20,360,1444694400"; 
   d="scan'208";a="8779197"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Andrew Cooper <Andrew.Cooper3@citrix.com>, Ian Campbell
	<Ian.Campbell@citrix.com>, Ian Jackson <Ian.Jackson@citrix.com>
Thread-Topic: [PATCH XEN v5 13/23] tools: Refactor foreign memory mapping
	into libxenforeignmemory
Thread-Index: AQHRKTe7lSwDG6vubkG1wt5RSiVjhZ6wFH6AgAKvZYA=
Date: Sun, 29 Nov 2015 09:54:00 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F69D32F@AMSPEX01CL01.citrite.net>
References: <1447070397.27774.11.camel@citrix.com>
	<1447070458-31104-1-git-send-email-ian.campbell@citrix.com>
	<1447070458-31104-14-git-send-email-ian.campbell@citrix.com>
	<22083.23332.222797.887453@mariner.uk.xensource.com>
	<1447428109.18450.188.camel@citrix.com>
	<22086.340.522438.701042@mariner.uk.xensource.com>
	<1448644706.13576.138.camel@citrix.com> <56589777.3000601@citrix.com>
In-Reply-To: <56589777.3000601@citrix.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Cc: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>,
	Wei Liu <wei.liu2@citrix.com>,
	"xen-devel@lists.xen.org" <xen-devel@lists.xen.org>
Subject: Re: [win-pv-devel] [PATCH XEN v5 13/23] tools: Refactor foreign
 memory mapping into libxenforeignmemory
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
[snip]
> > C99 was 16 years ago now, I'm struggling to think of a reason not to move
> > the baseline for tools stuff at least to that.
> >
> > https://en.wikipedia.org/wiki/Visual_C%2B%2B might be one such reason I
> > suppose, although I'm not convinced a libvchan port to Windows, even if
> not
> > entirely hypothetical, would be using any of xen.git/tools/libs/* rather
> > than the equivalent frameworks provided by the Windows PV drivers.
> 
> It would be nice to at least be able to use the same header files, for
> ease of porting userspace software.
> 

It's possible that libvchan on Windows will make use of the tools/libs headers. As Andy says it would ease porting client software.

> In this case, VLAs are just being used as an aid for the compiler to
> spot errors.  It doesn't change the API/ABI, and could be #ifdef'd
> around, if we care both for using C99 in general, and Windows support.
> 

We still compile with VS2012 in Citrix and Xen Project uses VS2013 so we can't rely on C99. A #ifdef here does seem like the best solution.

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

From win-pv-devel-bounces@lists.xenproject.org Mon Nov 30 09:52:51 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 30 Nov 2015 09:52:51 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1a3L8c-0007l0-42; Mon, 30 Nov 2015 09:52:50 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=769cfac66=Ian.Campbell@citrix.com>)
	id 1a3L8b-0007km-69
	for win-pv-devel@lists.xenproject.org; Mon, 30 Nov 2015 09:52:49 +0000
Received: from [85.158.139.211] by server-9.bemta-5.messagelabs.com id
	95/4D-30270-07C1C565; Mon, 30 Nov 2015 09:52:48 +0000
X-Env-Sender: prvs=769cfac66=Ian.Campbell@citrix.com
X-Msg-Ref: server-9.tower-206.messagelabs.com!1448877166!7447024!1
X-Originating-IP: [66.165.176.89]
X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: 
	VHJ1c3RlZCBJUDogNjYuMTY1LjE3Ni44OSA9PiAyMDMwMDc=\n,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.35; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 15455 invoked from network); 30 Nov 2015 09:52:47 -0000
Received: from smtp.citrix.com (HELO SMTP.CITRIX.COM) (66.165.176.89)
	by server-9.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	30 Nov 2015 09:52:47 -0000
X-IronPort-AV: E=Sophos;i="5.20,364,1444694400"; d="scan'208";a="315324068"
Message-ID: <1448877118.15768.11.camel@citrix.com>
From: Ian Campbell <ian.campbell@citrix.com>
To: Paul Durrant <Paul.Durrant@citrix.com>, Andrew Cooper
	<Andrew.Cooper3@citrix.com>, Ian Jackson <Ian.Jackson@citrix.com>
Date: Mon, 30 Nov 2015 09:51:58 +0000
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F69D32F@AMSPEX01CL01.citrite.net>
References: <1447070397.27774.11.camel@citrix.com>
	<1447070458-31104-1-git-send-email-ian.campbell@citrix.com>
	<1447070458-31104-14-git-send-email-ian.campbell@citrix.com>
	<22083.23332.222797.887453@mariner.uk.xensource.com>
	<1447428109.18450.188.camel@citrix.com>
	<22086.340.522438.701042@mariner.uk.xensource.com>
	<1448644706.13576.138.camel@citrix.com> <56589777.3000601@citrix.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F69D32F@AMSPEX01CL01.citrite.net>
X-Mailer: Evolution 3.18.1-1 
MIME-Version: 1.0
X-DLP: MIA1
Cc: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>,
	Wei Liu <wei.liu2@citrix.com>,
	"xen-devel@lists.xen.org" <xen-devel@lists.xen.org>
Subject: Re: [win-pv-devel] [PATCH XEN v5 13/23] tools: Refactor foreign
 memory mapping into libxenforeignmemory
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

T24gU3VuLCAyMDE1LTExLTI5IGF0IDA5OjU0ICswMDAwLCBQYXVsIER1cnJhbnQgd3JvdGU6Cj4g
PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQo+IFtzbmlwXQo+ID4gPiBDOTkgd2FzIDE2IHll
YXJzIGFnbyBub3csIEknbSBzdHJ1Z2dsaW5nIHRvIHRoaW5rIG9mIGEgcmVhc29uIG5vdCB0bwo+
ID4gPiBtb3ZlCj4gPiA+IHRoZSBiYXNlbGluZSBmb3IgdG9vbHMgc3R1ZmYgYXQgbGVhc3QgdG8g
dGhhdC4KPiA+ID4gCj4gPiA+IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1Zpc3VhbF9D
JTJCJTJCIG1pZ2h0IGJlIG9uZSBzdWNoIHJlYXNvbgo+ID4gPiBJCj4gPiA+IHN1cHBvc2UsIGFs
dGhvdWdoIEknbSBub3QgY29udmluY2VkIGEgbGlidmNoYW4gcG9ydCB0byBXaW5kb3dzLCBldmVu
Cj4gPiA+IGlmCj4gPiBub3QKPiA+ID4gZW50aXJlbHkgaHlwb3RoZXRpY2FsLCB3b3VsZCBiZSB1
c2luZyBhbnkgb2YgeGVuLmdpdC90b29scy9saWJzLyoKPiA+ID4gcmF0aGVyCj4gPiA+IHRoYW4g
dGhlIGVxdWl2YWxlbnQgZnJhbWV3b3JrcyBwcm92aWRlZCBieSB0aGUgV2luZG93cyBQViBkcml2
ZXJzLgo+ID4gCj4gPiBJdCB3b3VsZCBiZSBuaWNlIHRvIGF0IGxlYXN0IGJlIGFibGUgdG8gdXNl
IHRoZSBzYW1lIGhlYWRlciBmaWxlcywgZm9yCj4gPiBlYXNlIG9mIHBvcnRpbmcgdXNlcnNwYWNl
IHNvZnR3YXJlLgo+ID4gCj4gCj4gSXQncyBwb3NzaWJsZSB0aGF0IGxpYnZjaGFuIG9uIFdpbmRv
d3Mgd2lsbCBtYWtlIHVzZSBvZiB0aGUgdG9vbHMvbGlicwo+IGhlYWRlcnMuIEFzIEFuZHkgc2F5
cyBpdCB3b3VsZCBlYXNlIHBvcnRpbmcgY2xpZW50IHNvZnR3YXJlLgo+IAo+ID4gSW4gdGhpcyBj
YXNlLCBWTEFzIGFyZSBqdXN0IGJlaW5nIHVzZWQgYXMgYW4gYWlkIGZvciB0aGUgY29tcGlsZXIg
dG8KPiA+IHNwb3QgZXJyb3JzLsKgwqBJdCBkb2Vzbid0IGNoYW5nZSB0aGUgQVBJL0FCSSwgYW5k
IGNvdWxkIGJlICNpZmRlZidkCj4gPiBhcm91bmQsIGlmIHdlIGNhcmUgYm90aCBmb3IgdXNpbmcg
Qzk5IGluIGdlbmVyYWwsIGFuZCBXaW5kb3dzIHN1cHBvcnQuCj4gPiAKPiAKPiBXZSBzdGlsbCBj
b21waWxlIHdpdGggVlMyMDEyIGluIENpdHJpeCBhbmQgWGVuIFByb2plY3QgdXNlcyBWUzIwMTMg
c28gd2UKPiBjYW4ndCByZWx5IG9uIEM5OS4gQSAjaWZkZWYgaGVyZSBkb2VzIHNlZW0gbGlrZSB0
aGUgYmVzdCBzb2x1dGlvbi4KCldvdWxkIHlvdSBleHBlY3QgbmV3IHByb2plY3RzIChpLmUuIHN0
dWZmIGJhc2VkIG9uIHRvb2xzL2xpYnMpIHRvIGNvbnRpbnVlCnRvIGhhdmUgcmVxdWlyZW1lbnRz
IHRvIGJ1aWxkIHdpdGggdGhvc2Ugb2xkZXIgdmVyc2lvbnM/IChBbHRob3VnaCB3aXRoCkFuZHkn
cyBsaW5rIHNheWluZyBldmVuIFZTMjAxNSBkb2Vzbid0IGRvIFZMQXMgbWF5YmUgaXQgaXMgYSBi
aXQgbW9vdCkuCgpJIGRvbid0IHRoaW5rIHVzaW5nIFZMQSBoZXJlIGlzIHdvcnRoIGFuIGlmZGVm
LCBidXQgSSB0aGluayBpdCBpcyB3b3J0aApyZW9yZGVyaW5nIHRoZSBhcmd1bWVudHMgc3VjaCB0
aGF0IG9uY2Ugd2UgZW5kIHVwIHdpdGggYSBuZXcgZW5vdWdoCmNvbXBpbGVyIGJhc2VsaW5lIChp
biAkZG9ua2V5cyB5ZWFycykgd2UgY2FuIHN3aXRjaCB3aXRob3V0IGNoYW5naW5nIHRoZQpBQkkg
KEkgdGhpbmsgdGhhdCdzIHRoZSBjYXNlKS4KCklhbi4KCgpfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwp3aW4tcHYtZGV2ZWwgbWFpbGluZyBsaXN0Cndpbi1w
di1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwOi8vbGlzdHMueGVucHJvamVjdC5vcmcv
Y2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL3dpbi1wdi1kZXZlbA==

From win-pv-devel-bounces@lists.xenproject.org Mon Nov 30 09:52:51 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 30 Nov 2015 09:52:51 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1a3L8c-0007l0-42; Mon, 30 Nov 2015 09:52:50 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=769cfac66=Ian.Campbell@citrix.com>)
	id 1a3L8b-0007km-69
	for win-pv-devel@lists.xenproject.org; Mon, 30 Nov 2015 09:52:49 +0000
Received: from [85.158.139.211] by server-9.bemta-5.messagelabs.com id
	95/4D-30270-07C1C565; Mon, 30 Nov 2015 09:52:48 +0000
X-Env-Sender: prvs=769cfac66=Ian.Campbell@citrix.com
X-Msg-Ref: server-9.tower-206.messagelabs.com!1448877166!7447024!1
X-Originating-IP: [66.165.176.89]
X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: 
	VHJ1c3RlZCBJUDogNjYuMTY1LjE3Ni44OSA9PiAyMDMwMDc=\n,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.35; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 15455 invoked from network); 30 Nov 2015 09:52:47 -0000
Received: from smtp.citrix.com (HELO SMTP.CITRIX.COM) (66.165.176.89)
	by server-9.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	30 Nov 2015 09:52:47 -0000
X-IronPort-AV: E=Sophos;i="5.20,364,1444694400"; d="scan'208";a="315324068"
Message-ID: <1448877118.15768.11.camel@citrix.com>
From: Ian Campbell <ian.campbell@citrix.com>
To: Paul Durrant <Paul.Durrant@citrix.com>, Andrew Cooper
	<Andrew.Cooper3@citrix.com>, Ian Jackson <Ian.Jackson@citrix.com>
Date: Mon, 30 Nov 2015 09:51:58 +0000
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F69D32F@AMSPEX01CL01.citrite.net>
References: <1447070397.27774.11.camel@citrix.com>
	<1447070458-31104-1-git-send-email-ian.campbell@citrix.com>
	<1447070458-31104-14-git-send-email-ian.campbell@citrix.com>
	<22083.23332.222797.887453@mariner.uk.xensource.com>
	<1447428109.18450.188.camel@citrix.com>
	<22086.340.522438.701042@mariner.uk.xensource.com>
	<1448644706.13576.138.camel@citrix.com> <56589777.3000601@citrix.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F69D32F@AMSPEX01CL01.citrite.net>
X-Mailer: Evolution 3.18.1-1 
MIME-Version: 1.0
X-DLP: MIA1
Cc: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>,
	Wei Liu <wei.liu2@citrix.com>,
	"xen-devel@lists.xen.org" <xen-devel@lists.xen.org>
Subject: Re: [win-pv-devel] [PATCH XEN v5 13/23] tools: Refactor foreign
 memory mapping into libxenforeignmemory
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

T24gU3VuLCAyMDE1LTExLTI5IGF0IDA5OjU0ICswMDAwLCBQYXVsIER1cnJhbnQgd3JvdGU6Cj4g
PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQo+IFtzbmlwXQo+ID4gPiBDOTkgd2FzIDE2IHll
YXJzIGFnbyBub3csIEknbSBzdHJ1Z2dsaW5nIHRvIHRoaW5rIG9mIGEgcmVhc29uIG5vdCB0bwo+
ID4gPiBtb3ZlCj4gPiA+IHRoZSBiYXNlbGluZSBmb3IgdG9vbHMgc3R1ZmYgYXQgbGVhc3QgdG8g
dGhhdC4KPiA+ID4gCj4gPiA+IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1Zpc3VhbF9D
JTJCJTJCIG1pZ2h0IGJlIG9uZSBzdWNoIHJlYXNvbgo+ID4gPiBJCj4gPiA+IHN1cHBvc2UsIGFs
dGhvdWdoIEknbSBub3QgY29udmluY2VkIGEgbGlidmNoYW4gcG9ydCB0byBXaW5kb3dzLCBldmVu
Cj4gPiA+IGlmCj4gPiBub3QKPiA+ID4gZW50aXJlbHkgaHlwb3RoZXRpY2FsLCB3b3VsZCBiZSB1
c2luZyBhbnkgb2YgeGVuLmdpdC90b29scy9saWJzLyoKPiA+ID4gcmF0aGVyCj4gPiA+IHRoYW4g
dGhlIGVxdWl2YWxlbnQgZnJhbWV3b3JrcyBwcm92aWRlZCBieSB0aGUgV2luZG93cyBQViBkcml2
ZXJzLgo+ID4gCj4gPiBJdCB3b3VsZCBiZSBuaWNlIHRvIGF0IGxlYXN0IGJlIGFibGUgdG8gdXNl
IHRoZSBzYW1lIGhlYWRlciBmaWxlcywgZm9yCj4gPiBlYXNlIG9mIHBvcnRpbmcgdXNlcnNwYWNl
IHNvZnR3YXJlLgo+ID4gCj4gCj4gSXQncyBwb3NzaWJsZSB0aGF0IGxpYnZjaGFuIG9uIFdpbmRv
d3Mgd2lsbCBtYWtlIHVzZSBvZiB0aGUgdG9vbHMvbGlicwo+IGhlYWRlcnMuIEFzIEFuZHkgc2F5
cyBpdCB3b3VsZCBlYXNlIHBvcnRpbmcgY2xpZW50IHNvZnR3YXJlLgo+IAo+ID4gSW4gdGhpcyBj
YXNlLCBWTEFzIGFyZSBqdXN0IGJlaW5nIHVzZWQgYXMgYW4gYWlkIGZvciB0aGUgY29tcGlsZXIg
dG8KPiA+IHNwb3QgZXJyb3JzLsKgwqBJdCBkb2Vzbid0IGNoYW5nZSB0aGUgQVBJL0FCSSwgYW5k
IGNvdWxkIGJlICNpZmRlZidkCj4gPiBhcm91bmQsIGlmIHdlIGNhcmUgYm90aCBmb3IgdXNpbmcg
Qzk5IGluIGdlbmVyYWwsIGFuZCBXaW5kb3dzIHN1cHBvcnQuCj4gPiAKPiAKPiBXZSBzdGlsbCBj
b21waWxlIHdpdGggVlMyMDEyIGluIENpdHJpeCBhbmQgWGVuIFByb2plY3QgdXNlcyBWUzIwMTMg
c28gd2UKPiBjYW4ndCByZWx5IG9uIEM5OS4gQSAjaWZkZWYgaGVyZSBkb2VzIHNlZW0gbGlrZSB0
aGUgYmVzdCBzb2x1dGlvbi4KCldvdWxkIHlvdSBleHBlY3QgbmV3IHByb2plY3RzIChpLmUuIHN0
dWZmIGJhc2VkIG9uIHRvb2xzL2xpYnMpIHRvIGNvbnRpbnVlCnRvIGhhdmUgcmVxdWlyZW1lbnRz
IHRvIGJ1aWxkIHdpdGggdGhvc2Ugb2xkZXIgdmVyc2lvbnM/IChBbHRob3VnaCB3aXRoCkFuZHkn
cyBsaW5rIHNheWluZyBldmVuIFZTMjAxNSBkb2Vzbid0IGRvIFZMQXMgbWF5YmUgaXQgaXMgYSBi
aXQgbW9vdCkuCgpJIGRvbid0IHRoaW5rIHVzaW5nIFZMQSBoZXJlIGlzIHdvcnRoIGFuIGlmZGVm
LCBidXQgSSB0aGluayBpdCBpcyB3b3J0aApyZW9yZGVyaW5nIHRoZSBhcmd1bWVudHMgc3VjaCB0
aGF0IG9uY2Ugd2UgZW5kIHVwIHdpdGggYSBuZXcgZW5vdWdoCmNvbXBpbGVyIGJhc2VsaW5lIChp
biAkZG9ua2V5cyB5ZWFycykgd2UgY2FuIHN3aXRjaCB3aXRob3V0IGNoYW5naW5nIHRoZQpBQkkg
KEkgdGhpbmsgdGhhdCdzIHRoZSBjYXNlKS4KCklhbi4KCgpfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwp3aW4tcHYtZGV2ZWwgbWFpbGluZyBsaXN0Cndpbi1w
di1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwOi8vbGlzdHMueGVucHJvamVjdC5vcmcv
Y2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL3dpbi1wdi1kZXZlbA==

From win-pv-devel-bounces@lists.xenproject.org Mon Nov 30 10:47:52 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 30 Nov 2015 10:47:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1a3Lzs-0002Fn-4T; Mon, 30 Nov 2015 10:47:52 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72) (envelope-from <et@etit.hu>)
	id 1a3Lzq-0002FS-R8
	for win-pv-devel@lists.xenproject.org; Mon, 30 Nov 2015 10:47:50 +0000
Received: from [85.158.139.211] by server-4.bemta-5.messagelabs.com id
	2B/63-24856-5592C565; Mon, 30 Nov 2015 10:47:49 +0000
X-Env-Sender: et@etit.hu
X-Msg-Ref: server-13.tower-206.messagelabs.com!1448880465!7477501!1
X-Originating-IP: [95.140.34.219]
X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG
X-StarScan-Received: 
X-StarScan-Version: 7.35; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 62930 invoked from network); 30 Nov 2015 10:47:46 -0000
Received: from mail.etit.hu (HELO mail.etit.hu) (95.140.34.219)
	by server-13.tower-206.messagelabs.com with SMTP;
	30 Nov 2015 10:47:46 -0000
Received: from localhost (localhost [127.0.0.1])
	by mail.etit.hu (Postfix) with ESMTP id 7C1FDA44;
	Mon, 30 Nov 2015 11:47:45 +0100 (CET)
Received: from [192.168.100.122] (87.229.89.127.z-net.hu [87.229.89.127])
	by mail.etit.hu (Postfix) with ESMTPSA id 9CA6C828;
	Mon, 30 Nov 2015 11:47:37 +0100 (CET)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=etit.hu; s=mail;
	t=1448880457; bh=sYuJ1WchF2OMjG3jdPnB2i6dgXzFHgW0wTEm9iTpkUQ=;
	h=To:From:Subject:Message-ID:Date:MIME-Version:Content-Type:From;
	b=a+YNrIvRJGcziIfBmMLAhckabrXhDX/uC7z0k5ogek2n8XWhAKvvN2i4Y5hf9oECs
	TMxiZc0SCOXDQ5SoY2MFcse/zHGvqzfrunUVh4zSMvNcaqo1dELA2aL44SvBsf6ZwC
	yvWuYFYxJGx+jIZTlLqfFvwzd9YbZ7rd9mimQXFQ=
To: xen-users@lists.xen.org, win-pv-devel@lists.xenproject.org
From: =?UTF-8?B?w4lsacOhcyBUYW3DoXM=?= <et@etit.hu>
X-Enigmail-Draft-Status: N1110
Organization: ETIT[nwpro] KFT
Message-ID: <565C293A.5030705@etit.hu>
Date: Mon, 30 Nov 2015 11:47:22 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101
	Thunderbird/38.3.0
MIME-Version: 1.0
Subject: [win-pv-devel] Windows 10 upgrade to new build with testsigning on
	-> FAIL
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============6336713985298955516=="
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--===============6336713985298955516==
Content-Type: multipart/signed; micalg=pgp-sha1;
 protocol="application/pgp-signature";
 boundary="AHmu3jsPfpFC7ruxHp117B1SPel0fI98d"

This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--AHmu3jsPfpFC7ruxHp117B1SPel0fI98d
Content-Type: text/plain; charset=iso-8859-2
Content-Transfer-Encoding: quoted-printable

Dear all.


I'm using several Windows 10 HVM DOMU-s with XEN4.6. I'm using
xen-winpv-devel drivers (latest ones, from November). Previously on the
xen-users and on the xen-winpv-development list several users inlcuding
me was wishing for signed develoment drivers.

Now it seems, that the time has come to tell you, that it is now a
blocking condition.

Upgrading windows 10 build to the latext 15xxx build automatically turns
off testsigning: this cause that upon next reboot during the upgrade
procedure, the windows 10 machines fail to start (due to xenbus is not
signed). The F8 is offered, I can select "turn off the requirement for
digital signature of the drivers", and reboot. Unfortunately the upgrade
realizes, that "something did not go well", and immediately starts
uninstalling the upgrade package.

And I'm stuck here. May I get any response about the signed drivers?
Thank you!

--=20


=C9li=E1s Tam=E1s
Thomas Elias

ETIT[nwpro] KFT, =DCgyvezet=F5-H=E1l=F3zatbiztons=E1gi specialista
ETIT[nwpro] Ltd, General Manager-Network security specialist

Tel. HU: +36/30-497-1626
Tel. DE: +49/160-651-8723
OpenPGP pubkey: http://etit.hu/doc/et-pub.asc

Okleveles m=E9rn=F6k-informatikus (MSC)
Master of Science in Information Technology (MSC)

Kapcsolat: http://etit.hu/index.php/hu/kapcsolat
Jogi nyilatkozat: http://etit.hu/disclaimer-email-hu.txt
Contact: http://etit.hu/index.php/en/contact
Disclaimer: http://etit.hu/disclaimer-email-en.txt


--AHmu3jsPfpFC7ruxHp117B1SPel0fI98d
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="signature.asc"

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.22 (GNU/Linux)

iQIcBAEBAgAGBQJWXClJAAoJENWYes1C3s/C6QIP/3JIRqMnhNkn2tpKqhs2O5ky
ropLEpTNnZe7UWqL1AMrNFDb5lT20D2BWQLvQ7CI+VkomtzRPf/hse5/SMHwkbKc
vDdyw6rUuwAZzJHaFcnrPrNscpstkVEA4C5qR07EvkeSjKnB4qPHqg8GEW3fiDOV
C+zlpDI909ZTYF+EyqodjYQV+UqmdezJOYhhxDUNj8O59XNCOoYbNiSdWQ303ifu
hhmCrgj7FoeNPYx7KD+wOi56cUpiz6VRqaJBYZoLzHDQArgEf/+KvWhBZOH6rcth
GK5ItXFlWKcThc0ILp0gJRy2YgU9jfok3aqTcYvxiUY1GGGjB3hP4Ea3gOnont9k
i2gP8zPlqkFJm3Zz0MXm6Jfy94D6AQmju1rBmnD2TF1K+h9/FOIH4OL9VrYGetuA
UFtq5LkJtCtS+fUdRyukkWytK6P77VhhqUPXitXD5Mor+kYfV5vRloa2ru9uDixj
rzLiDg6Gpgs31C5HuCgY7iDHMjy7FNvGwwWJ9+WdKxd0z/g1hVt2JenCPTGCVUtV
4Na7zeu/EW1Ue5mm53LDPHybVF/1yn3TwyXtKubzASfRBQKVXAwBSBT2v7rYP+Jd
47tse3x3GyGP1CO1FPUs8GCZuDL4rPbbdLhCJceTVX6EHt2Hd0q0iR2i8znUSwEB
xW9sOsyQA24lGx6t4aA6
=CDrj
-----END PGP SIGNATURE-----

--AHmu3jsPfpFC7ruxHp117B1SPel0fI98d--


--===============6336713985298955516==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--===============6336713985298955516==--


From win-pv-devel-bounces@lists.xenproject.org Mon Nov 30 10:47:52 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 30 Nov 2015 10:47:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1a3Lzs-0002Fn-4T; Mon, 30 Nov 2015 10:47:52 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72) (envelope-from <et@etit.hu>)
	id 1a3Lzq-0002FS-R8
	for win-pv-devel@lists.xenproject.org; Mon, 30 Nov 2015 10:47:50 +0000
Received: from [85.158.139.211] by server-4.bemta-5.messagelabs.com id
	2B/63-24856-5592C565; Mon, 30 Nov 2015 10:47:49 +0000
X-Env-Sender: et@etit.hu
X-Msg-Ref: server-13.tower-206.messagelabs.com!1448880465!7477501!1
X-Originating-IP: [95.140.34.219]
X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG
X-StarScan-Received: 
X-StarScan-Version: 7.35; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 62930 invoked from network); 30 Nov 2015 10:47:46 -0000
Received: from mail.etit.hu (HELO mail.etit.hu) (95.140.34.219)
	by server-13.tower-206.messagelabs.com with SMTP;
	30 Nov 2015 10:47:46 -0000
Received: from localhost (localhost [127.0.0.1])
	by mail.etit.hu (Postfix) with ESMTP id 7C1FDA44;
	Mon, 30 Nov 2015 11:47:45 +0100 (CET)
Received: from [192.168.100.122] (87.229.89.127.z-net.hu [87.229.89.127])
	by mail.etit.hu (Postfix) with ESMTPSA id 9CA6C828;
	Mon, 30 Nov 2015 11:47:37 +0100 (CET)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=etit.hu; s=mail;
	t=1448880457; bh=sYuJ1WchF2OMjG3jdPnB2i6dgXzFHgW0wTEm9iTpkUQ=;
	h=To:From:Subject:Message-ID:Date:MIME-Version:Content-Type:From;
	b=a+YNrIvRJGcziIfBmMLAhckabrXhDX/uC7z0k5ogek2n8XWhAKvvN2i4Y5hf9oECs
	TMxiZc0SCOXDQ5SoY2MFcse/zHGvqzfrunUVh4zSMvNcaqo1dELA2aL44SvBsf6ZwC
	yvWuYFYxJGx+jIZTlLqfFvwzd9YbZ7rd9mimQXFQ=
To: xen-users@lists.xen.org, win-pv-devel@lists.xenproject.org
From: =?UTF-8?B?w4lsacOhcyBUYW3DoXM=?= <et@etit.hu>
X-Enigmail-Draft-Status: N1110
Organization: ETIT[nwpro] KFT
Message-ID: <565C293A.5030705@etit.hu>
Date: Mon, 30 Nov 2015 11:47:22 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101
	Thunderbird/38.3.0
MIME-Version: 1.0
Subject: [win-pv-devel] Windows 10 upgrade to new build with testsigning on
	-> FAIL
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============6336713985298955516=="
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--===============6336713985298955516==
Content-Type: multipart/signed; micalg=pgp-sha1;
 protocol="application/pgp-signature";
 boundary="AHmu3jsPfpFC7ruxHp117B1SPel0fI98d"

This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--AHmu3jsPfpFC7ruxHp117B1SPel0fI98d
Content-Type: text/plain; charset=iso-8859-2
Content-Transfer-Encoding: quoted-printable

Dear all.


I'm using several Windows 10 HVM DOMU-s with XEN4.6. I'm using
xen-winpv-devel drivers (latest ones, from November). Previously on the
xen-users and on the xen-winpv-development list several users inlcuding
me was wishing for signed develoment drivers.

Now it seems, that the time has come to tell you, that it is now a
blocking condition.

Upgrading windows 10 build to the latext 15xxx build automatically turns
off testsigning: this cause that upon next reboot during the upgrade
procedure, the windows 10 machines fail to start (due to xenbus is not
signed). The F8 is offered, I can select "turn off the requirement for
digital signature of the drivers", and reboot. Unfortunately the upgrade
realizes, that "something did not go well", and immediately starts
uninstalling the upgrade package.

And I'm stuck here. May I get any response about the signed drivers?
Thank you!

--=20


=C9li=E1s Tam=E1s
Thomas Elias

ETIT[nwpro] KFT, =DCgyvezet=F5-H=E1l=F3zatbiztons=E1gi specialista
ETIT[nwpro] Ltd, General Manager-Network security specialist

Tel. HU: +36/30-497-1626
Tel. DE: +49/160-651-8723
OpenPGP pubkey: http://etit.hu/doc/et-pub.asc

Okleveles m=E9rn=F6k-informatikus (MSC)
Master of Science in Information Technology (MSC)

Kapcsolat: http://etit.hu/index.php/hu/kapcsolat
Jogi nyilatkozat: http://etit.hu/disclaimer-email-hu.txt
Contact: http://etit.hu/index.php/en/contact
Disclaimer: http://etit.hu/disclaimer-email-en.txt


--AHmu3jsPfpFC7ruxHp117B1SPel0fI98d
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="signature.asc"

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.22 (GNU/Linux)

iQIcBAEBAgAGBQJWXClJAAoJENWYes1C3s/C6QIP/3JIRqMnhNkn2tpKqhs2O5ky
ropLEpTNnZe7UWqL1AMrNFDb5lT20D2BWQLvQ7CI+VkomtzRPf/hse5/SMHwkbKc
vDdyw6rUuwAZzJHaFcnrPrNscpstkVEA4C5qR07EvkeSjKnB4qPHqg8GEW3fiDOV
C+zlpDI909ZTYF+EyqodjYQV+UqmdezJOYhhxDUNj8O59XNCOoYbNiSdWQ303ifu
hhmCrgj7FoeNPYx7KD+wOi56cUpiz6VRqaJBYZoLzHDQArgEf/+KvWhBZOH6rcth
GK5ItXFlWKcThc0ILp0gJRy2YgU9jfok3aqTcYvxiUY1GGGjB3hP4Ea3gOnont9k
i2gP8zPlqkFJm3Zz0MXm6Jfy94D6AQmju1rBmnD2TF1K+h9/FOIH4OL9VrYGetuA
UFtq5LkJtCtS+fUdRyukkWytK6P77VhhqUPXitXD5Mor+kYfV5vRloa2ru9uDixj
rzLiDg6Gpgs31C5HuCgY7iDHMjy7FNvGwwWJ9+WdKxd0z/g1hVt2JenCPTGCVUtV
4Na7zeu/EW1Ue5mm53LDPHybVF/1yn3TwyXtKubzASfRBQKVXAwBSBT2v7rYP+Jd
47tse3x3GyGP1CO1FPUs8GCZuDL4rPbbdLhCJceTVX6EHt2Hd0q0iR2i8znUSwEB
xW9sOsyQA24lGx6t4aA6
=CDrj
-----END PGP SIGNATURE-----

--AHmu3jsPfpFC7ruxHp117B1SPel0fI98d--


--===============6336713985298955516==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--===============6336713985298955516==--


