From win-pv-devel-bounces@lists.xenproject.org Mon Oct 06 16:59:43 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 06 Oct 2014 16:59: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 1XbBdP-0001zv-5J; Mon, 06 Oct 2014 16:59:43 +0000
Received: from mail6.bemta4.messagelabs.com ([85.158.143.247])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <Paul.Durrant@citrix.com>) id 1XbBdO-0001zq-0d
	for win-pv-devel@lists.xenproject.org; Mon, 06 Oct 2014 16:59:42 +0000
Received: from [85.158.143.35:3829] by server-3.bemta-4.messagelabs.com id
	1D/96-06192-D7AC2345; Mon, 06 Oct 2014 16:59:41 +0000
X-Env-Sender: Paul.Durrant@citrix.com
X-Msg-Ref: server-6.tower-21.messagelabs.com!1412614779!14117573!1
X-Originating-IP: [66.165.176.89]
X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: 
	VHJ1c3RlZCBJUDogNjYuMTY1LjE3Ni44OSA9PiAyMDMwMDc=\n
X-StarScan-Received: 
X-StarScan-Version: 6.12.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 8030 invoked from network); 6 Oct 2014 16:59:40 -0000
Received: from smtp.citrix.com (HELO SMTP.CITRIX.COM) (66.165.176.89)
	by server-6.tower-21.messagelabs.com with RC4-SHA encrypted SMTP;
	6 Oct 2014 16:59:40 -0000
X-IronPort-AV: E=Sophos;i="5.04,664,1406592000"; d="scan'208";a="178656254"
Received: from ukmail1.uk.xensource.com (10.80.16.128) by smtprelay.citrix.com
	(10.13.107.78) with Microsoft SMTP Server id 14.3.181.6;
	Mon, 6 Oct 2014 12:59:38 -0400
Received: from fountains.uk.xensource.com ([10.80.2.29]
	helo=localhost.localdomain)	by ukmail1.uk.xensource.com with esmtp
	(Exim
	4.69)	(envelope-from <paul.durrant@citrix.com>)	id 1XbBdK-0008NW-Dj;
	Mon, 06 Oct 2014 17:59:38 +0100
From: Paul Durrant <paul.durrant@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
Date: Mon, 6 Oct 2014 17:59:27 +0100
Message-ID: <1412614767-5288-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
MIME-Version: 1.0
X-DLP: MIA2
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH] Add missing acquisition of the UNPLUG
	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>
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

Commit cba6dad2df306885dfc65908f14ce6e2d8a86211 changed the way that
emulated devices are unplugged. It used to be that XENFILT waited until it
detected the presence of the 'active' device that XENBUS bound to before
deciding whether to unplug, but that commit simply made sure that the
'active' device always appears unless something has drastically changed in
the VM configuration. Unfortunately, in making that change, the code that
acquired the initial reference to the unplug interface - and thereby caused
emulated devices to be unplugged - was lost. This patch adds in the missing
acquisition.

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

diff --git a/src/xenfilt/driver.c b/src/xenfilt/driver.c
index 01661aa..86c6800 100644
--- a/src/xenfilt/driver.c
+++ b/src/xenfilt/driver.c
@@ -59,7 +59,6 @@ typedef struct _XENFILT_DRIVER {
 
     XENFILT_EMULATED_INTERFACE  EmulatedInterface;
     XENFILT_UNPLUG_INTERFACE    UnplugInterface;
-    BOOLEAN                     UnplugAcquired;
 } XENFILT_DRIVER, *PXENFILT_DRIVER;
 
 static XENFILT_DRIVER   Driver;
@@ -305,10 +304,7 @@ DriverUnload(
     if (*InitSafeBootMode > 0)
         goto done;
 
-    if (Driver.UnplugAcquired) {
-        XENFILT_UNPLUG(Release, &Driver.UnplugInterface);
-        Driver.UnplugAcquired = FALSE;
-    }
+    XENFILT_UNPLUG(Release, &Driver.UnplugInterface);
 
     XENFILT_EMULATED(Release, &Driver.EmulatedInterface);
 
@@ -679,6 +675,10 @@ DriverEntry(
     if (!NT_SUCCESS(status))
         goto fail8;
 
+    status = XENFILT_UNPLUG(Acquire, &Driver.UnplugInterface);
+    if (!NT_SUCCESS(status))
+        goto fail9;
+
     RegistryCloseKey(ServiceKey);
 
     DriverObject->DriverExtension->AddDevice = DriverAddDevice;
@@ -693,6 +693,11 @@ done:
     Trace("<====\n");
     return STATUS_SUCCESS;
 
+fail9:
+    Error("fail9\n");
+
+    XENFILT_EMULATED(Release, &Driver.EmulatedInterface);
+
 fail8:
     Error("fail8\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 Mon Oct 06 16:59:43 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 06 Oct 2014 16:59: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 1XbBdP-0001zv-5J; Mon, 06 Oct 2014 16:59:43 +0000
Received: from mail6.bemta4.messagelabs.com ([85.158.143.247])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <Paul.Durrant@citrix.com>) id 1XbBdO-0001zq-0d
	for win-pv-devel@lists.xenproject.org; Mon, 06 Oct 2014 16:59:42 +0000
Received: from [85.158.143.35:3829] by server-3.bemta-4.messagelabs.com id
	1D/96-06192-D7AC2345; Mon, 06 Oct 2014 16:59:41 +0000
X-Env-Sender: Paul.Durrant@citrix.com
X-Msg-Ref: server-6.tower-21.messagelabs.com!1412614779!14117573!1
X-Originating-IP: [66.165.176.89]
X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: 
	VHJ1c3RlZCBJUDogNjYuMTY1LjE3Ni44OSA9PiAyMDMwMDc=\n
X-StarScan-Received: 
X-StarScan-Version: 6.12.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 8030 invoked from network); 6 Oct 2014 16:59:40 -0000
Received: from smtp.citrix.com (HELO SMTP.CITRIX.COM) (66.165.176.89)
	by server-6.tower-21.messagelabs.com with RC4-SHA encrypted SMTP;
	6 Oct 2014 16:59:40 -0000
X-IronPort-AV: E=Sophos;i="5.04,664,1406592000"; d="scan'208";a="178656254"
Received: from ukmail1.uk.xensource.com (10.80.16.128) by smtprelay.citrix.com
	(10.13.107.78) with Microsoft SMTP Server id 14.3.181.6;
	Mon, 6 Oct 2014 12:59:38 -0400
Received: from fountains.uk.xensource.com ([10.80.2.29]
	helo=localhost.localdomain)	by ukmail1.uk.xensource.com with esmtp
	(Exim
	4.69)	(envelope-from <paul.durrant@citrix.com>)	id 1XbBdK-0008NW-Dj;
	Mon, 06 Oct 2014 17:59:38 +0100
From: Paul Durrant <paul.durrant@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
Date: Mon, 6 Oct 2014 17:59:27 +0100
Message-ID: <1412614767-5288-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
MIME-Version: 1.0
X-DLP: MIA2
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH] Add missing acquisition of the UNPLUG
	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>
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

Commit cba6dad2df306885dfc65908f14ce6e2d8a86211 changed the way that
emulated devices are unplugged. It used to be that XENFILT waited until it
detected the presence of the 'active' device that XENBUS bound to before
deciding whether to unplug, but that commit simply made sure that the
'active' device always appears unless something has drastically changed in
the VM configuration. Unfortunately, in making that change, the code that
acquired the initial reference to the unplug interface - and thereby caused
emulated devices to be unplugged - was lost. This patch adds in the missing
acquisition.

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

diff --git a/src/xenfilt/driver.c b/src/xenfilt/driver.c
index 01661aa..86c6800 100644
--- a/src/xenfilt/driver.c
+++ b/src/xenfilt/driver.c
@@ -59,7 +59,6 @@ typedef struct _XENFILT_DRIVER {
 
     XENFILT_EMULATED_INTERFACE  EmulatedInterface;
     XENFILT_UNPLUG_INTERFACE    UnplugInterface;
-    BOOLEAN                     UnplugAcquired;
 } XENFILT_DRIVER, *PXENFILT_DRIVER;
 
 static XENFILT_DRIVER   Driver;
@@ -305,10 +304,7 @@ DriverUnload(
     if (*InitSafeBootMode > 0)
         goto done;
 
-    if (Driver.UnplugAcquired) {
-        XENFILT_UNPLUG(Release, &Driver.UnplugInterface);
-        Driver.UnplugAcquired = FALSE;
-    }
+    XENFILT_UNPLUG(Release, &Driver.UnplugInterface);
 
     XENFILT_EMULATED(Release, &Driver.EmulatedInterface);
 
@@ -679,6 +675,10 @@ DriverEntry(
     if (!NT_SUCCESS(status))
         goto fail8;
 
+    status = XENFILT_UNPLUG(Acquire, &Driver.UnplugInterface);
+    if (!NT_SUCCESS(status))
+        goto fail9;
+
     RegistryCloseKey(ServiceKey);
 
     DriverObject->DriverExtension->AddDevice = DriverAddDevice;
@@ -693,6 +693,11 @@ done:
     Trace("<====\n");
     return STATUS_SUCCESS;
 
+fail9:
+    Error("fail9\n");
+
+    XENFILT_EMULATED(Release, &Driver.EmulatedInterface);
+
 fail8:
     Error("fail8\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 Oct 07 09:28:18 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 07 Oct 2014 09:28: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 1XbR46-0007tV-12; Tue, 07 Oct 2014 09:28:18 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <Paul.Durrant@citrix.com>) id 1XbR44-0007tL-To
	for win-pv-devel@lists.xenproject.org; Tue, 07 Oct 2014 09:28:17 +0000
Received: from [193.109.254.147:57530] by server-14.bemta-14.messagelabs.com
	id 3A/32-18345-032B3345; Tue, 07 Oct 2014 09:28:16 +0000
X-Env-Sender: Paul.Durrant@citrix.com
X-Msg-Ref: server-11.tower-27.messagelabs.com!1412674094!10501731!1
X-Originating-IP: [66.165.176.63]
X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: 
	VHJ1c3RlZCBJUDogNjYuMTY1LjE3Ni42MyA9PiAzMDYwNDg=\n
X-StarScan-Received: 
X-StarScan-Version: 6.12.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 26093 invoked from network); 7 Oct 2014 09:28:15 -0000
Received: from smtp02.citrix.com (HELO SMTP02.CITRIX.COM) (66.165.176.63)
	by server-11.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	7 Oct 2014 09:28:15 -0000
X-IronPort-AV: E=Sophos;i="5.04,669,1406592000"; d="scan'208";a="180001948"
Received: from ukmail1.uk.xensource.com (10.80.16.128) by smtprelay.citrix.com
	(10.13.107.79) with Microsoft SMTP Server id 14.3.181.6;
	Tue, 7 Oct 2014 05:27:44 -0400
Received: from fountains.uk.xensource.com ([10.80.2.29]
	helo=localhost.localdomain)	by ukmail1.uk.xensource.com with esmtp
	(Exim
	4.69)	(envelope-from <paul.durrant@citrix.com>)	id 1XbR3Y-0003Dv-1I;
	Tue, 07 Oct 2014 10:27:44 +0100
From: Paul Durrant <paul.durrant@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
Date: Tue, 7 Oct 2014 10:27:33 +0100
Message-ID: <1412674053-3500-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
MIME-Version: 1.0
X-DLP: MIA2
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH] Handle lack of IPv6 registry keys in
	co-installer
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

The co-installer attempts to copy IPv6 address information from the any
relevant emulated device to the PV device during installation, but will fail
if no IPv6 address information is present. This is not an error condition and
so the co-installer should simply skip this copying operation if no address
information is found.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/coinst/coinst.c | 55 ++++++++++++++++++++++++++++-------------------------
 1 file changed, 29 insertions(+), 26 deletions(-)

diff --git a/src/coinst/coinst.c b/src/coinst/coinst.c
index 450dc5f..532a382 100644
--- a/src/coinst/coinst.c
+++ b/src/coinst/coinst.c
@@ -1218,6 +1218,16 @@ CopyValues(
     Log("DESTINATION: %s", DestinationKeyName);
     Log("SOURCE: %s", SourceKeyName);
 
+    Error = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
+                         SourceKeyName,
+                         0,
+                         KEY_ALL_ACCESS,
+                         &SourceKey);
+    if (Error != ERROR_SUCCESS) {
+        SetLastError(Error);
+        goto fail1;
+    }
+    
     Error = RegCreateKeyEx(HKEY_LOCAL_MACHINE,
                            DestinationKeyName,
                            0,
@@ -1229,23 +1239,13 @@ CopyValues(
                            NULL);
     if (Error != ERROR_SUCCESS) {
         SetLastError(Error);
-        goto fail1;
-    }
-
-    Error = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
-                         SourceKeyName,
-                         0,
-                         KEY_ALL_ACCESS,
-                         &SourceKey);
-    if (Error != ERROR_SUCCESS) {
-        SetLastError(Error);
         goto fail2;
     }
-    
+
     CopyKeyValues(DestinationKey, SourceKey);
 
-    RegCloseKey(SourceKey);
     RegCloseKey(DestinationKey);
+    RegCloseKey(SourceKey);
 
     Log("<====");
 
@@ -1254,7 +1254,7 @@ CopyValues(
 fail2:
     Log("fail2");
 
-    RegCloseKey(DestinationKey);
+    RegCloseKey(SourceKey);
 
 fail1:
     Error = GetLastError();
@@ -1379,6 +1379,19 @@ CopyIpVersion6Addresses(
     Log("DESTINATION: %s\\%s", DestinationKeyName, DestinationValueName);
     Log("SOURCE: %s\\%s", SourceKeyName, SourceValueName);
 
+    Error = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
+                         SourceKeyName,
+                         0,
+                         KEY_ALL_ACCESS,
+                         &SourceKey);
+    if (Error != ERROR_SUCCESS) {
+        if (Error == ERROR_FILE_NOT_FOUND)
+            goto done;
+
+        SetLastError(Error);
+        goto fail1;
+    }
+
     Error = RegCreateKeyEx(HKEY_LOCAL_MACHINE,
                            DestinationKeyName,
                            0,
@@ -1390,16 +1403,6 @@ CopyIpVersion6Addresses(
                            NULL);
     if (Error != ERROR_SUCCESS) {
         SetLastError(Error);
-        goto fail1;
-    }
-
-    Error = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
-                         SourceKeyName,
-                         0,
-                         KEY_ALL_ACCESS,
-                         &SourceKey);
-    if (Error != ERROR_SUCCESS) {
-        SetLastError(Error);
         goto fail2;
     }
 
@@ -1483,8 +1486,8 @@ CopyIpVersion6Addresses(
     free(Value);
     free(Name);
 
-    RegCloseKey(SourceKey);
     RegCloseKey(DestinationKey);
+    RegCloseKey(SourceKey);
 
 done:
 
@@ -1509,12 +1512,12 @@ fail4:
 fail3:
     Log("fail3");
 
-    RegCloseKey(SourceKey);
+    RegCloseKey(DestinationKey);
 
 fail2:
     Log("fail2");
 
-    RegCloseKey(DestinationKey);
+    RegCloseKey(SourceKey);
 
 fail1:
     Error = GetLastError();
-- 
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 Oct 07 09:28:18 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 07 Oct 2014 09:28: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 1XbR46-0007tV-12; Tue, 07 Oct 2014 09:28:18 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <Paul.Durrant@citrix.com>) id 1XbR44-0007tL-To
	for win-pv-devel@lists.xenproject.org; Tue, 07 Oct 2014 09:28:17 +0000
Received: from [193.109.254.147:57530] by server-14.bemta-14.messagelabs.com
	id 3A/32-18345-032B3345; Tue, 07 Oct 2014 09:28:16 +0000
X-Env-Sender: Paul.Durrant@citrix.com
X-Msg-Ref: server-11.tower-27.messagelabs.com!1412674094!10501731!1
X-Originating-IP: [66.165.176.63]
X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: 
	VHJ1c3RlZCBJUDogNjYuMTY1LjE3Ni42MyA9PiAzMDYwNDg=\n
X-StarScan-Received: 
X-StarScan-Version: 6.12.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 26093 invoked from network); 7 Oct 2014 09:28:15 -0000
Received: from smtp02.citrix.com (HELO SMTP02.CITRIX.COM) (66.165.176.63)
	by server-11.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	7 Oct 2014 09:28:15 -0000
X-IronPort-AV: E=Sophos;i="5.04,669,1406592000"; d="scan'208";a="180001948"
Received: from ukmail1.uk.xensource.com (10.80.16.128) by smtprelay.citrix.com
	(10.13.107.79) with Microsoft SMTP Server id 14.3.181.6;
	Tue, 7 Oct 2014 05:27:44 -0400
Received: from fountains.uk.xensource.com ([10.80.2.29]
	helo=localhost.localdomain)	by ukmail1.uk.xensource.com with esmtp
	(Exim
	4.69)	(envelope-from <paul.durrant@citrix.com>)	id 1XbR3Y-0003Dv-1I;
	Tue, 07 Oct 2014 10:27:44 +0100
From: Paul Durrant <paul.durrant@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
Date: Tue, 7 Oct 2014 10:27:33 +0100
Message-ID: <1412674053-3500-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
MIME-Version: 1.0
X-DLP: MIA2
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH] Handle lack of IPv6 registry keys in
	co-installer
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

The co-installer attempts to copy IPv6 address information from the any
relevant emulated device to the PV device during installation, but will fail
if no IPv6 address information is present. This is not an error condition and
so the co-installer should simply skip this copying operation if no address
information is found.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/coinst/coinst.c | 55 ++++++++++++++++++++++++++++-------------------------
 1 file changed, 29 insertions(+), 26 deletions(-)

diff --git a/src/coinst/coinst.c b/src/coinst/coinst.c
index 450dc5f..532a382 100644
--- a/src/coinst/coinst.c
+++ b/src/coinst/coinst.c
@@ -1218,6 +1218,16 @@ CopyValues(
     Log("DESTINATION: %s", DestinationKeyName);
     Log("SOURCE: %s", SourceKeyName);
 
+    Error = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
+                         SourceKeyName,
+                         0,
+                         KEY_ALL_ACCESS,
+                         &SourceKey);
+    if (Error != ERROR_SUCCESS) {
+        SetLastError(Error);
+        goto fail1;
+    }
+    
     Error = RegCreateKeyEx(HKEY_LOCAL_MACHINE,
                            DestinationKeyName,
                            0,
@@ -1229,23 +1239,13 @@ CopyValues(
                            NULL);
     if (Error != ERROR_SUCCESS) {
         SetLastError(Error);
-        goto fail1;
-    }
-
-    Error = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
-                         SourceKeyName,
-                         0,
-                         KEY_ALL_ACCESS,
-                         &SourceKey);
-    if (Error != ERROR_SUCCESS) {
-        SetLastError(Error);
         goto fail2;
     }
-    
+
     CopyKeyValues(DestinationKey, SourceKey);
 
-    RegCloseKey(SourceKey);
     RegCloseKey(DestinationKey);
+    RegCloseKey(SourceKey);
 
     Log("<====");
 
@@ -1254,7 +1254,7 @@ CopyValues(
 fail2:
     Log("fail2");
 
-    RegCloseKey(DestinationKey);
+    RegCloseKey(SourceKey);
 
 fail1:
     Error = GetLastError();
@@ -1379,6 +1379,19 @@ CopyIpVersion6Addresses(
     Log("DESTINATION: %s\\%s", DestinationKeyName, DestinationValueName);
     Log("SOURCE: %s\\%s", SourceKeyName, SourceValueName);
 
+    Error = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
+                         SourceKeyName,
+                         0,
+                         KEY_ALL_ACCESS,
+                         &SourceKey);
+    if (Error != ERROR_SUCCESS) {
+        if (Error == ERROR_FILE_NOT_FOUND)
+            goto done;
+
+        SetLastError(Error);
+        goto fail1;
+    }
+
     Error = RegCreateKeyEx(HKEY_LOCAL_MACHINE,
                            DestinationKeyName,
                            0,
@@ -1390,16 +1403,6 @@ CopyIpVersion6Addresses(
                            NULL);
     if (Error != ERROR_SUCCESS) {
         SetLastError(Error);
-        goto fail1;
-    }
-
-    Error = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
-                         SourceKeyName,
-                         0,
-                         KEY_ALL_ACCESS,
-                         &SourceKey);
-    if (Error != ERROR_SUCCESS) {
-        SetLastError(Error);
         goto fail2;
     }
 
@@ -1483,8 +1486,8 @@ CopyIpVersion6Addresses(
     free(Value);
     free(Name);
 
-    RegCloseKey(SourceKey);
     RegCloseKey(DestinationKey);
+    RegCloseKey(SourceKey);
 
 done:
 
@@ -1509,12 +1512,12 @@ fail4:
 fail3:
     Log("fail3");
 
-    RegCloseKey(SourceKey);
+    RegCloseKey(DestinationKey);
 
 fail2:
     Log("fail2");
 
-    RegCloseKey(DestinationKey);
+    RegCloseKey(SourceKey);
 
 fail1:
     Error = GetLastError();
-- 
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 Oct 07 13:53:29 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 07 Oct 2014 13:53: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 1XbVCj-0000Ob-D0; Tue, 07 Oct 2014 13:53:29 +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 1XbVCi-0000OW-Ga
	for win-pv-devel@lists.xenproject.org; Tue, 07 Oct 2014 13:53:28 +0000
Received: from [85.158.137.68:17066] by server-7.bemta-3.messagelabs.com id
	DA/F0-01084-750F3345; Tue, 07 Oct 2014 13:53:27 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-7.tower-31.messagelabs.com!1412690005!12008557!1
X-Originating-IP: [209.85.212.171]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 6.12.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 10779 invoked from network); 7 Oct 2014 13:53:26 -0000
Received: from mail-wi0-f171.google.com (HELO mail-wi0-f171.google.com)
	(209.85.212.171)
	by server-7.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	7 Oct 2014 13:53:26 -0000
Received: by mail-wi0-f171.google.com with SMTP id em10so7915328wid.4
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 07 Oct 2014 06:53:25 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:message-id:date:from:user-agent:mime-version:to
	:cc:subject:content-type:content-transfer-encoding;
	bh=Dv8IKT6P2dDDBAUJZC+qyjrnSALc35vJo/ddA7HiwoQ=;
	b=iTI6NeYWV/uN0efvwuBAdcasCrjruPBFlHj60IiyPTAN799bebjqmwakQZXdSfJb04
	RlrTpPdz7vF21H5X+UR1J8G5c1CFbyUOAI1jHxDav+9bIOmWKHkLYaETYU7oncwlcW6t
	665RtPKaWH3D9FlaarJ2D7K3SHsW3MQzfogmHQuVbZOyyDPE8ipLlh74/Fjag1JEq/I0
	lcTToutsEVc4fJQK20GJqp2oS2Do1HQCbtUeLQ1s+3DXBGOtEnAmorf2XJz0RutueYqu
	7eMa65nBfcSiHVsm3wnNgiFp1A30EmaeV5rI9A2xUNG9VrkjLzOQICororFQvcHfifAJ
	NdXQ==
X-Gm-Message-State: ALoCoQnHr92chEwe+IiS4DhRH1puzfM7InUNWjJGD3fNReF1jH2Fzd2FoCHAwW4iU/h1N0AVnwmF
X-Received: by 10.180.39.44 with SMTP id m12mr28531985wik.25.1412690005618;
	Tue, 07 Oct 2014 06:53:25 -0700 (PDT)
Received: from [192.168.1.15] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by mx.google.com with ESMTPSA id
	os4sm19913321wjc.48.2014.10.07.06.53.24 for <multiple recipients>
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Tue, 07 Oct 2014 06:53:25 -0700 (PDT)
Message-ID: <5433F056.4020704@m2r.biz>
Date: Tue, 07 Oct 2014 15:53:26 +0200
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64;
	rv:24.0) Gecko/20100101 Thunderbird/24.6.0
MIME-Version: 1.0
To: win-pv-devel@lists.xenproject.org
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] Question about windows pv driver update
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

I tried to update xenbus with today's build but dpinst fails.
For update pv drivers I must uninstall all them from control panel, 
reboot windows and reinstall the newer ones? Is correct or I must do 
different and/or other things?
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 Tue Oct 07 13:53:29 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 07 Oct 2014 13:53: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 1XbVCj-0000Ob-D0; Tue, 07 Oct 2014 13:53:29 +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 1XbVCi-0000OW-Ga
	for win-pv-devel@lists.xenproject.org; Tue, 07 Oct 2014 13:53:28 +0000
Received: from [85.158.137.68:17066] by server-7.bemta-3.messagelabs.com id
	DA/F0-01084-750F3345; Tue, 07 Oct 2014 13:53:27 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-7.tower-31.messagelabs.com!1412690005!12008557!1
X-Originating-IP: [209.85.212.171]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 6.12.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 10779 invoked from network); 7 Oct 2014 13:53:26 -0000
Received: from mail-wi0-f171.google.com (HELO mail-wi0-f171.google.com)
	(209.85.212.171)
	by server-7.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	7 Oct 2014 13:53:26 -0000
Received: by mail-wi0-f171.google.com with SMTP id em10so7915328wid.4
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 07 Oct 2014 06:53:25 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:message-id:date:from:user-agent:mime-version:to
	:cc:subject:content-type:content-transfer-encoding;
	bh=Dv8IKT6P2dDDBAUJZC+qyjrnSALc35vJo/ddA7HiwoQ=;
	b=iTI6NeYWV/uN0efvwuBAdcasCrjruPBFlHj60IiyPTAN799bebjqmwakQZXdSfJb04
	RlrTpPdz7vF21H5X+UR1J8G5c1CFbyUOAI1jHxDav+9bIOmWKHkLYaETYU7oncwlcW6t
	665RtPKaWH3D9FlaarJ2D7K3SHsW3MQzfogmHQuVbZOyyDPE8ipLlh74/Fjag1JEq/I0
	lcTToutsEVc4fJQK20GJqp2oS2Do1HQCbtUeLQ1s+3DXBGOtEnAmorf2XJz0RutueYqu
	7eMa65nBfcSiHVsm3wnNgiFp1A30EmaeV5rI9A2xUNG9VrkjLzOQICororFQvcHfifAJ
	NdXQ==
X-Gm-Message-State: ALoCoQnHr92chEwe+IiS4DhRH1puzfM7InUNWjJGD3fNReF1jH2Fzd2FoCHAwW4iU/h1N0AVnwmF
X-Received: by 10.180.39.44 with SMTP id m12mr28531985wik.25.1412690005618;
	Tue, 07 Oct 2014 06:53:25 -0700 (PDT)
Received: from [192.168.1.15] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by mx.google.com with ESMTPSA id
	os4sm19913321wjc.48.2014.10.07.06.53.24 for <multiple recipients>
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Tue, 07 Oct 2014 06:53:25 -0700 (PDT)
Message-ID: <5433F056.4020704@m2r.biz>
Date: Tue, 07 Oct 2014 15:53:26 +0200
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64;
	rv:24.0) Gecko/20100101 Thunderbird/24.6.0
MIME-Version: 1.0
To: win-pv-devel@lists.xenproject.org
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] Question about windows pv driver update
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

I tried to update xenbus with today's build but dpinst fails.
For update pv drivers I must uninstall all them from control panel, 
reboot windows and reinstall the newer ones? Is correct or I must do 
different and/or other things?
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 Tue Oct 07 13:56:48 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 07 Oct 2014 13:56: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 1XbVFw-0000Pg-Nk; Tue, 07 Oct 2014 13:56:48 +0000
Received: from mail6.bemta4.messagelabs.com ([85.158.143.247])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <Paul.Durrant@citrix.com>) id 1XbVFv-0000Pb-CL
	for win-pv-devel@lists.xenproject.org; Tue, 07 Oct 2014 13:56:47 +0000
Received: from [85.158.143.35:42991] by server-1.bemta-4.messagelabs.com id
	DB/67-05872-E11F3345; Tue, 07 Oct 2014 13:56:46 +0000
X-Env-Sender: Paul.Durrant@citrix.com
X-Msg-Ref: server-2.tower-21.messagelabs.com!1412690206!6371719!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: 6.12.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 26519 invoked from network); 7 Oct 2014 13:56:46 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-2.tower-21.messagelabs.com with RC4-SHA encrypted SMTP;
	7 Oct 2014 13:56:46 -0000
X-IronPort-AV: E=Sophos;i="5.04,670,1406592000"; d="scan'208";a="25766020"
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: Question about windows pv driver update
Thread-Index: AQHP4jY6uKUOZZdOJE28jh6onk2fNJwkqE5w
Date: Tue, 7 Oct 2014 13:56:46 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD0110FA27C@AMSPEX01CL01.citrite.net>
References: <5433F056.4020704@m2r.biz>
In-Reply-To: <5433F056.4020704@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] Question about windows pv driver update
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: 07 October 2014 14:53
> To: win-pv-devel@lists.xenproject.org
> Cc: Paul Durrant
> Subject: Question about windows pv driver update
> 
> I tried to update xenbus with today's build but dpinst fails.
> For update pv drivers I must uninstall all them from control panel,
> reboot windows and reinstall the newer ones? Is correct or I must do
> different and/or other things?

If you're updating from a previous build of the xenbits code then an update should be ok. What was the exact nature of the failure?

  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 Tue Oct 07 13:56:48 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 07 Oct 2014 13:56: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 1XbVFw-0000Pg-Nk; Tue, 07 Oct 2014 13:56:48 +0000
Received: from mail6.bemta4.messagelabs.com ([85.158.143.247])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <Paul.Durrant@citrix.com>) id 1XbVFv-0000Pb-CL
	for win-pv-devel@lists.xenproject.org; Tue, 07 Oct 2014 13:56:47 +0000
Received: from [85.158.143.35:42991] by server-1.bemta-4.messagelabs.com id
	DB/67-05872-E11F3345; Tue, 07 Oct 2014 13:56:46 +0000
X-Env-Sender: Paul.Durrant@citrix.com
X-Msg-Ref: server-2.tower-21.messagelabs.com!1412690206!6371719!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: 6.12.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 26519 invoked from network); 7 Oct 2014 13:56:46 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-2.tower-21.messagelabs.com with RC4-SHA encrypted SMTP;
	7 Oct 2014 13:56:46 -0000
X-IronPort-AV: E=Sophos;i="5.04,670,1406592000"; d="scan'208";a="25766020"
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: Question about windows pv driver update
Thread-Index: AQHP4jY6uKUOZZdOJE28jh6onk2fNJwkqE5w
Date: Tue, 7 Oct 2014 13:56:46 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD0110FA27C@AMSPEX01CL01.citrite.net>
References: <5433F056.4020704@m2r.biz>
In-Reply-To: <5433F056.4020704@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] Question about windows pv driver update
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: 07 October 2014 14:53
> To: win-pv-devel@lists.xenproject.org
> Cc: Paul Durrant
> Subject: Question about windows pv driver update
> 
> I tried to update xenbus with today's build but dpinst fails.
> For update pv drivers I must uninstall all them from control panel,
> reboot windows and reinstall the newer ones? Is correct or I must do
> different and/or other things?

If you're updating from a previous build of the xenbits code then an update should be ok. What was the exact nature of the failure?

  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 Tue Oct 07 14:15:03 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 07 Oct 2014 14:15:03 +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 1XbVXb-000119-E3; Tue, 07 Oct 2014 14:15:03 +0000
Received: from mail6.bemta4.messagelabs.com ([85.158.143.247])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <Paul.Durrant@citrix.com>) id 1XbVXZ-00010y-4R
	for win-pv-devel@lists.xenproject.org; Tue, 07 Oct 2014 14:15:02 +0000
Received: from [85.158.143.35:63678] by server-1.bemta-4.messagelabs.com id
	1E/03-05872-465F3345; Tue, 07 Oct 2014 14:15:00 +0000
X-Env-Sender: Paul.Durrant@citrix.com
X-Msg-Ref: server-8.tower-21.messagelabs.com!1412691297!14423516!1
X-Originating-IP: [66.165.176.63]
X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: 
	VHJ1c3RlZCBJUDogNjYuMTY1LjE3Ni42MyA9PiAzMDYwNDg=\n
X-StarScan-Received: 
X-StarScan-Version: 6.12.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 16098 invoked from network); 7 Oct 2014 14:15:00 -0000
Received: from smtp02.citrix.com (HELO SMTP02.CITRIX.COM) (66.165.176.63)
	by server-8.tower-21.messagelabs.com with RC4-SHA encrypted SMTP;
	7 Oct 2014 14:15:00 -0000
X-IronPort-AV: E=Sophos;i="5.04,670,1406592000"; d="scan'208";a="180096447"
Received: from ukmail1.uk.xensource.com (10.80.16.128) by smtprelay.citrix.com
	(10.13.107.80) with Microsoft SMTP Server id 14.3.181.6;
	Tue, 7 Oct 2014 10:14:23 -0400
Received: from fountains.uk.xensource.com ([10.80.2.29]
	helo=localhost.localdomain)	by ukmail1.uk.xensource.com with esmtp
	(Exim
	4.69)	(envelope-from <paul.durrant@citrix.com>)	id 1XbVWx-0003vE-Cx;
	Tue, 07 Oct 2014 15:14:23 +0100
From: Paul Durrant <paul.durrant@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
Date: Tue, 7 Oct 2014 15:14:11 +0100
Message-ID: <1412691252-7320-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
MIME-Version: 1.0
X-DLP: MIA1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH 1/2] Fix OBJECT_PREFIX and PRODUCT_NAME
	substitution
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

There were missing trailing '@' characters causing substitution to fail.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 include/version.hx | 2 +-
 src/xeniface.inf   | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/include/version.hx b/include/version.hx
index ea1d0af..bbf34b9 100644
--- a/include/version.hx
+++ b/include/version.hx
@@ -53,6 +53,6 @@
 #define DAY	@DAY@
 #define DAY_STR	"@DAY@"
 
-#define OBJECT_PREFIX_STR   "@OBJECT_PREFIX"
+#define OBJECT_PREFIX_STR   "@OBJECT_PREFIX@"
 #define OBJECT_GUID(_Name)  @OBJECT_PREFIX@ ## _Name ## _GUID
 
diff --git a/src/xeniface.inf b/src/xeniface.inf
index ad33041..4fb3edb 100644
--- a/src/xeniface.inf
+++ b/src/xeniface.inf
@@ -90,7 +90,7 @@ liteagent.exe = 1,,
 SPSVCINST_ASSOCSERVICE= 0x00000002
 Company= "@COMPANY_NAME@" 
 DiskId1 = "@PRODUCT_NAME@ Interface Package"
-XenIfaceDevice.DeviceDesc = "@PRODUCT_NAME Interface"
+XenIfaceDevice.DeviceDesc = "@PRODUCT_NAME@ Interface"
 LITESVC_FLAGS= 0x00000800
-xenlite.SVCDESC= "@PRODUCT_NAME Interface Service"
+xenlite.SVCDESC= "@PRODUCT_NAME@ Interface Service"
 
-- 
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 Oct 07 14:15:03 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 07 Oct 2014 14:15:03 +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 1XbVXb-000119-E3; Tue, 07 Oct 2014 14:15:03 +0000
Received: from mail6.bemta4.messagelabs.com ([85.158.143.247])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <Paul.Durrant@citrix.com>) id 1XbVXZ-00010y-4R
	for win-pv-devel@lists.xenproject.org; Tue, 07 Oct 2014 14:15:02 +0000
Received: from [85.158.143.35:63678] by server-1.bemta-4.messagelabs.com id
	1E/03-05872-465F3345; Tue, 07 Oct 2014 14:15:00 +0000
X-Env-Sender: Paul.Durrant@citrix.com
X-Msg-Ref: server-8.tower-21.messagelabs.com!1412691297!14423516!1
X-Originating-IP: [66.165.176.63]
X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: 
	VHJ1c3RlZCBJUDogNjYuMTY1LjE3Ni42MyA9PiAzMDYwNDg=\n
X-StarScan-Received: 
X-StarScan-Version: 6.12.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 16098 invoked from network); 7 Oct 2014 14:15:00 -0000
Received: from smtp02.citrix.com (HELO SMTP02.CITRIX.COM) (66.165.176.63)
	by server-8.tower-21.messagelabs.com with RC4-SHA encrypted SMTP;
	7 Oct 2014 14:15:00 -0000
X-IronPort-AV: E=Sophos;i="5.04,670,1406592000"; d="scan'208";a="180096447"
Received: from ukmail1.uk.xensource.com (10.80.16.128) by smtprelay.citrix.com
	(10.13.107.80) with Microsoft SMTP Server id 14.3.181.6;
	Tue, 7 Oct 2014 10:14:23 -0400
Received: from fountains.uk.xensource.com ([10.80.2.29]
	helo=localhost.localdomain)	by ukmail1.uk.xensource.com with esmtp
	(Exim
	4.69)	(envelope-from <paul.durrant@citrix.com>)	id 1XbVWx-0003vE-Cx;
	Tue, 07 Oct 2014 15:14:23 +0100
From: Paul Durrant <paul.durrant@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
Date: Tue, 7 Oct 2014 15:14:11 +0100
Message-ID: <1412691252-7320-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
MIME-Version: 1.0
X-DLP: MIA1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH 1/2] Fix OBJECT_PREFIX and PRODUCT_NAME
	substitution
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

There were missing trailing '@' characters causing substitution to fail.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 include/version.hx | 2 +-
 src/xeniface.inf   | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/include/version.hx b/include/version.hx
index ea1d0af..bbf34b9 100644
--- a/include/version.hx
+++ b/include/version.hx
@@ -53,6 +53,6 @@
 #define DAY	@DAY@
 #define DAY_STR	"@DAY@"
 
-#define OBJECT_PREFIX_STR   "@OBJECT_PREFIX"
+#define OBJECT_PREFIX_STR   "@OBJECT_PREFIX@"
 #define OBJECT_GUID(_Name)  @OBJECT_PREFIX@ ## _Name ## _GUID
 
diff --git a/src/xeniface.inf b/src/xeniface.inf
index ad33041..4fb3edb 100644
--- a/src/xeniface.inf
+++ b/src/xeniface.inf
@@ -90,7 +90,7 @@ liteagent.exe = 1,,
 SPSVCINST_ASSOCSERVICE= 0x00000002
 Company= "@COMPANY_NAME@" 
 DiskId1 = "@PRODUCT_NAME@ Interface Package"
-XenIfaceDevice.DeviceDesc = "@PRODUCT_NAME Interface"
+XenIfaceDevice.DeviceDesc = "@PRODUCT_NAME@ Interface"
 LITESVC_FLAGS= 0x00000800
-xenlite.SVCDESC= "@PRODUCT_NAME Interface Service"
+xenlite.SVCDESC= "@PRODUCT_NAME@ Interface Service"
 
-- 
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 Oct 07 14:15:04 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 07 Oct 2014 14:15: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 1XbVXc-00011T-Ez; Tue, 07 Oct 2014 14:15:04 +0000
Received: from mail6.bemta4.messagelabs.com ([85.158.143.247])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <Paul.Durrant@citrix.com>) id 1XbVXa-000114-NK
	for win-pv-devel@lists.xenproject.org; Tue, 07 Oct 2014 14:15:02 +0000
Received: from [85.158.143.35:63795] by server-1.bemta-4.messagelabs.com id
	99/13-05872-565F3345; Tue, 07 Oct 2014 14:15:01 +0000
X-Env-Sender: Paul.Durrant@citrix.com
X-Msg-Ref: server-8.tower-21.messagelabs.com!1412691297!14423516!2
X-Originating-IP: [66.165.176.63]
X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: 
	VHJ1c3RlZCBJUDogNjYuMTY1LjE3Ni42MyA9PiAzMDYwNDg=\n
X-StarScan-Received: 
X-StarScan-Version: 6.12.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 16198 invoked from network); 7 Oct 2014 14:15:00 -0000
Received: from smtp02.citrix.com (HELO SMTP02.CITRIX.COM) (66.165.176.63)
	by server-8.tower-21.messagelabs.com with RC4-SHA encrypted SMTP;
	7 Oct 2014 14:15:00 -0000
X-IronPort-AV: E=Sophos;i="5.04,670,1406592000"; d="scan'208";a="180096450"
Received: from ukmail1.uk.xensource.com (10.80.16.128) by smtprelay.citrix.com
	(10.13.107.80) with Microsoft SMTP Server id 14.3.181.6;
	Tue, 7 Oct 2014 10:14:23 -0400
Received: from fountains.uk.xensource.com ([10.80.2.29]
	helo=localhost.localdomain)	by ukmail1.uk.xensource.com with esmtp
	(Exim
	4.69)	(envelope-from <paul.durrant@citrix.com>)	id 1XbVWx-0003vE-DY;
	Tue, 07 Oct 2014 15:14:23 +0100
From: Paul Durrant <paul.durrant@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
Date: Tue, 7 Oct 2014 15:14:12 +0100
Message-ID: <1412691252-7320-2-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
In-Reply-To: <1412691252-7320-1-git-send-email-paul.durrant@citrix.com>
References: <1412691252-7320-1-git-send-email-paul.durrant@citrix.com>
MIME-Version: 1.0
X-DLP: MIA2
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH 2/2] Fix line endings
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

Files checked into the repository should use unix line endings

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 include/version.hx | 116 ++++++++++++++++----------------
 src/xeniface.inf   | 192 ++++++++++++++++++++++++++---------------------------
 2 files changed, 154 insertions(+), 154 deletions(-)

diff --git a/include/version.hx b/include/version.hx
index bbf34b9..a997c94 100644
--- a/include/version.hx
+++ b/include/version.hx
@@ -1,58 +1,58 @@
-/* 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.
- */
-
-#define COMPANY_NAME_STR	"@COMPANY_NAME@"
-#define PRODUCT_NAME_STR	"@PRODUCT_NAME@"
-
-#define MAJOR_VERSION	@MAJOR_VERSION@
-#define MAJOR_VERSION_STR	"@MAJOR_VERSION@"
-
-#define MINOR_VERSION	@MINOR_VERSION@
-#define MINOR_VERSION_STR	"@MINOR_VERSION@"
-
-#define MICRO_VERSION	@MICRO_VERSION@
-#define MICRO_VERSION_STR	"@MICRO_VERSION@"
-
-#define BUILD_NUMBER	@BUILD_NUMBER@
-#define BUILD_NUMBER_STR	"@BUILD_NUMBER@"
-
-#define YEAR	@YEAR@
-#define YEAR_STR	"@YEAR@"
-
-#define MONTH	@MONTH@
-#define MONTH_STR	"@MONTH@"
-
-#define DAY	@DAY@
-#define DAY_STR	"@DAY@"
-
-#define OBJECT_PREFIX_STR   "@OBJECT_PREFIX@"
-#define OBJECT_GUID(_Name)  @OBJECT_PREFIX@ ## _Name ## _GUID
-
+/* 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.
+ */
+
+#define COMPANY_NAME_STR	"@COMPANY_NAME@"
+#define PRODUCT_NAME_STR	"@PRODUCT_NAME@"
+
+#define MAJOR_VERSION	@MAJOR_VERSION@
+#define MAJOR_VERSION_STR	"@MAJOR_VERSION@"
+
+#define MINOR_VERSION	@MINOR_VERSION@
+#define MINOR_VERSION_STR	"@MINOR_VERSION@"
+
+#define MICRO_VERSION	@MICRO_VERSION@
+#define MICRO_VERSION_STR	"@MICRO_VERSION@"
+
+#define BUILD_NUMBER	@BUILD_NUMBER@
+#define BUILD_NUMBER_STR	"@BUILD_NUMBER@"
+
+#define YEAR	@YEAR@
+#define YEAR_STR	"@YEAR@"
+
+#define MONTH	@MONTH@
+#define MONTH_STR	"@MONTH@"
+
+#define DAY	@DAY@
+#define DAY_STR	"@DAY@"
+
+#define OBJECT_PREFIX_STR   "@OBJECT_PREFIX@"
+#define OBJECT_GUID(_Name)  @OBJECT_PREFIX@ ## _Name ## _GUID
+
diff --git a/src/xeniface.inf b/src/xeniface.inf
index 4fb3edb..a5969b9 100644
--- a/src/xeniface.inf
+++ b/src/xeniface.inf
@@ -1,96 +1,96 @@
-; 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.
-
-[Version]
-Signature="$WINDOWS NT$"
-Class=System
-ClassGUID={4d36e97d-e325-11ce-bfc1-08002be10318} 
-Provider=%Company%
-DriverVer=01/01/1900,0.0.0.0
-CatalogFile=xeniface.cat
-
-[DestinationDirs]
-DefaultDestDir = 12
-ServiceDestDir.NT.Copy = 11
-
-[Manufacturer]
-%Company%=Inst,NT$ARCH$
-
-[Inst.NT$ARCH$]
-; DisplayName		    Section	      DeviceID
-; -----------		    -------	      --------
-
-%XenIfaceDevice.DeviceDesc% =XenIface_Device, XENBUS\VEN_XSC000&DEV_IFACE&REV_00000001
-%XenIfaceDevice.DeviceDesc% =XenIface_Device, XENBUS\VEN_XS0001&DEV_IFACE&REV_00000001
-%XenIfaceDevice.DeviceDesc% =XenIface_Device, XENBUS\VEN_XS0002&DEV_IFACE&REV_00000001
-
-[XenIface_Device.NT$ARCH$]
-CopyFiles=XenIface_Device.NT.Copy, ServiceDestDir.NT.Copy
-
-[XenIFace_Device.NT.Copy]
-xeniface.sys
-
-[ServiceDestDir.NT.Copy]
-liteagent.exe
-
-[Xeniface_Device.NT$ARCH$.Services]
-AddService = xeniface, %SPSVCINST_ASSOCSERVICE%, xeniface_Service_Inst
-AddService = xenlite, %LITESVC_FLAGS%, xenlite_Service_Inst
-
-[xeniface_Service_Inst]
-DisplayName    = %XenIfaceDevice.DeviceDesc%
-ServiceType    = 1               ; SERVICE_KERNEL_DRIVER
-StartType      = 3               ; SERVICE_DEMAND_START 
-ErrorControl   = 1               ; SERVICE_ERROR_NORMAL
-ServiceBinary  = %12%\xeniface.sys
-LoadOrderGroup = Extended Base
-
-[xenlite_Service_Inst]
-DisplayName    = %xenlite.SVCDESC%
-ServiceType    = 16              ; SERVICE_WIN32_OWN_PROCESS
-StartType      = 2               ; SERVICE_AUTO_START 
-ErrorControl   = 1               ; SERVICE_ERROR_NORMAL
-ServiceBinary  = %11%\liteagent.exe
-
-[SourceDisksNames]
-1 = %DiskId1%,,,""
-
-[SourceDisksFiles]
-xeniface.sys  = 1,,
-liteagent.exe = 1,,
-
-[Strings]
-SPSVCINST_ASSOCSERVICE= 0x00000002
-Company= "@COMPANY_NAME@" 
-DiskId1 = "@PRODUCT_NAME@ Interface Package"
-XenIfaceDevice.DeviceDesc = "@PRODUCT_NAME@ Interface"
-LITESVC_FLAGS= 0x00000800
-xenlite.SVCDESC= "@PRODUCT_NAME@ Interface Service"
-
+; 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.
+
+[Version]
+Signature="$WINDOWS NT$"
+Class=System
+ClassGUID={4d36e97d-e325-11ce-bfc1-08002be10318} 
+Provider=%Company%
+DriverVer=01/01/1900,0.0.0.0
+CatalogFile=xeniface.cat
+
+[DestinationDirs]
+DefaultDestDir = 12
+ServiceDestDir.NT.Copy = 11
+
+[Manufacturer]
+%Company%=Inst,NT$ARCH$
+
+[Inst.NT$ARCH$]
+; DisplayName		    Section	      DeviceID
+; -----------		    -------	      --------
+
+%XenIfaceDevice.DeviceDesc% =XenIface_Device, XENBUS\VEN_XSC000&DEV_IFACE&REV_00000001
+%XenIfaceDevice.DeviceDesc% =XenIface_Device, XENBUS\VEN_XS0001&DEV_IFACE&REV_00000001
+%XenIfaceDevice.DeviceDesc% =XenIface_Device, XENBUS\VEN_XS0002&DEV_IFACE&REV_00000001
+
+[XenIface_Device.NT$ARCH$]
+CopyFiles=XenIface_Device.NT.Copy, ServiceDestDir.NT.Copy
+
+[XenIFace_Device.NT.Copy]
+xeniface.sys
+
+[ServiceDestDir.NT.Copy]
+liteagent.exe
+
+[Xeniface_Device.NT$ARCH$.Services]
+AddService = xeniface, %SPSVCINST_ASSOCSERVICE%, xeniface_Service_Inst
+AddService = xenlite, %LITESVC_FLAGS%, xenlite_Service_Inst
+
+[xeniface_Service_Inst]
+DisplayName    = %XenIfaceDevice.DeviceDesc%
+ServiceType    = 1               ; SERVICE_KERNEL_DRIVER
+StartType      = 3               ; SERVICE_DEMAND_START 
+ErrorControl   = 1               ; SERVICE_ERROR_NORMAL
+ServiceBinary  = %12%\xeniface.sys
+LoadOrderGroup = Extended Base
+
+[xenlite_Service_Inst]
+DisplayName    = %xenlite.SVCDESC%
+ServiceType    = 16              ; SERVICE_WIN32_OWN_PROCESS
+StartType      = 2               ; SERVICE_AUTO_START 
+ErrorControl   = 1               ; SERVICE_ERROR_NORMAL
+ServiceBinary  = %11%\liteagent.exe
+
+[SourceDisksNames]
+1 = %DiskId1%,,,""
+
+[SourceDisksFiles]
+xeniface.sys  = 1,,
+liteagent.exe = 1,,
+
+[Strings]
+SPSVCINST_ASSOCSERVICE= 0x00000002
+Company= "@COMPANY_NAME@" 
+DiskId1 = "@PRODUCT_NAME@ Interface Package"
+XenIfaceDevice.DeviceDesc = "@PRODUCT_NAME@ Interface"
+LITESVC_FLAGS= 0x00000800
+xenlite.SVCDESC= "@PRODUCT_NAME@ Interface Service"
+
-- 
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 Oct 07 14:15:04 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 07 Oct 2014 14:15: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 1XbVXc-00011T-Ez; Tue, 07 Oct 2014 14:15:04 +0000
Received: from mail6.bemta4.messagelabs.com ([85.158.143.247])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <Paul.Durrant@citrix.com>) id 1XbVXa-000114-NK
	for win-pv-devel@lists.xenproject.org; Tue, 07 Oct 2014 14:15:02 +0000
Received: from [85.158.143.35:63795] by server-1.bemta-4.messagelabs.com id
	99/13-05872-565F3345; Tue, 07 Oct 2014 14:15:01 +0000
X-Env-Sender: Paul.Durrant@citrix.com
X-Msg-Ref: server-8.tower-21.messagelabs.com!1412691297!14423516!2
X-Originating-IP: [66.165.176.63]
X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: 
	VHJ1c3RlZCBJUDogNjYuMTY1LjE3Ni42MyA9PiAzMDYwNDg=\n
X-StarScan-Received: 
X-StarScan-Version: 6.12.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 16198 invoked from network); 7 Oct 2014 14:15:00 -0000
Received: from smtp02.citrix.com (HELO SMTP02.CITRIX.COM) (66.165.176.63)
	by server-8.tower-21.messagelabs.com with RC4-SHA encrypted SMTP;
	7 Oct 2014 14:15:00 -0000
X-IronPort-AV: E=Sophos;i="5.04,670,1406592000"; d="scan'208";a="180096450"
Received: from ukmail1.uk.xensource.com (10.80.16.128) by smtprelay.citrix.com
	(10.13.107.80) with Microsoft SMTP Server id 14.3.181.6;
	Tue, 7 Oct 2014 10:14:23 -0400
Received: from fountains.uk.xensource.com ([10.80.2.29]
	helo=localhost.localdomain)	by ukmail1.uk.xensource.com with esmtp
	(Exim
	4.69)	(envelope-from <paul.durrant@citrix.com>)	id 1XbVWx-0003vE-DY;
	Tue, 07 Oct 2014 15:14:23 +0100
From: Paul Durrant <paul.durrant@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
Date: Tue, 7 Oct 2014 15:14:12 +0100
Message-ID: <1412691252-7320-2-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
In-Reply-To: <1412691252-7320-1-git-send-email-paul.durrant@citrix.com>
References: <1412691252-7320-1-git-send-email-paul.durrant@citrix.com>
MIME-Version: 1.0
X-DLP: MIA2
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH 2/2] Fix line endings
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

Files checked into the repository should use unix line endings

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 include/version.hx | 116 ++++++++++++++++----------------
 src/xeniface.inf   | 192 ++++++++++++++++++++++++++---------------------------
 2 files changed, 154 insertions(+), 154 deletions(-)

diff --git a/include/version.hx b/include/version.hx
index bbf34b9..a997c94 100644
--- a/include/version.hx
+++ b/include/version.hx
@@ -1,58 +1,58 @@
-/* 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.
- */
-
-#define COMPANY_NAME_STR	"@COMPANY_NAME@"
-#define PRODUCT_NAME_STR	"@PRODUCT_NAME@"
-
-#define MAJOR_VERSION	@MAJOR_VERSION@
-#define MAJOR_VERSION_STR	"@MAJOR_VERSION@"
-
-#define MINOR_VERSION	@MINOR_VERSION@
-#define MINOR_VERSION_STR	"@MINOR_VERSION@"
-
-#define MICRO_VERSION	@MICRO_VERSION@
-#define MICRO_VERSION_STR	"@MICRO_VERSION@"
-
-#define BUILD_NUMBER	@BUILD_NUMBER@
-#define BUILD_NUMBER_STR	"@BUILD_NUMBER@"
-
-#define YEAR	@YEAR@
-#define YEAR_STR	"@YEAR@"
-
-#define MONTH	@MONTH@
-#define MONTH_STR	"@MONTH@"
-
-#define DAY	@DAY@
-#define DAY_STR	"@DAY@"
-
-#define OBJECT_PREFIX_STR   "@OBJECT_PREFIX@"
-#define OBJECT_GUID(_Name)  @OBJECT_PREFIX@ ## _Name ## _GUID
-
+/* 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.
+ */
+
+#define COMPANY_NAME_STR	"@COMPANY_NAME@"
+#define PRODUCT_NAME_STR	"@PRODUCT_NAME@"
+
+#define MAJOR_VERSION	@MAJOR_VERSION@
+#define MAJOR_VERSION_STR	"@MAJOR_VERSION@"
+
+#define MINOR_VERSION	@MINOR_VERSION@
+#define MINOR_VERSION_STR	"@MINOR_VERSION@"
+
+#define MICRO_VERSION	@MICRO_VERSION@
+#define MICRO_VERSION_STR	"@MICRO_VERSION@"
+
+#define BUILD_NUMBER	@BUILD_NUMBER@
+#define BUILD_NUMBER_STR	"@BUILD_NUMBER@"
+
+#define YEAR	@YEAR@
+#define YEAR_STR	"@YEAR@"
+
+#define MONTH	@MONTH@
+#define MONTH_STR	"@MONTH@"
+
+#define DAY	@DAY@
+#define DAY_STR	"@DAY@"
+
+#define OBJECT_PREFIX_STR   "@OBJECT_PREFIX@"
+#define OBJECT_GUID(_Name)  @OBJECT_PREFIX@ ## _Name ## _GUID
+
diff --git a/src/xeniface.inf b/src/xeniface.inf
index 4fb3edb..a5969b9 100644
--- a/src/xeniface.inf
+++ b/src/xeniface.inf
@@ -1,96 +1,96 @@
-; 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.
-
-[Version]
-Signature="$WINDOWS NT$"
-Class=System
-ClassGUID={4d36e97d-e325-11ce-bfc1-08002be10318} 
-Provider=%Company%
-DriverVer=01/01/1900,0.0.0.0
-CatalogFile=xeniface.cat
-
-[DestinationDirs]
-DefaultDestDir = 12
-ServiceDestDir.NT.Copy = 11
-
-[Manufacturer]
-%Company%=Inst,NT$ARCH$
-
-[Inst.NT$ARCH$]
-; DisplayName		    Section	      DeviceID
-; -----------		    -------	      --------
-
-%XenIfaceDevice.DeviceDesc% =XenIface_Device, XENBUS\VEN_XSC000&DEV_IFACE&REV_00000001
-%XenIfaceDevice.DeviceDesc% =XenIface_Device, XENBUS\VEN_XS0001&DEV_IFACE&REV_00000001
-%XenIfaceDevice.DeviceDesc% =XenIface_Device, XENBUS\VEN_XS0002&DEV_IFACE&REV_00000001
-
-[XenIface_Device.NT$ARCH$]
-CopyFiles=XenIface_Device.NT.Copy, ServiceDestDir.NT.Copy
-
-[XenIFace_Device.NT.Copy]
-xeniface.sys
-
-[ServiceDestDir.NT.Copy]
-liteagent.exe
-
-[Xeniface_Device.NT$ARCH$.Services]
-AddService = xeniface, %SPSVCINST_ASSOCSERVICE%, xeniface_Service_Inst
-AddService = xenlite, %LITESVC_FLAGS%, xenlite_Service_Inst
-
-[xeniface_Service_Inst]
-DisplayName    = %XenIfaceDevice.DeviceDesc%
-ServiceType    = 1               ; SERVICE_KERNEL_DRIVER
-StartType      = 3               ; SERVICE_DEMAND_START 
-ErrorControl   = 1               ; SERVICE_ERROR_NORMAL
-ServiceBinary  = %12%\xeniface.sys
-LoadOrderGroup = Extended Base
-
-[xenlite_Service_Inst]
-DisplayName    = %xenlite.SVCDESC%
-ServiceType    = 16              ; SERVICE_WIN32_OWN_PROCESS
-StartType      = 2               ; SERVICE_AUTO_START 
-ErrorControl   = 1               ; SERVICE_ERROR_NORMAL
-ServiceBinary  = %11%\liteagent.exe
-
-[SourceDisksNames]
-1 = %DiskId1%,,,""
-
-[SourceDisksFiles]
-xeniface.sys  = 1,,
-liteagent.exe = 1,,
-
-[Strings]
-SPSVCINST_ASSOCSERVICE= 0x00000002
-Company= "@COMPANY_NAME@" 
-DiskId1 = "@PRODUCT_NAME@ Interface Package"
-XenIfaceDevice.DeviceDesc = "@PRODUCT_NAME@ Interface"
-LITESVC_FLAGS= 0x00000800
-xenlite.SVCDESC= "@PRODUCT_NAME@ Interface Service"
-
+; 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.
+
+[Version]
+Signature="$WINDOWS NT$"
+Class=System
+ClassGUID={4d36e97d-e325-11ce-bfc1-08002be10318} 
+Provider=%Company%
+DriverVer=01/01/1900,0.0.0.0
+CatalogFile=xeniface.cat
+
+[DestinationDirs]
+DefaultDestDir = 12
+ServiceDestDir.NT.Copy = 11
+
+[Manufacturer]
+%Company%=Inst,NT$ARCH$
+
+[Inst.NT$ARCH$]
+; DisplayName		    Section	      DeviceID
+; -----------		    -------	      --------
+
+%XenIfaceDevice.DeviceDesc% =XenIface_Device, XENBUS\VEN_XSC000&DEV_IFACE&REV_00000001
+%XenIfaceDevice.DeviceDesc% =XenIface_Device, XENBUS\VEN_XS0001&DEV_IFACE&REV_00000001
+%XenIfaceDevice.DeviceDesc% =XenIface_Device, XENBUS\VEN_XS0002&DEV_IFACE&REV_00000001
+
+[XenIface_Device.NT$ARCH$]
+CopyFiles=XenIface_Device.NT.Copy, ServiceDestDir.NT.Copy
+
+[XenIFace_Device.NT.Copy]
+xeniface.sys
+
+[ServiceDestDir.NT.Copy]
+liteagent.exe
+
+[Xeniface_Device.NT$ARCH$.Services]
+AddService = xeniface, %SPSVCINST_ASSOCSERVICE%, xeniface_Service_Inst
+AddService = xenlite, %LITESVC_FLAGS%, xenlite_Service_Inst
+
+[xeniface_Service_Inst]
+DisplayName    = %XenIfaceDevice.DeviceDesc%
+ServiceType    = 1               ; SERVICE_KERNEL_DRIVER
+StartType      = 3               ; SERVICE_DEMAND_START 
+ErrorControl   = 1               ; SERVICE_ERROR_NORMAL
+ServiceBinary  = %12%\xeniface.sys
+LoadOrderGroup = Extended Base
+
+[xenlite_Service_Inst]
+DisplayName    = %xenlite.SVCDESC%
+ServiceType    = 16              ; SERVICE_WIN32_OWN_PROCESS
+StartType      = 2               ; SERVICE_AUTO_START 
+ErrorControl   = 1               ; SERVICE_ERROR_NORMAL
+ServiceBinary  = %11%\liteagent.exe
+
+[SourceDisksNames]
+1 = %DiskId1%,,,""
+
+[SourceDisksFiles]
+xeniface.sys  = 1,,
+liteagent.exe = 1,,
+
+[Strings]
+SPSVCINST_ASSOCSERVICE= 0x00000002
+Company= "@COMPANY_NAME@" 
+DiskId1 = "@PRODUCT_NAME@ Interface Package"
+XenIfaceDevice.DeviceDesc = "@PRODUCT_NAME@ Interface"
+LITESVC_FLAGS= 0x00000800
+xenlite.SVCDESC= "@PRODUCT_NAME@ Interface Service"
+
-- 
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 Oct 07 14:15:46 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 07 Oct 2014 14:15: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 1XbVYI-000120-Hp; Tue, 07 Oct 2014 14:15:46 +0000
Received: from mail6.bemta4.messagelabs.com ([85.158.143.247])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <Paul.Durrant@citrix.com>) id 1XbVYH-00011v-9X
	for win-pv-devel@lists.xenproject.org; Tue, 07 Oct 2014 14:15:45 +0000
Received: from [85.158.143.35:11245] by server-3.bemta-4.messagelabs.com id
	83/5F-06192-095F3345; Tue, 07 Oct 2014 14:15:44 +0000
X-Env-Sender: Paul.Durrant@citrix.com
X-Msg-Ref: server-2.tower-21.messagelabs.com!1412691343!6378334!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.12.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 15210 invoked from network); 7 Oct 2014 14:15:43 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-2.tower-21.messagelabs.com with RC4-SHA encrypted SMTP;
	7 Oct 2014 14:15:43 -0000
X-IronPort-AV: E=Sophos;i="5.04,670,1406592000"; d="scan'208";a="25766698"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: "Fabio Fantoni (fabio.fantoni@m2r.biz)" <fabio.fantoni@m2r.biz>
Thread-Topic: [PATCH 1/2] Fix OBJECT_PREFIX and PRODUCT_NAME substitution
Thread-Index: AQHP4jj/jjC/40JcLUqW+A5IAy2MnZwkrabA
Date: Tue, 7 Oct 2014 14:15:42 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD0110FA304@AMSPEX01CL01.citrite.net>
References: <1412691252-7320-1-git-send-email-paul.durrant@citrix.com>
In-Reply-To: <1412691252-7320-1-git-send-email-paul.durrant@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>
Subject: Re: [win-pv-devel] [PATCH 1/2] Fix OBJECT_PREFIX and PRODUCT_NAME
	substitution
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: Paul Durrant [mailto:paul.durrant@citrix.com]
> Sent: 07 October 2014 15:14
> To: win-pv-devel@lists.xenproject.org
> Cc: Paul Durrant
> Subject: [PATCH 1/2] Fix OBJECT_PREFIX and PRODUCT_NAME substitution
> 
> There were missing trailing '@' characters causing substitution to fail.
> 

Fabio,

  This should fix your 'xl shutdown' problem.

  Paul

> Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
> ---
>  include/version.hx | 2 +-
>  src/xeniface.inf   | 4 ++--
>  2 files changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/include/version.hx b/include/version.hx
> index ea1d0af..bbf34b9 100644
> --- a/include/version.hx
> +++ b/include/version.hx
> @@ -53,6 +53,6 @@
>  #define DAY	@DAY@
>  #define DAY_STR	"@DAY@"
> 
> -#define OBJECT_PREFIX_STR   "@OBJECT_PREFIX"
> +#define OBJECT_PREFIX_STR   "@OBJECT_PREFIX@"
>  #define OBJECT_GUID(_Name)  @OBJECT_PREFIX@ ## _Name ## _GUID
> 
> diff --git a/src/xeniface.inf b/src/xeniface.inf
> index ad33041..4fb3edb 100644
> --- a/src/xeniface.inf
> +++ b/src/xeniface.inf
> @@ -90,7 +90,7 @@ liteagent.exe = 1,,
>  SPSVCINST_ASSOCSERVICE= 0x00000002
>  Company= "@COMPANY_NAME@"
>  DiskId1 = "@PRODUCT_NAME@ Interface Package"
> -XenIfaceDevice.DeviceDesc = "@PRODUCT_NAME Interface"
> +XenIfaceDevice.DeviceDesc = "@PRODUCT_NAME@ Interface"
>  LITESVC_FLAGS= 0x00000800
> -xenlite.SVCDESC= "@PRODUCT_NAME Interface Service"
> +xenlite.SVCDESC= "@PRODUCT_NAME@ Interface Service"
> 
> --
> 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 Oct 07 14:15:46 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 07 Oct 2014 14:15: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 1XbVYI-000120-Hp; Tue, 07 Oct 2014 14:15:46 +0000
Received: from mail6.bemta4.messagelabs.com ([85.158.143.247])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <Paul.Durrant@citrix.com>) id 1XbVYH-00011v-9X
	for win-pv-devel@lists.xenproject.org; Tue, 07 Oct 2014 14:15:45 +0000
Received: from [85.158.143.35:11245] by server-3.bemta-4.messagelabs.com id
	83/5F-06192-095F3345; Tue, 07 Oct 2014 14:15:44 +0000
X-Env-Sender: Paul.Durrant@citrix.com
X-Msg-Ref: server-2.tower-21.messagelabs.com!1412691343!6378334!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.12.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 15210 invoked from network); 7 Oct 2014 14:15:43 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-2.tower-21.messagelabs.com with RC4-SHA encrypted SMTP;
	7 Oct 2014 14:15:43 -0000
X-IronPort-AV: E=Sophos;i="5.04,670,1406592000"; d="scan'208";a="25766698"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: "Fabio Fantoni (fabio.fantoni@m2r.biz)" <fabio.fantoni@m2r.biz>
Thread-Topic: [PATCH 1/2] Fix OBJECT_PREFIX and PRODUCT_NAME substitution
Thread-Index: AQHP4jj/jjC/40JcLUqW+A5IAy2MnZwkrabA
Date: Tue, 7 Oct 2014 14:15:42 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD0110FA304@AMSPEX01CL01.citrite.net>
References: <1412691252-7320-1-git-send-email-paul.durrant@citrix.com>
In-Reply-To: <1412691252-7320-1-git-send-email-paul.durrant@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>
Subject: Re: [win-pv-devel] [PATCH 1/2] Fix OBJECT_PREFIX and PRODUCT_NAME
	substitution
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: Paul Durrant [mailto:paul.durrant@citrix.com]
> Sent: 07 October 2014 15:14
> To: win-pv-devel@lists.xenproject.org
> Cc: Paul Durrant
> Subject: [PATCH 1/2] Fix OBJECT_PREFIX and PRODUCT_NAME substitution
> 
> There were missing trailing '@' characters causing substitution to fail.
> 

Fabio,

  This should fix your 'xl shutdown' problem.

  Paul

> Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
> ---
>  include/version.hx | 2 +-
>  src/xeniface.inf   | 4 ++--
>  2 files changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/include/version.hx b/include/version.hx
> index ea1d0af..bbf34b9 100644
> --- a/include/version.hx
> +++ b/include/version.hx
> @@ -53,6 +53,6 @@
>  #define DAY	@DAY@
>  #define DAY_STR	"@DAY@"
> 
> -#define OBJECT_PREFIX_STR   "@OBJECT_PREFIX"
> +#define OBJECT_PREFIX_STR   "@OBJECT_PREFIX@"
>  #define OBJECT_GUID(_Name)  @OBJECT_PREFIX@ ## _Name ## _GUID
> 
> diff --git a/src/xeniface.inf b/src/xeniface.inf
> index ad33041..4fb3edb 100644
> --- a/src/xeniface.inf
> +++ b/src/xeniface.inf
> @@ -90,7 +90,7 @@ liteagent.exe = 1,,
>  SPSVCINST_ASSOCSERVICE= 0x00000002
>  Company= "@COMPANY_NAME@"
>  DiskId1 = "@PRODUCT_NAME@ Interface Package"
> -XenIfaceDevice.DeviceDesc = "@PRODUCT_NAME Interface"
> +XenIfaceDevice.DeviceDesc = "@PRODUCT_NAME@ Interface"
>  LITESVC_FLAGS= 0x00000800
> -xenlite.SVCDESC= "@PRODUCT_NAME Interface Service"
> +xenlite.SVCDESC= "@PRODUCT_NAME@ Interface Service"
> 
> --
> 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 Oct 07 14:25:04 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 07 Oct 2014 14:25: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 1XbVhI-0004XH-Bl; Tue, 07 Oct 2014 14:25:04 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <Paul.Durrant@citrix.com>) id 1XbVhH-0004X8-3G
	for win-pv-devel@lists.xenproject.org; Tue, 07 Oct 2014 14:25:03 +0000
Received: from [85.158.139.211:43169] by server-11.bemta-5.messagelabs.com id
	EB/A2-11011-EB7F3345; Tue, 07 Oct 2014 14:25:02 +0000
X-Env-Sender: Paul.Durrant@citrix.com
X-Msg-Ref: server-13.tower-206.messagelabs.com!1412691901!12547251!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: 6.12.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 25969 invoked from network); 7 Oct 2014 14:25:01 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-13.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	7 Oct 2014 14:25:01 -0000
X-IronPort-AV: E=Sophos;i="5.04,670,1406592000"; d="scan'208";a="25767133"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Paul Durrant <Paul.Durrant@citrix.com>, Fabio Fantoni
	<fabio.fantoni@m2r.biz>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Thread-Topic: Question about windows pv driver update
Thread-Index: AQHP4jY6uKUOZZdOJE28jh6onk2fNJwkqE5wgAAH0KA=
Date: Tue, 7 Oct 2014 14:25:00 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD0110FA3E7@AMSPEX01CL01.citrite.net>
References: <5433F056.4020704@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0110FA27C@AMSPEX01CL01.citrite.net>
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD0110FA27C@AMSPEX01CL01.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
Subject: Re: [win-pv-devel] Question about windows pv driver update
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 Paul Durrant
> Sent: 07 October 2014 14:57
> To: Fabio Fantoni; win-pv-devel@lists.xenproject.org
> Subject: Re: [win-pv-devel] Question about windows pv driver update
> 
> > -----Original Message-----
> > From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> > Sent: 07 October 2014 14:53
> > To: win-pv-devel@lists.xenproject.org
> > Cc: Paul Durrant
> > Subject: Question about windows pv driver update
> >
> > I tried to update xenbus with today's build but dpinst fails.
> > For update pv drivers I must uninstall all them from control panel,
> > reboot windows and reinstall the newer ones? Is correct or I must do
> > different and/or other things?
> 
> If you're updating from a previous build of the xenbits code then an update
> should be ok. What was the exact nature of the failure?
> 

It's ok, I reproduced it. It looks like a co-installer bug:

XENBUS_COINST|DifInstallPreProcess: ====>
XENBUS_COINST|GetDeviceKeyName: VEN_5853&DEV_0001&SUBSYS_00015853&REV_01
XENBUS_COINST|GetDriverKeyName: {4d36e97d-e325-11ce-bfc1-08002be10318}\0022
HEAP[DrvInst.exe]: Invalid address specified to RtlValidateHeap( 008C0000, 008FCFB3 )

Co-installer process has crashed at this point.

XENBUS_COINST|Entry: 8.0.0.19 (5/9/2014) ===>
XENBUS_COINST|Entry: DESTROYPRIVATEDATA PreProcessing
XENBUS_COINST|Entry: 8.0.0.19 (5/9/2014) <===
XENBUS_COINST|DllMain: 8.0.0.19 (5/9/2014): PROCESS_DETACH

I'll try to find the cause of the fault and fix a.s.a.p.

  Paul

>   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

_______________________________________________
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 Oct 07 14:25:04 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 07 Oct 2014 14:25: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 1XbVhI-0004XH-Bl; Tue, 07 Oct 2014 14:25:04 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <Paul.Durrant@citrix.com>) id 1XbVhH-0004X8-3G
	for win-pv-devel@lists.xenproject.org; Tue, 07 Oct 2014 14:25:03 +0000
Received: from [85.158.139.211:43169] by server-11.bemta-5.messagelabs.com id
	EB/A2-11011-EB7F3345; Tue, 07 Oct 2014 14:25:02 +0000
X-Env-Sender: Paul.Durrant@citrix.com
X-Msg-Ref: server-13.tower-206.messagelabs.com!1412691901!12547251!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: 6.12.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 25969 invoked from network); 7 Oct 2014 14:25:01 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-13.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	7 Oct 2014 14:25:01 -0000
X-IronPort-AV: E=Sophos;i="5.04,670,1406592000"; d="scan'208";a="25767133"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Paul Durrant <Paul.Durrant@citrix.com>, Fabio Fantoni
	<fabio.fantoni@m2r.biz>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Thread-Topic: Question about windows pv driver update
Thread-Index: AQHP4jY6uKUOZZdOJE28jh6onk2fNJwkqE5wgAAH0KA=
Date: Tue, 7 Oct 2014 14:25:00 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD0110FA3E7@AMSPEX01CL01.citrite.net>
References: <5433F056.4020704@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0110FA27C@AMSPEX01CL01.citrite.net>
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD0110FA27C@AMSPEX01CL01.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
Subject: Re: [win-pv-devel] Question about windows pv driver update
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 Paul Durrant
> Sent: 07 October 2014 14:57
> To: Fabio Fantoni; win-pv-devel@lists.xenproject.org
> Subject: Re: [win-pv-devel] Question about windows pv driver update
> 
> > -----Original Message-----
> > From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> > Sent: 07 October 2014 14:53
> > To: win-pv-devel@lists.xenproject.org
> > Cc: Paul Durrant
> > Subject: Question about windows pv driver update
> >
> > I tried to update xenbus with today's build but dpinst fails.
> > For update pv drivers I must uninstall all them from control panel,
> > reboot windows and reinstall the newer ones? Is correct or I must do
> > different and/or other things?
> 
> If you're updating from a previous build of the xenbits code then an update
> should be ok. What was the exact nature of the failure?
> 

It's ok, I reproduced it. It looks like a co-installer bug:

XENBUS_COINST|DifInstallPreProcess: ====>
XENBUS_COINST|GetDeviceKeyName: VEN_5853&DEV_0001&SUBSYS_00015853&REV_01
XENBUS_COINST|GetDriverKeyName: {4d36e97d-e325-11ce-bfc1-08002be10318}\0022
HEAP[DrvInst.exe]: Invalid address specified to RtlValidateHeap( 008C0000, 008FCFB3 )

Co-installer process has crashed at this point.

XENBUS_COINST|Entry: 8.0.0.19 (5/9/2014) ===>
XENBUS_COINST|Entry: DESTROYPRIVATEDATA PreProcessing
XENBUS_COINST|Entry: 8.0.0.19 (5/9/2014) <===
XENBUS_COINST|DllMain: 8.0.0.19 (5/9/2014): PROCESS_DETACH

I'll try to find the cause of the fault and fix a.s.a.p.

  Paul

>   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

_______________________________________________
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 Oct 07 14:57:37 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 07 Oct 2014 14:57: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 1XbWCn-00076Z-3o; Tue, 07 Oct 2014 14:57:37 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <Paul.Durrant@citrix.com>) id 1XbWCl-00076U-CT
	for win-pv-devel@lists.xenproject.org; Tue, 07 Oct 2014 14:57:35 +0000
Received: from [193.109.254.147:29012] by server-5.bemta-14.messagelabs.com id
	6A/A5-28255-E5FF3345; Tue, 07 Oct 2014 14:57:34 +0000
X-Env-Sender: Paul.Durrant@citrix.com
X-Msg-Ref: server-7.tower-27.messagelabs.com!1412693852!13890637!1
X-Originating-IP: [66.165.176.89]
X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: 
	VHJ1c3RlZCBJUDogNjYuMTY1LjE3Ni44OSA9PiAyMDMwMDc=\n
X-StarScan-Received: 
X-StarScan-Version: 6.12.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 328 invoked from network); 7 Oct 2014 14:57:34 -0000
Received: from smtp.citrix.com (HELO SMTP.CITRIX.COM) (66.165.176.89)
	by server-7.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	7 Oct 2014 14:57:34 -0000
X-IronPort-AV: E=Sophos;i="5.04,670,1406592000"; d="scan'208";a="178999356"
Received: from ukmail1.uk.xensource.com (10.80.16.128) by smtprelay.citrix.com
	(10.13.107.80) with Microsoft SMTP Server id 14.3.181.6;
	Tue, 7 Oct 2014 10:57:29 -0400
Received: from fountains.uk.xensource.com ([10.80.2.29]
	helo=localhost.localdomain)	by ukmail1.uk.xensource.com with esmtp
	(Exim
	4.69)	(envelope-from <paul.durrant@citrix.com>)	id 1XbWCf-0004wu-G7;
	Tue, 07 Oct 2014 15:57:29 +0100
From: Paul Durrant <paul.durrant@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
Date: Tue, 7 Oct 2014 15:57:19 +0100
Message-ID: <1412693839-4736-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
MIME-Version: 1.0
X-DLP: MIA1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH] Fix heap corruption in co-installer
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

The co-installer was corrupting its heap by trying to free a pointer after
incrementing it from its original value.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/coinst/coinst.c | 10 ++++++----
 src/xenbus.inf      |  2 +-
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/src/coinst/coinst.c b/src/coinst/coinst.c
index 27d3211..59726f5 100644
--- a/src/coinst/coinst.c
+++ b/src/coinst/coinst.c
@@ -1132,6 +1132,7 @@ MatchExistingDriver(
     DWORD   MaxValueLength;
     DWORD   DriverDescLength;
     PTCHAR  DriverDesc = NULL;
+    DWORD   ProductNameLength;
     DWORD   Type;
 
     // Look for a legacy platform device
@@ -1213,16 +1214,17 @@ found:
         goto fail9;
     }
 
+    ProductNameLength = (DWORD)strlen(PRODUCT_NAME_STR);
+
     if (strncmp(DriverDesc,
                 PRODUCT_NAME_STR,
-                strlen(PRODUCT_NAME_STR)) != 0) {
+                ProductNameLength) != 0) {
         SetLastError(ERROR_INSTALL_FAILURE);
         goto fail10;
     }
 
-    DriverDesc += strlen(PRODUCT_NAME_STR);
-
-    if (strcmp(DriverDesc, " PV Bus") != 0) {
+    if (strcmp(DriverDesc + ProductNameLength,
+               " PV Bus") != 0) {
         SetLastError(ERROR_INSTALL_FAILURE);
         goto fail11;
     }
diff --git a/src/xenbus.inf b/src/xenbus.inf
index fe01c79..544bb2c 100644
--- a/src/xenbus.inf
+++ b/src/xenbus.inf
@@ -72,8 +72,8 @@ xenbus_coinst_@MAJOR_VERSION@_@MINOR_VERSION@_@MICRO_VERSION@_@BUILD_NUMBER@.dll
 CopyFiles=XenBus_Copyfiles
 
 [XenBus_Inst.Services] 
-AddService=xenfilt,,XenFilt_Service,
 AddService=xenbus,0x02,XenBus_Service,
+AddService=xenfilt,,XenFilt_Service,
 
 [XenBus_Service] 
 DisplayName=%XenBusDesc%
-- 
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 Oct 07 14:57:37 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 07 Oct 2014 14:57: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 1XbWCn-00076Z-3o; Tue, 07 Oct 2014 14:57:37 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <Paul.Durrant@citrix.com>) id 1XbWCl-00076U-CT
	for win-pv-devel@lists.xenproject.org; Tue, 07 Oct 2014 14:57:35 +0000
Received: from [193.109.254.147:29012] by server-5.bemta-14.messagelabs.com id
	6A/A5-28255-E5FF3345; Tue, 07 Oct 2014 14:57:34 +0000
X-Env-Sender: Paul.Durrant@citrix.com
X-Msg-Ref: server-7.tower-27.messagelabs.com!1412693852!13890637!1
X-Originating-IP: [66.165.176.89]
X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: 
	VHJ1c3RlZCBJUDogNjYuMTY1LjE3Ni44OSA9PiAyMDMwMDc=\n
X-StarScan-Received: 
X-StarScan-Version: 6.12.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 328 invoked from network); 7 Oct 2014 14:57:34 -0000
Received: from smtp.citrix.com (HELO SMTP.CITRIX.COM) (66.165.176.89)
	by server-7.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	7 Oct 2014 14:57:34 -0000
X-IronPort-AV: E=Sophos;i="5.04,670,1406592000"; d="scan'208";a="178999356"
Received: from ukmail1.uk.xensource.com (10.80.16.128) by smtprelay.citrix.com
	(10.13.107.80) with Microsoft SMTP Server id 14.3.181.6;
	Tue, 7 Oct 2014 10:57:29 -0400
Received: from fountains.uk.xensource.com ([10.80.2.29]
	helo=localhost.localdomain)	by ukmail1.uk.xensource.com with esmtp
	(Exim
	4.69)	(envelope-from <paul.durrant@citrix.com>)	id 1XbWCf-0004wu-G7;
	Tue, 07 Oct 2014 15:57:29 +0100
From: Paul Durrant <paul.durrant@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
Date: Tue, 7 Oct 2014 15:57:19 +0100
Message-ID: <1412693839-4736-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
MIME-Version: 1.0
X-DLP: MIA1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH] Fix heap corruption in co-installer
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

The co-installer was corrupting its heap by trying to free a pointer after
incrementing it from its original value.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/coinst/coinst.c | 10 ++++++----
 src/xenbus.inf      |  2 +-
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/src/coinst/coinst.c b/src/coinst/coinst.c
index 27d3211..59726f5 100644
--- a/src/coinst/coinst.c
+++ b/src/coinst/coinst.c
@@ -1132,6 +1132,7 @@ MatchExistingDriver(
     DWORD   MaxValueLength;
     DWORD   DriverDescLength;
     PTCHAR  DriverDesc = NULL;
+    DWORD   ProductNameLength;
     DWORD   Type;
 
     // Look for a legacy platform device
@@ -1213,16 +1214,17 @@ found:
         goto fail9;
     }
 
+    ProductNameLength = (DWORD)strlen(PRODUCT_NAME_STR);
+
     if (strncmp(DriverDesc,
                 PRODUCT_NAME_STR,
-                strlen(PRODUCT_NAME_STR)) != 0) {
+                ProductNameLength) != 0) {
         SetLastError(ERROR_INSTALL_FAILURE);
         goto fail10;
     }
 
-    DriverDesc += strlen(PRODUCT_NAME_STR);
-
-    if (strcmp(DriverDesc, " PV Bus") != 0) {
+    if (strcmp(DriverDesc + ProductNameLength,
+               " PV Bus") != 0) {
         SetLastError(ERROR_INSTALL_FAILURE);
         goto fail11;
     }
diff --git a/src/xenbus.inf b/src/xenbus.inf
index fe01c79..544bb2c 100644
--- a/src/xenbus.inf
+++ b/src/xenbus.inf
@@ -72,8 +72,8 @@ xenbus_coinst_@MAJOR_VERSION@_@MINOR_VERSION@_@MICRO_VERSION@_@BUILD_NUMBER@.dll
 CopyFiles=XenBus_Copyfiles
 
 [XenBus_Inst.Services] 
-AddService=xenfilt,,XenFilt_Service,
 AddService=xenbus,0x02,XenBus_Service,
+AddService=xenfilt,,XenFilt_Service,
 
 [XenBus_Service] 
 DisplayName=%XenBusDesc%
-- 
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 Oct 08 08:46:06 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 08 Oct 2014 08:46:06 +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 1Xbmso-0003FW-9o; Wed, 08 Oct 2014 08:46:06 +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 1Xbmsm-0003FR-Hh
	for win-pv-devel@lists.xenproject.org; Wed, 08 Oct 2014 08:46:04 +0000
Received: from [85.158.137.68:33614] by server-15.bemta-3.messagelabs.com id
	2A/80-01573-BC9F4345; Wed, 08 Oct 2014 08:46:03 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-4.tower-31.messagelabs.com!1412757963!12101415!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: 6.12.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 6094 invoked from network); 8 Oct 2014 08:46:03 -0000
Received: from mail-wg0-f52.google.com (HELO mail-wg0-f52.google.com)
	(74.125.82.52)
	by server-4.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	8 Oct 2014 08:46:03 -0000
Received: by mail-wg0-f52.google.com with SMTP id a1so11023349wgh.35
	for <win-pv-devel@lists.xenproject.org>;
	Wed, 08 Oct 2014 01:46:02 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:message-id:date:from:user-agent:mime-version:to
	:cc:subject:references:in-reply-to:content-type
	:content-transfer-encoding;
	bh=W82w/EvJvpxZbmIvHiQgBN8ynLrta5H1HfxRSlLTsp8=;
	b=NTlLRpGb55v2dyoIRRVpaRCwmDD8uWGHCc7dCou5svcC09Qau68aNTYUpCA+1pT4N1
	Nsr/NY/Vmj6Lu0J9kLqhMAqNQLuPnBV9wExZ4GerwpxYMOyJPvIrLgt3nMKSMYbFrk1H
	A7wc403o4v0cilpL4EZyFZYoowy5hut94H1D8LNcCww/z4Czfg4I1sapDK+BZjpfSOR2
	lG+R7KXjus/9YwKo9kwLRnHdq3BXRToy4rrTbiimqAO+7+3K9Q/mw8X2PFTIYPvRuwSu
	k1kxDMqF78tP3jgAIQtytreDQPhkJHui8bQHLJV2MRt0+7v/uLLVOB82/KFCYc3GQqZG
	3daA==
X-Gm-Message-State: ALoCoQl23LwXtvVSeDxjJASL4dKoG6K4vj8BNba2HDUA19DA+5hMUj08MdJaExUQ0d+8J6UPTTS1
X-Received: by 10.194.242.33 with SMTP id wn1mr755205wjc.110.1412757962729;
	Wed, 08 Oct 2014 01:46:02 -0700 (PDT)
Received: from [192.168.1.15] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by mx.google.com with ESMTPSA id cb6sm4247062wjc.30.2014.10.08.01.46.01
	for <multiple recipients>
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Wed, 08 Oct 2014 01:46:02 -0700 (PDT)
Message-ID: <5434F9CE.6030107@m2r.biz>
Date: Wed, 08 Oct 2014 10:46:06 +0200
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64;
	rv:24.0) Gecko/20100101 Thunderbird/24.6.0
MIME-Version: 1.0
To: Paul Durrant <Paul.Durrant@citrix.com>
References: <1412691252-7320-1-git-send-email-paul.durrant@citrix.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0110FA304@AMSPEX01CL01.citrite.net>
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD0110FA304@AMSPEX01CL01.citrite.net>
Cc: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Subject: Re: [win-pv-devel] [PATCH 1/2] Fix OBJECT_PREFIX and PRODUCT_NAME
	substitution
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 07/10/2014 16:15, Paul Durrant ha scritto:
>> -----Original Message-----
>> From: Paul Durrant [mailto:paul.durrant@citrix.com]
>> Sent: 07 October 2014 15:14
>> To: win-pv-devel@lists.xenproject.org
>> Cc: Paul Durrant
>> Subject: [PATCH 1/2] Fix OBJECT_PREFIX and PRODUCT_NAME substitution
>>
>> There were missing trailing '@' characters causing substitution to fail.
>>
> Fabio,
>
>    This should fix your 'xl shutdown' problem.
>
>    Paul

I did and tried new xeniface build and with this patch now service 
name/description is correct and xl shutdown is working, thanks!

>
>> Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
>> ---
>>   include/version.hx | 2 +-
>>   src/xeniface.inf   | 4 ++--
>>   2 files changed, 3 insertions(+), 3 deletions(-)
>>
>> diff --git a/include/version.hx b/include/version.hx
>> index ea1d0af..bbf34b9 100644
>> --- a/include/version.hx
>> +++ b/include/version.hx
>> @@ -53,6 +53,6 @@
>>   #define DAY	@DAY@
>>   #define DAY_STR	"@DAY@"
>>
>> -#define OBJECT_PREFIX_STR   "@OBJECT_PREFIX"
>> +#define OBJECT_PREFIX_STR   "@OBJECT_PREFIX@"
>>   #define OBJECT_GUID(_Name)  @OBJECT_PREFIX@ ## _Name ## _GUID
>>
>> diff --git a/src/xeniface.inf b/src/xeniface.inf
>> index ad33041..4fb3edb 100644
>> --- a/src/xeniface.inf
>> +++ b/src/xeniface.inf
>> @@ -90,7 +90,7 @@ liteagent.exe = 1,,
>>   SPSVCINST_ASSOCSERVICE= 0x00000002
>>   Company= "@COMPANY_NAME@"
>>   DiskId1 = "@PRODUCT_NAME@ Interface Package"
>> -XenIfaceDevice.DeviceDesc = "@PRODUCT_NAME Interface"
>> +XenIfaceDevice.DeviceDesc = "@PRODUCT_NAME@ Interface"
>>   LITESVC_FLAGS= 0x00000800
>> -xenlite.SVCDESC= "@PRODUCT_NAME Interface Service"
>> +xenlite.SVCDESC= "@PRODUCT_NAME@ Interface Service"
>>
>> --
>> 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 Oct 08 08:46:06 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 08 Oct 2014 08:46:06 +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 1Xbmso-0003FW-9o; Wed, 08 Oct 2014 08:46:06 +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 1Xbmsm-0003FR-Hh
	for win-pv-devel@lists.xenproject.org; Wed, 08 Oct 2014 08:46:04 +0000
Received: from [85.158.137.68:33614] by server-15.bemta-3.messagelabs.com id
	2A/80-01573-BC9F4345; Wed, 08 Oct 2014 08:46:03 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-4.tower-31.messagelabs.com!1412757963!12101415!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: 6.12.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 6094 invoked from network); 8 Oct 2014 08:46:03 -0000
Received: from mail-wg0-f52.google.com (HELO mail-wg0-f52.google.com)
	(74.125.82.52)
	by server-4.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	8 Oct 2014 08:46:03 -0000
Received: by mail-wg0-f52.google.com with SMTP id a1so11023349wgh.35
	for <win-pv-devel@lists.xenproject.org>;
	Wed, 08 Oct 2014 01:46:02 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:message-id:date:from:user-agent:mime-version:to
	:cc:subject:references:in-reply-to:content-type
	:content-transfer-encoding;
	bh=W82w/EvJvpxZbmIvHiQgBN8ynLrta5H1HfxRSlLTsp8=;
	b=NTlLRpGb55v2dyoIRRVpaRCwmDD8uWGHCc7dCou5svcC09Qau68aNTYUpCA+1pT4N1
	Nsr/NY/Vmj6Lu0J9kLqhMAqNQLuPnBV9wExZ4GerwpxYMOyJPvIrLgt3nMKSMYbFrk1H
	A7wc403o4v0cilpL4EZyFZYoowy5hut94H1D8LNcCww/z4Czfg4I1sapDK+BZjpfSOR2
	lG+R7KXjus/9YwKo9kwLRnHdq3BXRToy4rrTbiimqAO+7+3K9Q/mw8X2PFTIYPvRuwSu
	k1kxDMqF78tP3jgAIQtytreDQPhkJHui8bQHLJV2MRt0+7v/uLLVOB82/KFCYc3GQqZG
	3daA==
X-Gm-Message-State: ALoCoQl23LwXtvVSeDxjJASL4dKoG6K4vj8BNba2HDUA19DA+5hMUj08MdJaExUQ0d+8J6UPTTS1
X-Received: by 10.194.242.33 with SMTP id wn1mr755205wjc.110.1412757962729;
	Wed, 08 Oct 2014 01:46:02 -0700 (PDT)
Received: from [192.168.1.15] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by mx.google.com with ESMTPSA id cb6sm4247062wjc.30.2014.10.08.01.46.01
	for <multiple recipients>
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Wed, 08 Oct 2014 01:46:02 -0700 (PDT)
Message-ID: <5434F9CE.6030107@m2r.biz>
Date: Wed, 08 Oct 2014 10:46:06 +0200
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64;
	rv:24.0) Gecko/20100101 Thunderbird/24.6.0
MIME-Version: 1.0
To: Paul Durrant <Paul.Durrant@citrix.com>
References: <1412691252-7320-1-git-send-email-paul.durrant@citrix.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0110FA304@AMSPEX01CL01.citrite.net>
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD0110FA304@AMSPEX01CL01.citrite.net>
Cc: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Subject: Re: [win-pv-devel] [PATCH 1/2] Fix OBJECT_PREFIX and PRODUCT_NAME
	substitution
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 07/10/2014 16:15, Paul Durrant ha scritto:
>> -----Original Message-----
>> From: Paul Durrant [mailto:paul.durrant@citrix.com]
>> Sent: 07 October 2014 15:14
>> To: win-pv-devel@lists.xenproject.org
>> Cc: Paul Durrant
>> Subject: [PATCH 1/2] Fix OBJECT_PREFIX and PRODUCT_NAME substitution
>>
>> There were missing trailing '@' characters causing substitution to fail.
>>
> Fabio,
>
>    This should fix your 'xl shutdown' problem.
>
>    Paul

I did and tried new xeniface build and with this patch now service 
name/description is correct and xl shutdown is working, thanks!

>
>> Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
>> ---
>>   include/version.hx | 2 +-
>>   src/xeniface.inf   | 4 ++--
>>   2 files changed, 3 insertions(+), 3 deletions(-)
>>
>> diff --git a/include/version.hx b/include/version.hx
>> index ea1d0af..bbf34b9 100644
>> --- a/include/version.hx
>> +++ b/include/version.hx
>> @@ -53,6 +53,6 @@
>>   #define DAY	@DAY@
>>   #define DAY_STR	"@DAY@"
>>
>> -#define OBJECT_PREFIX_STR   "@OBJECT_PREFIX"
>> +#define OBJECT_PREFIX_STR   "@OBJECT_PREFIX@"
>>   #define OBJECT_GUID(_Name)  @OBJECT_PREFIX@ ## _Name ## _GUID
>>
>> diff --git a/src/xeniface.inf b/src/xeniface.inf
>> index ad33041..4fb3edb 100644
>> --- a/src/xeniface.inf
>> +++ b/src/xeniface.inf
>> @@ -90,7 +90,7 @@ liteagent.exe = 1,,
>>   SPSVCINST_ASSOCSERVICE= 0x00000002
>>   Company= "@COMPANY_NAME@"
>>   DiskId1 = "@PRODUCT_NAME@ Interface Package"
>> -XenIfaceDevice.DeviceDesc = "@PRODUCT_NAME Interface"
>> +XenIfaceDevice.DeviceDesc = "@PRODUCT_NAME@ Interface"
>>   LITESVC_FLAGS= 0x00000800
>> -xenlite.SVCDESC= "@PRODUCT_NAME Interface Service"
>> +xenlite.SVCDESC= "@PRODUCT_NAME@ Interface Service"
>>
>> --
>> 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 Mon Oct 13 12:21:29 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 13 Oct 2014 12:21: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 1Xdecz-0005Ke-Fy; Mon, 13 Oct 2014 12:21:29 +0000
Received: from mail6.bemta4.messagelabs.com ([85.158.143.247])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1Xdecy-0005KW-31
	for win-pv-devel@lists.xenproject.org; Mon, 13 Oct 2014 12:21:28 +0000
Received: from [85.158.143.35:23758] by server-3.bemta-4.messagelabs.com id
	8A/9B-06192-7C3CB345; Mon, 13 Oct 2014 12:21:27 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-15.tower-21.messagelabs.com!1413202886!12536018!1
X-Originating-IP: [74.125.82.48]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 12283 invoked from network); 13 Oct 2014 12:21:27 -0000
Received: from mail-wg0-f48.google.com (HELO mail-wg0-f48.google.com)
	(74.125.82.48)
	by server-15.tower-21.messagelabs.com with RC4-SHA encrypted SMTP;
	13 Oct 2014 12:21:27 -0000
Received: by mail-wg0-f48.google.com with SMTP id k14so8575465wgh.7
	for <win-pv-devel@lists.xenproject.org>;
	Mon, 13 Oct 2014 05:21:26 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:message-id:date:from:user-agent:mime-version:to
	:subject:references:in-reply-to:content-type
	:content-transfer-encoding;
	bh=+ybwpiZ5WMcMiXwTg+p7e6CF/bRa56RG6F+kNwbIMf4=;
	b=L5Nwp730TTiAuZQWWD1aixh3/KVL76d6UkCzBY2KFetH0AoGurH8dxalM155zgPoUi
	JVEZ4c28uUXr9qqZYPs6g656glk8DMoiva8eFC7VrS1aSXY5KqaarPsKjnivyU7iB4tL
	ORJLK3wHGyspBgjUTtWveuB1NlLr5+/4mAn7Pl56Hyh1KIWQUXtS0mQt25/DcLaO6GYb
	rgcXYbm5Xc6AunuHgJOZtxuB+6CGf0KB9PPbJQCYYjEDDUOpPVZIFweFr1t+/5oFYGPt
	trG18VGlWZb2UgvufJDH/F8jP2NULg81H5NufZaBmJoOSjT1pYdzAaqDQ4e7UFsjAcI2
	NyEQ==
X-Gm-Message-State: ALoCoQm2u0SnHpRULD8MiIRGfuG8yQ66ka1c4RPTzn1gSVkVT3kdnqWGjaWnrUs5IWc/rUQ8uxF8
X-Received: by 10.180.7.233 with SMTP id m9mr479324wia.39.1413202886718;
	Mon, 13 Oct 2014 05:21:26 -0700 (PDT)
Received: from [192.168.1.15] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by mx.google.com with ESMTPSA id xm4sm12022782wib.9.2014.10.13.05.21.25
	for <multiple recipients>
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Mon, 13 Oct 2014 05:21:25 -0700 (PDT)
Message-ID: <543BC3C3.7090800@m2r.biz>
Date: Mon, 13 Oct 2014 14:21:23 +0200
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64;
	rv:24.0) Gecko/20100101 Thunderbird/24.6.0
MIME-Version: 1.0
To: Paul Durrant <paul.durrant@citrix.com>, win-pv-devel@lists.xenproject.org
References: <1412693839-4736-1-git-send-email-paul.durrant@citrix.com>
In-Reply-To: <1412693839-4736-1-git-send-email-paul.durrant@citrix.com>
Subject: Re: [win-pv-devel] [PATCH] Fix heap corruption in co-installer
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 07/10/2014 16:57, Paul Durrant ha scritto:
> The co-installer was corrupting its heap by trying to free a pointer after
> incrementing it from its original value.
>
> Signed-off-by: Paul Durrant <paul.durrant@citrix.com>

I saw that this patch is still not in repository, may have problems and 
should be tested before?
It should solves xenbus upgrade problem, right?

Thanks for any reply.

> ---
>   src/coinst/coinst.c | 10 ++++++----
>   src/xenbus.inf      |  2 +-
>   2 files changed, 7 insertions(+), 5 deletions(-)
>
> diff --git a/src/coinst/coinst.c b/src/coinst/coinst.c
> index 27d3211..59726f5 100644
> --- a/src/coinst/coinst.c
> +++ b/src/coinst/coinst.c
> @@ -1132,6 +1132,7 @@ MatchExistingDriver(
>       DWORD   MaxValueLength;
>       DWORD   DriverDescLength;
>       PTCHAR  DriverDesc = NULL;
> +    DWORD   ProductNameLength;
>       DWORD   Type;
>   
>       // Look for a legacy platform device
> @@ -1213,16 +1214,17 @@ found:
>           goto fail9;
>       }
>   
> +    ProductNameLength = (DWORD)strlen(PRODUCT_NAME_STR);
> +
>       if (strncmp(DriverDesc,
>                   PRODUCT_NAME_STR,
> -                strlen(PRODUCT_NAME_STR)) != 0) {
> +                ProductNameLength) != 0) {
>           SetLastError(ERROR_INSTALL_FAILURE);
>           goto fail10;
>       }
>   
> -    DriverDesc += strlen(PRODUCT_NAME_STR);
> -
> -    if (strcmp(DriverDesc, " PV Bus") != 0) {
> +    if (strcmp(DriverDesc + ProductNameLength,
> +               " PV Bus") != 0) {
>           SetLastError(ERROR_INSTALL_FAILURE);
>           goto fail11;
>       }
> diff --git a/src/xenbus.inf b/src/xenbus.inf
> index fe01c79..544bb2c 100644
> --- a/src/xenbus.inf
> +++ b/src/xenbus.inf
> @@ -72,8 +72,8 @@ xenbus_coinst_@MAJOR_VERSION@_@MINOR_VERSION@_@MICRO_VERSION@_@BUILD_NUMBER@.dll
>   CopyFiles=XenBus_Copyfiles
>   
>   [XenBus_Inst.Services]
> -AddService=xenfilt,,XenFilt_Service,
>   AddService=xenbus,0x02,XenBus_Service,
> +AddService=xenfilt,,XenFilt_Service,
>   
>   [XenBus_Service]
>   DisplayName=%XenBusDesc%


_______________________________________________
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 Oct 13 12:21:29 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 13 Oct 2014 12:21: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 1Xdecz-0005Ke-Fy; Mon, 13 Oct 2014 12:21:29 +0000
Received: from mail6.bemta4.messagelabs.com ([85.158.143.247])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1Xdecy-0005KW-31
	for win-pv-devel@lists.xenproject.org; Mon, 13 Oct 2014 12:21:28 +0000
Received: from [85.158.143.35:23758] by server-3.bemta-4.messagelabs.com id
	8A/9B-06192-7C3CB345; Mon, 13 Oct 2014 12:21:27 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-15.tower-21.messagelabs.com!1413202886!12536018!1
X-Originating-IP: [74.125.82.48]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 12283 invoked from network); 13 Oct 2014 12:21:27 -0000
Received: from mail-wg0-f48.google.com (HELO mail-wg0-f48.google.com)
	(74.125.82.48)
	by server-15.tower-21.messagelabs.com with RC4-SHA encrypted SMTP;
	13 Oct 2014 12:21:27 -0000
Received: by mail-wg0-f48.google.com with SMTP id k14so8575465wgh.7
	for <win-pv-devel@lists.xenproject.org>;
	Mon, 13 Oct 2014 05:21:26 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:message-id:date:from:user-agent:mime-version:to
	:subject:references:in-reply-to:content-type
	:content-transfer-encoding;
	bh=+ybwpiZ5WMcMiXwTg+p7e6CF/bRa56RG6F+kNwbIMf4=;
	b=L5Nwp730TTiAuZQWWD1aixh3/KVL76d6UkCzBY2KFetH0AoGurH8dxalM155zgPoUi
	JVEZ4c28uUXr9qqZYPs6g656glk8DMoiva8eFC7VrS1aSXY5KqaarPsKjnivyU7iB4tL
	ORJLK3wHGyspBgjUTtWveuB1NlLr5+/4mAn7Pl56Hyh1KIWQUXtS0mQt25/DcLaO6GYb
	rgcXYbm5Xc6AunuHgJOZtxuB+6CGf0KB9PPbJQCYYjEDDUOpPVZIFweFr1t+/5oFYGPt
	trG18VGlWZb2UgvufJDH/F8jP2NULg81H5NufZaBmJoOSjT1pYdzAaqDQ4e7UFsjAcI2
	NyEQ==
X-Gm-Message-State: ALoCoQm2u0SnHpRULD8MiIRGfuG8yQ66ka1c4RPTzn1gSVkVT3kdnqWGjaWnrUs5IWc/rUQ8uxF8
X-Received: by 10.180.7.233 with SMTP id m9mr479324wia.39.1413202886718;
	Mon, 13 Oct 2014 05:21:26 -0700 (PDT)
Received: from [192.168.1.15] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by mx.google.com with ESMTPSA id xm4sm12022782wib.9.2014.10.13.05.21.25
	for <multiple recipients>
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Mon, 13 Oct 2014 05:21:25 -0700 (PDT)
Message-ID: <543BC3C3.7090800@m2r.biz>
Date: Mon, 13 Oct 2014 14:21:23 +0200
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64;
	rv:24.0) Gecko/20100101 Thunderbird/24.6.0
MIME-Version: 1.0
To: Paul Durrant <paul.durrant@citrix.com>, win-pv-devel@lists.xenproject.org
References: <1412693839-4736-1-git-send-email-paul.durrant@citrix.com>
In-Reply-To: <1412693839-4736-1-git-send-email-paul.durrant@citrix.com>
Subject: Re: [win-pv-devel] [PATCH] Fix heap corruption in co-installer
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 07/10/2014 16:57, Paul Durrant ha scritto:
> The co-installer was corrupting its heap by trying to free a pointer after
> incrementing it from its original value.
>
> Signed-off-by: Paul Durrant <paul.durrant@citrix.com>

I saw that this patch is still not in repository, may have problems and 
should be tested before?
It should solves xenbus upgrade problem, right?

Thanks for any reply.

> ---
>   src/coinst/coinst.c | 10 ++++++----
>   src/xenbus.inf      |  2 +-
>   2 files changed, 7 insertions(+), 5 deletions(-)
>
> diff --git a/src/coinst/coinst.c b/src/coinst/coinst.c
> index 27d3211..59726f5 100644
> --- a/src/coinst/coinst.c
> +++ b/src/coinst/coinst.c
> @@ -1132,6 +1132,7 @@ MatchExistingDriver(
>       DWORD   MaxValueLength;
>       DWORD   DriverDescLength;
>       PTCHAR  DriverDesc = NULL;
> +    DWORD   ProductNameLength;
>       DWORD   Type;
>   
>       // Look for a legacy platform device
> @@ -1213,16 +1214,17 @@ found:
>           goto fail9;
>       }
>   
> +    ProductNameLength = (DWORD)strlen(PRODUCT_NAME_STR);
> +
>       if (strncmp(DriverDesc,
>                   PRODUCT_NAME_STR,
> -                strlen(PRODUCT_NAME_STR)) != 0) {
> +                ProductNameLength) != 0) {
>           SetLastError(ERROR_INSTALL_FAILURE);
>           goto fail10;
>       }
>   
> -    DriverDesc += strlen(PRODUCT_NAME_STR);
> -
> -    if (strcmp(DriverDesc, " PV Bus") != 0) {
> +    if (strcmp(DriverDesc + ProductNameLength,
> +               " PV Bus") != 0) {
>           SetLastError(ERROR_INSTALL_FAILURE);
>           goto fail11;
>       }
> diff --git a/src/xenbus.inf b/src/xenbus.inf
> index fe01c79..544bb2c 100644
> --- a/src/xenbus.inf
> +++ b/src/xenbus.inf
> @@ -72,8 +72,8 @@ xenbus_coinst_@MAJOR_VERSION@_@MINOR_VERSION@_@MICRO_VERSION@_@BUILD_NUMBER@.dll
>   CopyFiles=XenBus_Copyfiles
>   
>   [XenBus_Inst.Services]
> -AddService=xenfilt,,XenFilt_Service,
>   AddService=xenbus,0x02,XenBus_Service,
> +AddService=xenfilt,,XenFilt_Service,
>   
>   [XenBus_Service]
>   DisplayName=%XenBusDesc%


_______________________________________________
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 Oct 13 12:23:41 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 13 Oct 2014 12:23: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 1Xdef7-0005MS-CB; Mon, 13 Oct 2014 12:23:41 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <Paul.Durrant@citrix.com>) id 1Xdef6-0005MN-0k
	for win-pv-devel@lists.xenproject.org; Mon, 13 Oct 2014 12:23:40 +0000
Received: from [193.109.254.147:57546] by server-5.bemta-14.messagelabs.com id
	04/10-28255-B44CB345; Mon, 13 Oct 2014 12:23:39 +0000
X-Env-Sender: Paul.Durrant@citrix.com
X-Msg-Ref: server-3.tower-27.messagelabs.com!1413203018!12331652!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: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 25802 invoked from network); 13 Oct 2014 12:23:38 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-3.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	13 Oct 2014 12:23:38 -0000
X-IronPort-AV: E=Sophos;i="5.04,710,1406592000"; d="scan'208";a="25929578"
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: [win-pv-devel] [PATCH] Fix heap corruption in co-installer
Thread-Index: AQHP4j8JFFOfnCr6BUWgr0kOJuPWp5wt2mKAgAAh6FA=
Date: Mon, 13 Oct 2014 12:23:38 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD0110FFD38@AMSPEX01CL01.citrite.net>
References: <1412693839-4736-1-git-send-email-paul.durrant@citrix.com>
	<543BC3C3.7090800@m2r.biz>
In-Reply-To: <543BC3C3.7090800@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] [PATCH] Fix heap corruption in co-installer
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 Fabio Fantoni
> Sent: 13 October 2014 13:21
> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> Subject: Re: [win-pv-devel] [PATCH] Fix heap corruption in co-installer
> 
> Il 07/10/2014 16:57, Paul Durrant ha scritto:
> > The co-installer was corrupting its heap by trying to free a pointer after
> > incrementing it from its original value.
> >
> > Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
> 
> I saw that this patch is still not in repository, may have problems and
> should be tested before?

Sorry. My mistake. I had neglected to push after applying. It's there now.

> It should solves xenbus upgrade problem, right?
> 

Yes, it should.

  Paul

> Thanks for any reply.
> 
> > ---
> >   src/coinst/coinst.c | 10 ++++++----
> >   src/xenbus.inf      |  2 +-
> >   2 files changed, 7 insertions(+), 5 deletions(-)
> >
> > diff --git a/src/coinst/coinst.c b/src/coinst/coinst.c
> > index 27d3211..59726f5 100644
> > --- a/src/coinst/coinst.c
> > +++ b/src/coinst/coinst.c
> > @@ -1132,6 +1132,7 @@ MatchExistingDriver(
> >       DWORD   MaxValueLength;
> >       DWORD   DriverDescLength;
> >       PTCHAR  DriverDesc = NULL;
> > +    DWORD   ProductNameLength;
> >       DWORD   Type;
> >
> >       // Look for a legacy platform device
> > @@ -1213,16 +1214,17 @@ found:
> >           goto fail9;
> >       }
> >
> > +    ProductNameLength = (DWORD)strlen(PRODUCT_NAME_STR);
> > +
> >       if (strncmp(DriverDesc,
> >                   PRODUCT_NAME_STR,
> > -                strlen(PRODUCT_NAME_STR)) != 0) {
> > +                ProductNameLength) != 0) {
> >           SetLastError(ERROR_INSTALL_FAILURE);
> >           goto fail10;
> >       }
> >
> > -    DriverDesc += strlen(PRODUCT_NAME_STR);
> > -
> > -    if (strcmp(DriverDesc, " PV Bus") != 0) {
> > +    if (strcmp(DriverDesc + ProductNameLength,
> > +               " PV Bus") != 0) {
> >           SetLastError(ERROR_INSTALL_FAILURE);
> >           goto fail11;
> >       }
> > diff --git a/src/xenbus.inf b/src/xenbus.inf
> > index fe01c79..544bb2c 100644
> > --- a/src/xenbus.inf
> > +++ b/src/xenbus.inf
> > @@ -72,8 +72,8 @@
> xenbus_coinst_@MAJOR_VERSION@_@MINOR_VERSION@_@MICRO_VER
> SION@_@BUILD_NUMBER@.dll
> >   CopyFiles=XenBus_Copyfiles
> >
> >   [XenBus_Inst.Services]
> > -AddService=xenfilt,,XenFilt_Service,
> >   AddService=xenbus,0x02,XenBus_Service,
> > +AddService=xenfilt,,XenFilt_Service,
> >
> >   [XenBus_Service]
> >   DisplayName=%XenBusDesc%
> 
> 
> _______________________________________________
> 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 Oct 13 12:23:41 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 13 Oct 2014 12:23: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 1Xdef7-0005MS-CB; Mon, 13 Oct 2014 12:23:41 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <Paul.Durrant@citrix.com>) id 1Xdef6-0005MN-0k
	for win-pv-devel@lists.xenproject.org; Mon, 13 Oct 2014 12:23:40 +0000
Received: from [193.109.254.147:57546] by server-5.bemta-14.messagelabs.com id
	04/10-28255-B44CB345; Mon, 13 Oct 2014 12:23:39 +0000
X-Env-Sender: Paul.Durrant@citrix.com
X-Msg-Ref: server-3.tower-27.messagelabs.com!1413203018!12331652!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: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 25802 invoked from network); 13 Oct 2014 12:23:38 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-3.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	13 Oct 2014 12:23:38 -0000
X-IronPort-AV: E=Sophos;i="5.04,710,1406592000"; d="scan'208";a="25929578"
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: [win-pv-devel] [PATCH] Fix heap corruption in co-installer
Thread-Index: AQHP4j8JFFOfnCr6BUWgr0kOJuPWp5wt2mKAgAAh6FA=
Date: Mon, 13 Oct 2014 12:23:38 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD0110FFD38@AMSPEX01CL01.citrite.net>
References: <1412693839-4736-1-git-send-email-paul.durrant@citrix.com>
	<543BC3C3.7090800@m2r.biz>
In-Reply-To: <543BC3C3.7090800@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] [PATCH] Fix heap corruption in co-installer
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 Fabio Fantoni
> Sent: 13 October 2014 13:21
> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> Subject: Re: [win-pv-devel] [PATCH] Fix heap corruption in co-installer
> 
> Il 07/10/2014 16:57, Paul Durrant ha scritto:
> > The co-installer was corrupting its heap by trying to free a pointer after
> > incrementing it from its original value.
> >
> > Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
> 
> I saw that this patch is still not in repository, may have problems and
> should be tested before?

Sorry. My mistake. I had neglected to push after applying. It's there now.

> It should solves xenbus upgrade problem, right?
> 

Yes, it should.

  Paul

> Thanks for any reply.
> 
> > ---
> >   src/coinst/coinst.c | 10 ++++++----
> >   src/xenbus.inf      |  2 +-
> >   2 files changed, 7 insertions(+), 5 deletions(-)
> >
> > diff --git a/src/coinst/coinst.c b/src/coinst/coinst.c
> > index 27d3211..59726f5 100644
> > --- a/src/coinst/coinst.c
> > +++ b/src/coinst/coinst.c
> > @@ -1132,6 +1132,7 @@ MatchExistingDriver(
> >       DWORD   MaxValueLength;
> >       DWORD   DriverDescLength;
> >       PTCHAR  DriverDesc = NULL;
> > +    DWORD   ProductNameLength;
> >       DWORD   Type;
> >
> >       // Look for a legacy platform device
> > @@ -1213,16 +1214,17 @@ found:
> >           goto fail9;
> >       }
> >
> > +    ProductNameLength = (DWORD)strlen(PRODUCT_NAME_STR);
> > +
> >       if (strncmp(DriverDesc,
> >                   PRODUCT_NAME_STR,
> > -                strlen(PRODUCT_NAME_STR)) != 0) {
> > +                ProductNameLength) != 0) {
> >           SetLastError(ERROR_INSTALL_FAILURE);
> >           goto fail10;
> >       }
> >
> > -    DriverDesc += strlen(PRODUCT_NAME_STR);
> > -
> > -    if (strcmp(DriverDesc, " PV Bus") != 0) {
> > +    if (strcmp(DriverDesc + ProductNameLength,
> > +               " PV Bus") != 0) {
> >           SetLastError(ERROR_INSTALL_FAILURE);
> >           goto fail11;
> >       }
> > diff --git a/src/xenbus.inf b/src/xenbus.inf
> > index fe01c79..544bb2c 100644
> > --- a/src/xenbus.inf
> > +++ b/src/xenbus.inf
> > @@ -72,8 +72,8 @@
> xenbus_coinst_@MAJOR_VERSION@_@MINOR_VERSION@_@MICRO_VER
> SION@_@BUILD_NUMBER@.dll
> >   CopyFiles=XenBus_Copyfiles
> >
> >   [XenBus_Inst.Services]
> > -AddService=xenfilt,,XenFilt_Service,
> >   AddService=xenbus,0x02,XenBus_Service,
> > +AddService=xenfilt,,XenFilt_Service,
> >
> >   [XenBus_Service]
> >   DisplayName=%XenBusDesc%
> 
> 
> _______________________________________________
> 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 Oct 13 12:59:17 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 13 Oct 2014 12:59: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 1XdfDZ-0006mL-SF; Mon, 13 Oct 2014 12:59:17 +0000
Received: from mail6.bemta4.messagelabs.com ([85.158.143.247])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1XdfDY-0006mE-DG
	for win-pv-devel@lists.xenproject.org; Mon, 13 Oct 2014 12:59:16 +0000
Received: from [85.158.143.35:53646] by server-1.bemta-4.messagelabs.com id
	8A/DE-05872-3ACCB345; Mon, 13 Oct 2014 12:59:15 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-12.tower-21.messagelabs.com!1413205155!12549673!1
X-Originating-IP: [209.85.212.180]
X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG
X-StarScan-Received: 
X-StarScan-Version: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 21270 invoked from network); 13 Oct 2014 12:59:15 -0000
Received: from mail-wi0-f180.google.com (HELO mail-wi0-f180.google.com)
	(209.85.212.180)
	by server-12.tower-21.messagelabs.com with RC4-SHA encrypted SMTP;
	13 Oct 2014 12:59:15 -0000
Received: by mail-wi0-f180.google.com with SMTP id em10so7347496wid.13
	for <win-pv-devel@lists.xenproject.org>;
	Mon, 13 Oct 2014 05:59:14 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:message-id:date:from:user-agent:mime-version:to
	:subject:references:in-reply-to:content-type
	:content-transfer-encoding;
	bh=6x3qAtxgfh5F+B/oYhjABV1H0sZ5JkgZZRbV2nshR2U=;
	b=BHUSFUyTXpamYf5A6X1vsNsy9oL8C3UwWVxYmB2/eCWMa80TgU5lSwrUz+vDMD4rhv
	r5rDv6gdwr1Lm01W83LfLqZKM2X1T5FcTd2YsfjH4tEvuDPVSAYchGW8iNkDVcw1eC3y
	tsEzDO70hhUlsnkeSOFnpoba/pLP9V+gqPFDm9Uv01KMjbZ1pWFAy4ooJNnqPXj4qfz9
	HDZvbxi/mf4Z/voFvIKBKqg+jOZX6zwQqONjwTM4fDZUpYIfhTErriWtnntebXghsXEp
	89NoMfxeWH9UjvoM+3i6CipjBbbKQI2YbM34pyEwwzlI3YYRx+y9ifJJdxtSdJVzc1l4
	dbkQ==
X-Gm-Message-State: ALoCoQmjmXJMCwlvpw7qYet9WzQ0zieYEUfHhhOkLKz/mDSP+nmkY8Z5Xz35aEA9SB8R6iuN4rVR
X-Received: by 10.180.92.1 with SMTP id ci1mr644511wib.47.1413205154753;
	Mon, 13 Oct 2014 05:59:14 -0700 (PDT)
Received: from [192.168.1.15] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by mx.google.com with ESMTPSA id
	hu3sm16587590wjb.17.2014.10.13.05.59.13 for <multiple recipients>
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Mon, 13 Oct 2014 05:59:14 -0700 (PDT)
Message-ID: <543BCCA0.5010806@m2r.biz>
Date: Mon, 13 Oct 2014 14:59:12 +0200
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64;
	rv:24.0) Gecko/20100101 Thunderbird/24.6.0
MIME-Version: 1.0
To: Paul Durrant <Paul.Durrant@citrix.com>, 
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <1412693839-4736-1-git-send-email-paul.durrant@citrix.com>
	<543BC3C3.7090800@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0110FFD38@AMSPEX01CL01.citrite.net>
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD0110FFD38@AMSPEX01CL01.citrite.net>
Subject: Re: [win-pv-devel] [PATCH] Fix heap corruption in co-installer
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 13/10/2014 14:23, Paul Durrant ha scritto:
>> -----Original Message-----
>> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
>> bounces@lists.xenproject.org] On Behalf Of Fabio Fantoni
>> Sent: 13 October 2014 13:21
>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>> Subject: Re: [win-pv-devel] [PATCH] Fix heap corruption in co-installer
>>
>> Il 07/10/2014 16:57, Paul Durrant ha scritto:
>>> The co-installer was corrupting its heap by trying to free a pointer after
>>> incrementing it from its original value.
>>>
>>> Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
>> I saw that this patch is still not in repository, may have problems and
>> should be tested before?
> Sorry. My mistake. I had neglected to push after applying. It's there now.
>
>> It should solves xenbus upgrade problem, right?
>>
> Yes, it should.
>
>    Paul

Thanks for patch and reply.
I did new xenbus build and tested it.
On W 8.1 where I not tried previous update new xenbus installed successfull.
On W7 where I tested previous xenbus update failed now still fails and I 
also can't unistall it from control panel->software because xenbus entry 
is nomore present.
Is there a way to solves?
Probably this patch solves completly the update problem and my problem 
with W7 domUs is caused by previous update failed where I had to do a xl 
destroy.

Thanks for any reply and sorry for my bad english.

>
>> Thanks for any reply.
>>
>>> ---
>>>    src/coinst/coinst.c | 10 ++++++----
>>>    src/xenbus.inf      |  2 +-
>>>    2 files changed, 7 insertions(+), 5 deletions(-)
>>>
>>> diff --git a/src/coinst/coinst.c b/src/coinst/coinst.c
>>> index 27d3211..59726f5 100644
>>> --- a/src/coinst/coinst.c
>>> +++ b/src/coinst/coinst.c
>>> @@ -1132,6 +1132,7 @@ MatchExistingDriver(
>>>        DWORD   MaxValueLength;
>>>        DWORD   DriverDescLength;
>>>        PTCHAR  DriverDesc = NULL;
>>> +    DWORD   ProductNameLength;
>>>        DWORD   Type;
>>>
>>>        // Look for a legacy platform device
>>> @@ -1213,16 +1214,17 @@ found:
>>>            goto fail9;
>>>        }
>>>
>>> +    ProductNameLength = (DWORD)strlen(PRODUCT_NAME_STR);
>>> +
>>>        if (strncmp(DriverDesc,
>>>                    PRODUCT_NAME_STR,
>>> -                strlen(PRODUCT_NAME_STR)) != 0) {
>>> +                ProductNameLength) != 0) {
>>>            SetLastError(ERROR_INSTALL_FAILURE);
>>>            goto fail10;
>>>        }
>>>
>>> -    DriverDesc += strlen(PRODUCT_NAME_STR);
>>> -
>>> -    if (strcmp(DriverDesc, " PV Bus") != 0) {
>>> +    if (strcmp(DriverDesc + ProductNameLength,
>>> +               " PV Bus") != 0) {
>>>            SetLastError(ERROR_INSTALL_FAILURE);
>>>            goto fail11;
>>>        }
>>> diff --git a/src/xenbus.inf b/src/xenbus.inf
>>> index fe01c79..544bb2c 100644
>>> --- a/src/xenbus.inf
>>> +++ b/src/xenbus.inf
>>> @@ -72,8 +72,8 @@
>> xenbus_coinst_@MAJOR_VERSION@_@MINOR_VERSION@_@MICRO_VER
>> SION@_@BUILD_NUMBER@.dll
>>>    CopyFiles=XenBus_Copyfiles
>>>
>>>    [XenBus_Inst.Services]
>>> -AddService=xenfilt,,XenFilt_Service,
>>>    AddService=xenbus,0x02,XenBus_Service,
>>> +AddService=xenfilt,,XenFilt_Service,
>>>
>>>    [XenBus_Service]
>>>    DisplayName=%XenBusDesc%
>>
>> _______________________________________________
>> 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 Oct 13 12:59:17 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 13 Oct 2014 12:59: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 1XdfDZ-0006mL-SF; Mon, 13 Oct 2014 12:59:17 +0000
Received: from mail6.bemta4.messagelabs.com ([85.158.143.247])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1XdfDY-0006mE-DG
	for win-pv-devel@lists.xenproject.org; Mon, 13 Oct 2014 12:59:16 +0000
Received: from [85.158.143.35:53646] by server-1.bemta-4.messagelabs.com id
	8A/DE-05872-3ACCB345; Mon, 13 Oct 2014 12:59:15 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-12.tower-21.messagelabs.com!1413205155!12549673!1
X-Originating-IP: [209.85.212.180]
X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG
X-StarScan-Received: 
X-StarScan-Version: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 21270 invoked from network); 13 Oct 2014 12:59:15 -0000
Received: from mail-wi0-f180.google.com (HELO mail-wi0-f180.google.com)
	(209.85.212.180)
	by server-12.tower-21.messagelabs.com with RC4-SHA encrypted SMTP;
	13 Oct 2014 12:59:15 -0000
Received: by mail-wi0-f180.google.com with SMTP id em10so7347496wid.13
	for <win-pv-devel@lists.xenproject.org>;
	Mon, 13 Oct 2014 05:59:14 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:message-id:date:from:user-agent:mime-version:to
	:subject:references:in-reply-to:content-type
	:content-transfer-encoding;
	bh=6x3qAtxgfh5F+B/oYhjABV1H0sZ5JkgZZRbV2nshR2U=;
	b=BHUSFUyTXpamYf5A6X1vsNsy9oL8C3UwWVxYmB2/eCWMa80TgU5lSwrUz+vDMD4rhv
	r5rDv6gdwr1Lm01W83LfLqZKM2X1T5FcTd2YsfjH4tEvuDPVSAYchGW8iNkDVcw1eC3y
	tsEzDO70hhUlsnkeSOFnpoba/pLP9V+gqPFDm9Uv01KMjbZ1pWFAy4ooJNnqPXj4qfz9
	HDZvbxi/mf4Z/voFvIKBKqg+jOZX6zwQqONjwTM4fDZUpYIfhTErriWtnntebXghsXEp
	89NoMfxeWH9UjvoM+3i6CipjBbbKQI2YbM34pyEwwzlI3YYRx+y9ifJJdxtSdJVzc1l4
	dbkQ==
X-Gm-Message-State: ALoCoQmjmXJMCwlvpw7qYet9WzQ0zieYEUfHhhOkLKz/mDSP+nmkY8Z5Xz35aEA9SB8R6iuN4rVR
X-Received: by 10.180.92.1 with SMTP id ci1mr644511wib.47.1413205154753;
	Mon, 13 Oct 2014 05:59:14 -0700 (PDT)
Received: from [192.168.1.15] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by mx.google.com with ESMTPSA id
	hu3sm16587590wjb.17.2014.10.13.05.59.13 for <multiple recipients>
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Mon, 13 Oct 2014 05:59:14 -0700 (PDT)
Message-ID: <543BCCA0.5010806@m2r.biz>
Date: Mon, 13 Oct 2014 14:59:12 +0200
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64;
	rv:24.0) Gecko/20100101 Thunderbird/24.6.0
MIME-Version: 1.0
To: Paul Durrant <Paul.Durrant@citrix.com>, 
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <1412693839-4736-1-git-send-email-paul.durrant@citrix.com>
	<543BC3C3.7090800@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0110FFD38@AMSPEX01CL01.citrite.net>
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD0110FFD38@AMSPEX01CL01.citrite.net>
Subject: Re: [win-pv-devel] [PATCH] Fix heap corruption in co-installer
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 13/10/2014 14:23, Paul Durrant ha scritto:
>> -----Original Message-----
>> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
>> bounces@lists.xenproject.org] On Behalf Of Fabio Fantoni
>> Sent: 13 October 2014 13:21
>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>> Subject: Re: [win-pv-devel] [PATCH] Fix heap corruption in co-installer
>>
>> Il 07/10/2014 16:57, Paul Durrant ha scritto:
>>> The co-installer was corrupting its heap by trying to free a pointer after
>>> incrementing it from its original value.
>>>
>>> Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
>> I saw that this patch is still not in repository, may have problems and
>> should be tested before?
> Sorry. My mistake. I had neglected to push after applying. It's there now.
>
>> It should solves xenbus upgrade problem, right?
>>
> Yes, it should.
>
>    Paul

Thanks for patch and reply.
I did new xenbus build and tested it.
On W 8.1 where I not tried previous update new xenbus installed successfull.
On W7 where I tested previous xenbus update failed now still fails and I 
also can't unistall it from control panel->software because xenbus entry 
is nomore present.
Is there a way to solves?
Probably this patch solves completly the update problem and my problem 
with W7 domUs is caused by previous update failed where I had to do a xl 
destroy.

Thanks for any reply and sorry for my bad english.

>
>> Thanks for any reply.
>>
>>> ---
>>>    src/coinst/coinst.c | 10 ++++++----
>>>    src/xenbus.inf      |  2 +-
>>>    2 files changed, 7 insertions(+), 5 deletions(-)
>>>
>>> diff --git a/src/coinst/coinst.c b/src/coinst/coinst.c
>>> index 27d3211..59726f5 100644
>>> --- a/src/coinst/coinst.c
>>> +++ b/src/coinst/coinst.c
>>> @@ -1132,6 +1132,7 @@ MatchExistingDriver(
>>>        DWORD   MaxValueLength;
>>>        DWORD   DriverDescLength;
>>>        PTCHAR  DriverDesc = NULL;
>>> +    DWORD   ProductNameLength;
>>>        DWORD   Type;
>>>
>>>        // Look for a legacy platform device
>>> @@ -1213,16 +1214,17 @@ found:
>>>            goto fail9;
>>>        }
>>>
>>> +    ProductNameLength = (DWORD)strlen(PRODUCT_NAME_STR);
>>> +
>>>        if (strncmp(DriverDesc,
>>>                    PRODUCT_NAME_STR,
>>> -                strlen(PRODUCT_NAME_STR)) != 0) {
>>> +                ProductNameLength) != 0) {
>>>            SetLastError(ERROR_INSTALL_FAILURE);
>>>            goto fail10;
>>>        }
>>>
>>> -    DriverDesc += strlen(PRODUCT_NAME_STR);
>>> -
>>> -    if (strcmp(DriverDesc, " PV Bus") != 0) {
>>> +    if (strcmp(DriverDesc + ProductNameLength,
>>> +               " PV Bus") != 0) {
>>>            SetLastError(ERROR_INSTALL_FAILURE);
>>>            goto fail11;
>>>        }
>>> diff --git a/src/xenbus.inf b/src/xenbus.inf
>>> index fe01c79..544bb2c 100644
>>> --- a/src/xenbus.inf
>>> +++ b/src/xenbus.inf
>>> @@ -72,8 +72,8 @@
>> xenbus_coinst_@MAJOR_VERSION@_@MINOR_VERSION@_@MICRO_VER
>> SION@_@BUILD_NUMBER@.dll
>>>    CopyFiles=XenBus_Copyfiles
>>>
>>>    [XenBus_Inst.Services]
>>> -AddService=xenfilt,,XenFilt_Service,
>>>    AddService=xenbus,0x02,XenBus_Service,
>>> +AddService=xenfilt,,XenFilt_Service,
>>>
>>>    [XenBus_Service]
>>>    DisplayName=%XenBusDesc%
>>
>> _______________________________________________
>> 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 Oct 13 13:10:16 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 13 Oct 2014 13:10:16 +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 1XdfOC-0007Lq-5I; Mon, 13 Oct 2014 13:10:16 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <Paul.Durrant@citrix.com>) id 1XdfOA-0007Lg-Qy
	for win-pv-devel@lists.xenproject.org; Mon, 13 Oct 2014 13:10:15 +0000
Received: from [85.158.137.68:15906] by server-7.bemta-3.messagelabs.com id
	A5/2D-01084-53FCB345; Mon, 13 Oct 2014 13:10:13 +0000
X-Env-Sender: Paul.Durrant@citrix.com
X-Msg-Ref: server-9.tower-31.messagelabs.com!1413205812!9440421!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: 6.12.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 20362 invoked from network); 13 Oct 2014 13:10:12 -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;
	13 Oct 2014 13:10:12 -0000
X-IronPort-AV: E=Sophos;i="5.04,710,1406592000"; d="scan'208";a="25931153"
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: [win-pv-devel] [PATCH] Fix heap corruption in co-installer
Thread-Index: AQHP4j8JFFOfnCr6BUWgr0kOJuPWp5wt2mKAgAAh6FD//+ioAIAAJEJQ
Date: Mon, 13 Oct 2014 13:10:10 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD0110FFDE7@AMSPEX01CL01.citrite.net>
References: <1412693839-4736-1-git-send-email-paul.durrant@citrix.com>
	<543BC3C3.7090800@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0110FFD38@AMSPEX01CL01.citrite.net>
	<543BCCA0.5010806@m2r.biz>
In-Reply-To: <543BCCA0.5010806@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] [PATCH] Fix heap corruption in co-installer
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: 13 October 2014 13:59
> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> Subject: Re: [win-pv-devel] [PATCH] Fix heap corruption in co-installer
> 
> Il 13/10/2014 14:23, Paul Durrant ha scritto:
> >> -----Original Message-----
> >> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> >> bounces@lists.xenproject.org] On Behalf Of Fabio Fantoni
> >> Sent: 13 October 2014 13:21
> >> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >> Subject: Re: [win-pv-devel] [PATCH] Fix heap corruption in co-installer
> >>
> >> Il 07/10/2014 16:57, Paul Durrant ha scritto:
> >>> The co-installer was corrupting its heap by trying to free a pointer after
> >>> incrementing it from its original value.
> >>>
> >>> Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
> >> I saw that this patch is still not in repository, may have problems and
> >> should be tested before?
> > Sorry. My mistake. I had neglected to push after applying. It's there now.
> >
> >> It should solves xenbus upgrade problem, right?
> >>
> > Yes, it should.
> >
> >    Paul
> 
> Thanks for patch and reply.
> I did new xenbus build and tested it.
> On W 8.1 where I not tried previous update new xenbus installed successfull.
> On W7 where I tested previous xenbus update failed now still fails and I
> also can't unistall it from control panel->software because xenbus entry
> is nomore present.
> Is there a way to solves?

Can you see the Xen PV bus device in device manager? You should be able to force an uninstall of the driver by right-clicking and selecting 'uninstall'.

  Paul

> Probably this patch solves completly the update problem and my problem
> with W7 domUs is caused by previous update failed where I had to do a xl
> destroy.
> 
> Thanks for any reply and sorry for my bad english.
> 
> >
> >> Thanks for any reply.
> >>
> >>> ---
> >>>    src/coinst/coinst.c | 10 ++++++----
> >>>    src/xenbus.inf      |  2 +-
> >>>    2 files changed, 7 insertions(+), 5 deletions(-)
> >>>
> >>> diff --git a/src/coinst/coinst.c b/src/coinst/coinst.c
> >>> index 27d3211..59726f5 100644
> >>> --- a/src/coinst/coinst.c
> >>> +++ b/src/coinst/coinst.c
> >>> @@ -1132,6 +1132,7 @@ MatchExistingDriver(
> >>>        DWORD   MaxValueLength;
> >>>        DWORD   DriverDescLength;
> >>>        PTCHAR  DriverDesc = NULL;
> >>> +    DWORD   ProductNameLength;
> >>>        DWORD   Type;
> >>>
> >>>        // Look for a legacy platform device
> >>> @@ -1213,16 +1214,17 @@ found:
> >>>            goto fail9;
> >>>        }
> >>>
> >>> +    ProductNameLength = (DWORD)strlen(PRODUCT_NAME_STR);
> >>> +
> >>>        if (strncmp(DriverDesc,
> >>>                    PRODUCT_NAME_STR,
> >>> -                strlen(PRODUCT_NAME_STR)) != 0) {
> >>> +                ProductNameLength) != 0) {
> >>>            SetLastError(ERROR_INSTALL_FAILURE);
> >>>            goto fail10;
> >>>        }
> >>>
> >>> -    DriverDesc += strlen(PRODUCT_NAME_STR);
> >>> -
> >>> -    if (strcmp(DriverDesc, " PV Bus") != 0) {
> >>> +    if (strcmp(DriverDesc + ProductNameLength,
> >>> +               " PV Bus") != 0) {
> >>>            SetLastError(ERROR_INSTALL_FAILURE);
> >>>            goto fail11;
> >>>        }
> >>> diff --git a/src/xenbus.inf b/src/xenbus.inf
> >>> index fe01c79..544bb2c 100644
> >>> --- a/src/xenbus.inf
> >>> +++ b/src/xenbus.inf
> >>> @@ -72,8 +72,8 @@
> >>
> xenbus_coinst_@MAJOR_VERSION@_@MINOR_VERSION@_@MICRO_VER
> >> SION@_@BUILD_NUMBER@.dll
> >>>    CopyFiles=XenBus_Copyfiles
> >>>
> >>>    [XenBus_Inst.Services]
> >>> -AddService=xenfilt,,XenFilt_Service,
> >>>    AddService=xenbus,0x02,XenBus_Service,
> >>> +AddService=xenfilt,,XenFilt_Service,
> >>>
> >>>    [XenBus_Service]
> >>>    DisplayName=%XenBusDesc%
> >>
> >> _______________________________________________
> >> 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 Oct 13 13:10:16 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 13 Oct 2014 13:10:16 +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 1XdfOC-0007Lq-5I; Mon, 13 Oct 2014 13:10:16 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <Paul.Durrant@citrix.com>) id 1XdfOA-0007Lg-Qy
	for win-pv-devel@lists.xenproject.org; Mon, 13 Oct 2014 13:10:15 +0000
Received: from [85.158.137.68:15906] by server-7.bemta-3.messagelabs.com id
	A5/2D-01084-53FCB345; Mon, 13 Oct 2014 13:10:13 +0000
X-Env-Sender: Paul.Durrant@citrix.com
X-Msg-Ref: server-9.tower-31.messagelabs.com!1413205812!9440421!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: 6.12.2; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 20362 invoked from network); 13 Oct 2014 13:10:12 -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;
	13 Oct 2014 13:10:12 -0000
X-IronPort-AV: E=Sophos;i="5.04,710,1406592000"; d="scan'208";a="25931153"
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: [win-pv-devel] [PATCH] Fix heap corruption in co-installer
Thread-Index: AQHP4j8JFFOfnCr6BUWgr0kOJuPWp5wt2mKAgAAh6FD//+ioAIAAJEJQ
Date: Mon, 13 Oct 2014 13:10:10 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD0110FFDE7@AMSPEX01CL01.citrite.net>
References: <1412693839-4736-1-git-send-email-paul.durrant@citrix.com>
	<543BC3C3.7090800@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0110FFD38@AMSPEX01CL01.citrite.net>
	<543BCCA0.5010806@m2r.biz>
In-Reply-To: <543BCCA0.5010806@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] [PATCH] Fix heap corruption in co-installer
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: 13 October 2014 13:59
> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> Subject: Re: [win-pv-devel] [PATCH] Fix heap corruption in co-installer
> 
> Il 13/10/2014 14:23, Paul Durrant ha scritto:
> >> -----Original Message-----
> >> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> >> bounces@lists.xenproject.org] On Behalf Of Fabio Fantoni
> >> Sent: 13 October 2014 13:21
> >> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >> Subject: Re: [win-pv-devel] [PATCH] Fix heap corruption in co-installer
> >>
> >> Il 07/10/2014 16:57, Paul Durrant ha scritto:
> >>> The co-installer was corrupting its heap by trying to free a pointer after
> >>> incrementing it from its original value.
> >>>
> >>> Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
> >> I saw that this patch is still not in repository, may have problems and
> >> should be tested before?
> > Sorry. My mistake. I had neglected to push after applying. It's there now.
> >
> >> It should solves xenbus upgrade problem, right?
> >>
> > Yes, it should.
> >
> >    Paul
> 
> Thanks for patch and reply.
> I did new xenbus build and tested it.
> On W 8.1 where I not tried previous update new xenbus installed successfull.
> On W7 where I tested previous xenbus update failed now still fails and I
> also can't unistall it from control panel->software because xenbus entry
> is nomore present.
> Is there a way to solves?

Can you see the Xen PV bus device in device manager? You should be able to force an uninstall of the driver by right-clicking and selecting 'uninstall'.

  Paul

> Probably this patch solves completly the update problem and my problem
> with W7 domUs is caused by previous update failed where I had to do a xl
> destroy.
> 
> Thanks for any reply and sorry for my bad english.
> 
> >
> >> Thanks for any reply.
> >>
> >>> ---
> >>>    src/coinst/coinst.c | 10 ++++++----
> >>>    src/xenbus.inf      |  2 +-
> >>>    2 files changed, 7 insertions(+), 5 deletions(-)
> >>>
> >>> diff --git a/src/coinst/coinst.c b/src/coinst/coinst.c
> >>> index 27d3211..59726f5 100644
> >>> --- a/src/coinst/coinst.c
> >>> +++ b/src/coinst/coinst.c
> >>> @@ -1132,6 +1132,7 @@ MatchExistingDriver(
> >>>        DWORD   MaxValueLength;
> >>>        DWORD   DriverDescLength;
> >>>        PTCHAR  DriverDesc = NULL;
> >>> +    DWORD   ProductNameLength;
> >>>        DWORD   Type;
> >>>
> >>>        // Look for a legacy platform device
> >>> @@ -1213,16 +1214,17 @@ found:
> >>>            goto fail9;
> >>>        }
> >>>
> >>> +    ProductNameLength = (DWORD)strlen(PRODUCT_NAME_STR);
> >>> +
> >>>        if (strncmp(DriverDesc,
> >>>                    PRODUCT_NAME_STR,
> >>> -                strlen(PRODUCT_NAME_STR)) != 0) {
> >>> +                ProductNameLength) != 0) {
> >>>            SetLastError(ERROR_INSTALL_FAILURE);
> >>>            goto fail10;
> >>>        }
> >>>
> >>> -    DriverDesc += strlen(PRODUCT_NAME_STR);
> >>> -
> >>> -    if (strcmp(DriverDesc, " PV Bus") != 0) {
> >>> +    if (strcmp(DriverDesc + ProductNameLength,
> >>> +               " PV Bus") != 0) {
> >>>            SetLastError(ERROR_INSTALL_FAILURE);
> >>>            goto fail11;
> >>>        }
> >>> diff --git a/src/xenbus.inf b/src/xenbus.inf
> >>> index fe01c79..544bb2c 100644
> >>> --- a/src/xenbus.inf
> >>> +++ b/src/xenbus.inf
> >>> @@ -72,8 +72,8 @@
> >>
> xenbus_coinst_@MAJOR_VERSION@_@MINOR_VERSION@_@MICRO_VER
> >> SION@_@BUILD_NUMBER@.dll
> >>>    CopyFiles=XenBus_Copyfiles
> >>>
> >>>    [XenBus_Inst.Services]
> >>> -AddService=xenfilt,,XenFilt_Service,
> >>>    AddService=xenbus,0x02,XenBus_Service,
> >>> +AddService=xenfilt,,XenFilt_Service,
> >>>
> >>>    [XenBus_Service]
> >>>    DisplayName=%XenBusDesc%
> >>
> >> _______________________________________________
> >> 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 Oct 13 13:35:43 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 13 Oct 2014 13:35: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 1Xdfmp-0007vl-Cq; Mon, 13 Oct 2014 13:35:43 +0000
Received: from mail6.bemta4.messagelabs.com ([85.158.143.247])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1Xdfmo-0007va-0o
	for win-pv-devel@lists.xenproject.org; Mon, 13 Oct 2014 13:35:42 +0000
Received: from [85.158.143.35:48589] by server-3.bemta-4.messagelabs.com id
	58/A0-06192-D25DB345; Mon, 13 Oct 2014 13:35:41 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-5.tower-21.messagelabs.com!1413207339!12560029!1
X-Originating-IP: [209.85.212.171]
X-SpamReason: No, hits=2.2 required=7.0 tests=BIZ_TLD,BODY_RANDOM_LONG
X-StarScan-Received: 
X-StarScan-Version: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 27432 invoked from network); 13 Oct 2014 13:35:40 -0000
Received: from mail-wi0-f171.google.com (HELO mail-wi0-f171.google.com)
	(209.85.212.171)
	by server-5.tower-21.messagelabs.com with RC4-SHA encrypted SMTP;
	13 Oct 2014 13:35:40 -0000
Received: by mail-wi0-f171.google.com with SMTP id em10so7411662wid.10
	for <win-pv-devel@lists.xenproject.org>;
	Mon, 13 Oct 2014 06:35:39 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:message-id:date:from:user-agent:mime-version:to
	:subject:references:in-reply-to:content-type
	:content-transfer-encoding;
	bh=9d5p1HiJ2QlhKBaGUHxxHaI4IQN+sAJ1BhXTjrQYP0U=;
	b=O2p5bO7aHcCUPGHt+4o4zvt5OMzbujDql4E4O6hfZIkQPaJG5uKuqxTkAqjkHCCJeq
	cfD4jB8onDwCb5QGth8qkpZ1siGHzWyVw928TltTSb686gVp8rdTzYW8YYeRsy0aIm5W
	M+4vOALbuzE62VA43PLezu/SKwfxlp2d+syV2slQaxy1zj+cazOYQEhMvt9XAkb1MAKL
	FRQEiuzE4mjCplRdqpoioTxcWUXz6DX2vGwNgUgr1D5P8QI1KWHoCv+1kchpxLZzA/1Y
	i3zH5dDNTCHB8qPI9rTEYEKRk9mHcn10NC4KhRjT5oxZE4T+KkNILlq4aB+divX4eAb2
	KlpA==
X-Gm-Message-State: ALoCoQmf47HYzRy5E1X5x5LqziqqDEx4ibiPI9S7mwLIjSXVnty+cZaWXEQVb8Jrl5Kjmk/wBYWj
X-Received: by 10.194.158.71 with SMTP id ws7mr2384935wjb.110.1413207339633;
	Mon, 13 Oct 2014 06:35:39 -0700 (PDT)
Received: from [192.168.1.15] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by mx.google.com with ESMTPSA id q5sm16655353wja.49.2014.10.13.06.35.38
	for <multiple recipients>
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Mon, 13 Oct 2014 06:35:39 -0700 (PDT)
Message-ID: <543BD529.6030706@m2r.biz>
Date: Mon, 13 Oct 2014 15:35:37 +0200
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64;
	rv:24.0) Gecko/20100101 Thunderbird/24.6.0
MIME-Version: 1.0
To: Paul Durrant <Paul.Durrant@citrix.com>, 
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <1412693839-4736-1-git-send-email-paul.durrant@citrix.com>
	<543BC3C3.7090800@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0110FFD38@AMSPEX01CL01.citrite.net>
	<543BCCA0.5010806@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0110FFDE7@AMSPEX01CL01.citrite.net>
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD0110FFDE7@AMSPEX01CL01.citrite.net>
Subject: Re: [win-pv-devel] [PATCH] Fix heap corruption in co-installer
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 13/10/2014 15:10, Paul Durrant ha scritto:
>> -----Original Message-----
>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>> Sent: 13 October 2014 13:59
>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>> Subject: Re: [win-pv-devel] [PATCH] Fix heap corruption in co-installer
>>
>> Il 13/10/2014 14:23, Paul Durrant ha scritto:
>>>> -----Original Message-----
>>>> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
>>>> bounces@lists.xenproject.org] On Behalf Of Fabio Fantoni
>>>> Sent: 13 October 2014 13:21
>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>>>> Subject: Re: [win-pv-devel] [PATCH] Fix heap corruption in co-installer
>>>>
>>>> Il 07/10/2014 16:57, Paul Durrant ha scritto:
>>>>> The co-installer was corrupting its heap by trying to free a pointer after
>>>>> incrementing it from its original value.
>>>>>
>>>>> Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
>>>> I saw that this patch is still not in repository, may have problems and
>>>> should be tested before?
>>> Sorry. My mistake. I had neglected to push after applying. It's there now.
>>>
>>>> It should solves xenbus upgrade problem, right?
>>>>
>>> Yes, it should.
>>>
>>>     Paul
>> Thanks for patch and reply.
>> I did new xenbus build and tested it.
>> On W 8.1 where I not tried previous update new xenbus installed successfull.
>> On W7 where I tested previous xenbus update failed now still fails and I
>> also can't unistall it from control panel->software because xenbus entry
>> is nomore present.
>> Is there a way to solves?
> Can you see the Xen PV bus device in device manager? You should be able to force an uninstall of the driver by right-clicking and selecting 'uninstall'.
>
>    Paul

Uninstalled the device, rebooted, installed the new driver's build and 
rebooted.
Now seems all ok.
Seems also that new winpv drivers are better that old gplpv that if you 
have problems installing/upgrading pv driver windows have the blue 
screen at startup.
Thanks to you and all other people was/are working on this new winpv 
drivers.

>
>> Probably this patch solves completly the update problem and my problem
>> with W7 domUs is caused by previous update failed where I had to do a xl
>> destroy.
>>
>> Thanks for any reply and sorry for my bad english.
>>
>>>> Thanks for any reply.
>>>>
>>>>> ---
>>>>>     src/coinst/coinst.c | 10 ++++++----
>>>>>     src/xenbus.inf      |  2 +-
>>>>>     2 files changed, 7 insertions(+), 5 deletions(-)
>>>>>
>>>>> diff --git a/src/coinst/coinst.c b/src/coinst/coinst.c
>>>>> index 27d3211..59726f5 100644
>>>>> --- a/src/coinst/coinst.c
>>>>> +++ b/src/coinst/coinst.c
>>>>> @@ -1132,6 +1132,7 @@ MatchExistingDriver(
>>>>>         DWORD   MaxValueLength;
>>>>>         DWORD   DriverDescLength;
>>>>>         PTCHAR  DriverDesc = NULL;
>>>>> +    DWORD   ProductNameLength;
>>>>>         DWORD   Type;
>>>>>
>>>>>         // Look for a legacy platform device
>>>>> @@ -1213,16 +1214,17 @@ found:
>>>>>             goto fail9;
>>>>>         }
>>>>>
>>>>> +    ProductNameLength = (DWORD)strlen(PRODUCT_NAME_STR);
>>>>> +
>>>>>         if (strncmp(DriverDesc,
>>>>>                     PRODUCT_NAME_STR,
>>>>> -                strlen(PRODUCT_NAME_STR)) != 0) {
>>>>> +                ProductNameLength) != 0) {
>>>>>             SetLastError(ERROR_INSTALL_FAILURE);
>>>>>             goto fail10;
>>>>>         }
>>>>>
>>>>> -    DriverDesc += strlen(PRODUCT_NAME_STR);
>>>>> -
>>>>> -    if (strcmp(DriverDesc, " PV Bus") != 0) {
>>>>> +    if (strcmp(DriverDesc + ProductNameLength,
>>>>> +               " PV Bus") != 0) {
>>>>>             SetLastError(ERROR_INSTALL_FAILURE);
>>>>>             goto fail11;
>>>>>         }
>>>>> diff --git a/src/xenbus.inf b/src/xenbus.inf
>>>>> index fe01c79..544bb2c 100644
>>>>> --- a/src/xenbus.inf
>>>>> +++ b/src/xenbus.inf
>>>>> @@ -72,8 +72,8 @@
>> xenbus_coinst_@MAJOR_VERSION@_@MINOR_VERSION@_@MICRO_VER
>>>> SION@_@BUILD_NUMBER@.dll
>>>>>     CopyFiles=XenBus_Copyfiles
>>>>>
>>>>>     [XenBus_Inst.Services]
>>>>> -AddService=xenfilt,,XenFilt_Service,
>>>>>     AddService=xenbus,0x02,XenBus_Service,
>>>>> +AddService=xenfilt,,XenFilt_Service,
>>>>>
>>>>>     [XenBus_Service]
>>>>>     DisplayName=%XenBusDesc%
>>>> _______________________________________________
>>>> 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 Oct 13 13:35:43 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 13 Oct 2014 13:35: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 1Xdfmp-0007vl-Cq; Mon, 13 Oct 2014 13:35:43 +0000
Received: from mail6.bemta4.messagelabs.com ([85.158.143.247])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1Xdfmo-0007va-0o
	for win-pv-devel@lists.xenproject.org; Mon, 13 Oct 2014 13:35:42 +0000
Received: from [85.158.143.35:48589] by server-3.bemta-4.messagelabs.com id
	58/A0-06192-D25DB345; Mon, 13 Oct 2014 13:35:41 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-5.tower-21.messagelabs.com!1413207339!12560029!1
X-Originating-IP: [209.85.212.171]
X-SpamReason: No, hits=2.2 required=7.0 tests=BIZ_TLD,BODY_RANDOM_LONG
X-StarScan-Received: 
X-StarScan-Version: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 27432 invoked from network); 13 Oct 2014 13:35:40 -0000
Received: from mail-wi0-f171.google.com (HELO mail-wi0-f171.google.com)
	(209.85.212.171)
	by server-5.tower-21.messagelabs.com with RC4-SHA encrypted SMTP;
	13 Oct 2014 13:35:40 -0000
Received: by mail-wi0-f171.google.com with SMTP id em10so7411662wid.10
	for <win-pv-devel@lists.xenproject.org>;
	Mon, 13 Oct 2014 06:35:39 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:message-id:date:from:user-agent:mime-version:to
	:subject:references:in-reply-to:content-type
	:content-transfer-encoding;
	bh=9d5p1HiJ2QlhKBaGUHxxHaI4IQN+sAJ1BhXTjrQYP0U=;
	b=O2p5bO7aHcCUPGHt+4o4zvt5OMzbujDql4E4O6hfZIkQPaJG5uKuqxTkAqjkHCCJeq
	cfD4jB8onDwCb5QGth8qkpZ1siGHzWyVw928TltTSb686gVp8rdTzYW8YYeRsy0aIm5W
	M+4vOALbuzE62VA43PLezu/SKwfxlp2d+syV2slQaxy1zj+cazOYQEhMvt9XAkb1MAKL
	FRQEiuzE4mjCplRdqpoioTxcWUXz6DX2vGwNgUgr1D5P8QI1KWHoCv+1kchpxLZzA/1Y
	i3zH5dDNTCHB8qPI9rTEYEKRk9mHcn10NC4KhRjT5oxZE4T+KkNILlq4aB+divX4eAb2
	KlpA==
X-Gm-Message-State: ALoCoQmf47HYzRy5E1X5x5LqziqqDEx4ibiPI9S7mwLIjSXVnty+cZaWXEQVb8Jrl5Kjmk/wBYWj
X-Received: by 10.194.158.71 with SMTP id ws7mr2384935wjb.110.1413207339633;
	Mon, 13 Oct 2014 06:35:39 -0700 (PDT)
Received: from [192.168.1.15] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by mx.google.com with ESMTPSA id q5sm16655353wja.49.2014.10.13.06.35.38
	for <multiple recipients>
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Mon, 13 Oct 2014 06:35:39 -0700 (PDT)
Message-ID: <543BD529.6030706@m2r.biz>
Date: Mon, 13 Oct 2014 15:35:37 +0200
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64;
	rv:24.0) Gecko/20100101 Thunderbird/24.6.0
MIME-Version: 1.0
To: Paul Durrant <Paul.Durrant@citrix.com>, 
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <1412693839-4736-1-git-send-email-paul.durrant@citrix.com>
	<543BC3C3.7090800@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0110FFD38@AMSPEX01CL01.citrite.net>
	<543BCCA0.5010806@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0110FFDE7@AMSPEX01CL01.citrite.net>
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD0110FFDE7@AMSPEX01CL01.citrite.net>
Subject: Re: [win-pv-devel] [PATCH] Fix heap corruption in co-installer
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 13/10/2014 15:10, Paul Durrant ha scritto:
>> -----Original Message-----
>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>> Sent: 13 October 2014 13:59
>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>> Subject: Re: [win-pv-devel] [PATCH] Fix heap corruption in co-installer
>>
>> Il 13/10/2014 14:23, Paul Durrant ha scritto:
>>>> -----Original Message-----
>>>> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
>>>> bounces@lists.xenproject.org] On Behalf Of Fabio Fantoni
>>>> Sent: 13 October 2014 13:21
>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>>>> Subject: Re: [win-pv-devel] [PATCH] Fix heap corruption in co-installer
>>>>
>>>> Il 07/10/2014 16:57, Paul Durrant ha scritto:
>>>>> The co-installer was corrupting its heap by trying to free a pointer after
>>>>> incrementing it from its original value.
>>>>>
>>>>> Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
>>>> I saw that this patch is still not in repository, may have problems and
>>>> should be tested before?
>>> Sorry. My mistake. I had neglected to push after applying. It's there now.
>>>
>>>> It should solves xenbus upgrade problem, right?
>>>>
>>> Yes, it should.
>>>
>>>     Paul
>> Thanks for patch and reply.
>> I did new xenbus build and tested it.
>> On W 8.1 where I not tried previous update new xenbus installed successfull.
>> On W7 where I tested previous xenbus update failed now still fails and I
>> also can't unistall it from control panel->software because xenbus entry
>> is nomore present.
>> Is there a way to solves?
> Can you see the Xen PV bus device in device manager? You should be able to force an uninstall of the driver by right-clicking and selecting 'uninstall'.
>
>    Paul

Uninstalled the device, rebooted, installed the new driver's build and 
rebooted.
Now seems all ok.
Seems also that new winpv drivers are better that old gplpv that if you 
have problems installing/upgrading pv driver windows have the blue 
screen at startup.
Thanks to you and all other people was/are working on this new winpv 
drivers.

>
>> Probably this patch solves completly the update problem and my problem
>> with W7 domUs is caused by previous update failed where I had to do a xl
>> destroy.
>>
>> Thanks for any reply and sorry for my bad english.
>>
>>>> Thanks for any reply.
>>>>
>>>>> ---
>>>>>     src/coinst/coinst.c | 10 ++++++----
>>>>>     src/xenbus.inf      |  2 +-
>>>>>     2 files changed, 7 insertions(+), 5 deletions(-)
>>>>>
>>>>> diff --git a/src/coinst/coinst.c b/src/coinst/coinst.c
>>>>> index 27d3211..59726f5 100644
>>>>> --- a/src/coinst/coinst.c
>>>>> +++ b/src/coinst/coinst.c
>>>>> @@ -1132,6 +1132,7 @@ MatchExistingDriver(
>>>>>         DWORD   MaxValueLength;
>>>>>         DWORD   DriverDescLength;
>>>>>         PTCHAR  DriverDesc = NULL;
>>>>> +    DWORD   ProductNameLength;
>>>>>         DWORD   Type;
>>>>>
>>>>>         // Look for a legacy platform device
>>>>> @@ -1213,16 +1214,17 @@ found:
>>>>>             goto fail9;
>>>>>         }
>>>>>
>>>>> +    ProductNameLength = (DWORD)strlen(PRODUCT_NAME_STR);
>>>>> +
>>>>>         if (strncmp(DriverDesc,
>>>>>                     PRODUCT_NAME_STR,
>>>>> -                strlen(PRODUCT_NAME_STR)) != 0) {
>>>>> +                ProductNameLength) != 0) {
>>>>>             SetLastError(ERROR_INSTALL_FAILURE);
>>>>>             goto fail10;
>>>>>         }
>>>>>
>>>>> -    DriverDesc += strlen(PRODUCT_NAME_STR);
>>>>> -
>>>>> -    if (strcmp(DriverDesc, " PV Bus") != 0) {
>>>>> +    if (strcmp(DriverDesc + ProductNameLength,
>>>>> +               " PV Bus") != 0) {
>>>>>             SetLastError(ERROR_INSTALL_FAILURE);
>>>>>             goto fail11;
>>>>>         }
>>>>> diff --git a/src/xenbus.inf b/src/xenbus.inf
>>>>> index fe01c79..544bb2c 100644
>>>>> --- a/src/xenbus.inf
>>>>> +++ b/src/xenbus.inf
>>>>> @@ -72,8 +72,8 @@
>> xenbus_coinst_@MAJOR_VERSION@_@MINOR_VERSION@_@MICRO_VER
>>>> SION@_@BUILD_NUMBER@.dll
>>>>>     CopyFiles=XenBus_Copyfiles
>>>>>
>>>>>     [XenBus_Inst.Services]
>>>>> -AddService=xenfilt,,XenFilt_Service,
>>>>>     AddService=xenbus,0x02,XenBus_Service,
>>>>> +AddService=xenfilt,,XenFilt_Service,
>>>>>
>>>>>     [XenBus_Service]
>>>>>     DisplayName=%XenBusDesc%
>>>> _______________________________________________
>>>> 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 Oct 13 13:43:10 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 13 Oct 2014 13:43: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 1Xdfu2-00008C-Qp; Mon, 13 Oct 2014 13:43:10 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <Paul.Durrant@citrix.com>) id 1Xdfu1-00007w-OQ
	for win-pv-devel@lists.xenproject.org; Mon, 13 Oct 2014 13:43:09 +0000
Received: from [85.158.139.211:33014] by server-3.bemta-5.messagelabs.com id
	0C/16-00307-DE6DB345; Mon, 13 Oct 2014 13:43:09 +0000
X-Env-Sender: Paul.Durrant@citrix.com
X-Msg-Ref: server-6.tower-206.messagelabs.com!1413207787!10889818!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: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 25537 invoked from network); 13 Oct 2014 13:43:07 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-6.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	13 Oct 2014 13:43:07 -0000
X-IronPort-AV: E=Sophos;i="5.04,710,1406592000"; d="scan'208";a="25932594"
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: [win-pv-devel] [PATCH] Fix heap corruption in co-installer
Thread-Index: AQHP4j8JFFOfnCr6BUWgr0kOJuPWp5wt2mKAgAAh6FD//+ioAIAAJEJQ///l64CAACMcQA==
Date: Mon, 13 Oct 2014 13:43:06 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD0110FFEC3@AMSPEX01CL01.citrite.net>
References: <1412693839-4736-1-git-send-email-paul.durrant@citrix.com>
	<543BC3C3.7090800@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0110FFD38@AMSPEX01CL01.citrite.net>
	<543BCCA0.5010806@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0110FFDE7@AMSPEX01CL01.citrite.net>
	<543BD529.6030706@m2r.biz>
In-Reply-To: <543BD529.6030706@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] [PATCH] Fix heap corruption in co-installer
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: 13 October 2014 14:36
> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> Subject: Re: [win-pv-devel] [PATCH] Fix heap corruption in co-installer
> 
> Il 13/10/2014 15:10, Paul Durrant ha scritto:
> >> -----Original Message-----
> >> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >> Sent: 13 October 2014 13:59
> >> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >> Subject: Re: [win-pv-devel] [PATCH] Fix heap corruption in co-installer
> >>
> >> Il 13/10/2014 14:23, Paul Durrant ha scritto:
> >>>> -----Original Message-----
> >>>> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-
> devel-
> >>>> bounces@lists.xenproject.org] On Behalf Of Fabio Fantoni
> >>>> Sent: 13 October 2014 13:21
> >>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >>>> Subject: Re: [win-pv-devel] [PATCH] Fix heap corruption in co-installer
> >>>>
> >>>> Il 07/10/2014 16:57, Paul Durrant ha scritto:
> >>>>> The co-installer was corrupting its heap by trying to free a pointer
> after
> >>>>> incrementing it from its original value.
> >>>>>
> >>>>> Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
> >>>> I saw that this patch is still not in repository, may have problems and
> >>>> should be tested before?
> >>> Sorry. My mistake. I had neglected to push after applying. It's there now.
> >>>
> >>>> It should solves xenbus upgrade problem, right?
> >>>>
> >>> Yes, it should.
> >>>
> >>>     Paul
> >> Thanks for patch and reply.
> >> I did new xenbus build and tested it.
> >> On W 8.1 where I not tried previous update new xenbus installed
> successfull.
> >> On W7 where I tested previous xenbus update failed now still fails and I
> >> also can't unistall it from control panel->software because xenbus entry
> >> is nomore present.
> >> Is there a way to solves?
> > Can you see the Xen PV bus device in device manager? You should be able
> to force an uninstall of the driver by right-clicking and selecting 'uninstall'.
> >
> >    Paul
> 
> Uninstalled the device, rebooted, installed the new driver's build and
> rebooted.
> Now seems all ok.
> Seems also that new winpv drivers are better that old gplpv that if you
> have problems installing/upgrading pv driver windows have the blue
> screen at startup.
> Thanks to you and all other people was/are working on this new winpv
> drivers.

Fabio,

  Glad to help.

  Paul

> 
> >
> >> Probably this patch solves completly the update problem and my problem
> >> with W7 domUs is caused by previous update failed where I had to do a xl
> >> destroy.
> >>
> >> Thanks for any reply and sorry for my bad english.
> >>
> >>>> Thanks for any reply.
> >>>>
> >>>>> ---
> >>>>>     src/coinst/coinst.c | 10 ++++++----
> >>>>>     src/xenbus.inf      |  2 +-
> >>>>>     2 files changed, 7 insertions(+), 5 deletions(-)
> >>>>>
> >>>>> diff --git a/src/coinst/coinst.c b/src/coinst/coinst.c
> >>>>> index 27d3211..59726f5 100644
> >>>>> --- a/src/coinst/coinst.c
> >>>>> +++ b/src/coinst/coinst.c
> >>>>> @@ -1132,6 +1132,7 @@ MatchExistingDriver(
> >>>>>         DWORD   MaxValueLength;
> >>>>>         DWORD   DriverDescLength;
> >>>>>         PTCHAR  DriverDesc = NULL;
> >>>>> +    DWORD   ProductNameLength;
> >>>>>         DWORD   Type;
> >>>>>
> >>>>>         // Look for a legacy platform device
> >>>>> @@ -1213,16 +1214,17 @@ found:
> >>>>>             goto fail9;
> >>>>>         }
> >>>>>
> >>>>> +    ProductNameLength = (DWORD)strlen(PRODUCT_NAME_STR);
> >>>>> +
> >>>>>         if (strncmp(DriverDesc,
> >>>>>                     PRODUCT_NAME_STR,
> >>>>> -                strlen(PRODUCT_NAME_STR)) != 0) {
> >>>>> +                ProductNameLength) != 0) {
> >>>>>             SetLastError(ERROR_INSTALL_FAILURE);
> >>>>>             goto fail10;
> >>>>>         }
> >>>>>
> >>>>> -    DriverDesc += strlen(PRODUCT_NAME_STR);
> >>>>> -
> >>>>> -    if (strcmp(DriverDesc, " PV Bus") != 0) {
> >>>>> +    if (strcmp(DriverDesc + ProductNameLength,
> >>>>> +               " PV Bus") != 0) {
> >>>>>             SetLastError(ERROR_INSTALL_FAILURE);
> >>>>>             goto fail11;
> >>>>>         }
> >>>>> diff --git a/src/xenbus.inf b/src/xenbus.inf
> >>>>> index fe01c79..544bb2c 100644
> >>>>> --- a/src/xenbus.inf
> >>>>> +++ b/src/xenbus.inf
> >>>>> @@ -72,8 +72,8 @@
> >>
> xenbus_coinst_@MAJOR_VERSION@_@MINOR_VERSION@_@MICRO_VER
> >>>> SION@_@BUILD_NUMBER@.dll
> >>>>>     CopyFiles=XenBus_Copyfiles
> >>>>>
> >>>>>     [XenBus_Inst.Services]
> >>>>> -AddService=xenfilt,,XenFilt_Service,
> >>>>>     AddService=xenbus,0x02,XenBus_Service,
> >>>>> +AddService=xenfilt,,XenFilt_Service,
> >>>>>
> >>>>>     [XenBus_Service]
> >>>>>     DisplayName=%XenBusDesc%
> >>>> _______________________________________________
> >>>> 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 Oct 13 13:43:10 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 13 Oct 2014 13:43: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 1Xdfu2-00008C-Qp; Mon, 13 Oct 2014 13:43:10 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <Paul.Durrant@citrix.com>) id 1Xdfu1-00007w-OQ
	for win-pv-devel@lists.xenproject.org; Mon, 13 Oct 2014 13:43:09 +0000
Received: from [85.158.139.211:33014] by server-3.bemta-5.messagelabs.com id
	0C/16-00307-DE6DB345; Mon, 13 Oct 2014 13:43:09 +0000
X-Env-Sender: Paul.Durrant@citrix.com
X-Msg-Ref: server-6.tower-206.messagelabs.com!1413207787!10889818!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: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 25537 invoked from network); 13 Oct 2014 13:43:07 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-6.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	13 Oct 2014 13:43:07 -0000
X-IronPort-AV: E=Sophos;i="5.04,710,1406592000"; d="scan'208";a="25932594"
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: [win-pv-devel] [PATCH] Fix heap corruption in co-installer
Thread-Index: AQHP4j8JFFOfnCr6BUWgr0kOJuPWp5wt2mKAgAAh6FD//+ioAIAAJEJQ///l64CAACMcQA==
Date: Mon, 13 Oct 2014 13:43:06 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD0110FFEC3@AMSPEX01CL01.citrite.net>
References: <1412693839-4736-1-git-send-email-paul.durrant@citrix.com>
	<543BC3C3.7090800@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0110FFD38@AMSPEX01CL01.citrite.net>
	<543BCCA0.5010806@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0110FFDE7@AMSPEX01CL01.citrite.net>
	<543BD529.6030706@m2r.biz>
In-Reply-To: <543BD529.6030706@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] [PATCH] Fix heap corruption in co-installer
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: 13 October 2014 14:36
> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> Subject: Re: [win-pv-devel] [PATCH] Fix heap corruption in co-installer
> 
> Il 13/10/2014 15:10, Paul Durrant ha scritto:
> >> -----Original Message-----
> >> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >> Sent: 13 October 2014 13:59
> >> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >> Subject: Re: [win-pv-devel] [PATCH] Fix heap corruption in co-installer
> >>
> >> Il 13/10/2014 14:23, Paul Durrant ha scritto:
> >>>> -----Original Message-----
> >>>> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-
> devel-
> >>>> bounces@lists.xenproject.org] On Behalf Of Fabio Fantoni
> >>>> Sent: 13 October 2014 13:21
> >>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >>>> Subject: Re: [win-pv-devel] [PATCH] Fix heap corruption in co-installer
> >>>>
> >>>> Il 07/10/2014 16:57, Paul Durrant ha scritto:
> >>>>> The co-installer was corrupting its heap by trying to free a pointer
> after
> >>>>> incrementing it from its original value.
> >>>>>
> >>>>> Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
> >>>> I saw that this patch is still not in repository, may have problems and
> >>>> should be tested before?
> >>> Sorry. My mistake. I had neglected to push after applying. It's there now.
> >>>
> >>>> It should solves xenbus upgrade problem, right?
> >>>>
> >>> Yes, it should.
> >>>
> >>>     Paul
> >> Thanks for patch and reply.
> >> I did new xenbus build and tested it.
> >> On W 8.1 where I not tried previous update new xenbus installed
> successfull.
> >> On W7 where I tested previous xenbus update failed now still fails and I
> >> also can't unistall it from control panel->software because xenbus entry
> >> is nomore present.
> >> Is there a way to solves?
> > Can you see the Xen PV bus device in device manager? You should be able
> to force an uninstall of the driver by right-clicking and selecting 'uninstall'.
> >
> >    Paul
> 
> Uninstalled the device, rebooted, installed the new driver's build and
> rebooted.
> Now seems all ok.
> Seems also that new winpv drivers are better that old gplpv that if you
> have problems installing/upgrading pv driver windows have the blue
> screen at startup.
> Thanks to you and all other people was/are working on this new winpv
> drivers.

Fabio,

  Glad to help.

  Paul

> 
> >
> >> Probably this patch solves completly the update problem and my problem
> >> with W7 domUs is caused by previous update failed where I had to do a xl
> >> destroy.
> >>
> >> Thanks for any reply and sorry for my bad english.
> >>
> >>>> Thanks for any reply.
> >>>>
> >>>>> ---
> >>>>>     src/coinst/coinst.c | 10 ++++++----
> >>>>>     src/xenbus.inf      |  2 +-
> >>>>>     2 files changed, 7 insertions(+), 5 deletions(-)
> >>>>>
> >>>>> diff --git a/src/coinst/coinst.c b/src/coinst/coinst.c
> >>>>> index 27d3211..59726f5 100644
> >>>>> --- a/src/coinst/coinst.c
> >>>>> +++ b/src/coinst/coinst.c
> >>>>> @@ -1132,6 +1132,7 @@ MatchExistingDriver(
> >>>>>         DWORD   MaxValueLength;
> >>>>>         DWORD   DriverDescLength;
> >>>>>         PTCHAR  DriverDesc = NULL;
> >>>>> +    DWORD   ProductNameLength;
> >>>>>         DWORD   Type;
> >>>>>
> >>>>>         // Look for a legacy platform device
> >>>>> @@ -1213,16 +1214,17 @@ found:
> >>>>>             goto fail9;
> >>>>>         }
> >>>>>
> >>>>> +    ProductNameLength = (DWORD)strlen(PRODUCT_NAME_STR);
> >>>>> +
> >>>>>         if (strncmp(DriverDesc,
> >>>>>                     PRODUCT_NAME_STR,
> >>>>> -                strlen(PRODUCT_NAME_STR)) != 0) {
> >>>>> +                ProductNameLength) != 0) {
> >>>>>             SetLastError(ERROR_INSTALL_FAILURE);
> >>>>>             goto fail10;
> >>>>>         }
> >>>>>
> >>>>> -    DriverDesc += strlen(PRODUCT_NAME_STR);
> >>>>> -
> >>>>> -    if (strcmp(DriverDesc, " PV Bus") != 0) {
> >>>>> +    if (strcmp(DriverDesc + ProductNameLength,
> >>>>> +               " PV Bus") != 0) {
> >>>>>             SetLastError(ERROR_INSTALL_FAILURE);
> >>>>>             goto fail11;
> >>>>>         }
> >>>>> diff --git a/src/xenbus.inf b/src/xenbus.inf
> >>>>> index fe01c79..544bb2c 100644
> >>>>> --- a/src/xenbus.inf
> >>>>> +++ b/src/xenbus.inf
> >>>>> @@ -72,8 +72,8 @@
> >>
> xenbus_coinst_@MAJOR_VERSION@_@MINOR_VERSION@_@MICRO_VER
> >>>> SION@_@BUILD_NUMBER@.dll
> >>>>>     CopyFiles=XenBus_Copyfiles
> >>>>>
> >>>>>     [XenBus_Inst.Services]
> >>>>> -AddService=xenfilt,,XenFilt_Service,
> >>>>>     AddService=xenbus,0x02,XenBus_Service,
> >>>>> +AddService=xenfilt,,XenFilt_Service,
> >>>>>
> >>>>>     [XenBus_Service]
> >>>>>     DisplayName=%XenBusDesc%
> >>>> _______________________________________________
> >>>> 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 Oct 14 15:14:53 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 14 Oct 2014 15:14: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 1Xe3oL-0007hc-3n; Tue, 14 Oct 2014 15:14:53 +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 1Xe3oJ-0007hH-TS; Tue, 14 Oct 2014 15:14:52 +0000
Received: from [85.158.139.211:7248] by server-11.bemta-5.messagelabs.com id
	8D/EF-11011-9ED3D345; Tue, 14 Oct 2014 15:14:49 +0000
X-Env-Sender: lars.kurth.xen@gmail.com
X-Msg-Ref: server-16.tower-206.messagelabs.com!1413299688!8278513!1
X-Originating-IP: [209.85.215.48]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 4040 invoked from network); 14 Oct 2014 15:14:49 -0000
Received: from mail-la0-f48.google.com (HELO mail-la0-f48.google.com)
	(209.85.215.48)
	by server-16.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	14 Oct 2014 15:14:49 -0000
Received: by mail-la0-f48.google.com with SMTP id gi9so8594584lab.21
	for <multiple recipients>; Tue, 14 Oct 2014 08:14:48 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:content-type:content-transfer-encoding:subject:date:message-id
	:cc:to:mime-version;
	bh=jGLVh3gLCCEHqQ9+6P3LLzgGVtldPmL5xhXDBXfiBIE=;
	b=a88/HlaikE5yF54MgpbG/7VtsREzUFR4bw9CCK/6Ja47il5J/X7AcNDvUpXxEndNPR
	FIICWqIw3INN+oq8lx9hjmw/nv065dK8psPlUZ04Bh4/2YvaozUiUr11P8C+qbQ821A/
	CepyOFdHy/XrZ1HOJ8+Voioyay0v35WHurSEF5ysp4BCHno2raBVvG8HCUu9MCgSJtCB
	G7wHDt01aepLWFtNWViNfKTSgLXYgyNWJvhVkwfG5+TAgP6TSwo76upTt/m/Rhnx/9YF
	IKo5n7+ay29EeQSGfyMKYreu8t79XDSkouspCgplSxsCmi8FCkyBy0hgxVnEcmntRnRt
	NUDQ==
X-Received: by 10.112.144.228 with SMTP id sp4mr5936490lbb.58.1413299688438;
	Tue, 14 Oct 2014 08:14:48 -0700 (PDT)
Received: from [10.150.166.229] ([62.156.150.204])
	by mx.google.com with ESMTPSA id n7sm233676lae.11.2014.10.14.08.14.46
	for <multiple recipients>
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Tue, 14 Oct 2014 08:14:47 -0700 (PDT)
From: Lars Kurth <lars.kurth.xen@gmail.com>
Date: Tue, 14 Oct 2014 17:14:44 +0200
Message-Id: <9EEF637E-5177-42FE-BAB0-DB78C1D2568F@gmail.com>
To: xen-devel <xen-devel@lists.xenproject.org>,
	Xen API mailing list <xen-api@lists.xen.org>,
	mirageos-devel@lists.xenproject.org, Win-pv-devel@lists.xenproject.org
Mime-Version: 1.0 (Mac OS X Mail 7.3 \(1878.6\))
X-Mailer: Apple Mail (2.1878.6)
Cc: Russ Pavlicek <russell.pavlicek@xenproject.org>
Subject: [win-pv-devel] [Update] Location of next Xen Project Developer
	Summit /	User Summit
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="windows-1252"
Content-Transfer-Encoding: quoted-printable
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

Hi all,

a quick update on the location of next year=92s Developer / User summit. As=
 I mentioned earlier, LinuxCon US will be in Seattle Aug 17-19 and Linux Pl=
umbers will be hosted from Aug 19 - 21st in Seattle. =


I provisionally booked space with the Linux Foundation for the Xen Project =
from Aug 17-19. It seems that there was enough space after all. Which is go=
od, because it means there isn=92t really a clash with Linux Plumbers.

The final go/no-go decision will depend on cost and Advisory Board approval=
. =


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 Tue Oct 14 15:14:53 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 14 Oct 2014 15:14: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 1Xe3oL-0007hc-3n; Tue, 14 Oct 2014 15:14:53 +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 1Xe3oJ-0007hH-TS; Tue, 14 Oct 2014 15:14:52 +0000
Received: from [85.158.139.211:7248] by server-11.bemta-5.messagelabs.com id
	8D/EF-11011-9ED3D345; Tue, 14 Oct 2014 15:14:49 +0000
X-Env-Sender: lars.kurth.xen@gmail.com
X-Msg-Ref: server-16.tower-206.messagelabs.com!1413299688!8278513!1
X-Originating-IP: [209.85.215.48]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 4040 invoked from network); 14 Oct 2014 15:14:49 -0000
Received: from mail-la0-f48.google.com (HELO mail-la0-f48.google.com)
	(209.85.215.48)
	by server-16.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	14 Oct 2014 15:14:49 -0000
Received: by mail-la0-f48.google.com with SMTP id gi9so8594584lab.21
	for <multiple recipients>; Tue, 14 Oct 2014 08:14:48 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:content-type:content-transfer-encoding:subject:date:message-id
	:cc:to:mime-version;
	bh=jGLVh3gLCCEHqQ9+6P3LLzgGVtldPmL5xhXDBXfiBIE=;
	b=a88/HlaikE5yF54MgpbG/7VtsREzUFR4bw9CCK/6Ja47il5J/X7AcNDvUpXxEndNPR
	FIICWqIw3INN+oq8lx9hjmw/nv065dK8psPlUZ04Bh4/2YvaozUiUr11P8C+qbQ821A/
	CepyOFdHy/XrZ1HOJ8+Voioyay0v35WHurSEF5ysp4BCHno2raBVvG8HCUu9MCgSJtCB
	G7wHDt01aepLWFtNWViNfKTSgLXYgyNWJvhVkwfG5+TAgP6TSwo76upTt/m/Rhnx/9YF
	IKo5n7+ay29EeQSGfyMKYreu8t79XDSkouspCgplSxsCmi8FCkyBy0hgxVnEcmntRnRt
	NUDQ==
X-Received: by 10.112.144.228 with SMTP id sp4mr5936490lbb.58.1413299688438;
	Tue, 14 Oct 2014 08:14:48 -0700 (PDT)
Received: from [10.150.166.229] ([62.156.150.204])
	by mx.google.com with ESMTPSA id n7sm233676lae.11.2014.10.14.08.14.46
	for <multiple recipients>
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Tue, 14 Oct 2014 08:14:47 -0700 (PDT)
From: Lars Kurth <lars.kurth.xen@gmail.com>
Date: Tue, 14 Oct 2014 17:14:44 +0200
Message-Id: <9EEF637E-5177-42FE-BAB0-DB78C1D2568F@gmail.com>
To: xen-devel <xen-devel@lists.xenproject.org>,
	Xen API mailing list <xen-api@lists.xen.org>,
	mirageos-devel@lists.xenproject.org, Win-pv-devel@lists.xenproject.org
Mime-Version: 1.0 (Mac OS X Mail 7.3 \(1878.6\))
X-Mailer: Apple Mail (2.1878.6)
Cc: Russ Pavlicek <russell.pavlicek@xenproject.org>
Subject: [win-pv-devel] [Update] Location of next Xen Project Developer
	Summit /	User Summit
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="windows-1252"
Content-Transfer-Encoding: quoted-printable
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

Hi all,

a quick update on the location of next year=92s Developer / User summit. As=
 I mentioned earlier, LinuxCon US will be in Seattle Aug 17-19 and Linux Pl=
umbers will be hosted from Aug 19 - 21st in Seattle. =


I provisionally booked space with the Linux Foundation for the Xen Project =
from Aug 17-19. It seems that there was enough space after all. Which is go=
od, because it means there isn=92t really a clash with Linux Plumbers.

The final go/no-go decision will depend on cost and Advisory Board approval=
. =


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 Oct 16 08:57:35 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 16 Oct 2014 08:57: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 1XegsJ-0002My-BU; Thu, 16 Oct 2014 08:57:35 +0000
Received: from mail6.bemta4.messagelabs.com ([85.158.143.247])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1XegsH-0002Mt-Cs
	for win-pv-devel@lists.xenproject.org; Thu, 16 Oct 2014 08:57:33 +0000
Received: from [85.158.143.35] by server-1.bemta-4.messagelabs.com id
	78/03-02952-C788F345; Thu, 16 Oct 2014 08:57:32 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-14.tower-21.messagelabs.com!1413449845!13331147!1
X-Originating-IP: [74.125.82.42]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 17400 invoked from network); 16 Oct 2014 08:57:25 -0000
Received: from mail-wg0-f42.google.com (HELO mail-wg0-f42.google.com)
	(74.125.82.42)
	by server-14.tower-21.messagelabs.com with RC4-SHA encrypted SMTP;
	16 Oct 2014 08:57:25 -0000
Received: by mail-wg0-f42.google.com with SMTP id z12so3167249wgg.25
	for <win-pv-devel@lists.xenproject.org>;
	Thu, 16 Oct 2014 01:57:24 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:message-id:date:from:user-agent:mime-version:to
	:cc:subject:content-type:content-transfer-encoding;
	bh=3S4lvteNbf2uPNUpcUwxgv7qRo+nqxOEA4L7lAuJeH4=;
	b=hHEUux5jaL8R2TW7gwN+feC4egpELPvyv7ySi6Y7Oul/+YgC+tnbxgbKf3FVrpvum/
	61UfDjavFcmpV8aof1zAlX/SY5NcuwepwMDb2FkQxjibS2y6rtlHOujPIRX7V2IQNo1/
	cfP1eEQwr2PQB20HPVc7Y0cp38PC7877rLtjC0s3/UpuvswUMqzF4oSOsqhuQsSsI13+
	D77Y7B5UR0AMgWdP85OVnChTlKaJHKlfFRllYCqwoaaeJa/Qmyd0Xmmp29oEmFNp8maO
	zGnApKX14+cvUxvKjqpxy5wpGFxTKn1HkW3YG0hKjcx1JAFRhdf9xrtZ4bM2VFAIWzqe
	bN+A==
X-Gm-Message-State: ALoCoQnNugUfI6jaKw59hjZgvpZFc4OFe4isaHcC4DEiqPkDP7Qd+yKyU3MqdUOdAdpnG+APFoC+
X-Received: by 10.194.206.106 with SMTP id ln10mr17597157wjc.90.1413449844733; 
	Thu, 16 Oct 2014 01:57:24 -0700 (PDT)
Received: from [192.168.1.15] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by mx.google.com with ESMTPSA id cx1sm1212022wib.1.2014.10.16.01.57.23
	for <multiple recipients>
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Thu, 16 Oct 2014 01:57:24 -0700 (PDT)
Message-ID: <543F887B.5030500@m2r.biz>
Date: Thu, 16 Oct 2014 10:57:31 +0200
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64;
	rv:24.0) Gecko/20100101 Thunderbird/24.6.0
MIME-Version: 1.0
To: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] Blue screen on xenvif install
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

Today I tried to install new winpv driver to other 3 windows 7 pro 64 
bit domUs.
Days ago I installed them successful on one windows 7 pro 64 bit and one 
windows 8.1 enterprise 64 bit.
On first domUs I tried to install them today I installed xenbus and 
xenvbd successful but on xenvif install windows crashed with blue 
screen, if I saw it correctly was an kernel in-page error or something 
similar.
After reboot I retried to install xenvif but now always fails.

If you need more tests/informations 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 Thu Oct 16 08:57:35 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 16 Oct 2014 08:57: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 1XegsJ-0002My-BU; Thu, 16 Oct 2014 08:57:35 +0000
Received: from mail6.bemta4.messagelabs.com ([85.158.143.247])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1XegsH-0002Mt-Cs
	for win-pv-devel@lists.xenproject.org; Thu, 16 Oct 2014 08:57:33 +0000
Received: from [85.158.143.35] by server-1.bemta-4.messagelabs.com id
	78/03-02952-C788F345; Thu, 16 Oct 2014 08:57:32 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-14.tower-21.messagelabs.com!1413449845!13331147!1
X-Originating-IP: [74.125.82.42]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 17400 invoked from network); 16 Oct 2014 08:57:25 -0000
Received: from mail-wg0-f42.google.com (HELO mail-wg0-f42.google.com)
	(74.125.82.42)
	by server-14.tower-21.messagelabs.com with RC4-SHA encrypted SMTP;
	16 Oct 2014 08:57:25 -0000
Received: by mail-wg0-f42.google.com with SMTP id z12so3167249wgg.25
	for <win-pv-devel@lists.xenproject.org>;
	Thu, 16 Oct 2014 01:57:24 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:message-id:date:from:user-agent:mime-version:to
	:cc:subject:content-type:content-transfer-encoding;
	bh=3S4lvteNbf2uPNUpcUwxgv7qRo+nqxOEA4L7lAuJeH4=;
	b=hHEUux5jaL8R2TW7gwN+feC4egpELPvyv7ySi6Y7Oul/+YgC+tnbxgbKf3FVrpvum/
	61UfDjavFcmpV8aof1zAlX/SY5NcuwepwMDb2FkQxjibS2y6rtlHOujPIRX7V2IQNo1/
	cfP1eEQwr2PQB20HPVc7Y0cp38PC7877rLtjC0s3/UpuvswUMqzF4oSOsqhuQsSsI13+
	D77Y7B5UR0AMgWdP85OVnChTlKaJHKlfFRllYCqwoaaeJa/Qmyd0Xmmp29oEmFNp8maO
	zGnApKX14+cvUxvKjqpxy5wpGFxTKn1HkW3YG0hKjcx1JAFRhdf9xrtZ4bM2VFAIWzqe
	bN+A==
X-Gm-Message-State: ALoCoQnNugUfI6jaKw59hjZgvpZFc4OFe4isaHcC4DEiqPkDP7Qd+yKyU3MqdUOdAdpnG+APFoC+
X-Received: by 10.194.206.106 with SMTP id ln10mr17597157wjc.90.1413449844733; 
	Thu, 16 Oct 2014 01:57:24 -0700 (PDT)
Received: from [192.168.1.15] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by mx.google.com with ESMTPSA id cx1sm1212022wib.1.2014.10.16.01.57.23
	for <multiple recipients>
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Thu, 16 Oct 2014 01:57:24 -0700 (PDT)
Message-ID: <543F887B.5030500@m2r.biz>
Date: Thu, 16 Oct 2014 10:57:31 +0200
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64;
	rv:24.0) Gecko/20100101 Thunderbird/24.6.0
MIME-Version: 1.0
To: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] Blue screen on xenvif install
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

Today I tried to install new winpv driver to other 3 windows 7 pro 64 
bit domUs.
Days ago I installed them successful on one windows 7 pro 64 bit and one 
windows 8.1 enterprise 64 bit.
On first domUs I tried to install them today I installed xenbus and 
xenvbd successful but on xenvif install windows crashed with blue 
screen, if I saw it correctly was an kernel in-page error or something 
similar.
After reboot I retried to install xenvif but now always fails.

If you need more tests/informations 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 Thu Oct 16 08:59:54 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 16 Oct 2014 08:59:54 +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 1XeguY-0002bl-9Z; Thu, 16 Oct 2014 08:59:54 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <Paul.Durrant@citrix.com>) id 1XeguW-0002bT-MK
	for win-pv-devel@lists.xenproject.org; Thu, 16 Oct 2014 08:59:52 +0000
Received: from [85.158.139.211:33845] by server-6.bemta-5.messagelabs.com id
	85/E1-06284-7098F345; Thu, 16 Oct 2014 08:59:51 +0000
X-Env-Sender: Paul.Durrant@citrix.com
X-Msg-Ref: server-3.tower-206.messagelabs.com!1413449991!3951142!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: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 19347 invoked from network); 16 Oct 2014 08:59:51 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-3.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	16 Oct 2014 08:59:51 -0000
X-IronPort-AV: E=Sophos;i="5.04,731,1406592000"; d="scan'208";a="26009085"
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: Blue screen on xenvif install
Thread-Index: AQHP6R88TE2eCcEtSU6laq0K5grY5pwybJlQ
Date: Thu, 16 Oct 2014 08:59:50 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD0111050FF@AMSPEX01CL01.citrite.net>
References: <543F887B.5030500@m2r.biz>
In-Reply-To: <543F887B.5030500@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] Blue screen on xenvif install
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: 16 October 2014 09:58
> To: win-pv-devel@lists.xenproject.org
> Cc: Paul Durrant
> Subject: Blue screen on xenvif install
> 
> Today I tried to install new winpv driver to other 3 windows 7 pro 64
> bit domUs.
> Days ago I installed them successful on one windows 7 pro 64 bit and one
> windows 8.1 enterprise 64 bit.
> On first domUs I tried to install them today I installed xenbus and
> xenvbd successful but on xenvif install windows crashed with blue
> screen, if I saw it correctly was an kernel in-page error or something
> similar.
> After reboot I retried to install xenvif but now always fails.
>

Sounds odd. Do you have a MEMORY.DMP?

  Paul
 
> If you need more tests/informations 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 Thu Oct 16 08:59:54 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 16 Oct 2014 08:59:54 +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 1XeguY-0002bl-9Z; Thu, 16 Oct 2014 08:59:54 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <Paul.Durrant@citrix.com>) id 1XeguW-0002bT-MK
	for win-pv-devel@lists.xenproject.org; Thu, 16 Oct 2014 08:59:52 +0000
Received: from [85.158.139.211:33845] by server-6.bemta-5.messagelabs.com id
	85/E1-06284-7098F345; Thu, 16 Oct 2014 08:59:51 +0000
X-Env-Sender: Paul.Durrant@citrix.com
X-Msg-Ref: server-3.tower-206.messagelabs.com!1413449991!3951142!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: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 19347 invoked from network); 16 Oct 2014 08:59:51 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-3.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	16 Oct 2014 08:59:51 -0000
X-IronPort-AV: E=Sophos;i="5.04,731,1406592000"; d="scan'208";a="26009085"
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: Blue screen on xenvif install
Thread-Index: AQHP6R88TE2eCcEtSU6laq0K5grY5pwybJlQ
Date: Thu, 16 Oct 2014 08:59:50 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD0111050FF@AMSPEX01CL01.citrite.net>
References: <543F887B.5030500@m2r.biz>
In-Reply-To: <543F887B.5030500@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] Blue screen on xenvif install
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: 16 October 2014 09:58
> To: win-pv-devel@lists.xenproject.org
> Cc: Paul Durrant
> Subject: Blue screen on xenvif install
> 
> Today I tried to install new winpv driver to other 3 windows 7 pro 64
> bit domUs.
> Days ago I installed them successful on one windows 7 pro 64 bit and one
> windows 8.1 enterprise 64 bit.
> On first domUs I tried to install them today I installed xenbus and
> xenvbd successful but on xenvif install windows crashed with blue
> screen, if I saw it correctly was an kernel in-page error or something
> similar.
> After reboot I retried to install xenvif but now always fails.
>

Sounds odd. Do you have a MEMORY.DMP?

  Paul
 
> If you need more tests/informations 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 Thu Oct 16 09:34:33 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 16 Oct 2014 09:34: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 1XehS5-0004KL-1G; Thu, 16 Oct 2014 09:34:33 +0000
Received: from mail6.bemta4.messagelabs.com ([85.158.143.247])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1XehS3-0004KD-EU
	for win-pv-devel@lists.xenproject.org; Thu, 16 Oct 2014 09:34:31 +0000
Received: from [85.158.143.35] by server-1.bemta-4.messagelabs.com id
	2B/E8-02952-6219F345; Thu, 16 Oct 2014 09:34:30 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-15.tower-21.messagelabs.com!1413452069!12008605!1
X-Originating-IP: [209.85.212.173]
X-SpamReason: No, hits=1.7 required=7.0 tests=BIZ_TLD
X-StarScan-Received: 
X-StarScan-Version: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 29818 invoked from network); 16 Oct 2014 09:34:29 -0000
Received: from mail-wi0-f173.google.com (HELO mail-wi0-f173.google.com)
	(209.85.212.173)
	by server-15.tower-21.messagelabs.com with RC4-SHA encrypted SMTP;
	16 Oct 2014 09:34:29 -0000
Received: by mail-wi0-f173.google.com with SMTP id fb4so937297wid.12
	for <win-pv-devel@lists.xenproject.org>;
	Thu, 16 Oct 2014 02:34:29 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:message-id:date:from:user-agent:mime-version:to
	:subject:references:in-reply-to:content-type
	:content-transfer-encoding;
	bh=uhJ1eO+2zQT+hygpteE3hCcUleLgVX68TUb8ABf+kKw=;
	b=cyXBU9XVREsWhJAp0Qwo/rt6ck1cThHZE7gpXO/4LZiBDjkjPj0588pTHGpsHTpSlk
	QqsBlVnikU0a7+Y7CVm0RdNED2efRp9V7lbjH4ocarFXCJ0EVcdMEO/s1jw7g40izMrN
	CoH7IN1/gQ/FfDKmLu2HHiG0AAricHk/aK9Gpmx7Eap13w1u+b1eagfNPPMqn2PmEfYH
	hxODp2n6vqbfsW6O1goJsc7JsLz5RecuF7P/3Ao1rhWOV7hffYKrH/s8GyY+5LW0fzhk
	KvpPBIYoFHMowiCJlmtvVEW5L+bdM9wRxLw3/wxkfTUmSj+q8CWsgyBsSFhXaagVgbJH
	SkOQ==
X-Gm-Message-State: ALoCoQlZeBE1Fdj23r0J0hXteUjq1LSeTjB643NJVKto6OvKMU9lE4uXtZ4KmfFVbNOp7xL4aCqp
X-Received: by 10.194.222.200 with SMTP id qo8mr323337wjc.56.1413452069445;
	Thu, 16 Oct 2014 02:34:29 -0700 (PDT)
Received: from [192.168.1.15] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by mx.google.com with ESMTPSA id
	w10sm26763415wje.10.2014.10.16.02.34.27 for <multiple recipients>
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Thu, 16 Oct 2014 02:34:28 -0700 (PDT)
Message-ID: <543F912C.8000504@m2r.biz>
Date: Thu, 16 Oct 2014 11:34:36 +0200
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64;
	rv:24.0) Gecko/20100101 Thunderbird/24.6.0
MIME-Version: 1.0
To: Paul Durrant <Paul.Durrant@citrix.com>, 
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <543F887B.5030500@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111050FF@AMSPEX01CL01.citrite.net>
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD0111050FF@AMSPEX01CL01.citrite.net>
Subject: Re: [win-pv-devel] Blue screen on xenvif install
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 16/10/2014 10:59, Paul Durrant ha scritto:
>> -----Original Message-----
>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>> Sent: 16 October 2014 09:58
>> To: win-pv-devel@lists.xenproject.org
>> Cc: Paul Durrant
>> Subject: Blue screen on xenvif install
>>
>> Today I tried to install new winpv driver to other 3 windows 7 pro 64
>> bit domUs.
>> Days ago I installed them successful on one windows 7 pro 64 bit and one
>> windows 8.1 enterprise 64 bit.
>> On first domUs I tried to install them today I installed xenbus and
>> xenvbd successful but on xenvif install windows crashed with blue
>> screen, if I saw it correctly was an kernel in-page error or something
>> similar.
>> After reboot I retried to install xenvif but now always fails.
>>
> Sounds odd. Do you have a MEMORY.DMP?
>
>    Paul

Windows is setted to write dump of kernel memory on system error but 
%systemroot%\memory.dmp is missed :(
I also checked the windows events log but I found only kernel-power as 
critical that seems not contains useful data.

I found probably useful data in xl dmesg (I copied all below from domU 
start to xen bug):
> (d98) HVM Loader
> (d98) Detected Xen v4.5-unstable
> (d98) Xenbus rings @0xfeffc000, event channel 1
> (d98) System requested SeaBIOS
> (d98) CPU speed is 2660 MHz
> (d98) Relocating guest memory for lowmem MMIO space disabled
> (XEN) irq.c:270: Dom98 PCI link 0 changed 0 -> 5
> (d98) PCI-ISA link 0 routed to IRQ5
> (XEN) irq.c:270: Dom98 PCI link 1 changed 0 -> 10
> (d98) PCI-ISA link 1 routed to IRQ10
> (XEN) irq.c:270: Dom98 PCI link 2 changed 0 -> 11
> (d98) PCI-ISA link 2 routed to IRQ11
> (XEN) irq.c:270: Dom98 PCI link 3 changed 0 -> 5
> (d98) PCI-ISA link 3 routed to IRQ5
> (d98) pci dev 01:3 INTA->IRQ10
> (d98) pci dev 02:0 INTA->IRQ11
> (d98) pci dev 03:0 INTA->IRQ5
> (d98) pci dev 04:0 INTA->IRQ5
> (d98) pci dev 05:0 INTA->IRQ10
> (d98) pci dev 06:0 INTA->IRQ11
> (d98) pci dev 1d:0 INTA->IRQ10
> (d98) pci dev 1d:1 INTB->IRQ11
> (d98) pci dev 1d:2 INTC->IRQ5
> (d98) pci dev 1d:7 INTD->IRQ5
> (d98) No RAM in high memory; setting high_mem resource base to 100000000
> (d98) pci dev 05:0 bar 10 size 004000000: 0f0000000
> (d98) pci dev 05:0 bar 14 size 004000000: 0f4000000
> (d98) pci dev 02:0 bar 14 size 001000000: 0f8000008
> (d98) pci dev 06:0 bar 30 size 000040000: 0f9000000
> (d98) pci dev 05:0 bar 30 size 000010000: 0f9040000
> (d98) pci dev 03:0 bar 10 size 000004000: 0f9050000
> (d98) pci dev 05:0 bar 18 size 000002000: 0f9054000
> (d98) pci dev 04:0 bar 14 size 000001000: 0f9056000
> (d98) pci dev 1d:7 bar 10 size 000001000: 0f9057000
> (d98) pci dev 02:0 bar 10 size 000000100: 00000c001
> (d98) pci dev 06:0 bar 10 size 000000100: 00000c101
> (d98) pci dev 06:0 bar 14 size 000000100: 0f9058000
> (d98) pci dev 04:0 bar 10 size 000000020: 00000c201
> (d98) pci dev 05:0 bar 1c size 000000020: 00000c221
> (d98) pci dev 1d:0 bar 20 size 000000020: 00000c241
> (d98) pci dev 1d:1 bar 20 size 000000020: 00000c261
> (d98) pci dev 1d:2 bar 20 size 000000020: 00000c281
> (d98) pci dev 01:1 bar 20 size 000000010: 00000c2a1
> (d98) Multiprocessor initialisation:
> (d98)  - CPU0 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8] ... 
> done.
> (d98)  - CPU1 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8] ... 
> done.
> (d98) Testing HVM environment:
> (d98)  - REP INSB across page boundaries ... passed
> (d98)  - GS base MSRs and SWAPGS ... passed
> (d98) Passed 2 of 2 tests
> (d98) Writing SMBIOS tables ...
> (d98) Loading SeaBIOS ...
> (d98) Creating MP tables ...
> (d98) Loading ACPI ...
> (d98) S3 disabled
> (d98) S4 disabled
> (d98) vm86 TSS at fc00a100
> (d98) BIOS map:
> (d98)  10000-100d3: Scratch space
> (d98)  c0000-fffff: Main BIOS
> (d98) E820 table:
> (d98)  [00]: 00000000:00000000 - 00000000:000a0000: RAM
> (d98)  HOLE: 00000000:000a0000 - 00000000:000c0000
> (d98)  [01]: 00000000:000c0000 - 00000000:00100000: RESERVED
> (d98)  [02]: 00000000:00100000 - 00000000:78000000: RAM
> (d98)  HOLE: 00000000:78000000 - 00000000:fc000000
> (d98)  [03]: 00000000:fc000000 - 00000001:00000000: RESERVED
> (d98) Invoking SeaBIOS ...
> (d98) SeaBIOS (version 
> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
> (d98)
> (d98) Found Xen hypervisor signature at 40000100
> (d98) Running on QEMU (i440fx)
> (d98) xen: copy e820...
> (d98) Relocating init from 0x000df619 to 0x77fae600 (size 71995)
> (d98) CPU Mhz=2660
> (d98) Found 13 PCI devices (max PCI bus is 00)
> (d98) Allocated Xen hypercall page at 77fff000
> (d98) Detected Xen v4.5-unstable
> (d98) xen: copy BIOS tables...
> (d98) Copying SMBIOS entry point from 0x00010010 to 0x000f0f40
> (d98) Copying MPTABLE from 0xfc001170/fc001180 to 0x000f0e40
> (d98) Copying PIR from 0x00010030 to 0x000f0dc0
> (d98) Copying ACPI RSDP from 0x000100b0 to 0x000f0d90
> (d98) Using pmtimer, ioport 0xb008
> (d98) Scan for VGA option rom
> (d98) Running option rom at c000:0003
> (XEN) stdvga.c:147:d98v0 entering stdvga and caching modes
> (d98) pmm call arg1=0
> (d98) Turning on vga text mode console
> (d98) SeaBIOS (version 
> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
> (d98) Machine UUID f4cdeb74-0db1-4748-948d-42579a494120
> (d98) EHCI init on dev 00:1d.7 (regs=0xf9057020)
> (d98) Found 0 lpt ports
> (d98) Found 0 serial ports
> (d98) ATA controller 1 at 1f0/3f4/0 (irq 14 dev 9)
> (d98) ATA controller 2 at 170/374/0 (irq 15 dev 9)
> (d98) ata0-0: QEMU HARDDISK ATA-7 Hard-Disk (40720 MiBytes)
> (d98) Searching bootorder for: /pci@i0cf8/*@1,1/drive@0/disk@0
> (d98) DVD/CD [ata0-1: QEMU DVD-ROM ATAPI-4 DVD/CD]
> (d98) Searching bootorder for: /pci@i0cf8/*@1,1/drive@0/disk@1
> (d98) UHCI init on dev 00:1d.0 (io=c240)
> (d98) UHCI init on dev 00:1d.1 (io=c260)
> (d98) UHCI init on dev 00:1d.2 (io=c280)
> (d98) PS2 keyboard initialized
> (d98) All threads complete.
> (d98) Scan for option roms
> (d98) Running option rom at c980:0003
> (d98) pmm call arg1=1
> (d98) pmm call arg1=0
> (d98) pmm call arg1=1
> (d98) pmm call arg1=0
> (d98) Searching bootorder for: /pci@i0cf8/*@6
> (d98)
> (d98) Press F12 for boot menu.
> (d98)
> (d98) Searching bootorder for: HALT
> (d98) drive 0x000f0d40: PCHS=16383/16/63 translation=lba 
> LCHS=1024/255/63 s=83394560
> (d98) Space available for UMB: ca800-ee800, f0000-f0ce0
> (d98) Returned 258048 bytes of ZoneHigh
> (d98) e820 map has 6 items:
> (d98)   0: 0000000000000000 - 000000000009fc00 = 1 RAM
> (d98)   1: 000000000009fc00 - 00000000000a0000 = 2 RESERVED
> (d98)   2: 00000000000f0000 - 0000000000100000 = 2 RESERVED
> (d98)   3: 0000000000100000 - 0000000077fff000 = 1 RAM
> (d98)   4: 0000000077fff000 - 0000000078000000 = 2 RESERVED
> (d98)   5: 00000000fc000000 - 0000000100000000 = 2 RESERVED
> (d98) enter handle_19:
> (d98)   NULL
> (d98) Booting from Hard Disk...
> (d98) Booting from 0000:7c00
> (XEN) d98: VIRIDIAN GUEST_OS_ID: vendor: 1 os: 4 major: 6 minor: 1 sp: 
> 1 build: 1db1
> (XEN) d98: VIRIDIAN HYPERCALL: enabled: 1 pfn: 3ffff
> (XEN) d98v0: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffe
> (XEN) d98v1: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffd
> (XEN) irq.c:270: Dom98 PCI link 0 changed 5 -> 0
> (XEN) irq.c:270: Dom98 PCI link 1 changed 10 -> 0
> (XEN) irq.c:270: Dom98 PCI link 2 changed 11 -> 0
> (XEN) irq.c:270: Dom98 PCI link 3 changed 5 -> 0
> (XEN) irq.c:380: Dom98 callback via changed to GSI 24
> (d98) XEN|BUGCHECK: ====>
> (d98) XEN|BUGCHECK: 0000007A: FFFFF6FC000171C8 FFFFFFFFC0000185 
> 000000001BD6A860 FFFF
> (d98) F80002E39000
> (d98) XEN|BUGCHECK: CONTEXT (FFFFF8800310E530):
> (d98) XEN|BUGCHECK: - GS = 002B
> (d98) XEN|BUGCHECK: - FS = 0053
> (d98) XEN|BUGCHECK: - ES = 002B
> (d98) XEN|BUGCHECK: - DS = 002B
> (d98) XEN|BUGCHECK: - SS = 0018
> (d98) XEN|BUGCHECK: - CS = 0010
> (d98) XEN|BUGCHECK: - EFLAGS = 00000086
> (d98) XEN|BUGCHECK: - RDI = 00000000000171C8
> (d98) XEN|BUGCHECK: - RSI = 00000000C0000185
> (d98) XEN|BUGCHECK: - RBX = 00000000038AC8F8
> (d98) XEN|BUGCHECK: - RDX = 0000000000000000
> (d98) XEN|BUGCHECK: - RCX = 000000000310E530
> (d98) XEN|BUGCHECK: - RAX = 000000002ECF4722
> (d98) XEN|BUGCHECK: - RBP = 000000001BD6A860
> (d98) XEN|BUGCHECK: - RIP = 00000000038A2A43
> (d98) XEN|BUGCHECK: - RSP = 000000000310E510
> (d98) XEN|BUGCHECK: - R8 = 0000000000000000
> (d98) XEN|BUGCHECK: - R9 = 0000000000000000
> (d98) XEN|BUGCHECK: - R10 = 0000000000000000
> (d98) XEN|BUGCHECK: - R11 = 0000000000000000
> (d98) XEN|BUGCHECK: - R12 = 000000000000007A
> (d98) XEN|BUGCHECK: - R13 = 0000000000000001
> (d98) XEN|BUGCHECK: - R14 = 0000000002E39000
> (d98) XEN|BUGCHECK: - R15 = 0000000002CBAC40
> (d98) XEN|BUGCHECK: STACK:
> (d98) XEN|BUGCHECK: 000000000310EA20: (0000000000000003 
> 00000000038A50F0 00000000038A
> (d98) 4860 000000000000007A) xen.sys + 00000000000049AC
> (d98) XEN|BUGCHECK: 000000000310EA70: (00000000038AD0D0 
> 0000000000000000 000000000000
> (d98) 0004 0000000002C83500) ntoskrnl.exe + 0000000000128585
> (d98) XEN|BUGCHECK: 000000000310EAA0: (00000000038AD0D0 
> 0000000002C83500 000000000000
> (d98) 000F 0000000001780660) ntoskrnl.exe + 0000000000167C0D
> (d98) XEN|BUGCHECK: 000000000310F170: (0000000003816470 
> 0000000002B4C8C1 000000000000
> (d98) 00FE 0000000000000000) ntoskrnl.exe + 0000000000075CC4
> (d98) XEN|BUGCHECK: 000000000310F1B0: (000000000000007A 
> 00000000000171C8 00000000C000
> (d98) 0185 000000001BD6A860) ntoskrnl.exe + 00000000000E8752
> (d98) XEN|BUGCHECK: 000000000310F290: (00000000038163B0 
> 000000000310F320 0000000002CB
> (d98) D540 00000000038163B0) ntoskrnl.exe + 000000000009C91F
> (d98) XEN|BUGCHECK: 000000000310F360: (0000000000000000 
> 0000000000000008 00000000FFFF
> (d98) FFFF 00000000003500F0) ntoskrnl.exe + 00000000000831B9
> (d98) XEN|BUGCHECK: 000000000310F4C0: (0000000000000008 
> 0000000002E39000 000000000000
> (d98) 0000 0000000000000000) ntoskrnl.exe + 0000000000073CEE
> (d98) XEN|BUGCHECK: 000000000310F658: (0000000002E5CFD5 
> 0000000000000000 0000000003EB
> (d98) 8710 00000000FFFFFFFF) ntoskrnl.exe + 000000000042C000

If you need more tests/informations 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 Thu Oct 16 09:34:33 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 16 Oct 2014 09:34: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 1XehS5-0004KL-1G; Thu, 16 Oct 2014 09:34:33 +0000
Received: from mail6.bemta4.messagelabs.com ([85.158.143.247])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1XehS3-0004KD-EU
	for win-pv-devel@lists.xenproject.org; Thu, 16 Oct 2014 09:34:31 +0000
Received: from [85.158.143.35] by server-1.bemta-4.messagelabs.com id
	2B/E8-02952-6219F345; Thu, 16 Oct 2014 09:34:30 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-15.tower-21.messagelabs.com!1413452069!12008605!1
X-Originating-IP: [209.85.212.173]
X-SpamReason: No, hits=1.7 required=7.0 tests=BIZ_TLD
X-StarScan-Received: 
X-StarScan-Version: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 29818 invoked from network); 16 Oct 2014 09:34:29 -0000
Received: from mail-wi0-f173.google.com (HELO mail-wi0-f173.google.com)
	(209.85.212.173)
	by server-15.tower-21.messagelabs.com with RC4-SHA encrypted SMTP;
	16 Oct 2014 09:34:29 -0000
Received: by mail-wi0-f173.google.com with SMTP id fb4so937297wid.12
	for <win-pv-devel@lists.xenproject.org>;
	Thu, 16 Oct 2014 02:34:29 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:message-id:date:from:user-agent:mime-version:to
	:subject:references:in-reply-to:content-type
	:content-transfer-encoding;
	bh=uhJ1eO+2zQT+hygpteE3hCcUleLgVX68TUb8ABf+kKw=;
	b=cyXBU9XVREsWhJAp0Qwo/rt6ck1cThHZE7gpXO/4LZiBDjkjPj0588pTHGpsHTpSlk
	QqsBlVnikU0a7+Y7CVm0RdNED2efRp9V7lbjH4ocarFXCJ0EVcdMEO/s1jw7g40izMrN
	CoH7IN1/gQ/FfDKmLu2HHiG0AAricHk/aK9Gpmx7Eap13w1u+b1eagfNPPMqn2PmEfYH
	hxODp2n6vqbfsW6O1goJsc7JsLz5RecuF7P/3Ao1rhWOV7hffYKrH/s8GyY+5LW0fzhk
	KvpPBIYoFHMowiCJlmtvVEW5L+bdM9wRxLw3/wxkfTUmSj+q8CWsgyBsSFhXaagVgbJH
	SkOQ==
X-Gm-Message-State: ALoCoQlZeBE1Fdj23r0J0hXteUjq1LSeTjB643NJVKto6OvKMU9lE4uXtZ4KmfFVbNOp7xL4aCqp
X-Received: by 10.194.222.200 with SMTP id qo8mr323337wjc.56.1413452069445;
	Thu, 16 Oct 2014 02:34:29 -0700 (PDT)
Received: from [192.168.1.15] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by mx.google.com with ESMTPSA id
	w10sm26763415wje.10.2014.10.16.02.34.27 for <multiple recipients>
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Thu, 16 Oct 2014 02:34:28 -0700 (PDT)
Message-ID: <543F912C.8000504@m2r.biz>
Date: Thu, 16 Oct 2014 11:34:36 +0200
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64;
	rv:24.0) Gecko/20100101 Thunderbird/24.6.0
MIME-Version: 1.0
To: Paul Durrant <Paul.Durrant@citrix.com>, 
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <543F887B.5030500@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111050FF@AMSPEX01CL01.citrite.net>
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD0111050FF@AMSPEX01CL01.citrite.net>
Subject: Re: [win-pv-devel] Blue screen on xenvif install
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 16/10/2014 10:59, Paul Durrant ha scritto:
>> -----Original Message-----
>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>> Sent: 16 October 2014 09:58
>> To: win-pv-devel@lists.xenproject.org
>> Cc: Paul Durrant
>> Subject: Blue screen on xenvif install
>>
>> Today I tried to install new winpv driver to other 3 windows 7 pro 64
>> bit domUs.
>> Days ago I installed them successful on one windows 7 pro 64 bit and one
>> windows 8.1 enterprise 64 bit.
>> On first domUs I tried to install them today I installed xenbus and
>> xenvbd successful but on xenvif install windows crashed with blue
>> screen, if I saw it correctly was an kernel in-page error or something
>> similar.
>> After reboot I retried to install xenvif but now always fails.
>>
> Sounds odd. Do you have a MEMORY.DMP?
>
>    Paul

Windows is setted to write dump of kernel memory on system error but 
%systemroot%\memory.dmp is missed :(
I also checked the windows events log but I found only kernel-power as 
critical that seems not contains useful data.

I found probably useful data in xl dmesg (I copied all below from domU 
start to xen bug):
> (d98) HVM Loader
> (d98) Detected Xen v4.5-unstable
> (d98) Xenbus rings @0xfeffc000, event channel 1
> (d98) System requested SeaBIOS
> (d98) CPU speed is 2660 MHz
> (d98) Relocating guest memory for lowmem MMIO space disabled
> (XEN) irq.c:270: Dom98 PCI link 0 changed 0 -> 5
> (d98) PCI-ISA link 0 routed to IRQ5
> (XEN) irq.c:270: Dom98 PCI link 1 changed 0 -> 10
> (d98) PCI-ISA link 1 routed to IRQ10
> (XEN) irq.c:270: Dom98 PCI link 2 changed 0 -> 11
> (d98) PCI-ISA link 2 routed to IRQ11
> (XEN) irq.c:270: Dom98 PCI link 3 changed 0 -> 5
> (d98) PCI-ISA link 3 routed to IRQ5
> (d98) pci dev 01:3 INTA->IRQ10
> (d98) pci dev 02:0 INTA->IRQ11
> (d98) pci dev 03:0 INTA->IRQ5
> (d98) pci dev 04:0 INTA->IRQ5
> (d98) pci dev 05:0 INTA->IRQ10
> (d98) pci dev 06:0 INTA->IRQ11
> (d98) pci dev 1d:0 INTA->IRQ10
> (d98) pci dev 1d:1 INTB->IRQ11
> (d98) pci dev 1d:2 INTC->IRQ5
> (d98) pci dev 1d:7 INTD->IRQ5
> (d98) No RAM in high memory; setting high_mem resource base to 100000000
> (d98) pci dev 05:0 bar 10 size 004000000: 0f0000000
> (d98) pci dev 05:0 bar 14 size 004000000: 0f4000000
> (d98) pci dev 02:0 bar 14 size 001000000: 0f8000008
> (d98) pci dev 06:0 bar 30 size 000040000: 0f9000000
> (d98) pci dev 05:0 bar 30 size 000010000: 0f9040000
> (d98) pci dev 03:0 bar 10 size 000004000: 0f9050000
> (d98) pci dev 05:0 bar 18 size 000002000: 0f9054000
> (d98) pci dev 04:0 bar 14 size 000001000: 0f9056000
> (d98) pci dev 1d:7 bar 10 size 000001000: 0f9057000
> (d98) pci dev 02:0 bar 10 size 000000100: 00000c001
> (d98) pci dev 06:0 bar 10 size 000000100: 00000c101
> (d98) pci dev 06:0 bar 14 size 000000100: 0f9058000
> (d98) pci dev 04:0 bar 10 size 000000020: 00000c201
> (d98) pci dev 05:0 bar 1c size 000000020: 00000c221
> (d98) pci dev 1d:0 bar 20 size 000000020: 00000c241
> (d98) pci dev 1d:1 bar 20 size 000000020: 00000c261
> (d98) pci dev 1d:2 bar 20 size 000000020: 00000c281
> (d98) pci dev 01:1 bar 20 size 000000010: 00000c2a1
> (d98) Multiprocessor initialisation:
> (d98)  - CPU0 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8] ... 
> done.
> (d98)  - CPU1 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8] ... 
> done.
> (d98) Testing HVM environment:
> (d98)  - REP INSB across page boundaries ... passed
> (d98)  - GS base MSRs and SWAPGS ... passed
> (d98) Passed 2 of 2 tests
> (d98) Writing SMBIOS tables ...
> (d98) Loading SeaBIOS ...
> (d98) Creating MP tables ...
> (d98) Loading ACPI ...
> (d98) S3 disabled
> (d98) S4 disabled
> (d98) vm86 TSS at fc00a100
> (d98) BIOS map:
> (d98)  10000-100d3: Scratch space
> (d98)  c0000-fffff: Main BIOS
> (d98) E820 table:
> (d98)  [00]: 00000000:00000000 - 00000000:000a0000: RAM
> (d98)  HOLE: 00000000:000a0000 - 00000000:000c0000
> (d98)  [01]: 00000000:000c0000 - 00000000:00100000: RESERVED
> (d98)  [02]: 00000000:00100000 - 00000000:78000000: RAM
> (d98)  HOLE: 00000000:78000000 - 00000000:fc000000
> (d98)  [03]: 00000000:fc000000 - 00000001:00000000: RESERVED
> (d98) Invoking SeaBIOS ...
> (d98) SeaBIOS (version 
> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
> (d98)
> (d98) Found Xen hypervisor signature at 40000100
> (d98) Running on QEMU (i440fx)
> (d98) xen: copy e820...
> (d98) Relocating init from 0x000df619 to 0x77fae600 (size 71995)
> (d98) CPU Mhz=2660
> (d98) Found 13 PCI devices (max PCI bus is 00)
> (d98) Allocated Xen hypercall page at 77fff000
> (d98) Detected Xen v4.5-unstable
> (d98) xen: copy BIOS tables...
> (d98) Copying SMBIOS entry point from 0x00010010 to 0x000f0f40
> (d98) Copying MPTABLE from 0xfc001170/fc001180 to 0x000f0e40
> (d98) Copying PIR from 0x00010030 to 0x000f0dc0
> (d98) Copying ACPI RSDP from 0x000100b0 to 0x000f0d90
> (d98) Using pmtimer, ioport 0xb008
> (d98) Scan for VGA option rom
> (d98) Running option rom at c000:0003
> (XEN) stdvga.c:147:d98v0 entering stdvga and caching modes
> (d98) pmm call arg1=0
> (d98) Turning on vga text mode console
> (d98) SeaBIOS (version 
> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
> (d98) Machine UUID f4cdeb74-0db1-4748-948d-42579a494120
> (d98) EHCI init on dev 00:1d.7 (regs=0xf9057020)
> (d98) Found 0 lpt ports
> (d98) Found 0 serial ports
> (d98) ATA controller 1 at 1f0/3f4/0 (irq 14 dev 9)
> (d98) ATA controller 2 at 170/374/0 (irq 15 dev 9)
> (d98) ata0-0: QEMU HARDDISK ATA-7 Hard-Disk (40720 MiBytes)
> (d98) Searching bootorder for: /pci@i0cf8/*@1,1/drive@0/disk@0
> (d98) DVD/CD [ata0-1: QEMU DVD-ROM ATAPI-4 DVD/CD]
> (d98) Searching bootorder for: /pci@i0cf8/*@1,1/drive@0/disk@1
> (d98) UHCI init on dev 00:1d.0 (io=c240)
> (d98) UHCI init on dev 00:1d.1 (io=c260)
> (d98) UHCI init on dev 00:1d.2 (io=c280)
> (d98) PS2 keyboard initialized
> (d98) All threads complete.
> (d98) Scan for option roms
> (d98) Running option rom at c980:0003
> (d98) pmm call arg1=1
> (d98) pmm call arg1=0
> (d98) pmm call arg1=1
> (d98) pmm call arg1=0
> (d98) Searching bootorder for: /pci@i0cf8/*@6
> (d98)
> (d98) Press F12 for boot menu.
> (d98)
> (d98) Searching bootorder for: HALT
> (d98) drive 0x000f0d40: PCHS=16383/16/63 translation=lba 
> LCHS=1024/255/63 s=83394560
> (d98) Space available for UMB: ca800-ee800, f0000-f0ce0
> (d98) Returned 258048 bytes of ZoneHigh
> (d98) e820 map has 6 items:
> (d98)   0: 0000000000000000 - 000000000009fc00 = 1 RAM
> (d98)   1: 000000000009fc00 - 00000000000a0000 = 2 RESERVED
> (d98)   2: 00000000000f0000 - 0000000000100000 = 2 RESERVED
> (d98)   3: 0000000000100000 - 0000000077fff000 = 1 RAM
> (d98)   4: 0000000077fff000 - 0000000078000000 = 2 RESERVED
> (d98)   5: 00000000fc000000 - 0000000100000000 = 2 RESERVED
> (d98) enter handle_19:
> (d98)   NULL
> (d98) Booting from Hard Disk...
> (d98) Booting from 0000:7c00
> (XEN) d98: VIRIDIAN GUEST_OS_ID: vendor: 1 os: 4 major: 6 minor: 1 sp: 
> 1 build: 1db1
> (XEN) d98: VIRIDIAN HYPERCALL: enabled: 1 pfn: 3ffff
> (XEN) d98v0: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffe
> (XEN) d98v1: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffd
> (XEN) irq.c:270: Dom98 PCI link 0 changed 5 -> 0
> (XEN) irq.c:270: Dom98 PCI link 1 changed 10 -> 0
> (XEN) irq.c:270: Dom98 PCI link 2 changed 11 -> 0
> (XEN) irq.c:270: Dom98 PCI link 3 changed 5 -> 0
> (XEN) irq.c:380: Dom98 callback via changed to GSI 24
> (d98) XEN|BUGCHECK: ====>
> (d98) XEN|BUGCHECK: 0000007A: FFFFF6FC000171C8 FFFFFFFFC0000185 
> 000000001BD6A860 FFFF
> (d98) F80002E39000
> (d98) XEN|BUGCHECK: CONTEXT (FFFFF8800310E530):
> (d98) XEN|BUGCHECK: - GS = 002B
> (d98) XEN|BUGCHECK: - FS = 0053
> (d98) XEN|BUGCHECK: - ES = 002B
> (d98) XEN|BUGCHECK: - DS = 002B
> (d98) XEN|BUGCHECK: - SS = 0018
> (d98) XEN|BUGCHECK: - CS = 0010
> (d98) XEN|BUGCHECK: - EFLAGS = 00000086
> (d98) XEN|BUGCHECK: - RDI = 00000000000171C8
> (d98) XEN|BUGCHECK: - RSI = 00000000C0000185
> (d98) XEN|BUGCHECK: - RBX = 00000000038AC8F8
> (d98) XEN|BUGCHECK: - RDX = 0000000000000000
> (d98) XEN|BUGCHECK: - RCX = 000000000310E530
> (d98) XEN|BUGCHECK: - RAX = 000000002ECF4722
> (d98) XEN|BUGCHECK: - RBP = 000000001BD6A860
> (d98) XEN|BUGCHECK: - RIP = 00000000038A2A43
> (d98) XEN|BUGCHECK: - RSP = 000000000310E510
> (d98) XEN|BUGCHECK: - R8 = 0000000000000000
> (d98) XEN|BUGCHECK: - R9 = 0000000000000000
> (d98) XEN|BUGCHECK: - R10 = 0000000000000000
> (d98) XEN|BUGCHECK: - R11 = 0000000000000000
> (d98) XEN|BUGCHECK: - R12 = 000000000000007A
> (d98) XEN|BUGCHECK: - R13 = 0000000000000001
> (d98) XEN|BUGCHECK: - R14 = 0000000002E39000
> (d98) XEN|BUGCHECK: - R15 = 0000000002CBAC40
> (d98) XEN|BUGCHECK: STACK:
> (d98) XEN|BUGCHECK: 000000000310EA20: (0000000000000003 
> 00000000038A50F0 00000000038A
> (d98) 4860 000000000000007A) xen.sys + 00000000000049AC
> (d98) XEN|BUGCHECK: 000000000310EA70: (00000000038AD0D0 
> 0000000000000000 000000000000
> (d98) 0004 0000000002C83500) ntoskrnl.exe + 0000000000128585
> (d98) XEN|BUGCHECK: 000000000310EAA0: (00000000038AD0D0 
> 0000000002C83500 000000000000
> (d98) 000F 0000000001780660) ntoskrnl.exe + 0000000000167C0D
> (d98) XEN|BUGCHECK: 000000000310F170: (0000000003816470 
> 0000000002B4C8C1 000000000000
> (d98) 00FE 0000000000000000) ntoskrnl.exe + 0000000000075CC4
> (d98) XEN|BUGCHECK: 000000000310F1B0: (000000000000007A 
> 00000000000171C8 00000000C000
> (d98) 0185 000000001BD6A860) ntoskrnl.exe + 00000000000E8752
> (d98) XEN|BUGCHECK: 000000000310F290: (00000000038163B0 
> 000000000310F320 0000000002CB
> (d98) D540 00000000038163B0) ntoskrnl.exe + 000000000009C91F
> (d98) XEN|BUGCHECK: 000000000310F360: (0000000000000000 
> 0000000000000008 00000000FFFF
> (d98) FFFF 00000000003500F0) ntoskrnl.exe + 00000000000831B9
> (d98) XEN|BUGCHECK: 000000000310F4C0: (0000000000000008 
> 0000000002E39000 000000000000
> (d98) 0000 0000000000000000) ntoskrnl.exe + 0000000000073CEE
> (d98) XEN|BUGCHECK: 000000000310F658: (0000000002E5CFD5 
> 0000000000000000 0000000003EB
> (d98) 8710 00000000FFFFFFFF) ntoskrnl.exe + 000000000042C000

If you need more tests/informations 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 Thu Oct 16 10:00:41 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 16 Oct 2014 10:00: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 1XehrN-0005ke-Jy; Thu, 16 Oct 2014 10:00:41 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <Paul.Durrant@citrix.com>) id 1XehrM-0005kZ-6o
	for win-pv-devel@lists.xenproject.org; Thu, 16 Oct 2014 10:00:40 +0000
Received: from [85.158.139.211:29948] by server-7.bemta-5.messagelabs.com id
	BB/A7-30869-7479F345; Thu, 16 Oct 2014 10:00:39 +0000
X-Env-Sender: Paul.Durrant@citrix.com
X-Msg-Ref: server-6.tower-206.messagelabs.com!1413453637!11553669!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: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 3304 invoked from network); 16 Oct 2014 10:00:37 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-6.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	16 Oct 2014 10:00:37 -0000
X-IronPort-AV: E=Sophos;i="5.04,731,1406592000"; d="scan'208";a="26011037"
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: Blue screen on xenvif install
Thread-Index: AQHP6R88TE2eCcEtSU6laq0K5grY5pwybJlQ///obQCAACb2gA==
Date: Thu, 16 Oct 2014 10:00:36 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD01110526F@AMSPEX01CL01.citrite.net>
References: <543F887B.5030500@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111050FF@AMSPEX01CL01.citrite.net>
	<543F912C.8000504@m2r.biz>
In-Reply-To: <543F912C.8000504@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] Blue screen on xenvif install
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: 16 October 2014 10:35
> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> Subject: Re: Blue screen on xenvif install
> 
> Il 16/10/2014 10:59, Paul Durrant ha scritto:
> >> -----Original Message-----
> >> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >> Sent: 16 October 2014 09:58
> >> To: win-pv-devel@lists.xenproject.org
> >> Cc: Paul Durrant
> >> Subject: Blue screen on xenvif install
> >>
> >> Today I tried to install new winpv driver to other 3 windows 7 pro 64
> >> bit domUs.
> >> Days ago I installed them successful on one windows 7 pro 64 bit and one
> >> windows 8.1 enterprise 64 bit.
> >> On first domUs I tried to install them today I installed xenbus and
> >> xenvbd successful but on xenvif install windows crashed with blue
> >> screen, if I saw it correctly was an kernel in-page error or something
> >> similar.
> >> After reboot I retried to install xenvif but now always fails.
> >>
> > Sounds odd. Do you have a MEMORY.DMP?
> >
> >    Paul
> 
> Windows is setted to write dump of kernel memory on system error but
> %systemroot%\memory.dmp is missed :(
> I also checked the windows events log but I found only kernel-power as
> critical that seems not contains useful data.
> 
> I found probably useful data in xl dmesg (I copied all below from domU
> start to xen bug):
> > (d98) HVM Loader
> > (d98) Detected Xen v4.5-unstable
> > (d98) Xenbus rings @0xfeffc000, event channel 1
> > (d98) System requested SeaBIOS
> > (d98) CPU speed is 2660 MHz
> > (d98) Relocating guest memory for lowmem MMIO space disabled
> > (XEN) irq.c:270: Dom98 PCI link 0 changed 0 -> 5
> > (d98) PCI-ISA link 0 routed to IRQ5
> > (XEN) irq.c:270: Dom98 PCI link 1 changed 0 -> 10
> > (d98) PCI-ISA link 1 routed to IRQ10
> > (XEN) irq.c:270: Dom98 PCI link 2 changed 0 -> 11
> > (d98) PCI-ISA link 2 routed to IRQ11
> > (XEN) irq.c:270: Dom98 PCI link 3 changed 0 -> 5
> > (d98) PCI-ISA link 3 routed to IRQ5
> > (d98) pci dev 01:3 INTA->IRQ10
> > (d98) pci dev 02:0 INTA->IRQ11
> > (d98) pci dev 03:0 INTA->IRQ5
> > (d98) pci dev 04:0 INTA->IRQ5
> > (d98) pci dev 05:0 INTA->IRQ10
> > (d98) pci dev 06:0 INTA->IRQ11
> > (d98) pci dev 1d:0 INTA->IRQ10
> > (d98) pci dev 1d:1 INTB->IRQ11
> > (d98) pci dev 1d:2 INTC->IRQ5
> > (d98) pci dev 1d:7 INTD->IRQ5
> > (d98) No RAM in high memory; setting high_mem resource base to
> 100000000
> > (d98) pci dev 05:0 bar 10 size 004000000: 0f0000000
> > (d98) pci dev 05:0 bar 14 size 004000000: 0f4000000
> > (d98) pci dev 02:0 bar 14 size 001000000: 0f8000008
> > (d98) pci dev 06:0 bar 30 size 000040000: 0f9000000
> > (d98) pci dev 05:0 bar 30 size 000010000: 0f9040000
> > (d98) pci dev 03:0 bar 10 size 000004000: 0f9050000
> > (d98) pci dev 05:0 bar 18 size 000002000: 0f9054000
> > (d98) pci dev 04:0 bar 14 size 000001000: 0f9056000
> > (d98) pci dev 1d:7 bar 10 size 000001000: 0f9057000
> > (d98) pci dev 02:0 bar 10 size 000000100: 00000c001
> > (d98) pci dev 06:0 bar 10 size 000000100: 00000c101
> > (d98) pci dev 06:0 bar 14 size 000000100: 0f9058000
> > (d98) pci dev 04:0 bar 10 size 000000020: 00000c201
> > (d98) pci dev 05:0 bar 1c size 000000020: 00000c221
> > (d98) pci dev 1d:0 bar 20 size 000000020: 00000c241
> > (d98) pci dev 1d:1 bar 20 size 000000020: 00000c261
> > (d98) pci dev 1d:2 bar 20 size 000000020: 00000c281
> > (d98) pci dev 01:1 bar 20 size 000000010: 00000c2a1
> > (d98) Multiprocessor initialisation:
> > (d98)  - CPU0 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8] ...
> > done.
> > (d98)  - CPU1 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8] ...
> > done.
> > (d98) Testing HVM environment:
> > (d98)  - REP INSB across page boundaries ... passed
> > (d98)  - GS base MSRs and SWAPGS ... passed
> > (d98) Passed 2 of 2 tests
> > (d98) Writing SMBIOS tables ...
> > (d98) Loading SeaBIOS ...
> > (d98) Creating MP tables ...
> > (d98) Loading ACPI ...
> > (d98) S3 disabled
> > (d98) S4 disabled
> > (d98) vm86 TSS at fc00a100
> > (d98) BIOS map:
> > (d98)  10000-100d3: Scratch space
> > (d98)  c0000-fffff: Main BIOS
> > (d98) E820 table:
> > (d98)  [00]: 00000000:00000000 - 00000000:000a0000: RAM
> > (d98)  HOLE: 00000000:000a0000 - 00000000:000c0000
> > (d98)  [01]: 00000000:000c0000 - 00000000:00100000: RESERVED
> > (d98)  [02]: 00000000:00100000 - 00000000:78000000: RAM
> > (d98)  HOLE: 00000000:78000000 - 00000000:fc000000
> > (d98)  [03]: 00000000:fc000000 - 00000001:00000000: RESERVED
> > (d98) Invoking SeaBIOS ...
> > (d98) SeaBIOS (version
> > debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
> > (d98)
> > (d98) Found Xen hypervisor signature at 40000100
> > (d98) Running on QEMU (i440fx)
> > (d98) xen: copy e820...
> > (d98) Relocating init from 0x000df619 to 0x77fae600 (size 71995)
> > (d98) CPU Mhz=2660
> > (d98) Found 13 PCI devices (max PCI bus is 00)
> > (d98) Allocated Xen hypercall page at 77fff000
> > (d98) Detected Xen v4.5-unstable
> > (d98) xen: copy BIOS tables...
> > (d98) Copying SMBIOS entry point from 0x00010010 to 0x000f0f40
> > (d98) Copying MPTABLE from 0xfc001170/fc001180 to 0x000f0e40
> > (d98) Copying PIR from 0x00010030 to 0x000f0dc0
> > (d98) Copying ACPI RSDP from 0x000100b0 to 0x000f0d90
> > (d98) Using pmtimer, ioport 0xb008
> > (d98) Scan for VGA option rom
> > (d98) Running option rom at c000:0003
> > (XEN) stdvga.c:147:d98v0 entering stdvga and caching modes
> > (d98) pmm call arg1=0
> > (d98) Turning on vga text mode console
> > (d98) SeaBIOS (version
> > debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
> > (d98) Machine UUID f4cdeb74-0db1-4748-948d-42579a494120
> > (d98) EHCI init on dev 00:1d.7 (regs=0xf9057020)
> > (d98) Found 0 lpt ports
> > (d98) Found 0 serial ports
> > (d98) ATA controller 1 at 1f0/3f4/0 (irq 14 dev 9)
> > (d98) ATA controller 2 at 170/374/0 (irq 15 dev 9)
> > (d98) ata0-0: QEMU HARDDISK ATA-7 Hard-Disk (40720 MiBytes)
> > (d98) Searching bootorder for: /pci@i0cf8/*@1,1/drive@0/disk@0
> > (d98) DVD/CD [ata0-1: QEMU DVD-ROM ATAPI-4 DVD/CD]
> > (d98) Searching bootorder for: /pci@i0cf8/*@1,1/drive@0/disk@1
> > (d98) UHCI init on dev 00:1d.0 (io=c240)
> > (d98) UHCI init on dev 00:1d.1 (io=c260)
> > (d98) UHCI init on dev 00:1d.2 (io=c280)
> > (d98) PS2 keyboard initialized
> > (d98) All threads complete.
> > (d98) Scan for option roms
> > (d98) Running option rom at c980:0003
> > (d98) pmm call arg1=1
> > (d98) pmm call arg1=0
> > (d98) pmm call arg1=1
> > (d98) pmm call arg1=0
> > (d98) Searching bootorder for: /pci@i0cf8/*@6
> > (d98)
> > (d98) Press F12 for boot menu.
> > (d98)
> > (d98) Searching bootorder for: HALT
> > (d98) drive 0x000f0d40: PCHS=16383/16/63 translation=lba
> > LCHS=1024/255/63 s=83394560
> > (d98) Space available for UMB: ca800-ee800, f0000-f0ce0
> > (d98) Returned 258048 bytes of ZoneHigh
> > (d98) e820 map has 6 items:
> > (d98)   0: 0000000000000000 - 000000000009fc00 = 1 RAM
> > (d98)   1: 000000000009fc00 - 00000000000a0000 = 2 RESERVED
> > (d98)   2: 00000000000f0000 - 0000000000100000 = 2 RESERVED
> > (d98)   3: 0000000000100000 - 0000000077fff000 = 1 RAM
> > (d98)   4: 0000000077fff000 - 0000000078000000 = 2 RESERVED
> > (d98)   5: 00000000fc000000 - 0000000100000000 = 2 RESERVED
> > (d98) enter handle_19:
> > (d98)   NULL
> > (d98) Booting from Hard Disk...
> > (d98) Booting from 0000:7c00
> > (XEN) d98: VIRIDIAN GUEST_OS_ID: vendor: 1 os: 4 major: 6 minor: 1 sp:
> > 1 build: 1db1
> > (XEN) d98: VIRIDIAN HYPERCALL: enabled: 1 pfn: 3ffff
> > (XEN) d98v0: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffe
> > (XEN) d98v1: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffd
> > (XEN) irq.c:270: Dom98 PCI link 0 changed 5 -> 0
> > (XEN) irq.c:270: Dom98 PCI link 1 changed 10 -> 0
> > (XEN) irq.c:270: Dom98 PCI link 2 changed 11 -> 0
> > (XEN) irq.c:270: Dom98 PCI link 3 changed 5 -> 0
> > (XEN) irq.c:380: Dom98 callback via changed to GSI 24
> > (d98) XEN|BUGCHECK: ====>
> > (d98) XEN|BUGCHECK: 0000007A: FFFFF6FC000171C8 FFFFFFFFC0000185
> > 000000001BD6A860 FFFF
> > (d98) F80002E39000
> > (d98) XEN|BUGCHECK: CONTEXT (FFFFF8800310E530):
> > (d98) XEN|BUGCHECK: - GS = 002B
> > (d98) XEN|BUGCHECK: - FS = 0053
> > (d98) XEN|BUGCHECK: - ES = 002B
> > (d98) XEN|BUGCHECK: - DS = 002B
> > (d98) XEN|BUGCHECK: - SS = 0018
> > (d98) XEN|BUGCHECK: - CS = 0010
> > (d98) XEN|BUGCHECK: - EFLAGS = 00000086
> > (d98) XEN|BUGCHECK: - RDI = 00000000000171C8
> > (d98) XEN|BUGCHECK: - RSI = 00000000C0000185
> > (d98) XEN|BUGCHECK: - RBX = 00000000038AC8F8
> > (d98) XEN|BUGCHECK: - RDX = 0000000000000000
> > (d98) XEN|BUGCHECK: - RCX = 000000000310E530
> > (d98) XEN|BUGCHECK: - RAX = 000000002ECF4722
> > (d98) XEN|BUGCHECK: - RBP = 000000001BD6A860
> > (d98) XEN|BUGCHECK: - RIP = 00000000038A2A43
> > (d98) XEN|BUGCHECK: - RSP = 000000000310E510
> > (d98) XEN|BUGCHECK: - R8 = 0000000000000000
> > (d98) XEN|BUGCHECK: - R9 = 0000000000000000
> > (d98) XEN|BUGCHECK: - R10 = 0000000000000000
> > (d98) XEN|BUGCHECK: - R11 = 0000000000000000
> > (d98) XEN|BUGCHECK: - R12 = 000000000000007A
> > (d98) XEN|BUGCHECK: - R13 = 0000000000000001
> > (d98) XEN|BUGCHECK: - R14 = 0000000002E39000
> > (d98) XEN|BUGCHECK: - R15 = 0000000002CBAC40
> > (d98) XEN|BUGCHECK: STACK:
> > (d98) XEN|BUGCHECK: 000000000310EA20: (0000000000000003
> > 00000000038A50F0 00000000038A
> > (d98) 4860 000000000000007A) xen.sys + 00000000000049AC
> > (d98) XEN|BUGCHECK: 000000000310EA70: (00000000038AD0D0
> > 0000000000000000 000000000000
> > (d98) 0004 0000000002C83500) ntoskrnl.exe + 0000000000128585
> > (d98) XEN|BUGCHECK: 000000000310EAA0: (00000000038AD0D0
> > 0000000002C83500 000000000000
> > (d98) 000F 0000000001780660) ntoskrnl.exe + 0000000000167C0D
> > (d98) XEN|BUGCHECK: 000000000310F170: (0000000003816470
> > 0000000002B4C8C1 000000000000
> > (d98) 00FE 0000000000000000) ntoskrnl.exe + 0000000000075CC4
> > (d98) XEN|BUGCHECK: 000000000310F1B0: (000000000000007A
> > 00000000000171C8 00000000C000
> > (d98) 0185 000000001BD6A860) ntoskrnl.exe + 00000000000E8752
> > (d98) XEN|BUGCHECK: 000000000310F290: (00000000038163B0
> > 000000000310F320 0000000002CB
> > (d98) D540 00000000038163B0) ntoskrnl.exe + 000000000009C91F
> > (d98) XEN|BUGCHECK: 000000000310F360: (0000000000000000
> > 0000000000000008 00000000FFFF
> > (d98) FFFF 00000000003500F0) ntoskrnl.exe + 00000000000831B9
> > (d98) XEN|BUGCHECK: 000000000310F4C0: (0000000000000008
> > 0000000002E39000 000000000000
> > (d98) 0000 0000000000000000) ntoskrnl.exe + 0000000000073CEE
> > (d98) XEN|BUGCHECK: 000000000310F658: (0000000002E5CFD5
> > 0000000000000000 0000000003EB
> > (d98) 8710 00000000FFFFFFFF) ntoskrnl.exe + 000000000042C000
> 
> If you need more tests/informations tell me and I'll post them.
> Thanks for any reply and sorry for my bad english.

Well, that tells me you had a 7A BSOD, which is a KERNEL_DATA_INPAGE_ERROR. The error status (param 2) was C0000185 so that's a STATUS_IO_DEVICE_ERROR. The documentation at http://msdn.microsoft.com/en-gb/library/windows/hardware/ff559211%28v=vs.85%29.aspx tells me that this means:

"improper termination or defective cabling on SCSI devices or that two devices are trying to use the same IRQ."

But you said you had xenvbd already installed so you'll be using a PV storage path. Is there any indication of problems with your storage?

  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 Thu Oct 16 10:00:41 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 16 Oct 2014 10:00: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 1XehrN-0005ke-Jy; Thu, 16 Oct 2014 10:00:41 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <Paul.Durrant@citrix.com>) id 1XehrM-0005kZ-6o
	for win-pv-devel@lists.xenproject.org; Thu, 16 Oct 2014 10:00:40 +0000
Received: from [85.158.139.211:29948] by server-7.bemta-5.messagelabs.com id
	BB/A7-30869-7479F345; Thu, 16 Oct 2014 10:00:39 +0000
X-Env-Sender: Paul.Durrant@citrix.com
X-Msg-Ref: server-6.tower-206.messagelabs.com!1413453637!11553669!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: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 3304 invoked from network); 16 Oct 2014 10:00:37 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-6.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	16 Oct 2014 10:00:37 -0000
X-IronPort-AV: E=Sophos;i="5.04,731,1406592000"; d="scan'208";a="26011037"
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: Blue screen on xenvif install
Thread-Index: AQHP6R88TE2eCcEtSU6laq0K5grY5pwybJlQ///obQCAACb2gA==
Date: Thu, 16 Oct 2014 10:00:36 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD01110526F@AMSPEX01CL01.citrite.net>
References: <543F887B.5030500@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111050FF@AMSPEX01CL01.citrite.net>
	<543F912C.8000504@m2r.biz>
In-Reply-To: <543F912C.8000504@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] Blue screen on xenvif install
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: 16 October 2014 10:35
> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> Subject: Re: Blue screen on xenvif install
> 
> Il 16/10/2014 10:59, Paul Durrant ha scritto:
> >> -----Original Message-----
> >> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >> Sent: 16 October 2014 09:58
> >> To: win-pv-devel@lists.xenproject.org
> >> Cc: Paul Durrant
> >> Subject: Blue screen on xenvif install
> >>
> >> Today I tried to install new winpv driver to other 3 windows 7 pro 64
> >> bit domUs.
> >> Days ago I installed them successful on one windows 7 pro 64 bit and one
> >> windows 8.1 enterprise 64 bit.
> >> On first domUs I tried to install them today I installed xenbus and
> >> xenvbd successful but on xenvif install windows crashed with blue
> >> screen, if I saw it correctly was an kernel in-page error or something
> >> similar.
> >> After reboot I retried to install xenvif but now always fails.
> >>
> > Sounds odd. Do you have a MEMORY.DMP?
> >
> >    Paul
> 
> Windows is setted to write dump of kernel memory on system error but
> %systemroot%\memory.dmp is missed :(
> I also checked the windows events log but I found only kernel-power as
> critical that seems not contains useful data.
> 
> I found probably useful data in xl dmesg (I copied all below from domU
> start to xen bug):
> > (d98) HVM Loader
> > (d98) Detected Xen v4.5-unstable
> > (d98) Xenbus rings @0xfeffc000, event channel 1
> > (d98) System requested SeaBIOS
> > (d98) CPU speed is 2660 MHz
> > (d98) Relocating guest memory for lowmem MMIO space disabled
> > (XEN) irq.c:270: Dom98 PCI link 0 changed 0 -> 5
> > (d98) PCI-ISA link 0 routed to IRQ5
> > (XEN) irq.c:270: Dom98 PCI link 1 changed 0 -> 10
> > (d98) PCI-ISA link 1 routed to IRQ10
> > (XEN) irq.c:270: Dom98 PCI link 2 changed 0 -> 11
> > (d98) PCI-ISA link 2 routed to IRQ11
> > (XEN) irq.c:270: Dom98 PCI link 3 changed 0 -> 5
> > (d98) PCI-ISA link 3 routed to IRQ5
> > (d98) pci dev 01:3 INTA->IRQ10
> > (d98) pci dev 02:0 INTA->IRQ11
> > (d98) pci dev 03:0 INTA->IRQ5
> > (d98) pci dev 04:0 INTA->IRQ5
> > (d98) pci dev 05:0 INTA->IRQ10
> > (d98) pci dev 06:0 INTA->IRQ11
> > (d98) pci dev 1d:0 INTA->IRQ10
> > (d98) pci dev 1d:1 INTB->IRQ11
> > (d98) pci dev 1d:2 INTC->IRQ5
> > (d98) pci dev 1d:7 INTD->IRQ5
> > (d98) No RAM in high memory; setting high_mem resource base to
> 100000000
> > (d98) pci dev 05:0 bar 10 size 004000000: 0f0000000
> > (d98) pci dev 05:0 bar 14 size 004000000: 0f4000000
> > (d98) pci dev 02:0 bar 14 size 001000000: 0f8000008
> > (d98) pci dev 06:0 bar 30 size 000040000: 0f9000000
> > (d98) pci dev 05:0 bar 30 size 000010000: 0f9040000
> > (d98) pci dev 03:0 bar 10 size 000004000: 0f9050000
> > (d98) pci dev 05:0 bar 18 size 000002000: 0f9054000
> > (d98) pci dev 04:0 bar 14 size 000001000: 0f9056000
> > (d98) pci dev 1d:7 bar 10 size 000001000: 0f9057000
> > (d98) pci dev 02:0 bar 10 size 000000100: 00000c001
> > (d98) pci dev 06:0 bar 10 size 000000100: 00000c101
> > (d98) pci dev 06:0 bar 14 size 000000100: 0f9058000
> > (d98) pci dev 04:0 bar 10 size 000000020: 00000c201
> > (d98) pci dev 05:0 bar 1c size 000000020: 00000c221
> > (d98) pci dev 1d:0 bar 20 size 000000020: 00000c241
> > (d98) pci dev 1d:1 bar 20 size 000000020: 00000c261
> > (d98) pci dev 1d:2 bar 20 size 000000020: 00000c281
> > (d98) pci dev 01:1 bar 20 size 000000010: 00000c2a1
> > (d98) Multiprocessor initialisation:
> > (d98)  - CPU0 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8] ...
> > done.
> > (d98)  - CPU1 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8] ...
> > done.
> > (d98) Testing HVM environment:
> > (d98)  - REP INSB across page boundaries ... passed
> > (d98)  - GS base MSRs and SWAPGS ... passed
> > (d98) Passed 2 of 2 tests
> > (d98) Writing SMBIOS tables ...
> > (d98) Loading SeaBIOS ...
> > (d98) Creating MP tables ...
> > (d98) Loading ACPI ...
> > (d98) S3 disabled
> > (d98) S4 disabled
> > (d98) vm86 TSS at fc00a100
> > (d98) BIOS map:
> > (d98)  10000-100d3: Scratch space
> > (d98)  c0000-fffff: Main BIOS
> > (d98) E820 table:
> > (d98)  [00]: 00000000:00000000 - 00000000:000a0000: RAM
> > (d98)  HOLE: 00000000:000a0000 - 00000000:000c0000
> > (d98)  [01]: 00000000:000c0000 - 00000000:00100000: RESERVED
> > (d98)  [02]: 00000000:00100000 - 00000000:78000000: RAM
> > (d98)  HOLE: 00000000:78000000 - 00000000:fc000000
> > (d98)  [03]: 00000000:fc000000 - 00000001:00000000: RESERVED
> > (d98) Invoking SeaBIOS ...
> > (d98) SeaBIOS (version
> > debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
> > (d98)
> > (d98) Found Xen hypervisor signature at 40000100
> > (d98) Running on QEMU (i440fx)
> > (d98) xen: copy e820...
> > (d98) Relocating init from 0x000df619 to 0x77fae600 (size 71995)
> > (d98) CPU Mhz=2660
> > (d98) Found 13 PCI devices (max PCI bus is 00)
> > (d98) Allocated Xen hypercall page at 77fff000
> > (d98) Detected Xen v4.5-unstable
> > (d98) xen: copy BIOS tables...
> > (d98) Copying SMBIOS entry point from 0x00010010 to 0x000f0f40
> > (d98) Copying MPTABLE from 0xfc001170/fc001180 to 0x000f0e40
> > (d98) Copying PIR from 0x00010030 to 0x000f0dc0
> > (d98) Copying ACPI RSDP from 0x000100b0 to 0x000f0d90
> > (d98) Using pmtimer, ioport 0xb008
> > (d98) Scan for VGA option rom
> > (d98) Running option rom at c000:0003
> > (XEN) stdvga.c:147:d98v0 entering stdvga and caching modes
> > (d98) pmm call arg1=0
> > (d98) Turning on vga text mode console
> > (d98) SeaBIOS (version
> > debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
> > (d98) Machine UUID f4cdeb74-0db1-4748-948d-42579a494120
> > (d98) EHCI init on dev 00:1d.7 (regs=0xf9057020)
> > (d98) Found 0 lpt ports
> > (d98) Found 0 serial ports
> > (d98) ATA controller 1 at 1f0/3f4/0 (irq 14 dev 9)
> > (d98) ATA controller 2 at 170/374/0 (irq 15 dev 9)
> > (d98) ata0-0: QEMU HARDDISK ATA-7 Hard-Disk (40720 MiBytes)
> > (d98) Searching bootorder for: /pci@i0cf8/*@1,1/drive@0/disk@0
> > (d98) DVD/CD [ata0-1: QEMU DVD-ROM ATAPI-4 DVD/CD]
> > (d98) Searching bootorder for: /pci@i0cf8/*@1,1/drive@0/disk@1
> > (d98) UHCI init on dev 00:1d.0 (io=c240)
> > (d98) UHCI init on dev 00:1d.1 (io=c260)
> > (d98) UHCI init on dev 00:1d.2 (io=c280)
> > (d98) PS2 keyboard initialized
> > (d98) All threads complete.
> > (d98) Scan for option roms
> > (d98) Running option rom at c980:0003
> > (d98) pmm call arg1=1
> > (d98) pmm call arg1=0
> > (d98) pmm call arg1=1
> > (d98) pmm call arg1=0
> > (d98) Searching bootorder for: /pci@i0cf8/*@6
> > (d98)
> > (d98) Press F12 for boot menu.
> > (d98)
> > (d98) Searching bootorder for: HALT
> > (d98) drive 0x000f0d40: PCHS=16383/16/63 translation=lba
> > LCHS=1024/255/63 s=83394560
> > (d98) Space available for UMB: ca800-ee800, f0000-f0ce0
> > (d98) Returned 258048 bytes of ZoneHigh
> > (d98) e820 map has 6 items:
> > (d98)   0: 0000000000000000 - 000000000009fc00 = 1 RAM
> > (d98)   1: 000000000009fc00 - 00000000000a0000 = 2 RESERVED
> > (d98)   2: 00000000000f0000 - 0000000000100000 = 2 RESERVED
> > (d98)   3: 0000000000100000 - 0000000077fff000 = 1 RAM
> > (d98)   4: 0000000077fff000 - 0000000078000000 = 2 RESERVED
> > (d98)   5: 00000000fc000000 - 0000000100000000 = 2 RESERVED
> > (d98) enter handle_19:
> > (d98)   NULL
> > (d98) Booting from Hard Disk...
> > (d98) Booting from 0000:7c00
> > (XEN) d98: VIRIDIAN GUEST_OS_ID: vendor: 1 os: 4 major: 6 minor: 1 sp:
> > 1 build: 1db1
> > (XEN) d98: VIRIDIAN HYPERCALL: enabled: 1 pfn: 3ffff
> > (XEN) d98v0: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffe
> > (XEN) d98v1: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffd
> > (XEN) irq.c:270: Dom98 PCI link 0 changed 5 -> 0
> > (XEN) irq.c:270: Dom98 PCI link 1 changed 10 -> 0
> > (XEN) irq.c:270: Dom98 PCI link 2 changed 11 -> 0
> > (XEN) irq.c:270: Dom98 PCI link 3 changed 5 -> 0
> > (XEN) irq.c:380: Dom98 callback via changed to GSI 24
> > (d98) XEN|BUGCHECK: ====>
> > (d98) XEN|BUGCHECK: 0000007A: FFFFF6FC000171C8 FFFFFFFFC0000185
> > 000000001BD6A860 FFFF
> > (d98) F80002E39000
> > (d98) XEN|BUGCHECK: CONTEXT (FFFFF8800310E530):
> > (d98) XEN|BUGCHECK: - GS = 002B
> > (d98) XEN|BUGCHECK: - FS = 0053
> > (d98) XEN|BUGCHECK: - ES = 002B
> > (d98) XEN|BUGCHECK: - DS = 002B
> > (d98) XEN|BUGCHECK: - SS = 0018
> > (d98) XEN|BUGCHECK: - CS = 0010
> > (d98) XEN|BUGCHECK: - EFLAGS = 00000086
> > (d98) XEN|BUGCHECK: - RDI = 00000000000171C8
> > (d98) XEN|BUGCHECK: - RSI = 00000000C0000185
> > (d98) XEN|BUGCHECK: - RBX = 00000000038AC8F8
> > (d98) XEN|BUGCHECK: - RDX = 0000000000000000
> > (d98) XEN|BUGCHECK: - RCX = 000000000310E530
> > (d98) XEN|BUGCHECK: - RAX = 000000002ECF4722
> > (d98) XEN|BUGCHECK: - RBP = 000000001BD6A860
> > (d98) XEN|BUGCHECK: - RIP = 00000000038A2A43
> > (d98) XEN|BUGCHECK: - RSP = 000000000310E510
> > (d98) XEN|BUGCHECK: - R8 = 0000000000000000
> > (d98) XEN|BUGCHECK: - R9 = 0000000000000000
> > (d98) XEN|BUGCHECK: - R10 = 0000000000000000
> > (d98) XEN|BUGCHECK: - R11 = 0000000000000000
> > (d98) XEN|BUGCHECK: - R12 = 000000000000007A
> > (d98) XEN|BUGCHECK: - R13 = 0000000000000001
> > (d98) XEN|BUGCHECK: - R14 = 0000000002E39000
> > (d98) XEN|BUGCHECK: - R15 = 0000000002CBAC40
> > (d98) XEN|BUGCHECK: STACK:
> > (d98) XEN|BUGCHECK: 000000000310EA20: (0000000000000003
> > 00000000038A50F0 00000000038A
> > (d98) 4860 000000000000007A) xen.sys + 00000000000049AC
> > (d98) XEN|BUGCHECK: 000000000310EA70: (00000000038AD0D0
> > 0000000000000000 000000000000
> > (d98) 0004 0000000002C83500) ntoskrnl.exe + 0000000000128585
> > (d98) XEN|BUGCHECK: 000000000310EAA0: (00000000038AD0D0
> > 0000000002C83500 000000000000
> > (d98) 000F 0000000001780660) ntoskrnl.exe + 0000000000167C0D
> > (d98) XEN|BUGCHECK: 000000000310F170: (0000000003816470
> > 0000000002B4C8C1 000000000000
> > (d98) 00FE 0000000000000000) ntoskrnl.exe + 0000000000075CC4
> > (d98) XEN|BUGCHECK: 000000000310F1B0: (000000000000007A
> > 00000000000171C8 00000000C000
> > (d98) 0185 000000001BD6A860) ntoskrnl.exe + 00000000000E8752
> > (d98) XEN|BUGCHECK: 000000000310F290: (00000000038163B0
> > 000000000310F320 0000000002CB
> > (d98) D540 00000000038163B0) ntoskrnl.exe + 000000000009C91F
> > (d98) XEN|BUGCHECK: 000000000310F360: (0000000000000000
> > 0000000000000008 00000000FFFF
> > (d98) FFFF 00000000003500F0) ntoskrnl.exe + 00000000000831B9
> > (d98) XEN|BUGCHECK: 000000000310F4C0: (0000000000000008
> > 0000000002E39000 000000000000
> > (d98) 0000 0000000000000000) ntoskrnl.exe + 0000000000073CEE
> > (d98) XEN|BUGCHECK: 000000000310F658: (0000000002E5CFD5
> > 0000000000000000 0000000003EB
> > (d98) 8710 00000000FFFFFFFF) ntoskrnl.exe + 000000000042C000
> 
> If you need more tests/informations tell me and I'll post them.
> Thanks for any reply and sorry for my bad english.

Well, that tells me you had a 7A BSOD, which is a KERNEL_DATA_INPAGE_ERROR. The error status (param 2) was C0000185 so that's a STATUS_IO_DEVICE_ERROR. The documentation at http://msdn.microsoft.com/en-gb/library/windows/hardware/ff559211%28v=vs.85%29.aspx tells me that this means:

"improper termination or defective cabling on SCSI devices or that two devices are trying to use the same IRQ."

But you said you had xenvbd already installed so you'll be using a PV storage path. Is there any indication of problems with your storage?

  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 Thu Oct 16 10:59:01 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 16 Oct 2014 10:59:01 +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 1Xeilo-0007QX-Vh; Thu, 16 Oct 2014 10:59:00 +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 1Xeiln-0007QR-Jx
	for win-pv-devel@lists.xenproject.org; Thu, 16 Oct 2014 10:58:59 +0000
Received: from [85.158.139.211:52696] by server-9.bemta-5.messagelabs.com id
	D8/29-20744-2F4AF345; Thu, 16 Oct 2014 10:58:58 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-2.tower-206.messagelabs.com!1413457136!11525858!1
X-Originating-IP: [74.125.82.51]
X-SpamReason: No, hits=2.2 required=7.0 tests=BIZ_TLD,BODY_RANDOM_LONG
X-StarScan-Received: 
X-StarScan-Version: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 15307 invoked from network); 16 Oct 2014 10:58:56 -0000
Received: from mail-wg0-f51.google.com (HELO mail-wg0-f51.google.com)
	(74.125.82.51)
	by server-2.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	16 Oct 2014 10:58:56 -0000
Received: by mail-wg0-f51.google.com with SMTP id b13so3378182wgh.34
	for <win-pv-devel@lists.xenproject.org>;
	Thu, 16 Oct 2014 03:58:56 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:message-id:date:from:user-agent:mime-version:to
	:subject:references:in-reply-to:content-type
	:content-transfer-encoding;
	bh=DuQaqTNMew1tvz4VqSZEdZKOh4QiufFxOde5tgCw0dw=;
	b=LAsxvdNBDsOQeDfgSdlrYt03woW9hW/vpFqKmDKVhicY5gK7HlC3hULSJhEekW+37D
	XfY13Fp5ciUW9T9YC0b24jcP+WyXgHL2oF1yYjnRir0aZVOUoa6xKpbPdokjNOIV1cB4
	dc7vowSncNGuQFVDmQdghBCI7gvrLJ/vXIQ8p6zbcfsLCaGtf7nl+UF1ckYTRXrTPZLX
	mIvvTUdlyw+akofuc8uLObQmlzWytWQnbO1g6HeDBiTgzY5lCYqDDdjEVXi2bc0ADt+P
	dGq8DuqE++WuSZVxKlLwiPDr3jHiFnWTeu1TCxt8Jk3eOh+T6kOlCDTMdGro72wSV4dc
	C/OQ==
X-Gm-Message-State: ALoCoQlkk0UGzgE02gCMK0lwkTOQ6RBNUUPeVabCAWgxuXk9Qh2yK/MMA0lz9Alp+Gun2/QzaqY8
X-Received: by 10.180.84.194 with SMTP id b2mr19877637wiz.57.1413457135674;
	Thu, 16 Oct 2014 03:58:55 -0700 (PDT)
Received: from [192.168.1.15] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by mx.google.com with ESMTPSA id
	om1sm26988916wjc.42.2014.10.16.03.58.53 for <multiple recipients>
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Thu, 16 Oct 2014 03:58:54 -0700 (PDT)
Message-ID: <543FA4F6.5090804@m2r.biz>
Date: Thu, 16 Oct 2014 12:59:02 +0200
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64;
	rv:24.0) Gecko/20100101 Thunderbird/24.6.0
MIME-Version: 1.0
To: Paul Durrant <Paul.Durrant@citrix.com>, 
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <543F887B.5030500@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111050FF@AMSPEX01CL01.citrite.net>
	<543F912C.8000504@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD01110526F@AMSPEX01CL01.citrite.net>
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD01110526F@AMSPEX01CL01.citrite.net>
Subject: Re: [win-pv-devel] Blue screen on xenvif install
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 16/10/2014 12:00, Paul Durrant ha scritto:
>> -----Original Message-----
>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>> Sent: 16 October 2014 10:35
>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>> Subject: Re: Blue screen on xenvif install
>>
>> Il 16/10/2014 10:59, Paul Durrant ha scritto:
>>>> -----Original Message-----
>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>> Sent: 16 October 2014 09:58
>>>> To: win-pv-devel@lists.xenproject.org
>>>> Cc: Paul Durrant
>>>> Subject: Blue screen on xenvif install
>>>>
>>>> Today I tried to install new winpv driver to other 3 windows 7 pro 64
>>>> bit domUs.
>>>> Days ago I installed them successful on one windows 7 pro 64 bit and one
>>>> windows 8.1 enterprise 64 bit.
>>>> On first domUs I tried to install them today I installed xenbus and
>>>> xenvbd successful but on xenvif install windows crashed with blue
>>>> screen, if I saw it correctly was an kernel in-page error or something
>>>> similar.
>>>> After reboot I retried to install xenvif but now always fails.
>>>>
>>> Sounds odd. Do you have a MEMORY.DMP?
>>>
>>>     Paul
>> Windows is setted to write dump of kernel memory on system error but
>> %systemroot%\memory.dmp is missed :(
>> I also checked the windows events log but I found only kernel-power as
>> critical that seems not contains useful data.
>>
>> I found probably useful data in xl dmesg (I copied all below from domU
>> start to xen bug):
>>> (d98) HVM Loader
>>> (d98) Detected Xen v4.5-unstable
>>> (d98) Xenbus rings @0xfeffc000, event channel 1
>>> (d98) System requested SeaBIOS
>>> (d98) CPU speed is 2660 MHz
>>> (d98) Relocating guest memory for lowmem MMIO space disabled
>>> (XEN) irq.c:270: Dom98 PCI link 0 changed 0 -> 5
>>> (d98) PCI-ISA link 0 routed to IRQ5
>>> (XEN) irq.c:270: Dom98 PCI link 1 changed 0 -> 10
>>> (d98) PCI-ISA link 1 routed to IRQ10
>>> (XEN) irq.c:270: Dom98 PCI link 2 changed 0 -> 11
>>> (d98) PCI-ISA link 2 routed to IRQ11
>>> (XEN) irq.c:270: Dom98 PCI link 3 changed 0 -> 5
>>> (d98) PCI-ISA link 3 routed to IRQ5
>>> (d98) pci dev 01:3 INTA->IRQ10
>>> (d98) pci dev 02:0 INTA->IRQ11
>>> (d98) pci dev 03:0 INTA->IRQ5
>>> (d98) pci dev 04:0 INTA->IRQ5
>>> (d98) pci dev 05:0 INTA->IRQ10
>>> (d98) pci dev 06:0 INTA->IRQ11
>>> (d98) pci dev 1d:0 INTA->IRQ10
>>> (d98) pci dev 1d:1 INTB->IRQ11
>>> (d98) pci dev 1d:2 INTC->IRQ5
>>> (d98) pci dev 1d:7 INTD->IRQ5
>>> (d98) No RAM in high memory; setting high_mem resource base to
>> 100000000
>>> (d98) pci dev 05:0 bar 10 size 004000000: 0f0000000
>>> (d98) pci dev 05:0 bar 14 size 004000000: 0f4000000
>>> (d98) pci dev 02:0 bar 14 size 001000000: 0f8000008
>>> (d98) pci dev 06:0 bar 30 size 000040000: 0f9000000
>>> (d98) pci dev 05:0 bar 30 size 000010000: 0f9040000
>>> (d98) pci dev 03:0 bar 10 size 000004000: 0f9050000
>>> (d98) pci dev 05:0 bar 18 size 000002000: 0f9054000
>>> (d98) pci dev 04:0 bar 14 size 000001000: 0f9056000
>>> (d98) pci dev 1d:7 bar 10 size 000001000: 0f9057000
>>> (d98) pci dev 02:0 bar 10 size 000000100: 00000c001
>>> (d98) pci dev 06:0 bar 10 size 000000100: 00000c101
>>> (d98) pci dev 06:0 bar 14 size 000000100: 0f9058000
>>> (d98) pci dev 04:0 bar 10 size 000000020: 00000c201
>>> (d98) pci dev 05:0 bar 1c size 000000020: 00000c221
>>> (d98) pci dev 1d:0 bar 20 size 000000020: 00000c241
>>> (d98) pci dev 1d:1 bar 20 size 000000020: 00000c261
>>> (d98) pci dev 1d:2 bar 20 size 000000020: 00000c281
>>> (d98) pci dev 01:1 bar 20 size 000000010: 00000c2a1
>>> (d98) Multiprocessor initialisation:
>>> (d98)  - CPU0 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8] ...
>>> done.
>>> (d98)  - CPU1 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8] ...
>>> done.
>>> (d98) Testing HVM environment:
>>> (d98)  - REP INSB across page boundaries ... passed
>>> (d98)  - GS base MSRs and SWAPGS ... passed
>>> (d98) Passed 2 of 2 tests
>>> (d98) Writing SMBIOS tables ...
>>> (d98) Loading SeaBIOS ...
>>> (d98) Creating MP tables ...
>>> (d98) Loading ACPI ...
>>> (d98) S3 disabled
>>> (d98) S4 disabled
>>> (d98) vm86 TSS at fc00a100
>>> (d98) BIOS map:
>>> (d98)  10000-100d3: Scratch space
>>> (d98)  c0000-fffff: Main BIOS
>>> (d98) E820 table:
>>> (d98)  [00]: 00000000:00000000 - 00000000:000a0000: RAM
>>> (d98)  HOLE: 00000000:000a0000 - 00000000:000c0000
>>> (d98)  [01]: 00000000:000c0000 - 00000000:00100000: RESERVED
>>> (d98)  [02]: 00000000:00100000 - 00000000:78000000: RAM
>>> (d98)  HOLE: 00000000:78000000 - 00000000:fc000000
>>> (d98)  [03]: 00000000:fc000000 - 00000001:00000000: RESERVED
>>> (d98) Invoking SeaBIOS ...
>>> (d98) SeaBIOS (version
>>> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
>>> (d98)
>>> (d98) Found Xen hypervisor signature at 40000100
>>> (d98) Running on QEMU (i440fx)
>>> (d98) xen: copy e820...
>>> (d98) Relocating init from 0x000df619 to 0x77fae600 (size 71995)
>>> (d98) CPU Mhz=2660
>>> (d98) Found 13 PCI devices (max PCI bus is 00)
>>> (d98) Allocated Xen hypercall page at 77fff000
>>> (d98) Detected Xen v4.5-unstable
>>> (d98) xen: copy BIOS tables...
>>> (d98) Copying SMBIOS entry point from 0x00010010 to 0x000f0f40
>>> (d98) Copying MPTABLE from 0xfc001170/fc001180 to 0x000f0e40
>>> (d98) Copying PIR from 0x00010030 to 0x000f0dc0
>>> (d98) Copying ACPI RSDP from 0x000100b0 to 0x000f0d90
>>> (d98) Using pmtimer, ioport 0xb008
>>> (d98) Scan for VGA option rom
>>> (d98) Running option rom at c000:0003
>>> (XEN) stdvga.c:147:d98v0 entering stdvga and caching modes
>>> (d98) pmm call arg1=0
>>> (d98) Turning on vga text mode console
>>> (d98) SeaBIOS (version
>>> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
>>> (d98) Machine UUID f4cdeb74-0db1-4748-948d-42579a494120
>>> (d98) EHCI init on dev 00:1d.7 (regs=0xf9057020)
>>> (d98) Found 0 lpt ports
>>> (d98) Found 0 serial ports
>>> (d98) ATA controller 1 at 1f0/3f4/0 (irq 14 dev 9)
>>> (d98) ATA controller 2 at 170/374/0 (irq 15 dev 9)
>>> (d98) ata0-0: QEMU HARDDISK ATA-7 Hard-Disk (40720 MiBytes)
>>> (d98) Searching bootorder for: /pci@i0cf8/*@1,1/drive@0/disk@0
>>> (d98) DVD/CD [ata0-1: QEMU DVD-ROM ATAPI-4 DVD/CD]
>>> (d98) Searching bootorder for: /pci@i0cf8/*@1,1/drive@0/disk@1
>>> (d98) UHCI init on dev 00:1d.0 (io=c240)
>>> (d98) UHCI init on dev 00:1d.1 (io=c260)
>>> (d98) UHCI init on dev 00:1d.2 (io=c280)
>>> (d98) PS2 keyboard initialized
>>> (d98) All threads complete.
>>> (d98) Scan for option roms
>>> (d98) Running option rom at c980:0003
>>> (d98) pmm call arg1=1
>>> (d98) pmm call arg1=0
>>> (d98) pmm call arg1=1
>>> (d98) pmm call arg1=0
>>> (d98) Searching bootorder for: /pci@i0cf8/*@6
>>> (d98)
>>> (d98) Press F12 for boot menu.
>>> (d98)
>>> (d98) Searching bootorder for: HALT
>>> (d98) drive 0x000f0d40: PCHS=16383/16/63 translation=lba
>>> LCHS=1024/255/63 s=83394560
>>> (d98) Space available for UMB: ca800-ee800, f0000-f0ce0
>>> (d98) Returned 258048 bytes of ZoneHigh
>>> (d98) e820 map has 6 items:
>>> (d98)   0: 0000000000000000 - 000000000009fc00 = 1 RAM
>>> (d98)   1: 000000000009fc00 - 00000000000a0000 = 2 RESERVED
>>> (d98)   2: 00000000000f0000 - 0000000000100000 = 2 RESERVED
>>> (d98)   3: 0000000000100000 - 0000000077fff000 = 1 RAM
>>> (d98)   4: 0000000077fff000 - 0000000078000000 = 2 RESERVED
>>> (d98)   5: 00000000fc000000 - 0000000100000000 = 2 RESERVED
>>> (d98) enter handle_19:
>>> (d98)   NULL
>>> (d98) Booting from Hard Disk...
>>> (d98) Booting from 0000:7c00
>>> (XEN) d98: VIRIDIAN GUEST_OS_ID: vendor: 1 os: 4 major: 6 minor: 1 sp:
>>> 1 build: 1db1
>>> (XEN) d98: VIRIDIAN HYPERCALL: enabled: 1 pfn: 3ffff
>>> (XEN) d98v0: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffe
>>> (XEN) d98v1: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffd
>>> (XEN) irq.c:270: Dom98 PCI link 0 changed 5 -> 0
>>> (XEN) irq.c:270: Dom98 PCI link 1 changed 10 -> 0
>>> (XEN) irq.c:270: Dom98 PCI link 2 changed 11 -> 0
>>> (XEN) irq.c:270: Dom98 PCI link 3 changed 5 -> 0
>>> (XEN) irq.c:380: Dom98 callback via changed to GSI 24
>>> (d98) XEN|BUGCHECK: ====>
>>> (d98) XEN|BUGCHECK: 0000007A: FFFFF6FC000171C8 FFFFFFFFC0000185
>>> 000000001BD6A860 FFFF
>>> (d98) F80002E39000
>>> (d98) XEN|BUGCHECK: CONTEXT (FFFFF8800310E530):
>>> (d98) XEN|BUGCHECK: - GS = 002B
>>> (d98) XEN|BUGCHECK: - FS = 0053
>>> (d98) XEN|BUGCHECK: - ES = 002B
>>> (d98) XEN|BUGCHECK: - DS = 002B
>>> (d98) XEN|BUGCHECK: - SS = 0018
>>> (d98) XEN|BUGCHECK: - CS = 0010
>>> (d98) XEN|BUGCHECK: - EFLAGS = 00000086
>>> (d98) XEN|BUGCHECK: - RDI = 00000000000171C8
>>> (d98) XEN|BUGCHECK: - RSI = 00000000C0000185
>>> (d98) XEN|BUGCHECK: - RBX = 00000000038AC8F8
>>> (d98) XEN|BUGCHECK: - RDX = 0000000000000000
>>> (d98) XEN|BUGCHECK: - RCX = 000000000310E530
>>> (d98) XEN|BUGCHECK: - RAX = 000000002ECF4722
>>> (d98) XEN|BUGCHECK: - RBP = 000000001BD6A860
>>> (d98) XEN|BUGCHECK: - RIP = 00000000038A2A43
>>> (d98) XEN|BUGCHECK: - RSP = 000000000310E510
>>> (d98) XEN|BUGCHECK: - R8 = 0000000000000000
>>> (d98) XEN|BUGCHECK: - R9 = 0000000000000000
>>> (d98) XEN|BUGCHECK: - R10 = 0000000000000000
>>> (d98) XEN|BUGCHECK: - R11 = 0000000000000000
>>> (d98) XEN|BUGCHECK: - R12 = 000000000000007A
>>> (d98) XEN|BUGCHECK: - R13 = 0000000000000001
>>> (d98) XEN|BUGCHECK: - R14 = 0000000002E39000
>>> (d98) XEN|BUGCHECK: - R15 = 0000000002CBAC40
>>> (d98) XEN|BUGCHECK: STACK:
>>> (d98) XEN|BUGCHECK: 000000000310EA20: (0000000000000003
>>> 00000000038A50F0 00000000038A
>>> (d98) 4860 000000000000007A) xen.sys + 00000000000049AC
>>> (d98) XEN|BUGCHECK: 000000000310EA70: (00000000038AD0D0
>>> 0000000000000000 000000000000
>>> (d98) 0004 0000000002C83500) ntoskrnl.exe + 0000000000128585
>>> (d98) XEN|BUGCHECK: 000000000310EAA0: (00000000038AD0D0
>>> 0000000002C83500 000000000000
>>> (d98) 000F 0000000001780660) ntoskrnl.exe + 0000000000167C0D
>>> (d98) XEN|BUGCHECK: 000000000310F170: (0000000003816470
>>> 0000000002B4C8C1 000000000000
>>> (d98) 00FE 0000000000000000) ntoskrnl.exe + 0000000000075CC4
>>> (d98) XEN|BUGCHECK: 000000000310F1B0: (000000000000007A
>>> 00000000000171C8 00000000C000
>>> (d98) 0185 000000001BD6A860) ntoskrnl.exe + 00000000000E8752
>>> (d98) XEN|BUGCHECK: 000000000310F290: (00000000038163B0
>>> 000000000310F320 0000000002CB
>>> (d98) D540 00000000038163B0) ntoskrnl.exe + 000000000009C91F
>>> (d98) XEN|BUGCHECK: 000000000310F360: (0000000000000000
>>> 0000000000000008 00000000FFFF
>>> (d98) FFFF 00000000003500F0) ntoskrnl.exe + 00000000000831B9
>>> (d98) XEN|BUGCHECK: 000000000310F4C0: (0000000000000008
>>> 0000000002E39000 000000000000
>>> (d98) 0000 0000000000000000) ntoskrnl.exe + 0000000000073CEE
>>> (d98) XEN|BUGCHECK: 000000000310F658: (0000000002E5CFD5
>>> 0000000000000000 0000000003EB
>>> (d98) 8710 00000000FFFFFFFF) ntoskrnl.exe + 000000000042C000
>> If you need more tests/informations tell me and I'll post them.
>> Thanks for any reply and sorry for my bad english.
> Well, that tells me you had a 7A BSOD, which is a KERNEL_DATA_INPAGE_ERROR. The error status (param 2) was C0000185 so that's a STATUS_IO_DEVICE_ERROR. The documentation at http://msdn.microsoft.com/en-gb/library/windows/hardware/ff559211%28v=vs.85%29.aspx tells me that this means:
>
> "improper termination or defective cabling on SCSI devices or that two devices are trying to use the same IRQ."
>
> But you said you had xenvbd already installed so you'll be using a PV storage path. Is there any indication of problems with your storage?
>
>    Paul
DomUs disk are all raw files in local dom0 disks, raid1 with "LSI Logic 
/ Symbios Logic SAS2008 PCI-Express Fusion-MPT SAS-2" dom0 partitions 
are GTP and fs ext4.
Dom0 is wheezy with kernel is linux-image-3.16-0.bpo.2-amd64 version 
3.16.3-2~bpo70+1
No kern or syslog errors, only many of these warning that someone 
replied me that should not be a problem:
Oct 15 10:45:13 mtorMN01OU kernel: [773197.117518] xen:balloon: 
reserve_additional_memory: add_memory() failed: -17
DomU now see disk as xen pvdisk, on xenvif install probably still was 
full emulated disk even if xenvbd was installed successful before xenvif 
install (failed with BSOD)
The IRQ seems visible from xl dmesg output below, can you check them is 
have something wrong or strange, I see some of them "duplicate" but I 
not know if is correct.

DomU xl cfg:
> name='office1_w7'
> builder="hvm"
> memory=2048
> vcpus=2
> acpi_s3=0
> acpi_s4=0
> vif=['bridge=xenbr0,mac=00:16:3e:41:ae:8b']
> disk=['/mnt/vm/disks/office1_w7.disk1.xm,raw,hda,rw',',raw,hdb,ro,cdrom']
> boot='c'
> device_model_version="qemu-xen"
> viridian=1
> vnc=0
> keymap="it"
> on_crash="destroy"
> vga="qxl"
> spice=1
> spicehost='0.0.0.0'
> spiceport=6001
> spicedisable_ticketing=0
> spicepasswd="password"
> spicevdagent=1
> spice_clipboard_sharing=0
> spiceusbredirection=4
> soundhw="hda"
> localtime=1

If you need more tests/informations 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 Thu Oct 16 10:59:01 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 16 Oct 2014 10:59:01 +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 1Xeilo-0007QX-Vh; Thu, 16 Oct 2014 10:59:00 +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 1Xeiln-0007QR-Jx
	for win-pv-devel@lists.xenproject.org; Thu, 16 Oct 2014 10:58:59 +0000
Received: from [85.158.139.211:52696] by server-9.bemta-5.messagelabs.com id
	D8/29-20744-2F4AF345; Thu, 16 Oct 2014 10:58:58 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-2.tower-206.messagelabs.com!1413457136!11525858!1
X-Originating-IP: [74.125.82.51]
X-SpamReason: No, hits=2.2 required=7.0 tests=BIZ_TLD,BODY_RANDOM_LONG
X-StarScan-Received: 
X-StarScan-Version: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 15307 invoked from network); 16 Oct 2014 10:58:56 -0000
Received: from mail-wg0-f51.google.com (HELO mail-wg0-f51.google.com)
	(74.125.82.51)
	by server-2.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	16 Oct 2014 10:58:56 -0000
Received: by mail-wg0-f51.google.com with SMTP id b13so3378182wgh.34
	for <win-pv-devel@lists.xenproject.org>;
	Thu, 16 Oct 2014 03:58:56 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:message-id:date:from:user-agent:mime-version:to
	:subject:references:in-reply-to:content-type
	:content-transfer-encoding;
	bh=DuQaqTNMew1tvz4VqSZEdZKOh4QiufFxOde5tgCw0dw=;
	b=LAsxvdNBDsOQeDfgSdlrYt03woW9hW/vpFqKmDKVhicY5gK7HlC3hULSJhEekW+37D
	XfY13Fp5ciUW9T9YC0b24jcP+WyXgHL2oF1yYjnRir0aZVOUoa6xKpbPdokjNOIV1cB4
	dc7vowSncNGuQFVDmQdghBCI7gvrLJ/vXIQ8p6zbcfsLCaGtf7nl+UF1ckYTRXrTPZLX
	mIvvTUdlyw+akofuc8uLObQmlzWytWQnbO1g6HeDBiTgzY5lCYqDDdjEVXi2bc0ADt+P
	dGq8DuqE++WuSZVxKlLwiPDr3jHiFnWTeu1TCxt8Jk3eOh+T6kOlCDTMdGro72wSV4dc
	C/OQ==
X-Gm-Message-State: ALoCoQlkk0UGzgE02gCMK0lwkTOQ6RBNUUPeVabCAWgxuXk9Qh2yK/MMA0lz9Alp+Gun2/QzaqY8
X-Received: by 10.180.84.194 with SMTP id b2mr19877637wiz.57.1413457135674;
	Thu, 16 Oct 2014 03:58:55 -0700 (PDT)
Received: from [192.168.1.15] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by mx.google.com with ESMTPSA id
	om1sm26988916wjc.42.2014.10.16.03.58.53 for <multiple recipients>
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Thu, 16 Oct 2014 03:58:54 -0700 (PDT)
Message-ID: <543FA4F6.5090804@m2r.biz>
Date: Thu, 16 Oct 2014 12:59:02 +0200
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64;
	rv:24.0) Gecko/20100101 Thunderbird/24.6.0
MIME-Version: 1.0
To: Paul Durrant <Paul.Durrant@citrix.com>, 
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <543F887B.5030500@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111050FF@AMSPEX01CL01.citrite.net>
	<543F912C.8000504@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD01110526F@AMSPEX01CL01.citrite.net>
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD01110526F@AMSPEX01CL01.citrite.net>
Subject: Re: [win-pv-devel] Blue screen on xenvif install
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 16/10/2014 12:00, Paul Durrant ha scritto:
>> -----Original Message-----
>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>> Sent: 16 October 2014 10:35
>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>> Subject: Re: Blue screen on xenvif install
>>
>> Il 16/10/2014 10:59, Paul Durrant ha scritto:
>>>> -----Original Message-----
>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>> Sent: 16 October 2014 09:58
>>>> To: win-pv-devel@lists.xenproject.org
>>>> Cc: Paul Durrant
>>>> Subject: Blue screen on xenvif install
>>>>
>>>> Today I tried to install new winpv driver to other 3 windows 7 pro 64
>>>> bit domUs.
>>>> Days ago I installed them successful on one windows 7 pro 64 bit and one
>>>> windows 8.1 enterprise 64 bit.
>>>> On first domUs I tried to install them today I installed xenbus and
>>>> xenvbd successful but on xenvif install windows crashed with blue
>>>> screen, if I saw it correctly was an kernel in-page error or something
>>>> similar.
>>>> After reboot I retried to install xenvif but now always fails.
>>>>
>>> Sounds odd. Do you have a MEMORY.DMP?
>>>
>>>     Paul
>> Windows is setted to write dump of kernel memory on system error but
>> %systemroot%\memory.dmp is missed :(
>> I also checked the windows events log but I found only kernel-power as
>> critical that seems not contains useful data.
>>
>> I found probably useful data in xl dmesg (I copied all below from domU
>> start to xen bug):
>>> (d98) HVM Loader
>>> (d98) Detected Xen v4.5-unstable
>>> (d98) Xenbus rings @0xfeffc000, event channel 1
>>> (d98) System requested SeaBIOS
>>> (d98) CPU speed is 2660 MHz
>>> (d98) Relocating guest memory for lowmem MMIO space disabled
>>> (XEN) irq.c:270: Dom98 PCI link 0 changed 0 -> 5
>>> (d98) PCI-ISA link 0 routed to IRQ5
>>> (XEN) irq.c:270: Dom98 PCI link 1 changed 0 -> 10
>>> (d98) PCI-ISA link 1 routed to IRQ10
>>> (XEN) irq.c:270: Dom98 PCI link 2 changed 0 -> 11
>>> (d98) PCI-ISA link 2 routed to IRQ11
>>> (XEN) irq.c:270: Dom98 PCI link 3 changed 0 -> 5
>>> (d98) PCI-ISA link 3 routed to IRQ5
>>> (d98) pci dev 01:3 INTA->IRQ10
>>> (d98) pci dev 02:0 INTA->IRQ11
>>> (d98) pci dev 03:0 INTA->IRQ5
>>> (d98) pci dev 04:0 INTA->IRQ5
>>> (d98) pci dev 05:0 INTA->IRQ10
>>> (d98) pci dev 06:0 INTA->IRQ11
>>> (d98) pci dev 1d:0 INTA->IRQ10
>>> (d98) pci dev 1d:1 INTB->IRQ11
>>> (d98) pci dev 1d:2 INTC->IRQ5
>>> (d98) pci dev 1d:7 INTD->IRQ5
>>> (d98) No RAM in high memory; setting high_mem resource base to
>> 100000000
>>> (d98) pci dev 05:0 bar 10 size 004000000: 0f0000000
>>> (d98) pci dev 05:0 bar 14 size 004000000: 0f4000000
>>> (d98) pci dev 02:0 bar 14 size 001000000: 0f8000008
>>> (d98) pci dev 06:0 bar 30 size 000040000: 0f9000000
>>> (d98) pci dev 05:0 bar 30 size 000010000: 0f9040000
>>> (d98) pci dev 03:0 bar 10 size 000004000: 0f9050000
>>> (d98) pci dev 05:0 bar 18 size 000002000: 0f9054000
>>> (d98) pci dev 04:0 bar 14 size 000001000: 0f9056000
>>> (d98) pci dev 1d:7 bar 10 size 000001000: 0f9057000
>>> (d98) pci dev 02:0 bar 10 size 000000100: 00000c001
>>> (d98) pci dev 06:0 bar 10 size 000000100: 00000c101
>>> (d98) pci dev 06:0 bar 14 size 000000100: 0f9058000
>>> (d98) pci dev 04:0 bar 10 size 000000020: 00000c201
>>> (d98) pci dev 05:0 bar 1c size 000000020: 00000c221
>>> (d98) pci dev 1d:0 bar 20 size 000000020: 00000c241
>>> (d98) pci dev 1d:1 bar 20 size 000000020: 00000c261
>>> (d98) pci dev 1d:2 bar 20 size 000000020: 00000c281
>>> (d98) pci dev 01:1 bar 20 size 000000010: 00000c2a1
>>> (d98) Multiprocessor initialisation:
>>> (d98)  - CPU0 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8] ...
>>> done.
>>> (d98)  - CPU1 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8] ...
>>> done.
>>> (d98) Testing HVM environment:
>>> (d98)  - REP INSB across page boundaries ... passed
>>> (d98)  - GS base MSRs and SWAPGS ... passed
>>> (d98) Passed 2 of 2 tests
>>> (d98) Writing SMBIOS tables ...
>>> (d98) Loading SeaBIOS ...
>>> (d98) Creating MP tables ...
>>> (d98) Loading ACPI ...
>>> (d98) S3 disabled
>>> (d98) S4 disabled
>>> (d98) vm86 TSS at fc00a100
>>> (d98) BIOS map:
>>> (d98)  10000-100d3: Scratch space
>>> (d98)  c0000-fffff: Main BIOS
>>> (d98) E820 table:
>>> (d98)  [00]: 00000000:00000000 - 00000000:000a0000: RAM
>>> (d98)  HOLE: 00000000:000a0000 - 00000000:000c0000
>>> (d98)  [01]: 00000000:000c0000 - 00000000:00100000: RESERVED
>>> (d98)  [02]: 00000000:00100000 - 00000000:78000000: RAM
>>> (d98)  HOLE: 00000000:78000000 - 00000000:fc000000
>>> (d98)  [03]: 00000000:fc000000 - 00000001:00000000: RESERVED
>>> (d98) Invoking SeaBIOS ...
>>> (d98) SeaBIOS (version
>>> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
>>> (d98)
>>> (d98) Found Xen hypervisor signature at 40000100
>>> (d98) Running on QEMU (i440fx)
>>> (d98) xen: copy e820...
>>> (d98) Relocating init from 0x000df619 to 0x77fae600 (size 71995)
>>> (d98) CPU Mhz=2660
>>> (d98) Found 13 PCI devices (max PCI bus is 00)
>>> (d98) Allocated Xen hypercall page at 77fff000
>>> (d98) Detected Xen v4.5-unstable
>>> (d98) xen: copy BIOS tables...
>>> (d98) Copying SMBIOS entry point from 0x00010010 to 0x000f0f40
>>> (d98) Copying MPTABLE from 0xfc001170/fc001180 to 0x000f0e40
>>> (d98) Copying PIR from 0x00010030 to 0x000f0dc0
>>> (d98) Copying ACPI RSDP from 0x000100b0 to 0x000f0d90
>>> (d98) Using pmtimer, ioport 0xb008
>>> (d98) Scan for VGA option rom
>>> (d98) Running option rom at c000:0003
>>> (XEN) stdvga.c:147:d98v0 entering stdvga and caching modes
>>> (d98) pmm call arg1=0
>>> (d98) Turning on vga text mode console
>>> (d98) SeaBIOS (version
>>> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
>>> (d98) Machine UUID f4cdeb74-0db1-4748-948d-42579a494120
>>> (d98) EHCI init on dev 00:1d.7 (regs=0xf9057020)
>>> (d98) Found 0 lpt ports
>>> (d98) Found 0 serial ports
>>> (d98) ATA controller 1 at 1f0/3f4/0 (irq 14 dev 9)
>>> (d98) ATA controller 2 at 170/374/0 (irq 15 dev 9)
>>> (d98) ata0-0: QEMU HARDDISK ATA-7 Hard-Disk (40720 MiBytes)
>>> (d98) Searching bootorder for: /pci@i0cf8/*@1,1/drive@0/disk@0
>>> (d98) DVD/CD [ata0-1: QEMU DVD-ROM ATAPI-4 DVD/CD]
>>> (d98) Searching bootorder for: /pci@i0cf8/*@1,1/drive@0/disk@1
>>> (d98) UHCI init on dev 00:1d.0 (io=c240)
>>> (d98) UHCI init on dev 00:1d.1 (io=c260)
>>> (d98) UHCI init on dev 00:1d.2 (io=c280)
>>> (d98) PS2 keyboard initialized
>>> (d98) All threads complete.
>>> (d98) Scan for option roms
>>> (d98) Running option rom at c980:0003
>>> (d98) pmm call arg1=1
>>> (d98) pmm call arg1=0
>>> (d98) pmm call arg1=1
>>> (d98) pmm call arg1=0
>>> (d98) Searching bootorder for: /pci@i0cf8/*@6
>>> (d98)
>>> (d98) Press F12 for boot menu.
>>> (d98)
>>> (d98) Searching bootorder for: HALT
>>> (d98) drive 0x000f0d40: PCHS=16383/16/63 translation=lba
>>> LCHS=1024/255/63 s=83394560
>>> (d98) Space available for UMB: ca800-ee800, f0000-f0ce0
>>> (d98) Returned 258048 bytes of ZoneHigh
>>> (d98) e820 map has 6 items:
>>> (d98)   0: 0000000000000000 - 000000000009fc00 = 1 RAM
>>> (d98)   1: 000000000009fc00 - 00000000000a0000 = 2 RESERVED
>>> (d98)   2: 00000000000f0000 - 0000000000100000 = 2 RESERVED
>>> (d98)   3: 0000000000100000 - 0000000077fff000 = 1 RAM
>>> (d98)   4: 0000000077fff000 - 0000000078000000 = 2 RESERVED
>>> (d98)   5: 00000000fc000000 - 0000000100000000 = 2 RESERVED
>>> (d98) enter handle_19:
>>> (d98)   NULL
>>> (d98) Booting from Hard Disk...
>>> (d98) Booting from 0000:7c00
>>> (XEN) d98: VIRIDIAN GUEST_OS_ID: vendor: 1 os: 4 major: 6 minor: 1 sp:
>>> 1 build: 1db1
>>> (XEN) d98: VIRIDIAN HYPERCALL: enabled: 1 pfn: 3ffff
>>> (XEN) d98v0: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffe
>>> (XEN) d98v1: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffd
>>> (XEN) irq.c:270: Dom98 PCI link 0 changed 5 -> 0
>>> (XEN) irq.c:270: Dom98 PCI link 1 changed 10 -> 0
>>> (XEN) irq.c:270: Dom98 PCI link 2 changed 11 -> 0
>>> (XEN) irq.c:270: Dom98 PCI link 3 changed 5 -> 0
>>> (XEN) irq.c:380: Dom98 callback via changed to GSI 24
>>> (d98) XEN|BUGCHECK: ====>
>>> (d98) XEN|BUGCHECK: 0000007A: FFFFF6FC000171C8 FFFFFFFFC0000185
>>> 000000001BD6A860 FFFF
>>> (d98) F80002E39000
>>> (d98) XEN|BUGCHECK: CONTEXT (FFFFF8800310E530):
>>> (d98) XEN|BUGCHECK: - GS = 002B
>>> (d98) XEN|BUGCHECK: - FS = 0053
>>> (d98) XEN|BUGCHECK: - ES = 002B
>>> (d98) XEN|BUGCHECK: - DS = 002B
>>> (d98) XEN|BUGCHECK: - SS = 0018
>>> (d98) XEN|BUGCHECK: - CS = 0010
>>> (d98) XEN|BUGCHECK: - EFLAGS = 00000086
>>> (d98) XEN|BUGCHECK: - RDI = 00000000000171C8
>>> (d98) XEN|BUGCHECK: - RSI = 00000000C0000185
>>> (d98) XEN|BUGCHECK: - RBX = 00000000038AC8F8
>>> (d98) XEN|BUGCHECK: - RDX = 0000000000000000
>>> (d98) XEN|BUGCHECK: - RCX = 000000000310E530
>>> (d98) XEN|BUGCHECK: - RAX = 000000002ECF4722
>>> (d98) XEN|BUGCHECK: - RBP = 000000001BD6A860
>>> (d98) XEN|BUGCHECK: - RIP = 00000000038A2A43
>>> (d98) XEN|BUGCHECK: - RSP = 000000000310E510
>>> (d98) XEN|BUGCHECK: - R8 = 0000000000000000
>>> (d98) XEN|BUGCHECK: - R9 = 0000000000000000
>>> (d98) XEN|BUGCHECK: - R10 = 0000000000000000
>>> (d98) XEN|BUGCHECK: - R11 = 0000000000000000
>>> (d98) XEN|BUGCHECK: - R12 = 000000000000007A
>>> (d98) XEN|BUGCHECK: - R13 = 0000000000000001
>>> (d98) XEN|BUGCHECK: - R14 = 0000000002E39000
>>> (d98) XEN|BUGCHECK: - R15 = 0000000002CBAC40
>>> (d98) XEN|BUGCHECK: STACK:
>>> (d98) XEN|BUGCHECK: 000000000310EA20: (0000000000000003
>>> 00000000038A50F0 00000000038A
>>> (d98) 4860 000000000000007A) xen.sys + 00000000000049AC
>>> (d98) XEN|BUGCHECK: 000000000310EA70: (00000000038AD0D0
>>> 0000000000000000 000000000000
>>> (d98) 0004 0000000002C83500) ntoskrnl.exe + 0000000000128585
>>> (d98) XEN|BUGCHECK: 000000000310EAA0: (00000000038AD0D0
>>> 0000000002C83500 000000000000
>>> (d98) 000F 0000000001780660) ntoskrnl.exe + 0000000000167C0D
>>> (d98) XEN|BUGCHECK: 000000000310F170: (0000000003816470
>>> 0000000002B4C8C1 000000000000
>>> (d98) 00FE 0000000000000000) ntoskrnl.exe + 0000000000075CC4
>>> (d98) XEN|BUGCHECK: 000000000310F1B0: (000000000000007A
>>> 00000000000171C8 00000000C000
>>> (d98) 0185 000000001BD6A860) ntoskrnl.exe + 00000000000E8752
>>> (d98) XEN|BUGCHECK: 000000000310F290: (00000000038163B0
>>> 000000000310F320 0000000002CB
>>> (d98) D540 00000000038163B0) ntoskrnl.exe + 000000000009C91F
>>> (d98) XEN|BUGCHECK: 000000000310F360: (0000000000000000
>>> 0000000000000008 00000000FFFF
>>> (d98) FFFF 00000000003500F0) ntoskrnl.exe + 00000000000831B9
>>> (d98) XEN|BUGCHECK: 000000000310F4C0: (0000000000000008
>>> 0000000002E39000 000000000000
>>> (d98) 0000 0000000000000000) ntoskrnl.exe + 0000000000073CEE
>>> (d98) XEN|BUGCHECK: 000000000310F658: (0000000002E5CFD5
>>> 0000000000000000 0000000003EB
>>> (d98) 8710 00000000FFFFFFFF) ntoskrnl.exe + 000000000042C000
>> If you need more tests/informations tell me and I'll post them.
>> Thanks for any reply and sorry for my bad english.
> Well, that tells me you had a 7A BSOD, which is a KERNEL_DATA_INPAGE_ERROR. The error status (param 2) was C0000185 so that's a STATUS_IO_DEVICE_ERROR. The documentation at http://msdn.microsoft.com/en-gb/library/windows/hardware/ff559211%28v=vs.85%29.aspx tells me that this means:
>
> "improper termination or defective cabling on SCSI devices or that two devices are trying to use the same IRQ."
>
> But you said you had xenvbd already installed so you'll be using a PV storage path. Is there any indication of problems with your storage?
>
>    Paul
DomUs disk are all raw files in local dom0 disks, raid1 with "LSI Logic 
/ Symbios Logic SAS2008 PCI-Express Fusion-MPT SAS-2" dom0 partitions 
are GTP and fs ext4.
Dom0 is wheezy with kernel is linux-image-3.16-0.bpo.2-amd64 version 
3.16.3-2~bpo70+1
No kern or syslog errors, only many of these warning that someone 
replied me that should not be a problem:
Oct 15 10:45:13 mtorMN01OU kernel: [773197.117518] xen:balloon: 
reserve_additional_memory: add_memory() failed: -17
DomU now see disk as xen pvdisk, on xenvif install probably still was 
full emulated disk even if xenvbd was installed successful before xenvif 
install (failed with BSOD)
The IRQ seems visible from xl dmesg output below, can you check them is 
have something wrong or strange, I see some of them "duplicate" but I 
not know if is correct.

DomU xl cfg:
> name='office1_w7'
> builder="hvm"
> memory=2048
> vcpus=2
> acpi_s3=0
> acpi_s4=0
> vif=['bridge=xenbr0,mac=00:16:3e:41:ae:8b']
> disk=['/mnt/vm/disks/office1_w7.disk1.xm,raw,hda,rw',',raw,hdb,ro,cdrom']
> boot='c'
> device_model_version="qemu-xen"
> viridian=1
> vnc=0
> keymap="it"
> on_crash="destroy"
> vga="qxl"
> spice=1
> spicehost='0.0.0.0'
> spiceport=6001
> spicedisable_ticketing=0
> spicepasswd="password"
> spicevdagent=1
> spice_clipboard_sharing=0
> spiceusbredirection=4
> soundhw="hda"
> localtime=1

If you need more tests/informations 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 Thu Oct 16 11:04:55 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 16 Oct 2014 11:04:55 +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 1XeirX-0007fh-0Y; Thu, 16 Oct 2014 11:04:55 +0000
Received: from mail6.bemta4.messagelabs.com ([85.158.143.247])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <Paul.Durrant@citrix.com>) id 1XeirV-0007fc-LW
	for win-pv-devel@lists.xenproject.org; Thu, 16 Oct 2014 11:04:53 +0000
Received: from [85.158.143.35] by server-2.bemta-4.messagelabs.com id
	41/C0-10419-556AF345; Thu, 16 Oct 2014 11:04:53 +0000
X-Env-Sender: Paul.Durrant@citrix.com
X-Msg-Ref: server-9.tower-21.messagelabs.com!1413457491!13367881!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: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 7261 invoked from network); 16 Oct 2014 11:04:51 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-9.tower-21.messagelabs.com with RC4-SHA encrypted SMTP;
	16 Oct 2014 11:04:51 -0000
X-IronPort-AV: E=Sophos;i="5.04,731,1406592000"; d="scan'208";a="26012942"
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: Blue screen on xenvif install
Thread-Index: AQHP6R88TE2eCcEtSU6laq0K5grY5pwybJlQ///obQCAACb2gP//8KIAgAAjAsA=
Date: Thu, 16 Oct 2014 11:04:50 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD0111053EA@AMSPEX01CL01.citrite.net>
References: <543F887B.5030500@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111050FF@AMSPEX01CL01.citrite.net>
	<543F912C.8000504@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD01110526F@AMSPEX01CL01.citrite.net>
	<543FA4F6.5090804@m2r.biz>
In-Reply-To: <543FA4F6.5090804@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] Blue screen on xenvif install
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: 16 October 2014 11:59
> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> Subject: Re: Blue screen on xenvif install
> 
> Il 16/10/2014 12:00, Paul Durrant ha scritto:
> >> -----Original Message-----
> >> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >> Sent: 16 October 2014 10:35
> >> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >> Subject: Re: Blue screen on xenvif install
> >>
> >> Il 16/10/2014 10:59, Paul Durrant ha scritto:
> >>>> -----Original Message-----
> >>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >>>> Sent: 16 October 2014 09:58
> >>>> To: win-pv-devel@lists.xenproject.org
> >>>> Cc: Paul Durrant
> >>>> Subject: Blue screen on xenvif install
> >>>>
> >>>> Today I tried to install new winpv driver to other 3 windows 7 pro 64
> >>>> bit domUs.
> >>>> Days ago I installed them successful on one windows 7 pro 64 bit and
> one
> >>>> windows 8.1 enterprise 64 bit.
> >>>> On first domUs I tried to install them today I installed xenbus and
> >>>> xenvbd successful but on xenvif install windows crashed with blue
> >>>> screen, if I saw it correctly was an kernel in-page error or something
> >>>> similar.
> >>>> After reboot I retried to install xenvif but now always fails.
> >>>>
> >>> Sounds odd. Do you have a MEMORY.DMP?
> >>>
> >>>     Paul
> >> Windows is setted to write dump of kernel memory on system error but
> >> %systemroot%\memory.dmp is missed :(
> >> I also checked the windows events log but I found only kernel-power as
> >> critical that seems not contains useful data.
> >>
> >> I found probably useful data in xl dmesg (I copied all below from domU
> >> start to xen bug):
> >>> (d98) HVM Loader
> >>> (d98) Detected Xen v4.5-unstable
> >>> (d98) Xenbus rings @0xfeffc000, event channel 1
> >>> (d98) System requested SeaBIOS
> >>> (d98) CPU speed is 2660 MHz
> >>> (d98) Relocating guest memory for lowmem MMIO space disabled
> >>> (XEN) irq.c:270: Dom98 PCI link 0 changed 0 -> 5
> >>> (d98) PCI-ISA link 0 routed to IRQ5
> >>> (XEN) irq.c:270: Dom98 PCI link 1 changed 0 -> 10
> >>> (d98) PCI-ISA link 1 routed to IRQ10
> >>> (XEN) irq.c:270: Dom98 PCI link 2 changed 0 -> 11
> >>> (d98) PCI-ISA link 2 routed to IRQ11
> >>> (XEN) irq.c:270: Dom98 PCI link 3 changed 0 -> 5
> >>> (d98) PCI-ISA link 3 routed to IRQ5
> >>> (d98) pci dev 01:3 INTA->IRQ10
> >>> (d98) pci dev 02:0 INTA->IRQ11
> >>> (d98) pci dev 03:0 INTA->IRQ5
> >>> (d98) pci dev 04:0 INTA->IRQ5
> >>> (d98) pci dev 05:0 INTA->IRQ10
> >>> (d98) pci dev 06:0 INTA->IRQ11
> >>> (d98) pci dev 1d:0 INTA->IRQ10
> >>> (d98) pci dev 1d:1 INTB->IRQ11
> >>> (d98) pci dev 1d:2 INTC->IRQ5
> >>> (d98) pci dev 1d:7 INTD->IRQ5
> >>> (d98) No RAM in high memory; setting high_mem resource base to
> >> 100000000
> >>> (d98) pci dev 05:0 bar 10 size 004000000: 0f0000000
> >>> (d98) pci dev 05:0 bar 14 size 004000000: 0f4000000
> >>> (d98) pci dev 02:0 bar 14 size 001000000: 0f8000008
> >>> (d98) pci dev 06:0 bar 30 size 000040000: 0f9000000
> >>> (d98) pci dev 05:0 bar 30 size 000010000: 0f9040000
> >>> (d98) pci dev 03:0 bar 10 size 000004000: 0f9050000
> >>> (d98) pci dev 05:0 bar 18 size 000002000: 0f9054000
> >>> (d98) pci dev 04:0 bar 14 size 000001000: 0f9056000
> >>> (d98) pci dev 1d:7 bar 10 size 000001000: 0f9057000
> >>> (d98) pci dev 02:0 bar 10 size 000000100: 00000c001
> >>> (d98) pci dev 06:0 bar 10 size 000000100: 00000c101
> >>> (d98) pci dev 06:0 bar 14 size 000000100: 0f9058000
> >>> (d98) pci dev 04:0 bar 10 size 000000020: 00000c201
> >>> (d98) pci dev 05:0 bar 1c size 000000020: 00000c221
> >>> (d98) pci dev 1d:0 bar 20 size 000000020: 00000c241
> >>> (d98) pci dev 1d:1 bar 20 size 000000020: 00000c261
> >>> (d98) pci dev 1d:2 bar 20 size 000000020: 00000c281
> >>> (d98) pci dev 01:1 bar 20 size 000000010: 00000c2a1
> >>> (d98) Multiprocessor initialisation:
> >>> (d98)  - CPU0 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8] ...
> >>> done.
> >>> (d98)  - CPU1 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8] ...
> >>> done.
> >>> (d98) Testing HVM environment:
> >>> (d98)  - REP INSB across page boundaries ... passed
> >>> (d98)  - GS base MSRs and SWAPGS ... passed
> >>> (d98) Passed 2 of 2 tests
> >>> (d98) Writing SMBIOS tables ...
> >>> (d98) Loading SeaBIOS ...
> >>> (d98) Creating MP tables ...
> >>> (d98) Loading ACPI ...
> >>> (d98) S3 disabled
> >>> (d98) S4 disabled
> >>> (d98) vm86 TSS at fc00a100
> >>> (d98) BIOS map:
> >>> (d98)  10000-100d3: Scratch space
> >>> (d98)  c0000-fffff: Main BIOS
> >>> (d98) E820 table:
> >>> (d98)  [00]: 00000000:00000000 - 00000000:000a0000: RAM
> >>> (d98)  HOLE: 00000000:000a0000 - 00000000:000c0000
> >>> (d98)  [01]: 00000000:000c0000 - 00000000:00100000: RESERVED
> >>> (d98)  [02]: 00000000:00100000 - 00000000:78000000: RAM
> >>> (d98)  HOLE: 00000000:78000000 - 00000000:fc000000
> >>> (d98)  [03]: 00000000:fc000000 - 00000001:00000000: RESERVED
> >>> (d98) Invoking SeaBIOS ...
> >>> (d98) SeaBIOS (version
> >>> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
> >>> (d98)
> >>> (d98) Found Xen hypervisor signature at 40000100
> >>> (d98) Running on QEMU (i440fx)
> >>> (d98) xen: copy e820...
> >>> (d98) Relocating init from 0x000df619 to 0x77fae600 (size 71995)
> >>> (d98) CPU Mhz=2660
> >>> (d98) Found 13 PCI devices (max PCI bus is 00)
> >>> (d98) Allocated Xen hypercall page at 77fff000
> >>> (d98) Detected Xen v4.5-unstable
> >>> (d98) xen: copy BIOS tables...
> >>> (d98) Copying SMBIOS entry point from 0x00010010 to 0x000f0f40
> >>> (d98) Copying MPTABLE from 0xfc001170/fc001180 to 0x000f0e40
> >>> (d98) Copying PIR from 0x00010030 to 0x000f0dc0
> >>> (d98) Copying ACPI RSDP from 0x000100b0 to 0x000f0d90
> >>> (d98) Using pmtimer, ioport 0xb008
> >>> (d98) Scan for VGA option rom
> >>> (d98) Running option rom at c000:0003
> >>> (XEN) stdvga.c:147:d98v0 entering stdvga and caching modes
> >>> (d98) pmm call arg1=0
> >>> (d98) Turning on vga text mode console
> >>> (d98) SeaBIOS (version
> >>> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
> >>> (d98) Machine UUID f4cdeb74-0db1-4748-948d-42579a494120
> >>> (d98) EHCI init on dev 00:1d.7 (regs=0xf9057020)
> >>> (d98) Found 0 lpt ports
> >>> (d98) Found 0 serial ports
> >>> (d98) ATA controller 1 at 1f0/3f4/0 (irq 14 dev 9)
> >>> (d98) ATA controller 2 at 170/374/0 (irq 15 dev 9)
> >>> (d98) ata0-0: QEMU HARDDISK ATA-7 Hard-Disk (40720 MiBytes)
> >>> (d98) Searching bootorder for: /pci@i0cf8/*@1,1/drive@0/disk@0
> >>> (d98) DVD/CD [ata0-1: QEMU DVD-ROM ATAPI-4 DVD/CD]
> >>> (d98) Searching bootorder for: /pci@i0cf8/*@1,1/drive@0/disk@1
> >>> (d98) UHCI init on dev 00:1d.0 (io=c240)
> >>> (d98) UHCI init on dev 00:1d.1 (io=c260)
> >>> (d98) UHCI init on dev 00:1d.2 (io=c280)
> >>> (d98) PS2 keyboard initialized
> >>> (d98) All threads complete.
> >>> (d98) Scan for option roms
> >>> (d98) Running option rom at c980:0003
> >>> (d98) pmm call arg1=1
> >>> (d98) pmm call arg1=0
> >>> (d98) pmm call arg1=1
> >>> (d98) pmm call arg1=0
> >>> (d98) Searching bootorder for: /pci@i0cf8/*@6
> >>> (d98)
> >>> (d98) Press F12 for boot menu.
> >>> (d98)
> >>> (d98) Searching bootorder for: HALT
> >>> (d98) drive 0x000f0d40: PCHS=16383/16/63 translation=lba
> >>> LCHS=1024/255/63 s=83394560
> >>> (d98) Space available for UMB: ca800-ee800, f0000-f0ce0
> >>> (d98) Returned 258048 bytes of ZoneHigh
> >>> (d98) e820 map has 6 items:
> >>> (d98)   0: 0000000000000000 - 000000000009fc00 = 1 RAM
> >>> (d98)   1: 000000000009fc00 - 00000000000a0000 = 2 RESERVED
> >>> (d98)   2: 00000000000f0000 - 0000000000100000 = 2 RESERVED
> >>> (d98)   3: 0000000000100000 - 0000000077fff000 = 1 RAM
> >>> (d98)   4: 0000000077fff000 - 0000000078000000 = 2 RESERVED
> >>> (d98)   5: 00000000fc000000 - 0000000100000000 = 2 RESERVED
> >>> (d98) enter handle_19:
> >>> (d98)   NULL
> >>> (d98) Booting from Hard Disk...
> >>> (d98) Booting from 0000:7c00
> >>> (XEN) d98: VIRIDIAN GUEST_OS_ID: vendor: 1 os: 4 major: 6 minor: 1 sp:
> >>> 1 build: 1db1
> >>> (XEN) d98: VIRIDIAN HYPERCALL: enabled: 1 pfn: 3ffff
> >>> (XEN) d98v0: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffe
> >>> (XEN) d98v1: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffd
> >>> (XEN) irq.c:270: Dom98 PCI link 0 changed 5 -> 0
> >>> (XEN) irq.c:270: Dom98 PCI link 1 changed 10 -> 0
> >>> (XEN) irq.c:270: Dom98 PCI link 2 changed 11 -> 0
> >>> (XEN) irq.c:270: Dom98 PCI link 3 changed 5 -> 0
> >>> (XEN) irq.c:380: Dom98 callback via changed to GSI 24
> >>> (d98) XEN|BUGCHECK: ====>
> >>> (d98) XEN|BUGCHECK: 0000007A: FFFFF6FC000171C8 FFFFFFFFC0000185
> >>> 000000001BD6A860 FFFF
> >>> (d98) F80002E39000
> >>> (d98) XEN|BUGCHECK: CONTEXT (FFFFF8800310E530):
> >>> (d98) XEN|BUGCHECK: - GS = 002B
> >>> (d98) XEN|BUGCHECK: - FS = 0053
> >>> (d98) XEN|BUGCHECK: - ES = 002B
> >>> (d98) XEN|BUGCHECK: - DS = 002B
> >>> (d98) XEN|BUGCHECK: - SS = 0018
> >>> (d98) XEN|BUGCHECK: - CS = 0010
> >>> (d98) XEN|BUGCHECK: - EFLAGS = 00000086
> >>> (d98) XEN|BUGCHECK: - RDI = 00000000000171C8
> >>> (d98) XEN|BUGCHECK: - RSI = 00000000C0000185
> >>> (d98) XEN|BUGCHECK: - RBX = 00000000038AC8F8
> >>> (d98) XEN|BUGCHECK: - RDX = 0000000000000000
> >>> (d98) XEN|BUGCHECK: - RCX = 000000000310E530
> >>> (d98) XEN|BUGCHECK: - RAX = 000000002ECF4722
> >>> (d98) XEN|BUGCHECK: - RBP = 000000001BD6A860
> >>> (d98) XEN|BUGCHECK: - RIP = 00000000038A2A43
> >>> (d98) XEN|BUGCHECK: - RSP = 000000000310E510
> >>> (d98) XEN|BUGCHECK: - R8 = 0000000000000000
> >>> (d98) XEN|BUGCHECK: - R9 = 0000000000000000
> >>> (d98) XEN|BUGCHECK: - R10 = 0000000000000000
> >>> (d98) XEN|BUGCHECK: - R11 = 0000000000000000
> >>> (d98) XEN|BUGCHECK: - R12 = 000000000000007A
> >>> (d98) XEN|BUGCHECK: - R13 = 0000000000000001
> >>> (d98) XEN|BUGCHECK: - R14 = 0000000002E39000
> >>> (d98) XEN|BUGCHECK: - R15 = 0000000002CBAC40
> >>> (d98) XEN|BUGCHECK: STACK:
> >>> (d98) XEN|BUGCHECK: 000000000310EA20: (0000000000000003
> >>> 00000000038A50F0 00000000038A
> >>> (d98) 4860 000000000000007A) xen.sys + 00000000000049AC
> >>> (d98) XEN|BUGCHECK: 000000000310EA70: (00000000038AD0D0
> >>> 0000000000000000 000000000000
> >>> (d98) 0004 0000000002C83500) ntoskrnl.exe + 0000000000128585
> >>> (d98) XEN|BUGCHECK: 000000000310EAA0: (00000000038AD0D0
> >>> 0000000002C83500 000000000000
> >>> (d98) 000F 0000000001780660) ntoskrnl.exe + 0000000000167C0D
> >>> (d98) XEN|BUGCHECK: 000000000310F170: (0000000003816470
> >>> 0000000002B4C8C1 000000000000
> >>> (d98) 00FE 0000000000000000) ntoskrnl.exe + 0000000000075CC4
> >>> (d98) XEN|BUGCHECK: 000000000310F1B0: (000000000000007A
> >>> 00000000000171C8 00000000C000
> >>> (d98) 0185 000000001BD6A860) ntoskrnl.exe + 00000000000E8752
> >>> (d98) XEN|BUGCHECK: 000000000310F290: (00000000038163B0
> >>> 000000000310F320 0000000002CB
> >>> (d98) D540 00000000038163B0) ntoskrnl.exe + 000000000009C91F
> >>> (d98) XEN|BUGCHECK: 000000000310F360: (0000000000000000
> >>> 0000000000000008 00000000FFFF
> >>> (d98) FFFF 00000000003500F0) ntoskrnl.exe + 00000000000831B9
> >>> (d98) XEN|BUGCHECK: 000000000310F4C0: (0000000000000008
> >>> 0000000002E39000 000000000000
> >>> (d98) 0000 0000000000000000) ntoskrnl.exe + 0000000000073CEE
> >>> (d98) XEN|BUGCHECK: 000000000310F658: (0000000002E5CFD5
> >>> 0000000000000000 0000000003EB
> >>> (d98) 8710 00000000FFFFFFFF) ntoskrnl.exe + 000000000042C000
> >> If you need more tests/informations tell me and I'll post them.
> >> Thanks for any reply and sorry for my bad english.
> > Well, that tells me you had a 7A BSOD, which is a
> KERNEL_DATA_INPAGE_ERROR. The error status (param 2) was C0000185 so
> that's a STATUS_IO_DEVICE_ERROR. The documentation at
> http://msdn.microsoft.com/en-
> gb/library/windows/hardware/ff559211%28v=vs.85%29.aspx tells me that
> this means:
> >
> > "improper termination or defective cabling on SCSI devices or that two
> devices are trying to use the same IRQ."
> >
> > But you said you had xenvbd already installed so you'll be using a PV
> storage path. Is there any indication of problems with your storage?
> >
> >    Paul
> DomUs disk are all raw files in local dom0 disks, raid1 with "LSI Logic
> / Symbios Logic SAS2008 PCI-Express Fusion-MPT SAS-2" dom0 partitions
> are GTP and fs ext4.
> Dom0 is wheezy with kernel is linux-image-3.16-0.bpo.2-amd64 version
> 3.16.3-2~bpo70+1
> No kern or syslog errors, only many of these warning that someone
> replied me that should not be a problem:
> Oct 15 10:45:13 mtorMN01OU kernel: [773197.117518] xen:balloon:
> reserve_additional_memory: add_memory() failed: -17
> DomU now see disk as xen pvdisk, on xenvif install probably still was
> full emulated disk even if xenvbd was installed successful before xenvif
> install (failed with BSOD)
> The IRQ seems visible from xl dmesg output below, can you check them is
> have something wrong or strange, I see some of them "duplicate" but I
> not know if is correct.
> 
> DomU xl cfg:
> > name='office1_w7'
> > builder="hvm"
> > memory=2048
> > vcpus=2
> > acpi_s3=0
> > acpi_s4=0
> > vif=['bridge=xenbr0,mac=00:16:3e:41:ae:8b']
> >
> disk=['/mnt/vm/disks/office1_w7.disk1.xm,raw,hda,rw',',raw,hdb,ro,cdrom'
> ]
> > boot='c'
> > device_model_version="qemu-xen"
> > viridian=1
> > vnc=0
> > keymap="it"
> > on_crash="destroy"
> > vga="qxl"
> > spice=1
> > spicehost='0.0.0.0'
> > spiceport=6001
> > spicedisable_ticketing=0
> > spicepasswd="password"
> > spicevdagent=1
> > spice_clipboard_sharing=0
> > spiceusbredirection=4
> > soundhw="hda"
> > localtime=1
> 
> If you need more tests/informations tell me and I'll post them.
> 

Do you have the qemu log (with xen platform logging enabled). This is where the PV drivers log failures/warnings.

  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 Thu Oct 16 11:04:55 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 16 Oct 2014 11:04:55 +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 1XeirX-0007fh-0Y; Thu, 16 Oct 2014 11:04:55 +0000
Received: from mail6.bemta4.messagelabs.com ([85.158.143.247])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <Paul.Durrant@citrix.com>) id 1XeirV-0007fc-LW
	for win-pv-devel@lists.xenproject.org; Thu, 16 Oct 2014 11:04:53 +0000
Received: from [85.158.143.35] by server-2.bemta-4.messagelabs.com id
	41/C0-10419-556AF345; Thu, 16 Oct 2014 11:04:53 +0000
X-Env-Sender: Paul.Durrant@citrix.com
X-Msg-Ref: server-9.tower-21.messagelabs.com!1413457491!13367881!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: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 7261 invoked from network); 16 Oct 2014 11:04:51 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-9.tower-21.messagelabs.com with RC4-SHA encrypted SMTP;
	16 Oct 2014 11:04:51 -0000
X-IronPort-AV: E=Sophos;i="5.04,731,1406592000"; d="scan'208";a="26012942"
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: Blue screen on xenvif install
Thread-Index: AQHP6R88TE2eCcEtSU6laq0K5grY5pwybJlQ///obQCAACb2gP//8KIAgAAjAsA=
Date: Thu, 16 Oct 2014 11:04:50 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD0111053EA@AMSPEX01CL01.citrite.net>
References: <543F887B.5030500@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111050FF@AMSPEX01CL01.citrite.net>
	<543F912C.8000504@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD01110526F@AMSPEX01CL01.citrite.net>
	<543FA4F6.5090804@m2r.biz>
In-Reply-To: <543FA4F6.5090804@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] Blue screen on xenvif install
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: 16 October 2014 11:59
> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> Subject: Re: Blue screen on xenvif install
> 
> Il 16/10/2014 12:00, Paul Durrant ha scritto:
> >> -----Original Message-----
> >> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >> Sent: 16 October 2014 10:35
> >> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >> Subject: Re: Blue screen on xenvif install
> >>
> >> Il 16/10/2014 10:59, Paul Durrant ha scritto:
> >>>> -----Original Message-----
> >>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >>>> Sent: 16 October 2014 09:58
> >>>> To: win-pv-devel@lists.xenproject.org
> >>>> Cc: Paul Durrant
> >>>> Subject: Blue screen on xenvif install
> >>>>
> >>>> Today I tried to install new winpv driver to other 3 windows 7 pro 64
> >>>> bit domUs.
> >>>> Days ago I installed them successful on one windows 7 pro 64 bit and
> one
> >>>> windows 8.1 enterprise 64 bit.
> >>>> On first domUs I tried to install them today I installed xenbus and
> >>>> xenvbd successful but on xenvif install windows crashed with blue
> >>>> screen, if I saw it correctly was an kernel in-page error or something
> >>>> similar.
> >>>> After reboot I retried to install xenvif but now always fails.
> >>>>
> >>> Sounds odd. Do you have a MEMORY.DMP?
> >>>
> >>>     Paul
> >> Windows is setted to write dump of kernel memory on system error but
> >> %systemroot%\memory.dmp is missed :(
> >> I also checked the windows events log but I found only kernel-power as
> >> critical that seems not contains useful data.
> >>
> >> I found probably useful data in xl dmesg (I copied all below from domU
> >> start to xen bug):
> >>> (d98) HVM Loader
> >>> (d98) Detected Xen v4.5-unstable
> >>> (d98) Xenbus rings @0xfeffc000, event channel 1
> >>> (d98) System requested SeaBIOS
> >>> (d98) CPU speed is 2660 MHz
> >>> (d98) Relocating guest memory for lowmem MMIO space disabled
> >>> (XEN) irq.c:270: Dom98 PCI link 0 changed 0 -> 5
> >>> (d98) PCI-ISA link 0 routed to IRQ5
> >>> (XEN) irq.c:270: Dom98 PCI link 1 changed 0 -> 10
> >>> (d98) PCI-ISA link 1 routed to IRQ10
> >>> (XEN) irq.c:270: Dom98 PCI link 2 changed 0 -> 11
> >>> (d98) PCI-ISA link 2 routed to IRQ11
> >>> (XEN) irq.c:270: Dom98 PCI link 3 changed 0 -> 5
> >>> (d98) PCI-ISA link 3 routed to IRQ5
> >>> (d98) pci dev 01:3 INTA->IRQ10
> >>> (d98) pci dev 02:0 INTA->IRQ11
> >>> (d98) pci dev 03:0 INTA->IRQ5
> >>> (d98) pci dev 04:0 INTA->IRQ5
> >>> (d98) pci dev 05:0 INTA->IRQ10
> >>> (d98) pci dev 06:0 INTA->IRQ11
> >>> (d98) pci dev 1d:0 INTA->IRQ10
> >>> (d98) pci dev 1d:1 INTB->IRQ11
> >>> (d98) pci dev 1d:2 INTC->IRQ5
> >>> (d98) pci dev 1d:7 INTD->IRQ5
> >>> (d98) No RAM in high memory; setting high_mem resource base to
> >> 100000000
> >>> (d98) pci dev 05:0 bar 10 size 004000000: 0f0000000
> >>> (d98) pci dev 05:0 bar 14 size 004000000: 0f4000000
> >>> (d98) pci dev 02:0 bar 14 size 001000000: 0f8000008
> >>> (d98) pci dev 06:0 bar 30 size 000040000: 0f9000000
> >>> (d98) pci dev 05:0 bar 30 size 000010000: 0f9040000
> >>> (d98) pci dev 03:0 bar 10 size 000004000: 0f9050000
> >>> (d98) pci dev 05:0 bar 18 size 000002000: 0f9054000
> >>> (d98) pci dev 04:0 bar 14 size 000001000: 0f9056000
> >>> (d98) pci dev 1d:7 bar 10 size 000001000: 0f9057000
> >>> (d98) pci dev 02:0 bar 10 size 000000100: 00000c001
> >>> (d98) pci dev 06:0 bar 10 size 000000100: 00000c101
> >>> (d98) pci dev 06:0 bar 14 size 000000100: 0f9058000
> >>> (d98) pci dev 04:0 bar 10 size 000000020: 00000c201
> >>> (d98) pci dev 05:0 bar 1c size 000000020: 00000c221
> >>> (d98) pci dev 1d:0 bar 20 size 000000020: 00000c241
> >>> (d98) pci dev 1d:1 bar 20 size 000000020: 00000c261
> >>> (d98) pci dev 1d:2 bar 20 size 000000020: 00000c281
> >>> (d98) pci dev 01:1 bar 20 size 000000010: 00000c2a1
> >>> (d98) Multiprocessor initialisation:
> >>> (d98)  - CPU0 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8] ...
> >>> done.
> >>> (d98)  - CPU1 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8] ...
> >>> done.
> >>> (d98) Testing HVM environment:
> >>> (d98)  - REP INSB across page boundaries ... passed
> >>> (d98)  - GS base MSRs and SWAPGS ... passed
> >>> (d98) Passed 2 of 2 tests
> >>> (d98) Writing SMBIOS tables ...
> >>> (d98) Loading SeaBIOS ...
> >>> (d98) Creating MP tables ...
> >>> (d98) Loading ACPI ...
> >>> (d98) S3 disabled
> >>> (d98) S4 disabled
> >>> (d98) vm86 TSS at fc00a100
> >>> (d98) BIOS map:
> >>> (d98)  10000-100d3: Scratch space
> >>> (d98)  c0000-fffff: Main BIOS
> >>> (d98) E820 table:
> >>> (d98)  [00]: 00000000:00000000 - 00000000:000a0000: RAM
> >>> (d98)  HOLE: 00000000:000a0000 - 00000000:000c0000
> >>> (d98)  [01]: 00000000:000c0000 - 00000000:00100000: RESERVED
> >>> (d98)  [02]: 00000000:00100000 - 00000000:78000000: RAM
> >>> (d98)  HOLE: 00000000:78000000 - 00000000:fc000000
> >>> (d98)  [03]: 00000000:fc000000 - 00000001:00000000: RESERVED
> >>> (d98) Invoking SeaBIOS ...
> >>> (d98) SeaBIOS (version
> >>> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
> >>> (d98)
> >>> (d98) Found Xen hypervisor signature at 40000100
> >>> (d98) Running on QEMU (i440fx)
> >>> (d98) xen: copy e820...
> >>> (d98) Relocating init from 0x000df619 to 0x77fae600 (size 71995)
> >>> (d98) CPU Mhz=2660
> >>> (d98) Found 13 PCI devices (max PCI bus is 00)
> >>> (d98) Allocated Xen hypercall page at 77fff000
> >>> (d98) Detected Xen v4.5-unstable
> >>> (d98) xen: copy BIOS tables...
> >>> (d98) Copying SMBIOS entry point from 0x00010010 to 0x000f0f40
> >>> (d98) Copying MPTABLE from 0xfc001170/fc001180 to 0x000f0e40
> >>> (d98) Copying PIR from 0x00010030 to 0x000f0dc0
> >>> (d98) Copying ACPI RSDP from 0x000100b0 to 0x000f0d90
> >>> (d98) Using pmtimer, ioport 0xb008
> >>> (d98) Scan for VGA option rom
> >>> (d98) Running option rom at c000:0003
> >>> (XEN) stdvga.c:147:d98v0 entering stdvga and caching modes
> >>> (d98) pmm call arg1=0
> >>> (d98) Turning on vga text mode console
> >>> (d98) SeaBIOS (version
> >>> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
> >>> (d98) Machine UUID f4cdeb74-0db1-4748-948d-42579a494120
> >>> (d98) EHCI init on dev 00:1d.7 (regs=0xf9057020)
> >>> (d98) Found 0 lpt ports
> >>> (d98) Found 0 serial ports
> >>> (d98) ATA controller 1 at 1f0/3f4/0 (irq 14 dev 9)
> >>> (d98) ATA controller 2 at 170/374/0 (irq 15 dev 9)
> >>> (d98) ata0-0: QEMU HARDDISK ATA-7 Hard-Disk (40720 MiBytes)
> >>> (d98) Searching bootorder for: /pci@i0cf8/*@1,1/drive@0/disk@0
> >>> (d98) DVD/CD [ata0-1: QEMU DVD-ROM ATAPI-4 DVD/CD]
> >>> (d98) Searching bootorder for: /pci@i0cf8/*@1,1/drive@0/disk@1
> >>> (d98) UHCI init on dev 00:1d.0 (io=c240)
> >>> (d98) UHCI init on dev 00:1d.1 (io=c260)
> >>> (d98) UHCI init on dev 00:1d.2 (io=c280)
> >>> (d98) PS2 keyboard initialized
> >>> (d98) All threads complete.
> >>> (d98) Scan for option roms
> >>> (d98) Running option rom at c980:0003
> >>> (d98) pmm call arg1=1
> >>> (d98) pmm call arg1=0
> >>> (d98) pmm call arg1=1
> >>> (d98) pmm call arg1=0
> >>> (d98) Searching bootorder for: /pci@i0cf8/*@6
> >>> (d98)
> >>> (d98) Press F12 for boot menu.
> >>> (d98)
> >>> (d98) Searching bootorder for: HALT
> >>> (d98) drive 0x000f0d40: PCHS=16383/16/63 translation=lba
> >>> LCHS=1024/255/63 s=83394560
> >>> (d98) Space available for UMB: ca800-ee800, f0000-f0ce0
> >>> (d98) Returned 258048 bytes of ZoneHigh
> >>> (d98) e820 map has 6 items:
> >>> (d98)   0: 0000000000000000 - 000000000009fc00 = 1 RAM
> >>> (d98)   1: 000000000009fc00 - 00000000000a0000 = 2 RESERVED
> >>> (d98)   2: 00000000000f0000 - 0000000000100000 = 2 RESERVED
> >>> (d98)   3: 0000000000100000 - 0000000077fff000 = 1 RAM
> >>> (d98)   4: 0000000077fff000 - 0000000078000000 = 2 RESERVED
> >>> (d98)   5: 00000000fc000000 - 0000000100000000 = 2 RESERVED
> >>> (d98) enter handle_19:
> >>> (d98)   NULL
> >>> (d98) Booting from Hard Disk...
> >>> (d98) Booting from 0000:7c00
> >>> (XEN) d98: VIRIDIAN GUEST_OS_ID: vendor: 1 os: 4 major: 6 minor: 1 sp:
> >>> 1 build: 1db1
> >>> (XEN) d98: VIRIDIAN HYPERCALL: enabled: 1 pfn: 3ffff
> >>> (XEN) d98v0: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffe
> >>> (XEN) d98v1: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffd
> >>> (XEN) irq.c:270: Dom98 PCI link 0 changed 5 -> 0
> >>> (XEN) irq.c:270: Dom98 PCI link 1 changed 10 -> 0
> >>> (XEN) irq.c:270: Dom98 PCI link 2 changed 11 -> 0
> >>> (XEN) irq.c:270: Dom98 PCI link 3 changed 5 -> 0
> >>> (XEN) irq.c:380: Dom98 callback via changed to GSI 24
> >>> (d98) XEN|BUGCHECK: ====>
> >>> (d98) XEN|BUGCHECK: 0000007A: FFFFF6FC000171C8 FFFFFFFFC0000185
> >>> 000000001BD6A860 FFFF
> >>> (d98) F80002E39000
> >>> (d98) XEN|BUGCHECK: CONTEXT (FFFFF8800310E530):
> >>> (d98) XEN|BUGCHECK: - GS = 002B
> >>> (d98) XEN|BUGCHECK: - FS = 0053
> >>> (d98) XEN|BUGCHECK: - ES = 002B
> >>> (d98) XEN|BUGCHECK: - DS = 002B
> >>> (d98) XEN|BUGCHECK: - SS = 0018
> >>> (d98) XEN|BUGCHECK: - CS = 0010
> >>> (d98) XEN|BUGCHECK: - EFLAGS = 00000086
> >>> (d98) XEN|BUGCHECK: - RDI = 00000000000171C8
> >>> (d98) XEN|BUGCHECK: - RSI = 00000000C0000185
> >>> (d98) XEN|BUGCHECK: - RBX = 00000000038AC8F8
> >>> (d98) XEN|BUGCHECK: - RDX = 0000000000000000
> >>> (d98) XEN|BUGCHECK: - RCX = 000000000310E530
> >>> (d98) XEN|BUGCHECK: - RAX = 000000002ECF4722
> >>> (d98) XEN|BUGCHECK: - RBP = 000000001BD6A860
> >>> (d98) XEN|BUGCHECK: - RIP = 00000000038A2A43
> >>> (d98) XEN|BUGCHECK: - RSP = 000000000310E510
> >>> (d98) XEN|BUGCHECK: - R8 = 0000000000000000
> >>> (d98) XEN|BUGCHECK: - R9 = 0000000000000000
> >>> (d98) XEN|BUGCHECK: - R10 = 0000000000000000
> >>> (d98) XEN|BUGCHECK: - R11 = 0000000000000000
> >>> (d98) XEN|BUGCHECK: - R12 = 000000000000007A
> >>> (d98) XEN|BUGCHECK: - R13 = 0000000000000001
> >>> (d98) XEN|BUGCHECK: - R14 = 0000000002E39000
> >>> (d98) XEN|BUGCHECK: - R15 = 0000000002CBAC40
> >>> (d98) XEN|BUGCHECK: STACK:
> >>> (d98) XEN|BUGCHECK: 000000000310EA20: (0000000000000003
> >>> 00000000038A50F0 00000000038A
> >>> (d98) 4860 000000000000007A) xen.sys + 00000000000049AC
> >>> (d98) XEN|BUGCHECK: 000000000310EA70: (00000000038AD0D0
> >>> 0000000000000000 000000000000
> >>> (d98) 0004 0000000002C83500) ntoskrnl.exe + 0000000000128585
> >>> (d98) XEN|BUGCHECK: 000000000310EAA0: (00000000038AD0D0
> >>> 0000000002C83500 000000000000
> >>> (d98) 000F 0000000001780660) ntoskrnl.exe + 0000000000167C0D
> >>> (d98) XEN|BUGCHECK: 000000000310F170: (0000000003816470
> >>> 0000000002B4C8C1 000000000000
> >>> (d98) 00FE 0000000000000000) ntoskrnl.exe + 0000000000075CC4
> >>> (d98) XEN|BUGCHECK: 000000000310F1B0: (000000000000007A
> >>> 00000000000171C8 00000000C000
> >>> (d98) 0185 000000001BD6A860) ntoskrnl.exe + 00000000000E8752
> >>> (d98) XEN|BUGCHECK: 000000000310F290: (00000000038163B0
> >>> 000000000310F320 0000000002CB
> >>> (d98) D540 00000000038163B0) ntoskrnl.exe + 000000000009C91F
> >>> (d98) XEN|BUGCHECK: 000000000310F360: (0000000000000000
> >>> 0000000000000008 00000000FFFF
> >>> (d98) FFFF 00000000003500F0) ntoskrnl.exe + 00000000000831B9
> >>> (d98) XEN|BUGCHECK: 000000000310F4C0: (0000000000000008
> >>> 0000000002E39000 000000000000
> >>> (d98) 0000 0000000000000000) ntoskrnl.exe + 0000000000073CEE
> >>> (d98) XEN|BUGCHECK: 000000000310F658: (0000000002E5CFD5
> >>> 0000000000000000 0000000003EB
> >>> (d98) 8710 00000000FFFFFFFF) ntoskrnl.exe + 000000000042C000
> >> If you need more tests/informations tell me and I'll post them.
> >> Thanks for any reply and sorry for my bad english.
> > Well, that tells me you had a 7A BSOD, which is a
> KERNEL_DATA_INPAGE_ERROR. The error status (param 2) was C0000185 so
> that's a STATUS_IO_DEVICE_ERROR. The documentation at
> http://msdn.microsoft.com/en-
> gb/library/windows/hardware/ff559211%28v=vs.85%29.aspx tells me that
> this means:
> >
> > "improper termination or defective cabling on SCSI devices or that two
> devices are trying to use the same IRQ."
> >
> > But you said you had xenvbd already installed so you'll be using a PV
> storage path. Is there any indication of problems with your storage?
> >
> >    Paul
> DomUs disk are all raw files in local dom0 disks, raid1 with "LSI Logic
> / Symbios Logic SAS2008 PCI-Express Fusion-MPT SAS-2" dom0 partitions
> are GTP and fs ext4.
> Dom0 is wheezy with kernel is linux-image-3.16-0.bpo.2-amd64 version
> 3.16.3-2~bpo70+1
> No kern or syslog errors, only many of these warning that someone
> replied me that should not be a problem:
> Oct 15 10:45:13 mtorMN01OU kernel: [773197.117518] xen:balloon:
> reserve_additional_memory: add_memory() failed: -17
> DomU now see disk as xen pvdisk, on xenvif install probably still was
> full emulated disk even if xenvbd was installed successful before xenvif
> install (failed with BSOD)
> The IRQ seems visible from xl dmesg output below, can you check them is
> have something wrong or strange, I see some of them "duplicate" but I
> not know if is correct.
> 
> DomU xl cfg:
> > name='office1_w7'
> > builder="hvm"
> > memory=2048
> > vcpus=2
> > acpi_s3=0
> > acpi_s4=0
> > vif=['bridge=xenbr0,mac=00:16:3e:41:ae:8b']
> >
> disk=['/mnt/vm/disks/office1_w7.disk1.xm,raw,hda,rw',',raw,hdb,ro,cdrom'
> ]
> > boot='c'
> > device_model_version="qemu-xen"
> > viridian=1
> > vnc=0
> > keymap="it"
> > on_crash="destroy"
> > vga="qxl"
> > spice=1
> > spicehost='0.0.0.0'
> > spiceport=6001
> > spicedisable_ticketing=0
> > spicepasswd="password"
> > spicevdagent=1
> > spice_clipboard_sharing=0
> > spiceusbredirection=4
> > soundhw="hda"
> > localtime=1
> 
> If you need more tests/informations tell me and I'll post them.
> 

Do you have the qemu log (with xen platform logging enabled). This is where the PV drivers log failures/warnings.

  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 Thu Oct 16 13:39:30 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 16 Oct 2014 13:39: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 1XelH8-0000LR-Oy; Thu, 16 Oct 2014 13:39:30 +0000
Received: from mail6.bemta4.messagelabs.com ([85.158.143.247])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1XelH6-0000LM-NF
	for win-pv-devel@lists.xenproject.org; Thu, 16 Oct 2014 13:39:29 +0000
Received: from [85.158.143.35] by server-2.bemta-4.messagelabs.com id
	57/FD-10419-F8ACF345; Thu, 16 Oct 2014 13:39:27 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-9.tower-21.messagelabs.com!1413466765!13417531!1
X-Originating-IP: [74.125.82.49]
X-SpamReason: No, hits=1.7 required=7.0 tests=BIZ_TLD
X-StarScan-Received: 
X-StarScan-Version: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 8107 invoked from network); 16 Oct 2014 13:39:25 -0000
Received: from mail-wg0-f49.google.com (HELO mail-wg0-f49.google.com)
	(74.125.82.49)
	by server-9.tower-21.messagelabs.com with RC4-SHA encrypted SMTP;
	16 Oct 2014 13:39:25 -0000
Received: by mail-wg0-f49.google.com with SMTP id x12so3770100wgg.20
	for <win-pv-devel@lists.xenproject.org>;
	Thu, 16 Oct 2014 06:39:25 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:message-id:date:from:user-agent:mime-version:to
	:subject:references:in-reply-to:content-type;
	bh=QqzZMh6o1xOoZxGabvKa4SXf8vtiHhiQMeSYY86pEqQ=;
	b=NwvCnyYLtx0DdDXB57rH6rbIY+xg8ZISYGCQh/rxh6DWy8oaMiEUyFfT0H6MSt6Mri
	UlK9g9F2ZCoC5y0I3a/S3p0WXa95Mjn2cxdD8sbl0YJMaksLd+DJ8aoBomCsDBQLOMoT
	Xil5hd8GZTsG2bB6Oes2udoC6pxzW+BNrSjXOdq9O1cr71GxB7ywyCCEhKZS8E8HVMyb
	pTciFQsDDzmX0sawau+zbzmRRxdGTN6+Iawu08Tx6rAlxqqmYEikwdjHpEFMJACt2iN3
	36sVpaA2PpBoTa0XmkzKWVPa2WHivl7/y0iND6TG6k6aWOkrN7eD97ySq9EQ6aP5IR/n
	d8fA==
X-Gm-Message-State: ALoCoQly6SRzkH4Hd2UDdts/IB0Wxl9THyu4Gvk2XmC0Ct9j4Rui8hJOOT16hQXVwyHA+pd0gurF
X-Received: by 10.180.73.103 with SMTP id k7mr20661793wiv.83.1413466765589;
	Thu, 16 Oct 2014 06:39:25 -0700 (PDT)
Received: from [192.168.1.15] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by mx.google.com with ESMTPSA id
	lk6sm27486126wjb.26.2014.10.16.06.39.23 for <multiple recipients>
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Thu, 16 Oct 2014 06:39:24 -0700 (PDT)
Message-ID: <543FCA93.2010805@m2r.biz>
Date: Thu, 16 Oct 2014 15:39:31 +0200
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64;
	rv:24.0) Gecko/20100101 Thunderbird/24.6.0
MIME-Version: 1.0
To: Paul Durrant <Paul.Durrant@citrix.com>, 
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <543F887B.5030500@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111050FF@AMSPEX01CL01.citrite.net>
	<543F912C.8000504@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD01110526F@AMSPEX01CL01.citrite.net>
	<543FA4F6.5090804@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111053EA@AMSPEX01CL01.citrite.net>
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD0111053EA@AMSPEX01CL01.citrite.net>
Content-Type: multipart/mixed; boundary="------------080006000206030104060307"
Subject: Re: [win-pv-devel] Blue screen on xenvif install
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.
--------------080006000206030104060307
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

Il 16/10/2014 13:04, Paul Durrant ha scritto:
>> -----Original Message-----
>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>> Sent: 16 October 2014 11:59
>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>> Subject: Re: Blue screen on xenvif install
>>
>> Il 16/10/2014 12:00, Paul Durrant ha scritto:
>>>> -----Original Message-----
>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>> Sent: 16 October 2014 10:35
>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>>>> Subject: Re: Blue screen on xenvif install
>>>>
>>>> Il 16/10/2014 10:59, Paul Durrant ha scritto:
>>>>>> -----Original Message-----
>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>>>> Sent: 16 October 2014 09:58
>>>>>> To: win-pv-devel@lists.xenproject.org
>>>>>> Cc: Paul Durrant
>>>>>> Subject: Blue screen on xenvif install
>>>>>>
>>>>>> Today I tried to install new winpv driver to other 3 windows 7 pro 64
>>>>>> bit domUs.
>>>>>> Days ago I installed them successful on one windows 7 pro 64 bit and
>> one
>>>>>> windows 8.1 enterprise 64 bit.
>>>>>> On first domUs I tried to install them today I installed xenbus and
>>>>>> xenvbd successful but on xenvif install windows crashed with blue
>>>>>> screen, if I saw it correctly was an kernel in-page error or something
>>>>>> similar.
>>>>>> After reboot I retried to install xenvif but now always fails.
>>>>>>
>>>>> Sounds odd. Do you have a MEMORY.DMP?
>>>>>
>>>>>      Paul
>>>> Windows is setted to write dump of kernel memory on system error but
>>>> %systemroot%\memory.dmp is missed :(
>>>> I also checked the windows events log but I found only kernel-power as
>>>> critical that seems not contains useful data.
>>>>
>>>> I found probably useful data in xl dmesg (I copied all below from domU
>>>> start to xen bug):
>>>>> (d98) HVM Loader
>>>>> (d98) Detected Xen v4.5-unstable
>>>>> (d98) Xenbus rings @0xfeffc000, event channel 1
>>>>> (d98) System requested SeaBIOS
>>>>> (d98) CPU speed is 2660 MHz
>>>>> (d98) Relocating guest memory for lowmem MMIO space disabled
>>>>> (XEN) irq.c:270: Dom98 PCI link 0 changed 0 -> 5
>>>>> (d98) PCI-ISA link 0 routed to IRQ5
>>>>> (XEN) irq.c:270: Dom98 PCI link 1 changed 0 -> 10
>>>>> (d98) PCI-ISA link 1 routed to IRQ10
>>>>> (XEN) irq.c:270: Dom98 PCI link 2 changed 0 -> 11
>>>>> (d98) PCI-ISA link 2 routed to IRQ11
>>>>> (XEN) irq.c:270: Dom98 PCI link 3 changed 0 -> 5
>>>>> (d98) PCI-ISA link 3 routed to IRQ5
>>>>> (d98) pci dev 01:3 INTA->IRQ10
>>>>> (d98) pci dev 02:0 INTA->IRQ11
>>>>> (d98) pci dev 03:0 INTA->IRQ5
>>>>> (d98) pci dev 04:0 INTA->IRQ5
>>>>> (d98) pci dev 05:0 INTA->IRQ10
>>>>> (d98) pci dev 06:0 INTA->IRQ11
>>>>> (d98) pci dev 1d:0 INTA->IRQ10
>>>>> (d98) pci dev 1d:1 INTB->IRQ11
>>>>> (d98) pci dev 1d:2 INTC->IRQ5
>>>>> (d98) pci dev 1d:7 INTD->IRQ5
>>>>> (d98) No RAM in high memory; setting high_mem resource base to
>>>> 100000000
>>>>> (d98) pci dev 05:0 bar 10 size 004000000: 0f0000000
>>>>> (d98) pci dev 05:0 bar 14 size 004000000: 0f4000000
>>>>> (d98) pci dev 02:0 bar 14 size 001000000: 0f8000008
>>>>> (d98) pci dev 06:0 bar 30 size 000040000: 0f9000000
>>>>> (d98) pci dev 05:0 bar 30 size 000010000: 0f9040000
>>>>> (d98) pci dev 03:0 bar 10 size 000004000: 0f9050000
>>>>> (d98) pci dev 05:0 bar 18 size 000002000: 0f9054000
>>>>> (d98) pci dev 04:0 bar 14 size 000001000: 0f9056000
>>>>> (d98) pci dev 1d:7 bar 10 size 000001000: 0f9057000
>>>>> (d98) pci dev 02:0 bar 10 size 000000100: 00000c001
>>>>> (d98) pci dev 06:0 bar 10 size 000000100: 00000c101
>>>>> (d98) pci dev 06:0 bar 14 size 000000100: 0f9058000
>>>>> (d98) pci dev 04:0 bar 10 size 000000020: 00000c201
>>>>> (d98) pci dev 05:0 bar 1c size 000000020: 00000c221
>>>>> (d98) pci dev 1d:0 bar 20 size 000000020: 00000c241
>>>>> (d98) pci dev 1d:1 bar 20 size 000000020: 00000c261
>>>>> (d98) pci dev 1d:2 bar 20 size 000000020: 00000c281
>>>>> (d98) pci dev 01:1 bar 20 size 000000010: 00000c2a1
>>>>> (d98) Multiprocessor initialisation:
>>>>> (d98)  - CPU0 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8] ...
>>>>> done.
>>>>> (d98)  - CPU1 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8] ...
>>>>> done.
>>>>> (d98) Testing HVM environment:
>>>>> (d98)  - REP INSB across page boundaries ... passed
>>>>> (d98)  - GS base MSRs and SWAPGS ... passed
>>>>> (d98) Passed 2 of 2 tests
>>>>> (d98) Writing SMBIOS tables ...
>>>>> (d98) Loading SeaBIOS ...
>>>>> (d98) Creating MP tables ...
>>>>> (d98) Loading ACPI ...
>>>>> (d98) S3 disabled
>>>>> (d98) S4 disabled
>>>>> (d98) vm86 TSS at fc00a100
>>>>> (d98) BIOS map:
>>>>> (d98)  10000-100d3: Scratch space
>>>>> (d98)  c0000-fffff: Main BIOS
>>>>> (d98) E820 table:
>>>>> (d98)  [00]: 00000000:00000000 - 00000000:000a0000: RAM
>>>>> (d98)  HOLE: 00000000:000a0000 - 00000000:000c0000
>>>>> (d98)  [01]: 00000000:000c0000 - 00000000:00100000: RESERVED
>>>>> (d98)  [02]: 00000000:00100000 - 00000000:78000000: RAM
>>>>> (d98)  HOLE: 00000000:78000000 - 00000000:fc000000
>>>>> (d98)  [03]: 00000000:fc000000 - 00000001:00000000: RESERVED
>>>>> (d98) Invoking SeaBIOS ...
>>>>> (d98) SeaBIOS (version
>>>>> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
>>>>> (d98)
>>>>> (d98) Found Xen hypervisor signature at 40000100
>>>>> (d98) Running on QEMU (i440fx)
>>>>> (d98) xen: copy e820...
>>>>> (d98) Relocating init from 0x000df619 to 0x77fae600 (size 71995)
>>>>> (d98) CPU Mhz=2660
>>>>> (d98) Found 13 PCI devices (max PCI bus is 00)
>>>>> (d98) Allocated Xen hypercall page at 77fff000
>>>>> (d98) Detected Xen v4.5-unstable
>>>>> (d98) xen: copy BIOS tables...
>>>>> (d98) Copying SMBIOS entry point from 0x00010010 to 0x000f0f40
>>>>> (d98) Copying MPTABLE from 0xfc001170/fc001180 to 0x000f0e40
>>>>> (d98) Copying PIR from 0x00010030 to 0x000f0dc0
>>>>> (d98) Copying ACPI RSDP from 0x000100b0 to 0x000f0d90
>>>>> (d98) Using pmtimer, ioport 0xb008
>>>>> (d98) Scan for VGA option rom
>>>>> (d98) Running option rom at c000:0003
>>>>> (XEN) stdvga.c:147:d98v0 entering stdvga and caching modes
>>>>> (d98) pmm call arg1=0
>>>>> (d98) Turning on vga text mode console
>>>>> (d98) SeaBIOS (version
>>>>> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
>>>>> (d98) Machine UUID f4cdeb74-0db1-4748-948d-42579a494120
>>>>> (d98) EHCI init on dev 00:1d.7 (regs=0xf9057020)
>>>>> (d98) Found 0 lpt ports
>>>>> (d98) Found 0 serial ports
>>>>> (d98) ATA controller 1 at 1f0/3f4/0 (irq 14 dev 9)
>>>>> (d98) ATA controller 2 at 170/374/0 (irq 15 dev 9)
>>>>> (d98) ata0-0: QEMU HARDDISK ATA-7 Hard-Disk (40720 MiBytes)
>>>>> (d98) Searching bootorder for: /pci@i0cf8/*@1,1/drive@0/disk@0
>>>>> (d98) DVD/CD [ata0-1: QEMU DVD-ROM ATAPI-4 DVD/CD]
>>>>> (d98) Searching bootorder for: /pci@i0cf8/*@1,1/drive@0/disk@1
>>>>> (d98) UHCI init on dev 00:1d.0 (io=c240)
>>>>> (d98) UHCI init on dev 00:1d.1 (io=c260)
>>>>> (d98) UHCI init on dev 00:1d.2 (io=c280)
>>>>> (d98) PS2 keyboard initialized
>>>>> (d98) All threads complete.
>>>>> (d98) Scan for option roms
>>>>> (d98) Running option rom at c980:0003
>>>>> (d98) pmm call arg1=1
>>>>> (d98) pmm call arg1=0
>>>>> (d98) pmm call arg1=1
>>>>> (d98) pmm call arg1=0
>>>>> (d98) Searching bootorder for: /pci@i0cf8/*@6
>>>>> (d98)
>>>>> (d98) Press F12 for boot menu.
>>>>> (d98)
>>>>> (d98) Searching bootorder for: HALT
>>>>> (d98) drive 0x000f0d40: PCHS=16383/16/63 translation=lba
>>>>> LCHS=1024/255/63 s=83394560
>>>>> (d98) Space available for UMB: ca800-ee800, f0000-f0ce0
>>>>> (d98) Returned 258048 bytes of ZoneHigh
>>>>> (d98) e820 map has 6 items:
>>>>> (d98)   0: 0000000000000000 - 000000000009fc00 = 1 RAM
>>>>> (d98)   1: 000000000009fc00 - 00000000000a0000 = 2 RESERVED
>>>>> (d98)   2: 00000000000f0000 - 0000000000100000 = 2 RESERVED
>>>>> (d98)   3: 0000000000100000 - 0000000077fff000 = 1 RAM
>>>>> (d98)   4: 0000000077fff000 - 0000000078000000 = 2 RESERVED
>>>>> (d98)   5: 00000000fc000000 - 0000000100000000 = 2 RESERVED
>>>>> (d98) enter handle_19:
>>>>> (d98)   NULL
>>>>> (d98) Booting from Hard Disk...
>>>>> (d98) Booting from 0000:7c00
>>>>> (XEN) d98: VIRIDIAN GUEST_OS_ID: vendor: 1 os: 4 major: 6 minor: 1 sp:
>>>>> 1 build: 1db1
>>>>> (XEN) d98: VIRIDIAN HYPERCALL: enabled: 1 pfn: 3ffff
>>>>> (XEN) d98v0: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffe
>>>>> (XEN) d98v1: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffd
>>>>> (XEN) irq.c:270: Dom98 PCI link 0 changed 5 -> 0
>>>>> (XEN) irq.c:270: Dom98 PCI link 1 changed 10 -> 0
>>>>> (XEN) irq.c:270: Dom98 PCI link 2 changed 11 -> 0
>>>>> (XEN) irq.c:270: Dom98 PCI link 3 changed 5 -> 0
>>>>> (XEN) irq.c:380: Dom98 callback via changed to GSI 24
>>>>> (d98) XEN|BUGCHECK: ====>
>>>>> (d98) XEN|BUGCHECK: 0000007A: FFFFF6FC000171C8 FFFFFFFFC0000185
>>>>> 000000001BD6A860 FFFF
>>>>> (d98) F80002E39000
>>>>> (d98) XEN|BUGCHECK: CONTEXT (FFFFF8800310E530):
>>>>> (d98) XEN|BUGCHECK: - GS = 002B
>>>>> (d98) XEN|BUGCHECK: - FS = 0053
>>>>> (d98) XEN|BUGCHECK: - ES = 002B
>>>>> (d98) XEN|BUGCHECK: - DS = 002B
>>>>> (d98) XEN|BUGCHECK: - SS = 0018
>>>>> (d98) XEN|BUGCHECK: - CS = 0010
>>>>> (d98) XEN|BUGCHECK: - EFLAGS = 00000086
>>>>> (d98) XEN|BUGCHECK: - RDI = 00000000000171C8
>>>>> (d98) XEN|BUGCHECK: - RSI = 00000000C0000185
>>>>> (d98) XEN|BUGCHECK: - RBX = 00000000038AC8F8
>>>>> (d98) XEN|BUGCHECK: - RDX = 0000000000000000
>>>>> (d98) XEN|BUGCHECK: - RCX = 000000000310E530
>>>>> (d98) XEN|BUGCHECK: - RAX = 000000002ECF4722
>>>>> (d98) XEN|BUGCHECK: - RBP = 000000001BD6A860
>>>>> (d98) XEN|BUGCHECK: - RIP = 00000000038A2A43
>>>>> (d98) XEN|BUGCHECK: - RSP = 000000000310E510
>>>>> (d98) XEN|BUGCHECK: - R8 = 0000000000000000
>>>>> (d98) XEN|BUGCHECK: - R9 = 0000000000000000
>>>>> (d98) XEN|BUGCHECK: - R10 = 0000000000000000
>>>>> (d98) XEN|BUGCHECK: - R11 = 0000000000000000
>>>>> (d98) XEN|BUGCHECK: - R12 = 000000000000007A
>>>>> (d98) XEN|BUGCHECK: - R13 = 0000000000000001
>>>>> (d98) XEN|BUGCHECK: - R14 = 0000000002E39000
>>>>> (d98) XEN|BUGCHECK: - R15 = 0000000002CBAC40
>>>>> (d98) XEN|BUGCHECK: STACK:
>>>>> (d98) XEN|BUGCHECK: 000000000310EA20: (0000000000000003
>>>>> 00000000038A50F0 00000000038A
>>>>> (d98) 4860 000000000000007A) xen.sys + 00000000000049AC
>>>>> (d98) XEN|BUGCHECK: 000000000310EA70: (00000000038AD0D0
>>>>> 0000000000000000 000000000000
>>>>> (d98) 0004 0000000002C83500) ntoskrnl.exe + 0000000000128585
>>>>> (d98) XEN|BUGCHECK: 000000000310EAA0: (00000000038AD0D0
>>>>> 0000000002C83500 000000000000
>>>>> (d98) 000F 0000000001780660) ntoskrnl.exe + 0000000000167C0D
>>>>> (d98) XEN|BUGCHECK: 000000000310F170: (0000000003816470
>>>>> 0000000002B4C8C1 000000000000
>>>>> (d98) 00FE 0000000000000000) ntoskrnl.exe + 0000000000075CC4
>>>>> (d98) XEN|BUGCHECK: 000000000310F1B0: (000000000000007A
>>>>> 00000000000171C8 00000000C000
>>>>> (d98) 0185 000000001BD6A860) ntoskrnl.exe + 00000000000E8752
>>>>> (d98) XEN|BUGCHECK: 000000000310F290: (00000000038163B0
>>>>> 000000000310F320 0000000002CB
>>>>> (d98) D540 00000000038163B0) ntoskrnl.exe + 000000000009C91F
>>>>> (d98) XEN|BUGCHECK: 000000000310F360: (0000000000000000
>>>>> 0000000000000008 00000000FFFF
>>>>> (d98) FFFF 00000000003500F0) ntoskrnl.exe + 00000000000831B9
>>>>> (d98) XEN|BUGCHECK: 000000000310F4C0: (0000000000000008
>>>>> 0000000002E39000 000000000000
>>>>> (d98) 0000 0000000000000000) ntoskrnl.exe + 0000000000073CEE
>>>>> (d98) XEN|BUGCHECK: 000000000310F658: (0000000002E5CFD5
>>>>> 0000000000000000 0000000003EB
>>>>> (d98) 8710 00000000FFFFFFFF) ntoskrnl.exe + 000000000042C000
>>>> If you need more tests/informations tell me and I'll post them.
>>>> Thanks for any reply and sorry for my bad english.
>>> Well, that tells me you had a 7A BSOD, which is a
>> KERNEL_DATA_INPAGE_ERROR. The error status (param 2) was C0000185 so
>> that's a STATUS_IO_DEVICE_ERROR. The documentation at
>> http://msdn.microsoft.com/en-
>> gb/library/windows/hardware/ff559211%28v=vs.85%29.aspx tells me that
>> this means:
>>> "improper termination or defective cabling on SCSI devices or that two
>> devices are trying to use the same IRQ."
>>> But you said you had xenvbd already installed so you'll be using a PV
>> storage path. Is there any indication of problems with your storage?
>>>     Paul
>> DomUs disk are all raw files in local dom0 disks, raid1 with "LSI Logic
>> / Symbios Logic SAS2008 PCI-Express Fusion-MPT SAS-2" dom0 partitions
>> are GTP and fs ext4.
>> Dom0 is wheezy with kernel is linux-image-3.16-0.bpo.2-amd64 version
>> 3.16.3-2~bpo70+1
>> No kern or syslog errors, only many of these warning that someone
>> replied me that should not be a problem:
>> Oct 15 10:45:13 mtorMN01OU kernel: [773197.117518] xen:balloon:
>> reserve_additional_memory: add_memory() failed: -17
>> DomU now see disk as xen pvdisk, on xenvif install probably still was
>> full emulated disk even if xenvbd was installed successful before xenvif
>> install (failed with BSOD)
>> The IRQ seems visible from xl dmesg output below, can you check them is
>> have something wrong or strange, I see some of them "duplicate" but I
>> not know if is correct.
>>
>> DomU xl cfg:
>>> name='office1_w7'
>>> builder="hvm"
>>> memory=2048
>>> vcpus=2
>>> acpi_s3=0
>>> acpi_s4=0
>>> vif=['bridge=xenbr0,mac=00:16:3e:41:ae:8b']
>>>
>> disk=['/mnt/vm/disks/office1_w7.disk1.xm,raw,hda,rw',',raw,hdb,ro,cdrom'
>> ]
>>> boot='c'
>>> device_model_version="qemu-xen"
>>> viridian=1
>>> vnc=0
>>> keymap="it"
>>> on_crash="destroy"
>>> vga="qxl"
>>> spice=1
>>> spicehost='0.0.0.0'
>>> spiceport=6001
>>> spicedisable_ticketing=0
>>> spicepasswd="password"
>>> spicevdagent=1
>>> spice_clipboard_sharing=0
>>> spiceusbredirection=4
>>> soundhw="hda"
>>> localtime=1
>> If you need more tests/informations tell me and I'll post them.
>>
> Do you have the qemu log (with xen platform logging enabled). This is where the PV drivers log failures/warnings.
>
>    Paul
>
>
I retried enabling xen platform debug in qemu trace but no add lines in 
log when I try to install xenvif and fails.
I attach anyway the log if can be useful.
I'll also try to restore the backup of this night of the domU when I had 
the BSOD trying reproduce it with xen debug in qemu trace and different 
windows memory dump options.


--------------080006000206030104060307
Content-Type: text/plain; charset=windows-1252;
 name="qemu-dm-office1_w7.log"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
 filename="qemu-dm-office1_w7.log"

(/usr/sbin/xl:30535): Spice-Warning **: reds.c:1863:reds_handle_ticket: Invalid password
main_channel_link: add main channel client
main_channel_handle_parsed: net test: latency 2.467000 ms, bitrate 2566416040 bps (2447.525063 Mbps)
inputs_connect: inputs channel client create
red_dispatcher_set_cursor_peer: 
xen_platform_log xen platform: XEN|DllInitialize: XEN 8.0.0 (0) (13.10.2014)
xen_platform_log xen platform: XEN|SystemGetStartOptions:  TESTSIGNING  NOEXECUTE=OPTIN
xen_platform_log xen platform: XEN|SystemGetVersionInformation: KERNEL: 6.1 (BUILD 7601) PLATFORM WIN32_NT (x64)
xen_platform_log xen platform: XEN|SystemGetVersionInformation: SP: 1.0 ()
xen_platform_log xen platform: XEN|SystemGetVersionInformation: SUITES:
xen_platform_log xen platform: XEN|SystemGetVersionInformation: - TERMINAL
xen_platform_log xen platform: XEN|SystemGetVersionInformation: - SINGLEUSERTS
xen_platform_log xen platform: XEN|SystemGetVersionInformation: TYPE: WORKSTATION
xen_platform_log xen platform: XEN|SystemGetMemoryInformation: RANGE[0] 00000000.00001000 - 00000000.0009efff
xen_platform_log xen platform: XEN|SystemGetMemoryInformation: RANGE[1] 00000000.00100000 - 00000000.77ffefff
xen_platform_log xen platform: XEN|SystemCpuInformation: ====> (1)
xen_platform_log xen platform: XEN|SystemCpuInformation: Manufacturer: GenuineIntel
xen_platform_log xen platform: XEN|SystemCpuInformation: Local APIC ID: 02
xen_platform_log xen platform: XEN|SystemCpuInformation: <==== (1)
xen_platform_log xen platform: XEN|SystemCpuInformation: ====> (0)
xen_platform_log xen platform: XEN|SystemCpuInformation: Manufacturer: GenuineIntel
xen_platform_log xen platform: XEN|SystemCpuInformation: Local APIC ID: 00
xen_platform_log xen platform: XEN|SystemCpuInformation: <==== (0)
xen_platform_log xen platform: XEN|HypercallInitialize: XEN 4.5
xen_platform_log xen platform: XEN|HypercallInitialize: INTERFACE 0x00040300
xen_platform_log xen platform: XEN|HypercallInitialize: HypercallPfn[0]: 00000000000036A6
xen_platform_log xen platform: XENFILT|DriverEntry: XENFILT 8.0.0 (0) (13.10.2014)
xen_platform_log xen platform: XENFILT|DriverSetActiveDeviceInstance: PCI\VEN_5853&DEV_0001&SUBSYS_00015853&REV_01/10
xen_platform_log xen platform: XENFILT|UnplugCheckForPVDisks: PRESENT
xen_platform_log xen platform: XENFILT|UnplugCheckForPVNics: NOT PRESENT
xen_platform_log xen platform: UNPLUG: PRE-AMBLE (DRIVERS NOT BLACKLISTED)
xen_platform_log xen platform: UNPLUG: DISKS
xen_platform_log xen platform: XENFILT|FdoCreate: FFFFFA800255E040 (ACPI\PNP0A03\0)
xen_platform_log xen platform: XENFILT|PdoCreate: FFFFFA8002534040 (PCI\VEN_8086&DEV_1237&SUBSYS_11001AF4&REV_02\00)
xen_platform_log xen platform: XENFILT|PdoCreate: FFFFFA80024CA040 (PCI\VEN_8086&DEV_7000&SUBSYS_11001AF4&REV_00\08)
xen_platform_log xen platform: XENFILT|PdoCreate: FFFFFA80024CB040 (PCI\VEN_8086&DEV_7010&SUBSYS_11001AF4&REV_00\09)
xen_platform_log xen platform: XENFILT|PdoCreate: FFFFFA80024CC040 (PCI\VEN_5853&DEV_0001&SUBSYS_00015853&REV_01\10)
xen_platform_log xen platform: XENFILT|PdoCreate: FFFFFA80024CD040 (PCI\VEN_8086&DEV_2668&SUBSYS_11001AF4&REV_01\18)
xen_platform_log xen platform: XENFILT|PdoCreate: FFFFFA80024CE040 (PCI\VEN_1AF4&DEV_1003&SUBSYS_00031AF4&REV_00\20)
xen_platform_log xen platform: XENFILT|PdoCreate: FFFFFA80024CF040 (PCI\VEN_1B36&DEV_0100&SUBSYS_11001AF4&REV_04\28)
xen_platform_log xen platform: XENFILT|PdoCreate: FFFFFA80024D0040 (PCI\VEN_10EC&DEV_8139&SUBSYS_11001AF4&REV_20\30)
xen_platform_log xen platform: XENFILT|PdoCreate: FFFFFA80024D1040 (PCI\VEN_8086&DEV_2934&SUBSYS_11001AF4&REV_03\E8)
xen_platform_log xen platform: XENFILT|PdoCreate: FFFFFA80024D2040 (PCI\VEN_8086&DEV_2935&SUBSYS_11001AF4&REV_03\E9)
xen_platform_log xen platform: XENFILT|PdoCreate: FFFFFA80024D3040 (PCI\VEN_8086&DEV_2936&SUBSYS_11001AF4&REV_03\EA)
xen_platform_log xen platform: XENFILT|PdoCreate: FFFFFA80024D4AC0 (PCI\VEN_8086&DEV_293A&SUBSYS_11001AF4&REV_03\EF)
xen_platform_log xen platform: XENFILT|PdoCreate: FFFFFA80024D5AC0 (ACPI\PNP0103\0)
xen_platform_log xen platform: XENBUS|DriverEntry: XENBUS 8.0.0 (0) (13.10.2014)
xen_platform_log xen platform: XENFILT|PdoQueryInterface: PCI\VEN_5853&DEV_0001&SUBSYS_00015853&REV_01\10: UNPLUG_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|FdoCreate: FFFFFA80024E2A70 (XS0001 XENBUS) [ACTIVE]
xen_platform_log xen platform: XENBUS|FdoScan: ====>
xen_platform_log xen platform: SHARED_INFO: MAP XENMAPSPACE_shared_info @ 00000000.f8000000
xen_platform_log xen platform: XENBUS|FdoSuspend: ====>
xen_platform_log xen platform: STORE: PAGE @ 00000000.feffc000
xen_platform_log xen platform: XENBUS|FdoBalloon: ====>
xen_platform_log xen platform: XENBUS|PdoCreate: FFFFFA80024FEB00 (VBD 00000001)
xen_platform_log xen platform: XENBUS|PdoCreate: FFFFFA80024FE640 (VIF 00000001)
xen_platform_log xen platform: XENBUS|PdoCreate: FFFFFA8002502D40 (IFACE 00000001)
xen_platform_log xen platform: XENFILT|FdoCreate: FFFFFA800250AAC0 (PCIIDE\IDEChannel\0)
xen_platform_log xen platform: XENFILT|FdoCreate: FFFFFA8002515AC0 (PCIIDE\IDEChannel\1)
xen_platform_log xen platform: XENFILT|PdoCreate: FFFFFA8002523630 (IDE\CdRomQEMU_QEMU_DVD-ROM_______________________2.1.____\0.1.0)
xen_platform_log xen platform: XENVBD|DriverEntry:8.0.0.0 (24/9/2014)
xen_platform_log xen platform: XENVBD|__DriverParseParameterKey:DriverParameters: 
xen_platform_log xen platform: XENVBD|DispatchPnp:DeviceObject 0xFFFFFA800252C060 is not FDO (0x0000000000000000) or a PDO
xen_platform_log xen platform: XENVBD|DispatchPnp:DeviceObject 0xFFFFFA800252C060 is not FDO (0x0000000000000000) or a PDO
xen_platform_log xen platform: XENVBD|DispatchPnp:DeviceObject 0xFFFFFA800252C060 is not FDO (0x0000000000000000) or a PDO
xen_platform_log xen platform: XENVBD|DispatchPnp:DeviceObject 0xFFFFFA800252C060 is not FDO (0x0000000000000000) or a PDO
xen_platform_log xen platform: XENVBD|DispatchPnp:DeviceObject 0xFFFFFA800252C060 is not FDO (0x0000000000000000) or a PDO
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: BUS_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENVBD|DispatchPnp:DeviceObject 0xFFFFFA800252C060 is not FDO (0x0000000000000000) or a PDO
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: BUS_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: Version = 0
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: Master = TRUE
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: ScatterGather = TRUE
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: DemandMode = FALSE
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: AutoInitialize = FALSE
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: Dma32BitAddresses = TRUE
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: IgnoreCount = FALSE
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: Dma64BitAddresses = TRUE
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: BusNumber = 00000000
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: DmaChannel = ffffffff
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: InterfaceType = Internal
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: DmaWidth = 8Bits
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: DmaSpeed = Compatible
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: MaximumLength = 000b0000
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: DmaPort = ffffffff
xen_platform_log xen platform: XENBUS|DmaGetAdapter: no interception
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: STORE_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: EVTCHN_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: GNTTAB_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: SUSPEND_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: DEBUG_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: EMULATED_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENFILT|PdoQueryInterface: PCI\VEN_5853&DEV_0001&SUBSYS_00015853&REV_01\10: EMULATED_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENVBD|__FdoSetDevicePowerState:POWER D3 to D0
xen_platform_log xen platform: XENVBD|__FdoD3ToD0:D3->D0
xen_platform_log xen platform: XENVBD|__FdoIsPdoUnplugged:Target[0] : (vbd/768) Emulated NOT_PRESENT
xen_platform_log xen platform: XENVBD|PdoCreate:Target[0] : Creating (PV)
xen_platform_log xen platform: XENVBD|PdoSetDevicePowerState:Target[0] : POWER D3 to D0
xen_platform_log xen platform: XENVBD|PdoD3ToD0:Target[0] : D3->D0 (PV)
xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : INITIALIZED ----> ENABLED
xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : in state CLOSED
xen_platform_log xen platform: XENVBD|FrontendWriteUsage:Target[0] : NOT_DUMP NOT_HIBER NOT_PAGE
xen_platform_log xen platform: XENVBD|PdoReadInquiryData:Target[0] : Failed to get Page80 data
xen_platform_log xen platform: XENVBD|PdoReadInquiryData:Target[0] : Failed to get Page83 data
xen_platform_log xen platform: XENVBD|PdoUpdateInquiryData:Target[0] : VDI-UUID = {00000000-0000-0000-0000-000000000000}
xen_platform_log xen platform: XENVBD|FrontendPrepare:Target[0] : BackendId 0 (/local/domain/0/backend/qdisk/101/768)
xen_platform_log xen platform: XENVBD|FrontendReadFeatures:Target[0] : Features: PERSISTENT 
xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : in state PREPARED
xen_platform_log xen platform: XENBUS|RangeSetPop: fail1 (c000009a)
xen_platform_log xen platform: GNTTAB: MAP XENMAPSPACE_grant_table[0] @ 00000000.f8001000
xen_platform_log xen platform: XENBUS|GnttabExpand: added references [00000009 - 000001ff]
xen_platform_log xen platform: XENVBD|__ReadDiskInfo:Target[0] : 83394560 sectors of 512 bytes (512)
xen_platform_log xen platform: XENVBD|__ReadDiskInfo:Target[0] : 39 GB (00000000) 
xen_platform_log xen platform: XENVBD|FrontendReadDiskInfo:Target[0] : Features: FLUSH DISCARD 
xen_platform_log xen platform: XENVBD|FrontendReadDiskInfo:Target[0] : DISCARD 0/0
xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : in state CONNECTED
xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : in state ENABLED
xen_platform_log xen platform: XENVBD|PdoCreate:Target[0] : Created (PV)
xen_platform_log xen platform: XENVBD|FdoLogTargets:ScanThread ===>
xen_platform_log xen platform: XENVBD|FdoLogTargets:ScanThread : Target[0] = 0xFFFFFA8002521020 (present)
xen_platform_log xen platform: XENVBD|FdoLogTargets:ScanThread <===
xen_platform_log xen platform: XENVBD|FdoDispatchPnp:14:QUERY_PNP_DEVICE_STATE -> c00000bb
xen_platform_log xen platform: XENVBD|__HandlePage83:Target[0] : INQUIRY Using Fake Page83 Data
xen_platform_log xen platform: XENVBD|__HandlePage80:Target[0] : INQUIRY Using Fake Page80 Data
xen_platform_log xen platform: XENVBD|PdoSetDeviceObject:Target[0] : Setting DeviceObject = 0xFFFFFA80025296D0
xen_platform_log xen platform: XENVBD|FdoMapDeviceObjectToPdo:0xFFFFFA80025296D0 --> Target 0 (000000)
xen_platform_log xen platform: XENVBD|PdoDispatchPnp:Target[0] : 13:QUERY_ID -> c00000bb
xen_platform_log xen platform: XENVBD|PdoDispatchPnp:Target[0] : 15:QUERY_BUS_INFORMATION -> c00000bb
xen_platform_log xen platform: XENVBD|PdoDispatchPnp:Target[0] : 19:UNKNOWN -> c00000bb
xen_platform_log xen platform: XENVBD|PdoDispatchPnp:Target[0] : 18:UNKNOWN -> c00000bb
xen_platform_log xen platform: XENVBD|PdoDispatchPnp:Target[0] : 0d:FILTER_RESOURCE_REQUIREMENTS -> c00000bb
xen_platform_log xen platform: XENVBD|PdoSetDevicePnpState:Target[0] : PNP Present to Started
xen_platform_log xen platform: XENVBD|PdoDispatchPnp:Target[0] : 07:QUERY_DEVICE_RELATIONS -> c00000bb
xen_platform_log xen platform: XENVBD|FrontendWriteUsage:Target[0] : DUMP NOT_HIBER NOT_PAGE
xen_platform_log xen platform: XENVBD|FdoDispatchPnp:14:QUERY_PNP_DEVICE_STATE -> c00000bb
xen_platform_log xen platform: XENBUS|FdoQueryPnpDeviceState: XS0001 XENBUS: not disableable
xen_platform_log xen platform: XENBUS|FdoQueryPnpDeviceState: XS0001 XENBUS: not disableable
xen_platform_log xen platform: XENBUS|FdoQueryPnpDeviceState: XS0001 XENBUS: not disableable
xen_platform_log xen platform: XENVBD|FrontendWriteUsage:Target[0] : NOT_DUMP NOT_HIBER NOT_PAGE
xen_platform_log xen platform: XENVBD|FdoDispatchPnp:14:QUERY_PNP_DEVICE_STATE -> c00000bb
xen_platform_log xen platform: XENVBD|FrontendWriteUsage:Target[0] : NOT_DUMP NOT_HIBER PAGE
xen_platform_log xen platform: XENBUS|RangeSetPop: fail1 (c000009a)
xen_platform_log xen platform: XENVBD|FdoDispatchPnp:14:QUERY_PNP_DEVICE_STATE -> c00000bb
xen_platform_log xen platform: GNTTAB: MAP XENMAPSPACE_grant_table[1] @ 00000000.f8002000
xen_platform_log xen platform: XENBUS|FdoQueryPnpDeviceState: XS0001 XENBUS: not disableable
xen_platform_log xen platform: XENBUS|GnttabExpand: added references [00000200 - 000003ff]
xen_platform_log xen platform: XENBUS|FdoQueryPnpDeviceState: XS0001 XENBUS: not disableable
xen_platform_log xen platform: XENBUS|FdoQueryPnpDeviceState: XS0001 XENBUS: not disableable
xen_platform_log xen platform: XENVBD|FrontendWriteUsage:Target[0] : DUMP NOT_HIBER PAGE
xen_platform_log xen platform: XENVBD|FdoDispatchPnp:14:QUERY_PNP_DEVICE_STATE -> c00000bb
xen_platform_log xen platform: XENBUS|FdoQueryPnpDeviceState: XS0001 XENBUS: not disableable
xen_platform_log xen platform: XENBUS|FdoQueryPnpDeviceState: XS0001 XENBUS: not disableable
main_channel_handle_parsed: agent start
main_channel_handle_parsed: agent start
main_channel_handle_parsed: agent start
xen_platform_log xen platform: XEN|SystemPowerStateCallback: <- S0
xen_platform_log xen platform: XENVBD|FrontendWriteUsage:Target[0] : NOT_DUMP NOT_HIBER PAGE
xen_platform_log xen platform: XENVBD|FdoDevicePower:FDO:PowerDeviceD3 (ShutdownOff)
xen_platform_log xen platform: XENVBD|__FdoSetDevicePowerState:POWER D0 to D3
xen_platform_log xen platform: XENVBD|__FdoD0ToD3:D0->D3
xen_platform_log xen platform: XENVBD|PdoSetDevicePowerState:Target[0] : POWER D0 to D3
xen_platform_log xen platform: XENVBD|PdoD0ToD3:Target[0] : D0->D3 (PV)
xen_platform_log xen platform: XENVBD|__PdoPauseDataPath:Target[0] : Waiting for 0 Submitted requests
xen_platform_log xen platform: XENVBD|__PdoPauseDataPath:Target[0] : 0/0 Submitted requests left (0 iterrations)
xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : ENABLED ----> CLOSED
xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : in state CONNECTED
xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : in state CLOSING
xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : in state CLOSED
xen_platform_log xen platform: GNTTAB: UNMAP XENMAPSPACE_grant_table[1]
xen_platform_log xen platform: GNTTAB: UNMAP XENMAPSPACE_grant_table[0]
xen_platform_log xen platform: XENBUS|GnttabContract: removed refrences [00000009 - 000003ff]
Issued domain 101 poweroff
red_channel_client_disconnect_dummy: rcc=0x7fb516a715b0 (channel=0x7fb5168f1840 type=5 id=0)
snd_channel_put: SndChannel=0x7fb516a66b40 freed
red_channel_client_disconnect_dummy: rcc=0x7fb516a768f0 (channel=0x7fb5168e0fa0 type=6 id=0)
snd_channel_put: SndChannel=0x7fb516af7550 freed
red_channel_client_disconnect: rcc=0x7fb516d06080 (channel=0x7fb516974380 type=2 id=0)
red_channel_client_disconnect: rcc=0x7fb516cbdd80 (channel=0x7fb5168c0c40 type=4 id=0)

--------------080006000206030104060307
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
--------------080006000206030104060307--


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 16 13:39:30 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 16 Oct 2014 13:39: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 1XelH8-0000LR-Oy; Thu, 16 Oct 2014 13:39:30 +0000
Received: from mail6.bemta4.messagelabs.com ([85.158.143.247])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1XelH6-0000LM-NF
	for win-pv-devel@lists.xenproject.org; Thu, 16 Oct 2014 13:39:29 +0000
Received: from [85.158.143.35] by server-2.bemta-4.messagelabs.com id
	57/FD-10419-F8ACF345; Thu, 16 Oct 2014 13:39:27 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-9.tower-21.messagelabs.com!1413466765!13417531!1
X-Originating-IP: [74.125.82.49]
X-SpamReason: No, hits=1.7 required=7.0 tests=BIZ_TLD
X-StarScan-Received: 
X-StarScan-Version: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 8107 invoked from network); 16 Oct 2014 13:39:25 -0000
Received: from mail-wg0-f49.google.com (HELO mail-wg0-f49.google.com)
	(74.125.82.49)
	by server-9.tower-21.messagelabs.com with RC4-SHA encrypted SMTP;
	16 Oct 2014 13:39:25 -0000
Received: by mail-wg0-f49.google.com with SMTP id x12so3770100wgg.20
	for <win-pv-devel@lists.xenproject.org>;
	Thu, 16 Oct 2014 06:39:25 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:message-id:date:from:user-agent:mime-version:to
	:subject:references:in-reply-to:content-type;
	bh=QqzZMh6o1xOoZxGabvKa4SXf8vtiHhiQMeSYY86pEqQ=;
	b=NwvCnyYLtx0DdDXB57rH6rbIY+xg8ZISYGCQh/rxh6DWy8oaMiEUyFfT0H6MSt6Mri
	UlK9g9F2ZCoC5y0I3a/S3p0WXa95Mjn2cxdD8sbl0YJMaksLd+DJ8aoBomCsDBQLOMoT
	Xil5hd8GZTsG2bB6Oes2udoC6pxzW+BNrSjXOdq9O1cr71GxB7ywyCCEhKZS8E8HVMyb
	pTciFQsDDzmX0sawau+zbzmRRxdGTN6+Iawu08Tx6rAlxqqmYEikwdjHpEFMJACt2iN3
	36sVpaA2PpBoTa0XmkzKWVPa2WHivl7/y0iND6TG6k6aWOkrN7eD97ySq9EQ6aP5IR/n
	d8fA==
X-Gm-Message-State: ALoCoQly6SRzkH4Hd2UDdts/IB0Wxl9THyu4Gvk2XmC0Ct9j4Rui8hJOOT16hQXVwyHA+pd0gurF
X-Received: by 10.180.73.103 with SMTP id k7mr20661793wiv.83.1413466765589;
	Thu, 16 Oct 2014 06:39:25 -0700 (PDT)
Received: from [192.168.1.15] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by mx.google.com with ESMTPSA id
	lk6sm27486126wjb.26.2014.10.16.06.39.23 for <multiple recipients>
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Thu, 16 Oct 2014 06:39:24 -0700 (PDT)
Message-ID: <543FCA93.2010805@m2r.biz>
Date: Thu, 16 Oct 2014 15:39:31 +0200
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64;
	rv:24.0) Gecko/20100101 Thunderbird/24.6.0
MIME-Version: 1.0
To: Paul Durrant <Paul.Durrant@citrix.com>, 
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <543F887B.5030500@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111050FF@AMSPEX01CL01.citrite.net>
	<543F912C.8000504@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD01110526F@AMSPEX01CL01.citrite.net>
	<543FA4F6.5090804@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111053EA@AMSPEX01CL01.citrite.net>
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD0111053EA@AMSPEX01CL01.citrite.net>
Content-Type: multipart/mixed; boundary="------------080006000206030104060307"
Subject: Re: [win-pv-devel] Blue screen on xenvif install
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.
--------------080006000206030104060307
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

Il 16/10/2014 13:04, Paul Durrant ha scritto:
>> -----Original Message-----
>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>> Sent: 16 October 2014 11:59
>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>> Subject: Re: Blue screen on xenvif install
>>
>> Il 16/10/2014 12:00, Paul Durrant ha scritto:
>>>> -----Original Message-----
>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>> Sent: 16 October 2014 10:35
>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>>>> Subject: Re: Blue screen on xenvif install
>>>>
>>>> Il 16/10/2014 10:59, Paul Durrant ha scritto:
>>>>>> -----Original Message-----
>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>>>> Sent: 16 October 2014 09:58
>>>>>> To: win-pv-devel@lists.xenproject.org
>>>>>> Cc: Paul Durrant
>>>>>> Subject: Blue screen on xenvif install
>>>>>>
>>>>>> Today I tried to install new winpv driver to other 3 windows 7 pro 64
>>>>>> bit domUs.
>>>>>> Days ago I installed them successful on one windows 7 pro 64 bit and
>> one
>>>>>> windows 8.1 enterprise 64 bit.
>>>>>> On first domUs I tried to install them today I installed xenbus and
>>>>>> xenvbd successful but on xenvif install windows crashed with blue
>>>>>> screen, if I saw it correctly was an kernel in-page error or something
>>>>>> similar.
>>>>>> After reboot I retried to install xenvif but now always fails.
>>>>>>
>>>>> Sounds odd. Do you have a MEMORY.DMP?
>>>>>
>>>>>      Paul
>>>> Windows is setted to write dump of kernel memory on system error but
>>>> %systemroot%\memory.dmp is missed :(
>>>> I also checked the windows events log but I found only kernel-power as
>>>> critical that seems not contains useful data.
>>>>
>>>> I found probably useful data in xl dmesg (I copied all below from domU
>>>> start to xen bug):
>>>>> (d98) HVM Loader
>>>>> (d98) Detected Xen v4.5-unstable
>>>>> (d98) Xenbus rings @0xfeffc000, event channel 1
>>>>> (d98) System requested SeaBIOS
>>>>> (d98) CPU speed is 2660 MHz
>>>>> (d98) Relocating guest memory for lowmem MMIO space disabled
>>>>> (XEN) irq.c:270: Dom98 PCI link 0 changed 0 -> 5
>>>>> (d98) PCI-ISA link 0 routed to IRQ5
>>>>> (XEN) irq.c:270: Dom98 PCI link 1 changed 0 -> 10
>>>>> (d98) PCI-ISA link 1 routed to IRQ10
>>>>> (XEN) irq.c:270: Dom98 PCI link 2 changed 0 -> 11
>>>>> (d98) PCI-ISA link 2 routed to IRQ11
>>>>> (XEN) irq.c:270: Dom98 PCI link 3 changed 0 -> 5
>>>>> (d98) PCI-ISA link 3 routed to IRQ5
>>>>> (d98) pci dev 01:3 INTA->IRQ10
>>>>> (d98) pci dev 02:0 INTA->IRQ11
>>>>> (d98) pci dev 03:0 INTA->IRQ5
>>>>> (d98) pci dev 04:0 INTA->IRQ5
>>>>> (d98) pci dev 05:0 INTA->IRQ10
>>>>> (d98) pci dev 06:0 INTA->IRQ11
>>>>> (d98) pci dev 1d:0 INTA->IRQ10
>>>>> (d98) pci dev 1d:1 INTB->IRQ11
>>>>> (d98) pci dev 1d:2 INTC->IRQ5
>>>>> (d98) pci dev 1d:7 INTD->IRQ5
>>>>> (d98) No RAM in high memory; setting high_mem resource base to
>>>> 100000000
>>>>> (d98) pci dev 05:0 bar 10 size 004000000: 0f0000000
>>>>> (d98) pci dev 05:0 bar 14 size 004000000: 0f4000000
>>>>> (d98) pci dev 02:0 bar 14 size 001000000: 0f8000008
>>>>> (d98) pci dev 06:0 bar 30 size 000040000: 0f9000000
>>>>> (d98) pci dev 05:0 bar 30 size 000010000: 0f9040000
>>>>> (d98) pci dev 03:0 bar 10 size 000004000: 0f9050000
>>>>> (d98) pci dev 05:0 bar 18 size 000002000: 0f9054000
>>>>> (d98) pci dev 04:0 bar 14 size 000001000: 0f9056000
>>>>> (d98) pci dev 1d:7 bar 10 size 000001000: 0f9057000
>>>>> (d98) pci dev 02:0 bar 10 size 000000100: 00000c001
>>>>> (d98) pci dev 06:0 bar 10 size 000000100: 00000c101
>>>>> (d98) pci dev 06:0 bar 14 size 000000100: 0f9058000
>>>>> (d98) pci dev 04:0 bar 10 size 000000020: 00000c201
>>>>> (d98) pci dev 05:0 bar 1c size 000000020: 00000c221
>>>>> (d98) pci dev 1d:0 bar 20 size 000000020: 00000c241
>>>>> (d98) pci dev 1d:1 bar 20 size 000000020: 00000c261
>>>>> (d98) pci dev 1d:2 bar 20 size 000000020: 00000c281
>>>>> (d98) pci dev 01:1 bar 20 size 000000010: 00000c2a1
>>>>> (d98) Multiprocessor initialisation:
>>>>> (d98)  - CPU0 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8] ...
>>>>> done.
>>>>> (d98)  - CPU1 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8] ...
>>>>> done.
>>>>> (d98) Testing HVM environment:
>>>>> (d98)  - REP INSB across page boundaries ... passed
>>>>> (d98)  - GS base MSRs and SWAPGS ... passed
>>>>> (d98) Passed 2 of 2 tests
>>>>> (d98) Writing SMBIOS tables ...
>>>>> (d98) Loading SeaBIOS ...
>>>>> (d98) Creating MP tables ...
>>>>> (d98) Loading ACPI ...
>>>>> (d98) S3 disabled
>>>>> (d98) S4 disabled
>>>>> (d98) vm86 TSS at fc00a100
>>>>> (d98) BIOS map:
>>>>> (d98)  10000-100d3: Scratch space
>>>>> (d98)  c0000-fffff: Main BIOS
>>>>> (d98) E820 table:
>>>>> (d98)  [00]: 00000000:00000000 - 00000000:000a0000: RAM
>>>>> (d98)  HOLE: 00000000:000a0000 - 00000000:000c0000
>>>>> (d98)  [01]: 00000000:000c0000 - 00000000:00100000: RESERVED
>>>>> (d98)  [02]: 00000000:00100000 - 00000000:78000000: RAM
>>>>> (d98)  HOLE: 00000000:78000000 - 00000000:fc000000
>>>>> (d98)  [03]: 00000000:fc000000 - 00000001:00000000: RESERVED
>>>>> (d98) Invoking SeaBIOS ...
>>>>> (d98) SeaBIOS (version
>>>>> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
>>>>> (d98)
>>>>> (d98) Found Xen hypervisor signature at 40000100
>>>>> (d98) Running on QEMU (i440fx)
>>>>> (d98) xen: copy e820...
>>>>> (d98) Relocating init from 0x000df619 to 0x77fae600 (size 71995)
>>>>> (d98) CPU Mhz=2660
>>>>> (d98) Found 13 PCI devices (max PCI bus is 00)
>>>>> (d98) Allocated Xen hypercall page at 77fff000
>>>>> (d98) Detected Xen v4.5-unstable
>>>>> (d98) xen: copy BIOS tables...
>>>>> (d98) Copying SMBIOS entry point from 0x00010010 to 0x000f0f40
>>>>> (d98) Copying MPTABLE from 0xfc001170/fc001180 to 0x000f0e40
>>>>> (d98) Copying PIR from 0x00010030 to 0x000f0dc0
>>>>> (d98) Copying ACPI RSDP from 0x000100b0 to 0x000f0d90
>>>>> (d98) Using pmtimer, ioport 0xb008
>>>>> (d98) Scan for VGA option rom
>>>>> (d98) Running option rom at c000:0003
>>>>> (XEN) stdvga.c:147:d98v0 entering stdvga and caching modes
>>>>> (d98) pmm call arg1=0
>>>>> (d98) Turning on vga text mode console
>>>>> (d98) SeaBIOS (version
>>>>> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
>>>>> (d98) Machine UUID f4cdeb74-0db1-4748-948d-42579a494120
>>>>> (d98) EHCI init on dev 00:1d.7 (regs=0xf9057020)
>>>>> (d98) Found 0 lpt ports
>>>>> (d98) Found 0 serial ports
>>>>> (d98) ATA controller 1 at 1f0/3f4/0 (irq 14 dev 9)
>>>>> (d98) ATA controller 2 at 170/374/0 (irq 15 dev 9)
>>>>> (d98) ata0-0: QEMU HARDDISK ATA-7 Hard-Disk (40720 MiBytes)
>>>>> (d98) Searching bootorder for: /pci@i0cf8/*@1,1/drive@0/disk@0
>>>>> (d98) DVD/CD [ata0-1: QEMU DVD-ROM ATAPI-4 DVD/CD]
>>>>> (d98) Searching bootorder for: /pci@i0cf8/*@1,1/drive@0/disk@1
>>>>> (d98) UHCI init on dev 00:1d.0 (io=c240)
>>>>> (d98) UHCI init on dev 00:1d.1 (io=c260)
>>>>> (d98) UHCI init on dev 00:1d.2 (io=c280)
>>>>> (d98) PS2 keyboard initialized
>>>>> (d98) All threads complete.
>>>>> (d98) Scan for option roms
>>>>> (d98) Running option rom at c980:0003
>>>>> (d98) pmm call arg1=1
>>>>> (d98) pmm call arg1=0
>>>>> (d98) pmm call arg1=1
>>>>> (d98) pmm call arg1=0
>>>>> (d98) Searching bootorder for: /pci@i0cf8/*@6
>>>>> (d98)
>>>>> (d98) Press F12 for boot menu.
>>>>> (d98)
>>>>> (d98) Searching bootorder for: HALT
>>>>> (d98) drive 0x000f0d40: PCHS=16383/16/63 translation=lba
>>>>> LCHS=1024/255/63 s=83394560
>>>>> (d98) Space available for UMB: ca800-ee800, f0000-f0ce0
>>>>> (d98) Returned 258048 bytes of ZoneHigh
>>>>> (d98) e820 map has 6 items:
>>>>> (d98)   0: 0000000000000000 - 000000000009fc00 = 1 RAM
>>>>> (d98)   1: 000000000009fc00 - 00000000000a0000 = 2 RESERVED
>>>>> (d98)   2: 00000000000f0000 - 0000000000100000 = 2 RESERVED
>>>>> (d98)   3: 0000000000100000 - 0000000077fff000 = 1 RAM
>>>>> (d98)   4: 0000000077fff000 - 0000000078000000 = 2 RESERVED
>>>>> (d98)   5: 00000000fc000000 - 0000000100000000 = 2 RESERVED
>>>>> (d98) enter handle_19:
>>>>> (d98)   NULL
>>>>> (d98) Booting from Hard Disk...
>>>>> (d98) Booting from 0000:7c00
>>>>> (XEN) d98: VIRIDIAN GUEST_OS_ID: vendor: 1 os: 4 major: 6 minor: 1 sp:
>>>>> 1 build: 1db1
>>>>> (XEN) d98: VIRIDIAN HYPERCALL: enabled: 1 pfn: 3ffff
>>>>> (XEN) d98v0: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffe
>>>>> (XEN) d98v1: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffd
>>>>> (XEN) irq.c:270: Dom98 PCI link 0 changed 5 -> 0
>>>>> (XEN) irq.c:270: Dom98 PCI link 1 changed 10 -> 0
>>>>> (XEN) irq.c:270: Dom98 PCI link 2 changed 11 -> 0
>>>>> (XEN) irq.c:270: Dom98 PCI link 3 changed 5 -> 0
>>>>> (XEN) irq.c:380: Dom98 callback via changed to GSI 24
>>>>> (d98) XEN|BUGCHECK: ====>
>>>>> (d98) XEN|BUGCHECK: 0000007A: FFFFF6FC000171C8 FFFFFFFFC0000185
>>>>> 000000001BD6A860 FFFF
>>>>> (d98) F80002E39000
>>>>> (d98) XEN|BUGCHECK: CONTEXT (FFFFF8800310E530):
>>>>> (d98) XEN|BUGCHECK: - GS = 002B
>>>>> (d98) XEN|BUGCHECK: - FS = 0053
>>>>> (d98) XEN|BUGCHECK: - ES = 002B
>>>>> (d98) XEN|BUGCHECK: - DS = 002B
>>>>> (d98) XEN|BUGCHECK: - SS = 0018
>>>>> (d98) XEN|BUGCHECK: - CS = 0010
>>>>> (d98) XEN|BUGCHECK: - EFLAGS = 00000086
>>>>> (d98) XEN|BUGCHECK: - RDI = 00000000000171C8
>>>>> (d98) XEN|BUGCHECK: - RSI = 00000000C0000185
>>>>> (d98) XEN|BUGCHECK: - RBX = 00000000038AC8F8
>>>>> (d98) XEN|BUGCHECK: - RDX = 0000000000000000
>>>>> (d98) XEN|BUGCHECK: - RCX = 000000000310E530
>>>>> (d98) XEN|BUGCHECK: - RAX = 000000002ECF4722
>>>>> (d98) XEN|BUGCHECK: - RBP = 000000001BD6A860
>>>>> (d98) XEN|BUGCHECK: - RIP = 00000000038A2A43
>>>>> (d98) XEN|BUGCHECK: - RSP = 000000000310E510
>>>>> (d98) XEN|BUGCHECK: - R8 = 0000000000000000
>>>>> (d98) XEN|BUGCHECK: - R9 = 0000000000000000
>>>>> (d98) XEN|BUGCHECK: - R10 = 0000000000000000
>>>>> (d98) XEN|BUGCHECK: - R11 = 0000000000000000
>>>>> (d98) XEN|BUGCHECK: - R12 = 000000000000007A
>>>>> (d98) XEN|BUGCHECK: - R13 = 0000000000000001
>>>>> (d98) XEN|BUGCHECK: - R14 = 0000000002E39000
>>>>> (d98) XEN|BUGCHECK: - R15 = 0000000002CBAC40
>>>>> (d98) XEN|BUGCHECK: STACK:
>>>>> (d98) XEN|BUGCHECK: 000000000310EA20: (0000000000000003
>>>>> 00000000038A50F0 00000000038A
>>>>> (d98) 4860 000000000000007A) xen.sys + 00000000000049AC
>>>>> (d98) XEN|BUGCHECK: 000000000310EA70: (00000000038AD0D0
>>>>> 0000000000000000 000000000000
>>>>> (d98) 0004 0000000002C83500) ntoskrnl.exe + 0000000000128585
>>>>> (d98) XEN|BUGCHECK: 000000000310EAA0: (00000000038AD0D0
>>>>> 0000000002C83500 000000000000
>>>>> (d98) 000F 0000000001780660) ntoskrnl.exe + 0000000000167C0D
>>>>> (d98) XEN|BUGCHECK: 000000000310F170: (0000000003816470
>>>>> 0000000002B4C8C1 000000000000
>>>>> (d98) 00FE 0000000000000000) ntoskrnl.exe + 0000000000075CC4
>>>>> (d98) XEN|BUGCHECK: 000000000310F1B0: (000000000000007A
>>>>> 00000000000171C8 00000000C000
>>>>> (d98) 0185 000000001BD6A860) ntoskrnl.exe + 00000000000E8752
>>>>> (d98) XEN|BUGCHECK: 000000000310F290: (00000000038163B0
>>>>> 000000000310F320 0000000002CB
>>>>> (d98) D540 00000000038163B0) ntoskrnl.exe + 000000000009C91F
>>>>> (d98) XEN|BUGCHECK: 000000000310F360: (0000000000000000
>>>>> 0000000000000008 00000000FFFF
>>>>> (d98) FFFF 00000000003500F0) ntoskrnl.exe + 00000000000831B9
>>>>> (d98) XEN|BUGCHECK: 000000000310F4C0: (0000000000000008
>>>>> 0000000002E39000 000000000000
>>>>> (d98) 0000 0000000000000000) ntoskrnl.exe + 0000000000073CEE
>>>>> (d98) XEN|BUGCHECK: 000000000310F658: (0000000002E5CFD5
>>>>> 0000000000000000 0000000003EB
>>>>> (d98) 8710 00000000FFFFFFFF) ntoskrnl.exe + 000000000042C000
>>>> If you need more tests/informations tell me and I'll post them.
>>>> Thanks for any reply and sorry for my bad english.
>>> Well, that tells me you had a 7A BSOD, which is a
>> KERNEL_DATA_INPAGE_ERROR. The error status (param 2) was C0000185 so
>> that's a STATUS_IO_DEVICE_ERROR. The documentation at
>> http://msdn.microsoft.com/en-
>> gb/library/windows/hardware/ff559211%28v=vs.85%29.aspx tells me that
>> this means:
>>> "improper termination or defective cabling on SCSI devices or that two
>> devices are trying to use the same IRQ."
>>> But you said you had xenvbd already installed so you'll be using a PV
>> storage path. Is there any indication of problems with your storage?
>>>     Paul
>> DomUs disk are all raw files in local dom0 disks, raid1 with "LSI Logic
>> / Symbios Logic SAS2008 PCI-Express Fusion-MPT SAS-2" dom0 partitions
>> are GTP and fs ext4.
>> Dom0 is wheezy with kernel is linux-image-3.16-0.bpo.2-amd64 version
>> 3.16.3-2~bpo70+1
>> No kern or syslog errors, only many of these warning that someone
>> replied me that should not be a problem:
>> Oct 15 10:45:13 mtorMN01OU kernel: [773197.117518] xen:balloon:
>> reserve_additional_memory: add_memory() failed: -17
>> DomU now see disk as xen pvdisk, on xenvif install probably still was
>> full emulated disk even if xenvbd was installed successful before xenvif
>> install (failed with BSOD)
>> The IRQ seems visible from xl dmesg output below, can you check them is
>> have something wrong or strange, I see some of them "duplicate" but I
>> not know if is correct.
>>
>> DomU xl cfg:
>>> name='office1_w7'
>>> builder="hvm"
>>> memory=2048
>>> vcpus=2
>>> acpi_s3=0
>>> acpi_s4=0
>>> vif=['bridge=xenbr0,mac=00:16:3e:41:ae:8b']
>>>
>> disk=['/mnt/vm/disks/office1_w7.disk1.xm,raw,hda,rw',',raw,hdb,ro,cdrom'
>> ]
>>> boot='c'
>>> device_model_version="qemu-xen"
>>> viridian=1
>>> vnc=0
>>> keymap="it"
>>> on_crash="destroy"
>>> vga="qxl"
>>> spice=1
>>> spicehost='0.0.0.0'
>>> spiceport=6001
>>> spicedisable_ticketing=0
>>> spicepasswd="password"
>>> spicevdagent=1
>>> spice_clipboard_sharing=0
>>> spiceusbredirection=4
>>> soundhw="hda"
>>> localtime=1
>> If you need more tests/informations tell me and I'll post them.
>>
> Do you have the qemu log (with xen platform logging enabled). This is where the PV drivers log failures/warnings.
>
>    Paul
>
>
I retried enabling xen platform debug in qemu trace but no add lines in 
log when I try to install xenvif and fails.
I attach anyway the log if can be useful.
I'll also try to restore the backup of this night of the domU when I had 
the BSOD trying reproduce it with xen debug in qemu trace and different 
windows memory dump options.


--------------080006000206030104060307
Content-Type: text/plain; charset=windows-1252;
 name="qemu-dm-office1_w7.log"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
 filename="qemu-dm-office1_w7.log"

(/usr/sbin/xl:30535): Spice-Warning **: reds.c:1863:reds_handle_ticket: Invalid password
main_channel_link: add main channel client
main_channel_handle_parsed: net test: latency 2.467000 ms, bitrate 2566416040 bps (2447.525063 Mbps)
inputs_connect: inputs channel client create
red_dispatcher_set_cursor_peer: 
xen_platform_log xen platform: XEN|DllInitialize: XEN 8.0.0 (0) (13.10.2014)
xen_platform_log xen platform: XEN|SystemGetStartOptions:  TESTSIGNING  NOEXECUTE=OPTIN
xen_platform_log xen platform: XEN|SystemGetVersionInformation: KERNEL: 6.1 (BUILD 7601) PLATFORM WIN32_NT (x64)
xen_platform_log xen platform: XEN|SystemGetVersionInformation: SP: 1.0 ()
xen_platform_log xen platform: XEN|SystemGetVersionInformation: SUITES:
xen_platform_log xen platform: XEN|SystemGetVersionInformation: - TERMINAL
xen_platform_log xen platform: XEN|SystemGetVersionInformation: - SINGLEUSERTS
xen_platform_log xen platform: XEN|SystemGetVersionInformation: TYPE: WORKSTATION
xen_platform_log xen platform: XEN|SystemGetMemoryInformation: RANGE[0] 00000000.00001000 - 00000000.0009efff
xen_platform_log xen platform: XEN|SystemGetMemoryInformation: RANGE[1] 00000000.00100000 - 00000000.77ffefff
xen_platform_log xen platform: XEN|SystemCpuInformation: ====> (1)
xen_platform_log xen platform: XEN|SystemCpuInformation: Manufacturer: GenuineIntel
xen_platform_log xen platform: XEN|SystemCpuInformation: Local APIC ID: 02
xen_platform_log xen platform: XEN|SystemCpuInformation: <==== (1)
xen_platform_log xen platform: XEN|SystemCpuInformation: ====> (0)
xen_platform_log xen platform: XEN|SystemCpuInformation: Manufacturer: GenuineIntel
xen_platform_log xen platform: XEN|SystemCpuInformation: Local APIC ID: 00
xen_platform_log xen platform: XEN|SystemCpuInformation: <==== (0)
xen_platform_log xen platform: XEN|HypercallInitialize: XEN 4.5
xen_platform_log xen platform: XEN|HypercallInitialize: INTERFACE 0x00040300
xen_platform_log xen platform: XEN|HypercallInitialize: HypercallPfn[0]: 00000000000036A6
xen_platform_log xen platform: XENFILT|DriverEntry: XENFILT 8.0.0 (0) (13.10.2014)
xen_platform_log xen platform: XENFILT|DriverSetActiveDeviceInstance: PCI\VEN_5853&DEV_0001&SUBSYS_00015853&REV_01/10
xen_platform_log xen platform: XENFILT|UnplugCheckForPVDisks: PRESENT
xen_platform_log xen platform: XENFILT|UnplugCheckForPVNics: NOT PRESENT
xen_platform_log xen platform: UNPLUG: PRE-AMBLE (DRIVERS NOT BLACKLISTED)
xen_platform_log xen platform: UNPLUG: DISKS
xen_platform_log xen platform: XENFILT|FdoCreate: FFFFFA800255E040 (ACPI\PNP0A03\0)
xen_platform_log xen platform: XENFILT|PdoCreate: FFFFFA8002534040 (PCI\VEN_8086&DEV_1237&SUBSYS_11001AF4&REV_02\00)
xen_platform_log xen platform: XENFILT|PdoCreate: FFFFFA80024CA040 (PCI\VEN_8086&DEV_7000&SUBSYS_11001AF4&REV_00\08)
xen_platform_log xen platform: XENFILT|PdoCreate: FFFFFA80024CB040 (PCI\VEN_8086&DEV_7010&SUBSYS_11001AF4&REV_00\09)
xen_platform_log xen platform: XENFILT|PdoCreate: FFFFFA80024CC040 (PCI\VEN_5853&DEV_0001&SUBSYS_00015853&REV_01\10)
xen_platform_log xen platform: XENFILT|PdoCreate: FFFFFA80024CD040 (PCI\VEN_8086&DEV_2668&SUBSYS_11001AF4&REV_01\18)
xen_platform_log xen platform: XENFILT|PdoCreate: FFFFFA80024CE040 (PCI\VEN_1AF4&DEV_1003&SUBSYS_00031AF4&REV_00\20)
xen_platform_log xen platform: XENFILT|PdoCreate: FFFFFA80024CF040 (PCI\VEN_1B36&DEV_0100&SUBSYS_11001AF4&REV_04\28)
xen_platform_log xen platform: XENFILT|PdoCreate: FFFFFA80024D0040 (PCI\VEN_10EC&DEV_8139&SUBSYS_11001AF4&REV_20\30)
xen_platform_log xen platform: XENFILT|PdoCreate: FFFFFA80024D1040 (PCI\VEN_8086&DEV_2934&SUBSYS_11001AF4&REV_03\E8)
xen_platform_log xen platform: XENFILT|PdoCreate: FFFFFA80024D2040 (PCI\VEN_8086&DEV_2935&SUBSYS_11001AF4&REV_03\E9)
xen_platform_log xen platform: XENFILT|PdoCreate: FFFFFA80024D3040 (PCI\VEN_8086&DEV_2936&SUBSYS_11001AF4&REV_03\EA)
xen_platform_log xen platform: XENFILT|PdoCreate: FFFFFA80024D4AC0 (PCI\VEN_8086&DEV_293A&SUBSYS_11001AF4&REV_03\EF)
xen_platform_log xen platform: XENFILT|PdoCreate: FFFFFA80024D5AC0 (ACPI\PNP0103\0)
xen_platform_log xen platform: XENBUS|DriverEntry: XENBUS 8.0.0 (0) (13.10.2014)
xen_platform_log xen platform: XENFILT|PdoQueryInterface: PCI\VEN_5853&DEV_0001&SUBSYS_00015853&REV_01\10: UNPLUG_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|FdoCreate: FFFFFA80024E2A70 (XS0001 XENBUS) [ACTIVE]
xen_platform_log xen platform: XENBUS|FdoScan: ====>
xen_platform_log xen platform: SHARED_INFO: MAP XENMAPSPACE_shared_info @ 00000000.f8000000
xen_platform_log xen platform: XENBUS|FdoSuspend: ====>
xen_platform_log xen platform: STORE: PAGE @ 00000000.feffc000
xen_platform_log xen platform: XENBUS|FdoBalloon: ====>
xen_platform_log xen platform: XENBUS|PdoCreate: FFFFFA80024FEB00 (VBD 00000001)
xen_platform_log xen platform: XENBUS|PdoCreate: FFFFFA80024FE640 (VIF 00000001)
xen_platform_log xen platform: XENBUS|PdoCreate: FFFFFA8002502D40 (IFACE 00000001)
xen_platform_log xen platform: XENFILT|FdoCreate: FFFFFA800250AAC0 (PCIIDE\IDEChannel\0)
xen_platform_log xen platform: XENFILT|FdoCreate: FFFFFA8002515AC0 (PCIIDE\IDEChannel\1)
xen_platform_log xen platform: XENFILT|PdoCreate: FFFFFA8002523630 (IDE\CdRomQEMU_QEMU_DVD-ROM_______________________2.1.____\0.1.0)
xen_platform_log xen platform: XENVBD|DriverEntry:8.0.0.0 (24/9/2014)
xen_platform_log xen platform: XENVBD|__DriverParseParameterKey:DriverParameters: 
xen_platform_log xen platform: XENVBD|DispatchPnp:DeviceObject 0xFFFFFA800252C060 is not FDO (0x0000000000000000) or a PDO
xen_platform_log xen platform: XENVBD|DispatchPnp:DeviceObject 0xFFFFFA800252C060 is not FDO (0x0000000000000000) or a PDO
xen_platform_log xen platform: XENVBD|DispatchPnp:DeviceObject 0xFFFFFA800252C060 is not FDO (0x0000000000000000) or a PDO
xen_platform_log xen platform: XENVBD|DispatchPnp:DeviceObject 0xFFFFFA800252C060 is not FDO (0x0000000000000000) or a PDO
xen_platform_log xen platform: XENVBD|DispatchPnp:DeviceObject 0xFFFFFA800252C060 is not FDO (0x0000000000000000) or a PDO
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: BUS_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENVBD|DispatchPnp:DeviceObject 0xFFFFFA800252C060 is not FDO (0x0000000000000000) or a PDO
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: BUS_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: Version = 0
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: Master = TRUE
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: ScatterGather = TRUE
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: DemandMode = FALSE
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: AutoInitialize = FALSE
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: Dma32BitAddresses = TRUE
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: IgnoreCount = FALSE
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: Dma64BitAddresses = TRUE
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: BusNumber = 00000000
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: DmaChannel = ffffffff
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: InterfaceType = Internal
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: DmaWidth = 8Bits
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: DmaSpeed = Compatible
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: MaximumLength = 000b0000
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: DmaPort = ffffffff
xen_platform_log xen platform: XENBUS|DmaGetAdapter: no interception
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: STORE_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: EVTCHN_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: GNTTAB_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: SUSPEND_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: DEBUG_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: EMULATED_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENFILT|PdoQueryInterface: PCI\VEN_5853&DEV_0001&SUBSYS_00015853&REV_01\10: EMULATED_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENVBD|__FdoSetDevicePowerState:POWER D3 to D0
xen_platform_log xen platform: XENVBD|__FdoD3ToD0:D3->D0
xen_platform_log xen platform: XENVBD|__FdoIsPdoUnplugged:Target[0] : (vbd/768) Emulated NOT_PRESENT
xen_platform_log xen platform: XENVBD|PdoCreate:Target[0] : Creating (PV)
xen_platform_log xen platform: XENVBD|PdoSetDevicePowerState:Target[0] : POWER D3 to D0
xen_platform_log xen platform: XENVBD|PdoD3ToD0:Target[0] : D3->D0 (PV)
xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : INITIALIZED ----> ENABLED
xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : in state CLOSED
xen_platform_log xen platform: XENVBD|FrontendWriteUsage:Target[0] : NOT_DUMP NOT_HIBER NOT_PAGE
xen_platform_log xen platform: XENVBD|PdoReadInquiryData:Target[0] : Failed to get Page80 data
xen_platform_log xen platform: XENVBD|PdoReadInquiryData:Target[0] : Failed to get Page83 data
xen_platform_log xen platform: XENVBD|PdoUpdateInquiryData:Target[0] : VDI-UUID = {00000000-0000-0000-0000-000000000000}
xen_platform_log xen platform: XENVBD|FrontendPrepare:Target[0] : BackendId 0 (/local/domain/0/backend/qdisk/101/768)
xen_platform_log xen platform: XENVBD|FrontendReadFeatures:Target[0] : Features: PERSISTENT 
xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : in state PREPARED
xen_platform_log xen platform: XENBUS|RangeSetPop: fail1 (c000009a)
xen_platform_log xen platform: GNTTAB: MAP XENMAPSPACE_grant_table[0] @ 00000000.f8001000
xen_platform_log xen platform: XENBUS|GnttabExpand: added references [00000009 - 000001ff]
xen_platform_log xen platform: XENVBD|__ReadDiskInfo:Target[0] : 83394560 sectors of 512 bytes (512)
xen_platform_log xen platform: XENVBD|__ReadDiskInfo:Target[0] : 39 GB (00000000) 
xen_platform_log xen platform: XENVBD|FrontendReadDiskInfo:Target[0] : Features: FLUSH DISCARD 
xen_platform_log xen platform: XENVBD|FrontendReadDiskInfo:Target[0] : DISCARD 0/0
xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : in state CONNECTED
xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : in state ENABLED
xen_platform_log xen platform: XENVBD|PdoCreate:Target[0] : Created (PV)
xen_platform_log xen platform: XENVBD|FdoLogTargets:ScanThread ===>
xen_platform_log xen platform: XENVBD|FdoLogTargets:ScanThread : Target[0] = 0xFFFFFA8002521020 (present)
xen_platform_log xen platform: XENVBD|FdoLogTargets:ScanThread <===
xen_platform_log xen platform: XENVBD|FdoDispatchPnp:14:QUERY_PNP_DEVICE_STATE -> c00000bb
xen_platform_log xen platform: XENVBD|__HandlePage83:Target[0] : INQUIRY Using Fake Page83 Data
xen_platform_log xen platform: XENVBD|__HandlePage80:Target[0] : INQUIRY Using Fake Page80 Data
xen_platform_log xen platform: XENVBD|PdoSetDeviceObject:Target[0] : Setting DeviceObject = 0xFFFFFA80025296D0
xen_platform_log xen platform: XENVBD|FdoMapDeviceObjectToPdo:0xFFFFFA80025296D0 --> Target 0 (000000)
xen_platform_log xen platform: XENVBD|PdoDispatchPnp:Target[0] : 13:QUERY_ID -> c00000bb
xen_platform_log xen platform: XENVBD|PdoDispatchPnp:Target[0] : 15:QUERY_BUS_INFORMATION -> c00000bb
xen_platform_log xen platform: XENVBD|PdoDispatchPnp:Target[0] : 19:UNKNOWN -> c00000bb
xen_platform_log xen platform: XENVBD|PdoDispatchPnp:Target[0] : 18:UNKNOWN -> c00000bb
xen_platform_log xen platform: XENVBD|PdoDispatchPnp:Target[0] : 0d:FILTER_RESOURCE_REQUIREMENTS -> c00000bb
xen_platform_log xen platform: XENVBD|PdoSetDevicePnpState:Target[0] : PNP Present to Started
xen_platform_log xen platform: XENVBD|PdoDispatchPnp:Target[0] : 07:QUERY_DEVICE_RELATIONS -> c00000bb
xen_platform_log xen platform: XENVBD|FrontendWriteUsage:Target[0] : DUMP NOT_HIBER NOT_PAGE
xen_platform_log xen platform: XENVBD|FdoDispatchPnp:14:QUERY_PNP_DEVICE_STATE -> c00000bb
xen_platform_log xen platform: XENBUS|FdoQueryPnpDeviceState: XS0001 XENBUS: not disableable
xen_platform_log xen platform: XENBUS|FdoQueryPnpDeviceState: XS0001 XENBUS: not disableable
xen_platform_log xen platform: XENBUS|FdoQueryPnpDeviceState: XS0001 XENBUS: not disableable
xen_platform_log xen platform: XENVBD|FrontendWriteUsage:Target[0] : NOT_DUMP NOT_HIBER NOT_PAGE
xen_platform_log xen platform: XENVBD|FdoDispatchPnp:14:QUERY_PNP_DEVICE_STATE -> c00000bb
xen_platform_log xen platform: XENVBD|FrontendWriteUsage:Target[0] : NOT_DUMP NOT_HIBER PAGE
xen_platform_log xen platform: XENBUS|RangeSetPop: fail1 (c000009a)
xen_platform_log xen platform: XENVBD|FdoDispatchPnp:14:QUERY_PNP_DEVICE_STATE -> c00000bb
xen_platform_log xen platform: GNTTAB: MAP XENMAPSPACE_grant_table[1] @ 00000000.f8002000
xen_platform_log xen platform: XENBUS|FdoQueryPnpDeviceState: XS0001 XENBUS: not disableable
xen_platform_log xen platform: XENBUS|GnttabExpand: added references [00000200 - 000003ff]
xen_platform_log xen platform: XENBUS|FdoQueryPnpDeviceState: XS0001 XENBUS: not disableable
xen_platform_log xen platform: XENBUS|FdoQueryPnpDeviceState: XS0001 XENBUS: not disableable
xen_platform_log xen platform: XENVBD|FrontendWriteUsage:Target[0] : DUMP NOT_HIBER PAGE
xen_platform_log xen platform: XENVBD|FdoDispatchPnp:14:QUERY_PNP_DEVICE_STATE -> c00000bb
xen_platform_log xen platform: XENBUS|FdoQueryPnpDeviceState: XS0001 XENBUS: not disableable
xen_platform_log xen platform: XENBUS|FdoQueryPnpDeviceState: XS0001 XENBUS: not disableable
main_channel_handle_parsed: agent start
main_channel_handle_parsed: agent start
main_channel_handle_parsed: agent start
xen_platform_log xen platform: XEN|SystemPowerStateCallback: <- S0
xen_platform_log xen platform: XENVBD|FrontendWriteUsage:Target[0] : NOT_DUMP NOT_HIBER PAGE
xen_platform_log xen platform: XENVBD|FdoDevicePower:FDO:PowerDeviceD3 (ShutdownOff)
xen_platform_log xen platform: XENVBD|__FdoSetDevicePowerState:POWER D0 to D3
xen_platform_log xen platform: XENVBD|__FdoD0ToD3:D0->D3
xen_platform_log xen platform: XENVBD|PdoSetDevicePowerState:Target[0] : POWER D0 to D3
xen_platform_log xen platform: XENVBD|PdoD0ToD3:Target[0] : D0->D3 (PV)
xen_platform_log xen platform: XENVBD|__PdoPauseDataPath:Target[0] : Waiting for 0 Submitted requests
xen_platform_log xen platform: XENVBD|__PdoPauseDataPath:Target[0] : 0/0 Submitted requests left (0 iterrations)
xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : ENABLED ----> CLOSED
xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : in state CONNECTED
xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : in state CLOSING
xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : in state CLOSED
xen_platform_log xen platform: GNTTAB: UNMAP XENMAPSPACE_grant_table[1]
xen_platform_log xen platform: GNTTAB: UNMAP XENMAPSPACE_grant_table[0]
xen_platform_log xen platform: XENBUS|GnttabContract: removed refrences [00000009 - 000003ff]
Issued domain 101 poweroff
red_channel_client_disconnect_dummy: rcc=0x7fb516a715b0 (channel=0x7fb5168f1840 type=5 id=0)
snd_channel_put: SndChannel=0x7fb516a66b40 freed
red_channel_client_disconnect_dummy: rcc=0x7fb516a768f0 (channel=0x7fb5168e0fa0 type=6 id=0)
snd_channel_put: SndChannel=0x7fb516af7550 freed
red_channel_client_disconnect: rcc=0x7fb516d06080 (channel=0x7fb516974380 type=2 id=0)
red_channel_client_disconnect: rcc=0x7fb516cbdd80 (channel=0x7fb5168c0c40 type=4 id=0)

--------------080006000206030104060307
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
--------------080006000206030104060307--


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 16 13:45:38 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 16 Oct 2014 13:45: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 1XelN3-0000dQ-Kr; Thu, 16 Oct 2014 13:45:37 +0000
Received: from mail6.bemta4.messagelabs.com ([85.158.143.247])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <Paul.Durrant@citrix.com>) id 1XelN2-0000dJ-Bb
	for win-pv-devel@lists.xenproject.org; Thu, 16 Oct 2014 13:45:36 +0000
Received: from [85.158.143.35] by server-2.bemta-4.messagelabs.com id
	01/D9-10419-FFBCF345; Thu, 16 Oct 2014 13:45:35 +0000
X-Env-Sender: Paul.Durrant@citrix.com
X-Msg-Ref: server-3.tower-21.messagelabs.com!1413467133!13042133!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: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 31272 invoked from network); 16 Oct 2014 13:45:34 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-3.tower-21.messagelabs.com with RC4-SHA encrypted SMTP;
	16 Oct 2014 13:45:34 -0000
X-IronPort-AV: E=Sophos;i="5.04,732,1406592000"; d="scan'208";a="26017988"
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: Blue screen on xenvif install
Thread-Index: AQHP6R88TE2eCcEtSU6laq0K5grY5pwybJlQ///obQCAACb2gP//8KIAgAAjAsCAAAnUgIAAIsDw
Date: Thu, 16 Oct 2014 13:45:32 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD0111057A2@AMSPEX01CL01.citrite.net>
References: <543F887B.5030500@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111050FF@AMSPEX01CL01.citrite.net>
	<543F912C.8000504@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD01110526F@AMSPEX01CL01.citrite.net>
	<543FA4F6.5090804@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111053EA@AMSPEX01CL01.citrite.net>
	<543FCA93.2010805@m2r.biz>
In-Reply-To: <543FCA93.2010805@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] Blue screen on xenvif install
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: 16 October 2014 14:40
> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> Subject: Re: Blue screen on xenvif install
> 
> Il 16/10/2014 13:04, Paul Durrant ha scritto:
> >> -----Original Message-----
> >> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >> Sent: 16 October 2014 11:59
> >> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >> Subject: Re: Blue screen on xenvif install
> >>
> >> Il 16/10/2014 12:00, Paul Durrant ha scritto:
> >>>> -----Original Message-----
> >>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >>>> Sent: 16 October 2014 10:35
> >>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >>>> Subject: Re: Blue screen on xenvif install
> >>>>
> >>>> Il 16/10/2014 10:59, Paul Durrant ha scritto:
> >>>>>> -----Original Message-----
> >>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >>>>>> Sent: 16 October 2014 09:58
> >>>>>> To: win-pv-devel@lists.xenproject.org
> >>>>>> Cc: Paul Durrant
> >>>>>> Subject: Blue screen on xenvif install
> >>>>>>
> >>>>>> Today I tried to install new winpv driver to other 3 windows 7 pro 64
> >>>>>> bit domUs.
> >>>>>> Days ago I installed them successful on one windows 7 pro 64 bit and
> >> one
> >>>>>> windows 8.1 enterprise 64 bit.
> >>>>>> On first domUs I tried to install them today I installed xenbus and
> >>>>>> xenvbd successful but on xenvif install windows crashed with blue
> >>>>>> screen, if I saw it correctly was an kernel in-page error or something
> >>>>>> similar.
> >>>>>> After reboot I retried to install xenvif but now always fails.
> >>>>>>
> >>>>> Sounds odd. Do you have a MEMORY.DMP?
> >>>>>
> >>>>>      Paul
> >>>> Windows is setted to write dump of kernel memory on system error
> but
> >>>> %systemroot%\memory.dmp is missed :(
> >>>> I also checked the windows events log but I found only kernel-power
> as
> >>>> critical that seems not contains useful data.
> >>>>
> >>>> I found probably useful data in xl dmesg (I copied all below from domU
> >>>> start to xen bug):
> >>>>> (d98) HVM Loader
> >>>>> (d98) Detected Xen v4.5-unstable
> >>>>> (d98) Xenbus rings @0xfeffc000, event channel 1
> >>>>> (d98) System requested SeaBIOS
> >>>>> (d98) CPU speed is 2660 MHz
> >>>>> (d98) Relocating guest memory for lowmem MMIO space disabled
> >>>>> (XEN) irq.c:270: Dom98 PCI link 0 changed 0 -> 5
> >>>>> (d98) PCI-ISA link 0 routed to IRQ5
> >>>>> (XEN) irq.c:270: Dom98 PCI link 1 changed 0 -> 10
> >>>>> (d98) PCI-ISA link 1 routed to IRQ10
> >>>>> (XEN) irq.c:270: Dom98 PCI link 2 changed 0 -> 11
> >>>>> (d98) PCI-ISA link 2 routed to IRQ11
> >>>>> (XEN) irq.c:270: Dom98 PCI link 3 changed 0 -> 5
> >>>>> (d98) PCI-ISA link 3 routed to IRQ5
> >>>>> (d98) pci dev 01:3 INTA->IRQ10
> >>>>> (d98) pci dev 02:0 INTA->IRQ11
> >>>>> (d98) pci dev 03:0 INTA->IRQ5
> >>>>> (d98) pci dev 04:0 INTA->IRQ5
> >>>>> (d98) pci dev 05:0 INTA->IRQ10
> >>>>> (d98) pci dev 06:0 INTA->IRQ11
> >>>>> (d98) pci dev 1d:0 INTA->IRQ10
> >>>>> (d98) pci dev 1d:1 INTB->IRQ11
> >>>>> (d98) pci dev 1d:2 INTC->IRQ5
> >>>>> (d98) pci dev 1d:7 INTD->IRQ5
> >>>>> (d98) No RAM in high memory; setting high_mem resource base to
> >>>> 100000000
> >>>>> (d98) pci dev 05:0 bar 10 size 004000000: 0f0000000
> >>>>> (d98) pci dev 05:0 bar 14 size 004000000: 0f4000000
> >>>>> (d98) pci dev 02:0 bar 14 size 001000000: 0f8000008
> >>>>> (d98) pci dev 06:0 bar 30 size 000040000: 0f9000000
> >>>>> (d98) pci dev 05:0 bar 30 size 000010000: 0f9040000
> >>>>> (d98) pci dev 03:0 bar 10 size 000004000: 0f9050000
> >>>>> (d98) pci dev 05:0 bar 18 size 000002000: 0f9054000
> >>>>> (d98) pci dev 04:0 bar 14 size 000001000: 0f9056000
> >>>>> (d98) pci dev 1d:7 bar 10 size 000001000: 0f9057000
> >>>>> (d98) pci dev 02:0 bar 10 size 000000100: 00000c001
> >>>>> (d98) pci dev 06:0 bar 10 size 000000100: 00000c101
> >>>>> (d98) pci dev 06:0 bar 14 size 000000100: 0f9058000
> >>>>> (d98) pci dev 04:0 bar 10 size 000000020: 00000c201
> >>>>> (d98) pci dev 05:0 bar 1c size 000000020: 00000c221
> >>>>> (d98) pci dev 1d:0 bar 20 size 000000020: 00000c241
> >>>>> (d98) pci dev 1d:1 bar 20 size 000000020: 00000c261
> >>>>> (d98) pci dev 1d:2 bar 20 size 000000020: 00000c281
> >>>>> (d98) pci dev 01:1 bar 20 size 000000010: 00000c2a1
> >>>>> (d98) Multiprocessor initialisation:
> >>>>> (d98)  - CPU0 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8] ...
> >>>>> done.
> >>>>> (d98)  - CPU1 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8] ...
> >>>>> done.
> >>>>> (d98) Testing HVM environment:
> >>>>> (d98)  - REP INSB across page boundaries ... passed
> >>>>> (d98)  - GS base MSRs and SWAPGS ... passed
> >>>>> (d98) Passed 2 of 2 tests
> >>>>> (d98) Writing SMBIOS tables ...
> >>>>> (d98) Loading SeaBIOS ...
> >>>>> (d98) Creating MP tables ...
> >>>>> (d98) Loading ACPI ...
> >>>>> (d98) S3 disabled
> >>>>> (d98) S4 disabled
> >>>>> (d98) vm86 TSS at fc00a100
> >>>>> (d98) BIOS map:
> >>>>> (d98)  10000-100d3: Scratch space
> >>>>> (d98)  c0000-fffff: Main BIOS
> >>>>> (d98) E820 table:
> >>>>> (d98)  [00]: 00000000:00000000 - 00000000:000a0000: RAM
> >>>>> (d98)  HOLE: 00000000:000a0000 - 00000000:000c0000
> >>>>> (d98)  [01]: 00000000:000c0000 - 00000000:00100000: RESERVED
> >>>>> (d98)  [02]: 00000000:00100000 - 00000000:78000000: RAM
> >>>>> (d98)  HOLE: 00000000:78000000 - 00000000:fc000000
> >>>>> (d98)  [03]: 00000000:fc000000 - 00000001:00000000: RESERVED
> >>>>> (d98) Invoking SeaBIOS ...
> >>>>> (d98) SeaBIOS (version
> >>>>> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
> >>>>> (d98)
> >>>>> (d98) Found Xen hypervisor signature at 40000100
> >>>>> (d98) Running on QEMU (i440fx)
> >>>>> (d98) xen: copy e820...
> >>>>> (d98) Relocating init from 0x000df619 to 0x77fae600 (size 71995)
> >>>>> (d98) CPU Mhz=2660
> >>>>> (d98) Found 13 PCI devices (max PCI bus is 00)
> >>>>> (d98) Allocated Xen hypercall page at 77fff000
> >>>>> (d98) Detected Xen v4.5-unstable
> >>>>> (d98) xen: copy BIOS tables...
> >>>>> (d98) Copying SMBIOS entry point from 0x00010010 to 0x000f0f40
> >>>>> (d98) Copying MPTABLE from 0xfc001170/fc001180 to 0x000f0e40
> >>>>> (d98) Copying PIR from 0x00010030 to 0x000f0dc0
> >>>>> (d98) Copying ACPI RSDP from 0x000100b0 to 0x000f0d90
> >>>>> (d98) Using pmtimer, ioport 0xb008
> >>>>> (d98) Scan for VGA option rom
> >>>>> (d98) Running option rom at c000:0003
> >>>>> (XEN) stdvga.c:147:d98v0 entering stdvga and caching modes
> >>>>> (d98) pmm call arg1=0
> >>>>> (d98) Turning on vga text mode console
> >>>>> (d98) SeaBIOS (version
> >>>>> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
> >>>>> (d98) Machine UUID f4cdeb74-0db1-4748-948d-42579a494120
> >>>>> (d98) EHCI init on dev 00:1d.7 (regs=0xf9057020)
> >>>>> (d98) Found 0 lpt ports
> >>>>> (d98) Found 0 serial ports
> >>>>> (d98) ATA controller 1 at 1f0/3f4/0 (irq 14 dev 9)
> >>>>> (d98) ATA controller 2 at 170/374/0 (irq 15 dev 9)
> >>>>> (d98) ata0-0: QEMU HARDDISK ATA-7 Hard-Disk (40720 MiBytes)
> >>>>> (d98) Searching bootorder for: /pci@i0cf8/*@1,1/drive@0/disk@0
> >>>>> (d98) DVD/CD [ata0-1: QEMU DVD-ROM ATAPI-4 DVD/CD]
> >>>>> (d98) Searching bootorder for: /pci@i0cf8/*@1,1/drive@0/disk@1
> >>>>> (d98) UHCI init on dev 00:1d.0 (io=c240)
> >>>>> (d98) UHCI init on dev 00:1d.1 (io=c260)
> >>>>> (d98) UHCI init on dev 00:1d.2 (io=c280)
> >>>>> (d98) PS2 keyboard initialized
> >>>>> (d98) All threads complete.
> >>>>> (d98) Scan for option roms
> >>>>> (d98) Running option rom at c980:0003
> >>>>> (d98) pmm call arg1=1
> >>>>> (d98) pmm call arg1=0
> >>>>> (d98) pmm call arg1=1
> >>>>> (d98) pmm call arg1=0
> >>>>> (d98) Searching bootorder for: /pci@i0cf8/*@6
> >>>>> (d98)
> >>>>> (d98) Press F12 for boot menu.
> >>>>> (d98)
> >>>>> (d98) Searching bootorder for: HALT
> >>>>> (d98) drive 0x000f0d40: PCHS=16383/16/63 translation=lba
> >>>>> LCHS=1024/255/63 s=83394560
> >>>>> (d98) Space available for UMB: ca800-ee800, f0000-f0ce0
> >>>>> (d98) Returned 258048 bytes of ZoneHigh
> >>>>> (d98) e820 map has 6 items:
> >>>>> (d98)   0: 0000000000000000 - 000000000009fc00 = 1 RAM
> >>>>> (d98)   1: 000000000009fc00 - 00000000000a0000 = 2 RESERVED
> >>>>> (d98)   2: 00000000000f0000 - 0000000000100000 = 2 RESERVED
> >>>>> (d98)   3: 0000000000100000 - 0000000077fff000 = 1 RAM
> >>>>> (d98)   4: 0000000077fff000 - 0000000078000000 = 2 RESERVED
> >>>>> (d98)   5: 00000000fc000000 - 0000000100000000 = 2 RESERVED
> >>>>> (d98) enter handle_19:
> >>>>> (d98)   NULL
> >>>>> (d98) Booting from Hard Disk...
> >>>>> (d98) Booting from 0000:7c00
> >>>>> (XEN) d98: VIRIDIAN GUEST_OS_ID: vendor: 1 os: 4 major: 6 minor: 1
> sp:
> >>>>> 1 build: 1db1
> >>>>> (XEN) d98: VIRIDIAN HYPERCALL: enabled: 1 pfn: 3ffff
> >>>>> (XEN) d98v0: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffe
> >>>>> (XEN) d98v1: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffd
> >>>>> (XEN) irq.c:270: Dom98 PCI link 0 changed 5 -> 0
> >>>>> (XEN) irq.c:270: Dom98 PCI link 1 changed 10 -> 0
> >>>>> (XEN) irq.c:270: Dom98 PCI link 2 changed 11 -> 0
> >>>>> (XEN) irq.c:270: Dom98 PCI link 3 changed 5 -> 0
> >>>>> (XEN) irq.c:380: Dom98 callback via changed to GSI 24
> >>>>> (d98) XEN|BUGCHECK: ====>
> >>>>> (d98) XEN|BUGCHECK: 0000007A: FFFFF6FC000171C8
> FFFFFFFFC0000185
> >>>>> 000000001BD6A860 FFFF
> >>>>> (d98) F80002E39000
> >>>>> (d98) XEN|BUGCHECK: CONTEXT (FFFFF8800310E530):
> >>>>> (d98) XEN|BUGCHECK: - GS = 002B
> >>>>> (d98) XEN|BUGCHECK: - FS = 0053
> >>>>> (d98) XEN|BUGCHECK: - ES = 002B
> >>>>> (d98) XEN|BUGCHECK: - DS = 002B
> >>>>> (d98) XEN|BUGCHECK: - SS = 0018
> >>>>> (d98) XEN|BUGCHECK: - CS = 0010
> >>>>> (d98) XEN|BUGCHECK: - EFLAGS = 00000086
> >>>>> (d98) XEN|BUGCHECK: - RDI = 00000000000171C8
> >>>>> (d98) XEN|BUGCHECK: - RSI = 00000000C0000185
> >>>>> (d98) XEN|BUGCHECK: - RBX = 00000000038AC8F8
> >>>>> (d98) XEN|BUGCHECK: - RDX = 0000000000000000
> >>>>> (d98) XEN|BUGCHECK: - RCX = 000000000310E530
> >>>>> (d98) XEN|BUGCHECK: - RAX = 000000002ECF4722
> >>>>> (d98) XEN|BUGCHECK: - RBP = 000000001BD6A860
> >>>>> (d98) XEN|BUGCHECK: - RIP = 00000000038A2A43
> >>>>> (d98) XEN|BUGCHECK: - RSP = 000000000310E510
> >>>>> (d98) XEN|BUGCHECK: - R8 = 0000000000000000
> >>>>> (d98) XEN|BUGCHECK: - R9 = 0000000000000000
> >>>>> (d98) XEN|BUGCHECK: - R10 = 0000000000000000
> >>>>> (d98) XEN|BUGCHECK: - R11 = 0000000000000000
> >>>>> (d98) XEN|BUGCHECK: - R12 = 000000000000007A
> >>>>> (d98) XEN|BUGCHECK: - R13 = 0000000000000001
> >>>>> (d98) XEN|BUGCHECK: - R14 = 0000000002E39000
> >>>>> (d98) XEN|BUGCHECK: - R15 = 0000000002CBAC40
> >>>>> (d98) XEN|BUGCHECK: STACK:
> >>>>> (d98) XEN|BUGCHECK: 000000000310EA20: (0000000000000003
> >>>>> 00000000038A50F0 00000000038A
> >>>>> (d98) 4860 000000000000007A) xen.sys + 00000000000049AC
> >>>>> (d98) XEN|BUGCHECK: 000000000310EA70: (00000000038AD0D0
> >>>>> 0000000000000000 000000000000
> >>>>> (d98) 0004 0000000002C83500) ntoskrnl.exe + 0000000000128585
> >>>>> (d98) XEN|BUGCHECK: 000000000310EAA0: (00000000038AD0D0
> >>>>> 0000000002C83500 000000000000
> >>>>> (d98) 000F 0000000001780660) ntoskrnl.exe + 0000000000167C0D
> >>>>> (d98) XEN|BUGCHECK: 000000000310F170: (0000000003816470
> >>>>> 0000000002B4C8C1 000000000000
> >>>>> (d98) 00FE 0000000000000000) ntoskrnl.exe + 0000000000075CC4
> >>>>> (d98) XEN|BUGCHECK: 000000000310F1B0: (000000000000007A
> >>>>> 00000000000171C8 00000000C000
> >>>>> (d98) 0185 000000001BD6A860) ntoskrnl.exe + 00000000000E8752
> >>>>> (d98) XEN|BUGCHECK: 000000000310F290: (00000000038163B0
> >>>>> 000000000310F320 0000000002CB
> >>>>> (d98) D540 00000000038163B0) ntoskrnl.exe + 000000000009C91F
> >>>>> (d98) XEN|BUGCHECK: 000000000310F360: (0000000000000000
> >>>>> 0000000000000008 00000000FFFF
> >>>>> (d98) FFFF 00000000003500F0) ntoskrnl.exe + 00000000000831B9
> >>>>> (d98) XEN|BUGCHECK: 000000000310F4C0: (0000000000000008
> >>>>> 0000000002E39000 000000000000
> >>>>> (d98) 0000 0000000000000000) ntoskrnl.exe + 0000000000073CEE
> >>>>> (d98) XEN|BUGCHECK: 000000000310F658: (0000000002E5CFD5
> >>>>> 0000000000000000 0000000003EB
> >>>>> (d98) 8710 00000000FFFFFFFF) ntoskrnl.exe + 000000000042C000
> >>>> If you need more tests/informations tell me and I'll post them.
> >>>> Thanks for any reply and sorry for my bad english.
> >>> Well, that tells me you had a 7A BSOD, which is a
> >> KERNEL_DATA_INPAGE_ERROR. The error status (param 2) was C0000185
> so
> >> that's a STATUS_IO_DEVICE_ERROR. The documentation at
> >> http://msdn.microsoft.com/en-
> >> gb/library/windows/hardware/ff559211%28v=vs.85%29.aspx tells me that
> >> this means:
> >>> "improper termination or defective cabling on SCSI devices or that two
> >> devices are trying to use the same IRQ."
> >>> But you said you had xenvbd already installed so you'll be using a PV
> >> storage path. Is there any indication of problems with your storage?
> >>>     Paul
> >> DomUs disk are all raw files in local dom0 disks, raid1 with "LSI Logic
> >> / Symbios Logic SAS2008 PCI-Express Fusion-MPT SAS-2" dom0 partitions
> >> are GTP and fs ext4.
> >> Dom0 is wheezy with kernel is linux-image-3.16-0.bpo.2-amd64 version
> >> 3.16.3-2~bpo70+1
> >> No kern or syslog errors, only many of these warning that someone
> >> replied me that should not be a problem:
> >> Oct 15 10:45:13 mtorMN01OU kernel: [773197.117518] xen:balloon:
> >> reserve_additional_memory: add_memory() failed: -17
> >> DomU now see disk as xen pvdisk, on xenvif install probably still was
> >> full emulated disk even if xenvbd was installed successful before xenvif
> >> install (failed with BSOD)
> >> The IRQ seems visible from xl dmesg output below, can you check them is
> >> have something wrong or strange, I see some of them "duplicate" but I
> >> not know if is correct.
> >>
> >> DomU xl cfg:
> >>> name='office1_w7'
> >>> builder="hvm"
> >>> memory=2048
> >>> vcpus=2
> >>> acpi_s3=0
> >>> acpi_s4=0
> >>> vif=['bridge=xenbr0,mac=00:16:3e:41:ae:8b']
> >>>
> >>
> disk=['/mnt/vm/disks/office1_w7.disk1.xm,raw,hda,rw',',raw,hdb,ro,cdrom'
> >> ]
> >>> boot='c'
> >>> device_model_version="qemu-xen"
> >>> viridian=1
> >>> vnc=0
> >>> keymap="it"
> >>> on_crash="destroy"
> >>> vga="qxl"
> >>> spice=1
> >>> spicehost='0.0.0.0'
> >>> spiceport=6001
> >>> spicedisable_ticketing=0
> >>> spicepasswd="password"
> >>> spicevdagent=1
> >>> spice_clipboard_sharing=0
> >>> spiceusbredirection=4
> >>> soundhw="hda"
> >>> localtime=1
> >> If you need more tests/informations tell me and I'll post them.
> >>
> > Do you have the qemu log (with xen platform logging enabled). This is
> where the PV drivers log failures/warnings.
> >
> >    Paul
> >
> >
> I retried enabling xen platform debug in qemu trace but no add lines in
> log when I try to install xenvif and fails.
> I attach anyway the log if can be useful.

All I can see there is an apparently clean shutdown of domain 101; no sign of XENVIF and no sign of a BSOD.

> I'll also try to restore the backup of this night of the domU when I had
> the BSOD trying reproduce it with xen debug in qemu trace and different
> windows memory dump options.

Ok.

  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 Thu Oct 16 13:45:38 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 16 Oct 2014 13:45: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 1XelN3-0000dQ-Kr; Thu, 16 Oct 2014 13:45:37 +0000
Received: from mail6.bemta4.messagelabs.com ([85.158.143.247])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <Paul.Durrant@citrix.com>) id 1XelN2-0000dJ-Bb
	for win-pv-devel@lists.xenproject.org; Thu, 16 Oct 2014 13:45:36 +0000
Received: from [85.158.143.35] by server-2.bemta-4.messagelabs.com id
	01/D9-10419-FFBCF345; Thu, 16 Oct 2014 13:45:35 +0000
X-Env-Sender: Paul.Durrant@citrix.com
X-Msg-Ref: server-3.tower-21.messagelabs.com!1413467133!13042133!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: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 31272 invoked from network); 16 Oct 2014 13:45:34 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-3.tower-21.messagelabs.com with RC4-SHA encrypted SMTP;
	16 Oct 2014 13:45:34 -0000
X-IronPort-AV: E=Sophos;i="5.04,732,1406592000"; d="scan'208";a="26017988"
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: Blue screen on xenvif install
Thread-Index: AQHP6R88TE2eCcEtSU6laq0K5grY5pwybJlQ///obQCAACb2gP//8KIAgAAjAsCAAAnUgIAAIsDw
Date: Thu, 16 Oct 2014 13:45:32 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD0111057A2@AMSPEX01CL01.citrite.net>
References: <543F887B.5030500@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111050FF@AMSPEX01CL01.citrite.net>
	<543F912C.8000504@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD01110526F@AMSPEX01CL01.citrite.net>
	<543FA4F6.5090804@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111053EA@AMSPEX01CL01.citrite.net>
	<543FCA93.2010805@m2r.biz>
In-Reply-To: <543FCA93.2010805@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] Blue screen on xenvif install
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: 16 October 2014 14:40
> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> Subject: Re: Blue screen on xenvif install
> 
> Il 16/10/2014 13:04, Paul Durrant ha scritto:
> >> -----Original Message-----
> >> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >> Sent: 16 October 2014 11:59
> >> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >> Subject: Re: Blue screen on xenvif install
> >>
> >> Il 16/10/2014 12:00, Paul Durrant ha scritto:
> >>>> -----Original Message-----
> >>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >>>> Sent: 16 October 2014 10:35
> >>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >>>> Subject: Re: Blue screen on xenvif install
> >>>>
> >>>> Il 16/10/2014 10:59, Paul Durrant ha scritto:
> >>>>>> -----Original Message-----
> >>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >>>>>> Sent: 16 October 2014 09:58
> >>>>>> To: win-pv-devel@lists.xenproject.org
> >>>>>> Cc: Paul Durrant
> >>>>>> Subject: Blue screen on xenvif install
> >>>>>>
> >>>>>> Today I tried to install new winpv driver to other 3 windows 7 pro 64
> >>>>>> bit domUs.
> >>>>>> Days ago I installed them successful on one windows 7 pro 64 bit and
> >> one
> >>>>>> windows 8.1 enterprise 64 bit.
> >>>>>> On first domUs I tried to install them today I installed xenbus and
> >>>>>> xenvbd successful but on xenvif install windows crashed with blue
> >>>>>> screen, if I saw it correctly was an kernel in-page error or something
> >>>>>> similar.
> >>>>>> After reboot I retried to install xenvif but now always fails.
> >>>>>>
> >>>>> Sounds odd. Do you have a MEMORY.DMP?
> >>>>>
> >>>>>      Paul
> >>>> Windows is setted to write dump of kernel memory on system error
> but
> >>>> %systemroot%\memory.dmp is missed :(
> >>>> I also checked the windows events log but I found only kernel-power
> as
> >>>> critical that seems not contains useful data.
> >>>>
> >>>> I found probably useful data in xl dmesg (I copied all below from domU
> >>>> start to xen bug):
> >>>>> (d98) HVM Loader
> >>>>> (d98) Detected Xen v4.5-unstable
> >>>>> (d98) Xenbus rings @0xfeffc000, event channel 1
> >>>>> (d98) System requested SeaBIOS
> >>>>> (d98) CPU speed is 2660 MHz
> >>>>> (d98) Relocating guest memory for lowmem MMIO space disabled
> >>>>> (XEN) irq.c:270: Dom98 PCI link 0 changed 0 -> 5
> >>>>> (d98) PCI-ISA link 0 routed to IRQ5
> >>>>> (XEN) irq.c:270: Dom98 PCI link 1 changed 0 -> 10
> >>>>> (d98) PCI-ISA link 1 routed to IRQ10
> >>>>> (XEN) irq.c:270: Dom98 PCI link 2 changed 0 -> 11
> >>>>> (d98) PCI-ISA link 2 routed to IRQ11
> >>>>> (XEN) irq.c:270: Dom98 PCI link 3 changed 0 -> 5
> >>>>> (d98) PCI-ISA link 3 routed to IRQ5
> >>>>> (d98) pci dev 01:3 INTA->IRQ10
> >>>>> (d98) pci dev 02:0 INTA->IRQ11
> >>>>> (d98) pci dev 03:0 INTA->IRQ5
> >>>>> (d98) pci dev 04:0 INTA->IRQ5
> >>>>> (d98) pci dev 05:0 INTA->IRQ10
> >>>>> (d98) pci dev 06:0 INTA->IRQ11
> >>>>> (d98) pci dev 1d:0 INTA->IRQ10
> >>>>> (d98) pci dev 1d:1 INTB->IRQ11
> >>>>> (d98) pci dev 1d:2 INTC->IRQ5
> >>>>> (d98) pci dev 1d:7 INTD->IRQ5
> >>>>> (d98) No RAM in high memory; setting high_mem resource base to
> >>>> 100000000
> >>>>> (d98) pci dev 05:0 bar 10 size 004000000: 0f0000000
> >>>>> (d98) pci dev 05:0 bar 14 size 004000000: 0f4000000
> >>>>> (d98) pci dev 02:0 bar 14 size 001000000: 0f8000008
> >>>>> (d98) pci dev 06:0 bar 30 size 000040000: 0f9000000
> >>>>> (d98) pci dev 05:0 bar 30 size 000010000: 0f9040000
> >>>>> (d98) pci dev 03:0 bar 10 size 000004000: 0f9050000
> >>>>> (d98) pci dev 05:0 bar 18 size 000002000: 0f9054000
> >>>>> (d98) pci dev 04:0 bar 14 size 000001000: 0f9056000
> >>>>> (d98) pci dev 1d:7 bar 10 size 000001000: 0f9057000
> >>>>> (d98) pci dev 02:0 bar 10 size 000000100: 00000c001
> >>>>> (d98) pci dev 06:0 bar 10 size 000000100: 00000c101
> >>>>> (d98) pci dev 06:0 bar 14 size 000000100: 0f9058000
> >>>>> (d98) pci dev 04:0 bar 10 size 000000020: 00000c201
> >>>>> (d98) pci dev 05:0 bar 1c size 000000020: 00000c221
> >>>>> (d98) pci dev 1d:0 bar 20 size 000000020: 00000c241
> >>>>> (d98) pci dev 1d:1 bar 20 size 000000020: 00000c261
> >>>>> (d98) pci dev 1d:2 bar 20 size 000000020: 00000c281
> >>>>> (d98) pci dev 01:1 bar 20 size 000000010: 00000c2a1
> >>>>> (d98) Multiprocessor initialisation:
> >>>>> (d98)  - CPU0 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8] ...
> >>>>> done.
> >>>>> (d98)  - CPU1 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8] ...
> >>>>> done.
> >>>>> (d98) Testing HVM environment:
> >>>>> (d98)  - REP INSB across page boundaries ... passed
> >>>>> (d98)  - GS base MSRs and SWAPGS ... passed
> >>>>> (d98) Passed 2 of 2 tests
> >>>>> (d98) Writing SMBIOS tables ...
> >>>>> (d98) Loading SeaBIOS ...
> >>>>> (d98) Creating MP tables ...
> >>>>> (d98) Loading ACPI ...
> >>>>> (d98) S3 disabled
> >>>>> (d98) S4 disabled
> >>>>> (d98) vm86 TSS at fc00a100
> >>>>> (d98) BIOS map:
> >>>>> (d98)  10000-100d3: Scratch space
> >>>>> (d98)  c0000-fffff: Main BIOS
> >>>>> (d98) E820 table:
> >>>>> (d98)  [00]: 00000000:00000000 - 00000000:000a0000: RAM
> >>>>> (d98)  HOLE: 00000000:000a0000 - 00000000:000c0000
> >>>>> (d98)  [01]: 00000000:000c0000 - 00000000:00100000: RESERVED
> >>>>> (d98)  [02]: 00000000:00100000 - 00000000:78000000: RAM
> >>>>> (d98)  HOLE: 00000000:78000000 - 00000000:fc000000
> >>>>> (d98)  [03]: 00000000:fc000000 - 00000001:00000000: RESERVED
> >>>>> (d98) Invoking SeaBIOS ...
> >>>>> (d98) SeaBIOS (version
> >>>>> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
> >>>>> (d98)
> >>>>> (d98) Found Xen hypervisor signature at 40000100
> >>>>> (d98) Running on QEMU (i440fx)
> >>>>> (d98) xen: copy e820...
> >>>>> (d98) Relocating init from 0x000df619 to 0x77fae600 (size 71995)
> >>>>> (d98) CPU Mhz=2660
> >>>>> (d98) Found 13 PCI devices (max PCI bus is 00)
> >>>>> (d98) Allocated Xen hypercall page at 77fff000
> >>>>> (d98) Detected Xen v4.5-unstable
> >>>>> (d98) xen: copy BIOS tables...
> >>>>> (d98) Copying SMBIOS entry point from 0x00010010 to 0x000f0f40
> >>>>> (d98) Copying MPTABLE from 0xfc001170/fc001180 to 0x000f0e40
> >>>>> (d98) Copying PIR from 0x00010030 to 0x000f0dc0
> >>>>> (d98) Copying ACPI RSDP from 0x000100b0 to 0x000f0d90
> >>>>> (d98) Using pmtimer, ioport 0xb008
> >>>>> (d98) Scan for VGA option rom
> >>>>> (d98) Running option rom at c000:0003
> >>>>> (XEN) stdvga.c:147:d98v0 entering stdvga and caching modes
> >>>>> (d98) pmm call arg1=0
> >>>>> (d98) Turning on vga text mode console
> >>>>> (d98) SeaBIOS (version
> >>>>> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
> >>>>> (d98) Machine UUID f4cdeb74-0db1-4748-948d-42579a494120
> >>>>> (d98) EHCI init on dev 00:1d.7 (regs=0xf9057020)
> >>>>> (d98) Found 0 lpt ports
> >>>>> (d98) Found 0 serial ports
> >>>>> (d98) ATA controller 1 at 1f0/3f4/0 (irq 14 dev 9)
> >>>>> (d98) ATA controller 2 at 170/374/0 (irq 15 dev 9)
> >>>>> (d98) ata0-0: QEMU HARDDISK ATA-7 Hard-Disk (40720 MiBytes)
> >>>>> (d98) Searching bootorder for: /pci@i0cf8/*@1,1/drive@0/disk@0
> >>>>> (d98) DVD/CD [ata0-1: QEMU DVD-ROM ATAPI-4 DVD/CD]
> >>>>> (d98) Searching bootorder for: /pci@i0cf8/*@1,1/drive@0/disk@1
> >>>>> (d98) UHCI init on dev 00:1d.0 (io=c240)
> >>>>> (d98) UHCI init on dev 00:1d.1 (io=c260)
> >>>>> (d98) UHCI init on dev 00:1d.2 (io=c280)
> >>>>> (d98) PS2 keyboard initialized
> >>>>> (d98) All threads complete.
> >>>>> (d98) Scan for option roms
> >>>>> (d98) Running option rom at c980:0003
> >>>>> (d98) pmm call arg1=1
> >>>>> (d98) pmm call arg1=0
> >>>>> (d98) pmm call arg1=1
> >>>>> (d98) pmm call arg1=0
> >>>>> (d98) Searching bootorder for: /pci@i0cf8/*@6
> >>>>> (d98)
> >>>>> (d98) Press F12 for boot menu.
> >>>>> (d98)
> >>>>> (d98) Searching bootorder for: HALT
> >>>>> (d98) drive 0x000f0d40: PCHS=16383/16/63 translation=lba
> >>>>> LCHS=1024/255/63 s=83394560
> >>>>> (d98) Space available for UMB: ca800-ee800, f0000-f0ce0
> >>>>> (d98) Returned 258048 bytes of ZoneHigh
> >>>>> (d98) e820 map has 6 items:
> >>>>> (d98)   0: 0000000000000000 - 000000000009fc00 = 1 RAM
> >>>>> (d98)   1: 000000000009fc00 - 00000000000a0000 = 2 RESERVED
> >>>>> (d98)   2: 00000000000f0000 - 0000000000100000 = 2 RESERVED
> >>>>> (d98)   3: 0000000000100000 - 0000000077fff000 = 1 RAM
> >>>>> (d98)   4: 0000000077fff000 - 0000000078000000 = 2 RESERVED
> >>>>> (d98)   5: 00000000fc000000 - 0000000100000000 = 2 RESERVED
> >>>>> (d98) enter handle_19:
> >>>>> (d98)   NULL
> >>>>> (d98) Booting from Hard Disk...
> >>>>> (d98) Booting from 0000:7c00
> >>>>> (XEN) d98: VIRIDIAN GUEST_OS_ID: vendor: 1 os: 4 major: 6 minor: 1
> sp:
> >>>>> 1 build: 1db1
> >>>>> (XEN) d98: VIRIDIAN HYPERCALL: enabled: 1 pfn: 3ffff
> >>>>> (XEN) d98v0: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffe
> >>>>> (XEN) d98v1: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffd
> >>>>> (XEN) irq.c:270: Dom98 PCI link 0 changed 5 -> 0
> >>>>> (XEN) irq.c:270: Dom98 PCI link 1 changed 10 -> 0
> >>>>> (XEN) irq.c:270: Dom98 PCI link 2 changed 11 -> 0
> >>>>> (XEN) irq.c:270: Dom98 PCI link 3 changed 5 -> 0
> >>>>> (XEN) irq.c:380: Dom98 callback via changed to GSI 24
> >>>>> (d98) XEN|BUGCHECK: ====>
> >>>>> (d98) XEN|BUGCHECK: 0000007A: FFFFF6FC000171C8
> FFFFFFFFC0000185
> >>>>> 000000001BD6A860 FFFF
> >>>>> (d98) F80002E39000
> >>>>> (d98) XEN|BUGCHECK: CONTEXT (FFFFF8800310E530):
> >>>>> (d98) XEN|BUGCHECK: - GS = 002B
> >>>>> (d98) XEN|BUGCHECK: - FS = 0053
> >>>>> (d98) XEN|BUGCHECK: - ES = 002B
> >>>>> (d98) XEN|BUGCHECK: - DS = 002B
> >>>>> (d98) XEN|BUGCHECK: - SS = 0018
> >>>>> (d98) XEN|BUGCHECK: - CS = 0010
> >>>>> (d98) XEN|BUGCHECK: - EFLAGS = 00000086
> >>>>> (d98) XEN|BUGCHECK: - RDI = 00000000000171C8
> >>>>> (d98) XEN|BUGCHECK: - RSI = 00000000C0000185
> >>>>> (d98) XEN|BUGCHECK: - RBX = 00000000038AC8F8
> >>>>> (d98) XEN|BUGCHECK: - RDX = 0000000000000000
> >>>>> (d98) XEN|BUGCHECK: - RCX = 000000000310E530
> >>>>> (d98) XEN|BUGCHECK: - RAX = 000000002ECF4722
> >>>>> (d98) XEN|BUGCHECK: - RBP = 000000001BD6A860
> >>>>> (d98) XEN|BUGCHECK: - RIP = 00000000038A2A43
> >>>>> (d98) XEN|BUGCHECK: - RSP = 000000000310E510
> >>>>> (d98) XEN|BUGCHECK: - R8 = 0000000000000000
> >>>>> (d98) XEN|BUGCHECK: - R9 = 0000000000000000
> >>>>> (d98) XEN|BUGCHECK: - R10 = 0000000000000000
> >>>>> (d98) XEN|BUGCHECK: - R11 = 0000000000000000
> >>>>> (d98) XEN|BUGCHECK: - R12 = 000000000000007A
> >>>>> (d98) XEN|BUGCHECK: - R13 = 0000000000000001
> >>>>> (d98) XEN|BUGCHECK: - R14 = 0000000002E39000
> >>>>> (d98) XEN|BUGCHECK: - R15 = 0000000002CBAC40
> >>>>> (d98) XEN|BUGCHECK: STACK:
> >>>>> (d98) XEN|BUGCHECK: 000000000310EA20: (0000000000000003
> >>>>> 00000000038A50F0 00000000038A
> >>>>> (d98) 4860 000000000000007A) xen.sys + 00000000000049AC
> >>>>> (d98) XEN|BUGCHECK: 000000000310EA70: (00000000038AD0D0
> >>>>> 0000000000000000 000000000000
> >>>>> (d98) 0004 0000000002C83500) ntoskrnl.exe + 0000000000128585
> >>>>> (d98) XEN|BUGCHECK: 000000000310EAA0: (00000000038AD0D0
> >>>>> 0000000002C83500 000000000000
> >>>>> (d98) 000F 0000000001780660) ntoskrnl.exe + 0000000000167C0D
> >>>>> (d98) XEN|BUGCHECK: 000000000310F170: (0000000003816470
> >>>>> 0000000002B4C8C1 000000000000
> >>>>> (d98) 00FE 0000000000000000) ntoskrnl.exe + 0000000000075CC4
> >>>>> (d98) XEN|BUGCHECK: 000000000310F1B0: (000000000000007A
> >>>>> 00000000000171C8 00000000C000
> >>>>> (d98) 0185 000000001BD6A860) ntoskrnl.exe + 00000000000E8752
> >>>>> (d98) XEN|BUGCHECK: 000000000310F290: (00000000038163B0
> >>>>> 000000000310F320 0000000002CB
> >>>>> (d98) D540 00000000038163B0) ntoskrnl.exe + 000000000009C91F
> >>>>> (d98) XEN|BUGCHECK: 000000000310F360: (0000000000000000
> >>>>> 0000000000000008 00000000FFFF
> >>>>> (d98) FFFF 00000000003500F0) ntoskrnl.exe + 00000000000831B9
> >>>>> (d98) XEN|BUGCHECK: 000000000310F4C0: (0000000000000008
> >>>>> 0000000002E39000 000000000000
> >>>>> (d98) 0000 0000000000000000) ntoskrnl.exe + 0000000000073CEE
> >>>>> (d98) XEN|BUGCHECK: 000000000310F658: (0000000002E5CFD5
> >>>>> 0000000000000000 0000000003EB
> >>>>> (d98) 8710 00000000FFFFFFFF) ntoskrnl.exe + 000000000042C000
> >>>> If you need more tests/informations tell me and I'll post them.
> >>>> Thanks for any reply and sorry for my bad english.
> >>> Well, that tells me you had a 7A BSOD, which is a
> >> KERNEL_DATA_INPAGE_ERROR. The error status (param 2) was C0000185
> so
> >> that's a STATUS_IO_DEVICE_ERROR. The documentation at
> >> http://msdn.microsoft.com/en-
> >> gb/library/windows/hardware/ff559211%28v=vs.85%29.aspx tells me that
> >> this means:
> >>> "improper termination or defective cabling on SCSI devices or that two
> >> devices are trying to use the same IRQ."
> >>> But you said you had xenvbd already installed so you'll be using a PV
> >> storage path. Is there any indication of problems with your storage?
> >>>     Paul
> >> DomUs disk are all raw files in local dom0 disks, raid1 with "LSI Logic
> >> / Symbios Logic SAS2008 PCI-Express Fusion-MPT SAS-2" dom0 partitions
> >> are GTP and fs ext4.
> >> Dom0 is wheezy with kernel is linux-image-3.16-0.bpo.2-amd64 version
> >> 3.16.3-2~bpo70+1
> >> No kern or syslog errors, only many of these warning that someone
> >> replied me that should not be a problem:
> >> Oct 15 10:45:13 mtorMN01OU kernel: [773197.117518] xen:balloon:
> >> reserve_additional_memory: add_memory() failed: -17
> >> DomU now see disk as xen pvdisk, on xenvif install probably still was
> >> full emulated disk even if xenvbd was installed successful before xenvif
> >> install (failed with BSOD)
> >> The IRQ seems visible from xl dmesg output below, can you check them is
> >> have something wrong or strange, I see some of them "duplicate" but I
> >> not know if is correct.
> >>
> >> DomU xl cfg:
> >>> name='office1_w7'
> >>> builder="hvm"
> >>> memory=2048
> >>> vcpus=2
> >>> acpi_s3=0
> >>> acpi_s4=0
> >>> vif=['bridge=xenbr0,mac=00:16:3e:41:ae:8b']
> >>>
> >>
> disk=['/mnt/vm/disks/office1_w7.disk1.xm,raw,hda,rw',',raw,hdb,ro,cdrom'
> >> ]
> >>> boot='c'
> >>> device_model_version="qemu-xen"
> >>> viridian=1
> >>> vnc=0
> >>> keymap="it"
> >>> on_crash="destroy"
> >>> vga="qxl"
> >>> spice=1
> >>> spicehost='0.0.0.0'
> >>> spiceport=6001
> >>> spicedisable_ticketing=0
> >>> spicepasswd="password"
> >>> spicevdagent=1
> >>> spice_clipboard_sharing=0
> >>> spiceusbredirection=4
> >>> soundhw="hda"
> >>> localtime=1
> >> If you need more tests/informations tell me and I'll post them.
> >>
> > Do you have the qemu log (with xen platform logging enabled). This is
> where the PV drivers log failures/warnings.
> >
> >    Paul
> >
> >
> I retried enabling xen platform debug in qemu trace but no add lines in
> log when I try to install xenvif and fails.
> I attach anyway the log if can be useful.

All I can see there is an apparently clean shutdown of domain 101; no sign of XENVIF and no sign of a BSOD.

> I'll also try to restore the backup of this night of the domU when I had
> the BSOD trying reproduce it with xen debug in qemu trace and different
> windows memory dump options.

Ok.

  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 Thu Oct 16 14:46:07 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 16 Oct 2014 14: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 1XemJa-0002Rz-MF; Thu, 16 Oct 2014 14:46:06 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1XemJY-0002Ru-O5
	for win-pv-devel@lists.xenproject.org; Thu, 16 Oct 2014 14:46:05 +0000
Received: from [193.109.254.147:29052] by server-15.bemta-14.messagelabs.com
	id 96/88-30948-C2ADF345; Thu, 16 Oct 2014 14:46:04 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-11.tower-27.messagelabs.com!1413470761!9871431!1
X-Originating-IP: [74.125.82.47]
X-SpamReason: No, hits=2.2 required=7.0 tests=BIZ_TLD,BODY_RANDOM_LONG
X-StarScan-Received: 
X-StarScan-Version: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 28409 invoked from network); 16 Oct 2014 14:46:01 -0000
Received: from mail-wg0-f47.google.com (HELO mail-wg0-f47.google.com)
	(74.125.82.47)
	by server-11.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	16 Oct 2014 14:46:01 -0000
Received: by mail-wg0-f47.google.com with SMTP id x13so3884472wgg.18
	for <win-pv-devel@lists.xenproject.org>;
	Thu, 16 Oct 2014 07:46:01 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:message-id:date:from:user-agent:mime-version:to
	:subject:references:in-reply-to:content-type;
	bh=VLqHIBOg0Y36yk0224y5aA8EBL4NSb8B4MP9baojr2A=;
	b=c3gpfrOTSmGP/1S/YveceN79Ksxl7R3wnhdjtuV0BXTYUCvV9OA2X7AyCq3+AFSQLv
	GPvMlgpNNR1238lTTYGHdiF37lh3fh5o1t8dDMu7eG9FsqfWwoWs5ts/jIpfRr25gFib
	CwkxZ4jyB35XPIE1Tf1A2iJq+ISeeNqR3VA6S8I4RV4yO7aXo2/pjFJ+ejo5sTQdlv9T
	DU2Z9HwukBvnGAWmXtpuuBqX2g00yjkaoXkjUYwvbgK3pV/PlT5jr9KjXbkw0fmWHzyE
	L1CvREeNm52lISuygWMFnJdGuqi6kj1Vd1mtQxW65J82xBZbWrxqxv6bJHsunSz/LY+c
	bjUA==
X-Gm-Message-State: ALoCoQmbqKKKpvsW6pwVNIIW16yZg0lPsqVMIlaT7jF2Zo2Ej2GG6liRYBXRglIHMvZpw8ZXrz+s
X-Received: by 10.180.206.202 with SMTP id lq10mr6737809wic.44.1413470761603; 
	Thu, 16 Oct 2014 07:46:01 -0700 (PDT)
Received: from [192.168.1.15] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by mx.google.com with ESMTPSA id q3sm2241800wia.14.2014.10.16.07.45.57
	for <multiple recipients>
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Thu, 16 Oct 2014 07:45:59 -0700 (PDT)
Message-ID: <543FDA2D.2090900@m2r.biz>
Date: Thu, 16 Oct 2014 16:46:05 +0200
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64;
	rv:24.0) Gecko/20100101 Thunderbird/24.6.0
MIME-Version: 1.0
To: Paul Durrant <Paul.Durrant@citrix.com>, 
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <543F887B.5030500@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111050FF@AMSPEX01CL01.citrite.net>
	<543F912C.8000504@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD01110526F@AMSPEX01CL01.citrite.net>
	<543FA4F6.5090804@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111053EA@AMSPEX01CL01.citrite.net>
	<543FCA93.2010805@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111057A2@AMSPEX01CL01.citrite.net>
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD0111057A2@AMSPEX01CL01.citrite.net>
Content-Type: multipart/mixed; boundary="------------020906010403050709090208"
Subject: Re: [win-pv-devel] Blue screen on xenvif install
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.
--------------020906010403050709090208
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

Il 16/10/2014 15:45, Paul Durrant ha scritto:
>> -----Original Message-----
>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>> Sent: 16 October 2014 14:40
>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>> Subject: Re: Blue screen on xenvif install
>>
>> Il 16/10/2014 13:04, Paul Durrant ha scritto:
>>>> -----Original Message-----
>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>> Sent: 16 October 2014 11:59
>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>>>> Subject: Re: Blue screen on xenvif install
>>>>
>>>> Il 16/10/2014 12:00, Paul Durrant ha scritto:
>>>>>> -----Original Message-----
>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>>>> Sent: 16 October 2014 10:35
>>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>>>>>> Subject: Re: Blue screen on xenvif install
>>>>>>
>>>>>> Il 16/10/2014 10:59, Paul Durrant ha scritto:
>>>>>>>> -----Original Message-----
>>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>>>>>> Sent: 16 October 2014 09:58
>>>>>>>> To: win-pv-devel@lists.xenproject.org
>>>>>>>> Cc: Paul Durrant
>>>>>>>> Subject: Blue screen on xenvif install
>>>>>>>>
>>>>>>>> Today I tried to install new winpv driver to other 3 windows 7 pro 64
>>>>>>>> bit domUs.
>>>>>>>> Days ago I installed them successful on one windows 7 pro 64 bit and
>>>> one
>>>>>>>> windows 8.1 enterprise 64 bit.
>>>>>>>> On first domUs I tried to install them today I installed xenbus and
>>>>>>>> xenvbd successful but on xenvif install windows crashed with blue
>>>>>>>> screen, if I saw it correctly was an kernel in-page error or something
>>>>>>>> similar.
>>>>>>>> After reboot I retried to install xenvif but now always fails.
>>>>>>>>
>>>>>>> Sounds odd. Do you have a MEMORY.DMP?
>>>>>>>
>>>>>>>       Paul
>>>>>> Windows is setted to write dump of kernel memory on system error
>> but
>>>>>> %systemroot%\memory.dmp is missed :(
>>>>>> I also checked the windows events log but I found only kernel-power
>> as
>>>>>> critical that seems not contains useful data.
>>>>>>
>>>>>> I found probably useful data in xl dmesg (I copied all below from domU
>>>>>> start to xen bug):
>>>>>>> (d98) HVM Loader
>>>>>>> (d98) Detected Xen v4.5-unstable
>>>>>>> (d98) Xenbus rings @0xfeffc000, event channel 1
>>>>>>> (d98) System requested SeaBIOS
>>>>>>> (d98) CPU speed is 2660 MHz
>>>>>>> (d98) Relocating guest memory for lowmem MMIO space disabled
>>>>>>> (XEN) irq.c:270: Dom98 PCI link 0 changed 0 -> 5
>>>>>>> (d98) PCI-ISA link 0 routed to IRQ5
>>>>>>> (XEN) irq.c:270: Dom98 PCI link 1 changed 0 -> 10
>>>>>>> (d98) PCI-ISA link 1 routed to IRQ10
>>>>>>> (XEN) irq.c:270: Dom98 PCI link 2 changed 0 -> 11
>>>>>>> (d98) PCI-ISA link 2 routed to IRQ11
>>>>>>> (XEN) irq.c:270: Dom98 PCI link 3 changed 0 -> 5
>>>>>>> (d98) PCI-ISA link 3 routed to IRQ5
>>>>>>> (d98) pci dev 01:3 INTA->IRQ10
>>>>>>> (d98) pci dev 02:0 INTA->IRQ11
>>>>>>> (d98) pci dev 03:0 INTA->IRQ5
>>>>>>> (d98) pci dev 04:0 INTA->IRQ5
>>>>>>> (d98) pci dev 05:0 INTA->IRQ10
>>>>>>> (d98) pci dev 06:0 INTA->IRQ11
>>>>>>> (d98) pci dev 1d:0 INTA->IRQ10
>>>>>>> (d98) pci dev 1d:1 INTB->IRQ11
>>>>>>> (d98) pci dev 1d:2 INTC->IRQ5
>>>>>>> (d98) pci dev 1d:7 INTD->IRQ5
>>>>>>> (d98) No RAM in high memory; setting high_mem resource base to
>>>>>> 100000000
>>>>>>> (d98) pci dev 05:0 bar 10 size 004000000: 0f0000000
>>>>>>> (d98) pci dev 05:0 bar 14 size 004000000: 0f4000000
>>>>>>> (d98) pci dev 02:0 bar 14 size 001000000: 0f8000008
>>>>>>> (d98) pci dev 06:0 bar 30 size 000040000: 0f9000000
>>>>>>> (d98) pci dev 05:0 bar 30 size 000010000: 0f9040000
>>>>>>> (d98) pci dev 03:0 bar 10 size 000004000: 0f9050000
>>>>>>> (d98) pci dev 05:0 bar 18 size 000002000: 0f9054000
>>>>>>> (d98) pci dev 04:0 bar 14 size 000001000: 0f9056000
>>>>>>> (d98) pci dev 1d:7 bar 10 size 000001000: 0f9057000
>>>>>>> (d98) pci dev 02:0 bar 10 size 000000100: 00000c001
>>>>>>> (d98) pci dev 06:0 bar 10 size 000000100: 00000c101
>>>>>>> (d98) pci dev 06:0 bar 14 size 000000100: 0f9058000
>>>>>>> (d98) pci dev 04:0 bar 10 size 000000020: 00000c201
>>>>>>> (d98) pci dev 05:0 bar 1c size 000000020: 00000c221
>>>>>>> (d98) pci dev 1d:0 bar 20 size 000000020: 00000c241
>>>>>>> (d98) pci dev 1d:1 bar 20 size 000000020: 00000c261
>>>>>>> (d98) pci dev 1d:2 bar 20 size 000000020: 00000c281
>>>>>>> (d98) pci dev 01:1 bar 20 size 000000010: 00000c2a1
>>>>>>> (d98) Multiprocessor initialisation:
>>>>>>> (d98)  - CPU0 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8] ...
>>>>>>> done.
>>>>>>> (d98)  - CPU1 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8] ...
>>>>>>> done.
>>>>>>> (d98) Testing HVM environment:
>>>>>>> (d98)  - REP INSB across page boundaries ... passed
>>>>>>> (d98)  - GS base MSRs and SWAPGS ... passed
>>>>>>> (d98) Passed 2 of 2 tests
>>>>>>> (d98) Writing SMBIOS tables ...
>>>>>>> (d98) Loading SeaBIOS ...
>>>>>>> (d98) Creating MP tables ...
>>>>>>> (d98) Loading ACPI ...
>>>>>>> (d98) S3 disabled
>>>>>>> (d98) S4 disabled
>>>>>>> (d98) vm86 TSS at fc00a100
>>>>>>> (d98) BIOS map:
>>>>>>> (d98)  10000-100d3: Scratch space
>>>>>>> (d98)  c0000-fffff: Main BIOS
>>>>>>> (d98) E820 table:
>>>>>>> (d98)  [00]: 00000000:00000000 - 00000000:000a0000: RAM
>>>>>>> (d98)  HOLE: 00000000:000a0000 - 00000000:000c0000
>>>>>>> (d98)  [01]: 00000000:000c0000 - 00000000:00100000: RESERVED
>>>>>>> (d98)  [02]: 00000000:00100000 - 00000000:78000000: RAM
>>>>>>> (d98)  HOLE: 00000000:78000000 - 00000000:fc000000
>>>>>>> (d98)  [03]: 00000000:fc000000 - 00000001:00000000: RESERVED
>>>>>>> (d98) Invoking SeaBIOS ...
>>>>>>> (d98) SeaBIOS (version
>>>>>>> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
>>>>>>> (d98)
>>>>>>> (d98) Found Xen hypervisor signature at 40000100
>>>>>>> (d98) Running on QEMU (i440fx)
>>>>>>> (d98) xen: copy e820...
>>>>>>> (d98) Relocating init from 0x000df619 to 0x77fae600 (size 71995)
>>>>>>> (d98) CPU Mhz=2660
>>>>>>> (d98) Found 13 PCI devices (max PCI bus is 00)
>>>>>>> (d98) Allocated Xen hypercall page at 77fff000
>>>>>>> (d98) Detected Xen v4.5-unstable
>>>>>>> (d98) xen: copy BIOS tables...
>>>>>>> (d98) Copying SMBIOS entry point from 0x00010010 to 0x000f0f40
>>>>>>> (d98) Copying MPTABLE from 0xfc001170/fc001180 to 0x000f0e40
>>>>>>> (d98) Copying PIR from 0x00010030 to 0x000f0dc0
>>>>>>> (d98) Copying ACPI RSDP from 0x000100b0 to 0x000f0d90
>>>>>>> (d98) Using pmtimer, ioport 0xb008
>>>>>>> (d98) Scan for VGA option rom
>>>>>>> (d98) Running option rom at c000:0003
>>>>>>> (XEN) stdvga.c:147:d98v0 entering stdvga and caching modes
>>>>>>> (d98) pmm call arg1=0
>>>>>>> (d98) Turning on vga text mode console
>>>>>>> (d98) SeaBIOS (version
>>>>>>> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
>>>>>>> (d98) Machine UUID f4cdeb74-0db1-4748-948d-42579a494120
>>>>>>> (d98) EHCI init on dev 00:1d.7 (regs=0xf9057020)
>>>>>>> (d98) Found 0 lpt ports
>>>>>>> (d98) Found 0 serial ports
>>>>>>> (d98) ATA controller 1 at 1f0/3f4/0 (irq 14 dev 9)
>>>>>>> (d98) ATA controller 2 at 170/374/0 (irq 15 dev 9)
>>>>>>> (d98) ata0-0: QEMU HARDDISK ATA-7 Hard-Disk (40720 MiBytes)
>>>>>>> (d98) Searching bootorder for: /pci@i0cf8/*@1,1/drive@0/disk@0
>>>>>>> (d98) DVD/CD [ata0-1: QEMU DVD-ROM ATAPI-4 DVD/CD]
>>>>>>> (d98) Searching bootorder for: /pci@i0cf8/*@1,1/drive@0/disk@1
>>>>>>> (d98) UHCI init on dev 00:1d.0 (io=c240)
>>>>>>> (d98) UHCI init on dev 00:1d.1 (io=c260)
>>>>>>> (d98) UHCI init on dev 00:1d.2 (io=c280)
>>>>>>> (d98) PS2 keyboard initialized
>>>>>>> (d98) All threads complete.
>>>>>>> (d98) Scan for option roms
>>>>>>> (d98) Running option rom at c980:0003
>>>>>>> (d98) pmm call arg1=1
>>>>>>> (d98) pmm call arg1=0
>>>>>>> (d98) pmm call arg1=1
>>>>>>> (d98) pmm call arg1=0
>>>>>>> (d98) Searching bootorder for: /pci@i0cf8/*@6
>>>>>>> (d98)
>>>>>>> (d98) Press F12 for boot menu.
>>>>>>> (d98)
>>>>>>> (d98) Searching bootorder for: HALT
>>>>>>> (d98) drive 0x000f0d40: PCHS=16383/16/63 translation=lba
>>>>>>> LCHS=1024/255/63 s=83394560
>>>>>>> (d98) Space available for UMB: ca800-ee800, f0000-f0ce0
>>>>>>> (d98) Returned 258048 bytes of ZoneHigh
>>>>>>> (d98) e820 map has 6 items:
>>>>>>> (d98)   0: 0000000000000000 - 000000000009fc00 = 1 RAM
>>>>>>> (d98)   1: 000000000009fc00 - 00000000000a0000 = 2 RESERVED
>>>>>>> (d98)   2: 00000000000f0000 - 0000000000100000 = 2 RESERVED
>>>>>>> (d98)   3: 0000000000100000 - 0000000077fff000 = 1 RAM
>>>>>>> (d98)   4: 0000000077fff000 - 0000000078000000 = 2 RESERVED
>>>>>>> (d98)   5: 00000000fc000000 - 0000000100000000 = 2 RESERVED
>>>>>>> (d98) enter handle_19:
>>>>>>> (d98)   NULL
>>>>>>> (d98) Booting from Hard Disk...
>>>>>>> (d98) Booting from 0000:7c00
>>>>>>> (XEN) d98: VIRIDIAN GUEST_OS_ID: vendor: 1 os: 4 major: 6 minor: 1
>> sp:
>>>>>>> 1 build: 1db1
>>>>>>> (XEN) d98: VIRIDIAN HYPERCALL: enabled: 1 pfn: 3ffff
>>>>>>> (XEN) d98v0: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffe
>>>>>>> (XEN) d98v1: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffd
>>>>>>> (XEN) irq.c:270: Dom98 PCI link 0 changed 5 -> 0
>>>>>>> (XEN) irq.c:270: Dom98 PCI link 1 changed 10 -> 0
>>>>>>> (XEN) irq.c:270: Dom98 PCI link 2 changed 11 -> 0
>>>>>>> (XEN) irq.c:270: Dom98 PCI link 3 changed 5 -> 0
>>>>>>> (XEN) irq.c:380: Dom98 callback via changed to GSI 24
>>>>>>> (d98) XEN|BUGCHECK: ====>
>>>>>>> (d98) XEN|BUGCHECK: 0000007A: FFFFF6FC000171C8
>> FFFFFFFFC0000185
>>>>>>> 000000001BD6A860 FFFF
>>>>>>> (d98) F80002E39000
>>>>>>> (d98) XEN|BUGCHECK: CONTEXT (FFFFF8800310E530):
>>>>>>> (d98) XEN|BUGCHECK: - GS = 002B
>>>>>>> (d98) XEN|BUGCHECK: - FS = 0053
>>>>>>> (d98) XEN|BUGCHECK: - ES = 002B
>>>>>>> (d98) XEN|BUGCHECK: - DS = 002B
>>>>>>> (d98) XEN|BUGCHECK: - SS = 0018
>>>>>>> (d98) XEN|BUGCHECK: - CS = 0010
>>>>>>> (d98) XEN|BUGCHECK: - EFLAGS = 00000086
>>>>>>> (d98) XEN|BUGCHECK: - RDI = 00000000000171C8
>>>>>>> (d98) XEN|BUGCHECK: - RSI = 00000000C0000185
>>>>>>> (d98) XEN|BUGCHECK: - RBX = 00000000038AC8F8
>>>>>>> (d98) XEN|BUGCHECK: - RDX = 0000000000000000
>>>>>>> (d98) XEN|BUGCHECK: - RCX = 000000000310E530
>>>>>>> (d98) XEN|BUGCHECK: - RAX = 000000002ECF4722
>>>>>>> (d98) XEN|BUGCHECK: - RBP = 000000001BD6A860
>>>>>>> (d98) XEN|BUGCHECK: - RIP = 00000000038A2A43
>>>>>>> (d98) XEN|BUGCHECK: - RSP = 000000000310E510
>>>>>>> (d98) XEN|BUGCHECK: - R8 = 0000000000000000
>>>>>>> (d98) XEN|BUGCHECK: - R9 = 0000000000000000
>>>>>>> (d98) XEN|BUGCHECK: - R10 = 0000000000000000
>>>>>>> (d98) XEN|BUGCHECK: - R11 = 0000000000000000
>>>>>>> (d98) XEN|BUGCHECK: - R12 = 000000000000007A
>>>>>>> (d98) XEN|BUGCHECK: - R13 = 0000000000000001
>>>>>>> (d98) XEN|BUGCHECK: - R14 = 0000000002E39000
>>>>>>> (d98) XEN|BUGCHECK: - R15 = 0000000002CBAC40
>>>>>>> (d98) XEN|BUGCHECK: STACK:
>>>>>>> (d98) XEN|BUGCHECK: 000000000310EA20: (0000000000000003
>>>>>>> 00000000038A50F0 00000000038A
>>>>>>> (d98) 4860 000000000000007A) xen.sys + 00000000000049AC
>>>>>>> (d98) XEN|BUGCHECK: 000000000310EA70: (00000000038AD0D0
>>>>>>> 0000000000000000 000000000000
>>>>>>> (d98) 0004 0000000002C83500) ntoskrnl.exe + 0000000000128585
>>>>>>> (d98) XEN|BUGCHECK: 000000000310EAA0: (00000000038AD0D0
>>>>>>> 0000000002C83500 000000000000
>>>>>>> (d98) 000F 0000000001780660) ntoskrnl.exe + 0000000000167C0D
>>>>>>> (d98) XEN|BUGCHECK: 000000000310F170: (0000000003816470
>>>>>>> 0000000002B4C8C1 000000000000
>>>>>>> (d98) 00FE 0000000000000000) ntoskrnl.exe + 0000000000075CC4
>>>>>>> (d98) XEN|BUGCHECK: 000000000310F1B0: (000000000000007A
>>>>>>> 00000000000171C8 00000000C000
>>>>>>> (d98) 0185 000000001BD6A860) ntoskrnl.exe + 00000000000E8752
>>>>>>> (d98) XEN|BUGCHECK: 000000000310F290: (00000000038163B0
>>>>>>> 000000000310F320 0000000002CB
>>>>>>> (d98) D540 00000000038163B0) ntoskrnl.exe + 000000000009C91F
>>>>>>> (d98) XEN|BUGCHECK: 000000000310F360: (0000000000000000
>>>>>>> 0000000000000008 00000000FFFF
>>>>>>> (d98) FFFF 00000000003500F0) ntoskrnl.exe + 00000000000831B9
>>>>>>> (d98) XEN|BUGCHECK: 000000000310F4C0: (0000000000000008
>>>>>>> 0000000002E39000 000000000000
>>>>>>> (d98) 0000 0000000000000000) ntoskrnl.exe + 0000000000073CEE
>>>>>>> (d98) XEN|BUGCHECK: 000000000310F658: (0000000002E5CFD5
>>>>>>> 0000000000000000 0000000003EB
>>>>>>> (d98) 8710 00000000FFFFFFFF) ntoskrnl.exe + 000000000042C000
>>>>>> If you need more tests/informations tell me and I'll post them.
>>>>>> Thanks for any reply and sorry for my bad english.
>>>>> Well, that tells me you had a 7A BSOD, which is a
>>>> KERNEL_DATA_INPAGE_ERROR. The error status (param 2) was C0000185
>> so
>>>> that's a STATUS_IO_DEVICE_ERROR. The documentation at
>>>> http://msdn.microsoft.com/en-
>>>> gb/library/windows/hardware/ff559211%28v=vs.85%29.aspx tells me that
>>>> this means:
>>>>> "improper termination or defective cabling on SCSI devices or that two
>>>> devices are trying to use the same IRQ."
>>>>> But you said you had xenvbd already installed so you'll be using a PV
>>>> storage path. Is there any indication of problems with your storage?
>>>>>      Paul
>>>> DomUs disk are all raw files in local dom0 disks, raid1 with "LSI Logic
>>>> / Symbios Logic SAS2008 PCI-Express Fusion-MPT SAS-2" dom0 partitions
>>>> are GTP and fs ext4.
>>>> Dom0 is wheezy with kernel is linux-image-3.16-0.bpo.2-amd64 version
>>>> 3.16.3-2~bpo70+1
>>>> No kern or syslog errors, only many of these warning that someone
>>>> replied me that should not be a problem:
>>>> Oct 15 10:45:13 mtorMN01OU kernel: [773197.117518] xen:balloon:
>>>> reserve_additional_memory: add_memory() failed: -17
>>>> DomU now see disk as xen pvdisk, on xenvif install probably still was
>>>> full emulated disk even if xenvbd was installed successful before xenvif
>>>> install (failed with BSOD)
>>>> The IRQ seems visible from xl dmesg output below, can you check them is
>>>> have something wrong or strange, I see some of them "duplicate" but I
>>>> not know if is correct.
>>>>
>>>> DomU xl cfg:
>>>>> name='office1_w7'
>>>>> builder="hvm"
>>>>> memory=2048
>>>>> vcpus=2
>>>>> acpi_s3=0
>>>>> acpi_s4=0
>>>>> vif=['bridge=xenbr0,mac=00:16:3e:41:ae:8b']
>>>>>
>> disk=['/mnt/vm/disks/office1_w7.disk1.xm,raw,hda,rw',',raw,hdb,ro,cdrom'
>>>> ]
>>>>> boot='c'
>>>>> device_model_version="qemu-xen"
>>>>> viridian=1
>>>>> vnc=0
>>>>> keymap="it"
>>>>> on_crash="destroy"
>>>>> vga="qxl"
>>>>> spice=1
>>>>> spicehost='0.0.0.0'
>>>>> spiceport=6001
>>>>> spicedisable_ticketing=0
>>>>> spicepasswd="password"
>>>>> spicevdagent=1
>>>>> spice_clipboard_sharing=0
>>>>> spiceusbredirection=4
>>>>> soundhw="hda"
>>>>> localtime=1
>>>> If you need more tests/informations tell me and I'll post them.
>>>>
>>> Do you have the qemu log (with xen platform logging enabled). This is
>> where the PV drivers log failures/warnings.
>>>     Paul
>>>
>>>
>> I retried enabling xen platform debug in qemu trace but no add lines in
>> log when I try to install xenvif and fails.
>> I attach anyway the log if can be useful.
> All I can see there is an apparently clean shutdown of domain 101; no sign of XENVIF and no sign of a BSOD.
>
>> I'll also try to restore the backup of this night of the domU when I had
>> the BSOD trying reproduce it with xen debug in qemu trace and different
>> windows memory dump options.
> Ok.
>
>    Paul
>
Reproduced it but now with xen platform trace enabled in qemu. (see 
attachment)
Dump of memory instead is not present also in this case (probably 
because disk is "failed").


--------------020906010403050709090208
Content-Type: text/plain; charset=windows-1252;
 name="qemu-dm-office1_w7.log"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
 filename="qemu-dm-office1_w7.log"

(/usr/sbin/xl:3221): Spice-Warning **: reds.c:1863:reds_handle_ticket: Invalid password
main_channel_link: add main channel client
main_channel_handle_parsed: agent start
main_channel_handle_parsed: net test: latency 5.634000 ms, bitrate 7937984496 bps (7570.251938 Mbps)
inputs_connect: inputs channel client create
red_dispatcher_set_cursor_peer: 
xen_platform_log xen platform: XEN|DllInitialize: XEN 8.0.0 (0) (13.10.2014)
xen_platform_log xen platform: XEN|SystemGetStartOptions:  TESTSIGNING  NOEXECUTE=OPTIN
xen_platform_log xen platform: XEN|SystemGetVersionInformation: KERNEL: 6.1 (BUILD 7601) PLATFORM WIN32_NT (x64)
xen_platform_log xen platform: XEN|SystemGetVersionInformation: SP: 1.0 ()
xen_platform_log xen platform: XEN|SystemGetVersionInformation: SUITES:
xen_platform_log xen platform: XEN|SystemGetVersionInformation: - TERMINAL
xen_platform_log xen platform: XEN|SystemGetVersionInformation: - SINGLEUSERTS
xen_platform_log xen platform: XEN|SystemGetVersionInformation: TYPE: WORKSTATION
xen_platform_log xen platform: XEN|SystemGetMemoryInformation: RANGE[0] 00000000.00001000 - 00000000.0009efff
xen_platform_log xen platform: XEN|SystemGetMemoryInformation: RANGE[1] 00000000.00100000 - 00000000.77ffefff
xen_platform_log xen platform: XEN|SystemCpuInformation: ====> (1)
xen_platform_log xen platform: XEN|SystemCpuInformation: Manufacturer: GenuineIntel
xen_platform_log xen platform: XEN|SystemCpuInformation: Local APIC ID: 02
xen_platform_log xen platform: XEN|SystemCpuInformation: <==== (1)
xen_platform_log xen platform: XEN|SystemCpuInformation: ====> (0)
xen_platform_log xen platform: XEN|SystemCpuInformation: Manufacturer: GenuineIntel
xen_platform_log xen platform: XEN|SystemCpuInformation: Local APIC ID: 00
xen_platform_log xen platform: XEN|SystemCpuInformation: <==== (0)
xen_platform_log xen platform: XEN|HypercallInitialize: XEN 4.5
xen_platform_log xen platform: XEN|HypercallInitialize: INTERFACE 0x00040300
xen_platform_log xen platform: XEN|HypercallInitialize: HypercallPfn[0]: 00000000000745EA
xen_platform_log xen platform: XENBUS|DriverEntry: XENBUS 8.0.0 (0) (13.10.2014)
xen_platform_log xen platform: XENBUS|FdoCreate: FFFFFA8001E91D40 (XS0001 XENBUS) [ACTIVE]
xen_platform_log xen platform: SHARED_INFO: MAP XENMAPSPACE_shared_info @ 00000000.f8000000
xen_platform_log xen platform: XENBUS|FdoScan: ====>
xen_platform_log xen platform: STORE: PAGE @ 00000000.feffc000
xen_platform_log xen platform: XENBUS|FdoSuspend: ====>
xen_platform_log xen platform: XENBUS|FdoBalloon: ====>
xen_platform_log xen platform: XENBUS|PdoCreate: FFFFFA8001E90990 (VBD 00000001)
xen_platform_log xen platform: XENBUS|PdoCreate: FFFFFA8001D7D5F0 (VIF 00000001)
xen_platform_log xen platform: XENBUS|PdoCreate: FFFFFA8001EB2990 (IFACE 00000001)
xen_platform_log xen platform: XENVBD|DriverEntry:8.0.0.0 (24/9/2014)
xen_platform_log xen platform: XENVBD|__DriverParseParameterKey:DriverParameters: 
xen_platform_log xen platform: XENVBD|DispatchPnp:DeviceObject 0xFFFFFA80024F8420 is not FDO (0x0000000000000000) or a PDO
xen_platform_log xen platform: XENVBD|DispatchPnp:DeviceObject 0xFFFFFA80024F8420 is not FDO (0x0000000000000000) or a PDO
xen_platform_log xen platform: XENVBD|DispatchPnp:DeviceObject 0xFFFFFA80024F8420 is not FDO (0x0000000000000000) or a PDO
xen_platform_log xen platform: XENVBD|DispatchPnp:DeviceObject 0xFFFFFA80024F8420 is not FDO (0x0000000000000000) or a PDO
xen_platform_log xen platform: XENVBD|DispatchPnp:DeviceObject 0xFFFFFA80024F8420 is not FDO (0x0000000000000000) or a PDO
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: BUS_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENVBD|DispatchPnp:DeviceObject 0xFFFFFA80024F8420 is not FDO (0x0000000000000000) or a PDO
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: BUS_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: Version = 0
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: Master = TRUE
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: ScatterGather = TRUE
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: DemandMode = FALSE
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: AutoInitialize = FALSE
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: Dma32BitAddresses = TRUE
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: IgnoreCount = FALSE
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: Dma64BitAddresses = TRUE
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: BusNumber = 00000000
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: DmaChannel = ffffffff
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: InterfaceType = Internal
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: DmaWidth = 8Bits
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: DmaSpeed = Compatible
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: MaximumLength = 000b0000
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: DmaPort = ffffffff
xen_platform_log xen platform: XENBUS|DmaGetAdapter: no interception
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: STORE_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: EVTCHN_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: GNTTAB_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: SUSPEND_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: DEBUG_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: EMULATED_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENVBD|__FdoSetDevicePowerState:POWER D3 to D0
xen_platform_log xen platform: XENVBD|__FdoD3ToD0:D3->D0
xen_platform_log xen platform: XENVBD|__FdoIsPdoUnplugged:Target[0] : (vbd/768) Emulated NOT_KNOWN (assumed PRESENT)
xen_platform_log xen platform: XENVBD|PdoCreate:Target[0] : Creating (Emulated)
xen_platform_log xen platform: XENVBD|PdoSetDevicePowerState:Target[0] : POWER D3 to D0
xen_platform_log xen platform: XENVBD|PdoD3ToD0:Target[0] : D3->D0 (Emulated)
xen_platform_log xen platform: XENVBD|PdoCreate:Target[0] : Created (Emulated)
xen_platform_log xen platform: XENVBD|FdoLogTargets:ScanThread ===>
xen_platform_log xen platform: XENVBD|FdoLogTargets:ScanThread : Target[0] = 0xFFFFFA80024B2C70 (present)
xen_platform_log xen platform: XENVBD|FdoLogTargets:ScanThread <===
xen_platform_log xen platform: XENVBD|FdoDispatchPnp:14:QUERY_PNP_DEVICE_STATE -> c00000bb
xen_platform_log xen platform: XENVBD|__ValidateSrbForPdo:Target[0] : Disk is Emulated (a0:SCSIOP_REPORT_LUNS)
xen_platform_log xen platform: XENVBD|__ValidateSrbForPdo:Target[0] : Disk is Emulated (12:SCSIOP_INQUIRY)
xen_platform_log xen platform: XENVIF|DriverEntry: XENVIF 8.0.0 (0) (24.09.2014)
xen_platform_log xen platform: XENFILT|DriverEntry: XENFILT 8.0.0 (0) (13.10.2014)
xen_platform_log xen platform: XENFILT|DriverSetActiveDeviceInstance: PCI\VEN_5853&DEV_0001&SUBSYS_00015853&REV_01/10
xen_platform_log xen platform: XENFILT|UnplugCheckForPVDisks: PRESENT
xen_platform_log xen platform: XENFILT|UnplugCheckForPVNics: NOT PRESENT
xen_platform_log xen platform: UNPLUG: PRE-AMBLE (DRIVERS NOT BLACKLISTED)
xen_platform_log xen platform: UNPLUG: DISKS
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VIF: BUS_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VIF: DEBUG_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VIF: SUSPEND_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VIF: EVTCHN_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VIF: STORE_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VIF: RANGE_SET_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VIF: CACHE_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VIF: GNTTAB_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENVIF|FdoCreate: FFFFFA8002756280 (XS0001 XENVIF)
xen_platform_log xen platform: XENFILT|DriverUnload: XENFILT 8.0.0 (0) (13.10.2014)
xen_platform_log xen platform: XENVIF|__PdoSetPermanentAddress: 0 00:16:3E:41:AE:8B
xen_platform_log xen platform: XENVIF|__PdoSetContainerID: 0 {9999882d-5ecc-503e-924b-b4b937e3da35}
xen_platform_log xen platform: XENVIF|PdoCreate: FFFFFA8001EBA1B0 (0 00000001)
xen_platform_log xen platform: XENVIF|LinkGetRoutineAddress: netio.sys:NotifyUnicastIpAddressChange (00F9) @ FFFFF880015B6850
xen_platform_log xen platform: XENVIF|LinkGetRoutineAddress: netio.sys:GetUnicastIpAddressTable (0044) @ FFFFF880015B6900
xen_platform_log xen platform: XENVIF|LinkGetRoutineAddress: netio.sys:FreeMibTable (0022) @ FFFFF8800159EFD0
xen_platform_log xen platform: XENVIF|LinkGetRoutineAddress: netio.sys:CancelMibChangeNotify2 (0000) @ FFFFF880015ABD30
xen_platform_log xen platform: XEN|DEBUG: ====> (xenbus.sys + 0000000000011990)
xen_platform_log xen platform: XENBUS|SUSPEND: Count = 0
xen_platform_log xen platform: XENBUS|SUSPEND: EARLY: xenbus.sys + 00000000000072F4 (FFFFFA8001EE7000)
xen_platform_log xen platform: XENBUS|SUSPEND: EARLY: xenbus.sys + 000000000000EAB0 (FFFFFA8001BFE340)
xen_platform_log xen platform: XENBUS|SUSPEND: EARLY: xenbus.sys + 000000000001115C (FFFFFA8001EE5000)
xen_platform_log xen platform: XENBUS|SUSPEND: EARLY: xenbus.sys + 000000000000C7BC (FFFFFA80023535B0)
xen_platform_log xen platform: XENBUS|SUSPEND: LATE: xenbus.sys + 000000000001119C (FFFFFA8001EE5000)
xen_platform_log xen platform: XENBUS|SUSPEND: LATE: xenbus.sys + 000000000000B62C (FFFFFA800189DAE0)
xen_platform_log xen platform: XENBUS|SUSPEND: LATE: xenbus.sys + 000000000000DF60 (FFFFFA8001E53190)
xen_platform_log xen platform: XENBUS|SUSPEND: LATE: xenvbd.sys + 0000000000008C4C (FFFFFA8001B95158)
xen_platform_log xen platform: XENBUS|SUSPEND: LATE: xenvbd.sys + 000000000000F500 (FFFFFA8002D9E870)
xen_platform_log xen platform: XENBUS|SUSPEND: LATE: xenbus.sys + 000000000000DF60 (FFFFFA8001BAC770)
xen_platform_log xen platform: XENBUS|SUSPEND: LATE: xenvif.sys + 0000000000007738 (FFFFFA8002264B80)
xen_platform_log xen platform: XENBUS|SUSPEND: LATE: xenvif.sys + 000000000000BE50 (FFFFFA800312B010)
xen_platform_log xen platform: XEN|DEBUG: <==== (xenbus.sys + 0000000000011990)
xen_platform_log xen platform: XEN|DEBUG: ====> (xenbus.sys + 0000000000012AD4)
xen_platform_log xen platform: XENBUS|RANGE_SET: RANGE SETS:
xen_platform_log xen platform: XENBUS|RANGE_SET:  - io_space:
xen_platform_log xen platform: XENBUS|RANGE_SET:    {f8021000 - f8ffffff}*
xen_platform_log xen platform: XENBUS|RANGE_SET:  - balloon:
xen_platform_log xen platform: XENBUS|RANGE_SET:    EMPTY
xen_platform_log xen platform: XENBUS|RANGE_SET:  - gnttab:
xen_platform_log xen platform: XENBUS|RANGE_SET:    EMPTY
xen_platform_log xen platform: XENBUS|RANGE_SET:  - device_vif_0_transmitter_req_id:
xen_platform_log xen platform: XENBUS|RANGE_SET:    {1 - 3ff}*
xen_platform_log xen platform: XEN|DEBUG: <==== (xenbus.sys + 0000000000012AD4)
xen_platform_log xen platform: XEN|DEBUG: ====> (xenbus.sys + 0000000000006F48)
xen_platform_log xen platform: XENBUS|EVTCHN: EVENT CHANNELS:
xen_platform_log xen platform: XENBUS|EVTCHN: - (0001) BY xenbus.sys + 0000000000010690 [TRUE]
xen_platform_log xen platform: XENBUS|EVTCHN: FIXED: Mask = FALSE
xen_platform_log xen platform: XENBUS|EVTCHN: - (0006) BY xenbus.sys + 00000000000088A8 [TRUE]
xen_platform_log xen platform: XENBUS|EVTCHN: VIRQ: Index = 1
xen_platform_log xen platform: XEN|DEBUG: <==== (xenbus.sys + 0000000000006F48)
xen_platform_log xen platform: XEN|DEBUG: ====> (xenbus.sys + 000000000000E7EC)
xen_platform_log xen platform: XENBUS|SHARED_INFO: Address = 00000000.f8000000
xen_platform_log xen platform: XEN|DEBUG: <==== (xenbus.sys + 000000000000E7EC)
xen_platform_log xen platform: XEN|DEBUG: ====> (xenbus.sys + 00000000000103B8)
xen_platform_log xen platform: XENBUS|STORE: Address = 00000000.feffc000
xen_platform_log xen platform: XENBUS|STORE: WATCHES:
xen_platform_log xen platform: XENBUS|STORE: - (D098) ON device BY xenbus.sys + 000000000000890D [ACTIVE]
xen_platform_log xen platform: XENBUS|STORE: - (D099) ON control/shutdown BY xenbus.sys + 0000000000008949 [ACTIVE]
xen_platform_log xen platform: XENBUS|STORE: - (D09A) ON memory/target BY xenbus.sys + 00000000000089BC [ACTIVE]
xen_platform_log xen platform: XENBUS|STORE: - (D09B) ON device/vbd BY xenvbd.sys + 000000000000964A [ACTIVE]
xen_platform_log xen platform: XENBUS|STORE: - (D09C) ON device/vif BY xenvif.sys + 00000000000058B2 [ACTIVE]
xen_platform_log xen platform: XEN|DEBUG: <==== (xenbus.sys + 00000000000103B8)
xen_platform_log xen platform: XEN|DEBUG: ====> (xenbus.sys + 0000000000014428)
xen_platform_log xen platform: XENBUS|CACHE: CACHES:
xen_platform_log xen platform: XENBUS|CACHE: - device_vif_0_receiver_packet: Count = 0 (Reservation = 0)
xen_platform_log xen platform: XENBUS|CACHE: - device_vif_0_receiver_fragment: Count = 0 (Reservation = 0)
xen_platform_log xen platform: XENBUS|CACHE: - device_vif_0_transmitter_buffer: Count = 0 (Reservation = 0)
xen_platform_log xen platform: XENBUS|CACHE: - device_vif_0_transmitter_fragment: Count = 0 (Reservation = 0)
xen_platform_log xen platform: XEN|DEBUG: <==== (xenbus.sys + 0000000000014428)
xen_platform_log xen platform: XEN|DEBUG: ====> (xenbus.sys + 000000000000C454)
xen_platform_log xen platform: XENBUS|GNTTAB: Address = 00000000.f8001000
xen_platform_log xen platform: XENBUS|GNTTAB: FrameIndex = -1
xen_platform_log xen platform: XEN|DEBUG: <==== (xenbus.sys + 000000000000C454)
xen_platform_log xen platform: XEN|DEBUG: ====> (xenvbd.sys + 00000000000064B4)
xen_platform_log xen platform: XENVBD: FDO: Version: 8.0.0.0 (24/9/2014)
xen_platform_log xen platform: XENVBD: FDO: Fdo: 0xFFFFFA8001B95158 (ref-count 1) CRASHING
xen_platform_log xen platform: XENVBD: FDO: DevObj 0xFFFFFA80024F8420 LowerDevObj 0xFFFFFA8001E90990 PhysDevObj 0xFFFFFA8001E90990
xen_platform_log xen platform: XENVBD: FDO: DevicePowerState: D0
xen_platform_log xen platform: XENVBD: FDO: Enumerator      : vbd (0x0000000000000000)
xen_platform_log xen platform: XENVBD: FDO: Srbs            : 0 / 1 (1526 Total)
xen_platform_log xen platform: XENVBD: BUFFER: Allocated/Freed : 32 / 0
xen_platform_log xen platform: XENVBD: BUFFER: Free (Cur/Max)  : 32 / 32
xen_platform_log xen platform: XENVBD: BUFFER: Used (Cur/Max)  : 0 / 0
xen_platform_log xen platform: XENVBD: BUFFER: Reaped          : 0 / 0
xen_platform_log xen platform: XENVBD: FDO: ====> Target[0  ]    : 0xFFFFFA80024B2C70
xen_platform_log xen platform: XENVBD: PDO: Fdo 0xFFFFFA8001B95158 DeviceObject 0x0000000000000000
xen_platform_log xen platform: XENVBD: PDO: ReferenceCount 1
xen_platform_log xen platform: XENVBD: PDO: DevicePnpState Present (Invalid)
xen_platform_log xen platform: XENVBD: PDO: DevicePowerState D0
xen_platform_log xen platform: XENVBD: PDO: EMULATED Not Missing
xen_platform_log xen platform: XENVBD: PDO: BLKIF_OPs: READ=0 WRITE=0
xen_platform_log xen platform: XENVBD: PDO: BLKIF_OPs: INDIRECT_READ=0 INDIRECT_WRITE=0
xen_platform_log xen platform: XENVBD: PDO: BLKIF_OPs: BARRIER=0 DISCARD=0
xen_platform_log xen platform: XENVBD: PDO: Failed: Maps=0 Bounces=0 Grants=0
xen_platform_log xen platform: XENVBD: PDO: Segments Granted=0 Bounced=0
xen_platform_log xen platform: XENVBD: LOOKASIDE: REQUESTs: 0 / 0 (0 failed)
xen_platform_log xen platform: XENVBD: LOOKASIDE: SEGMENTs: 0 / 0 (0 failed)
xen_platform_log xen platform: XENVBD: LOOKASIDE: INDIRECTs: 0 / 0 (0 failed)
xen_platform_log xen platform: XENVBD: QUEUE: Fresh     : 0 / 0
xen_platform_log xen platform: XENVBD: QUEUE: Prepared  : 0 / 0
xen_platform_log xen platform: XENVBD: QUEUE: Submitted : 0 / 0
xen_platform_log xen platform: XENVBD: QUEUE: Shutdown  : 0 / 0
xen_platform_log xen platform: XENVBD: FRONTEND: TargetId=0 DeviceId=768 BackendId=32756
xen_platform_log xen platform: XENVBD: FRONTEND: FrontendPath device/vbd/768
xen_platform_log xen platform: XENVBD: FRONTEND: BackendPath  NULL
xen_platform_log xen platform: XENVBD: FRONTEND: TargetPath   data/scsi/target/0
xen_platform_log xen platform: XENVBD: FRONTEND: State   : INITIALIZED
xen_platform_log xen platform: XENVBD: FRONTEND: Caps    : 
xen_platform_log xen platform: XENVBD: FRONTEND: Features: 
xen_platform_log xen platform: XENVBD: FRONTEND: DiskInfo: 0 @ 512 (0) 00000000
xen_platform_log xen platform: XENVBD: GRANTER: DISCONNECTED DISABLED
xen_platform_log xen platform: XENVBD: GRANTER: 0 / 0
xen_platform_log xen platform: XENVBD: BLOCKRING: Requests  : 0 / 0 / 0
xen_platform_log xen platform: XENVBD: BLOCKRING: SharedRing : 0x0000000000000000
xen_platform_log xen platform: XENVBD: BLOCKRING: FrontRing  : 0 / 0 (0)
xen_platform_log xen platform: XENVBD: BLOCKRING: Order      : 0
xen_platform_log xen platform: XENVBD: BLOCKRING: Grants[0 ] : 0x0000000000000000 (0)
xen_platform_log xen platform: XENVBD: NOTIFIER: Int / DPC : 0 / 0
xen_platform_log xen platform: XENVBD: FDO: <==== Target[0  ]    : 0xFFFFFA80024B2C70
xen_platform_log xen platform: XEN|DEBUG: <==== (xenvbd.sys + 00000000000064B4)
xen_platform_log xen platform: XEN|BUGCHECK: ====>
xen_platform_log xen platform: XEN|BUGCHECK: 0000007A: FFFFF6FC40024810 FFFFFFFFC0000185 0000000019999BE0 FFFFF88004902000
xen_platform_log xen platform: XEN|BUGCHECK: CONTEXT (FFFFF88003177BD0):
xen_platform_log xen platform: XEN|BUGCHECK: - GS = 002B
xen_platform_log xen platform: XEN|BUGCHECK: - FS = 0053
xen_platform_log xen platform: XEN|BUGCHECK: - ES = 002B
xen_platform_log xen platform: XEN|BUGCHECK: - DS = 002B
xen_platform_log xen platform: XEN|BUGCHECK: - SS = 0018
xen_platform_log xen platform: XEN|BUGCHECK: - CS = 0010
xen_platform_log xen platform: XEN|BUGCHECK: - EFLAGS = 00000086
xen_platform_log xen platform: XEN|BUGCHECK: - RDI = 0000000040024810
xen_platform_log xen platform: XEN|BUGCHECK: - RSI = 00000000C0000185
xen_platform_log xen platform: XEN|BUGCHECK: - RBX = 00000000047868F8
xen_platform_log xen platform: XEN|BUGCHECK: - RDX = 0000000000000000
xen_platform_log xen platform: XEN|BUGCHECK: - RCX = 0000000003177BD0
xen_platform_log xen platform: XEN|BUGCHECK: - RAX = 000000002EC8D982
xen_platform_log xen platform: XEN|BUGCHECK: - RBP = 0000000019999BE0
xen_platform_log xen platform: XEN|BUGCHECK: - RIP = 000000000477CA43
xen_platform_log xen platform: XEN|BUGCHECK: - RSP = 0000000003177BB0
xen_platform_log xen platform: XEN|BUGCHECK: - R8 = 0000000000000000
xen_platform_log xen platform: XEN|BUGCHECK: - R9 = 0000000000000000
xen_platform_log xen platform: XEN|BUGCHECK: - R10 = 0000000000000000
xen_platform_log xen platform: XEN|BUGCHECK: - R11 = 0000000000000000
xen_platform_log xen platform: XEN|BUGCHECK: - R12 = 000000000000007A
xen_platform_log xen platform: XEN|BUGCHECK: - R13 = 0000000000000001
xen_platform_log xen platform: XEN|BUGCHECK: - R14 = 0000000004902000
xen_platform_log xen platform: XEN|BUGCHECK: - R15 = 0000000002D10C40
xen_platform_log xen platform: XEN|BUGCHECK: STACK:
xen_platform_log xen platform: XEN|BUGCHECK: 00000000031780C0: (0000000000000003 000000000477F0F0 000000000477E860 000000000000007A) xen.sys + 00000000000049AC
xen_platform_log xen platform: XEN|BUGCHECK: 0000000003178110: (00000000047870D0 0000000000000000 0000000000000004 0000000002CD9500) ntoskrnl.exe + 0000000000128585
xen_platform_log xen platform: XEN|BUGCHECK: 0000000003178140: (00000000047870D0 0000000002CD9500 000000000000000F 000000000176C5E0) ntoskrnl.exe + 0000000000167C0D
xen_platform_log xen platform: XEN|BUGCHECK: 0000000003178810: (0000000002E8FF50 0000000002BA28C1 00000000000000FE 0000000000000000) ntoskrnl.exe + 0000000000075CC4
xen_platform_log xen platform: XEN|BUGCHECK: 0000000003178850: (000000000000007A 0000000040024810 00000000C0000185 0000000019999BE0) ntoskrnl.exe + 00000000000E8752
xen_platform_log xen platform: XEN|BUGCHECK: 0000000003178930: (0000000002E8FE90 00000000031789C0 0000000002D13540 0000000002E8FE90) ntoskrnl.exe + 000000000009C91F
xen_platform_log xen platform: XEN|BUGCHECK: 0000000003178A00: (0000000000000000 0000000000000001 00000000FFFFFFFF 0000000002AF7843) ntoskrnl.exe + 00000000000831B9
xen_platform_log xen platform: XEN|BUGCHECK: 0000000003178B60: (0000000000000001 0000000004902000 0000000001AB3000 00000000400247E8) ntoskrnl.exe + 00000000000A96E0
xen_platform_log xen platform: XEN|BUGCHECK: 0000000003178C70: (0000000001A41B50 0000000000000001 0000000000000000 0000000000000000) ntoskrnl.exe + 00000000000A98D0
xen_platform_log xen platform: XEN|BUGCHECK: 0000000003178CD0: (0000000000000000 0000000000000001 0000000001727890 0000000000000080) ntoskrnl.exe + 00000000000A985F
xen_platform_log xen platform: XEN|BUGCHECK: 0000000003178D00: (0000000000000000 0000000000000000 0000000000000000 0000000001727800) ntoskrnl.exe + 00000000000A95A4
xen_platform_log xen platform: XEN|BUGCHECK: 0000000003178D40: (00000000C2C2C2C2 00000000C2C2C2C2 00000000C2C2C2C2 00000000C2C2C2C2) ntoskrnl.exe + 000000000031173A
xen_platform_log xen platform: XEN|BUGCHECK: 0000000003178D80: (0000000002E40180 000000000176C5E0 0000000002E4AF40 00000000C2C2C2C2) ntoskrnl.exe + 00000000000668E6
xen_platform_log xen platform: XEN|BUGCHECK: 0000000003178DB0: (0000000003179000 0000000003173000 00000000031785A0 0000000000000000) 0000000000000000
xen_platform_log xen platform: XEN|BUGCHECK: <====
Issued domain 104 reboot
qemu: terminating on signal 1 from pid 482
red_channel_client_disconnect_dummy: rcc=0x7f809c1a26e0 (channel=0x7f809bee5840 type=5 id=0)
snd_channel_put: SndChannel=0x7f809c11b780 freed
red_channel_client_disconnect_dummy: rcc=0x7f809c133350 (channel=0x7f809bed4fa0 type=6 id=0)
snd_channel_put: SndChannel=0x7f809c2c1340 freed
red_channel_client_disconnect: rcc=0x7f80800297a0 (channel=0x7f809bf68380 type=2 id=0)
red_channel_client_disconnect: rcc=0x7f8080086620 (channel=0x7f809beb4c40 type=4 id=0)

--------------020906010403050709090208
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
--------------020906010403050709090208--


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 16 14:46:07 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 16 Oct 2014 14: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 1XemJa-0002Rz-MF; Thu, 16 Oct 2014 14:46:06 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1XemJY-0002Ru-O5
	for win-pv-devel@lists.xenproject.org; Thu, 16 Oct 2014 14:46:05 +0000
Received: from [193.109.254.147:29052] by server-15.bemta-14.messagelabs.com
	id 96/88-30948-C2ADF345; Thu, 16 Oct 2014 14:46:04 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-11.tower-27.messagelabs.com!1413470761!9871431!1
X-Originating-IP: [74.125.82.47]
X-SpamReason: No, hits=2.2 required=7.0 tests=BIZ_TLD,BODY_RANDOM_LONG
X-StarScan-Received: 
X-StarScan-Version: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 28409 invoked from network); 16 Oct 2014 14:46:01 -0000
Received: from mail-wg0-f47.google.com (HELO mail-wg0-f47.google.com)
	(74.125.82.47)
	by server-11.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	16 Oct 2014 14:46:01 -0000
Received: by mail-wg0-f47.google.com with SMTP id x13so3884472wgg.18
	for <win-pv-devel@lists.xenproject.org>;
	Thu, 16 Oct 2014 07:46:01 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:message-id:date:from:user-agent:mime-version:to
	:subject:references:in-reply-to:content-type;
	bh=VLqHIBOg0Y36yk0224y5aA8EBL4NSb8B4MP9baojr2A=;
	b=c3gpfrOTSmGP/1S/YveceN79Ksxl7R3wnhdjtuV0BXTYUCvV9OA2X7AyCq3+AFSQLv
	GPvMlgpNNR1238lTTYGHdiF37lh3fh5o1t8dDMu7eG9FsqfWwoWs5ts/jIpfRr25gFib
	CwkxZ4jyB35XPIE1Tf1A2iJq+ISeeNqR3VA6S8I4RV4yO7aXo2/pjFJ+ejo5sTQdlv9T
	DU2Z9HwukBvnGAWmXtpuuBqX2g00yjkaoXkjUYwvbgK3pV/PlT5jr9KjXbkw0fmWHzyE
	L1CvREeNm52lISuygWMFnJdGuqi6kj1Vd1mtQxW65J82xBZbWrxqxv6bJHsunSz/LY+c
	bjUA==
X-Gm-Message-State: ALoCoQmbqKKKpvsW6pwVNIIW16yZg0lPsqVMIlaT7jF2Zo2Ej2GG6liRYBXRglIHMvZpw8ZXrz+s
X-Received: by 10.180.206.202 with SMTP id lq10mr6737809wic.44.1413470761603; 
	Thu, 16 Oct 2014 07:46:01 -0700 (PDT)
Received: from [192.168.1.15] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by mx.google.com with ESMTPSA id q3sm2241800wia.14.2014.10.16.07.45.57
	for <multiple recipients>
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Thu, 16 Oct 2014 07:45:59 -0700 (PDT)
Message-ID: <543FDA2D.2090900@m2r.biz>
Date: Thu, 16 Oct 2014 16:46:05 +0200
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64;
	rv:24.0) Gecko/20100101 Thunderbird/24.6.0
MIME-Version: 1.0
To: Paul Durrant <Paul.Durrant@citrix.com>, 
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <543F887B.5030500@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111050FF@AMSPEX01CL01.citrite.net>
	<543F912C.8000504@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD01110526F@AMSPEX01CL01.citrite.net>
	<543FA4F6.5090804@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111053EA@AMSPEX01CL01.citrite.net>
	<543FCA93.2010805@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111057A2@AMSPEX01CL01.citrite.net>
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD0111057A2@AMSPEX01CL01.citrite.net>
Content-Type: multipart/mixed; boundary="------------020906010403050709090208"
Subject: Re: [win-pv-devel] Blue screen on xenvif install
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.
--------------020906010403050709090208
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

Il 16/10/2014 15:45, Paul Durrant ha scritto:
>> -----Original Message-----
>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>> Sent: 16 October 2014 14:40
>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>> Subject: Re: Blue screen on xenvif install
>>
>> Il 16/10/2014 13:04, Paul Durrant ha scritto:
>>>> -----Original Message-----
>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>> Sent: 16 October 2014 11:59
>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>>>> Subject: Re: Blue screen on xenvif install
>>>>
>>>> Il 16/10/2014 12:00, Paul Durrant ha scritto:
>>>>>> -----Original Message-----
>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>>>> Sent: 16 October 2014 10:35
>>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>>>>>> Subject: Re: Blue screen on xenvif install
>>>>>>
>>>>>> Il 16/10/2014 10:59, Paul Durrant ha scritto:
>>>>>>>> -----Original Message-----
>>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>>>>>> Sent: 16 October 2014 09:58
>>>>>>>> To: win-pv-devel@lists.xenproject.org
>>>>>>>> Cc: Paul Durrant
>>>>>>>> Subject: Blue screen on xenvif install
>>>>>>>>
>>>>>>>> Today I tried to install new winpv driver to other 3 windows 7 pro 64
>>>>>>>> bit domUs.
>>>>>>>> Days ago I installed them successful on one windows 7 pro 64 bit and
>>>> one
>>>>>>>> windows 8.1 enterprise 64 bit.
>>>>>>>> On first domUs I tried to install them today I installed xenbus and
>>>>>>>> xenvbd successful but on xenvif install windows crashed with blue
>>>>>>>> screen, if I saw it correctly was an kernel in-page error or something
>>>>>>>> similar.
>>>>>>>> After reboot I retried to install xenvif but now always fails.
>>>>>>>>
>>>>>>> Sounds odd. Do you have a MEMORY.DMP?
>>>>>>>
>>>>>>>       Paul
>>>>>> Windows is setted to write dump of kernel memory on system error
>> but
>>>>>> %systemroot%\memory.dmp is missed :(
>>>>>> I also checked the windows events log but I found only kernel-power
>> as
>>>>>> critical that seems not contains useful data.
>>>>>>
>>>>>> I found probably useful data in xl dmesg (I copied all below from domU
>>>>>> start to xen bug):
>>>>>>> (d98) HVM Loader
>>>>>>> (d98) Detected Xen v4.5-unstable
>>>>>>> (d98) Xenbus rings @0xfeffc000, event channel 1
>>>>>>> (d98) System requested SeaBIOS
>>>>>>> (d98) CPU speed is 2660 MHz
>>>>>>> (d98) Relocating guest memory for lowmem MMIO space disabled
>>>>>>> (XEN) irq.c:270: Dom98 PCI link 0 changed 0 -> 5
>>>>>>> (d98) PCI-ISA link 0 routed to IRQ5
>>>>>>> (XEN) irq.c:270: Dom98 PCI link 1 changed 0 -> 10
>>>>>>> (d98) PCI-ISA link 1 routed to IRQ10
>>>>>>> (XEN) irq.c:270: Dom98 PCI link 2 changed 0 -> 11
>>>>>>> (d98) PCI-ISA link 2 routed to IRQ11
>>>>>>> (XEN) irq.c:270: Dom98 PCI link 3 changed 0 -> 5
>>>>>>> (d98) PCI-ISA link 3 routed to IRQ5
>>>>>>> (d98) pci dev 01:3 INTA->IRQ10
>>>>>>> (d98) pci dev 02:0 INTA->IRQ11
>>>>>>> (d98) pci dev 03:0 INTA->IRQ5
>>>>>>> (d98) pci dev 04:0 INTA->IRQ5
>>>>>>> (d98) pci dev 05:0 INTA->IRQ10
>>>>>>> (d98) pci dev 06:0 INTA->IRQ11
>>>>>>> (d98) pci dev 1d:0 INTA->IRQ10
>>>>>>> (d98) pci dev 1d:1 INTB->IRQ11
>>>>>>> (d98) pci dev 1d:2 INTC->IRQ5
>>>>>>> (d98) pci dev 1d:7 INTD->IRQ5
>>>>>>> (d98) No RAM in high memory; setting high_mem resource base to
>>>>>> 100000000
>>>>>>> (d98) pci dev 05:0 bar 10 size 004000000: 0f0000000
>>>>>>> (d98) pci dev 05:0 bar 14 size 004000000: 0f4000000
>>>>>>> (d98) pci dev 02:0 bar 14 size 001000000: 0f8000008
>>>>>>> (d98) pci dev 06:0 bar 30 size 000040000: 0f9000000
>>>>>>> (d98) pci dev 05:0 bar 30 size 000010000: 0f9040000
>>>>>>> (d98) pci dev 03:0 bar 10 size 000004000: 0f9050000
>>>>>>> (d98) pci dev 05:0 bar 18 size 000002000: 0f9054000
>>>>>>> (d98) pci dev 04:0 bar 14 size 000001000: 0f9056000
>>>>>>> (d98) pci dev 1d:7 bar 10 size 000001000: 0f9057000
>>>>>>> (d98) pci dev 02:0 bar 10 size 000000100: 00000c001
>>>>>>> (d98) pci dev 06:0 bar 10 size 000000100: 00000c101
>>>>>>> (d98) pci dev 06:0 bar 14 size 000000100: 0f9058000
>>>>>>> (d98) pci dev 04:0 bar 10 size 000000020: 00000c201
>>>>>>> (d98) pci dev 05:0 bar 1c size 000000020: 00000c221
>>>>>>> (d98) pci dev 1d:0 bar 20 size 000000020: 00000c241
>>>>>>> (d98) pci dev 1d:1 bar 20 size 000000020: 00000c261
>>>>>>> (d98) pci dev 1d:2 bar 20 size 000000020: 00000c281
>>>>>>> (d98) pci dev 01:1 bar 20 size 000000010: 00000c2a1
>>>>>>> (d98) Multiprocessor initialisation:
>>>>>>> (d98)  - CPU0 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8] ...
>>>>>>> done.
>>>>>>> (d98)  - CPU1 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8] ...
>>>>>>> done.
>>>>>>> (d98) Testing HVM environment:
>>>>>>> (d98)  - REP INSB across page boundaries ... passed
>>>>>>> (d98)  - GS base MSRs and SWAPGS ... passed
>>>>>>> (d98) Passed 2 of 2 tests
>>>>>>> (d98) Writing SMBIOS tables ...
>>>>>>> (d98) Loading SeaBIOS ...
>>>>>>> (d98) Creating MP tables ...
>>>>>>> (d98) Loading ACPI ...
>>>>>>> (d98) S3 disabled
>>>>>>> (d98) S4 disabled
>>>>>>> (d98) vm86 TSS at fc00a100
>>>>>>> (d98) BIOS map:
>>>>>>> (d98)  10000-100d3: Scratch space
>>>>>>> (d98)  c0000-fffff: Main BIOS
>>>>>>> (d98) E820 table:
>>>>>>> (d98)  [00]: 00000000:00000000 - 00000000:000a0000: RAM
>>>>>>> (d98)  HOLE: 00000000:000a0000 - 00000000:000c0000
>>>>>>> (d98)  [01]: 00000000:000c0000 - 00000000:00100000: RESERVED
>>>>>>> (d98)  [02]: 00000000:00100000 - 00000000:78000000: RAM
>>>>>>> (d98)  HOLE: 00000000:78000000 - 00000000:fc000000
>>>>>>> (d98)  [03]: 00000000:fc000000 - 00000001:00000000: RESERVED
>>>>>>> (d98) Invoking SeaBIOS ...
>>>>>>> (d98) SeaBIOS (version
>>>>>>> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
>>>>>>> (d98)
>>>>>>> (d98) Found Xen hypervisor signature at 40000100
>>>>>>> (d98) Running on QEMU (i440fx)
>>>>>>> (d98) xen: copy e820...
>>>>>>> (d98) Relocating init from 0x000df619 to 0x77fae600 (size 71995)
>>>>>>> (d98) CPU Mhz=2660
>>>>>>> (d98) Found 13 PCI devices (max PCI bus is 00)
>>>>>>> (d98) Allocated Xen hypercall page at 77fff000
>>>>>>> (d98) Detected Xen v4.5-unstable
>>>>>>> (d98) xen: copy BIOS tables...
>>>>>>> (d98) Copying SMBIOS entry point from 0x00010010 to 0x000f0f40
>>>>>>> (d98) Copying MPTABLE from 0xfc001170/fc001180 to 0x000f0e40
>>>>>>> (d98) Copying PIR from 0x00010030 to 0x000f0dc0
>>>>>>> (d98) Copying ACPI RSDP from 0x000100b0 to 0x000f0d90
>>>>>>> (d98) Using pmtimer, ioport 0xb008
>>>>>>> (d98) Scan for VGA option rom
>>>>>>> (d98) Running option rom at c000:0003
>>>>>>> (XEN) stdvga.c:147:d98v0 entering stdvga and caching modes
>>>>>>> (d98) pmm call arg1=0
>>>>>>> (d98) Turning on vga text mode console
>>>>>>> (d98) SeaBIOS (version
>>>>>>> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
>>>>>>> (d98) Machine UUID f4cdeb74-0db1-4748-948d-42579a494120
>>>>>>> (d98) EHCI init on dev 00:1d.7 (regs=0xf9057020)
>>>>>>> (d98) Found 0 lpt ports
>>>>>>> (d98) Found 0 serial ports
>>>>>>> (d98) ATA controller 1 at 1f0/3f4/0 (irq 14 dev 9)
>>>>>>> (d98) ATA controller 2 at 170/374/0 (irq 15 dev 9)
>>>>>>> (d98) ata0-0: QEMU HARDDISK ATA-7 Hard-Disk (40720 MiBytes)
>>>>>>> (d98) Searching bootorder for: /pci@i0cf8/*@1,1/drive@0/disk@0
>>>>>>> (d98) DVD/CD [ata0-1: QEMU DVD-ROM ATAPI-4 DVD/CD]
>>>>>>> (d98) Searching bootorder for: /pci@i0cf8/*@1,1/drive@0/disk@1
>>>>>>> (d98) UHCI init on dev 00:1d.0 (io=c240)
>>>>>>> (d98) UHCI init on dev 00:1d.1 (io=c260)
>>>>>>> (d98) UHCI init on dev 00:1d.2 (io=c280)
>>>>>>> (d98) PS2 keyboard initialized
>>>>>>> (d98) All threads complete.
>>>>>>> (d98) Scan for option roms
>>>>>>> (d98) Running option rom at c980:0003
>>>>>>> (d98) pmm call arg1=1
>>>>>>> (d98) pmm call arg1=0
>>>>>>> (d98) pmm call arg1=1
>>>>>>> (d98) pmm call arg1=0
>>>>>>> (d98) Searching bootorder for: /pci@i0cf8/*@6
>>>>>>> (d98)
>>>>>>> (d98) Press F12 for boot menu.
>>>>>>> (d98)
>>>>>>> (d98) Searching bootorder for: HALT
>>>>>>> (d98) drive 0x000f0d40: PCHS=16383/16/63 translation=lba
>>>>>>> LCHS=1024/255/63 s=83394560
>>>>>>> (d98) Space available for UMB: ca800-ee800, f0000-f0ce0
>>>>>>> (d98) Returned 258048 bytes of ZoneHigh
>>>>>>> (d98) e820 map has 6 items:
>>>>>>> (d98)   0: 0000000000000000 - 000000000009fc00 = 1 RAM
>>>>>>> (d98)   1: 000000000009fc00 - 00000000000a0000 = 2 RESERVED
>>>>>>> (d98)   2: 00000000000f0000 - 0000000000100000 = 2 RESERVED
>>>>>>> (d98)   3: 0000000000100000 - 0000000077fff000 = 1 RAM
>>>>>>> (d98)   4: 0000000077fff000 - 0000000078000000 = 2 RESERVED
>>>>>>> (d98)   5: 00000000fc000000 - 0000000100000000 = 2 RESERVED
>>>>>>> (d98) enter handle_19:
>>>>>>> (d98)   NULL
>>>>>>> (d98) Booting from Hard Disk...
>>>>>>> (d98) Booting from 0000:7c00
>>>>>>> (XEN) d98: VIRIDIAN GUEST_OS_ID: vendor: 1 os: 4 major: 6 minor: 1
>> sp:
>>>>>>> 1 build: 1db1
>>>>>>> (XEN) d98: VIRIDIAN HYPERCALL: enabled: 1 pfn: 3ffff
>>>>>>> (XEN) d98v0: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffe
>>>>>>> (XEN) d98v1: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffd
>>>>>>> (XEN) irq.c:270: Dom98 PCI link 0 changed 5 -> 0
>>>>>>> (XEN) irq.c:270: Dom98 PCI link 1 changed 10 -> 0
>>>>>>> (XEN) irq.c:270: Dom98 PCI link 2 changed 11 -> 0
>>>>>>> (XEN) irq.c:270: Dom98 PCI link 3 changed 5 -> 0
>>>>>>> (XEN) irq.c:380: Dom98 callback via changed to GSI 24
>>>>>>> (d98) XEN|BUGCHECK: ====>
>>>>>>> (d98) XEN|BUGCHECK: 0000007A: FFFFF6FC000171C8
>> FFFFFFFFC0000185
>>>>>>> 000000001BD6A860 FFFF
>>>>>>> (d98) F80002E39000
>>>>>>> (d98) XEN|BUGCHECK: CONTEXT (FFFFF8800310E530):
>>>>>>> (d98) XEN|BUGCHECK: - GS = 002B
>>>>>>> (d98) XEN|BUGCHECK: - FS = 0053
>>>>>>> (d98) XEN|BUGCHECK: - ES = 002B
>>>>>>> (d98) XEN|BUGCHECK: - DS = 002B
>>>>>>> (d98) XEN|BUGCHECK: - SS = 0018
>>>>>>> (d98) XEN|BUGCHECK: - CS = 0010
>>>>>>> (d98) XEN|BUGCHECK: - EFLAGS = 00000086
>>>>>>> (d98) XEN|BUGCHECK: - RDI = 00000000000171C8
>>>>>>> (d98) XEN|BUGCHECK: - RSI = 00000000C0000185
>>>>>>> (d98) XEN|BUGCHECK: - RBX = 00000000038AC8F8
>>>>>>> (d98) XEN|BUGCHECK: - RDX = 0000000000000000
>>>>>>> (d98) XEN|BUGCHECK: - RCX = 000000000310E530
>>>>>>> (d98) XEN|BUGCHECK: - RAX = 000000002ECF4722
>>>>>>> (d98) XEN|BUGCHECK: - RBP = 000000001BD6A860
>>>>>>> (d98) XEN|BUGCHECK: - RIP = 00000000038A2A43
>>>>>>> (d98) XEN|BUGCHECK: - RSP = 000000000310E510
>>>>>>> (d98) XEN|BUGCHECK: - R8 = 0000000000000000
>>>>>>> (d98) XEN|BUGCHECK: - R9 = 0000000000000000
>>>>>>> (d98) XEN|BUGCHECK: - R10 = 0000000000000000
>>>>>>> (d98) XEN|BUGCHECK: - R11 = 0000000000000000
>>>>>>> (d98) XEN|BUGCHECK: - R12 = 000000000000007A
>>>>>>> (d98) XEN|BUGCHECK: - R13 = 0000000000000001
>>>>>>> (d98) XEN|BUGCHECK: - R14 = 0000000002E39000
>>>>>>> (d98) XEN|BUGCHECK: - R15 = 0000000002CBAC40
>>>>>>> (d98) XEN|BUGCHECK: STACK:
>>>>>>> (d98) XEN|BUGCHECK: 000000000310EA20: (0000000000000003
>>>>>>> 00000000038A50F0 00000000038A
>>>>>>> (d98) 4860 000000000000007A) xen.sys + 00000000000049AC
>>>>>>> (d98) XEN|BUGCHECK: 000000000310EA70: (00000000038AD0D0
>>>>>>> 0000000000000000 000000000000
>>>>>>> (d98) 0004 0000000002C83500) ntoskrnl.exe + 0000000000128585
>>>>>>> (d98) XEN|BUGCHECK: 000000000310EAA0: (00000000038AD0D0
>>>>>>> 0000000002C83500 000000000000
>>>>>>> (d98) 000F 0000000001780660) ntoskrnl.exe + 0000000000167C0D
>>>>>>> (d98) XEN|BUGCHECK: 000000000310F170: (0000000003816470
>>>>>>> 0000000002B4C8C1 000000000000
>>>>>>> (d98) 00FE 0000000000000000) ntoskrnl.exe + 0000000000075CC4
>>>>>>> (d98) XEN|BUGCHECK: 000000000310F1B0: (000000000000007A
>>>>>>> 00000000000171C8 00000000C000
>>>>>>> (d98) 0185 000000001BD6A860) ntoskrnl.exe + 00000000000E8752
>>>>>>> (d98) XEN|BUGCHECK: 000000000310F290: (00000000038163B0
>>>>>>> 000000000310F320 0000000002CB
>>>>>>> (d98) D540 00000000038163B0) ntoskrnl.exe + 000000000009C91F
>>>>>>> (d98) XEN|BUGCHECK: 000000000310F360: (0000000000000000
>>>>>>> 0000000000000008 00000000FFFF
>>>>>>> (d98) FFFF 00000000003500F0) ntoskrnl.exe + 00000000000831B9
>>>>>>> (d98) XEN|BUGCHECK: 000000000310F4C0: (0000000000000008
>>>>>>> 0000000002E39000 000000000000
>>>>>>> (d98) 0000 0000000000000000) ntoskrnl.exe + 0000000000073CEE
>>>>>>> (d98) XEN|BUGCHECK: 000000000310F658: (0000000002E5CFD5
>>>>>>> 0000000000000000 0000000003EB
>>>>>>> (d98) 8710 00000000FFFFFFFF) ntoskrnl.exe + 000000000042C000
>>>>>> If you need more tests/informations tell me and I'll post them.
>>>>>> Thanks for any reply and sorry for my bad english.
>>>>> Well, that tells me you had a 7A BSOD, which is a
>>>> KERNEL_DATA_INPAGE_ERROR. The error status (param 2) was C0000185
>> so
>>>> that's a STATUS_IO_DEVICE_ERROR. The documentation at
>>>> http://msdn.microsoft.com/en-
>>>> gb/library/windows/hardware/ff559211%28v=vs.85%29.aspx tells me that
>>>> this means:
>>>>> "improper termination or defective cabling on SCSI devices or that two
>>>> devices are trying to use the same IRQ."
>>>>> But you said you had xenvbd already installed so you'll be using a PV
>>>> storage path. Is there any indication of problems with your storage?
>>>>>      Paul
>>>> DomUs disk are all raw files in local dom0 disks, raid1 with "LSI Logic
>>>> / Symbios Logic SAS2008 PCI-Express Fusion-MPT SAS-2" dom0 partitions
>>>> are GTP and fs ext4.
>>>> Dom0 is wheezy with kernel is linux-image-3.16-0.bpo.2-amd64 version
>>>> 3.16.3-2~bpo70+1
>>>> No kern or syslog errors, only many of these warning that someone
>>>> replied me that should not be a problem:
>>>> Oct 15 10:45:13 mtorMN01OU kernel: [773197.117518] xen:balloon:
>>>> reserve_additional_memory: add_memory() failed: -17
>>>> DomU now see disk as xen pvdisk, on xenvif install probably still was
>>>> full emulated disk even if xenvbd was installed successful before xenvif
>>>> install (failed with BSOD)
>>>> The IRQ seems visible from xl dmesg output below, can you check them is
>>>> have something wrong or strange, I see some of them "duplicate" but I
>>>> not know if is correct.
>>>>
>>>> DomU xl cfg:
>>>>> name='office1_w7'
>>>>> builder="hvm"
>>>>> memory=2048
>>>>> vcpus=2
>>>>> acpi_s3=0
>>>>> acpi_s4=0
>>>>> vif=['bridge=xenbr0,mac=00:16:3e:41:ae:8b']
>>>>>
>> disk=['/mnt/vm/disks/office1_w7.disk1.xm,raw,hda,rw',',raw,hdb,ro,cdrom'
>>>> ]
>>>>> boot='c'
>>>>> device_model_version="qemu-xen"
>>>>> viridian=1
>>>>> vnc=0
>>>>> keymap="it"
>>>>> on_crash="destroy"
>>>>> vga="qxl"
>>>>> spice=1
>>>>> spicehost='0.0.0.0'
>>>>> spiceport=6001
>>>>> spicedisable_ticketing=0
>>>>> spicepasswd="password"
>>>>> spicevdagent=1
>>>>> spice_clipboard_sharing=0
>>>>> spiceusbredirection=4
>>>>> soundhw="hda"
>>>>> localtime=1
>>>> If you need more tests/informations tell me and I'll post them.
>>>>
>>> Do you have the qemu log (with xen platform logging enabled). This is
>> where the PV drivers log failures/warnings.
>>>     Paul
>>>
>>>
>> I retried enabling xen platform debug in qemu trace but no add lines in
>> log when I try to install xenvif and fails.
>> I attach anyway the log if can be useful.
> All I can see there is an apparently clean shutdown of domain 101; no sign of XENVIF and no sign of a BSOD.
>
>> I'll also try to restore the backup of this night of the domU when I had
>> the BSOD trying reproduce it with xen debug in qemu trace and different
>> windows memory dump options.
> Ok.
>
>    Paul
>
Reproduced it but now with xen platform trace enabled in qemu. (see 
attachment)
Dump of memory instead is not present also in this case (probably 
because disk is "failed").


--------------020906010403050709090208
Content-Type: text/plain; charset=windows-1252;
 name="qemu-dm-office1_w7.log"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
 filename="qemu-dm-office1_w7.log"

(/usr/sbin/xl:3221): Spice-Warning **: reds.c:1863:reds_handle_ticket: Invalid password
main_channel_link: add main channel client
main_channel_handle_parsed: agent start
main_channel_handle_parsed: net test: latency 5.634000 ms, bitrate 7937984496 bps (7570.251938 Mbps)
inputs_connect: inputs channel client create
red_dispatcher_set_cursor_peer: 
xen_platform_log xen platform: XEN|DllInitialize: XEN 8.0.0 (0) (13.10.2014)
xen_platform_log xen platform: XEN|SystemGetStartOptions:  TESTSIGNING  NOEXECUTE=OPTIN
xen_platform_log xen platform: XEN|SystemGetVersionInformation: KERNEL: 6.1 (BUILD 7601) PLATFORM WIN32_NT (x64)
xen_platform_log xen platform: XEN|SystemGetVersionInformation: SP: 1.0 ()
xen_platform_log xen platform: XEN|SystemGetVersionInformation: SUITES:
xen_platform_log xen platform: XEN|SystemGetVersionInformation: - TERMINAL
xen_platform_log xen platform: XEN|SystemGetVersionInformation: - SINGLEUSERTS
xen_platform_log xen platform: XEN|SystemGetVersionInformation: TYPE: WORKSTATION
xen_platform_log xen platform: XEN|SystemGetMemoryInformation: RANGE[0] 00000000.00001000 - 00000000.0009efff
xen_platform_log xen platform: XEN|SystemGetMemoryInformation: RANGE[1] 00000000.00100000 - 00000000.77ffefff
xen_platform_log xen platform: XEN|SystemCpuInformation: ====> (1)
xen_platform_log xen platform: XEN|SystemCpuInformation: Manufacturer: GenuineIntel
xen_platform_log xen platform: XEN|SystemCpuInformation: Local APIC ID: 02
xen_platform_log xen platform: XEN|SystemCpuInformation: <==== (1)
xen_platform_log xen platform: XEN|SystemCpuInformation: ====> (0)
xen_platform_log xen platform: XEN|SystemCpuInformation: Manufacturer: GenuineIntel
xen_platform_log xen platform: XEN|SystemCpuInformation: Local APIC ID: 00
xen_platform_log xen platform: XEN|SystemCpuInformation: <==== (0)
xen_platform_log xen platform: XEN|HypercallInitialize: XEN 4.5
xen_platform_log xen platform: XEN|HypercallInitialize: INTERFACE 0x00040300
xen_platform_log xen platform: XEN|HypercallInitialize: HypercallPfn[0]: 00000000000745EA
xen_platform_log xen platform: XENBUS|DriverEntry: XENBUS 8.0.0 (0) (13.10.2014)
xen_platform_log xen platform: XENBUS|FdoCreate: FFFFFA8001E91D40 (XS0001 XENBUS) [ACTIVE]
xen_platform_log xen platform: SHARED_INFO: MAP XENMAPSPACE_shared_info @ 00000000.f8000000
xen_platform_log xen platform: XENBUS|FdoScan: ====>
xen_platform_log xen platform: STORE: PAGE @ 00000000.feffc000
xen_platform_log xen platform: XENBUS|FdoSuspend: ====>
xen_platform_log xen platform: XENBUS|FdoBalloon: ====>
xen_platform_log xen platform: XENBUS|PdoCreate: FFFFFA8001E90990 (VBD 00000001)
xen_platform_log xen platform: XENBUS|PdoCreate: FFFFFA8001D7D5F0 (VIF 00000001)
xen_platform_log xen platform: XENBUS|PdoCreate: FFFFFA8001EB2990 (IFACE 00000001)
xen_platform_log xen platform: XENVBD|DriverEntry:8.0.0.0 (24/9/2014)
xen_platform_log xen platform: XENVBD|__DriverParseParameterKey:DriverParameters: 
xen_platform_log xen platform: XENVBD|DispatchPnp:DeviceObject 0xFFFFFA80024F8420 is not FDO (0x0000000000000000) or a PDO
xen_platform_log xen platform: XENVBD|DispatchPnp:DeviceObject 0xFFFFFA80024F8420 is not FDO (0x0000000000000000) or a PDO
xen_platform_log xen platform: XENVBD|DispatchPnp:DeviceObject 0xFFFFFA80024F8420 is not FDO (0x0000000000000000) or a PDO
xen_platform_log xen platform: XENVBD|DispatchPnp:DeviceObject 0xFFFFFA80024F8420 is not FDO (0x0000000000000000) or a PDO
xen_platform_log xen platform: XENVBD|DispatchPnp:DeviceObject 0xFFFFFA80024F8420 is not FDO (0x0000000000000000) or a PDO
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: BUS_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENVBD|DispatchPnp:DeviceObject 0xFFFFFA80024F8420 is not FDO (0x0000000000000000) or a PDO
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: BUS_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: Version = 0
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: Master = TRUE
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: ScatterGather = TRUE
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: DemandMode = FALSE
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: AutoInitialize = FALSE
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: Dma32BitAddresses = TRUE
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: IgnoreCount = FALSE
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: Dma64BitAddresses = TRUE
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: BusNumber = 00000000
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: DmaChannel = ffffffff
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: InterfaceType = Internal
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: DmaWidth = 8Bits
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: DmaSpeed = Compatible
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: MaximumLength = 000b0000
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: DmaPort = ffffffff
xen_platform_log xen platform: XENBUS|DmaGetAdapter: no interception
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: STORE_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: EVTCHN_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: GNTTAB_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: SUSPEND_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: DEBUG_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: EMULATED_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENVBD|__FdoSetDevicePowerState:POWER D3 to D0
xen_platform_log xen platform: XENVBD|__FdoD3ToD0:D3->D0
xen_platform_log xen platform: XENVBD|__FdoIsPdoUnplugged:Target[0] : (vbd/768) Emulated NOT_KNOWN (assumed PRESENT)
xen_platform_log xen platform: XENVBD|PdoCreate:Target[0] : Creating (Emulated)
xen_platform_log xen platform: XENVBD|PdoSetDevicePowerState:Target[0] : POWER D3 to D0
xen_platform_log xen platform: XENVBD|PdoD3ToD0:Target[0] : D3->D0 (Emulated)
xen_platform_log xen platform: XENVBD|PdoCreate:Target[0] : Created (Emulated)
xen_platform_log xen platform: XENVBD|FdoLogTargets:ScanThread ===>
xen_platform_log xen platform: XENVBD|FdoLogTargets:ScanThread : Target[0] = 0xFFFFFA80024B2C70 (present)
xen_platform_log xen platform: XENVBD|FdoLogTargets:ScanThread <===
xen_platform_log xen platform: XENVBD|FdoDispatchPnp:14:QUERY_PNP_DEVICE_STATE -> c00000bb
xen_platform_log xen platform: XENVBD|__ValidateSrbForPdo:Target[0] : Disk is Emulated (a0:SCSIOP_REPORT_LUNS)
xen_platform_log xen platform: XENVBD|__ValidateSrbForPdo:Target[0] : Disk is Emulated (12:SCSIOP_INQUIRY)
xen_platform_log xen platform: XENVIF|DriverEntry: XENVIF 8.0.0 (0) (24.09.2014)
xen_platform_log xen platform: XENFILT|DriverEntry: XENFILT 8.0.0 (0) (13.10.2014)
xen_platform_log xen platform: XENFILT|DriverSetActiveDeviceInstance: PCI\VEN_5853&DEV_0001&SUBSYS_00015853&REV_01/10
xen_platform_log xen platform: XENFILT|UnplugCheckForPVDisks: PRESENT
xen_platform_log xen platform: XENFILT|UnplugCheckForPVNics: NOT PRESENT
xen_platform_log xen platform: UNPLUG: PRE-AMBLE (DRIVERS NOT BLACKLISTED)
xen_platform_log xen platform: UNPLUG: DISKS
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VIF: BUS_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VIF: DEBUG_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VIF: SUSPEND_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VIF: EVTCHN_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VIF: STORE_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VIF: RANGE_SET_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VIF: CACHE_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VIF: GNTTAB_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENVIF|FdoCreate: FFFFFA8002756280 (XS0001 XENVIF)
xen_platform_log xen platform: XENFILT|DriverUnload: XENFILT 8.0.0 (0) (13.10.2014)
xen_platform_log xen platform: XENVIF|__PdoSetPermanentAddress: 0 00:16:3E:41:AE:8B
xen_platform_log xen platform: XENVIF|__PdoSetContainerID: 0 {9999882d-5ecc-503e-924b-b4b937e3da35}
xen_platform_log xen platform: XENVIF|PdoCreate: FFFFFA8001EBA1B0 (0 00000001)
xen_platform_log xen platform: XENVIF|LinkGetRoutineAddress: netio.sys:NotifyUnicastIpAddressChange (00F9) @ FFFFF880015B6850
xen_platform_log xen platform: XENVIF|LinkGetRoutineAddress: netio.sys:GetUnicastIpAddressTable (0044) @ FFFFF880015B6900
xen_platform_log xen platform: XENVIF|LinkGetRoutineAddress: netio.sys:FreeMibTable (0022) @ FFFFF8800159EFD0
xen_platform_log xen platform: XENVIF|LinkGetRoutineAddress: netio.sys:CancelMibChangeNotify2 (0000) @ FFFFF880015ABD30
xen_platform_log xen platform: XEN|DEBUG: ====> (xenbus.sys + 0000000000011990)
xen_platform_log xen platform: XENBUS|SUSPEND: Count = 0
xen_platform_log xen platform: XENBUS|SUSPEND: EARLY: xenbus.sys + 00000000000072F4 (FFFFFA8001EE7000)
xen_platform_log xen platform: XENBUS|SUSPEND: EARLY: xenbus.sys + 000000000000EAB0 (FFFFFA8001BFE340)
xen_platform_log xen platform: XENBUS|SUSPEND: EARLY: xenbus.sys + 000000000001115C (FFFFFA8001EE5000)
xen_platform_log xen platform: XENBUS|SUSPEND: EARLY: xenbus.sys + 000000000000C7BC (FFFFFA80023535B0)
xen_platform_log xen platform: XENBUS|SUSPEND: LATE: xenbus.sys + 000000000001119C (FFFFFA8001EE5000)
xen_platform_log xen platform: XENBUS|SUSPEND: LATE: xenbus.sys + 000000000000B62C (FFFFFA800189DAE0)
xen_platform_log xen platform: XENBUS|SUSPEND: LATE: xenbus.sys + 000000000000DF60 (FFFFFA8001E53190)
xen_platform_log xen platform: XENBUS|SUSPEND: LATE: xenvbd.sys + 0000000000008C4C (FFFFFA8001B95158)
xen_platform_log xen platform: XENBUS|SUSPEND: LATE: xenvbd.sys + 000000000000F500 (FFFFFA8002D9E870)
xen_platform_log xen platform: XENBUS|SUSPEND: LATE: xenbus.sys + 000000000000DF60 (FFFFFA8001BAC770)
xen_platform_log xen platform: XENBUS|SUSPEND: LATE: xenvif.sys + 0000000000007738 (FFFFFA8002264B80)
xen_platform_log xen platform: XENBUS|SUSPEND: LATE: xenvif.sys + 000000000000BE50 (FFFFFA800312B010)
xen_platform_log xen platform: XEN|DEBUG: <==== (xenbus.sys + 0000000000011990)
xen_platform_log xen platform: XEN|DEBUG: ====> (xenbus.sys + 0000000000012AD4)
xen_platform_log xen platform: XENBUS|RANGE_SET: RANGE SETS:
xen_platform_log xen platform: XENBUS|RANGE_SET:  - io_space:
xen_platform_log xen platform: XENBUS|RANGE_SET:    {f8021000 - f8ffffff}*
xen_platform_log xen platform: XENBUS|RANGE_SET:  - balloon:
xen_platform_log xen platform: XENBUS|RANGE_SET:    EMPTY
xen_platform_log xen platform: XENBUS|RANGE_SET:  - gnttab:
xen_platform_log xen platform: XENBUS|RANGE_SET:    EMPTY
xen_platform_log xen platform: XENBUS|RANGE_SET:  - device_vif_0_transmitter_req_id:
xen_platform_log xen platform: XENBUS|RANGE_SET:    {1 - 3ff}*
xen_platform_log xen platform: XEN|DEBUG: <==== (xenbus.sys + 0000000000012AD4)
xen_platform_log xen platform: XEN|DEBUG: ====> (xenbus.sys + 0000000000006F48)
xen_platform_log xen platform: XENBUS|EVTCHN: EVENT CHANNELS:
xen_platform_log xen platform: XENBUS|EVTCHN: - (0001) BY xenbus.sys + 0000000000010690 [TRUE]
xen_platform_log xen platform: XENBUS|EVTCHN: FIXED: Mask = FALSE
xen_platform_log xen platform: XENBUS|EVTCHN: - (0006) BY xenbus.sys + 00000000000088A8 [TRUE]
xen_platform_log xen platform: XENBUS|EVTCHN: VIRQ: Index = 1
xen_platform_log xen platform: XEN|DEBUG: <==== (xenbus.sys + 0000000000006F48)
xen_platform_log xen platform: XEN|DEBUG: ====> (xenbus.sys + 000000000000E7EC)
xen_platform_log xen platform: XENBUS|SHARED_INFO: Address = 00000000.f8000000
xen_platform_log xen platform: XEN|DEBUG: <==== (xenbus.sys + 000000000000E7EC)
xen_platform_log xen platform: XEN|DEBUG: ====> (xenbus.sys + 00000000000103B8)
xen_platform_log xen platform: XENBUS|STORE: Address = 00000000.feffc000
xen_platform_log xen platform: XENBUS|STORE: WATCHES:
xen_platform_log xen platform: XENBUS|STORE: - (D098) ON device BY xenbus.sys + 000000000000890D [ACTIVE]
xen_platform_log xen platform: XENBUS|STORE: - (D099) ON control/shutdown BY xenbus.sys + 0000000000008949 [ACTIVE]
xen_platform_log xen platform: XENBUS|STORE: - (D09A) ON memory/target BY xenbus.sys + 00000000000089BC [ACTIVE]
xen_platform_log xen platform: XENBUS|STORE: - (D09B) ON device/vbd BY xenvbd.sys + 000000000000964A [ACTIVE]
xen_platform_log xen platform: XENBUS|STORE: - (D09C) ON device/vif BY xenvif.sys + 00000000000058B2 [ACTIVE]
xen_platform_log xen platform: XEN|DEBUG: <==== (xenbus.sys + 00000000000103B8)
xen_platform_log xen platform: XEN|DEBUG: ====> (xenbus.sys + 0000000000014428)
xen_platform_log xen platform: XENBUS|CACHE: CACHES:
xen_platform_log xen platform: XENBUS|CACHE: - device_vif_0_receiver_packet: Count = 0 (Reservation = 0)
xen_platform_log xen platform: XENBUS|CACHE: - device_vif_0_receiver_fragment: Count = 0 (Reservation = 0)
xen_platform_log xen platform: XENBUS|CACHE: - device_vif_0_transmitter_buffer: Count = 0 (Reservation = 0)
xen_platform_log xen platform: XENBUS|CACHE: - device_vif_0_transmitter_fragment: Count = 0 (Reservation = 0)
xen_platform_log xen platform: XEN|DEBUG: <==== (xenbus.sys + 0000000000014428)
xen_platform_log xen platform: XEN|DEBUG: ====> (xenbus.sys + 000000000000C454)
xen_platform_log xen platform: XENBUS|GNTTAB: Address = 00000000.f8001000
xen_platform_log xen platform: XENBUS|GNTTAB: FrameIndex = -1
xen_platform_log xen platform: XEN|DEBUG: <==== (xenbus.sys + 000000000000C454)
xen_platform_log xen platform: XEN|DEBUG: ====> (xenvbd.sys + 00000000000064B4)
xen_platform_log xen platform: XENVBD: FDO: Version: 8.0.0.0 (24/9/2014)
xen_platform_log xen platform: XENVBD: FDO: Fdo: 0xFFFFFA8001B95158 (ref-count 1) CRASHING
xen_platform_log xen platform: XENVBD: FDO: DevObj 0xFFFFFA80024F8420 LowerDevObj 0xFFFFFA8001E90990 PhysDevObj 0xFFFFFA8001E90990
xen_platform_log xen platform: XENVBD: FDO: DevicePowerState: D0
xen_platform_log xen platform: XENVBD: FDO: Enumerator      : vbd (0x0000000000000000)
xen_platform_log xen platform: XENVBD: FDO: Srbs            : 0 / 1 (1526 Total)
xen_platform_log xen platform: XENVBD: BUFFER: Allocated/Freed : 32 / 0
xen_platform_log xen platform: XENVBD: BUFFER: Free (Cur/Max)  : 32 / 32
xen_platform_log xen platform: XENVBD: BUFFER: Used (Cur/Max)  : 0 / 0
xen_platform_log xen platform: XENVBD: BUFFER: Reaped          : 0 / 0
xen_platform_log xen platform: XENVBD: FDO: ====> Target[0  ]    : 0xFFFFFA80024B2C70
xen_platform_log xen platform: XENVBD: PDO: Fdo 0xFFFFFA8001B95158 DeviceObject 0x0000000000000000
xen_platform_log xen platform: XENVBD: PDO: ReferenceCount 1
xen_platform_log xen platform: XENVBD: PDO: DevicePnpState Present (Invalid)
xen_platform_log xen platform: XENVBD: PDO: DevicePowerState D0
xen_platform_log xen platform: XENVBD: PDO: EMULATED Not Missing
xen_platform_log xen platform: XENVBD: PDO: BLKIF_OPs: READ=0 WRITE=0
xen_platform_log xen platform: XENVBD: PDO: BLKIF_OPs: INDIRECT_READ=0 INDIRECT_WRITE=0
xen_platform_log xen platform: XENVBD: PDO: BLKIF_OPs: BARRIER=0 DISCARD=0
xen_platform_log xen platform: XENVBD: PDO: Failed: Maps=0 Bounces=0 Grants=0
xen_platform_log xen platform: XENVBD: PDO: Segments Granted=0 Bounced=0
xen_platform_log xen platform: XENVBD: LOOKASIDE: REQUESTs: 0 / 0 (0 failed)
xen_platform_log xen platform: XENVBD: LOOKASIDE: SEGMENTs: 0 / 0 (0 failed)
xen_platform_log xen platform: XENVBD: LOOKASIDE: INDIRECTs: 0 / 0 (0 failed)
xen_platform_log xen platform: XENVBD: QUEUE: Fresh     : 0 / 0
xen_platform_log xen platform: XENVBD: QUEUE: Prepared  : 0 / 0
xen_platform_log xen platform: XENVBD: QUEUE: Submitted : 0 / 0
xen_platform_log xen platform: XENVBD: QUEUE: Shutdown  : 0 / 0
xen_platform_log xen platform: XENVBD: FRONTEND: TargetId=0 DeviceId=768 BackendId=32756
xen_platform_log xen platform: XENVBD: FRONTEND: FrontendPath device/vbd/768
xen_platform_log xen platform: XENVBD: FRONTEND: BackendPath  NULL
xen_platform_log xen platform: XENVBD: FRONTEND: TargetPath   data/scsi/target/0
xen_platform_log xen platform: XENVBD: FRONTEND: State   : INITIALIZED
xen_platform_log xen platform: XENVBD: FRONTEND: Caps    : 
xen_platform_log xen platform: XENVBD: FRONTEND: Features: 
xen_platform_log xen platform: XENVBD: FRONTEND: DiskInfo: 0 @ 512 (0) 00000000
xen_platform_log xen platform: XENVBD: GRANTER: DISCONNECTED DISABLED
xen_platform_log xen platform: XENVBD: GRANTER: 0 / 0
xen_platform_log xen platform: XENVBD: BLOCKRING: Requests  : 0 / 0 / 0
xen_platform_log xen platform: XENVBD: BLOCKRING: SharedRing : 0x0000000000000000
xen_platform_log xen platform: XENVBD: BLOCKRING: FrontRing  : 0 / 0 (0)
xen_platform_log xen platform: XENVBD: BLOCKRING: Order      : 0
xen_platform_log xen platform: XENVBD: BLOCKRING: Grants[0 ] : 0x0000000000000000 (0)
xen_platform_log xen platform: XENVBD: NOTIFIER: Int / DPC : 0 / 0
xen_platform_log xen platform: XENVBD: FDO: <==== Target[0  ]    : 0xFFFFFA80024B2C70
xen_platform_log xen platform: XEN|DEBUG: <==== (xenvbd.sys + 00000000000064B4)
xen_platform_log xen platform: XEN|BUGCHECK: ====>
xen_platform_log xen platform: XEN|BUGCHECK: 0000007A: FFFFF6FC40024810 FFFFFFFFC0000185 0000000019999BE0 FFFFF88004902000
xen_platform_log xen platform: XEN|BUGCHECK: CONTEXT (FFFFF88003177BD0):
xen_platform_log xen platform: XEN|BUGCHECK: - GS = 002B
xen_platform_log xen platform: XEN|BUGCHECK: - FS = 0053
xen_platform_log xen platform: XEN|BUGCHECK: - ES = 002B
xen_platform_log xen platform: XEN|BUGCHECK: - DS = 002B
xen_platform_log xen platform: XEN|BUGCHECK: - SS = 0018
xen_platform_log xen platform: XEN|BUGCHECK: - CS = 0010
xen_platform_log xen platform: XEN|BUGCHECK: - EFLAGS = 00000086
xen_platform_log xen platform: XEN|BUGCHECK: - RDI = 0000000040024810
xen_platform_log xen platform: XEN|BUGCHECK: - RSI = 00000000C0000185
xen_platform_log xen platform: XEN|BUGCHECK: - RBX = 00000000047868F8
xen_platform_log xen platform: XEN|BUGCHECK: - RDX = 0000000000000000
xen_platform_log xen platform: XEN|BUGCHECK: - RCX = 0000000003177BD0
xen_platform_log xen platform: XEN|BUGCHECK: - RAX = 000000002EC8D982
xen_platform_log xen platform: XEN|BUGCHECK: - RBP = 0000000019999BE0
xen_platform_log xen platform: XEN|BUGCHECK: - RIP = 000000000477CA43
xen_platform_log xen platform: XEN|BUGCHECK: - RSP = 0000000003177BB0
xen_platform_log xen platform: XEN|BUGCHECK: - R8 = 0000000000000000
xen_platform_log xen platform: XEN|BUGCHECK: - R9 = 0000000000000000
xen_platform_log xen platform: XEN|BUGCHECK: - R10 = 0000000000000000
xen_platform_log xen platform: XEN|BUGCHECK: - R11 = 0000000000000000
xen_platform_log xen platform: XEN|BUGCHECK: - R12 = 000000000000007A
xen_platform_log xen platform: XEN|BUGCHECK: - R13 = 0000000000000001
xen_platform_log xen platform: XEN|BUGCHECK: - R14 = 0000000004902000
xen_platform_log xen platform: XEN|BUGCHECK: - R15 = 0000000002D10C40
xen_platform_log xen platform: XEN|BUGCHECK: STACK:
xen_platform_log xen platform: XEN|BUGCHECK: 00000000031780C0: (0000000000000003 000000000477F0F0 000000000477E860 000000000000007A) xen.sys + 00000000000049AC
xen_platform_log xen platform: XEN|BUGCHECK: 0000000003178110: (00000000047870D0 0000000000000000 0000000000000004 0000000002CD9500) ntoskrnl.exe + 0000000000128585
xen_platform_log xen platform: XEN|BUGCHECK: 0000000003178140: (00000000047870D0 0000000002CD9500 000000000000000F 000000000176C5E0) ntoskrnl.exe + 0000000000167C0D
xen_platform_log xen platform: XEN|BUGCHECK: 0000000003178810: (0000000002E8FF50 0000000002BA28C1 00000000000000FE 0000000000000000) ntoskrnl.exe + 0000000000075CC4
xen_platform_log xen platform: XEN|BUGCHECK: 0000000003178850: (000000000000007A 0000000040024810 00000000C0000185 0000000019999BE0) ntoskrnl.exe + 00000000000E8752
xen_platform_log xen platform: XEN|BUGCHECK: 0000000003178930: (0000000002E8FE90 00000000031789C0 0000000002D13540 0000000002E8FE90) ntoskrnl.exe + 000000000009C91F
xen_platform_log xen platform: XEN|BUGCHECK: 0000000003178A00: (0000000000000000 0000000000000001 00000000FFFFFFFF 0000000002AF7843) ntoskrnl.exe + 00000000000831B9
xen_platform_log xen platform: XEN|BUGCHECK: 0000000003178B60: (0000000000000001 0000000004902000 0000000001AB3000 00000000400247E8) ntoskrnl.exe + 00000000000A96E0
xen_platform_log xen platform: XEN|BUGCHECK: 0000000003178C70: (0000000001A41B50 0000000000000001 0000000000000000 0000000000000000) ntoskrnl.exe + 00000000000A98D0
xen_platform_log xen platform: XEN|BUGCHECK: 0000000003178CD0: (0000000000000000 0000000000000001 0000000001727890 0000000000000080) ntoskrnl.exe + 00000000000A985F
xen_platform_log xen platform: XEN|BUGCHECK: 0000000003178D00: (0000000000000000 0000000000000000 0000000000000000 0000000001727800) ntoskrnl.exe + 00000000000A95A4
xen_platform_log xen platform: XEN|BUGCHECK: 0000000003178D40: (00000000C2C2C2C2 00000000C2C2C2C2 00000000C2C2C2C2 00000000C2C2C2C2) ntoskrnl.exe + 000000000031173A
xen_platform_log xen platform: XEN|BUGCHECK: 0000000003178D80: (0000000002E40180 000000000176C5E0 0000000002E4AF40 00000000C2C2C2C2) ntoskrnl.exe + 00000000000668E6
xen_platform_log xen platform: XEN|BUGCHECK: 0000000003178DB0: (0000000003179000 0000000003173000 00000000031785A0 0000000000000000) 0000000000000000
xen_platform_log xen platform: XEN|BUGCHECK: <====
Issued domain 104 reboot
qemu: terminating on signal 1 from pid 482
red_channel_client_disconnect_dummy: rcc=0x7f809c1a26e0 (channel=0x7f809bee5840 type=5 id=0)
snd_channel_put: SndChannel=0x7f809c11b780 freed
red_channel_client_disconnect_dummy: rcc=0x7f809c133350 (channel=0x7f809bed4fa0 type=6 id=0)
snd_channel_put: SndChannel=0x7f809c2c1340 freed
red_channel_client_disconnect: rcc=0x7f80800297a0 (channel=0x7f809bf68380 type=2 id=0)
red_channel_client_disconnect: rcc=0x7f8080086620 (channel=0x7f809beb4c40 type=4 id=0)

--------------020906010403050709090208
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
--------------020906010403050709090208--


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 16 14:54:47 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 16 Oct 2014 14:54:47 +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 1XemRy-0003tv-VR; Thu, 16 Oct 2014 14:54:46 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <Paul.Durrant@citrix.com>) id 1XemRx-0003tq-PH
	for win-pv-devel@lists.xenproject.org; Thu, 16 Oct 2014 14:54:45 +0000
Received: from [85.158.139.211:63634] by server-7.bemta-5.messagelabs.com id
	B6/AE-30869-53CDF345; Thu, 16 Oct 2014 14:54:45 +0000
X-Env-Sender: Paul.Durrant@citrix.com
X-Msg-Ref: server-8.tower-206.messagelabs.com!1413471283!11616787!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: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 31642 invoked from network); 16 Oct 2014 14:54:43 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-8.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	16 Oct 2014 14:54:43 -0000
X-IronPort-AV: E=Sophos;i="5.04,732,1406592000"; d="scan'208";a="26020625"
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: Blue screen on xenvif install
Thread-Index: AQHP6R88TE2eCcEtSU6laq0K5grY5pwybJlQ///obQCAACb2gP//8KIAgAAjAsCAAAnUgIAAIsDw///v2YAABHezEA==
Date: Thu, 16 Oct 2014 14:54:43 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD0111058E6@AMSPEX01CL01.citrite.net>
References: <543F887B.5030500@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111050FF@AMSPEX01CL01.citrite.net>
	<543F912C.8000504@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD01110526F@AMSPEX01CL01.citrite.net>
	<543FA4F6.5090804@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111053EA@AMSPEX01CL01.citrite.net>
	<543FCA93.2010805@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111057A2@AMSPEX01CL01.citrite.net>
	<543FDA2D.2090900@m2r.biz>
In-Reply-To: <543FDA2D.2090900@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] Blue screen on xenvif install
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: 16 October 2014 15:46
> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> Subject: Re: Blue screen on xenvif install
> 
> Il 16/10/2014 15:45, Paul Durrant ha scritto:
> >> -----Original Message-----
> >> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >> Sent: 16 October 2014 14:40
> >> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >> Subject: Re: Blue screen on xenvif install
> >>
> >> Il 16/10/2014 13:04, Paul Durrant ha scritto:
> >>>> -----Original Message-----
> >>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >>>> Sent: 16 October 2014 11:59
> >>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >>>> Subject: Re: Blue screen on xenvif install
> >>>>
> >>>> Il 16/10/2014 12:00, Paul Durrant ha scritto:
> >>>>>> -----Original Message-----
> >>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >>>>>> Sent: 16 October 2014 10:35
> >>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >>>>>> Subject: Re: Blue screen on xenvif install
> >>>>>>
> >>>>>> Il 16/10/2014 10:59, Paul Durrant ha scritto:
> >>>>>>>> -----Original Message-----
> >>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >>>>>>>> Sent: 16 October 2014 09:58
> >>>>>>>> To: win-pv-devel@lists.xenproject.org
> >>>>>>>> Cc: Paul Durrant
> >>>>>>>> Subject: Blue screen on xenvif install
> >>>>>>>>
> >>>>>>>> Today I tried to install new winpv driver to other 3 windows 7 pro
> 64
> >>>>>>>> bit domUs.
> >>>>>>>> Days ago I installed them successful on one windows 7 pro 64 bit
> and
> >>>> one
> >>>>>>>> windows 8.1 enterprise 64 bit.
> >>>>>>>> On first domUs I tried to install them today I installed xenbus and
> >>>>>>>> xenvbd successful but on xenvif install windows crashed with blue
> >>>>>>>> screen, if I saw it correctly was an kernel in-page error or
> something
> >>>>>>>> similar.
> >>>>>>>> After reboot I retried to install xenvif but now always fails.
> >>>>>>>>
> >>>>>>> Sounds odd. Do you have a MEMORY.DMP?
> >>>>>>>
> >>>>>>>       Paul
> >>>>>> Windows is setted to write dump of kernel memory on system error
> >> but
> >>>>>> %systemroot%\memory.dmp is missed :(
> >>>>>> I also checked the windows events log but I found only kernel-
> power
> >> as
> >>>>>> critical that seems not contains useful data.
> >>>>>>
> >>>>>> I found probably useful data in xl dmesg (I copied all below from
> domU
> >>>>>> start to xen bug):
> >>>>>>> (d98) HVM Loader
> >>>>>>> (d98) Detected Xen v4.5-unstable
> >>>>>>> (d98) Xenbus rings @0xfeffc000, event channel 1
> >>>>>>> (d98) System requested SeaBIOS
> >>>>>>> (d98) CPU speed is 2660 MHz
> >>>>>>> (d98) Relocating guest memory for lowmem MMIO space disabled
> >>>>>>> (XEN) irq.c:270: Dom98 PCI link 0 changed 0 -> 5
> >>>>>>> (d98) PCI-ISA link 0 routed to IRQ5
> >>>>>>> (XEN) irq.c:270: Dom98 PCI link 1 changed 0 -> 10
> >>>>>>> (d98) PCI-ISA link 1 routed to IRQ10
> >>>>>>> (XEN) irq.c:270: Dom98 PCI link 2 changed 0 -> 11
> >>>>>>> (d98) PCI-ISA link 2 routed to IRQ11
> >>>>>>> (XEN) irq.c:270: Dom98 PCI link 3 changed 0 -> 5
> >>>>>>> (d98) PCI-ISA link 3 routed to IRQ5
> >>>>>>> (d98) pci dev 01:3 INTA->IRQ10
> >>>>>>> (d98) pci dev 02:0 INTA->IRQ11
> >>>>>>> (d98) pci dev 03:0 INTA->IRQ5
> >>>>>>> (d98) pci dev 04:0 INTA->IRQ5
> >>>>>>> (d98) pci dev 05:0 INTA->IRQ10
> >>>>>>> (d98) pci dev 06:0 INTA->IRQ11
> >>>>>>> (d98) pci dev 1d:0 INTA->IRQ10
> >>>>>>> (d98) pci dev 1d:1 INTB->IRQ11
> >>>>>>> (d98) pci dev 1d:2 INTC->IRQ5
> >>>>>>> (d98) pci dev 1d:7 INTD->IRQ5
> >>>>>>> (d98) No RAM in high memory; setting high_mem resource base to
> >>>>>> 100000000
> >>>>>>> (d98) pci dev 05:0 bar 10 size 004000000: 0f0000000
> >>>>>>> (d98) pci dev 05:0 bar 14 size 004000000: 0f4000000
> >>>>>>> (d98) pci dev 02:0 bar 14 size 001000000: 0f8000008
> >>>>>>> (d98) pci dev 06:0 bar 30 size 000040000: 0f9000000
> >>>>>>> (d98) pci dev 05:0 bar 30 size 000010000: 0f9040000
> >>>>>>> (d98) pci dev 03:0 bar 10 size 000004000: 0f9050000
> >>>>>>> (d98) pci dev 05:0 bar 18 size 000002000: 0f9054000
> >>>>>>> (d98) pci dev 04:0 bar 14 size 000001000: 0f9056000
> >>>>>>> (d98) pci dev 1d:7 bar 10 size 000001000: 0f9057000
> >>>>>>> (d98) pci dev 02:0 bar 10 size 000000100: 00000c001
> >>>>>>> (d98) pci dev 06:0 bar 10 size 000000100: 00000c101
> >>>>>>> (d98) pci dev 06:0 bar 14 size 000000100: 0f9058000
> >>>>>>> (d98) pci dev 04:0 bar 10 size 000000020: 00000c201
> >>>>>>> (d98) pci dev 05:0 bar 1c size 000000020: 00000c221
> >>>>>>> (d98) pci dev 1d:0 bar 20 size 000000020: 00000c241
> >>>>>>> (d98) pci dev 1d:1 bar 20 size 000000020: 00000c261
> >>>>>>> (d98) pci dev 1d:2 bar 20 size 000000020: 00000c281
> >>>>>>> (d98) pci dev 01:1 bar 20 size 000000010: 00000c2a1
> >>>>>>> (d98) Multiprocessor initialisation:
> >>>>>>> (d98)  - CPU0 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8] ...
> >>>>>>> done.
> >>>>>>> (d98)  - CPU1 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8] ...
> >>>>>>> done.
> >>>>>>> (d98) Testing HVM environment:
> >>>>>>> (d98)  - REP INSB across page boundaries ... passed
> >>>>>>> (d98)  - GS base MSRs and SWAPGS ... passed
> >>>>>>> (d98) Passed 2 of 2 tests
> >>>>>>> (d98) Writing SMBIOS tables ...
> >>>>>>> (d98) Loading SeaBIOS ...
> >>>>>>> (d98) Creating MP tables ...
> >>>>>>> (d98) Loading ACPI ...
> >>>>>>> (d98) S3 disabled
> >>>>>>> (d98) S4 disabled
> >>>>>>> (d98) vm86 TSS at fc00a100
> >>>>>>> (d98) BIOS map:
> >>>>>>> (d98)  10000-100d3: Scratch space
> >>>>>>> (d98)  c0000-fffff: Main BIOS
> >>>>>>> (d98) E820 table:
> >>>>>>> (d98)  [00]: 00000000:00000000 - 00000000:000a0000: RAM
> >>>>>>> (d98)  HOLE: 00000000:000a0000 - 00000000:000c0000
> >>>>>>> (d98)  [01]: 00000000:000c0000 - 00000000:00100000: RESERVED
> >>>>>>> (d98)  [02]: 00000000:00100000 - 00000000:78000000: RAM
> >>>>>>> (d98)  HOLE: 00000000:78000000 - 00000000:fc000000
> >>>>>>> (d98)  [03]: 00000000:fc000000 - 00000001:00000000: RESERVED
> >>>>>>> (d98) Invoking SeaBIOS ...
> >>>>>>> (d98) SeaBIOS (version
> >>>>>>> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
> >>>>>>> (d98)
> >>>>>>> (d98) Found Xen hypervisor signature at 40000100
> >>>>>>> (d98) Running on QEMU (i440fx)
> >>>>>>> (d98) xen: copy e820...
> >>>>>>> (d98) Relocating init from 0x000df619 to 0x77fae600 (size 71995)
> >>>>>>> (d98) CPU Mhz=2660
> >>>>>>> (d98) Found 13 PCI devices (max PCI bus is 00)
> >>>>>>> (d98) Allocated Xen hypercall page at 77fff000
> >>>>>>> (d98) Detected Xen v4.5-unstable
> >>>>>>> (d98) xen: copy BIOS tables...
> >>>>>>> (d98) Copying SMBIOS entry point from 0x00010010 to 0x000f0f40
> >>>>>>> (d98) Copying MPTABLE from 0xfc001170/fc001180 to 0x000f0e40
> >>>>>>> (d98) Copying PIR from 0x00010030 to 0x000f0dc0
> >>>>>>> (d98) Copying ACPI RSDP from 0x000100b0 to 0x000f0d90
> >>>>>>> (d98) Using pmtimer, ioport 0xb008
> >>>>>>> (d98) Scan for VGA option rom
> >>>>>>> (d98) Running option rom at c000:0003
> >>>>>>> (XEN) stdvga.c:147:d98v0 entering stdvga and caching modes
> >>>>>>> (d98) pmm call arg1=0
> >>>>>>> (d98) Turning on vga text mode console
> >>>>>>> (d98) SeaBIOS (version
> >>>>>>> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
> >>>>>>> (d98) Machine UUID f4cdeb74-0db1-4748-948d-42579a494120
> >>>>>>> (d98) EHCI init on dev 00:1d.7 (regs=0xf9057020)
> >>>>>>> (d98) Found 0 lpt ports
> >>>>>>> (d98) Found 0 serial ports
> >>>>>>> (d98) ATA controller 1 at 1f0/3f4/0 (irq 14 dev 9)
> >>>>>>> (d98) ATA controller 2 at 170/374/0 (irq 15 dev 9)
> >>>>>>> (d98) ata0-0: QEMU HARDDISK ATA-7 Hard-Disk (40720 MiBytes)
> >>>>>>> (d98) Searching bootorder for: /pci@i0cf8/*@1,1/drive@0/disk@0
> >>>>>>> (d98) DVD/CD [ata0-1: QEMU DVD-ROM ATAPI-4 DVD/CD]
> >>>>>>> (d98) Searching bootorder for: /pci@i0cf8/*@1,1/drive@0/disk@1
> >>>>>>> (d98) UHCI init on dev 00:1d.0 (io=c240)
> >>>>>>> (d98) UHCI init on dev 00:1d.1 (io=c260)
> >>>>>>> (d98) UHCI init on dev 00:1d.2 (io=c280)
> >>>>>>> (d98) PS2 keyboard initialized
> >>>>>>> (d98) All threads complete.
> >>>>>>> (d98) Scan for option roms
> >>>>>>> (d98) Running option rom at c980:0003
> >>>>>>> (d98) pmm call arg1=1
> >>>>>>> (d98) pmm call arg1=0
> >>>>>>> (d98) pmm call arg1=1
> >>>>>>> (d98) pmm call arg1=0
> >>>>>>> (d98) Searching bootorder for: /pci@i0cf8/*@6
> >>>>>>> (d98)
> >>>>>>> (d98) Press F12 for boot menu.
> >>>>>>> (d98)
> >>>>>>> (d98) Searching bootorder for: HALT
> >>>>>>> (d98) drive 0x000f0d40: PCHS=16383/16/63 translation=lba
> >>>>>>> LCHS=1024/255/63 s=83394560
> >>>>>>> (d98) Space available for UMB: ca800-ee800, f0000-f0ce0
> >>>>>>> (d98) Returned 258048 bytes of ZoneHigh
> >>>>>>> (d98) e820 map has 6 items:
> >>>>>>> (d98)   0: 0000000000000000 - 000000000009fc00 = 1 RAM
> >>>>>>> (d98)   1: 000000000009fc00 - 00000000000a0000 = 2 RESERVED
> >>>>>>> (d98)   2: 00000000000f0000 - 0000000000100000 = 2 RESERVED
> >>>>>>> (d98)   3: 0000000000100000 - 0000000077fff000 = 1 RAM
> >>>>>>> (d98)   4: 0000000077fff000 - 0000000078000000 = 2 RESERVED
> >>>>>>> (d98)   5: 00000000fc000000 - 0000000100000000 = 2 RESERVED
> >>>>>>> (d98) enter handle_19:
> >>>>>>> (d98)   NULL
> >>>>>>> (d98) Booting from Hard Disk...
> >>>>>>> (d98) Booting from 0000:7c00
> >>>>>>> (XEN) d98: VIRIDIAN GUEST_OS_ID: vendor: 1 os: 4 major: 6 minor:
> 1
> >> sp:
> >>>>>>> 1 build: 1db1
> >>>>>>> (XEN) d98: VIRIDIAN HYPERCALL: enabled: 1 pfn: 3ffff
> >>>>>>> (XEN) d98v0: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffe
> >>>>>>> (XEN) d98v1: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffd
> >>>>>>> (XEN) irq.c:270: Dom98 PCI link 0 changed 5 -> 0
> >>>>>>> (XEN) irq.c:270: Dom98 PCI link 1 changed 10 -> 0
> >>>>>>> (XEN) irq.c:270: Dom98 PCI link 2 changed 11 -> 0
> >>>>>>> (XEN) irq.c:270: Dom98 PCI link 3 changed 5 -> 0
> >>>>>>> (XEN) irq.c:380: Dom98 callback via changed to GSI 24
> >>>>>>> (d98) XEN|BUGCHECK: ====>
> >>>>>>> (d98) XEN|BUGCHECK: 0000007A: FFFFF6FC000171C8
> >> FFFFFFFFC0000185
> >>>>>>> 000000001BD6A860 FFFF
> >>>>>>> (d98) F80002E39000
> >>>>>>> (d98) XEN|BUGCHECK: CONTEXT (FFFFF8800310E530):
> >>>>>>> (d98) XEN|BUGCHECK: - GS = 002B
> >>>>>>> (d98) XEN|BUGCHECK: - FS = 0053
> >>>>>>> (d98) XEN|BUGCHECK: - ES = 002B
> >>>>>>> (d98) XEN|BUGCHECK: - DS = 002B
> >>>>>>> (d98) XEN|BUGCHECK: - SS = 0018
> >>>>>>> (d98) XEN|BUGCHECK: - CS = 0010
> >>>>>>> (d98) XEN|BUGCHECK: - EFLAGS = 00000086
> >>>>>>> (d98) XEN|BUGCHECK: - RDI = 00000000000171C8
> >>>>>>> (d98) XEN|BUGCHECK: - RSI = 00000000C0000185
> >>>>>>> (d98) XEN|BUGCHECK: - RBX = 00000000038AC8F8
> >>>>>>> (d98) XEN|BUGCHECK: - RDX = 0000000000000000
> >>>>>>> (d98) XEN|BUGCHECK: - RCX = 000000000310E530
> >>>>>>> (d98) XEN|BUGCHECK: - RAX = 000000002ECF4722
> >>>>>>> (d98) XEN|BUGCHECK: - RBP = 000000001BD6A860
> >>>>>>> (d98) XEN|BUGCHECK: - RIP = 00000000038A2A43
> >>>>>>> (d98) XEN|BUGCHECK: - RSP = 000000000310E510
> >>>>>>> (d98) XEN|BUGCHECK: - R8 = 0000000000000000
> >>>>>>> (d98) XEN|BUGCHECK: - R9 = 0000000000000000
> >>>>>>> (d98) XEN|BUGCHECK: - R10 = 0000000000000000
> >>>>>>> (d98) XEN|BUGCHECK: - R11 = 0000000000000000
> >>>>>>> (d98) XEN|BUGCHECK: - R12 = 000000000000007A
> >>>>>>> (d98) XEN|BUGCHECK: - R13 = 0000000000000001
> >>>>>>> (d98) XEN|BUGCHECK: - R14 = 0000000002E39000
> >>>>>>> (d98) XEN|BUGCHECK: - R15 = 0000000002CBAC40
> >>>>>>> (d98) XEN|BUGCHECK: STACK:
> >>>>>>> (d98) XEN|BUGCHECK: 000000000310EA20: (0000000000000003
> >>>>>>> 00000000038A50F0 00000000038A
> >>>>>>> (d98) 4860 000000000000007A) xen.sys + 00000000000049AC
> >>>>>>> (d98) XEN|BUGCHECK: 000000000310EA70: (00000000038AD0D0
> >>>>>>> 0000000000000000 000000000000
> >>>>>>> (d98) 0004 0000000002C83500) ntoskrnl.exe + 0000000000128585
> >>>>>>> (d98) XEN|BUGCHECK: 000000000310EAA0: (00000000038AD0D0
> >>>>>>> 0000000002C83500 000000000000
> >>>>>>> (d98) 000F 0000000001780660) ntoskrnl.exe + 0000000000167C0D
> >>>>>>> (d98) XEN|BUGCHECK: 000000000310F170: (0000000003816470
> >>>>>>> 0000000002B4C8C1 000000000000
> >>>>>>> (d98) 00FE 0000000000000000) ntoskrnl.exe + 0000000000075CC4
> >>>>>>> (d98) XEN|BUGCHECK: 000000000310F1B0: (000000000000007A
> >>>>>>> 00000000000171C8 00000000C000
> >>>>>>> (d98) 0185 000000001BD6A860) ntoskrnl.exe + 00000000000E8752
> >>>>>>> (d98) XEN|BUGCHECK: 000000000310F290: (00000000038163B0
> >>>>>>> 000000000310F320 0000000002CB
> >>>>>>> (d98) D540 00000000038163B0) ntoskrnl.exe + 000000000009C91F
> >>>>>>> (d98) XEN|BUGCHECK: 000000000310F360: (0000000000000000
> >>>>>>> 0000000000000008 00000000FFFF
> >>>>>>> (d98) FFFF 00000000003500F0) ntoskrnl.exe + 00000000000831B9
> >>>>>>> (d98) XEN|BUGCHECK: 000000000310F4C0: (0000000000000008
> >>>>>>> 0000000002E39000 000000000000
> >>>>>>> (d98) 0000 0000000000000000) ntoskrnl.exe + 0000000000073CEE
> >>>>>>> (d98) XEN|BUGCHECK: 000000000310F658: (0000000002E5CFD5
> >>>>>>> 0000000000000000 0000000003EB
> >>>>>>> (d98) 8710 00000000FFFFFFFF) ntoskrnl.exe + 000000000042C000
> >>>>>> If you need more tests/informations tell me and I'll post them.
> >>>>>> Thanks for any reply and sorry for my bad english.
> >>>>> Well, that tells me you had a 7A BSOD, which is a
> >>>> KERNEL_DATA_INPAGE_ERROR. The error status (param 2) was
> C0000185
> >> so
> >>>> that's a STATUS_IO_DEVICE_ERROR. The documentation at
> >>>> http://msdn.microsoft.com/en-
> >>>> gb/library/windows/hardware/ff559211%28v=vs.85%29.aspx tells me
> that
> >>>> this means:
> >>>>> "improper termination or defective cabling on SCSI devices or that
> two
> >>>> devices are trying to use the same IRQ."
> >>>>> But you said you had xenvbd already installed so you'll be using a PV
> >>>> storage path. Is there any indication of problems with your storage?
> >>>>>      Paul
> >>>> DomUs disk are all raw files in local dom0 disks, raid1 with "LSI Logic
> >>>> / Symbios Logic SAS2008 PCI-Express Fusion-MPT SAS-2" dom0
> partitions
> >>>> are GTP and fs ext4.
> >>>> Dom0 is wheezy with kernel is linux-image-3.16-0.bpo.2-amd64 version
> >>>> 3.16.3-2~bpo70+1
> >>>> No kern or syslog errors, only many of these warning that someone
> >>>> replied me that should not be a problem:
> >>>> Oct 15 10:45:13 mtorMN01OU kernel: [773197.117518] xen:balloon:
> >>>> reserve_additional_memory: add_memory() failed: -17
> >>>> DomU now see disk as xen pvdisk, on xenvif install probably still was
> >>>> full emulated disk even if xenvbd was installed successful before xenvif
> >>>> install (failed with BSOD)
> >>>> The IRQ seems visible from xl dmesg output below, can you check
> them is
> >>>> have something wrong or strange, I see some of them "duplicate" but I
> >>>> not know if is correct.
> >>>>
> >>>> DomU xl cfg:
> >>>>> name='office1_w7'
> >>>>> builder="hvm"
> >>>>> memory=2048
> >>>>> vcpus=2
> >>>>> acpi_s3=0
> >>>>> acpi_s4=0
> >>>>> vif=['bridge=xenbr0,mac=00:16:3e:41:ae:8b']
> >>>>>
> >>
> disk=['/mnt/vm/disks/office1_w7.disk1.xm,raw,hda,rw',',raw,hdb,ro,cdrom'
> >>>> ]
> >>>>> boot='c'
> >>>>> device_model_version="qemu-xen"
> >>>>> viridian=1
> >>>>> vnc=0
> >>>>> keymap="it"
> >>>>> on_crash="destroy"
> >>>>> vga="qxl"
> >>>>> spice=1
> >>>>> spicehost='0.0.0.0'
> >>>>> spiceport=6001
> >>>>> spicedisable_ticketing=0
> >>>>> spicepasswd="password"
> >>>>> spicevdagent=1
> >>>>> spice_clipboard_sharing=0
> >>>>> spiceusbredirection=4
> >>>>> soundhw="hda"
> >>>>> localtime=1
> >>>> If you need more tests/informations tell me and I'll post them.
> >>>>
> >>> Do you have the qemu log (with xen platform logging enabled). This is
> >> where the PV drivers log failures/warnings.
> >>>     Paul
> >>>
> >>>
> >> I retried enabling xen platform debug in qemu trace but no add lines in
> >> log when I try to install xenvif and fails.
> >> I attach anyway the log if can be useful.
> > All I can see there is an apparently clean shutdown of domain 101; no sign
> of XENVIF and no sign of a BSOD.
> >
> >> I'll also try to restore the backup of this night of the domU when I had
> >> the BSOD trying reproduce it with xen debug in qemu trace and different
> >> windows memory dump options.
> > Ok.
> >
> >    Paul
> >
> Reproduced it but now with xen platform trace enabled in qemu. (see
> attachment)
> Dump of memory instead is not present also in this case (probably
> because disk is "failed").

You're using emulate disk in this case. Did your BSOD not indicate that it was dumping?

  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 Thu Oct 16 14:54:47 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 16 Oct 2014 14:54:47 +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 1XemRy-0003tv-VR; Thu, 16 Oct 2014 14:54:46 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <Paul.Durrant@citrix.com>) id 1XemRx-0003tq-PH
	for win-pv-devel@lists.xenproject.org; Thu, 16 Oct 2014 14:54:45 +0000
Received: from [85.158.139.211:63634] by server-7.bemta-5.messagelabs.com id
	B6/AE-30869-53CDF345; Thu, 16 Oct 2014 14:54:45 +0000
X-Env-Sender: Paul.Durrant@citrix.com
X-Msg-Ref: server-8.tower-206.messagelabs.com!1413471283!11616787!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: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 31642 invoked from network); 16 Oct 2014 14:54:43 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-8.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	16 Oct 2014 14:54:43 -0000
X-IronPort-AV: E=Sophos;i="5.04,732,1406592000"; d="scan'208";a="26020625"
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: Blue screen on xenvif install
Thread-Index: AQHP6R88TE2eCcEtSU6laq0K5grY5pwybJlQ///obQCAACb2gP//8KIAgAAjAsCAAAnUgIAAIsDw///v2YAABHezEA==
Date: Thu, 16 Oct 2014 14:54:43 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD0111058E6@AMSPEX01CL01.citrite.net>
References: <543F887B.5030500@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111050FF@AMSPEX01CL01.citrite.net>
	<543F912C.8000504@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD01110526F@AMSPEX01CL01.citrite.net>
	<543FA4F6.5090804@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111053EA@AMSPEX01CL01.citrite.net>
	<543FCA93.2010805@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111057A2@AMSPEX01CL01.citrite.net>
	<543FDA2D.2090900@m2r.biz>
In-Reply-To: <543FDA2D.2090900@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] Blue screen on xenvif install
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: 16 October 2014 15:46
> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> Subject: Re: Blue screen on xenvif install
> 
> Il 16/10/2014 15:45, Paul Durrant ha scritto:
> >> -----Original Message-----
> >> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >> Sent: 16 October 2014 14:40
> >> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >> Subject: Re: Blue screen on xenvif install
> >>
> >> Il 16/10/2014 13:04, Paul Durrant ha scritto:
> >>>> -----Original Message-----
> >>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >>>> Sent: 16 October 2014 11:59
> >>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >>>> Subject: Re: Blue screen on xenvif install
> >>>>
> >>>> Il 16/10/2014 12:00, Paul Durrant ha scritto:
> >>>>>> -----Original Message-----
> >>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >>>>>> Sent: 16 October 2014 10:35
> >>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >>>>>> Subject: Re: Blue screen on xenvif install
> >>>>>>
> >>>>>> Il 16/10/2014 10:59, Paul Durrant ha scritto:
> >>>>>>>> -----Original Message-----
> >>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >>>>>>>> Sent: 16 October 2014 09:58
> >>>>>>>> To: win-pv-devel@lists.xenproject.org
> >>>>>>>> Cc: Paul Durrant
> >>>>>>>> Subject: Blue screen on xenvif install
> >>>>>>>>
> >>>>>>>> Today I tried to install new winpv driver to other 3 windows 7 pro
> 64
> >>>>>>>> bit domUs.
> >>>>>>>> Days ago I installed them successful on one windows 7 pro 64 bit
> and
> >>>> one
> >>>>>>>> windows 8.1 enterprise 64 bit.
> >>>>>>>> On first domUs I tried to install them today I installed xenbus and
> >>>>>>>> xenvbd successful but on xenvif install windows crashed with blue
> >>>>>>>> screen, if I saw it correctly was an kernel in-page error or
> something
> >>>>>>>> similar.
> >>>>>>>> After reboot I retried to install xenvif but now always fails.
> >>>>>>>>
> >>>>>>> Sounds odd. Do you have a MEMORY.DMP?
> >>>>>>>
> >>>>>>>       Paul
> >>>>>> Windows is setted to write dump of kernel memory on system error
> >> but
> >>>>>> %systemroot%\memory.dmp is missed :(
> >>>>>> I also checked the windows events log but I found only kernel-
> power
> >> as
> >>>>>> critical that seems not contains useful data.
> >>>>>>
> >>>>>> I found probably useful data in xl dmesg (I copied all below from
> domU
> >>>>>> start to xen bug):
> >>>>>>> (d98) HVM Loader
> >>>>>>> (d98) Detected Xen v4.5-unstable
> >>>>>>> (d98) Xenbus rings @0xfeffc000, event channel 1
> >>>>>>> (d98) System requested SeaBIOS
> >>>>>>> (d98) CPU speed is 2660 MHz
> >>>>>>> (d98) Relocating guest memory for lowmem MMIO space disabled
> >>>>>>> (XEN) irq.c:270: Dom98 PCI link 0 changed 0 -> 5
> >>>>>>> (d98) PCI-ISA link 0 routed to IRQ5
> >>>>>>> (XEN) irq.c:270: Dom98 PCI link 1 changed 0 -> 10
> >>>>>>> (d98) PCI-ISA link 1 routed to IRQ10
> >>>>>>> (XEN) irq.c:270: Dom98 PCI link 2 changed 0 -> 11
> >>>>>>> (d98) PCI-ISA link 2 routed to IRQ11
> >>>>>>> (XEN) irq.c:270: Dom98 PCI link 3 changed 0 -> 5
> >>>>>>> (d98) PCI-ISA link 3 routed to IRQ5
> >>>>>>> (d98) pci dev 01:3 INTA->IRQ10
> >>>>>>> (d98) pci dev 02:0 INTA->IRQ11
> >>>>>>> (d98) pci dev 03:0 INTA->IRQ5
> >>>>>>> (d98) pci dev 04:0 INTA->IRQ5
> >>>>>>> (d98) pci dev 05:0 INTA->IRQ10
> >>>>>>> (d98) pci dev 06:0 INTA->IRQ11
> >>>>>>> (d98) pci dev 1d:0 INTA->IRQ10
> >>>>>>> (d98) pci dev 1d:1 INTB->IRQ11
> >>>>>>> (d98) pci dev 1d:2 INTC->IRQ5
> >>>>>>> (d98) pci dev 1d:7 INTD->IRQ5
> >>>>>>> (d98) No RAM in high memory; setting high_mem resource base to
> >>>>>> 100000000
> >>>>>>> (d98) pci dev 05:0 bar 10 size 004000000: 0f0000000
> >>>>>>> (d98) pci dev 05:0 bar 14 size 004000000: 0f4000000
> >>>>>>> (d98) pci dev 02:0 bar 14 size 001000000: 0f8000008
> >>>>>>> (d98) pci dev 06:0 bar 30 size 000040000: 0f9000000
> >>>>>>> (d98) pci dev 05:0 bar 30 size 000010000: 0f9040000
> >>>>>>> (d98) pci dev 03:0 bar 10 size 000004000: 0f9050000
> >>>>>>> (d98) pci dev 05:0 bar 18 size 000002000: 0f9054000
> >>>>>>> (d98) pci dev 04:0 bar 14 size 000001000: 0f9056000
> >>>>>>> (d98) pci dev 1d:7 bar 10 size 000001000: 0f9057000
> >>>>>>> (d98) pci dev 02:0 bar 10 size 000000100: 00000c001
> >>>>>>> (d98) pci dev 06:0 bar 10 size 000000100: 00000c101
> >>>>>>> (d98) pci dev 06:0 bar 14 size 000000100: 0f9058000
> >>>>>>> (d98) pci dev 04:0 bar 10 size 000000020: 00000c201
> >>>>>>> (d98) pci dev 05:0 bar 1c size 000000020: 00000c221
> >>>>>>> (d98) pci dev 1d:0 bar 20 size 000000020: 00000c241
> >>>>>>> (d98) pci dev 1d:1 bar 20 size 000000020: 00000c261
> >>>>>>> (d98) pci dev 1d:2 bar 20 size 000000020: 00000c281
> >>>>>>> (d98) pci dev 01:1 bar 20 size 000000010: 00000c2a1
> >>>>>>> (d98) Multiprocessor initialisation:
> >>>>>>> (d98)  - CPU0 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8] ...
> >>>>>>> done.
> >>>>>>> (d98)  - CPU1 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8] ...
> >>>>>>> done.
> >>>>>>> (d98) Testing HVM environment:
> >>>>>>> (d98)  - REP INSB across page boundaries ... passed
> >>>>>>> (d98)  - GS base MSRs and SWAPGS ... passed
> >>>>>>> (d98) Passed 2 of 2 tests
> >>>>>>> (d98) Writing SMBIOS tables ...
> >>>>>>> (d98) Loading SeaBIOS ...
> >>>>>>> (d98) Creating MP tables ...
> >>>>>>> (d98) Loading ACPI ...
> >>>>>>> (d98) S3 disabled
> >>>>>>> (d98) S4 disabled
> >>>>>>> (d98) vm86 TSS at fc00a100
> >>>>>>> (d98) BIOS map:
> >>>>>>> (d98)  10000-100d3: Scratch space
> >>>>>>> (d98)  c0000-fffff: Main BIOS
> >>>>>>> (d98) E820 table:
> >>>>>>> (d98)  [00]: 00000000:00000000 - 00000000:000a0000: RAM
> >>>>>>> (d98)  HOLE: 00000000:000a0000 - 00000000:000c0000
> >>>>>>> (d98)  [01]: 00000000:000c0000 - 00000000:00100000: RESERVED
> >>>>>>> (d98)  [02]: 00000000:00100000 - 00000000:78000000: RAM
> >>>>>>> (d98)  HOLE: 00000000:78000000 - 00000000:fc000000
> >>>>>>> (d98)  [03]: 00000000:fc000000 - 00000001:00000000: RESERVED
> >>>>>>> (d98) Invoking SeaBIOS ...
> >>>>>>> (d98) SeaBIOS (version
> >>>>>>> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
> >>>>>>> (d98)
> >>>>>>> (d98) Found Xen hypervisor signature at 40000100
> >>>>>>> (d98) Running on QEMU (i440fx)
> >>>>>>> (d98) xen: copy e820...
> >>>>>>> (d98) Relocating init from 0x000df619 to 0x77fae600 (size 71995)
> >>>>>>> (d98) CPU Mhz=2660
> >>>>>>> (d98) Found 13 PCI devices (max PCI bus is 00)
> >>>>>>> (d98) Allocated Xen hypercall page at 77fff000
> >>>>>>> (d98) Detected Xen v4.5-unstable
> >>>>>>> (d98) xen: copy BIOS tables...
> >>>>>>> (d98) Copying SMBIOS entry point from 0x00010010 to 0x000f0f40
> >>>>>>> (d98) Copying MPTABLE from 0xfc001170/fc001180 to 0x000f0e40
> >>>>>>> (d98) Copying PIR from 0x00010030 to 0x000f0dc0
> >>>>>>> (d98) Copying ACPI RSDP from 0x000100b0 to 0x000f0d90
> >>>>>>> (d98) Using pmtimer, ioport 0xb008
> >>>>>>> (d98) Scan for VGA option rom
> >>>>>>> (d98) Running option rom at c000:0003
> >>>>>>> (XEN) stdvga.c:147:d98v0 entering stdvga and caching modes
> >>>>>>> (d98) pmm call arg1=0
> >>>>>>> (d98) Turning on vga text mode console
> >>>>>>> (d98) SeaBIOS (version
> >>>>>>> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
> >>>>>>> (d98) Machine UUID f4cdeb74-0db1-4748-948d-42579a494120
> >>>>>>> (d98) EHCI init on dev 00:1d.7 (regs=0xf9057020)
> >>>>>>> (d98) Found 0 lpt ports
> >>>>>>> (d98) Found 0 serial ports
> >>>>>>> (d98) ATA controller 1 at 1f0/3f4/0 (irq 14 dev 9)
> >>>>>>> (d98) ATA controller 2 at 170/374/0 (irq 15 dev 9)
> >>>>>>> (d98) ata0-0: QEMU HARDDISK ATA-7 Hard-Disk (40720 MiBytes)
> >>>>>>> (d98) Searching bootorder for: /pci@i0cf8/*@1,1/drive@0/disk@0
> >>>>>>> (d98) DVD/CD [ata0-1: QEMU DVD-ROM ATAPI-4 DVD/CD]
> >>>>>>> (d98) Searching bootorder for: /pci@i0cf8/*@1,1/drive@0/disk@1
> >>>>>>> (d98) UHCI init on dev 00:1d.0 (io=c240)
> >>>>>>> (d98) UHCI init on dev 00:1d.1 (io=c260)
> >>>>>>> (d98) UHCI init on dev 00:1d.2 (io=c280)
> >>>>>>> (d98) PS2 keyboard initialized
> >>>>>>> (d98) All threads complete.
> >>>>>>> (d98) Scan for option roms
> >>>>>>> (d98) Running option rom at c980:0003
> >>>>>>> (d98) pmm call arg1=1
> >>>>>>> (d98) pmm call arg1=0
> >>>>>>> (d98) pmm call arg1=1
> >>>>>>> (d98) pmm call arg1=0
> >>>>>>> (d98) Searching bootorder for: /pci@i0cf8/*@6
> >>>>>>> (d98)
> >>>>>>> (d98) Press F12 for boot menu.
> >>>>>>> (d98)
> >>>>>>> (d98) Searching bootorder for: HALT
> >>>>>>> (d98) drive 0x000f0d40: PCHS=16383/16/63 translation=lba
> >>>>>>> LCHS=1024/255/63 s=83394560
> >>>>>>> (d98) Space available for UMB: ca800-ee800, f0000-f0ce0
> >>>>>>> (d98) Returned 258048 bytes of ZoneHigh
> >>>>>>> (d98) e820 map has 6 items:
> >>>>>>> (d98)   0: 0000000000000000 - 000000000009fc00 = 1 RAM
> >>>>>>> (d98)   1: 000000000009fc00 - 00000000000a0000 = 2 RESERVED
> >>>>>>> (d98)   2: 00000000000f0000 - 0000000000100000 = 2 RESERVED
> >>>>>>> (d98)   3: 0000000000100000 - 0000000077fff000 = 1 RAM
> >>>>>>> (d98)   4: 0000000077fff000 - 0000000078000000 = 2 RESERVED
> >>>>>>> (d98)   5: 00000000fc000000 - 0000000100000000 = 2 RESERVED
> >>>>>>> (d98) enter handle_19:
> >>>>>>> (d98)   NULL
> >>>>>>> (d98) Booting from Hard Disk...
> >>>>>>> (d98) Booting from 0000:7c00
> >>>>>>> (XEN) d98: VIRIDIAN GUEST_OS_ID: vendor: 1 os: 4 major: 6 minor:
> 1
> >> sp:
> >>>>>>> 1 build: 1db1
> >>>>>>> (XEN) d98: VIRIDIAN HYPERCALL: enabled: 1 pfn: 3ffff
> >>>>>>> (XEN) d98v0: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffe
> >>>>>>> (XEN) d98v1: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffd
> >>>>>>> (XEN) irq.c:270: Dom98 PCI link 0 changed 5 -> 0
> >>>>>>> (XEN) irq.c:270: Dom98 PCI link 1 changed 10 -> 0
> >>>>>>> (XEN) irq.c:270: Dom98 PCI link 2 changed 11 -> 0
> >>>>>>> (XEN) irq.c:270: Dom98 PCI link 3 changed 5 -> 0
> >>>>>>> (XEN) irq.c:380: Dom98 callback via changed to GSI 24
> >>>>>>> (d98) XEN|BUGCHECK: ====>
> >>>>>>> (d98) XEN|BUGCHECK: 0000007A: FFFFF6FC000171C8
> >> FFFFFFFFC0000185
> >>>>>>> 000000001BD6A860 FFFF
> >>>>>>> (d98) F80002E39000
> >>>>>>> (d98) XEN|BUGCHECK: CONTEXT (FFFFF8800310E530):
> >>>>>>> (d98) XEN|BUGCHECK: - GS = 002B
> >>>>>>> (d98) XEN|BUGCHECK: - FS = 0053
> >>>>>>> (d98) XEN|BUGCHECK: - ES = 002B
> >>>>>>> (d98) XEN|BUGCHECK: - DS = 002B
> >>>>>>> (d98) XEN|BUGCHECK: - SS = 0018
> >>>>>>> (d98) XEN|BUGCHECK: - CS = 0010
> >>>>>>> (d98) XEN|BUGCHECK: - EFLAGS = 00000086
> >>>>>>> (d98) XEN|BUGCHECK: - RDI = 00000000000171C8
> >>>>>>> (d98) XEN|BUGCHECK: - RSI = 00000000C0000185
> >>>>>>> (d98) XEN|BUGCHECK: - RBX = 00000000038AC8F8
> >>>>>>> (d98) XEN|BUGCHECK: - RDX = 0000000000000000
> >>>>>>> (d98) XEN|BUGCHECK: - RCX = 000000000310E530
> >>>>>>> (d98) XEN|BUGCHECK: - RAX = 000000002ECF4722
> >>>>>>> (d98) XEN|BUGCHECK: - RBP = 000000001BD6A860
> >>>>>>> (d98) XEN|BUGCHECK: - RIP = 00000000038A2A43
> >>>>>>> (d98) XEN|BUGCHECK: - RSP = 000000000310E510
> >>>>>>> (d98) XEN|BUGCHECK: - R8 = 0000000000000000
> >>>>>>> (d98) XEN|BUGCHECK: - R9 = 0000000000000000
> >>>>>>> (d98) XEN|BUGCHECK: - R10 = 0000000000000000
> >>>>>>> (d98) XEN|BUGCHECK: - R11 = 0000000000000000
> >>>>>>> (d98) XEN|BUGCHECK: - R12 = 000000000000007A
> >>>>>>> (d98) XEN|BUGCHECK: - R13 = 0000000000000001
> >>>>>>> (d98) XEN|BUGCHECK: - R14 = 0000000002E39000
> >>>>>>> (d98) XEN|BUGCHECK: - R15 = 0000000002CBAC40
> >>>>>>> (d98) XEN|BUGCHECK: STACK:
> >>>>>>> (d98) XEN|BUGCHECK: 000000000310EA20: (0000000000000003
> >>>>>>> 00000000038A50F0 00000000038A
> >>>>>>> (d98) 4860 000000000000007A) xen.sys + 00000000000049AC
> >>>>>>> (d98) XEN|BUGCHECK: 000000000310EA70: (00000000038AD0D0
> >>>>>>> 0000000000000000 000000000000
> >>>>>>> (d98) 0004 0000000002C83500) ntoskrnl.exe + 0000000000128585
> >>>>>>> (d98) XEN|BUGCHECK: 000000000310EAA0: (00000000038AD0D0
> >>>>>>> 0000000002C83500 000000000000
> >>>>>>> (d98) 000F 0000000001780660) ntoskrnl.exe + 0000000000167C0D
> >>>>>>> (d98) XEN|BUGCHECK: 000000000310F170: (0000000003816470
> >>>>>>> 0000000002B4C8C1 000000000000
> >>>>>>> (d98) 00FE 0000000000000000) ntoskrnl.exe + 0000000000075CC4
> >>>>>>> (d98) XEN|BUGCHECK: 000000000310F1B0: (000000000000007A
> >>>>>>> 00000000000171C8 00000000C000
> >>>>>>> (d98) 0185 000000001BD6A860) ntoskrnl.exe + 00000000000E8752
> >>>>>>> (d98) XEN|BUGCHECK: 000000000310F290: (00000000038163B0
> >>>>>>> 000000000310F320 0000000002CB
> >>>>>>> (d98) D540 00000000038163B0) ntoskrnl.exe + 000000000009C91F
> >>>>>>> (d98) XEN|BUGCHECK: 000000000310F360: (0000000000000000
> >>>>>>> 0000000000000008 00000000FFFF
> >>>>>>> (d98) FFFF 00000000003500F0) ntoskrnl.exe + 00000000000831B9
> >>>>>>> (d98) XEN|BUGCHECK: 000000000310F4C0: (0000000000000008
> >>>>>>> 0000000002E39000 000000000000
> >>>>>>> (d98) 0000 0000000000000000) ntoskrnl.exe + 0000000000073CEE
> >>>>>>> (d98) XEN|BUGCHECK: 000000000310F658: (0000000002E5CFD5
> >>>>>>> 0000000000000000 0000000003EB
> >>>>>>> (d98) 8710 00000000FFFFFFFF) ntoskrnl.exe + 000000000042C000
> >>>>>> If you need more tests/informations tell me and I'll post them.
> >>>>>> Thanks for any reply and sorry for my bad english.
> >>>>> Well, that tells me you had a 7A BSOD, which is a
> >>>> KERNEL_DATA_INPAGE_ERROR. The error status (param 2) was
> C0000185
> >> so
> >>>> that's a STATUS_IO_DEVICE_ERROR. The documentation at
> >>>> http://msdn.microsoft.com/en-
> >>>> gb/library/windows/hardware/ff559211%28v=vs.85%29.aspx tells me
> that
> >>>> this means:
> >>>>> "improper termination or defective cabling on SCSI devices or that
> two
> >>>> devices are trying to use the same IRQ."
> >>>>> But you said you had xenvbd already installed so you'll be using a PV
> >>>> storage path. Is there any indication of problems with your storage?
> >>>>>      Paul
> >>>> DomUs disk are all raw files in local dom0 disks, raid1 with "LSI Logic
> >>>> / Symbios Logic SAS2008 PCI-Express Fusion-MPT SAS-2" dom0
> partitions
> >>>> are GTP and fs ext4.
> >>>> Dom0 is wheezy with kernel is linux-image-3.16-0.bpo.2-amd64 version
> >>>> 3.16.3-2~bpo70+1
> >>>> No kern or syslog errors, only many of these warning that someone
> >>>> replied me that should not be a problem:
> >>>> Oct 15 10:45:13 mtorMN01OU kernel: [773197.117518] xen:balloon:
> >>>> reserve_additional_memory: add_memory() failed: -17
> >>>> DomU now see disk as xen pvdisk, on xenvif install probably still was
> >>>> full emulated disk even if xenvbd was installed successful before xenvif
> >>>> install (failed with BSOD)
> >>>> The IRQ seems visible from xl dmesg output below, can you check
> them is
> >>>> have something wrong or strange, I see some of them "duplicate" but I
> >>>> not know if is correct.
> >>>>
> >>>> DomU xl cfg:
> >>>>> name='office1_w7'
> >>>>> builder="hvm"
> >>>>> memory=2048
> >>>>> vcpus=2
> >>>>> acpi_s3=0
> >>>>> acpi_s4=0
> >>>>> vif=['bridge=xenbr0,mac=00:16:3e:41:ae:8b']
> >>>>>
> >>
> disk=['/mnt/vm/disks/office1_w7.disk1.xm,raw,hda,rw',',raw,hdb,ro,cdrom'
> >>>> ]
> >>>>> boot='c'
> >>>>> device_model_version="qemu-xen"
> >>>>> viridian=1
> >>>>> vnc=0
> >>>>> keymap="it"
> >>>>> on_crash="destroy"
> >>>>> vga="qxl"
> >>>>> spice=1
> >>>>> spicehost='0.0.0.0'
> >>>>> spiceport=6001
> >>>>> spicedisable_ticketing=0
> >>>>> spicepasswd="password"
> >>>>> spicevdagent=1
> >>>>> spice_clipboard_sharing=0
> >>>>> spiceusbredirection=4
> >>>>> soundhw="hda"
> >>>>> localtime=1
> >>>> If you need more tests/informations tell me and I'll post them.
> >>>>
> >>> Do you have the qemu log (with xen platform logging enabled). This is
> >> where the PV drivers log failures/warnings.
> >>>     Paul
> >>>
> >>>
> >> I retried enabling xen platform debug in qemu trace but no add lines in
> >> log when I try to install xenvif and fails.
> >> I attach anyway the log if can be useful.
> > All I can see there is an apparently clean shutdown of domain 101; no sign
> of XENVIF and no sign of a BSOD.
> >
> >> I'll also try to restore the backup of this night of the domU when I had
> >> the BSOD trying reproduce it with xen debug in qemu trace and different
> >> windows memory dump options.
> > Ok.
> >
> >    Paul
> >
> Reproduced it but now with xen platform trace enabled in qemu. (see
> attachment)
> Dump of memory instead is not present also in this case (probably
> because disk is "failed").

You're using emulate disk in this case. Did your BSOD not indicate that it was dumping?

  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 Thu Oct 16 15:04:36 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 16 Oct 2014 15:04: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 1XembT-00047P-No; Thu, 16 Oct 2014 15:04:35 +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 1XembS-00047K-8Y
	for win-pv-devel@lists.xenproject.org; Thu, 16 Oct 2014 15:04:34 +0000
Received: from [85.158.137.68:24679] by server-2.bemta-3.messagelabs.com id
	CE/DF-09149-18EDF345; Thu, 16 Oct 2014 15:04:33 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-14.tower-31.messagelabs.com!1413471871!8708082!1
X-Originating-IP: [74.125.82.44]
X-SpamReason: No, hits=1.7 required=7.0 tests=BIZ_TLD
X-StarScan-Received: 
X-StarScan-Version: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 23789 invoked from network); 16 Oct 2014 15:04:32 -0000
Received: from mail-wg0-f44.google.com (HELO mail-wg0-f44.google.com)
	(74.125.82.44)
	by server-14.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	16 Oct 2014 15:04:32 -0000
Received: by mail-wg0-f44.google.com with SMTP id y10so3934697wgg.27
	for <win-pv-devel@lists.xenproject.org>;
	Thu, 16 Oct 2014 08:04:31 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:message-id:date:from:user-agent:mime-version:to
	:subject:references:in-reply-to:content-type
	:content-transfer-encoding;
	bh=Tj6B54nXoblsR7huUsaY2vjGK5z+IIuqW8KPZsCde0c=;
	b=Q+dkwAxgWeD804r7ZDVlX+XuFTgnkcTOKesULih9E3ZBqGhJkyoy3CPlCd9muUg8mN
	yykH0Gf7yEIAZ/8HFsMf+/afIfGUJQO5tid9ohc8ch79vrsfxDRWBMuw0E7hrde9RDGC
	3UpC0P2jScUDnNFAr2AbyWQLH8PeYfN8ctzQwguAgDwXK+H2/bhGDMoV6b0FHpYnt1GM
	y+8sO8cWobWoxHLtfysSx4K6KGH07oViqddTWIBTEciIhCS63KDQj5ZXvC7iOzhYwad9
	dhjqmXrl440R++OgUchrY2fhK6iaUm1/U0B7OG2a4ebz68u1ECO2WIw426odyTPmqY3l
	Y4Ig==
X-Gm-Message-State: ALoCoQmdIrDudfk3TC2Lan/jfQoU5zbh8/Ks2Z7RSLhaTAGlZpXWfyhz5SWfwVRpGCmyDeE1XemC
X-Received: by 10.194.249.225 with SMTP id yx1mr2695969wjc.79.1413471871527;
	Thu, 16 Oct 2014 08:04:31 -0700 (PDT)
Received: from [192.168.1.15] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by mx.google.com with ESMTPSA id t10sm9984805wja.43.2014.10.16.08.04.29
	for <multiple recipients>
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Thu, 16 Oct 2014 08:04:30 -0700 (PDT)
Message-ID: <543FDE85.1030908@m2r.biz>
Date: Thu, 16 Oct 2014 17:04:37 +0200
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64;
	rv:24.0) Gecko/20100101 Thunderbird/24.6.0
MIME-Version: 1.0
To: Paul Durrant <Paul.Durrant@citrix.com>, 
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <543F887B.5030500@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111050FF@AMSPEX01CL01.citrite.net>
	<543F912C.8000504@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD01110526F@AMSPEX01CL01.citrite.net>
	<543FA4F6.5090804@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111053EA@AMSPEX01CL01.citrite.net>
	<543FCA93.2010805@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111057A2@AMSPEX01CL01.citrite.net>
	<543FDA2D.2090900@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111058E6@AMSPEX01CL01.citrite.net>
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD0111058E6@AMSPEX01CL01.citrite.net>
Subject: Re: [win-pv-devel] Blue screen on xenvif install
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 16/10/2014 16:54, Paul Durrant ha scritto:
>> -----Original Message-----
>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>> Sent: 16 October 2014 15:46
>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>> Subject: Re: Blue screen on xenvif install
>>
>> Il 16/10/2014 15:45, Paul Durrant ha scritto:
>>>> -----Original Message-----
>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>> Sent: 16 October 2014 14:40
>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>>>> Subject: Re: Blue screen on xenvif install
>>>>
>>>> Il 16/10/2014 13:04, Paul Durrant ha scritto:
>>>>>> -----Original Message-----
>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>>>> Sent: 16 October 2014 11:59
>>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>>>>>> Subject: Re: Blue screen on xenvif install
>>>>>>
>>>>>> Il 16/10/2014 12:00, Paul Durrant ha scritto:
>>>>>>>> -----Original Message-----
>>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>>>>>> Sent: 16 October 2014 10:35
>>>>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>>>>>>>> Subject: Re: Blue screen on xenvif install
>>>>>>>>
>>>>>>>> Il 16/10/2014 10:59, Paul Durrant ha scritto:
>>>>>>>>>> -----Original Message-----
>>>>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>>>>>>>> Sent: 16 October 2014 09:58
>>>>>>>>>> To: win-pv-devel@lists.xenproject.org
>>>>>>>>>> Cc: Paul Durrant
>>>>>>>>>> Subject: Blue screen on xenvif install
>>>>>>>>>>
>>>>>>>>>> Today I tried to install new winpv driver to other 3 windows 7 pro
>> 64
>>>>>>>>>> bit domUs.
>>>>>>>>>> Days ago I installed them successful on one windows 7 pro 64 bit
>> and
>>>>>> one
>>>>>>>>>> windows 8.1 enterprise 64 bit.
>>>>>>>>>> On first domUs I tried to install them today I installed xenbus and
>>>>>>>>>> xenvbd successful but on xenvif install windows crashed with blue
>>>>>>>>>> screen, if I saw it correctly was an kernel in-page error or
>> something
>>>>>>>>>> similar.
>>>>>>>>>> After reboot I retried to install xenvif but now always fails.
>>>>>>>>>>
>>>>>>>>> Sounds odd. Do you have a MEMORY.DMP?
>>>>>>>>>
>>>>>>>>>        Paul
>>>>>>>> Windows is setted to write dump of kernel memory on system error
>>>> but
>>>>>>>> %systemroot%\memory.dmp is missed :(
>>>>>>>> I also checked the windows events log but I found only kernel-
>> power
>>>> as
>>>>>>>> critical that seems not contains useful data.
>>>>>>>>
>>>>>>>> I found probably useful data in xl dmesg (I copied all below from
>> domU
>>>>>>>> start to xen bug):
>>>>>>>>> (d98) HVM Loader
>>>>>>>>> (d98) Detected Xen v4.5-unstable
>>>>>>>>> (d98) Xenbus rings @0xfeffc000, event channel 1
>>>>>>>>> (d98) System requested SeaBIOS
>>>>>>>>> (d98) CPU speed is 2660 MHz
>>>>>>>>> (d98) Relocating guest memory for lowmem MMIO space disabled
>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 0 changed 0 -> 5
>>>>>>>>> (d98) PCI-ISA link 0 routed to IRQ5
>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 1 changed 0 -> 10
>>>>>>>>> (d98) PCI-ISA link 1 routed to IRQ10
>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 2 changed 0 -> 11
>>>>>>>>> (d98) PCI-ISA link 2 routed to IRQ11
>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 3 changed 0 -> 5
>>>>>>>>> (d98) PCI-ISA link 3 routed to IRQ5
>>>>>>>>> (d98) pci dev 01:3 INTA->IRQ10
>>>>>>>>> (d98) pci dev 02:0 INTA->IRQ11
>>>>>>>>> (d98) pci dev 03:0 INTA->IRQ5
>>>>>>>>> (d98) pci dev 04:0 INTA->IRQ5
>>>>>>>>> (d98) pci dev 05:0 INTA->IRQ10
>>>>>>>>> (d98) pci dev 06:0 INTA->IRQ11
>>>>>>>>> (d98) pci dev 1d:0 INTA->IRQ10
>>>>>>>>> (d98) pci dev 1d:1 INTB->IRQ11
>>>>>>>>> (d98) pci dev 1d:2 INTC->IRQ5
>>>>>>>>> (d98) pci dev 1d:7 INTD->IRQ5
>>>>>>>>> (d98) No RAM in high memory; setting high_mem resource base to
>>>>>>>> 100000000
>>>>>>>>> (d98) pci dev 05:0 bar 10 size 004000000: 0f0000000
>>>>>>>>> (d98) pci dev 05:0 bar 14 size 004000000: 0f4000000
>>>>>>>>> (d98) pci dev 02:0 bar 14 size 001000000: 0f8000008
>>>>>>>>> (d98) pci dev 06:0 bar 30 size 000040000: 0f9000000
>>>>>>>>> (d98) pci dev 05:0 bar 30 size 000010000: 0f9040000
>>>>>>>>> (d98) pci dev 03:0 bar 10 size 000004000: 0f9050000
>>>>>>>>> (d98) pci dev 05:0 bar 18 size 000002000: 0f9054000
>>>>>>>>> (d98) pci dev 04:0 bar 14 size 000001000: 0f9056000
>>>>>>>>> (d98) pci dev 1d:7 bar 10 size 000001000: 0f9057000
>>>>>>>>> (d98) pci dev 02:0 bar 10 size 000000100: 00000c001
>>>>>>>>> (d98) pci dev 06:0 bar 10 size 000000100: 00000c101
>>>>>>>>> (d98) pci dev 06:0 bar 14 size 000000100: 0f9058000
>>>>>>>>> (d98) pci dev 04:0 bar 10 size 000000020: 00000c201
>>>>>>>>> (d98) pci dev 05:0 bar 1c size 000000020: 00000c221
>>>>>>>>> (d98) pci dev 1d:0 bar 20 size 000000020: 00000c241
>>>>>>>>> (d98) pci dev 1d:1 bar 20 size 000000020: 00000c261
>>>>>>>>> (d98) pci dev 1d:2 bar 20 size 000000020: 00000c281
>>>>>>>>> (d98) pci dev 01:1 bar 20 size 000000010: 00000c2a1
>>>>>>>>> (d98) Multiprocessor initialisation:
>>>>>>>>> (d98)  - CPU0 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8] ...
>>>>>>>>> done.
>>>>>>>>> (d98)  - CPU1 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8] ...
>>>>>>>>> done.
>>>>>>>>> (d98) Testing HVM environment:
>>>>>>>>> (d98)  - REP INSB across page boundaries ... passed
>>>>>>>>> (d98)  - GS base MSRs and SWAPGS ... passed
>>>>>>>>> (d98) Passed 2 of 2 tests
>>>>>>>>> (d98) Writing SMBIOS tables ...
>>>>>>>>> (d98) Loading SeaBIOS ...
>>>>>>>>> (d98) Creating MP tables ...
>>>>>>>>> (d98) Loading ACPI ...
>>>>>>>>> (d98) S3 disabled
>>>>>>>>> (d98) S4 disabled
>>>>>>>>> (d98) vm86 TSS at fc00a100
>>>>>>>>> (d98) BIOS map:
>>>>>>>>> (d98)  10000-100d3: Scratch space
>>>>>>>>> (d98)  c0000-fffff: Main BIOS
>>>>>>>>> (d98) E820 table:
>>>>>>>>> (d98)  [00]: 00000000:00000000 - 00000000:000a0000: RAM
>>>>>>>>> (d98)  HOLE: 00000000:000a0000 - 00000000:000c0000
>>>>>>>>> (d98)  [01]: 00000000:000c0000 - 00000000:00100000: RESERVED
>>>>>>>>> (d98)  [02]: 00000000:00100000 - 00000000:78000000: RAM
>>>>>>>>> (d98)  HOLE: 00000000:78000000 - 00000000:fc000000
>>>>>>>>> (d98)  [03]: 00000000:fc000000 - 00000001:00000000: RESERVED
>>>>>>>>> (d98) Invoking SeaBIOS ...
>>>>>>>>> (d98) SeaBIOS (version
>>>>>>>>> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
>>>>>>>>> (d98)
>>>>>>>>> (d98) Found Xen hypervisor signature at 40000100
>>>>>>>>> (d98) Running on QEMU (i440fx)
>>>>>>>>> (d98) xen: copy e820...
>>>>>>>>> (d98) Relocating init from 0x000df619 to 0x77fae600 (size 71995)
>>>>>>>>> (d98) CPU Mhz=2660
>>>>>>>>> (d98) Found 13 PCI devices (max PCI bus is 00)
>>>>>>>>> (d98) Allocated Xen hypercall page at 77fff000
>>>>>>>>> (d98) Detected Xen v4.5-unstable
>>>>>>>>> (d98) xen: copy BIOS tables...
>>>>>>>>> (d98) Copying SMBIOS entry point from 0x00010010 to 0x000f0f40
>>>>>>>>> (d98) Copying MPTABLE from 0xfc001170/fc001180 to 0x000f0e40
>>>>>>>>> (d98) Copying PIR from 0x00010030 to 0x000f0dc0
>>>>>>>>> (d98) Copying ACPI RSDP from 0x000100b0 to 0x000f0d90
>>>>>>>>> (d98) Using pmtimer, ioport 0xb008
>>>>>>>>> (d98) Scan for VGA option rom
>>>>>>>>> (d98) Running option rom at c000:0003
>>>>>>>>> (XEN) stdvga.c:147:d98v0 entering stdvga and caching modes
>>>>>>>>> (d98) pmm call arg1=0
>>>>>>>>> (d98) Turning on vga text mode console
>>>>>>>>> (d98) SeaBIOS (version
>>>>>>>>> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
>>>>>>>>> (d98) Machine UUID f4cdeb74-0db1-4748-948d-42579a494120
>>>>>>>>> (d98) EHCI init on dev 00:1d.7 (regs=0xf9057020)
>>>>>>>>> (d98) Found 0 lpt ports
>>>>>>>>> (d98) Found 0 serial ports
>>>>>>>>> (d98) ATA controller 1 at 1f0/3f4/0 (irq 14 dev 9)
>>>>>>>>> (d98) ATA controller 2 at 170/374/0 (irq 15 dev 9)
>>>>>>>>> (d98) ata0-0: QEMU HARDDISK ATA-7 Hard-Disk (40720 MiBytes)
>>>>>>>>> (d98) Searching bootorder for: /pci@i0cf8/*@1,1/drive@0/disk@0
>>>>>>>>> (d98) DVD/CD [ata0-1: QEMU DVD-ROM ATAPI-4 DVD/CD]
>>>>>>>>> (d98) Searching bootorder for: /pci@i0cf8/*@1,1/drive@0/disk@1
>>>>>>>>> (d98) UHCI init on dev 00:1d.0 (io=c240)
>>>>>>>>> (d98) UHCI init on dev 00:1d.1 (io=c260)
>>>>>>>>> (d98) UHCI init on dev 00:1d.2 (io=c280)
>>>>>>>>> (d98) PS2 keyboard initialized
>>>>>>>>> (d98) All threads complete.
>>>>>>>>> (d98) Scan for option roms
>>>>>>>>> (d98) Running option rom at c980:0003
>>>>>>>>> (d98) pmm call arg1=1
>>>>>>>>> (d98) pmm call arg1=0
>>>>>>>>> (d98) pmm call arg1=1
>>>>>>>>> (d98) pmm call arg1=0
>>>>>>>>> (d98) Searching bootorder for: /pci@i0cf8/*@6
>>>>>>>>> (d98)
>>>>>>>>> (d98) Press F12 for boot menu.
>>>>>>>>> (d98)
>>>>>>>>> (d98) Searching bootorder for: HALT
>>>>>>>>> (d98) drive 0x000f0d40: PCHS=16383/16/63 translation=lba
>>>>>>>>> LCHS=1024/255/63 s=83394560
>>>>>>>>> (d98) Space available for UMB: ca800-ee800, f0000-f0ce0
>>>>>>>>> (d98) Returned 258048 bytes of ZoneHigh
>>>>>>>>> (d98) e820 map has 6 items:
>>>>>>>>> (d98)   0: 0000000000000000 - 000000000009fc00 = 1 RAM
>>>>>>>>> (d98)   1: 000000000009fc00 - 00000000000a0000 = 2 RESERVED
>>>>>>>>> (d98)   2: 00000000000f0000 - 0000000000100000 = 2 RESERVED
>>>>>>>>> (d98)   3: 0000000000100000 - 0000000077fff000 = 1 RAM
>>>>>>>>> (d98)   4: 0000000077fff000 - 0000000078000000 = 2 RESERVED
>>>>>>>>> (d98)   5: 00000000fc000000 - 0000000100000000 = 2 RESERVED
>>>>>>>>> (d98) enter handle_19:
>>>>>>>>> (d98)   NULL
>>>>>>>>> (d98) Booting from Hard Disk...
>>>>>>>>> (d98) Booting from 0000:7c00
>>>>>>>>> (XEN) d98: VIRIDIAN GUEST_OS_ID: vendor: 1 os: 4 major: 6 minor:
>> 1
>>>> sp:
>>>>>>>>> 1 build: 1db1
>>>>>>>>> (XEN) d98: VIRIDIAN HYPERCALL: enabled: 1 pfn: 3ffff
>>>>>>>>> (XEN) d98v0: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffe
>>>>>>>>> (XEN) d98v1: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffd
>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 0 changed 5 -> 0
>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 1 changed 10 -> 0
>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 2 changed 11 -> 0
>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 3 changed 5 -> 0
>>>>>>>>> (XEN) irq.c:380: Dom98 callback via changed to GSI 24
>>>>>>>>> (d98) XEN|BUGCHECK: ====>
>>>>>>>>> (d98) XEN|BUGCHECK: 0000007A: FFFFF6FC000171C8
>>>> FFFFFFFFC0000185
>>>>>>>>> 000000001BD6A860 FFFF
>>>>>>>>> (d98) F80002E39000
>>>>>>>>> (d98) XEN|BUGCHECK: CONTEXT (FFFFF8800310E530):
>>>>>>>>> (d98) XEN|BUGCHECK: - GS = 002B
>>>>>>>>> (d98) XEN|BUGCHECK: - FS = 0053
>>>>>>>>> (d98) XEN|BUGCHECK: - ES = 002B
>>>>>>>>> (d98) XEN|BUGCHECK: - DS = 002B
>>>>>>>>> (d98) XEN|BUGCHECK: - SS = 0018
>>>>>>>>> (d98) XEN|BUGCHECK: - CS = 0010
>>>>>>>>> (d98) XEN|BUGCHECK: - EFLAGS = 00000086
>>>>>>>>> (d98) XEN|BUGCHECK: - RDI = 00000000000171C8
>>>>>>>>> (d98) XEN|BUGCHECK: - RSI = 00000000C0000185
>>>>>>>>> (d98) XEN|BUGCHECK: - RBX = 00000000038AC8F8
>>>>>>>>> (d98) XEN|BUGCHECK: - RDX = 0000000000000000
>>>>>>>>> (d98) XEN|BUGCHECK: - RCX = 000000000310E530
>>>>>>>>> (d98) XEN|BUGCHECK: - RAX = 000000002ECF4722
>>>>>>>>> (d98) XEN|BUGCHECK: - RBP = 000000001BD6A860
>>>>>>>>> (d98) XEN|BUGCHECK: - RIP = 00000000038A2A43
>>>>>>>>> (d98) XEN|BUGCHECK: - RSP = 000000000310E510
>>>>>>>>> (d98) XEN|BUGCHECK: - R8 = 0000000000000000
>>>>>>>>> (d98) XEN|BUGCHECK: - R9 = 0000000000000000
>>>>>>>>> (d98) XEN|BUGCHECK: - R10 = 0000000000000000
>>>>>>>>> (d98) XEN|BUGCHECK: - R11 = 0000000000000000
>>>>>>>>> (d98) XEN|BUGCHECK: - R12 = 000000000000007A
>>>>>>>>> (d98) XEN|BUGCHECK: - R13 = 0000000000000001
>>>>>>>>> (d98) XEN|BUGCHECK: - R14 = 0000000002E39000
>>>>>>>>> (d98) XEN|BUGCHECK: - R15 = 0000000002CBAC40
>>>>>>>>> (d98) XEN|BUGCHECK: STACK:
>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310EA20: (0000000000000003
>>>>>>>>> 00000000038A50F0 00000000038A
>>>>>>>>> (d98) 4860 000000000000007A) xen.sys + 00000000000049AC
>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310EA70: (00000000038AD0D0
>>>>>>>>> 0000000000000000 000000000000
>>>>>>>>> (d98) 0004 0000000002C83500) ntoskrnl.exe + 0000000000128585
>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310EAA0: (00000000038AD0D0
>>>>>>>>> 0000000002C83500 000000000000
>>>>>>>>> (d98) 000F 0000000001780660) ntoskrnl.exe + 0000000000167C0D
>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F170: (0000000003816470
>>>>>>>>> 0000000002B4C8C1 000000000000
>>>>>>>>> (d98) 00FE 0000000000000000) ntoskrnl.exe + 0000000000075CC4
>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F1B0: (000000000000007A
>>>>>>>>> 00000000000171C8 00000000C000
>>>>>>>>> (d98) 0185 000000001BD6A860) ntoskrnl.exe + 00000000000E8752
>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F290: (00000000038163B0
>>>>>>>>> 000000000310F320 0000000002CB
>>>>>>>>> (d98) D540 00000000038163B0) ntoskrnl.exe + 000000000009C91F
>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F360: (0000000000000000
>>>>>>>>> 0000000000000008 00000000FFFF
>>>>>>>>> (d98) FFFF 00000000003500F0) ntoskrnl.exe + 00000000000831B9
>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F4C0: (0000000000000008
>>>>>>>>> 0000000002E39000 000000000000
>>>>>>>>> (d98) 0000 0000000000000000) ntoskrnl.exe + 0000000000073CEE
>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F658: (0000000002E5CFD5
>>>>>>>>> 0000000000000000 0000000003EB
>>>>>>>>> (d98) 8710 00000000FFFFFFFF) ntoskrnl.exe + 000000000042C000
>>>>>>>> If you need more tests/informations tell me and I'll post them.
>>>>>>>> Thanks for any reply and sorry for my bad english.
>>>>>>> Well, that tells me you had a 7A BSOD, which is a
>>>>>> KERNEL_DATA_INPAGE_ERROR. The error status (param 2) was
>> C0000185
>>>> so
>>>>>> that's a STATUS_IO_DEVICE_ERROR. The documentation at
>>>>>> http://msdn.microsoft.com/en-
>>>>>> gb/library/windows/hardware/ff559211%28v=vs.85%29.aspx tells me
>> that
>>>>>> this means:
>>>>>>> "improper termination or defective cabling on SCSI devices or that
>> two
>>>>>> devices are trying to use the same IRQ."
>>>>>>> But you said you had xenvbd already installed so you'll be using a PV
>>>>>> storage path. Is there any indication of problems with your storage?
>>>>>>>       Paul
>>>>>> DomUs disk are all raw files in local dom0 disks, raid1 with "LSI Logic
>>>>>> / Symbios Logic SAS2008 PCI-Express Fusion-MPT SAS-2" dom0
>> partitions
>>>>>> are GTP and fs ext4.
>>>>>> Dom0 is wheezy with kernel is linux-image-3.16-0.bpo.2-amd64 version
>>>>>> 3.16.3-2~bpo70+1
>>>>>> No kern or syslog errors, only many of these warning that someone
>>>>>> replied me that should not be a problem:
>>>>>> Oct 15 10:45:13 mtorMN01OU kernel: [773197.117518] xen:balloon:
>>>>>> reserve_additional_memory: add_memory() failed: -17
>>>>>> DomU now see disk as xen pvdisk, on xenvif install probably still was
>>>>>> full emulated disk even if xenvbd was installed successful before xenvif
>>>>>> install (failed with BSOD)
>>>>>> The IRQ seems visible from xl dmesg output below, can you check
>> them is
>>>>>> have something wrong or strange, I see some of them "duplicate" but I
>>>>>> not know if is correct.
>>>>>>
>>>>>> DomU xl cfg:
>>>>>>> name='office1_w7'
>>>>>>> builder="hvm"
>>>>>>> memory=2048
>>>>>>> vcpus=2
>>>>>>> acpi_s3=0
>>>>>>> acpi_s4=0
>>>>>>> vif=['bridge=xenbr0,mac=00:16:3e:41:ae:8b']
>>>>>>>
>> disk=['/mnt/vm/disks/office1_w7.disk1.xm,raw,hda,rw',',raw,hdb,ro,cdrom'
>>>>>> ]
>>>>>>> boot='c'
>>>>>>> device_model_version="qemu-xen"
>>>>>>> viridian=1
>>>>>>> vnc=0
>>>>>>> keymap="it"
>>>>>>> on_crash="destroy"
>>>>>>> vga="qxl"
>>>>>>> spice=1
>>>>>>> spicehost='0.0.0.0'
>>>>>>> spiceport=6001
>>>>>>> spicedisable_ticketing=0
>>>>>>> spicepasswd="password"
>>>>>>> spicevdagent=1
>>>>>>> spice_clipboard_sharing=0
>>>>>>> spiceusbredirection=4
>>>>>>> soundhw="hda"
>>>>>>> localtime=1
>>>>>> If you need more tests/informations tell me and I'll post them.
>>>>>>
>>>>> Do you have the qemu log (with xen platform logging enabled). This is
>>>> where the PV drivers log failures/warnings.
>>>>>      Paul
>>>>>
>>>>>
>>>> I retried enabling xen platform debug in qemu trace but no add lines in
>>>> log when I try to install xenvif and fails.
>>>> I attach anyway the log if can be useful.
>>> All I can see there is an apparently clean shutdown of domain 101; no sign
>> of XENVIF and no sign of a BSOD.
>>>> I'll also try to restore the backup of this night of the domU when I had
>>>> the BSOD trying reproduce it with xen debug in qemu trace and different
>>>> windows memory dump options.
>>> Ok.
>>>
>>>     Paul
>>>
>> Reproduced it but now with xen platform trace enabled in qemu. (see
>> attachment)
>> Dump of memory instead is not present also in this case (probably
>> because disk is "failed").
> You're using emulate disk in this case. Did your BSOD not indicate that it was dumping?
>
>    Paul
>

I have to time to see if do a dump but I suppose it can't write to disk 
since its driver fails.
Log qemu is not enough? You need the windows memory dump to find and fix 
the bug?
If needed tomorrow I'll do other tests.

_______________________________________________
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 Oct 16 15:04:36 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 16 Oct 2014 15:04: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 1XembT-00047P-No; Thu, 16 Oct 2014 15:04:35 +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 1XembS-00047K-8Y
	for win-pv-devel@lists.xenproject.org; Thu, 16 Oct 2014 15:04:34 +0000
Received: from [85.158.137.68:24679] by server-2.bemta-3.messagelabs.com id
	CE/DF-09149-18EDF345; Thu, 16 Oct 2014 15:04:33 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-14.tower-31.messagelabs.com!1413471871!8708082!1
X-Originating-IP: [74.125.82.44]
X-SpamReason: No, hits=1.7 required=7.0 tests=BIZ_TLD
X-StarScan-Received: 
X-StarScan-Version: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 23789 invoked from network); 16 Oct 2014 15:04:32 -0000
Received: from mail-wg0-f44.google.com (HELO mail-wg0-f44.google.com)
	(74.125.82.44)
	by server-14.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	16 Oct 2014 15:04:32 -0000
Received: by mail-wg0-f44.google.com with SMTP id y10so3934697wgg.27
	for <win-pv-devel@lists.xenproject.org>;
	Thu, 16 Oct 2014 08:04:31 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:message-id:date:from:user-agent:mime-version:to
	:subject:references:in-reply-to:content-type
	:content-transfer-encoding;
	bh=Tj6B54nXoblsR7huUsaY2vjGK5z+IIuqW8KPZsCde0c=;
	b=Q+dkwAxgWeD804r7ZDVlX+XuFTgnkcTOKesULih9E3ZBqGhJkyoy3CPlCd9muUg8mN
	yykH0Gf7yEIAZ/8HFsMf+/afIfGUJQO5tid9ohc8ch79vrsfxDRWBMuw0E7hrde9RDGC
	3UpC0P2jScUDnNFAr2AbyWQLH8PeYfN8ctzQwguAgDwXK+H2/bhGDMoV6b0FHpYnt1GM
	y+8sO8cWobWoxHLtfysSx4K6KGH07oViqddTWIBTEciIhCS63KDQj5ZXvC7iOzhYwad9
	dhjqmXrl440R++OgUchrY2fhK6iaUm1/U0B7OG2a4ebz68u1ECO2WIw426odyTPmqY3l
	Y4Ig==
X-Gm-Message-State: ALoCoQmdIrDudfk3TC2Lan/jfQoU5zbh8/Ks2Z7RSLhaTAGlZpXWfyhz5SWfwVRpGCmyDeE1XemC
X-Received: by 10.194.249.225 with SMTP id yx1mr2695969wjc.79.1413471871527;
	Thu, 16 Oct 2014 08:04:31 -0700 (PDT)
Received: from [192.168.1.15] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by mx.google.com with ESMTPSA id t10sm9984805wja.43.2014.10.16.08.04.29
	for <multiple recipients>
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Thu, 16 Oct 2014 08:04:30 -0700 (PDT)
Message-ID: <543FDE85.1030908@m2r.biz>
Date: Thu, 16 Oct 2014 17:04:37 +0200
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64;
	rv:24.0) Gecko/20100101 Thunderbird/24.6.0
MIME-Version: 1.0
To: Paul Durrant <Paul.Durrant@citrix.com>, 
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <543F887B.5030500@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111050FF@AMSPEX01CL01.citrite.net>
	<543F912C.8000504@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD01110526F@AMSPEX01CL01.citrite.net>
	<543FA4F6.5090804@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111053EA@AMSPEX01CL01.citrite.net>
	<543FCA93.2010805@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111057A2@AMSPEX01CL01.citrite.net>
	<543FDA2D.2090900@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111058E6@AMSPEX01CL01.citrite.net>
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD0111058E6@AMSPEX01CL01.citrite.net>
Subject: Re: [win-pv-devel] Blue screen on xenvif install
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 16/10/2014 16:54, Paul Durrant ha scritto:
>> -----Original Message-----
>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>> Sent: 16 October 2014 15:46
>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>> Subject: Re: Blue screen on xenvif install
>>
>> Il 16/10/2014 15:45, Paul Durrant ha scritto:
>>>> -----Original Message-----
>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>> Sent: 16 October 2014 14:40
>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>>>> Subject: Re: Blue screen on xenvif install
>>>>
>>>> Il 16/10/2014 13:04, Paul Durrant ha scritto:
>>>>>> -----Original Message-----
>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>>>> Sent: 16 October 2014 11:59
>>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>>>>>> Subject: Re: Blue screen on xenvif install
>>>>>>
>>>>>> Il 16/10/2014 12:00, Paul Durrant ha scritto:
>>>>>>>> -----Original Message-----
>>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>>>>>> Sent: 16 October 2014 10:35
>>>>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>>>>>>>> Subject: Re: Blue screen on xenvif install
>>>>>>>>
>>>>>>>> Il 16/10/2014 10:59, Paul Durrant ha scritto:
>>>>>>>>>> -----Original Message-----
>>>>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>>>>>>>> Sent: 16 October 2014 09:58
>>>>>>>>>> To: win-pv-devel@lists.xenproject.org
>>>>>>>>>> Cc: Paul Durrant
>>>>>>>>>> Subject: Blue screen on xenvif install
>>>>>>>>>>
>>>>>>>>>> Today I tried to install new winpv driver to other 3 windows 7 pro
>> 64
>>>>>>>>>> bit domUs.
>>>>>>>>>> Days ago I installed them successful on one windows 7 pro 64 bit
>> and
>>>>>> one
>>>>>>>>>> windows 8.1 enterprise 64 bit.
>>>>>>>>>> On first domUs I tried to install them today I installed xenbus and
>>>>>>>>>> xenvbd successful but on xenvif install windows crashed with blue
>>>>>>>>>> screen, if I saw it correctly was an kernel in-page error or
>> something
>>>>>>>>>> similar.
>>>>>>>>>> After reboot I retried to install xenvif but now always fails.
>>>>>>>>>>
>>>>>>>>> Sounds odd. Do you have a MEMORY.DMP?
>>>>>>>>>
>>>>>>>>>        Paul
>>>>>>>> Windows is setted to write dump of kernel memory on system error
>>>> but
>>>>>>>> %systemroot%\memory.dmp is missed :(
>>>>>>>> I also checked the windows events log but I found only kernel-
>> power
>>>> as
>>>>>>>> critical that seems not contains useful data.
>>>>>>>>
>>>>>>>> I found probably useful data in xl dmesg (I copied all below from
>> domU
>>>>>>>> start to xen bug):
>>>>>>>>> (d98) HVM Loader
>>>>>>>>> (d98) Detected Xen v4.5-unstable
>>>>>>>>> (d98) Xenbus rings @0xfeffc000, event channel 1
>>>>>>>>> (d98) System requested SeaBIOS
>>>>>>>>> (d98) CPU speed is 2660 MHz
>>>>>>>>> (d98) Relocating guest memory for lowmem MMIO space disabled
>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 0 changed 0 -> 5
>>>>>>>>> (d98) PCI-ISA link 0 routed to IRQ5
>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 1 changed 0 -> 10
>>>>>>>>> (d98) PCI-ISA link 1 routed to IRQ10
>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 2 changed 0 -> 11
>>>>>>>>> (d98) PCI-ISA link 2 routed to IRQ11
>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 3 changed 0 -> 5
>>>>>>>>> (d98) PCI-ISA link 3 routed to IRQ5
>>>>>>>>> (d98) pci dev 01:3 INTA->IRQ10
>>>>>>>>> (d98) pci dev 02:0 INTA->IRQ11
>>>>>>>>> (d98) pci dev 03:0 INTA->IRQ5
>>>>>>>>> (d98) pci dev 04:0 INTA->IRQ5
>>>>>>>>> (d98) pci dev 05:0 INTA->IRQ10
>>>>>>>>> (d98) pci dev 06:0 INTA->IRQ11
>>>>>>>>> (d98) pci dev 1d:0 INTA->IRQ10
>>>>>>>>> (d98) pci dev 1d:1 INTB->IRQ11
>>>>>>>>> (d98) pci dev 1d:2 INTC->IRQ5
>>>>>>>>> (d98) pci dev 1d:7 INTD->IRQ5
>>>>>>>>> (d98) No RAM in high memory; setting high_mem resource base to
>>>>>>>> 100000000
>>>>>>>>> (d98) pci dev 05:0 bar 10 size 004000000: 0f0000000
>>>>>>>>> (d98) pci dev 05:0 bar 14 size 004000000: 0f4000000
>>>>>>>>> (d98) pci dev 02:0 bar 14 size 001000000: 0f8000008
>>>>>>>>> (d98) pci dev 06:0 bar 30 size 000040000: 0f9000000
>>>>>>>>> (d98) pci dev 05:0 bar 30 size 000010000: 0f9040000
>>>>>>>>> (d98) pci dev 03:0 bar 10 size 000004000: 0f9050000
>>>>>>>>> (d98) pci dev 05:0 bar 18 size 000002000: 0f9054000
>>>>>>>>> (d98) pci dev 04:0 bar 14 size 000001000: 0f9056000
>>>>>>>>> (d98) pci dev 1d:7 bar 10 size 000001000: 0f9057000
>>>>>>>>> (d98) pci dev 02:0 bar 10 size 000000100: 00000c001
>>>>>>>>> (d98) pci dev 06:0 bar 10 size 000000100: 00000c101
>>>>>>>>> (d98) pci dev 06:0 bar 14 size 000000100: 0f9058000
>>>>>>>>> (d98) pci dev 04:0 bar 10 size 000000020: 00000c201
>>>>>>>>> (d98) pci dev 05:0 bar 1c size 000000020: 00000c221
>>>>>>>>> (d98) pci dev 1d:0 bar 20 size 000000020: 00000c241
>>>>>>>>> (d98) pci dev 1d:1 bar 20 size 000000020: 00000c261
>>>>>>>>> (d98) pci dev 1d:2 bar 20 size 000000020: 00000c281
>>>>>>>>> (d98) pci dev 01:1 bar 20 size 000000010: 00000c2a1
>>>>>>>>> (d98) Multiprocessor initialisation:
>>>>>>>>> (d98)  - CPU0 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8] ...
>>>>>>>>> done.
>>>>>>>>> (d98)  - CPU1 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8] ...
>>>>>>>>> done.
>>>>>>>>> (d98) Testing HVM environment:
>>>>>>>>> (d98)  - REP INSB across page boundaries ... passed
>>>>>>>>> (d98)  - GS base MSRs and SWAPGS ... passed
>>>>>>>>> (d98) Passed 2 of 2 tests
>>>>>>>>> (d98) Writing SMBIOS tables ...
>>>>>>>>> (d98) Loading SeaBIOS ...
>>>>>>>>> (d98) Creating MP tables ...
>>>>>>>>> (d98) Loading ACPI ...
>>>>>>>>> (d98) S3 disabled
>>>>>>>>> (d98) S4 disabled
>>>>>>>>> (d98) vm86 TSS at fc00a100
>>>>>>>>> (d98) BIOS map:
>>>>>>>>> (d98)  10000-100d3: Scratch space
>>>>>>>>> (d98)  c0000-fffff: Main BIOS
>>>>>>>>> (d98) E820 table:
>>>>>>>>> (d98)  [00]: 00000000:00000000 - 00000000:000a0000: RAM
>>>>>>>>> (d98)  HOLE: 00000000:000a0000 - 00000000:000c0000
>>>>>>>>> (d98)  [01]: 00000000:000c0000 - 00000000:00100000: RESERVED
>>>>>>>>> (d98)  [02]: 00000000:00100000 - 00000000:78000000: RAM
>>>>>>>>> (d98)  HOLE: 00000000:78000000 - 00000000:fc000000
>>>>>>>>> (d98)  [03]: 00000000:fc000000 - 00000001:00000000: RESERVED
>>>>>>>>> (d98) Invoking SeaBIOS ...
>>>>>>>>> (d98) SeaBIOS (version
>>>>>>>>> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
>>>>>>>>> (d98)
>>>>>>>>> (d98) Found Xen hypervisor signature at 40000100
>>>>>>>>> (d98) Running on QEMU (i440fx)
>>>>>>>>> (d98) xen: copy e820...
>>>>>>>>> (d98) Relocating init from 0x000df619 to 0x77fae600 (size 71995)
>>>>>>>>> (d98) CPU Mhz=2660
>>>>>>>>> (d98) Found 13 PCI devices (max PCI bus is 00)
>>>>>>>>> (d98) Allocated Xen hypercall page at 77fff000
>>>>>>>>> (d98) Detected Xen v4.5-unstable
>>>>>>>>> (d98) xen: copy BIOS tables...
>>>>>>>>> (d98) Copying SMBIOS entry point from 0x00010010 to 0x000f0f40
>>>>>>>>> (d98) Copying MPTABLE from 0xfc001170/fc001180 to 0x000f0e40
>>>>>>>>> (d98) Copying PIR from 0x00010030 to 0x000f0dc0
>>>>>>>>> (d98) Copying ACPI RSDP from 0x000100b0 to 0x000f0d90
>>>>>>>>> (d98) Using pmtimer, ioport 0xb008
>>>>>>>>> (d98) Scan for VGA option rom
>>>>>>>>> (d98) Running option rom at c000:0003
>>>>>>>>> (XEN) stdvga.c:147:d98v0 entering stdvga and caching modes
>>>>>>>>> (d98) pmm call arg1=0
>>>>>>>>> (d98) Turning on vga text mode console
>>>>>>>>> (d98) SeaBIOS (version
>>>>>>>>> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
>>>>>>>>> (d98) Machine UUID f4cdeb74-0db1-4748-948d-42579a494120
>>>>>>>>> (d98) EHCI init on dev 00:1d.7 (regs=0xf9057020)
>>>>>>>>> (d98) Found 0 lpt ports
>>>>>>>>> (d98) Found 0 serial ports
>>>>>>>>> (d98) ATA controller 1 at 1f0/3f4/0 (irq 14 dev 9)
>>>>>>>>> (d98) ATA controller 2 at 170/374/0 (irq 15 dev 9)
>>>>>>>>> (d98) ata0-0: QEMU HARDDISK ATA-7 Hard-Disk (40720 MiBytes)
>>>>>>>>> (d98) Searching bootorder for: /pci@i0cf8/*@1,1/drive@0/disk@0
>>>>>>>>> (d98) DVD/CD [ata0-1: QEMU DVD-ROM ATAPI-4 DVD/CD]
>>>>>>>>> (d98) Searching bootorder for: /pci@i0cf8/*@1,1/drive@0/disk@1
>>>>>>>>> (d98) UHCI init on dev 00:1d.0 (io=c240)
>>>>>>>>> (d98) UHCI init on dev 00:1d.1 (io=c260)
>>>>>>>>> (d98) UHCI init on dev 00:1d.2 (io=c280)
>>>>>>>>> (d98) PS2 keyboard initialized
>>>>>>>>> (d98) All threads complete.
>>>>>>>>> (d98) Scan for option roms
>>>>>>>>> (d98) Running option rom at c980:0003
>>>>>>>>> (d98) pmm call arg1=1
>>>>>>>>> (d98) pmm call arg1=0
>>>>>>>>> (d98) pmm call arg1=1
>>>>>>>>> (d98) pmm call arg1=0
>>>>>>>>> (d98) Searching bootorder for: /pci@i0cf8/*@6
>>>>>>>>> (d98)
>>>>>>>>> (d98) Press F12 for boot menu.
>>>>>>>>> (d98)
>>>>>>>>> (d98) Searching bootorder for: HALT
>>>>>>>>> (d98) drive 0x000f0d40: PCHS=16383/16/63 translation=lba
>>>>>>>>> LCHS=1024/255/63 s=83394560
>>>>>>>>> (d98) Space available for UMB: ca800-ee800, f0000-f0ce0
>>>>>>>>> (d98) Returned 258048 bytes of ZoneHigh
>>>>>>>>> (d98) e820 map has 6 items:
>>>>>>>>> (d98)   0: 0000000000000000 - 000000000009fc00 = 1 RAM
>>>>>>>>> (d98)   1: 000000000009fc00 - 00000000000a0000 = 2 RESERVED
>>>>>>>>> (d98)   2: 00000000000f0000 - 0000000000100000 = 2 RESERVED
>>>>>>>>> (d98)   3: 0000000000100000 - 0000000077fff000 = 1 RAM
>>>>>>>>> (d98)   4: 0000000077fff000 - 0000000078000000 = 2 RESERVED
>>>>>>>>> (d98)   5: 00000000fc000000 - 0000000100000000 = 2 RESERVED
>>>>>>>>> (d98) enter handle_19:
>>>>>>>>> (d98)   NULL
>>>>>>>>> (d98) Booting from Hard Disk...
>>>>>>>>> (d98) Booting from 0000:7c00
>>>>>>>>> (XEN) d98: VIRIDIAN GUEST_OS_ID: vendor: 1 os: 4 major: 6 minor:
>> 1
>>>> sp:
>>>>>>>>> 1 build: 1db1
>>>>>>>>> (XEN) d98: VIRIDIAN HYPERCALL: enabled: 1 pfn: 3ffff
>>>>>>>>> (XEN) d98v0: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffe
>>>>>>>>> (XEN) d98v1: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffd
>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 0 changed 5 -> 0
>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 1 changed 10 -> 0
>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 2 changed 11 -> 0
>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 3 changed 5 -> 0
>>>>>>>>> (XEN) irq.c:380: Dom98 callback via changed to GSI 24
>>>>>>>>> (d98) XEN|BUGCHECK: ====>
>>>>>>>>> (d98) XEN|BUGCHECK: 0000007A: FFFFF6FC000171C8
>>>> FFFFFFFFC0000185
>>>>>>>>> 000000001BD6A860 FFFF
>>>>>>>>> (d98) F80002E39000
>>>>>>>>> (d98) XEN|BUGCHECK: CONTEXT (FFFFF8800310E530):
>>>>>>>>> (d98) XEN|BUGCHECK: - GS = 002B
>>>>>>>>> (d98) XEN|BUGCHECK: - FS = 0053
>>>>>>>>> (d98) XEN|BUGCHECK: - ES = 002B
>>>>>>>>> (d98) XEN|BUGCHECK: - DS = 002B
>>>>>>>>> (d98) XEN|BUGCHECK: - SS = 0018
>>>>>>>>> (d98) XEN|BUGCHECK: - CS = 0010
>>>>>>>>> (d98) XEN|BUGCHECK: - EFLAGS = 00000086
>>>>>>>>> (d98) XEN|BUGCHECK: - RDI = 00000000000171C8
>>>>>>>>> (d98) XEN|BUGCHECK: - RSI = 00000000C0000185
>>>>>>>>> (d98) XEN|BUGCHECK: - RBX = 00000000038AC8F8
>>>>>>>>> (d98) XEN|BUGCHECK: - RDX = 0000000000000000
>>>>>>>>> (d98) XEN|BUGCHECK: - RCX = 000000000310E530
>>>>>>>>> (d98) XEN|BUGCHECK: - RAX = 000000002ECF4722
>>>>>>>>> (d98) XEN|BUGCHECK: - RBP = 000000001BD6A860
>>>>>>>>> (d98) XEN|BUGCHECK: - RIP = 00000000038A2A43
>>>>>>>>> (d98) XEN|BUGCHECK: - RSP = 000000000310E510
>>>>>>>>> (d98) XEN|BUGCHECK: - R8 = 0000000000000000
>>>>>>>>> (d98) XEN|BUGCHECK: - R9 = 0000000000000000
>>>>>>>>> (d98) XEN|BUGCHECK: - R10 = 0000000000000000
>>>>>>>>> (d98) XEN|BUGCHECK: - R11 = 0000000000000000
>>>>>>>>> (d98) XEN|BUGCHECK: - R12 = 000000000000007A
>>>>>>>>> (d98) XEN|BUGCHECK: - R13 = 0000000000000001
>>>>>>>>> (d98) XEN|BUGCHECK: - R14 = 0000000002E39000
>>>>>>>>> (d98) XEN|BUGCHECK: - R15 = 0000000002CBAC40
>>>>>>>>> (d98) XEN|BUGCHECK: STACK:
>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310EA20: (0000000000000003
>>>>>>>>> 00000000038A50F0 00000000038A
>>>>>>>>> (d98) 4860 000000000000007A) xen.sys + 00000000000049AC
>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310EA70: (00000000038AD0D0
>>>>>>>>> 0000000000000000 000000000000
>>>>>>>>> (d98) 0004 0000000002C83500) ntoskrnl.exe + 0000000000128585
>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310EAA0: (00000000038AD0D0
>>>>>>>>> 0000000002C83500 000000000000
>>>>>>>>> (d98) 000F 0000000001780660) ntoskrnl.exe + 0000000000167C0D
>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F170: (0000000003816470
>>>>>>>>> 0000000002B4C8C1 000000000000
>>>>>>>>> (d98) 00FE 0000000000000000) ntoskrnl.exe + 0000000000075CC4
>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F1B0: (000000000000007A
>>>>>>>>> 00000000000171C8 00000000C000
>>>>>>>>> (d98) 0185 000000001BD6A860) ntoskrnl.exe + 00000000000E8752
>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F290: (00000000038163B0
>>>>>>>>> 000000000310F320 0000000002CB
>>>>>>>>> (d98) D540 00000000038163B0) ntoskrnl.exe + 000000000009C91F
>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F360: (0000000000000000
>>>>>>>>> 0000000000000008 00000000FFFF
>>>>>>>>> (d98) FFFF 00000000003500F0) ntoskrnl.exe + 00000000000831B9
>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F4C0: (0000000000000008
>>>>>>>>> 0000000002E39000 000000000000
>>>>>>>>> (d98) 0000 0000000000000000) ntoskrnl.exe + 0000000000073CEE
>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F658: (0000000002E5CFD5
>>>>>>>>> 0000000000000000 0000000003EB
>>>>>>>>> (d98) 8710 00000000FFFFFFFF) ntoskrnl.exe + 000000000042C000
>>>>>>>> If you need more tests/informations tell me and I'll post them.
>>>>>>>> Thanks for any reply and sorry for my bad english.
>>>>>>> Well, that tells me you had a 7A BSOD, which is a
>>>>>> KERNEL_DATA_INPAGE_ERROR. The error status (param 2) was
>> C0000185
>>>> so
>>>>>> that's a STATUS_IO_DEVICE_ERROR. The documentation at
>>>>>> http://msdn.microsoft.com/en-
>>>>>> gb/library/windows/hardware/ff559211%28v=vs.85%29.aspx tells me
>> that
>>>>>> this means:
>>>>>>> "improper termination or defective cabling on SCSI devices or that
>> two
>>>>>> devices are trying to use the same IRQ."
>>>>>>> But you said you had xenvbd already installed so you'll be using a PV
>>>>>> storage path. Is there any indication of problems with your storage?
>>>>>>>       Paul
>>>>>> DomUs disk are all raw files in local dom0 disks, raid1 with "LSI Logic
>>>>>> / Symbios Logic SAS2008 PCI-Express Fusion-MPT SAS-2" dom0
>> partitions
>>>>>> are GTP and fs ext4.
>>>>>> Dom0 is wheezy with kernel is linux-image-3.16-0.bpo.2-amd64 version
>>>>>> 3.16.3-2~bpo70+1
>>>>>> No kern or syslog errors, only many of these warning that someone
>>>>>> replied me that should not be a problem:
>>>>>> Oct 15 10:45:13 mtorMN01OU kernel: [773197.117518] xen:balloon:
>>>>>> reserve_additional_memory: add_memory() failed: -17
>>>>>> DomU now see disk as xen pvdisk, on xenvif install probably still was
>>>>>> full emulated disk even if xenvbd was installed successful before xenvif
>>>>>> install (failed with BSOD)
>>>>>> The IRQ seems visible from xl dmesg output below, can you check
>> them is
>>>>>> have something wrong or strange, I see some of them "duplicate" but I
>>>>>> not know if is correct.
>>>>>>
>>>>>> DomU xl cfg:
>>>>>>> name='office1_w7'
>>>>>>> builder="hvm"
>>>>>>> memory=2048
>>>>>>> vcpus=2
>>>>>>> acpi_s3=0
>>>>>>> acpi_s4=0
>>>>>>> vif=['bridge=xenbr0,mac=00:16:3e:41:ae:8b']
>>>>>>>
>> disk=['/mnt/vm/disks/office1_w7.disk1.xm,raw,hda,rw',',raw,hdb,ro,cdrom'
>>>>>> ]
>>>>>>> boot='c'
>>>>>>> device_model_version="qemu-xen"
>>>>>>> viridian=1
>>>>>>> vnc=0
>>>>>>> keymap="it"
>>>>>>> on_crash="destroy"
>>>>>>> vga="qxl"
>>>>>>> spice=1
>>>>>>> spicehost='0.0.0.0'
>>>>>>> spiceport=6001
>>>>>>> spicedisable_ticketing=0
>>>>>>> spicepasswd="password"
>>>>>>> spicevdagent=1
>>>>>>> spice_clipboard_sharing=0
>>>>>>> spiceusbredirection=4
>>>>>>> soundhw="hda"
>>>>>>> localtime=1
>>>>>> If you need more tests/informations tell me and I'll post them.
>>>>>>
>>>>> Do you have the qemu log (with xen platform logging enabled). This is
>>>> where the PV drivers log failures/warnings.
>>>>>      Paul
>>>>>
>>>>>
>>>> I retried enabling xen platform debug in qemu trace but no add lines in
>>>> log when I try to install xenvif and fails.
>>>> I attach anyway the log if can be useful.
>>> All I can see there is an apparently clean shutdown of domain 101; no sign
>> of XENVIF and no sign of a BSOD.
>>>> I'll also try to restore the backup of this night of the domU when I had
>>>> the BSOD trying reproduce it with xen debug in qemu trace and different
>>>> windows memory dump options.
>>> Ok.
>>>
>>>     Paul
>>>
>> Reproduced it but now with xen platform trace enabled in qemu. (see
>> attachment)
>> Dump of memory instead is not present also in this case (probably
>> because disk is "failed").
> You're using emulate disk in this case. Did your BSOD not indicate that it was dumping?
>
>    Paul
>

I have to time to see if do a dump but I suppose it can't write to disk 
since its driver fails.
Log qemu is not enough? You need the windows memory dump to find and fix 
the bug?
If needed tomorrow I'll do other tests.

_______________________________________________
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 Oct 16 15:58:08 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 16 Oct 2014 15:58:08 +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 1XenRI-0006to-Jh; Thu, 16 Oct 2014 15:58:08 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <Paul.Durrant@citrix.com>) id 1XenRE-0006tY-JJ
	for win-pv-devel@lists.xenproject.org; Thu, 16 Oct 2014 15:58:07 +0000
Received: from [193.109.254.147:45675] by server-14.bemta-14.messagelabs.com
	id 4E/4E-18345-B0BEF345; Thu, 16 Oct 2014 15:58:03 +0000
X-Env-Sender: Paul.Durrant@citrix.com
X-Msg-Ref: server-4.tower-27.messagelabs.com!1413475082!13239530!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: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 14515 invoked from network); 16 Oct 2014 15:58:02 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-4.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	16 Oct 2014 15:58:02 -0000
X-IronPort-AV: E=Sophos;i="5.04,733,1406592000"; d="scan'208";a="26022857"
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: [win-pv-devel] Blue screen on xenvif install
Thread-Index: AQHP6R88TE2eCcEtSU6laq0K5grY5pwybJlQ///obQCAACb2gP//8KIAgAAjAsCAAAnUgIAAIsDw///v2YAABHezEP//4XCA///QCHA=
Date: Thu, 16 Oct 2014 15:58:01 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD011105A08@AMSPEX01CL01.citrite.net>
References: <543F887B.5030500@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111050FF@AMSPEX01CL01.citrite.net>
	<543F912C.8000504@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD01110526F@AMSPEX01CL01.citrite.net>
	<543FA4F6.5090804@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111053EA@AMSPEX01CL01.citrite.net>
	<543FCA93.2010805@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111057A2@AMSPEX01CL01.citrite.net>
	<543FDA2D.2090900@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111058E6@AMSPEX01CL01.citrite.net>
	<543FDE85.1030908@m2r.biz>
In-Reply-To: <543FDE85.1030908@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] Blue screen on xenvif install
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 Fabio Fantoni
> Sent: 16 October 2014 16:05
> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> Subject: Re: [win-pv-devel] Blue screen on xenvif install
> 
> Il 16/10/2014 16:54, Paul Durrant ha scritto:
> >> -----Original Message-----
> >> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >> Sent: 16 October 2014 15:46
> >> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >> Subject: Re: Blue screen on xenvif install
> >>
> >> Il 16/10/2014 15:45, Paul Durrant ha scritto:
> >>>> -----Original Message-----
> >>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >>>> Sent: 16 October 2014 14:40
> >>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >>>> Subject: Re: Blue screen on xenvif install
> >>>>
> >>>> Il 16/10/2014 13:04, Paul Durrant ha scritto:
> >>>>>> -----Original Message-----
> >>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >>>>>> Sent: 16 October 2014 11:59
> >>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >>>>>> Subject: Re: Blue screen on xenvif install
> >>>>>>
> >>>>>> Il 16/10/2014 12:00, Paul Durrant ha scritto:
> >>>>>>>> -----Original Message-----
> >>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >>>>>>>> Sent: 16 October 2014 10:35
> >>>>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >>>>>>>> Subject: Re: Blue screen on xenvif install
> >>>>>>>>
> >>>>>>>> Il 16/10/2014 10:59, Paul Durrant ha scritto:
> >>>>>>>>>> -----Original Message-----
> >>>>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >>>>>>>>>> Sent: 16 October 2014 09:58
> >>>>>>>>>> To: win-pv-devel@lists.xenproject.org
> >>>>>>>>>> Cc: Paul Durrant
> >>>>>>>>>> Subject: Blue screen on xenvif install
> >>>>>>>>>>
> >>>>>>>>>> Today I tried to install new winpv driver to other 3 windows 7
> pro
> >> 64
> >>>>>>>>>> bit domUs.
> >>>>>>>>>> Days ago I installed them successful on one windows 7 pro 64
> bit
> >> and
> >>>>>> one
> >>>>>>>>>> windows 8.1 enterprise 64 bit.
> >>>>>>>>>> On first domUs I tried to install them today I installed xenbus
> and
> >>>>>>>>>> xenvbd successful but on xenvif install windows crashed with
> blue
> >>>>>>>>>> screen, if I saw it correctly was an kernel in-page error or
> >> something
> >>>>>>>>>> similar.
> >>>>>>>>>> After reboot I retried to install xenvif but now always fails.
> >>>>>>>>>>
> >>>>>>>>> Sounds odd. Do you have a MEMORY.DMP?
> >>>>>>>>>
> >>>>>>>>>        Paul
> >>>>>>>> Windows is setted to write dump of kernel memory on system
> error
> >>>> but
> >>>>>>>> %systemroot%\memory.dmp is missed :(
> >>>>>>>> I also checked the windows events log but I found only kernel-
> >> power
> >>>> as
> >>>>>>>> critical that seems not contains useful data.
> >>>>>>>>
> >>>>>>>> I found probably useful data in xl dmesg (I copied all below from
> >> domU
> >>>>>>>> start to xen bug):
> >>>>>>>>> (d98) HVM Loader
> >>>>>>>>> (d98) Detected Xen v4.5-unstable
> >>>>>>>>> (d98) Xenbus rings @0xfeffc000, event channel 1
> >>>>>>>>> (d98) System requested SeaBIOS
> >>>>>>>>> (d98) CPU speed is 2660 MHz
> >>>>>>>>> (d98) Relocating guest memory for lowmem MMIO space
> disabled
> >>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 0 changed 0 -> 5
> >>>>>>>>> (d98) PCI-ISA link 0 routed to IRQ5
> >>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 1 changed 0 -> 10
> >>>>>>>>> (d98) PCI-ISA link 1 routed to IRQ10
> >>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 2 changed 0 -> 11
> >>>>>>>>> (d98) PCI-ISA link 2 routed to IRQ11
> >>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 3 changed 0 -> 5
> >>>>>>>>> (d98) PCI-ISA link 3 routed to IRQ5
> >>>>>>>>> (d98) pci dev 01:3 INTA->IRQ10
> >>>>>>>>> (d98) pci dev 02:0 INTA->IRQ11
> >>>>>>>>> (d98) pci dev 03:0 INTA->IRQ5
> >>>>>>>>> (d98) pci dev 04:0 INTA->IRQ5
> >>>>>>>>> (d98) pci dev 05:0 INTA->IRQ10
> >>>>>>>>> (d98) pci dev 06:0 INTA->IRQ11
> >>>>>>>>> (d98) pci dev 1d:0 INTA->IRQ10
> >>>>>>>>> (d98) pci dev 1d:1 INTB->IRQ11
> >>>>>>>>> (d98) pci dev 1d:2 INTC->IRQ5
> >>>>>>>>> (d98) pci dev 1d:7 INTD->IRQ5
> >>>>>>>>> (d98) No RAM in high memory; setting high_mem resource base
> to
> >>>>>>>> 100000000
> >>>>>>>>> (d98) pci dev 05:0 bar 10 size 004000000: 0f0000000
> >>>>>>>>> (d98) pci dev 05:0 bar 14 size 004000000: 0f4000000
> >>>>>>>>> (d98) pci dev 02:0 bar 14 size 001000000: 0f8000008
> >>>>>>>>> (d98) pci dev 06:0 bar 30 size 000040000: 0f9000000
> >>>>>>>>> (d98) pci dev 05:0 bar 30 size 000010000: 0f9040000
> >>>>>>>>> (d98) pci dev 03:0 bar 10 size 000004000: 0f9050000
> >>>>>>>>> (d98) pci dev 05:0 bar 18 size 000002000: 0f9054000
> >>>>>>>>> (d98) pci dev 04:0 bar 14 size 000001000: 0f9056000
> >>>>>>>>> (d98) pci dev 1d:7 bar 10 size 000001000: 0f9057000
> >>>>>>>>> (d98) pci dev 02:0 bar 10 size 000000100: 00000c001
> >>>>>>>>> (d98) pci dev 06:0 bar 10 size 000000100: 00000c101
> >>>>>>>>> (d98) pci dev 06:0 bar 14 size 000000100: 0f9058000
> >>>>>>>>> (d98) pci dev 04:0 bar 10 size 000000020: 00000c201
> >>>>>>>>> (d98) pci dev 05:0 bar 1c size 000000020: 00000c221
> >>>>>>>>> (d98) pci dev 1d:0 bar 20 size 000000020: 00000c241
> >>>>>>>>> (d98) pci dev 1d:1 bar 20 size 000000020: 00000c261
> >>>>>>>>> (d98) pci dev 1d:2 bar 20 size 000000020: 00000c281
> >>>>>>>>> (d98) pci dev 01:1 bar 20 size 000000010: 00000c2a1
> >>>>>>>>> (d98) Multiprocessor initialisation:
> >>>>>>>>> (d98)  - CPU0 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8] ...
> >>>>>>>>> done.
> >>>>>>>>> (d98)  - CPU1 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8] ...
> >>>>>>>>> done.
> >>>>>>>>> (d98) Testing HVM environment:
> >>>>>>>>> (d98)  - REP INSB across page boundaries ... passed
> >>>>>>>>> (d98)  - GS base MSRs and SWAPGS ... passed
> >>>>>>>>> (d98) Passed 2 of 2 tests
> >>>>>>>>> (d98) Writing SMBIOS tables ...
> >>>>>>>>> (d98) Loading SeaBIOS ...
> >>>>>>>>> (d98) Creating MP tables ...
> >>>>>>>>> (d98) Loading ACPI ...
> >>>>>>>>> (d98) S3 disabled
> >>>>>>>>> (d98) S4 disabled
> >>>>>>>>> (d98) vm86 TSS at fc00a100
> >>>>>>>>> (d98) BIOS map:
> >>>>>>>>> (d98)  10000-100d3: Scratch space
> >>>>>>>>> (d98)  c0000-fffff: Main BIOS
> >>>>>>>>> (d98) E820 table:
> >>>>>>>>> (d98)  [00]: 00000000:00000000 - 00000000:000a0000: RAM
> >>>>>>>>> (d98)  HOLE: 00000000:000a0000 - 00000000:000c0000
> >>>>>>>>> (d98)  [01]: 00000000:000c0000 - 00000000:00100000: RESERVED
> >>>>>>>>> (d98)  [02]: 00000000:00100000 - 00000000:78000000: RAM
> >>>>>>>>> (d98)  HOLE: 00000000:78000000 - 00000000:fc000000
> >>>>>>>>> (d98)  [03]: 00000000:fc000000 - 00000001:00000000: RESERVED
> >>>>>>>>> (d98) Invoking SeaBIOS ...
> >>>>>>>>> (d98) SeaBIOS (version
> >>>>>>>>> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
> >>>>>>>>> (d98)
> >>>>>>>>> (d98) Found Xen hypervisor signature at 40000100
> >>>>>>>>> (d98) Running on QEMU (i440fx)
> >>>>>>>>> (d98) xen: copy e820...
> >>>>>>>>> (d98) Relocating init from 0x000df619 to 0x77fae600 (size 71995)
> >>>>>>>>> (d98) CPU Mhz=2660
> >>>>>>>>> (d98) Found 13 PCI devices (max PCI bus is 00)
> >>>>>>>>> (d98) Allocated Xen hypercall page at 77fff000
> >>>>>>>>> (d98) Detected Xen v4.5-unstable
> >>>>>>>>> (d98) xen: copy BIOS tables...
> >>>>>>>>> (d98) Copying SMBIOS entry point from 0x00010010 to
> 0x000f0f40
> >>>>>>>>> (d98) Copying MPTABLE from 0xfc001170/fc001180 to 0x000f0e40
> >>>>>>>>> (d98) Copying PIR from 0x00010030 to 0x000f0dc0
> >>>>>>>>> (d98) Copying ACPI RSDP from 0x000100b0 to 0x000f0d90
> >>>>>>>>> (d98) Using pmtimer, ioport 0xb008
> >>>>>>>>> (d98) Scan for VGA option rom
> >>>>>>>>> (d98) Running option rom at c000:0003
> >>>>>>>>> (XEN) stdvga.c:147:d98v0 entering stdvga and caching modes
> >>>>>>>>> (d98) pmm call arg1=0
> >>>>>>>>> (d98) Turning on vga text mode console
> >>>>>>>>> (d98) SeaBIOS (version
> >>>>>>>>> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
> >>>>>>>>> (d98) Machine UUID f4cdeb74-0db1-4748-948d-42579a494120
> >>>>>>>>> (d98) EHCI init on dev 00:1d.7 (regs=0xf9057020)
> >>>>>>>>> (d98) Found 0 lpt ports
> >>>>>>>>> (d98) Found 0 serial ports
> >>>>>>>>> (d98) ATA controller 1 at 1f0/3f4/0 (irq 14 dev 9)
> >>>>>>>>> (d98) ATA controller 2 at 170/374/0 (irq 15 dev 9)
> >>>>>>>>> (d98) ata0-0: QEMU HARDDISK ATA-7 Hard-Disk (40720 MiBytes)
> >>>>>>>>> (d98) Searching bootorder for:
> /pci@i0cf8/*@1,1/drive@0/disk@0
> >>>>>>>>> (d98) DVD/CD [ata0-1: QEMU DVD-ROM ATAPI-4 DVD/CD]
> >>>>>>>>> (d98) Searching bootorder for:
> /pci@i0cf8/*@1,1/drive@0/disk@1
> >>>>>>>>> (d98) UHCI init on dev 00:1d.0 (io=c240)
> >>>>>>>>> (d98) UHCI init on dev 00:1d.1 (io=c260)
> >>>>>>>>> (d98) UHCI init on dev 00:1d.2 (io=c280)
> >>>>>>>>> (d98) PS2 keyboard initialized
> >>>>>>>>> (d98) All threads complete.
> >>>>>>>>> (d98) Scan for option roms
> >>>>>>>>> (d98) Running option rom at c980:0003
> >>>>>>>>> (d98) pmm call arg1=1
> >>>>>>>>> (d98) pmm call arg1=0
> >>>>>>>>> (d98) pmm call arg1=1
> >>>>>>>>> (d98) pmm call arg1=0
> >>>>>>>>> (d98) Searching bootorder for: /pci@i0cf8/*@6
> >>>>>>>>> (d98)
> >>>>>>>>> (d98) Press F12 for boot menu.
> >>>>>>>>> (d98)
> >>>>>>>>> (d98) Searching bootorder for: HALT
> >>>>>>>>> (d98) drive 0x000f0d40: PCHS=16383/16/63 translation=lba
> >>>>>>>>> LCHS=1024/255/63 s=83394560
> >>>>>>>>> (d98) Space available for UMB: ca800-ee800, f0000-f0ce0
> >>>>>>>>> (d98) Returned 258048 bytes of ZoneHigh
> >>>>>>>>> (d98) e820 map has 6 items:
> >>>>>>>>> (d98)   0: 0000000000000000 - 000000000009fc00 = 1 RAM
> >>>>>>>>> (d98)   1: 000000000009fc00 - 00000000000a0000 = 2 RESERVED
> >>>>>>>>> (d98)   2: 00000000000f0000 - 0000000000100000 = 2 RESERVED
> >>>>>>>>> (d98)   3: 0000000000100000 - 0000000077fff000 = 1 RAM
> >>>>>>>>> (d98)   4: 0000000077fff000 - 0000000078000000 = 2 RESERVED
> >>>>>>>>> (d98)   5: 00000000fc000000 - 0000000100000000 = 2 RESERVED
> >>>>>>>>> (d98) enter handle_19:
> >>>>>>>>> (d98)   NULL
> >>>>>>>>> (d98) Booting from Hard Disk...
> >>>>>>>>> (d98) Booting from 0000:7c00
> >>>>>>>>> (XEN) d98: VIRIDIAN GUEST_OS_ID: vendor: 1 os: 4 major: 6
> minor:
> >> 1
> >>>> sp:
> >>>>>>>>> 1 build: 1db1
> >>>>>>>>> (XEN) d98: VIRIDIAN HYPERCALL: enabled: 1 pfn: 3ffff
> >>>>>>>>> (XEN) d98v0: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffe
> >>>>>>>>> (XEN) d98v1: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffd
> >>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 0 changed 5 -> 0
> >>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 1 changed 10 -> 0
> >>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 2 changed 11 -> 0
> >>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 3 changed 5 -> 0
> >>>>>>>>> (XEN) irq.c:380: Dom98 callback via changed to GSI 24
> >>>>>>>>> (d98) XEN|BUGCHECK: ====>
> >>>>>>>>> (d98) XEN|BUGCHECK: 0000007A: FFFFF6FC000171C8
> >>>> FFFFFFFFC0000185
> >>>>>>>>> 000000001BD6A860 FFFF
> >>>>>>>>> (d98) F80002E39000
> >>>>>>>>> (d98) XEN|BUGCHECK: CONTEXT (FFFFF8800310E530):
> >>>>>>>>> (d98) XEN|BUGCHECK: - GS = 002B
> >>>>>>>>> (d98) XEN|BUGCHECK: - FS = 0053
> >>>>>>>>> (d98) XEN|BUGCHECK: - ES = 002B
> >>>>>>>>> (d98) XEN|BUGCHECK: - DS = 002B
> >>>>>>>>> (d98) XEN|BUGCHECK: - SS = 0018
> >>>>>>>>> (d98) XEN|BUGCHECK: - CS = 0010
> >>>>>>>>> (d98) XEN|BUGCHECK: - EFLAGS = 00000086
> >>>>>>>>> (d98) XEN|BUGCHECK: - RDI = 00000000000171C8
> >>>>>>>>> (d98) XEN|BUGCHECK: - RSI = 00000000C0000185
> >>>>>>>>> (d98) XEN|BUGCHECK: - RBX = 00000000038AC8F8
> >>>>>>>>> (d98) XEN|BUGCHECK: - RDX = 0000000000000000
> >>>>>>>>> (d98) XEN|BUGCHECK: - RCX = 000000000310E530
> >>>>>>>>> (d98) XEN|BUGCHECK: - RAX = 000000002ECF4722
> >>>>>>>>> (d98) XEN|BUGCHECK: - RBP = 000000001BD6A860
> >>>>>>>>> (d98) XEN|BUGCHECK: - RIP = 00000000038A2A43
> >>>>>>>>> (d98) XEN|BUGCHECK: - RSP = 000000000310E510
> >>>>>>>>> (d98) XEN|BUGCHECK: - R8 = 0000000000000000
> >>>>>>>>> (d98) XEN|BUGCHECK: - R9 = 0000000000000000
> >>>>>>>>> (d98) XEN|BUGCHECK: - R10 = 0000000000000000
> >>>>>>>>> (d98) XEN|BUGCHECK: - R11 = 0000000000000000
> >>>>>>>>> (d98) XEN|BUGCHECK: - R12 = 000000000000007A
> >>>>>>>>> (d98) XEN|BUGCHECK: - R13 = 0000000000000001
> >>>>>>>>> (d98) XEN|BUGCHECK: - R14 = 0000000002E39000
> >>>>>>>>> (d98) XEN|BUGCHECK: - R15 = 0000000002CBAC40
> >>>>>>>>> (d98) XEN|BUGCHECK: STACK:
> >>>>>>>>> (d98) XEN|BUGCHECK: 000000000310EA20: (0000000000000003
> >>>>>>>>> 00000000038A50F0 00000000038A
> >>>>>>>>> (d98) 4860 000000000000007A) xen.sys + 00000000000049AC
> >>>>>>>>> (d98) XEN|BUGCHECK: 000000000310EA70: (00000000038AD0D0
> >>>>>>>>> 0000000000000000 000000000000
> >>>>>>>>> (d98) 0004 0000000002C83500) ntoskrnl.exe + 0000000000128585
> >>>>>>>>> (d98) XEN|BUGCHECK: 000000000310EAA0: (00000000038AD0D0
> >>>>>>>>> 0000000002C83500 000000000000
> >>>>>>>>> (d98) 000F 0000000001780660) ntoskrnl.exe + 0000000000167C0D
> >>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F170: (0000000003816470
> >>>>>>>>> 0000000002B4C8C1 000000000000
> >>>>>>>>> (d98) 00FE 0000000000000000) ntoskrnl.exe + 0000000000075CC4
> >>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F1B0: (000000000000007A
> >>>>>>>>> 00000000000171C8 00000000C000
> >>>>>>>>> (d98) 0185 000000001BD6A860) ntoskrnl.exe + 00000000000E8752
> >>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F290: (00000000038163B0
> >>>>>>>>> 000000000310F320 0000000002CB
> >>>>>>>>> (d98) D540 00000000038163B0) ntoskrnl.exe + 000000000009C91F
> >>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F360: (0000000000000000
> >>>>>>>>> 0000000000000008 00000000FFFF
> >>>>>>>>> (d98) FFFF 00000000003500F0) ntoskrnl.exe + 00000000000831B9
> >>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F4C0: (0000000000000008
> >>>>>>>>> 0000000002E39000 000000000000
> >>>>>>>>> (d98) 0000 0000000000000000) ntoskrnl.exe + 0000000000073CEE
> >>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F658: (0000000002E5CFD5
> >>>>>>>>> 0000000000000000 0000000003EB
> >>>>>>>>> (d98) 8710 00000000FFFFFFFF) ntoskrnl.exe + 000000000042C000
> >>>>>>>> If you need more tests/informations tell me and I'll post them.
> >>>>>>>> Thanks for any reply and sorry for my bad english.
> >>>>>>> Well, that tells me you had a 7A BSOD, which is a
> >>>>>> KERNEL_DATA_INPAGE_ERROR. The error status (param 2) was
> >> C0000185
> >>>> so
> >>>>>> that's a STATUS_IO_DEVICE_ERROR. The documentation at
> >>>>>> http://msdn.microsoft.com/en-
> >>>>>> gb/library/windows/hardware/ff559211%28v=vs.85%29.aspx tells
> me
> >> that
> >>>>>> this means:
> >>>>>>> "improper termination or defective cabling on SCSI devices or that
> >> two
> >>>>>> devices are trying to use the same IRQ."
> >>>>>>> But you said you had xenvbd already installed so you'll be using a
> PV
> >>>>>> storage path. Is there any indication of problems with your storage?
> >>>>>>>       Paul
> >>>>>> DomUs disk are all raw files in local dom0 disks, raid1 with "LSI Logic
> >>>>>> / Symbios Logic SAS2008 PCI-Express Fusion-MPT SAS-2" dom0
> >> partitions
> >>>>>> are GTP and fs ext4.
> >>>>>> Dom0 is wheezy with kernel is linux-image-3.16-0.bpo.2-amd64
> version
> >>>>>> 3.16.3-2~bpo70+1
> >>>>>> No kern or syslog errors, only many of these warning that someone
> >>>>>> replied me that should not be a problem:
> >>>>>> Oct 15 10:45:13 mtorMN01OU kernel: [773197.117518] xen:balloon:
> >>>>>> reserve_additional_memory: add_memory() failed: -17
> >>>>>> DomU now see disk as xen pvdisk, on xenvif install probably still was
> >>>>>> full emulated disk even if xenvbd was installed successful before
> xenvif
> >>>>>> install (failed with BSOD)
> >>>>>> The IRQ seems visible from xl dmesg output below, can you check
> >> them is
> >>>>>> have something wrong or strange, I see some of them "duplicate"
> but I
> >>>>>> not know if is correct.
> >>>>>>
> >>>>>> DomU xl cfg:
> >>>>>>> name='office1_w7'
> >>>>>>> builder="hvm"
> >>>>>>> memory=2048
> >>>>>>> vcpus=2
> >>>>>>> acpi_s3=0
> >>>>>>> acpi_s4=0
> >>>>>>> vif=['bridge=xenbr0,mac=00:16:3e:41:ae:8b']
> >>>>>>>
> >>
> disk=['/mnt/vm/disks/office1_w7.disk1.xm,raw,hda,rw',',raw,hdb,ro,cdrom'
> >>>>>> ]
> >>>>>>> boot='c'
> >>>>>>> device_model_version="qemu-xen"
> >>>>>>> viridian=1
> >>>>>>> vnc=0
> >>>>>>> keymap="it"
> >>>>>>> on_crash="destroy"
> >>>>>>> vga="qxl"
> >>>>>>> spice=1
> >>>>>>> spicehost='0.0.0.0'
> >>>>>>> spiceport=6001
> >>>>>>> spicedisable_ticketing=0
> >>>>>>> spicepasswd="password"
> >>>>>>> spicevdagent=1
> >>>>>>> spice_clipboard_sharing=0
> >>>>>>> spiceusbredirection=4
> >>>>>>> soundhw="hda"
> >>>>>>> localtime=1
> >>>>>> If you need more tests/informations tell me and I'll post them.
> >>>>>>
> >>>>> Do you have the qemu log (with xen platform logging enabled). This is
> >>>> where the PV drivers log failures/warnings.
> >>>>>      Paul
> >>>>>
> >>>>>
> >>>> I retried enabling xen platform debug in qemu trace but no add lines in
> >>>> log when I try to install xenvif and fails.
> >>>> I attach anyway the log if can be useful.
> >>> All I can see there is an apparently clean shutdown of domain 101; no
> sign
> >> of XENVIF and no sign of a BSOD.
> >>>> I'll also try to restore the backup of this night of the domU when I had
> >>>> the BSOD trying reproduce it with xen debug in qemu trace and
> different
> >>>> windows memory dump options.
> >>> Ok.
> >>>
> >>>     Paul
> >>>
> >> Reproduced it but now with xen platform trace enabled in qemu. (see
> >> attachment)
> >> Dump of memory instead is not present also in this case (probably
> >> because disk is "failed").
> > You're using emulate disk in this case. Did your BSOD not indicate that it
> was dumping?
> >
> >    Paul
> >
> 
> I have to time to see if do a dump but I suppose it can't write to disk
> since its driver fails.
> Log qemu is not enough? You need the windows memory dump to find and
> fix
> the bug?

I don't know what the bug is. My guess is that it's a deadlock somewhere which is causing Windows to believe there's a storage issue, but since the stack is entirely in the kernel and without a crashdump I cannot decode to symbols there's not much more I can do unless I happen to repro.

  Paul

> If needed tomorrow I'll do other tests.
> 
> _______________________________________________
> 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 Oct 16 15:58:08 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 16 Oct 2014 15:58:08 +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 1XenRI-0006to-Jh; Thu, 16 Oct 2014 15:58:08 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <Paul.Durrant@citrix.com>) id 1XenRE-0006tY-JJ
	for win-pv-devel@lists.xenproject.org; Thu, 16 Oct 2014 15:58:07 +0000
Received: from [193.109.254.147:45675] by server-14.bemta-14.messagelabs.com
	id 4E/4E-18345-B0BEF345; Thu, 16 Oct 2014 15:58:03 +0000
X-Env-Sender: Paul.Durrant@citrix.com
X-Msg-Ref: server-4.tower-27.messagelabs.com!1413475082!13239530!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: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 14515 invoked from network); 16 Oct 2014 15:58:02 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-4.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	16 Oct 2014 15:58:02 -0000
X-IronPort-AV: E=Sophos;i="5.04,733,1406592000"; d="scan'208";a="26022857"
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: [win-pv-devel] Blue screen on xenvif install
Thread-Index: AQHP6R88TE2eCcEtSU6laq0K5grY5pwybJlQ///obQCAACb2gP//8KIAgAAjAsCAAAnUgIAAIsDw///v2YAABHezEP//4XCA///QCHA=
Date: Thu, 16 Oct 2014 15:58:01 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD011105A08@AMSPEX01CL01.citrite.net>
References: <543F887B.5030500@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111050FF@AMSPEX01CL01.citrite.net>
	<543F912C.8000504@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD01110526F@AMSPEX01CL01.citrite.net>
	<543FA4F6.5090804@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111053EA@AMSPEX01CL01.citrite.net>
	<543FCA93.2010805@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111057A2@AMSPEX01CL01.citrite.net>
	<543FDA2D.2090900@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111058E6@AMSPEX01CL01.citrite.net>
	<543FDE85.1030908@m2r.biz>
In-Reply-To: <543FDE85.1030908@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] Blue screen on xenvif install
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 Fabio Fantoni
> Sent: 16 October 2014 16:05
> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> Subject: Re: [win-pv-devel] Blue screen on xenvif install
> 
> Il 16/10/2014 16:54, Paul Durrant ha scritto:
> >> -----Original Message-----
> >> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >> Sent: 16 October 2014 15:46
> >> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >> Subject: Re: Blue screen on xenvif install
> >>
> >> Il 16/10/2014 15:45, Paul Durrant ha scritto:
> >>>> -----Original Message-----
> >>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >>>> Sent: 16 October 2014 14:40
> >>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >>>> Subject: Re: Blue screen on xenvif install
> >>>>
> >>>> Il 16/10/2014 13:04, Paul Durrant ha scritto:
> >>>>>> -----Original Message-----
> >>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >>>>>> Sent: 16 October 2014 11:59
> >>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >>>>>> Subject: Re: Blue screen on xenvif install
> >>>>>>
> >>>>>> Il 16/10/2014 12:00, Paul Durrant ha scritto:
> >>>>>>>> -----Original Message-----
> >>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >>>>>>>> Sent: 16 October 2014 10:35
> >>>>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >>>>>>>> Subject: Re: Blue screen on xenvif install
> >>>>>>>>
> >>>>>>>> Il 16/10/2014 10:59, Paul Durrant ha scritto:
> >>>>>>>>>> -----Original Message-----
> >>>>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >>>>>>>>>> Sent: 16 October 2014 09:58
> >>>>>>>>>> To: win-pv-devel@lists.xenproject.org
> >>>>>>>>>> Cc: Paul Durrant
> >>>>>>>>>> Subject: Blue screen on xenvif install
> >>>>>>>>>>
> >>>>>>>>>> Today I tried to install new winpv driver to other 3 windows 7
> pro
> >> 64
> >>>>>>>>>> bit domUs.
> >>>>>>>>>> Days ago I installed them successful on one windows 7 pro 64
> bit
> >> and
> >>>>>> one
> >>>>>>>>>> windows 8.1 enterprise 64 bit.
> >>>>>>>>>> On first domUs I tried to install them today I installed xenbus
> and
> >>>>>>>>>> xenvbd successful but on xenvif install windows crashed with
> blue
> >>>>>>>>>> screen, if I saw it correctly was an kernel in-page error or
> >> something
> >>>>>>>>>> similar.
> >>>>>>>>>> After reboot I retried to install xenvif but now always fails.
> >>>>>>>>>>
> >>>>>>>>> Sounds odd. Do you have a MEMORY.DMP?
> >>>>>>>>>
> >>>>>>>>>        Paul
> >>>>>>>> Windows is setted to write dump of kernel memory on system
> error
> >>>> but
> >>>>>>>> %systemroot%\memory.dmp is missed :(
> >>>>>>>> I also checked the windows events log but I found only kernel-
> >> power
> >>>> as
> >>>>>>>> critical that seems not contains useful data.
> >>>>>>>>
> >>>>>>>> I found probably useful data in xl dmesg (I copied all below from
> >> domU
> >>>>>>>> start to xen bug):
> >>>>>>>>> (d98) HVM Loader
> >>>>>>>>> (d98) Detected Xen v4.5-unstable
> >>>>>>>>> (d98) Xenbus rings @0xfeffc000, event channel 1
> >>>>>>>>> (d98) System requested SeaBIOS
> >>>>>>>>> (d98) CPU speed is 2660 MHz
> >>>>>>>>> (d98) Relocating guest memory for lowmem MMIO space
> disabled
> >>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 0 changed 0 -> 5
> >>>>>>>>> (d98) PCI-ISA link 0 routed to IRQ5
> >>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 1 changed 0 -> 10
> >>>>>>>>> (d98) PCI-ISA link 1 routed to IRQ10
> >>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 2 changed 0 -> 11
> >>>>>>>>> (d98) PCI-ISA link 2 routed to IRQ11
> >>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 3 changed 0 -> 5
> >>>>>>>>> (d98) PCI-ISA link 3 routed to IRQ5
> >>>>>>>>> (d98) pci dev 01:3 INTA->IRQ10
> >>>>>>>>> (d98) pci dev 02:0 INTA->IRQ11
> >>>>>>>>> (d98) pci dev 03:0 INTA->IRQ5
> >>>>>>>>> (d98) pci dev 04:0 INTA->IRQ5
> >>>>>>>>> (d98) pci dev 05:0 INTA->IRQ10
> >>>>>>>>> (d98) pci dev 06:0 INTA->IRQ11
> >>>>>>>>> (d98) pci dev 1d:0 INTA->IRQ10
> >>>>>>>>> (d98) pci dev 1d:1 INTB->IRQ11
> >>>>>>>>> (d98) pci dev 1d:2 INTC->IRQ5
> >>>>>>>>> (d98) pci dev 1d:7 INTD->IRQ5
> >>>>>>>>> (d98) No RAM in high memory; setting high_mem resource base
> to
> >>>>>>>> 100000000
> >>>>>>>>> (d98) pci dev 05:0 bar 10 size 004000000: 0f0000000
> >>>>>>>>> (d98) pci dev 05:0 bar 14 size 004000000: 0f4000000
> >>>>>>>>> (d98) pci dev 02:0 bar 14 size 001000000: 0f8000008
> >>>>>>>>> (d98) pci dev 06:0 bar 30 size 000040000: 0f9000000
> >>>>>>>>> (d98) pci dev 05:0 bar 30 size 000010000: 0f9040000
> >>>>>>>>> (d98) pci dev 03:0 bar 10 size 000004000: 0f9050000
> >>>>>>>>> (d98) pci dev 05:0 bar 18 size 000002000: 0f9054000
> >>>>>>>>> (d98) pci dev 04:0 bar 14 size 000001000: 0f9056000
> >>>>>>>>> (d98) pci dev 1d:7 bar 10 size 000001000: 0f9057000
> >>>>>>>>> (d98) pci dev 02:0 bar 10 size 000000100: 00000c001
> >>>>>>>>> (d98) pci dev 06:0 bar 10 size 000000100: 00000c101
> >>>>>>>>> (d98) pci dev 06:0 bar 14 size 000000100: 0f9058000
> >>>>>>>>> (d98) pci dev 04:0 bar 10 size 000000020: 00000c201
> >>>>>>>>> (d98) pci dev 05:0 bar 1c size 000000020: 00000c221
> >>>>>>>>> (d98) pci dev 1d:0 bar 20 size 000000020: 00000c241
> >>>>>>>>> (d98) pci dev 1d:1 bar 20 size 000000020: 00000c261
> >>>>>>>>> (d98) pci dev 1d:2 bar 20 size 000000020: 00000c281
> >>>>>>>>> (d98) pci dev 01:1 bar 20 size 000000010: 00000c2a1
> >>>>>>>>> (d98) Multiprocessor initialisation:
> >>>>>>>>> (d98)  - CPU0 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8] ...
> >>>>>>>>> done.
> >>>>>>>>> (d98)  - CPU1 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8] ...
> >>>>>>>>> done.
> >>>>>>>>> (d98) Testing HVM environment:
> >>>>>>>>> (d98)  - REP INSB across page boundaries ... passed
> >>>>>>>>> (d98)  - GS base MSRs and SWAPGS ... passed
> >>>>>>>>> (d98) Passed 2 of 2 tests
> >>>>>>>>> (d98) Writing SMBIOS tables ...
> >>>>>>>>> (d98) Loading SeaBIOS ...
> >>>>>>>>> (d98) Creating MP tables ...
> >>>>>>>>> (d98) Loading ACPI ...
> >>>>>>>>> (d98) S3 disabled
> >>>>>>>>> (d98) S4 disabled
> >>>>>>>>> (d98) vm86 TSS at fc00a100
> >>>>>>>>> (d98) BIOS map:
> >>>>>>>>> (d98)  10000-100d3: Scratch space
> >>>>>>>>> (d98)  c0000-fffff: Main BIOS
> >>>>>>>>> (d98) E820 table:
> >>>>>>>>> (d98)  [00]: 00000000:00000000 - 00000000:000a0000: RAM
> >>>>>>>>> (d98)  HOLE: 00000000:000a0000 - 00000000:000c0000
> >>>>>>>>> (d98)  [01]: 00000000:000c0000 - 00000000:00100000: RESERVED
> >>>>>>>>> (d98)  [02]: 00000000:00100000 - 00000000:78000000: RAM
> >>>>>>>>> (d98)  HOLE: 00000000:78000000 - 00000000:fc000000
> >>>>>>>>> (d98)  [03]: 00000000:fc000000 - 00000001:00000000: RESERVED
> >>>>>>>>> (d98) Invoking SeaBIOS ...
> >>>>>>>>> (d98) SeaBIOS (version
> >>>>>>>>> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
> >>>>>>>>> (d98)
> >>>>>>>>> (d98) Found Xen hypervisor signature at 40000100
> >>>>>>>>> (d98) Running on QEMU (i440fx)
> >>>>>>>>> (d98) xen: copy e820...
> >>>>>>>>> (d98) Relocating init from 0x000df619 to 0x77fae600 (size 71995)
> >>>>>>>>> (d98) CPU Mhz=2660
> >>>>>>>>> (d98) Found 13 PCI devices (max PCI bus is 00)
> >>>>>>>>> (d98) Allocated Xen hypercall page at 77fff000
> >>>>>>>>> (d98) Detected Xen v4.5-unstable
> >>>>>>>>> (d98) xen: copy BIOS tables...
> >>>>>>>>> (d98) Copying SMBIOS entry point from 0x00010010 to
> 0x000f0f40
> >>>>>>>>> (d98) Copying MPTABLE from 0xfc001170/fc001180 to 0x000f0e40
> >>>>>>>>> (d98) Copying PIR from 0x00010030 to 0x000f0dc0
> >>>>>>>>> (d98) Copying ACPI RSDP from 0x000100b0 to 0x000f0d90
> >>>>>>>>> (d98) Using pmtimer, ioport 0xb008
> >>>>>>>>> (d98) Scan for VGA option rom
> >>>>>>>>> (d98) Running option rom at c000:0003
> >>>>>>>>> (XEN) stdvga.c:147:d98v0 entering stdvga and caching modes
> >>>>>>>>> (d98) pmm call arg1=0
> >>>>>>>>> (d98) Turning on vga text mode console
> >>>>>>>>> (d98) SeaBIOS (version
> >>>>>>>>> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
> >>>>>>>>> (d98) Machine UUID f4cdeb74-0db1-4748-948d-42579a494120
> >>>>>>>>> (d98) EHCI init on dev 00:1d.7 (regs=0xf9057020)
> >>>>>>>>> (d98) Found 0 lpt ports
> >>>>>>>>> (d98) Found 0 serial ports
> >>>>>>>>> (d98) ATA controller 1 at 1f0/3f4/0 (irq 14 dev 9)
> >>>>>>>>> (d98) ATA controller 2 at 170/374/0 (irq 15 dev 9)
> >>>>>>>>> (d98) ata0-0: QEMU HARDDISK ATA-7 Hard-Disk (40720 MiBytes)
> >>>>>>>>> (d98) Searching bootorder for:
> /pci@i0cf8/*@1,1/drive@0/disk@0
> >>>>>>>>> (d98) DVD/CD [ata0-1: QEMU DVD-ROM ATAPI-4 DVD/CD]
> >>>>>>>>> (d98) Searching bootorder for:
> /pci@i0cf8/*@1,1/drive@0/disk@1
> >>>>>>>>> (d98) UHCI init on dev 00:1d.0 (io=c240)
> >>>>>>>>> (d98) UHCI init on dev 00:1d.1 (io=c260)
> >>>>>>>>> (d98) UHCI init on dev 00:1d.2 (io=c280)
> >>>>>>>>> (d98) PS2 keyboard initialized
> >>>>>>>>> (d98) All threads complete.
> >>>>>>>>> (d98) Scan for option roms
> >>>>>>>>> (d98) Running option rom at c980:0003
> >>>>>>>>> (d98) pmm call arg1=1
> >>>>>>>>> (d98) pmm call arg1=0
> >>>>>>>>> (d98) pmm call arg1=1
> >>>>>>>>> (d98) pmm call arg1=0
> >>>>>>>>> (d98) Searching bootorder for: /pci@i0cf8/*@6
> >>>>>>>>> (d98)
> >>>>>>>>> (d98) Press F12 for boot menu.
> >>>>>>>>> (d98)
> >>>>>>>>> (d98) Searching bootorder for: HALT
> >>>>>>>>> (d98) drive 0x000f0d40: PCHS=16383/16/63 translation=lba
> >>>>>>>>> LCHS=1024/255/63 s=83394560
> >>>>>>>>> (d98) Space available for UMB: ca800-ee800, f0000-f0ce0
> >>>>>>>>> (d98) Returned 258048 bytes of ZoneHigh
> >>>>>>>>> (d98) e820 map has 6 items:
> >>>>>>>>> (d98)   0: 0000000000000000 - 000000000009fc00 = 1 RAM
> >>>>>>>>> (d98)   1: 000000000009fc00 - 00000000000a0000 = 2 RESERVED
> >>>>>>>>> (d98)   2: 00000000000f0000 - 0000000000100000 = 2 RESERVED
> >>>>>>>>> (d98)   3: 0000000000100000 - 0000000077fff000 = 1 RAM
> >>>>>>>>> (d98)   4: 0000000077fff000 - 0000000078000000 = 2 RESERVED
> >>>>>>>>> (d98)   5: 00000000fc000000 - 0000000100000000 = 2 RESERVED
> >>>>>>>>> (d98) enter handle_19:
> >>>>>>>>> (d98)   NULL
> >>>>>>>>> (d98) Booting from Hard Disk...
> >>>>>>>>> (d98) Booting from 0000:7c00
> >>>>>>>>> (XEN) d98: VIRIDIAN GUEST_OS_ID: vendor: 1 os: 4 major: 6
> minor:
> >> 1
> >>>> sp:
> >>>>>>>>> 1 build: 1db1
> >>>>>>>>> (XEN) d98: VIRIDIAN HYPERCALL: enabled: 1 pfn: 3ffff
> >>>>>>>>> (XEN) d98v0: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffe
> >>>>>>>>> (XEN) d98v1: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffd
> >>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 0 changed 5 -> 0
> >>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 1 changed 10 -> 0
> >>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 2 changed 11 -> 0
> >>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 3 changed 5 -> 0
> >>>>>>>>> (XEN) irq.c:380: Dom98 callback via changed to GSI 24
> >>>>>>>>> (d98) XEN|BUGCHECK: ====>
> >>>>>>>>> (d98) XEN|BUGCHECK: 0000007A: FFFFF6FC000171C8
> >>>> FFFFFFFFC0000185
> >>>>>>>>> 000000001BD6A860 FFFF
> >>>>>>>>> (d98) F80002E39000
> >>>>>>>>> (d98) XEN|BUGCHECK: CONTEXT (FFFFF8800310E530):
> >>>>>>>>> (d98) XEN|BUGCHECK: - GS = 002B
> >>>>>>>>> (d98) XEN|BUGCHECK: - FS = 0053
> >>>>>>>>> (d98) XEN|BUGCHECK: - ES = 002B
> >>>>>>>>> (d98) XEN|BUGCHECK: - DS = 002B
> >>>>>>>>> (d98) XEN|BUGCHECK: - SS = 0018
> >>>>>>>>> (d98) XEN|BUGCHECK: - CS = 0010
> >>>>>>>>> (d98) XEN|BUGCHECK: - EFLAGS = 00000086
> >>>>>>>>> (d98) XEN|BUGCHECK: - RDI = 00000000000171C8
> >>>>>>>>> (d98) XEN|BUGCHECK: - RSI = 00000000C0000185
> >>>>>>>>> (d98) XEN|BUGCHECK: - RBX = 00000000038AC8F8
> >>>>>>>>> (d98) XEN|BUGCHECK: - RDX = 0000000000000000
> >>>>>>>>> (d98) XEN|BUGCHECK: - RCX = 000000000310E530
> >>>>>>>>> (d98) XEN|BUGCHECK: - RAX = 000000002ECF4722
> >>>>>>>>> (d98) XEN|BUGCHECK: - RBP = 000000001BD6A860
> >>>>>>>>> (d98) XEN|BUGCHECK: - RIP = 00000000038A2A43
> >>>>>>>>> (d98) XEN|BUGCHECK: - RSP = 000000000310E510
> >>>>>>>>> (d98) XEN|BUGCHECK: - R8 = 0000000000000000
> >>>>>>>>> (d98) XEN|BUGCHECK: - R9 = 0000000000000000
> >>>>>>>>> (d98) XEN|BUGCHECK: - R10 = 0000000000000000
> >>>>>>>>> (d98) XEN|BUGCHECK: - R11 = 0000000000000000
> >>>>>>>>> (d98) XEN|BUGCHECK: - R12 = 000000000000007A
> >>>>>>>>> (d98) XEN|BUGCHECK: - R13 = 0000000000000001
> >>>>>>>>> (d98) XEN|BUGCHECK: - R14 = 0000000002E39000
> >>>>>>>>> (d98) XEN|BUGCHECK: - R15 = 0000000002CBAC40
> >>>>>>>>> (d98) XEN|BUGCHECK: STACK:
> >>>>>>>>> (d98) XEN|BUGCHECK: 000000000310EA20: (0000000000000003
> >>>>>>>>> 00000000038A50F0 00000000038A
> >>>>>>>>> (d98) 4860 000000000000007A) xen.sys + 00000000000049AC
> >>>>>>>>> (d98) XEN|BUGCHECK: 000000000310EA70: (00000000038AD0D0
> >>>>>>>>> 0000000000000000 000000000000
> >>>>>>>>> (d98) 0004 0000000002C83500) ntoskrnl.exe + 0000000000128585
> >>>>>>>>> (d98) XEN|BUGCHECK: 000000000310EAA0: (00000000038AD0D0
> >>>>>>>>> 0000000002C83500 000000000000
> >>>>>>>>> (d98) 000F 0000000001780660) ntoskrnl.exe + 0000000000167C0D
> >>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F170: (0000000003816470
> >>>>>>>>> 0000000002B4C8C1 000000000000
> >>>>>>>>> (d98) 00FE 0000000000000000) ntoskrnl.exe + 0000000000075CC4
> >>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F1B0: (000000000000007A
> >>>>>>>>> 00000000000171C8 00000000C000
> >>>>>>>>> (d98) 0185 000000001BD6A860) ntoskrnl.exe + 00000000000E8752
> >>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F290: (00000000038163B0
> >>>>>>>>> 000000000310F320 0000000002CB
> >>>>>>>>> (d98) D540 00000000038163B0) ntoskrnl.exe + 000000000009C91F
> >>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F360: (0000000000000000
> >>>>>>>>> 0000000000000008 00000000FFFF
> >>>>>>>>> (d98) FFFF 00000000003500F0) ntoskrnl.exe + 00000000000831B9
> >>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F4C0: (0000000000000008
> >>>>>>>>> 0000000002E39000 000000000000
> >>>>>>>>> (d98) 0000 0000000000000000) ntoskrnl.exe + 0000000000073CEE
> >>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F658: (0000000002E5CFD5
> >>>>>>>>> 0000000000000000 0000000003EB
> >>>>>>>>> (d98) 8710 00000000FFFFFFFF) ntoskrnl.exe + 000000000042C000
> >>>>>>>> If you need more tests/informations tell me and I'll post them.
> >>>>>>>> Thanks for any reply and sorry for my bad english.
> >>>>>>> Well, that tells me you had a 7A BSOD, which is a
> >>>>>> KERNEL_DATA_INPAGE_ERROR. The error status (param 2) was
> >> C0000185
> >>>> so
> >>>>>> that's a STATUS_IO_DEVICE_ERROR. The documentation at
> >>>>>> http://msdn.microsoft.com/en-
> >>>>>> gb/library/windows/hardware/ff559211%28v=vs.85%29.aspx tells
> me
> >> that
> >>>>>> this means:
> >>>>>>> "improper termination or defective cabling on SCSI devices or that
> >> two
> >>>>>> devices are trying to use the same IRQ."
> >>>>>>> But you said you had xenvbd already installed so you'll be using a
> PV
> >>>>>> storage path. Is there any indication of problems with your storage?
> >>>>>>>       Paul
> >>>>>> DomUs disk are all raw files in local dom0 disks, raid1 with "LSI Logic
> >>>>>> / Symbios Logic SAS2008 PCI-Express Fusion-MPT SAS-2" dom0
> >> partitions
> >>>>>> are GTP and fs ext4.
> >>>>>> Dom0 is wheezy with kernel is linux-image-3.16-0.bpo.2-amd64
> version
> >>>>>> 3.16.3-2~bpo70+1
> >>>>>> No kern or syslog errors, only many of these warning that someone
> >>>>>> replied me that should not be a problem:
> >>>>>> Oct 15 10:45:13 mtorMN01OU kernel: [773197.117518] xen:balloon:
> >>>>>> reserve_additional_memory: add_memory() failed: -17
> >>>>>> DomU now see disk as xen pvdisk, on xenvif install probably still was
> >>>>>> full emulated disk even if xenvbd was installed successful before
> xenvif
> >>>>>> install (failed with BSOD)
> >>>>>> The IRQ seems visible from xl dmesg output below, can you check
> >> them is
> >>>>>> have something wrong or strange, I see some of them "duplicate"
> but I
> >>>>>> not know if is correct.
> >>>>>>
> >>>>>> DomU xl cfg:
> >>>>>>> name='office1_w7'
> >>>>>>> builder="hvm"
> >>>>>>> memory=2048
> >>>>>>> vcpus=2
> >>>>>>> acpi_s3=0
> >>>>>>> acpi_s4=0
> >>>>>>> vif=['bridge=xenbr0,mac=00:16:3e:41:ae:8b']
> >>>>>>>
> >>
> disk=['/mnt/vm/disks/office1_w7.disk1.xm,raw,hda,rw',',raw,hdb,ro,cdrom'
> >>>>>> ]
> >>>>>>> boot='c'
> >>>>>>> device_model_version="qemu-xen"
> >>>>>>> viridian=1
> >>>>>>> vnc=0
> >>>>>>> keymap="it"
> >>>>>>> on_crash="destroy"
> >>>>>>> vga="qxl"
> >>>>>>> spice=1
> >>>>>>> spicehost='0.0.0.0'
> >>>>>>> spiceport=6001
> >>>>>>> spicedisable_ticketing=0
> >>>>>>> spicepasswd="password"
> >>>>>>> spicevdagent=1
> >>>>>>> spice_clipboard_sharing=0
> >>>>>>> spiceusbredirection=4
> >>>>>>> soundhw="hda"
> >>>>>>> localtime=1
> >>>>>> If you need more tests/informations tell me and I'll post them.
> >>>>>>
> >>>>> Do you have the qemu log (with xen platform logging enabled). This is
> >>>> where the PV drivers log failures/warnings.
> >>>>>      Paul
> >>>>>
> >>>>>
> >>>> I retried enabling xen platform debug in qemu trace but no add lines in
> >>>> log when I try to install xenvif and fails.
> >>>> I attach anyway the log if can be useful.
> >>> All I can see there is an apparently clean shutdown of domain 101; no
> sign
> >> of XENVIF and no sign of a BSOD.
> >>>> I'll also try to restore the backup of this night of the domU when I had
> >>>> the BSOD trying reproduce it with xen debug in qemu trace and
> different
> >>>> windows memory dump options.
> >>> Ok.
> >>>
> >>>     Paul
> >>>
> >> Reproduced it but now with xen platform trace enabled in qemu. (see
> >> attachment)
> >> Dump of memory instead is not present also in this case (probably
> >> because disk is "failed").
> > You're using emulate disk in this case. Did your BSOD not indicate that it
> was dumping?
> >
> >    Paul
> >
> 
> I have to time to see if do a dump but I suppose it can't write to disk
> since its driver fails.
> Log qemu is not enough? You need the windows memory dump to find and
> fix
> the bug?

I don't know what the bug is. My guess is that it's a deadlock somewhere which is causing Windows to believe there's a storage issue, but since the stack is entirely in the kernel and without a crashdump I cannot decode to symbols there's not much more I can do unless I happen to repro.

  Paul

> If needed tomorrow I'll do other tests.
> 
> _______________________________________________
> 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 Oct 17 09:38:39 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 17 Oct 2014 09:38:39 +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 1Xf3zZ-00024B-Il; Fri, 17 Oct 2014 09:38:37 +0000
Received: from mail6.bemta4.messagelabs.com ([85.158.143.247])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1Xf3zX-000246-Ha
	for win-pv-devel@lists.xenproject.org; Fri, 17 Oct 2014 09:38:36 +0000
Received: from [85.158.143.35] by server-2.bemta-4.messagelabs.com id
	02/DB-10419-A93E0445; Fri, 17 Oct 2014 09:38:34 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-15.tower-21.messagelabs.com!1413538713!12271813!1
X-Originating-IP: [74.125.82.51]
X-SpamReason: No, hits=1.7 required=7.0 tests=BIZ_TLD
X-StarScan-Received: 
X-StarScan-Version: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 6034 invoked from network); 17 Oct 2014 09:38:33 -0000
Received: from mail-wg0-f51.google.com (HELO mail-wg0-f51.google.com)
	(74.125.82.51)
	by server-15.tower-21.messagelabs.com with RC4-SHA encrypted SMTP;
	17 Oct 2014 09:38:33 -0000
Received: by mail-wg0-f51.google.com with SMTP id b13so484005wgh.34
	for <win-pv-devel@lists.xenproject.org>;
	Fri, 17 Oct 2014 02:38:32 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:message-id:date:from:user-agent:mime-version:to
	:subject:references:in-reply-to:content-type;
	bh=QuNocfz5LG0OGxrXPa+6R5AmfcZqW6GP3PjKyHLHe8Q=;
	b=X7SM6CIyRZNuDRvtNJ023aGZzrq1yaMjxGriBezJts4Jl7QvfGYBGUrkT2mg47HboZ
	8ZbR2AS3I/kpJY47T/taR5d5ao7eRpMhQO/X10M7g3ttwso9dYCATUca0SqlebOaiqcH
	C6lxzmT7cVi2VbEbsaJ8pqAghtOFSwWnjrDPPHBmLmblSxbNgBYHmZFA8PWJup3hM0w0
	YPouKpEsNv9Un2TpI+8dQBUi0b72qCynvUjiIXfsazAuO/3T3a58bRq+V24QqOIAn3Ht
	riRZB9FFooFnZvDc5yx5FzfO3zJK4hI/QlTrwnL8qwmXBzf9eoW9KreUD290mZp/SsW8
	bnBQ==
X-Gm-Message-State: ALoCoQmUhk2vMf3OBQvPM2EXHyAeRhn6m7VhO72PYdiVEphj3+UdEwEjdb8pORzxaQOnA0EjXFl7
X-Received: by 10.180.80.39 with SMTP id o7mr27355905wix.82.1413538712681;
	Fri, 17 Oct 2014 02:38:32 -0700 (PDT)
Received: from [192.168.1.15] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by mx.google.com with ESMTPSA id cz3sm1016423wjb.23.2014.10.17.02.38.24
	for <multiple recipients>
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Fri, 17 Oct 2014 02:38:31 -0700 (PDT)
Message-ID: <5440E39B.6080104@m2r.biz>
Date: Fri, 17 Oct 2014 11:38:35 +0200
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64;
	rv:24.0) Gecko/20100101 Thunderbird/24.6.0
MIME-Version: 1.0
To: Paul Durrant <Paul.Durrant@citrix.com>, 
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <543F887B.5030500@m2r.biz>	<9AAE0902D5BC7E449B7C8E4E778ABCD0111050FF@AMSPEX01CL01.citrite.net>	<543F912C.8000504@m2r.biz>	<9AAE0902D5BC7E449B7C8E4E778ABCD01110526F@AMSPEX01CL01.citrite.net>	<543FA4F6.5090804@m2r.biz>	<9AAE0902D5BC7E449B7C8E4E778ABCD0111053EA@AMSPEX01CL01.citrite.net>	<543FCA93.2010805@m2r.biz>	<9AAE0902D5BC7E449B7C8E4E778ABCD0111057A2@AMSPEX01CL01.citrite.net>	<543FDA2D.2090900@m2r.biz>	<9AAE0902D5BC7E449B7C8E4E778ABCD0111058E6@AMSPEX01CL01.citrite.net>
	<543FDE85.1030908@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD011105A08@AMSPEX01CL01.citrite.net>
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD011105A08@AMSPEX01CL01.citrite.net>
Content-Type: multipart/mixed; boundary="------------050804050700040807000507"
Subject: Re: [win-pv-devel] Blue screen on xenvif install
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.
--------------050804050700040807000507
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

Il 16/10/2014 17:58, Paul Durrant ha scritto:
>> -----Original Message-----
>> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
>> bounces@lists.xenproject.org] On Behalf Of Fabio Fantoni
>> Sent: 16 October 2014 16:05
>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>> Subject: Re: [win-pv-devel] Blue screen on xenvif install
>>
>> Il 16/10/2014 16:54, Paul Durrant ha scritto:
>>>> -----Original Message-----
>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>> Sent: 16 October 2014 15:46
>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>>>> Subject: Re: Blue screen on xenvif install
>>>>
>>>> Il 16/10/2014 15:45, Paul Durrant ha scritto:
>>>>>> -----Original Message-----
>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>>>> Sent: 16 October 2014 14:40
>>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>>>>>> Subject: Re: Blue screen on xenvif install
>>>>>>
>>>>>> Il 16/10/2014 13:04, Paul Durrant ha scritto:
>>>>>>>> -----Original Message-----
>>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>>>>>> Sent: 16 October 2014 11:59
>>>>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>>>>>>>> Subject: Re: Blue screen on xenvif install
>>>>>>>>
>>>>>>>> Il 16/10/2014 12:00, Paul Durrant ha scritto:
>>>>>>>>>> -----Original Message-----
>>>>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>>>>>>>> Sent: 16 October 2014 10:35
>>>>>>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>>>>>>>>>> Subject: Re: Blue screen on xenvif install
>>>>>>>>>>
>>>>>>>>>> Il 16/10/2014 10:59, Paul Durrant ha scritto:
>>>>>>>>>>>> -----Original Message-----
>>>>>>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>>>>>>>>>> Sent: 16 October 2014 09:58
>>>>>>>>>>>> To: win-pv-devel@lists.xenproject.org
>>>>>>>>>>>> Cc: Paul Durrant
>>>>>>>>>>>> Subject: Blue screen on xenvif install
>>>>>>>>>>>>
>>>>>>>>>>>> Today I tried to install new winpv driver to other 3 windows 7
>> pro
>>>> 64
>>>>>>>>>>>> bit domUs.
>>>>>>>>>>>> Days ago I installed them successful on one windows 7 pro 64
>> bit
>>>> and
>>>>>>>> one
>>>>>>>>>>>> windows 8.1 enterprise 64 bit.
>>>>>>>>>>>> On first domUs I tried to install them today I installed xenbus
>> and
>>>>>>>>>>>> xenvbd successful but on xenvif install windows crashed with
>> blue
>>>>>>>>>>>> screen, if I saw it correctly was an kernel in-page error or
>>>> something
>>>>>>>>>>>> similar.
>>>>>>>>>>>> After reboot I retried to install xenvif but now always fails.
>>>>>>>>>>>>
>>>>>>>>>>> Sounds odd. Do you have a MEMORY.DMP?
>>>>>>>>>>>
>>>>>>>>>>>         Paul
>>>>>>>>>> Windows is setted to write dump of kernel memory on system
>> error
>>>>>> but
>>>>>>>>>> %systemroot%\memory.dmp is missed :(
>>>>>>>>>> I also checked the windows events log but I found only kernel-
>>>> power
>>>>>> as
>>>>>>>>>> critical that seems not contains useful data.
>>>>>>>>>>
>>>>>>>>>> I found probably useful data in xl dmesg (I copied all below from
>>>> domU
>>>>>>>>>> start to xen bug):
>>>>>>>>>>> (d98) HVM Loader
>>>>>>>>>>> (d98) Detected Xen v4.5-unstable
>>>>>>>>>>> (d98) Xenbus rings @0xfeffc000, event channel 1
>>>>>>>>>>> (d98) System requested SeaBIOS
>>>>>>>>>>> (d98) CPU speed is 2660 MHz
>>>>>>>>>>> (d98) Relocating guest memory for lowmem MMIO space
>> disabled
>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 0 changed 0 -> 5
>>>>>>>>>>> (d98) PCI-ISA link 0 routed to IRQ5
>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 1 changed 0 -> 10
>>>>>>>>>>> (d98) PCI-ISA link 1 routed to IRQ10
>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 2 changed 0 -> 11
>>>>>>>>>>> (d98) PCI-ISA link 2 routed to IRQ11
>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 3 changed 0 -> 5
>>>>>>>>>>> (d98) PCI-ISA link 3 routed to IRQ5
>>>>>>>>>>> (d98) pci dev 01:3 INTA->IRQ10
>>>>>>>>>>> (d98) pci dev 02:0 INTA->IRQ11
>>>>>>>>>>> (d98) pci dev 03:0 INTA->IRQ5
>>>>>>>>>>> (d98) pci dev 04:0 INTA->IRQ5
>>>>>>>>>>> (d98) pci dev 05:0 INTA->IRQ10
>>>>>>>>>>> (d98) pci dev 06:0 INTA->IRQ11
>>>>>>>>>>> (d98) pci dev 1d:0 INTA->IRQ10
>>>>>>>>>>> (d98) pci dev 1d:1 INTB->IRQ11
>>>>>>>>>>> (d98) pci dev 1d:2 INTC->IRQ5
>>>>>>>>>>> (d98) pci dev 1d:7 INTD->IRQ5
>>>>>>>>>>> (d98) No RAM in high memory; setting high_mem resource base
>> to
>>>>>>>>>> 100000000
>>>>>>>>>>> (d98) pci dev 05:0 bar 10 size 004000000: 0f0000000
>>>>>>>>>>> (d98) pci dev 05:0 bar 14 size 004000000: 0f4000000
>>>>>>>>>>> (d98) pci dev 02:0 bar 14 size 001000000: 0f8000008
>>>>>>>>>>> (d98) pci dev 06:0 bar 30 size 000040000: 0f9000000
>>>>>>>>>>> (d98) pci dev 05:0 bar 30 size 000010000: 0f9040000
>>>>>>>>>>> (d98) pci dev 03:0 bar 10 size 000004000: 0f9050000
>>>>>>>>>>> (d98) pci dev 05:0 bar 18 size 000002000: 0f9054000
>>>>>>>>>>> (d98) pci dev 04:0 bar 14 size 000001000: 0f9056000
>>>>>>>>>>> (d98) pci dev 1d:7 bar 10 size 000001000: 0f9057000
>>>>>>>>>>> (d98) pci dev 02:0 bar 10 size 000000100: 00000c001
>>>>>>>>>>> (d98) pci dev 06:0 bar 10 size 000000100: 00000c101
>>>>>>>>>>> (d98) pci dev 06:0 bar 14 size 000000100: 0f9058000
>>>>>>>>>>> (d98) pci dev 04:0 bar 10 size 000000020: 00000c201
>>>>>>>>>>> (d98) pci dev 05:0 bar 1c size 000000020: 00000c221
>>>>>>>>>>> (d98) pci dev 1d:0 bar 20 size 000000020: 00000c241
>>>>>>>>>>> (d98) pci dev 1d:1 bar 20 size 000000020: 00000c261
>>>>>>>>>>> (d98) pci dev 1d:2 bar 20 size 000000020: 00000c281
>>>>>>>>>>> (d98) pci dev 01:1 bar 20 size 000000010: 00000c2a1
>>>>>>>>>>> (d98) Multiprocessor initialisation:
>>>>>>>>>>> (d98)  - CPU0 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8] ...
>>>>>>>>>>> done.
>>>>>>>>>>> (d98)  - CPU1 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8] ...
>>>>>>>>>>> done.
>>>>>>>>>>> (d98) Testing HVM environment:
>>>>>>>>>>> (d98)  - REP INSB across page boundaries ... passed
>>>>>>>>>>> (d98)  - GS base MSRs and SWAPGS ... passed
>>>>>>>>>>> (d98) Passed 2 of 2 tests
>>>>>>>>>>> (d98) Writing SMBIOS tables ...
>>>>>>>>>>> (d98) Loading SeaBIOS ...
>>>>>>>>>>> (d98) Creating MP tables ...
>>>>>>>>>>> (d98) Loading ACPI ...
>>>>>>>>>>> (d98) S3 disabled
>>>>>>>>>>> (d98) S4 disabled
>>>>>>>>>>> (d98) vm86 TSS at fc00a100
>>>>>>>>>>> (d98) BIOS map:
>>>>>>>>>>> (d98)  10000-100d3: Scratch space
>>>>>>>>>>> (d98)  c0000-fffff: Main BIOS
>>>>>>>>>>> (d98) E820 table:
>>>>>>>>>>> (d98)  [00]: 00000000:00000000 - 00000000:000a0000: RAM
>>>>>>>>>>> (d98)  HOLE: 00000000:000a0000 - 00000000:000c0000
>>>>>>>>>>> (d98)  [01]: 00000000:000c0000 - 00000000:00100000: RESERVED
>>>>>>>>>>> (d98)  [02]: 00000000:00100000 - 00000000:78000000: RAM
>>>>>>>>>>> (d98)  HOLE: 00000000:78000000 - 00000000:fc000000
>>>>>>>>>>> (d98)  [03]: 00000000:fc000000 - 00000001:00000000: RESERVED
>>>>>>>>>>> (d98) Invoking SeaBIOS ...
>>>>>>>>>>> (d98) SeaBIOS (version
>>>>>>>>>>> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
>>>>>>>>>>> (d98)
>>>>>>>>>>> (d98) Found Xen hypervisor signature at 40000100
>>>>>>>>>>> (d98) Running on QEMU (i440fx)
>>>>>>>>>>> (d98) xen: copy e820...
>>>>>>>>>>> (d98) Relocating init from 0x000df619 to 0x77fae600 (size 71995)
>>>>>>>>>>> (d98) CPU Mhz=2660
>>>>>>>>>>> (d98) Found 13 PCI devices (max PCI bus is 00)
>>>>>>>>>>> (d98) Allocated Xen hypercall page at 77fff000
>>>>>>>>>>> (d98) Detected Xen v4.5-unstable
>>>>>>>>>>> (d98) xen: copy BIOS tables...
>>>>>>>>>>> (d98) Copying SMBIOS entry point from 0x00010010 to
>> 0x000f0f40
>>>>>>>>>>> (d98) Copying MPTABLE from 0xfc001170/fc001180 to 0x000f0e40
>>>>>>>>>>> (d98) Copying PIR from 0x00010030 to 0x000f0dc0
>>>>>>>>>>> (d98) Copying ACPI RSDP from 0x000100b0 to 0x000f0d90
>>>>>>>>>>> (d98) Using pmtimer, ioport 0xb008
>>>>>>>>>>> (d98) Scan for VGA option rom
>>>>>>>>>>> (d98) Running option rom at c000:0003
>>>>>>>>>>> (XEN) stdvga.c:147:d98v0 entering stdvga and caching modes
>>>>>>>>>>> (d98) pmm call arg1=0
>>>>>>>>>>> (d98) Turning on vga text mode console
>>>>>>>>>>> (d98) SeaBIOS (version
>>>>>>>>>>> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
>>>>>>>>>>> (d98) Machine UUID f4cdeb74-0db1-4748-948d-42579a494120
>>>>>>>>>>> (d98) EHCI init on dev 00:1d.7 (regs=0xf9057020)
>>>>>>>>>>> (d98) Found 0 lpt ports
>>>>>>>>>>> (d98) Found 0 serial ports
>>>>>>>>>>> (d98) ATA controller 1 at 1f0/3f4/0 (irq 14 dev 9)
>>>>>>>>>>> (d98) ATA controller 2 at 170/374/0 (irq 15 dev 9)
>>>>>>>>>>> (d98) ata0-0: QEMU HARDDISK ATA-7 Hard-Disk (40720 MiBytes)
>>>>>>>>>>> (d98) Searching bootorder for:
>> /pci@i0cf8/*@1,1/drive@0/disk@0
>>>>>>>>>>> (d98) DVD/CD [ata0-1: QEMU DVD-ROM ATAPI-4 DVD/CD]
>>>>>>>>>>> (d98) Searching bootorder for:
>> /pci@i0cf8/*@1,1/drive@0/disk@1
>>>>>>>>>>> (d98) UHCI init on dev 00:1d.0 (io=c240)
>>>>>>>>>>> (d98) UHCI init on dev 00:1d.1 (io=c260)
>>>>>>>>>>> (d98) UHCI init on dev 00:1d.2 (io=c280)
>>>>>>>>>>> (d98) PS2 keyboard initialized
>>>>>>>>>>> (d98) All threads complete.
>>>>>>>>>>> (d98) Scan for option roms
>>>>>>>>>>> (d98) Running option rom at c980:0003
>>>>>>>>>>> (d98) pmm call arg1=1
>>>>>>>>>>> (d98) pmm call arg1=0
>>>>>>>>>>> (d98) pmm call arg1=1
>>>>>>>>>>> (d98) pmm call arg1=0
>>>>>>>>>>> (d98) Searching bootorder for: /pci@i0cf8/*@6
>>>>>>>>>>> (d98)
>>>>>>>>>>> (d98) Press F12 for boot menu.
>>>>>>>>>>> (d98)
>>>>>>>>>>> (d98) Searching bootorder for: HALT
>>>>>>>>>>> (d98) drive 0x000f0d40: PCHS=16383/16/63 translation=lba
>>>>>>>>>>> LCHS=1024/255/63 s=83394560
>>>>>>>>>>> (d98) Space available for UMB: ca800-ee800, f0000-f0ce0
>>>>>>>>>>> (d98) Returned 258048 bytes of ZoneHigh
>>>>>>>>>>> (d98) e820 map has 6 items:
>>>>>>>>>>> (d98)   0: 0000000000000000 - 000000000009fc00 = 1 RAM
>>>>>>>>>>> (d98)   1: 000000000009fc00 - 00000000000a0000 = 2 RESERVED
>>>>>>>>>>> (d98)   2: 00000000000f0000 - 0000000000100000 = 2 RESERVED
>>>>>>>>>>> (d98)   3: 0000000000100000 - 0000000077fff000 = 1 RAM
>>>>>>>>>>> (d98)   4: 0000000077fff000 - 0000000078000000 = 2 RESERVED
>>>>>>>>>>> (d98)   5: 00000000fc000000 - 0000000100000000 = 2 RESERVED
>>>>>>>>>>> (d98) enter handle_19:
>>>>>>>>>>> (d98)   NULL
>>>>>>>>>>> (d98) Booting from Hard Disk...
>>>>>>>>>>> (d98) Booting from 0000:7c00
>>>>>>>>>>> (XEN) d98: VIRIDIAN GUEST_OS_ID: vendor: 1 os: 4 major: 6
>> minor:
>>>> 1
>>>>>> sp:
>>>>>>>>>>> 1 build: 1db1
>>>>>>>>>>> (XEN) d98: VIRIDIAN HYPERCALL: enabled: 1 pfn: 3ffff
>>>>>>>>>>> (XEN) d98v0: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffe
>>>>>>>>>>> (XEN) d98v1: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffd
>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 0 changed 5 -> 0
>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 1 changed 10 -> 0
>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 2 changed 11 -> 0
>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 3 changed 5 -> 0
>>>>>>>>>>> (XEN) irq.c:380: Dom98 callback via changed to GSI 24
>>>>>>>>>>> (d98) XEN|BUGCHECK: ====>
>>>>>>>>>>> (d98) XEN|BUGCHECK: 0000007A: FFFFF6FC000171C8
>>>>>> FFFFFFFFC0000185
>>>>>>>>>>> 000000001BD6A860 FFFF
>>>>>>>>>>> (d98) F80002E39000
>>>>>>>>>>> (d98) XEN|BUGCHECK: CONTEXT (FFFFF8800310E530):
>>>>>>>>>>> (d98) XEN|BUGCHECK: - GS = 002B
>>>>>>>>>>> (d98) XEN|BUGCHECK: - FS = 0053
>>>>>>>>>>> (d98) XEN|BUGCHECK: - ES = 002B
>>>>>>>>>>> (d98) XEN|BUGCHECK: - DS = 002B
>>>>>>>>>>> (d98) XEN|BUGCHECK: - SS = 0018
>>>>>>>>>>> (d98) XEN|BUGCHECK: - CS = 0010
>>>>>>>>>>> (d98) XEN|BUGCHECK: - EFLAGS = 00000086
>>>>>>>>>>> (d98) XEN|BUGCHECK: - RDI = 00000000000171C8
>>>>>>>>>>> (d98) XEN|BUGCHECK: - RSI = 00000000C0000185
>>>>>>>>>>> (d98) XEN|BUGCHECK: - RBX = 00000000038AC8F8
>>>>>>>>>>> (d98) XEN|BUGCHECK: - RDX = 0000000000000000
>>>>>>>>>>> (d98) XEN|BUGCHECK: - RCX = 000000000310E530
>>>>>>>>>>> (d98) XEN|BUGCHECK: - RAX = 000000002ECF4722
>>>>>>>>>>> (d98) XEN|BUGCHECK: - RBP = 000000001BD6A860
>>>>>>>>>>> (d98) XEN|BUGCHECK: - RIP = 00000000038A2A43
>>>>>>>>>>> (d98) XEN|BUGCHECK: - RSP = 000000000310E510
>>>>>>>>>>> (d98) XEN|BUGCHECK: - R8 = 0000000000000000
>>>>>>>>>>> (d98) XEN|BUGCHECK: - R9 = 0000000000000000
>>>>>>>>>>> (d98) XEN|BUGCHECK: - R10 = 0000000000000000
>>>>>>>>>>> (d98) XEN|BUGCHECK: - R11 = 0000000000000000
>>>>>>>>>>> (d98) XEN|BUGCHECK: - R12 = 000000000000007A
>>>>>>>>>>> (d98) XEN|BUGCHECK: - R13 = 0000000000000001
>>>>>>>>>>> (d98) XEN|BUGCHECK: - R14 = 0000000002E39000
>>>>>>>>>>> (d98) XEN|BUGCHECK: - R15 = 0000000002CBAC40
>>>>>>>>>>> (d98) XEN|BUGCHECK: STACK:
>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310EA20: (0000000000000003
>>>>>>>>>>> 00000000038A50F0 00000000038A
>>>>>>>>>>> (d98) 4860 000000000000007A) xen.sys + 00000000000049AC
>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310EA70: (00000000038AD0D0
>>>>>>>>>>> 0000000000000000 000000000000
>>>>>>>>>>> (d98) 0004 0000000002C83500) ntoskrnl.exe + 0000000000128585
>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310EAA0: (00000000038AD0D0
>>>>>>>>>>> 0000000002C83500 000000000000
>>>>>>>>>>> (d98) 000F 0000000001780660) ntoskrnl.exe + 0000000000167C0D
>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F170: (0000000003816470
>>>>>>>>>>> 0000000002B4C8C1 000000000000
>>>>>>>>>>> (d98) 00FE 0000000000000000) ntoskrnl.exe + 0000000000075CC4
>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F1B0: (000000000000007A
>>>>>>>>>>> 00000000000171C8 00000000C000
>>>>>>>>>>> (d98) 0185 000000001BD6A860) ntoskrnl.exe + 00000000000E8752
>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F290: (00000000038163B0
>>>>>>>>>>> 000000000310F320 0000000002CB
>>>>>>>>>>> (d98) D540 00000000038163B0) ntoskrnl.exe + 000000000009C91F
>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F360: (0000000000000000
>>>>>>>>>>> 0000000000000008 00000000FFFF
>>>>>>>>>>> (d98) FFFF 00000000003500F0) ntoskrnl.exe + 00000000000831B9
>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F4C0: (0000000000000008
>>>>>>>>>>> 0000000002E39000 000000000000
>>>>>>>>>>> (d98) 0000 0000000000000000) ntoskrnl.exe + 0000000000073CEE
>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F658: (0000000002E5CFD5
>>>>>>>>>>> 0000000000000000 0000000003EB
>>>>>>>>>>> (d98) 8710 00000000FFFFFFFF) ntoskrnl.exe + 000000000042C000
>>>>>>>>>> If you need more tests/informations tell me and I'll post them.
>>>>>>>>>> Thanks for any reply and sorry for my bad english.
>>>>>>>>> Well, that tells me you had a 7A BSOD, which is a
>>>>>>>> KERNEL_DATA_INPAGE_ERROR. The error status (param 2) was
>>>> C0000185
>>>>>> so
>>>>>>>> that's a STATUS_IO_DEVICE_ERROR. The documentation at
>>>>>>>> http://msdn.microsoft.com/en-
>>>>>>>> gb/library/windows/hardware/ff559211%28v=vs.85%29.aspx tells
>> me
>>>> that
>>>>>>>> this means:
>>>>>>>>> "improper termination or defective cabling on SCSI devices or that
>>>> two
>>>>>>>> devices are trying to use the same IRQ."
>>>>>>>>> But you said you had xenvbd already installed so you'll be using a
>> PV
>>>>>>>> storage path. Is there any indication of problems with your storage?
>>>>>>>>>        Paul
>>>>>>>> DomUs disk are all raw files in local dom0 disks, raid1 with "LSI Logic
>>>>>>>> / Symbios Logic SAS2008 PCI-Express Fusion-MPT SAS-2" dom0
>>>> partitions
>>>>>>>> are GTP and fs ext4.
>>>>>>>> Dom0 is wheezy with kernel is linux-image-3.16-0.bpo.2-amd64
>> version
>>>>>>>> 3.16.3-2~bpo70+1
>>>>>>>> No kern or syslog errors, only many of these warning that someone
>>>>>>>> replied me that should not be a problem:
>>>>>>>> Oct 15 10:45:13 mtorMN01OU kernel: [773197.117518] xen:balloon:
>>>>>>>> reserve_additional_memory: add_memory() failed: -17
>>>>>>>> DomU now see disk as xen pvdisk, on xenvif install probably still was
>>>>>>>> full emulated disk even if xenvbd was installed successful before
>> xenvif
>>>>>>>> install (failed with BSOD)
>>>>>>>> The IRQ seems visible from xl dmesg output below, can you check
>>>> them is
>>>>>>>> have something wrong or strange, I see some of them "duplicate"
>> but I
>>>>>>>> not know if is correct.
>>>>>>>>
>>>>>>>> DomU xl cfg:
>>>>>>>>> name='office1_w7'
>>>>>>>>> builder="hvm"
>>>>>>>>> memory=2048
>>>>>>>>> vcpus=2
>>>>>>>>> acpi_s3=0
>>>>>>>>> acpi_s4=0
>>>>>>>>> vif=['bridge=xenbr0,mac=00:16:3e:41:ae:8b']
>>>>>>>>>
>> disk=['/mnt/vm/disks/office1_w7.disk1.xm,raw,hda,rw',',raw,hdb,ro,cdrom'
>>>>>>>> ]
>>>>>>>>> boot='c'
>>>>>>>>> device_model_version="qemu-xen"
>>>>>>>>> viridian=1
>>>>>>>>> vnc=0
>>>>>>>>> keymap="it"
>>>>>>>>> on_crash="destroy"
>>>>>>>>> vga="qxl"
>>>>>>>>> spice=1
>>>>>>>>> spicehost='0.0.0.0'
>>>>>>>>> spiceport=6001
>>>>>>>>> spicedisable_ticketing=0
>>>>>>>>> spicepasswd="password"
>>>>>>>>> spicevdagent=1
>>>>>>>>> spice_clipboard_sharing=0
>>>>>>>>> spiceusbredirection=4
>>>>>>>>> soundhw="hda"
>>>>>>>>> localtime=1
>>>>>>>> If you need more tests/informations tell me and I'll post them.
>>>>>>>>
>>>>>>> Do you have the qemu log (with xen platform logging enabled). This is
>>>>>> where the PV drivers log failures/warnings.
>>>>>>>       Paul
>>>>>>>
>>>>>>>
>>>>>> I retried enabling xen platform debug in qemu trace but no add lines in
>>>>>> log when I try to install xenvif and fails.
>>>>>> I attach anyway the log if can be useful.
>>>>> All I can see there is an apparently clean shutdown of domain 101; no
>> sign
>>>> of XENVIF and no sign of a BSOD.
>>>>>> I'll also try to restore the backup of this night of the domU when I had
>>>>>> the BSOD trying reproduce it with xen debug in qemu trace and
>> different
>>>>>> windows memory dump options.
>>>>> Ok.
>>>>>
>>>>>      Paul
>>>>>
>>>> Reproduced it but now with xen platform trace enabled in qemu. (see
>>>> attachment)
>>>> Dump of memory instead is not present also in this case (probably
>>>> because disk is "failed").
>>> You're using emulate disk in this case. Did your BSOD not indicate that it
>> was dumping?
>>>     Paul
>>>
>> I have to time to see if do a dump but I suppose it can't write to disk
>> since its driver fails.
>> Log qemu is not enough? You need the windows memory dump to find and
>> fix
>> the bug?
> I don't know what the bug is. My guess is that it's a deadlock somewhere which is causing Windows to believe there's a storage issue, but since the stack is entirely in the kernel and without a crashdump I cannot decode to symbols there's not much more I can do unless I happen to repro.
>
>    Paul
>
>> If needed tomorrow I'll do other tests.
I retried and seems always reproducible on same domU.
Now I disabled automatic reboot on crash and do a screenshot (in 
attachment) but memory dump is still missed :( Probably with disk 
"failed" can't write.
Is there another way to take/save the memory dump or the data you need?

About IRQ you checked in xl dmesg I posted if are all ok?

Thanks for any reply and sorry for my bad english.

--------------050804050700040807000507
Content-Type: image/png;
 name="bluescreen.png"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="bluescreen.png"

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
G0g8CVZWHDqd+vXXsz/55Ao23PTP6dChgspK8YcfRjs4mJHeOnKk+M03B59gf8R1d6u2br0W
F+dHPJ+Wlmwmk/bll09t3Xrtq6+yjNxVv0V948b0Gzeav/56aAXGsKhTqRQej6PT6Q8dWpCY
OISiXlgoXL369L//PcHwquntVa9Zcxpb/dsY1683JySkrF8flZgYSdyelHR7zZrTI1518Hic
9eujJk4UEDdu2ZL522+FYvHdcMOpUxWlpR0ffhg9fryjQcqioeaqubn7/fcvLl0agp+u+9XV
Azt0qKC0VLRp0xN4UTczY5qbM99+e5KTk/maNWeM39WuXddjYjy2b59J7EuC2b8/H1seZQTF
xHhu2vQEcUt2duM776QNY8JRhFBHh2zTpnRXV0ti8fvkkytHj5YYjmsYwC+/FJaWdmzaNN3V
1QLfKJerN25MP3u2kthB5tdf71y8WLNxYzQ+4WVycukrrxzHS8K+fXlRUffU6oTPFr7zzkAT
6f9tPPNMwBtvTCBuOXmyYunSY4YrdxrewJDq6hEs6sa43w0MQqi2tnPNmjNYHParr7JItfqO
HdkffHBpqP+7AQB/ThACAEPT3a2qqBAfPlyUlUWO9dbXS3t61AihtraenTtzamvJTalFRcIP
P7yck9P3QalUWVIiTEoqsLMjP8yUl4uIA9K6upSlpR0//XSb2PVAp9NXVPS1Nhw7VpqZ2YD9
69VodO3tvenpdUqldnitBAqFprm5+9SpCnygo0gkI4b2ZTK1TKZOSSmrrLyn5fnq1XrjmxZF
Itnu3TdbW/sadvLzW9atu5Cf3zeFwYkT5bdutWJzqmPf6MqVOnzxHqKCgr7AxMWLNUJhL9aC
rdPpOzpkOTmNu3ffILY2qFTa1taeixf/j707D4iqah8HfmbfmQFmWAeGXfZFBBRkyT0szcrM
18hI35ZvpvX20yj3ei2yvfSt3kxS3jLNosytNAXBDVBBVgFlX4dtYJh9ht8fl66XGcAZBDF9
Pn85x8O9Z2aee+be5557TvWQ4wwtmsy/oaFn9+4rxFNqmUxVWNhqNOyiq0t55UrLrl2X8ZoX
LjSUlUk/+yxXKh34SIuK2jZuPJ2XN9L8+f39/R0ditzcpi++yDcdT2vRnQe93iCVKs6erRty
9mZ8FokzZ2pVKp3p4AIs2GSyIcZ6XLrU/MMPxUVFoxlpX1PTvX37WfzbJGyzaf36U/gMi93d
qsLC1rS0K3y+8diZoqJBf3vo0LXc3CbsoJBK+3bsyB3F4WAUlriTJ6ubm+XEYLtwoX7IzxMf
133uXP3WrVkj39EaMtQvXKhXKnVbt2YRs0tdXUri4VNY2LJ+/SniSiJmhvrRo1XFxW14KA5J
rdY1N/ceP37ddEiRRqO/ccOC6zqlUtvYqD18uAJfnPyv99iAJ091OkN6+lWDof/2BwPL5dpf
fik3mhglJ6dOKh00bKG3V1NV1XXgQInRGhY5OXVGnwx2UIx821ynM7S29mVm1uBTmhH7atyJ
Ezfq6mRYTPb2ar755orRhPnd3aqioqFDvaRk4BArK2s3CowhdXYq8/Obv/rqkmkXOnK3M7KK
io633z5juverV1uNjoUbN7pu3OhSKrWj2ItOZ5BKFcRFQBFC587V4/fkGxp6Pvro/C3vvctk
qpIS6Z49Bba2N/O2Go0+L6+po0M5uKa6pES6d2+hSMTBSq5caSY+FNDVpSooGNSr4/Ceypxe
3ciNG13vvptzy3l8fvqp7Oefy4bsgS2i0xm++66ITCYZDaYw8wTm4sVGo2+5qKh1yIkATU9g
jPpqc0LdCNYDj9yl19XJPvjgHDZnIdFwJzAIoa4uJXYOM2SvnpVV29DQ8957Z4nduFKp27On
8OzZeoSQ6S8FAOCuRfpp/3ePLVk20c0AfxcvIOQw0W0A4O4iFLIDA+3efXdmeXl7cvKvE90c
AMA9YsOGuBUrwpKSMkYxnG0UZs3ySE9f9OGH5z/44Nwd2J35SCSSWGy1aJHvu+/OXLPm+K5d
lye6RQDctdoQ+s9EtwH8DYxqISwAAAB/SUz03rHjwYAAu4luCAAA3INoNPLq1ZGvvDJ1yKFw
AAAALAWdKQAAjEZsrCQqyhkhFB8vcXOzPnq08vjxqoluFAAA3CN4PHpioreLC59KJc+Z46nX
G3bsyDVdRRgAAIClIAUAAACjMX26y//9XwT274qKjs8+u3hnBusCAO4TPT3qlha5+evs3CaV
StfcLDealGECcbn0xx7zx+ez/P3362+++Sc+TzAAAIBRgxQAAACMBnFSTI1GX1ZmPOsSAADc
jl9/Lc/NbayoGONl4YZTUtK2atXR+nrLVkUdP52dynfeycZXtWxvV1i6RCUAAIAhQQoAjCMW
i5aQIHF2tiIW5uTUWTTzvDliYlysrVmZmTWmyxSbsrfnJiRIeDxGd7cqM7PG/DW9Ry0hwc3L
ywYhdO5cfWkpXCjerthY10mThAihvLxG0yn07xhslm9zaoaHO4WFDZpHs6Ki48yZWmIJHpZ4
iUKhzcysIS4GPk6io138/UUIocuXm285Hfc9JjLS2dGRl5VV091twfpq95igILugIPs7E2wj
8Pa2jY11zcysMfOwuh/U1spqa+/cBXlXlwpb4MDWlhUf72Zjc3PNP61Wn5lZcycbgxBSq/UF
BS13co93Pzs7TkKCm5XVzV8KlUqXmVkzuvWPAAD3LUgBgPFCpZJFIvaaNVHx8W7E8pdfPjbm
KYCnngoODLQrLm4zJwXg7W2TmjrLzU1QXt6elJRxB1IAK1aEPfVUMELo5ZePQQrg9j39dMjK
lZMRQm+88ecEpgDM99BD3ikp07F/k0iIRqPs3VtolALw9LTeuvUBfMluKpXc3q5ISsq4A1dl
S5cGrloViRDaujXzfksBLF7sn5Dgdu1a+/2cApg71+u116bdmWAbQUyMy1dfPZSUlAEpgIlF
pZI9PKw3bIjz8xPihXK55tlnf73DKQBghEYj+/jYbt4c7+FhjRd2dCiSkw9BCgAAYBFIAYDx
kpjovXix/2+/VezadYVYfr9dYwBw8GApvjizQMB8+eVI0zoVFR2vvnqcwxlYZ3v+fO9587zu
XBMBAAAhhNA//hEUG+u6c2euTHZzUgCdznDpEvx2T7Cnnw6JiHB+//1zxLsdarWuqOhvkAoH
ANxVIAUALOPlZRMYOMTiZwUFLTU13cQSHx/bWbM89uwpPHnyxm3u1M9P6OTEu3SpeUzu1HV0
KP7447qdHaexsffO3Pq7dKmZy6UjhODu1pgoKGj55ZdyhFBFRce47ojBoEZEOPX1aa5cua3B
qCUlUjwF4ODAXbIkwLROe7vi2LGbCwqIxVa3mQIIDrYXCJj5+U0KxS1mz7p6tRX7PMvLx/fz
BADc/YKC7KZMcfr004vFxW3D1REK2VOmOFVVdVZVdd7Jtt3nQkMdQkLsP/jg3J352F1crMLD
nS5daqqvhyEGANxrIAUALJOY6L1t2wzT8ldeOf7NN1dMy8fE44/7P/KI78qVv125MgZ3ISoq
Ol599XcymWQw9N+ZuYW+/DJ/167LCKE7NrHzvW3Xrit79hQihDSa8f08BQLGm2/G3rjRtWrV
0XHd0XhYvjwkLMzxmWd+qau7xdjdvXsL9+0rRuP/eQIA7g1+fsIdOxI/++ziZ59dnOi2gPES
He2ya9eClSsP7d9fMtFtAQCMMUgBAMtkZdWsXXsCIRQT47JkSWBa2hXsBik+Nfojj/jOneuJ
EAoJcbCyYqxZE/XYY37ELezbV2z0FPRwsOGICKHISGcPD+v162Ol0j7svy5caMAuAo0sWDDp
wQcH7p329KjT0grweQeCguySk8NYrJsx39ral5Z2xfThRvNrjoDLpScnh2KzrOH27y/JzKwx
qsli0VauDDOq+eOPpadOVZu/O4xIxElODnV3F2Av8/Ob0tIKDIZ+S7fz2GN+Pj62aWkFYWGO
Cxb4YIVqtT4traCwsMWo5qxZHsSS7Oy6778vQghNnuy4YkXY//53FY8NI3Fxkkcf9TPd5pAY
DGpycmhIiD2x8Jdfyn///TqxJCbG5cknA9PSChBCycmhVCp5hJrYBA24ysrOtLQrXV0qJyde
cnKoWGzFZtNCQuzd3QVffDEfr2YawLNnezz66ECQ63SGtLSCcX3axdPTJjk51NZ2YKauU6eq
f/yxFPs3mUxKTg6dMsUJITR9uqtIxHnnnZn4El/D1cQdOVJ5+HCF6R6Tk0MjI52Hq4mFulyu
SUsrINasru5OSyvAj9mxZWvLWrFi8i1D/cEHvfEAHrkmzqKwxEye7JicHPrDD8Vnz9abs82n
ngqOiXEhVvj99+vYQAyEEI1GXrFissHQn5Z2Ras14HWcnHgrVoQVFbVhNfFQ1+v7V64MGyHU
zWd0UIwc6gZD/zffXDEK9QULJk2e7Lhr12U/PyGxZlpaQX5+k1FNo74a/y+sBz506Jppb4mJ
jHRevjwE3+aTTwbGx0uw/xqyr16xIozBoKalFSxcOAmvKZUqvvnmslHNkUPdfCwWLTk5NCho
0Ig5Yq+O9dV1dbJff71GrFlaKk1LKzBnUhsj5oS6WGy1cuVke3sOXkLs1ZcvD5k6VYwQmjbN
RSzmbdwY19mpNKpJoZCwftXJiefoyH3yyUB8voDublVaWkFFRQfWV5sGMM7ampmcHNbW1ve/
/11Ffx0+I/fVeKgnJ4cyGJQRahr16tevd33zzeWuLnOH+y1YMCkkxD4trQAP4AsXGtLTr+K9
JfGgcHDgJieHuroOTOBielqC9dVnz9ZfudI8Qs0nnwx0deV/883ljo6bHzixX12xIozYq7/1
1gMy2c131NenTUu7gg80CwgQrVgxGT+BGSGAAwJEyclhHA4NL5FKFWlpVyQSATZUzcfHlsul
P/dceEKCG1ahrk6WllbQ0iLHXiYkuC1YMCkt7UpR0aABI4sX+3t52WA1sb7aNNTLy9u/+eYK
MdRtbVnJyWGentbETe3dW4ifQkgk/OTksMuXm8+erSPWHPWpDgD3M0gBAMsUFrZiE7DpdIbH
H/c/ceLGwYOlxAp2dhxfXyH2DyqV7OLCx8bA4/AFfm7JwYGLbcrWlk2nU9zcBPhlj+nVOJ/P
nDpV7OcnxP4EISSXa6KjXRBCWBaAy6V7e9vgjXF3t1YqtYcPVxA3RSIhPz/RtGkufn5CJvPm
0cFm04gvzUGhkMRiK7wxNjYsPz9RSYnU6KTW2ZkXFGQfHGyPLRmAI07FbD46nSyR8PGd6nSG
hAS30lIp/oNtpqlTxQ8/PKmxsdfNTYBvTaPRT5sm1mr1ZWXS/v6bNZ96Kri0VIqPNpfLNfX1
srKydg8P6+eeC8/La8J+vz09ra2tWWVlUnxVZ39/0YoVYZmZNeZca5HJyNmZhzdGIGD6+Ylq
a2VGp4B+fqLnngtvb1dIpQpfXyF+WhkR4dzZqSwra5fLNQwGxc9PFBUlxreGUal0WH0Gg+Lm
JvDysqHTKWw2jUQiEWuaBrCNDYv4mU+dKsbWCNTrx+WMhM2menpaOzhwsZfd3aqmpt6ysvbO
TiWJhJydB6LO2prFYlE9Pa3xoS74OSJCiFgTIWRlxfDzE7W2yo1OFu3tOX5+otBQB6PPqrVV
LpX2lZW19/SomUxqYqI3hUKuru4m1uRy6bGxrpcvNxs9IjQmaDTKyKHO49H9/EQREU5GLW9u
lpNIQ2+TyaT6+QkjI519fGx5PPrQlYbC49F9fGyjosRyuaasrJ04mILBoPj7i/BtikRsPz9R
WJjx59nermhtlZeVtXd3qygU8ty5njqdYe/eQuIVlI0N64knAthsGpYCwEO9tbUPC/XhDgpz
0OmUkBD7/n5EbFhkpHNvr7qsrB0PIWKoGwz9pqEeEeH09NMhDQ09+A+BgwPXy8smO7sOTwHw
+Qw/P1F4uKNRX+3tPdAHSiSC5OTQGze6sN7S3V0gEnHKyqS9vQNXCz4+ts89F45v096eg29K
KGTHxLjSaI3EkdKzZnlIJIK6Ohn+ybu5CXQ6w6FD14x+SmbMcE9M9C4ra9dqB75EYqib+WFi
vXpIiL2Pjy2xPDLSWSZTlZW1KxRaPp+xaJFvc7O8u1uF1/T1Fbq5CfbtK7YoBWBmqHt6WkdE
OAcEiIRCNl6I9eo6nb60VOroONDB2tiwGAyqu7u1nd3NZIFSqePx6BQKycfHlk6nCARMKpWM
f8sIIalUwWbTEEI02qAAFgiYfn7ChoYefDA5h0N/+GGfqqpOLAWAHT50+sCFPbGvxkqIoe7n
J8T2PkL/X1bWjmce2WxabKykoKDlloOh/tq707Jlwc3Ncjs7TnCwvZ+fyM1NUF/fExrqMH26
q5+fqLCwFU8B0OkUiUQwadLAt6xS6WpqusvK2tvaBvbu6MhdtizIwYHL4dACA+2cnHhD1oyJ
cZkyxenAgRJiCgDrV9vbFWlpBUa9uoeHtVJ58/EumUyNTyKDfbzEU53hAtjPT4id6mDfGobH
62WxaNbWTGx39vZchJCjI49MHogkEomEf1MIocBAu+Tk0FOnqo1SANHRLtOnu2ZklLe0yHm8
oUO9uLjtu++KiKHO4zEWLpzk4WFNfMQvKkqsUGixflUk4ixZEuDhYU0mk4KC7Fxd+RQK2c9P
KBAw9+wphBQAABaBFAAYY/v3Fx89WokQev758OefD09NzcnJqSNWMD8fn5Z25cCBEoTQ2rXR
8+d7b9p0+urVgTlv8MtInI+P7ccfz925My8pKQMrsbVlbd6cEBho969//Y4QunKl5fnnD+O/
ZGvXRs+Z42m0EQqF/NJLEba27Fdf/Z34y6TTGYj3Q8zR26t5//1zeOIgIcHt00/nmVabPdvz
9ddjNm48vXVrFrF8dJMUtLb2bd2ahf9Cz5rlsXv3wrVr/8Dv/ZrP3V3w3nuzdu26jH+eLBZt
y5b4oCC7NWuO63Q3r0xqa2Xr1p28fn3ghHvRIt+vv16wZs0xow0uXRoUG+u6evWxa9dG88C5
SqX/5JOLX311CXs5bZr4008fHLImjUZ5+eWoo0crn3/+MH4x9n//F/Huu7PWrDlWUiK1sWG9
+WasVNqHvzWMWq3r7FQhhBoaejZsOEWjUUQi9s6d82tqutetO4FXMw3go0cr8du/dDply5aE
yZMd16w5ZhqlYwJ7kgXPbixZEvCf/8xfs+Z4ZmaNXt+/Y0fu7t1XEEJvv/1AcLD9q6/+js8U
TQxpYk2E0OTJjkPGZ0yM66efztuyJev9988Ry1euDPvggzlr1hzHbwLHxLikpy8i1gwIsNuy
Jf7HH0s/+uj8WL5/hBBCUqli5FB3d7fevn1Wdnad0besUGiHS80IheyNG+MbGnr++c9DFh3v
ublNzz7765tvxkZETF+9+jhx4IONDYu4zRkz3D/99MGPPjr/8ccXiFtISgr+9NMH16w5NtyQ
mSFhof7771VYqI9wUNwSn89MSZl+4EAJ8eNaty5m48b41auP4SFEDHUKhfT22zNMQ93Jiffv
f8/Ys6cA29Tixf7bt88m7svHR/jxx3OPHKk06qsTEiRDtu3xx/3nz/devfo43v8b2bOn8Kef
yrB/SyT8LVsSfHxst2zJJNYJC3P46quH3n//HLbTV1+dumDBpCG3dvVq65o1x/EAMA31W8J6
9S1bMt9++wyx/JVXpr711gOrVx/He8vZsz38/IR4zY8+mmtR7gljZqgvXRo0Y4b7xo2niFkP
rFcPC3N46aWjX311Cbsm37Ahbvp01zfeOEnsq/v7+zs7lQiRnn32VxKJNG2aeOfOxH37ivA+
Wa8f+lfSz0/46acPfvPNZbymEezwIf2VriD21XgdPNRXrTqmVGpHCHWtVv/ZZxexkxCEUEiI
/VtvPfDNN1f+85+8YT/BwcRiKyyAV606+tlnD8bFSfz8RFu2ZBYUtBjttKmpd9Om03gvNH++
9549j6xeffzQoWvEaosX+/v6CrdsycTHJA5XczhGvfr/+39/EPOqBkM/8ZO/erWVeKozXAC/
8MIUJyfeunUniQMKsFOdujpZXl4TQujRR/0+/XTel1/m//zzwPGl0egtPRfCmIa6tfXQd4NO
nap+440/8ZcbNsRFRTkT+9WFCyf5+gq3bs0sLGzlcGij7vQAuM9BCgCMMZlMjU0jLJOp9fr+
9nbFqNeq6epSYZdbPT1qrdbQ1tY3wqaam3v37y85daoar6PTGXg8Ov4zo1LpiEteDXdLx8aG
NWWK4/PPhx84UGLR6bgRg6GfuNxge7tiyBQ1l0t3dxcsXuxPoZBu/3E7nc6A339ACKlUOmdn
HvH+gPna2voOHCg5ceIG/nlyuXQ2m4afWHh52SxZEiCXaz788FxxcSt++0KrNTg781gsWlFR
2/r1p9zdBStWTD5woJjPZ4SGOqxdG3PwYOnFiw1LlgQ6OnI3b84knueNoL+/v6Pj5ucplSr0
+iGGmCKE9HrD8eNVP/9cVlcnw1MVJBKyt+fQaBSEEIVCFonYPj62zz8fvn9/iemUV1qtobW1
DyGk0xnUal1fn2bkGO7t1eD3J5lMKotF5fHopOHuNd82tVpPHNah1/c7OfHwZFNnpxI7RZPL
NRqNvqVFPlzj8ZoIIbHYipjWwbHZNLHYSq3WmW7EwYFLvB107VrHgQMlFy7U4zXFYiuhkG1l
NZrwuyW9/hahTqdT7O25M2a4y+Wa/ftLbjkSYcYM95kz3S9dasrPb2pstGxtPKVS29iopdMp
QiGbQhn0vWPB1toqx7bJYtGcnXkajd7o8+zvR46OXAbDsl9ko1C/eLHx3/8+M7qHUBQK7a+/
lh8+XEFsGI1GFonYeLIJDQ51KpU8ZKh3dSn37y8+fvw6tqmTJ2+sX3+KONKHwaBgY1jwfXV1
qQ4cKNHpDIsW+SKEysrat27NEonY//d/Efv2FVlZMQID7f/1r2kHD5aePl39xBMB7u7WxG12
d6vwnCmXSxcImHw+Aw1WU9O9f3/JmTO12E4zMsorKjqIbzYszOGJJwIqKjp++62isrKTeJfV
KNRviculOzhw+/q0Rt8yhUKys+PQaDc/z6KitgMHSvLzm7Gae/YUcDh0S1OHZoY6n8+wtmZ2
dCiJrcJ6dezddXUpu7qUCKHeXrVWq29tHfoHt7FRiwZ64H6ZTG1aR6PRp6dfDQgQbd4c//PP
ZQwG1dGRu2RJAINB3b+/xM9POGeO559/Vl+6NDAqBDt88D8n9tU4PNRra7s1Gr1pqPN49KVL
g5ydeRs2nM7KqsVb5eYmsLPjWFkZx8MIOjsV+/eXHD9+vblZrlLpysraDxwouXixYdIkYX//
oB9xox9ctVrv7GxFvKmOuXCh4eDB0uLiNrzfHq7m8E0yt1dHJqc6yCSAsVBvb1ecPVt/40YX
MdQxGo0eyxdjO+3sVN7+ioOmoc7jMYihjvXAx49X5ec3EXfHYBj3q/n5TQcPlhYWtjY09NDp
lP/+95JOZ4AhAABYClIA4B7R0NDz5Zf5tznkuL8fNTT0BAbazZrlUV/fg53strX1EX/mx1ZH
h6KystPfX9TZqcQuhuVyTX19z3DXtyOj0ynYE+zYS7HYatTXoS0t8q+/vozftTDl5iZYtSry
u++u5uU1OTryHB0HhjjiYx2vXWvfvr09LW1hdLTLkSMVCCE7O86KFWFSaV95efuyZUHFxW2b
N2eOsn3D0+kMv/xSjj9ZbUqr1VdXdwuF7PnzffCAaWzsxU5/R0EoZOPD8ul0Cp/PGKf7/xjs
shw/pcN3PbFKStpSU3Pu2O5oNIqLy0ihrlRqKys73d0Fc+d6VVV1crl0vd7Q0NCDX8HiWCya
t7dNaKjDlClOKSl/jnrO0aamXi6X7uVlo9MZsPSfSMT28LBube0zOiMfK1io4zfo6upk5t/q
NNLXp/nhh5Jbrt5CDHUKhTRkqHd0KNPSCgoKBq7Pi4rajAYJD7P3YiaTiqUArl/v/OSTC59/
/uCcOZ7Y7VxbW9by5SFdXcoLFxqwqxfiHW9HRx7+jJi7u4DFGuLKqqqq85NPLuCZgpycOqPh
aQEBdikp099448/SUinxaWSRiIPGzaVLTZ98cnM8yJEjlaPYiGmoGwz99fUy01C/MzQa/c8/
l5HJpPT0Rdevd2FPZDzwgLu1NevUqeqpU8VJScFJSRn4M3FWVgyx2ApPLg/5gd8y1Dkc+tKl
gZ2dys2bM2k0Mr5ukbu7gJhzMYdUqsACGAv1oqLW7dvPIoQmTRIa1WQwKGKxFR5vzs68ITeY
nV339deXLWrD7eBy6S4uVhTKwLs2/TyxUE9KysBGWd4Ztwz16GiXZ54JTUk52djYS1x2ytra
+KHIc+fqv/giH/s3Fmzj02QA7nGQAgDgJoPBsGNH3nffFSGEnnoqOD1g0bGMAAAgAElEQVR9
EULoq68uffll/jjt8cSJG2Vl7QihadPE2O7Onatfv/7U6B4EsLfnbtmSgE+3Y23NJJMtO/ux
1NKlQTNnDpoOkPig6d2ps1P1zjvZXC6dRiM/91z4qlWRCKG33srKyBg2azCyxETvV1+div2b
TCa5uvKHm8ZsTEyaZPvvf8/AUy3jeoly1xKJ2COHenV197p1J5hMqlDIfu65cG9vm95ezYYN
p0znInV3F2zfPvvHH0tfffV3i6b8NLJr15XYWNd//3vG7t1X9u4tRAg99JBPUlLIF1/k3c54
orsKMdRJJJJEMr6hbqbly0PwhTaZTCo+6doovPDCFKM1Ox0cuKOYnO9OMg11hUL7xht/mjnt
7oSLjHTetm0GntN0cuKNOuceH++G/YziOBz66CbWMYejI++ttx7Ap/Idvx1ZJDjYPjV1Fv5E
yd0fwDjsUay+vkGtdXXlj+v0ugDctyAFAMBN/f2otra7thYhhNzdBdioPwcHTnJy2NGjla2t
lk2qZ472dgV2w5BMJnl4WCOENBr9P/85+dSp6kuXLPvZmzpVHB8vaWjowdvp6yt0cRn92bA5
Kis78/IajQo1Gj1xLi6JRPDii1MUCu3evYWJid7j2h5zaLUDzaNSydnZdVi2JTDQjk6nHD1a
adGtM6GQnZjo7eYmwG+fUqnkcX2PM2e6R0Y6FxW1lZYOPEARHu5kNPH4Pc+cUFcotNgYFmtr
VlZWTW1td38/io11tbJiHD1aSRw12turPn++3mDoj4lxkclURieg5quvl7W19U2aZItPomZv
z/X2tmluHmnU7t+FaaiTyaSHHvIZ+a9uk6Mj75//nKzVGtLSrgx5WHl4WCcmerNYVLxVtras
4Z4xNkdJyc0jC9fRoWxuHpdxHGPC/FC/8+bM8bSz43z/fdGMGe7EJ0owVCp5/nyfwEARMVsR
Fycxf4S8kaam3iFHsly8aPwjdfumT3eNiXGpq5PhY3yIE/5NlMRE79BQhwsXGvBRUdHRLsRp
He9mKpXu0qUm096ysrJzXAfWAXB/ghQAAEPLyCjHbgtv2RK/bl10UVHreKQAcJcvN2Op7nnz
vNLTF2m1BktTALNmeSxfHpKUlHHhwsAtxyefDJw3z2vs20pw+HDFBx+cG6GCTKa2tWVt2BD3
+usnt28/5+rK7+9HNjYsuVxj/gzb4wSbsxr799dfPzxjhvvZs/UWpQAcHLivvjr15Mkb2EqZ
CCEmkyoWW5me7I6VRx7xDQ11SErKwB9heOWVqX+XFACJRBIIGNgT7zKZSqnUjW47s2Z5rFgR
tnTpT+aEeleXcufOPISQQMBMT18UGGh3/HgV8bqovr5n+/Zz8+Z5vfDCFOzxn1FHplqtb2vr
I5NJ2BBiEglJpQriAgGjxuPRhUL2+MXVLZmGOpVKdnXlj0mTyGSS6QP8vb0aLpf++uvTt2zJ
fOedHCcnK72+XyhkKxRabLoZhJC/v+jttx/YuPH0jh25WImvrzAoyN54B2bbt68YmxLv7wgP
dS6Xvm/fY6ahfiepVLrWVvlDD3mLROykpIy+Pu2MGe4CAZN4UFCp5GeeCdHpDElJGfiqE+++
O3PUqaWLFxvw+Bxvc+d6Pv64f1JSBr7UxTPPhBotkTtqbDbNzo5j6eQgCKGlSwOFQvbSpT/h
Awm3bIlftmzQQolKpbalRU6nU6ytWTKZamwjhMGg8PnM0c1A1Nmp3Lkzz+gJHQDAOJmw8wkA
wP3gv/+9lJp6FjsdqavrfuONPxUK7Ztvxu7fX0JcCRzcDzgc2muvRaenL0pPXxQd7TrRzRnk
11/L33kne8mSgOTk0FFvpKSkbdWqY3w+A3uPbDZt9epjxAWuRu2JJwLffXemWGx1+5u6CwkE
zJSUmOeeCycW7tlTsHVrZnt7H0Koubl306bT7e2K7dtnHz9ehT8JDO5aubmNzz57KDNz4Pb+
vn1F//3vpZdeisAOirIys2aBvW/Nm+f1xRfzg4NHn8wawdmz9UlJGcHB9uvWRY9iBYqRBQfb
f/HF/LlzjZdbAgDcbWAUALBMUJBdVJQYITR9uiuFQp450x1bJj0np26EqeNu06VLzQIBMybG
JTTUASupqOgYjwcdyWRSfLwbcS4ozMGDpcTp/ceQv78oOtqFWMLnM7DZgy3d1JUrzQ4OnKlT
xfhUOhERTmQyKS5O0tIiz8yswW+zjInGxt7vvy9isagrV042+i+tVp+ZWYM9Vl1aKnVy4mH3
fHp7NRcuNCQkuIWHO37yyYXxC5iRcTi0hAQ3fP5CjFSqqKjoMBoErlRqjx6ttLZmEd8jMdS7
upQZGeVUKhmvQKWS3d2tyWTS8uUhf/5ZPebv8fz5Bq3WMH++t1o9cG956lRnJpM6d66nQqEl
HhTnzzfodINqFhe34bfNzVRV1blr12Wx2Mr0W/7xx1JLH9mlUskhIfbYjbI9ewot+luiK1ea
jxzhDhnqra3y06drVCqdUMhOSHDDeicMhUIqL2+vrOwc8q5XdXV3T4/Gy8vGzo6zfHkIHsAW
6exUZmfXLljgg73H/Pwmozta1dVd335bIBKxjT5POp2yb18xNtpcrzecPHnD1ZWflBSMT0Du
4mLV1NSLr0B+55mGOplMGl2ot7TI9+8voVBI+KZoNDKFQm5vV2BrhmOuXeuwtmZhQ0X6+rS5
uY3R0S7Tpon/85+8kpKB7rGuTpaefpXPZ+CbcnDgCoXswEC7p54KzsysMf8RjBFCvadHnZlZ
Y360l5ZK9+8v8fUVGk3VKZdrfv312ujmeRmBaaiTyUOEem5uI51OmTXLY/p0V2LNysrOGze6
LL0V3Nxs3P/39WkyM2uamwfGyrW19Z06Vb10aaCXlw1CqLKyk8Ohv/HG9JqabvygGDLUQ0Ic
rK1Zixb50mhkbGk6cwzZV+Py8hoLC4deUXLUTE9LoqNdyGTSAw+4dXYqMzNrzB/+Y9pXOzhw
6+pk2LOBFsnKqvX1FS5ZEoCvBxkW5mhlxcCWwMT6/5YWeUuL3M1N4OsrXLo0iLgWjFGomx4U
UqkiK6sGj2HTUOfzGW1tfaMYSIX16hERTr6+xtMuNjb2ZGbWmq5cAAC4HZACAJaZOdPj3Xdn
Yv/W6w3PPBP6zDOhCKGXXz5mdAqILag2JmPMfvmlvKxMunv3wsmTHbGS9PSrxKsdnc6g0eiN
Fuzp70cajV6rHXpqfZ3OoFbrjZpHJpOSk0MXL/YnFm7blr1ly+nbfAt6fb9arTNddy0uTvLx
x3OJJSdOXE9OPkRcAM9MR45Ulpe37969MDLSGS/UaPRLlwYKhay8vCbzUwBDfp4IIa3WgH+e
ZWXS11774913Z37+ufGqvHK55tlnf8WvoAyGQe99yE/eUgZDv1qtN/08dTqDSqUzXU8Be0fY
TgUC5urVUXFxgxYhf/HFI99+azwqQSZTv//+uWeeCf3ii/l4ITHUGxt733or65VXppp+CB98
MMf0oEC3Cktig4c8fL7/vqimpnv37oUSyaBH3194YQqHQyceFN9/X1RV1bl37yK85o4ducOl
AP76PI13d+FCw4ULDbt3L9y8OZ5Yvm1b9pYtf+LvSKsd4h2ZbrO/HwshvdGKX5Y6cqSyuLht
795FpqFub8/JzW1SqXSurvwNG+KI18wymSo5+dCxY4NmoiaGekeH4r33zq5cOfmDD+YQA3gU
+vv7NRqDaXxeutR86dKRL76Yv2nToM/zgw/OrVs3MIBZqzXs3Jm3aJHv7t0L8bUeN248vXHj
6fT0RcTjaMhQH4Xhgo344ZgZ6uYc3VVVnSkpJzdvjsc31doqf/bZQwUFLZMnOxLfkdFhjrWT
uNb91autq1cf+/jjuRs2xBF34eDA9fMTJicfwlIAWMdl0p8NMlyoI4SuX++qqek2PwWAzeSS
lrbwwQcHPZyydu0J/IGF/v5+jWaIHmwUTENdLtc8/fQvRqH+44+l16517N27yKjms8/++ttv
FcSaxN5yONeudRj1/42Nvc8++yueAiBuCgshg8H4LQ8Z6ph162LIZBKWAjAn1Ifsq3EbN542
MwVAfO9GfbVeb1Cpbv6QmZ6WIIQ0Gv3TT4eIRJyLFxux7Qz5O4VtCn9HQ/bVr7zye1raAqN+
dbifZtyuXZdnz/ZMT3+Ezx80I8arr06l0cjE/h+rmZa2wNb25gy+RqFuelBcvtxcXi7FUwCm
oY6dwKSkxERHu2DtNDPUsV599+6FRjdFsL1cvtyiVGqH+zwBAKNA+mn/d48tWTbRzQB/Fy/4
+AQMOTjt8uXmGze6iCU+PrY+Pra5uY1jsqIej8eIjHTCl4epqenGH8BDCE2e7GhlxcjNbVQo
buaJmUxqRISzUqkl1sQFBIjEYqvc3Maurpv3ZEgkUmSkk9G8YqWlUtMJoizl4MCNiHAqLW2/
fr2TWO7paRMW5kAsaWmR5+U14ncDLMLl0iMinPH1sUa9zeBge5GInZvb1Nt7M5dPpZIjI531
ekNubhN+ChIcbE+8cYfR6Qy5uY34JEl2dpzISOeKig5sRPSkSUIPD0FeXtPtDKwQidiRkc5V
VV3Xrg26xnZ3F4SGOuTmNjU2Drr7Fxho5+jIy8tr7O5WsVi0yEgno4n0L11qqq4eekVJd3dB
eLgT/nLIUDfzoEC3Ckuct7fNpEnCIQ8foZAdEeFk+rCl0UGBELKxYUVFOeM1Kys7hjsPtrFh
RUY619XJhgz1yEhno1nWiQcFg0GJiHDWaPS5uYPm3DLdJo1GiYx0euKJgNWro5KSMm7noWs2
mxYVJTYN9dbWvtzcBrVab23NjIx05vFuPl6u0ejz8hqNLlFMQ93Dwzo42J4YwJZ6//3Zjz/u
/9lnF0+cuDHkcJ7wcEd390H398rL241qOjtbRUY64St7FRW1NTf3RkWJm5t7sZrDhfooDNdX
m/artwx1rF+9eLHxlve6AwJEfn4DU6mrVLrc3EYWixYe7piX11hfP/COsACuqenGlk3x9rbx
9RXm5TXh66tjQkMdsFvNRGq1Dq8ZFeVMpZJzc5u02lv0gaahjhCSyzW5uY3YGulmwkLdaKhR
YWFLZeVA/4/11V1dSnz1xFEzDXWdznDxYoNRqCOEBAJmVJRxTdNQDw62t7Pj5OY23vJeLrH/
Vyq1ubmNUumgXj083JHLpefmNimVWoGAGRHhjAcwzijUcfhBYX6oG/XVuKKiNqNfiuEEBIic
nKywXwqjvtrJiRcZ6Xz1aiveqxudluCam3uxYMP6ajyAcRKJYMhQJ/bV5eXtpv1qaKiDtTUr
L69xhEn+HRy4kZHO+AoLONP+HzstIc44MGSoEw+Kri6l0YmBUahjJxu+vkKhcKBfxfpqc0Kd
zaZFRjqbLirU2tqXl9eoUumwUG9o6MFWUAbDaEPoPxPdBvA3ACkAYJEXEHK4dS0AADBBo5HD
w52io11iY10/+eRCVtbfY9Ey84lEnPBwxxdeCJdIBElJGaN4nAcAAAC4DZACAGaBBwEAAADc
CWw2/bXXpvX1aYkTgN9LAgNFO3YkurpawU0qAAAAANy1IAUAAADgTlAqtbt3X1Gr9SOMYv07
mjzZMTk5lEoli8VWjo7cQ4cqfviheNTPEQAAAAAAjCtIAQAAALgTNBr9sWNVE92KsWdlxfD3
F2EP316+3HzwYOnBg6UT3SgAAAAAgKFBCgAAAAAYvdzcxmef/ZVEImEvLZo3DgAAAADgDoMU
ABiliAinRx/1I5ZUV3fv318sk1m8HixACIWFOTzxRABCqKKi48CBkr6+MVsCd/Fify6XPrbb
/NuZN8/L11e4f38JtvQ6mEC3H+ozZrhHRDjt21dcVzf6dfvGkEKhvZ0VBM1kb89dujSwvLz9
+PF7cCQFAAAAAO4YSAEAi9FoZLHYaupU8UMP+RDL8/Kafv21HFIAoxMQYJeSMh0hdPx41W+/
VYzh5XpioreDA3dst/m3Ex8veeghn8zMGkgBTLjbD/XoaJcVK8KysmrvkhTAnSESsVesCDt8
uAJSAAAAAAC4HZACABazsWG9+WasQqFNSsoglsvlms7OW6wFDQAAAAAAAABgokAKAFiMRqN4
edlUVXUWFLRMdFvuUuHhjlOnio8cqayp6R6yQnS0i5+f8OjRKvymdGmp9IMPziGErl3rUCrv
39v1dxUOh/bQQz5dXao//rg+0W25d9zJUJ86VRwUZHf0aGVjI4z+AAAAAABACFIAwCK2tmwa
jSsSsel0CptNc3DgEv9Xo9HLZCq9vh97yeHQeDwGsYJKpZPJ1P39AxV4PDqDQe3uVjEYFGLN
7m7VKNYMp9MpfD6DQiFjL/v6tL29gx5JYDCofD5DLtfodIYha7JYVD6fOcLe2Wwal0uXyVRq
tX7kxsTGStavj71+vWu4FMCcOR7LlgWXlEhlMpWVFQMh1NTU++GH5xFCarVeqRzUAAqFLBAw
tFpDb69GIGAwGAOHrVqtl8lUBkO/UU0ajYK9VKl03d1DjMvgculcLp1Ygtek0ykCAbOvTzPc
8GwmkyoQMGUyFdZIHo/B4dCIFRQKbU+PZQ+DMJlUPp/Z06M2uiDkcOhsNk0mU2k0ehKJxOcz
EELYJ8ZiDexUqzXIZCqdzoD/FYmE+HwmkznwKWFhabpTFouGbRAjk93cO5VK5vOZNBrZzo6z
enVUTU331auteM2eHrVCYdTOW4Q6cZvEahaFOh7ARnsnvKNBAWxlxWCzB301RgeFQMAkkVB3
96B2YiGk0RiMDp/h4AcFmUzi85nor7DkcOhYYMjlGmwJQDabdstQx7eJ1cRgQc7nM03fu2lN
o7B85BHff/wjqLW1T69vxOoMd1CMAD8o1Gq9QMCkUge+RNNQx2qSySS8RK/vxwKYWI3PvxnA
mL4+TW/voIUSsYPirxkGkdH/AgAAAACMGqQAgAW2bZvh6enHZFL9/ERuboL09EXE/y0sbE1N
zWlvV2AvExO9n3sunFjh3Ln61NQc/KT/iScCp051Tk3NmTzZEa+p1/enpuZkZtZY2jYfH9uU
lOn29hzs5c8/l33xRT6xQliYQ0pKTFpawfXrXUPWjI52Xbs2eoS9z5vntWxZUGpqTl5ek6XN
G87s2R6rVkUSS/Lzm1JTc4hTKtjbc1JSpldUdHz7bcFrr0VHRTmPXNPPT4i9zMysSU3NMd3p
woWTnnkmlFiC1dTr+wMD7VJSpv/4Y8mPPw69qtnUqeKUlOkffXQeuzG+dGng4sX+xAqHD1d8
+ulF8z8BhFBEhHNKSsyOHblGK8Y9/LDPwoWTUlNzCgtbmUzKq69OxcJjxYrJDz7ohdW5fr0r
NTWHmGqh0SirV0fFxrpiL7GwNN1pQoLkX/+ahr/86KPz+N7FYquUlOmentYMBsU01D/99OLh
wxXETd0y1InbxEssDXU8gH/99dqQFWJjJf/61zR8m08/HbJw4SRiBeJBQaGQXnopgsWipabm
YJfoGHt7zvr1scXFbUaHz3Bmz/Z4+umQ1NQcKytmSkoM+iss//GPIGy60PT0q3v3FiLzQh3f
JrFmaurZnh5VSsr0774r+vnnshFqvv/+OSwsn3pqYO/u7tYiEXvjxjj8sh8PdXPeHQY/KC5f
bk5Jme7mJsDKTUMdq2ltzcRL2tsV27ZlFxe3EasRAxjzww8l33xzmViCHRTYQoMIoW++uWK0
EQAAAACA0YEUALBAa6ucwejhcOheXjZ9fZqGhh7i/7a3K7ATa4GAGRcn8fUVGlVgs2n/+EdQ
Tk7dtWsdCCEvL+sHH/Sqr+/p7+/Hanp52UydKv7224JRtE2t1jc392q1A3fbnJx4S5YEnDlT
h4+0FwrZ8fFuvb2a/Pym3l41seaTTwZmZ9cqFNqmpt7ISGcKhZSdXUe8ccfnM2JjJf7+oqam
3lGMUIiNlTCZlDNn6tRqnUjEjo2VIIR+/rlMKu3jcGjETykuTqLTGfDb+Bg2mxYR4eTvL1Kp
dEwmFa9Pp1OeeCLg7Nn60lIpQig42D4mxgX/MBFCVlaMp58O8fKywa/xbG3ZcXGuXl42Rl8N
VjM7u87GhhUb65qbO3DLNDjY3sfH9syZ2ra2PqzEwYE7c6b7Dz8UOzry4uJcxWIro01ZeosV
IWRvz5kxwz0jo9yo3M1NMH26q7U1CyFEoZCDg+3FYqvm5l6hkI3vVKvVz5/vfeFCw6VLzQgh
b2/b2FhXLpeOV6BQSI895hcUZG+08b4+LbHloaEO/f3ozJlahUKr1RpaW+UMBoXFonl72xqF
el+f8f1YiUQQE+OanV3b1DQQbEahHhbmGB0t1mr1xO0YDP0WDYNXKnWNjb2BgXYajT47u454
3c5gUOPiXCdPdmxs7FEqtWKxVVycxMGBa/TV4KHe2NhLIpECA+24XDp+TxtveWSks9Fd6xG4
uPDnzPGsru6WSvsaGnri4iT29tzGxl57e45arY+Lcz17tg6rKZdrbhnqPB4jLs41MNCOWHPK
FEeRiDNnjmd2dh1eyOXSExO91WodsebkyY4IoaysWplMjZXb2rLs7TlSqaK1VY7V6exU9ltw
+Y8QQthBYTD029tz1eqbX6KdHWfZsqDs7Dp8VkKsZkNDD365rlbrZ8505/Ho58834Bv08xMG
BtplZdXiAeDqarV4sX92dl1Li5xCIcXHu4WHO7a0yPEBBT4+tp6e1sTkAgAAAADA6EAKAFhg
8+ZMhMrFYqv09EVVVZ3//OdvQ1YTi622bk04efJGcvKvxPJHHvFNT1+0du0J7LoIIeTkZLVp
U9yHH57Haj79dMiUKU7Eke3mq6zsWLv2BP7ylVemfvLJvKSkDKMZ4P/xjyAXF/7y5b/U1nbj
NT///MGkpIzjx6vy8hrT0xfFxrpeutRMvApydORt3hyfk1P38svHzGmMwdCv1xtIJBKFQtLr
+597brJIxCkqamtr6/P0tHnvvVnffXf19ddPIoSuX+/6889q/A/T0xcJhewht/nAA24hIfbP
PPPLkSOVWMm8eV7p6Yu2bcvGUgALFkxavjwkKSnjwoWBi40nngjYs+cRBoPy++8Dj7K7uwve
eWfmwYOlRl/Nk08Gpqcv+uc/f6uvl2GD6ikUssFgWLBg0sqVYcuX/9LerjAY+ikUEomEdDqD
wdAfECD65JN5H398YeXK3wwGg6WXVaMTHu74n//Mf/75w2+++SdWEhrqkJ6+SCy2wlIA8fES
7Ns8eHBgFEN8vGTPnkdcXPjYp4Q7c6b2zJla/OXXXz88Z45ncXGbQqFtbOzZvDkTIeTgwN23
77ERQp1EQmQyGSHU0aHYvv0s/lUahfqjj/ouWuS3fHnGlSstowtvhFBhYctLLx39/PMH33wz
Nikpg5gC4PHo//rXtJYWOfa1PvSQz86diRs3nt6w4RRxC3ioj+2D8Vwu/ZVXpn733dXly39J
T1+0bFnQxx/Pfe21P/797zPE0RN//ll9y1C3t+ds2BCXn99EjM89ex5ZtiyYQiERawqF7Dff
nL5zZx6xZlrawpkz3S9fbv7++6Lvvy9CCG3YELdiRdg772Tn5NSh27N4sb+Xl83y5RklJQOB
9MILU7788qGkpAwsBUAmk8hkkl5v2Lev+KOPzmN1xGKrffse8/UVYikArE9ACJWUSF955XhL
y0BiIiVl+kcfzU1KymhpkdNolJdfjtTpDElJGXjCcdu2Ga+/HocFGwAAAADA7YDzCTCRGhpk
KSl/fvddEfYyK6t22bKfz5+vH789pqUVbNmSKZX2jd8uEELHjlW+9tofiYleL700MEo5JMT+
v/99eM4cz1Fv848/rq9Ycejy5Wbz/+T8+fply37Oyqq9ddW/FBW1vfjiEYGA+c47M5yceAgh
kYizZUvCypWTmUzqa69FT5ni9PTTGfg2ly0LSk2didW8Ay5ebHz66YzTp6tvXfUvpaXSl146
eujQ0IPnb5NYzE9NnSkQMF988UhR0UjjtF1crFJTZz31VPB4NGNi9faqU1Nzdu7Mw14WFrY+
99xvx45VjtX2d+7MS03NMZqbQCrt27jxdFraaEYMjc7//nc1JeVkfX3PcBWeey58wYJJKSl/
Gj0nQhQV5bx376LKys63386yaLzMvn3Fa9eeaGi4jxZBBAAAAMA4gVEAYCLJZOqTJ2/gc63V
1nbjN+ctZWvLCg93wuc/Cwy0G7JaQUHLCE9f9/f35+c3ubkJ5szxzM9vunGjCyHk6yuMinIu
LGw1/1ncysrOri7VU08FCwQDA3cdHLgPP+zzxx/X8/NHOY9AVVWnpdex9fU99fU9Dz/sYzRx
4wja2voOH66Ij5ckJLhh11dsNi0hwa28vP3774umTROrVLqMjHKdziAQMI4frxIImDY2rFmz
PGQytUKhvXSpqaNDafF7M1tDQ09GRrlFz2JIpYojRyqnT3f18rIhlksk/LAwR/wl/oC3Rfh8
xqxZHrW13fn5TdHRLnh5ZKQzcYB9WVn7qVPVCCEfH9tHHvFFCNXVySzK5uCuXm2l0ynTp7sy
GBRsiIGnp/WUKU7Xr3dVVHSMYoO3T63W5+TU4Q+PtLTIf/utor1dYWs79HgWS+XmNtrYsJ5/
ftBsC3192tOna+7koiRFRW0nT94YoUJ4uGNEhHN+fpO/v8jfX4QV2tqyiJ+DWGy1aJFvZ6ey
oqJj3ryb0wHg9YeDdT7PPhs2+jcAAAAAAIAQghQAuGf4+Nh+/PFcV1c+9pJGo3R1WXwtqtf3
79yZ9+CDXjt2JL71VtZXX11CCD36qN/ixf6rVh0d9dX7Pam4WLpq1VESiRQQYPfll/O9vGzq
6mQrVx4iPvN8N0tIcNuxIxF/yWBQ8afWLZWY6D1zpgexhEol4ws3IIQOHizF0jcvvjgFGxv/
3XdFL7xweBT72ru38Pr1rh07Er/9tmD79rMIoblzvV5/PWbVqqN//DHSBSq4AwIDRTt2JBJX
WCCRSEwmNSurhlht5cqw5ctDiCV0OgWfbgMAAAAAYFxBCgDcC8z3qcsAACAASURBVP7xj6DJ
kx2/+uoS/gD/jBnu+JzwFlGpdFqtgc2m4ROV0elkJpOqVutvuRagqago5y++mF9aKv3889zk
5NBb/8FdQyIRbNkSX17esWHDqSFbrtcb+voMCKGqqs7U1LPW1kw6nfLYY/7u7tbYY9h3LWtr
ZnJymK0tizh5xO0M0c/MrDWaqR6DzzWg0eixyPzjj+vY6m42NqydOxPT0goszSup1XqNRs9i
UfG54rEVOrVag1pt8USVYGxVVnampRWYLoppNA/Fjz+Wnj1r/LiTXK6ZqHEcAAAAALivQAoA
3AtiY10DA+127MjFF4djMqmjSwEghDo7lRcuNLBY1OnTB7Zw+XIzcfY183l723p72yYlZZw6
Ve3hYc1iUYOD7VmsO3TciURsHx9be3tznwLA1dR0Nzb2LFgwqbLy/JdfXnFy4imVushI57a2
vuZmudHMfx0div37ixFC2OJ5HA7t9lMAHA7dx8dWIuEblQuF7Ohol5ISKT7B+y3x+QwfH6FY
bEXc+MMP+1RVda5ff3O2vPBwR6MnBcxXWNjy5ZdmLaFXWNhaWNiKEHrmmdCtWxOys+tGMbSk
p0edn99EIiEsPhkMysWLjaMY82LK1ZUfHu7I5dJvf1NjyMfHNiBARKP9DWauaWjo2bu3EJ/k
bzhZWbW7dl0euY4RNzdBWJgD/qAThkwm+fjYYrMqVlZ2mn9QAAAAAOB+9jc4qQLgDrtypeX5
5w87OvLS0xdhw7bXrTuBzQswalevtr744hFHR96WLQmjuCYfnalTxXv2PDKKVMj33xdv2nS6
qUmOEGpvV7z99pm6OtmOHYnZ2XU7d+bq9YZxaOwgEgk/NXXmkiWBRuWRkc67dy9MSJCYvyk/
P9Fnn817+OFJY9rAiXTtWserr/5Oo1Gw+BQK2S++eASfUON2PPqo34cfzvHwsL79TY2hF1+c
snZtDI/HmOiGTKQlSwJSU2e5uFgRC2k08urVUVgYWHRQAAAAAOB+BqMAwNhrbe3buTPP2Zn3
9tsPEMsNhv733juLTxs2hg4dqmhq6n322TDSXwuHRUU5c7n0Z54JtbJiDDlIewRKpbauTkaj
kfEp4kaxiJpCod27t1Au1zz+uD9CSKnU1dfLaDSyTmf4/PPcU6dqLN3gLWVm1pBIKDHRe/58
b6zEYOj/9tvCRx/1xes0NvZ8+ulFe3uO6VezdWsWPkFdV5eyuVmu1eoRQjqdoaVFrtHoXVys
5HKNVKrA6nh6Wj/+uD/xjnF/P/rjj+v5+RbPcldS0rZ1a5ZYbIW3qr8fYau4GU2TVl3dffBg
qZ+fiFjzwIESfFh1fn7Ttm3ZQUF2ISH2+Fs7cqRSo9Hb2LCwkp4e9e7dVzw8rIkfwpQpTtbW
rLVro3/6qQwfwC+Xa0xrHjpUkZc3EMPDhbpRzVmzPOLjB12h6fX9mzdnju66Xa3WNTT0kEgD
UxhSqeT6+kETxV+71r5tW7ZQyDZqlV7f/+67OZWVHdjHcuBASVCQ/WuvTSNUMBw4UPrEEwGj
aNWY6OhQfvXVJYmET2x5V5fq+PGqxYv9R7FB7KCYM8dz7tyBxTiKitoOHiwd9dKMI/jll/Lw
cKeXXoow/a+8vCZsMgjTUMf19KgPHiytru7W6Qzff1/k5ydavz4W/1+dzvDTT2VGXw2JRBKJ
2FgY3OcpEgAAAACYD1IAwGI6naGuTjbCYFeptG/XrsvJyWHr1kUTy//8s3rduhMKhfavaorq
6m6LZncfzrFjla2t8u3bZzs731ydrqGhJzzcsa5OhqUA5HJNZWWH6Xjpzk5lZWVnX98Q4/yV
Sl1zc297+2iGWCsU2n37iuVybWCgnUw28Gxwa2vfuXP1n3xyAVtI3FRzs1yl0hndZtdo9LW1
stZW49nC+vo0lZWdnZ0DzcvJqaurk23fPhu/+j16tHLdupNsNk0kYmPbbG6Wf/ll/gsvTFmz
Joq4Kawmcb8qla66uqu9feCCv6tLVVHRQVyYzc6O89BDPsSl3Rsbe9etOzGKie7LytrLynLe
fvsBLF2CECovb1+37kRLi3zZsiA8YBBCZWXS1NSc9etjjWpWVnZiLwsKWsrKpNu3z8bXX8zN
bXz99ZMKhTYhwQ0Ltp4edXr61ccf9ze6DFMqtXPmeBYXtxFTAKY1i4uleApguFA3qhkQIMIb
jMnIKN+yJdPSD8qIRqNvauo1nUausrLzgw/ObdgQt2RJELF8795CfL16g6E/I6O8q0u1ffss
/Opx58683bsLXFyszJ+arqtr0OFDDGClUnvjRtdwh8+Qod7Vpfz224Jly4I2bIjDC9etO5mb
24gnthBC7e2K69e7lEotGgx7SoW4zZycuurqru3bZ0+ePLD6A5tN++mnMoQsSAH09WmqqjpN
l7owOiiOHKns7FRu3z6beFBg9Pp+LAVgGuq41lZ5VlYtlgL48cfSuXM933tvNoMxMOPDRx+d
//77Ijc3AZ6DQwj19/c3NfWWl7cjhCxaYhAAAAAA9zPST/u/e2zJsoluBvi7eAEhBxqNIpHw
1Wq90b1HI3Z2HKPl4mUyVW2tDL//5ujI4/MZtbXdSuUYZAE4HLpEwsfnSMN1diqx620rK4ZE
wm9uluOXtRiRiG1vz62tlRktPP755w/Gx0vWrz+Vl9d0y4d7h2NtzZJI+LW1Miz1IBZbsVi0
urru4WYWlEj4FAq5rk6m0928jGEwKK6uAqVS29AwaE1yHo8hkfBbW+X4VQFWk8MZeGC4q0tV
V9ft4sKnUgdt096e6+g46GEErCbxIX82m+bqypfJVM3NcoSQrS3b2ZlXW9uNpzN4PLqrq4D4
hDaWqhgymWIOFxe+re3AjXqlUltbK7OyYohE7NpamVyu4XLp6emLdDpDUlKGSMQxqklMJJFI
JImEjy/HKJdramtlQiHbKNhsbVkuLsZzDSCETC+qjWrW1/d0dAwKIdNQN6rp6Mg1evoDD8tR
e/vtB556Knj9+lNZWTVDjlIRi62MrkWl0j6jmthBQaEMfIktLfKuLqVEIujr05g58kUoZDs4
3Dx8iAHMZtMkEn5Xl2rIw2fIUMe3SZy7obZWFhXlnJ6+aNu27E8+uYAQsrfn2tqyamq6iekh
hJCrK59GI9fWDtomnU6RSPgczsBwFdNQvyUs1KXSPpPAuPVBgWlvVxAPXmKo47RaPRbq2EuB
gOnqyieTB8Y1NTX19vSo3dwEMpm6uXngqyGGen29bFzX4wQAAPB30IbQfya6DeBvAFIAwCIv
IOQw0W0Ydx4e1omJ3k8+GUihkJKSMqqqOie6RQARUwBjMnLk78vZmZeY6P3EEwFisVVSUsb9
sFblvHlexBQAAAAAAIYCKQBgFngQAIABLBaVz2cihGJiXLZtm4EQysmpM71FCcCEYDCofD6D
TCaFhztt3Bhvbc0sKGjB5mu4x7DZNCsrhlFJe7ti1ANMAAAAAAAADlIAAAyIjnZNSYlBCAmF
bDab9uWX+Xv3Fpr/UDQA4yoszCElJYbDoQsETJGIvW9f8ddfX6qu7p7odo292bM9Vq2KJJZU
V3evW3cCW08RAAAAAADcDkgBADBAoRh42L6hoaegoOWXX8rz8u79IdZ/F1qt4fTpGr3ecAeW
JLw7KZW6xsZeNpvW0NBTXNyWkVF2/nzDRDdqXMjlGqNpL65daz99ugZ/Th4AAAAAAIwazAUA
LHJfzAUAAAAAAADA3w3MBQDMYjxxMQAAAAAAAAAAAO5JkAIAAAAAAAAAAADuC5ACAAAAAAAA
AAAA7guQAgAAAAAAAAAAAO4LkAIAAAAAAAAAAADuC5ACAAAAAAAAAAAA7guQAgAAAAAAAAAA
AO4LkAIAAAAAAAAAAADuC5ACAAAAAAAAAAAA7guQAgAAAAAAAAAAAO4LkAIAAAAAAAAAAADu
C5ACAAAAAAAAAAAA7guQAgAAAAAAAAAAAO4LkAIAAAAAAAAAAADuC5ACAAAAAAAAAAAA7guQ
AgAAAAAAAAAAAO4LkAIAAAAAAAAAAADuC5ACAAAAAAAAAAAA7guQAgAAAAAAAAAAAO4LkAIA
AAAAAAAAAADuC5ACAAAAAAAAAAAA7gvUiW4AuJdRqWRHRx6HQyMWtrTIu7tVE9WkkZFIyNGR
RyaTmpp6DYb+4apZWTGcnHjEEqVS29ws12j049/GexmbTXNy4lGpZJVK19zcq1bfy58nFmwk
Eqm5eVCw0ekUJycek0nV6QzNzb19fdrx2zuEOgCYiQp1Mpnk5MTjcukIoebmXplMPa67GxMO
DlyBgEks6ehQSqV9xBIej+HkxCWRSHjJmPfqIhGHy6U1NcnVap2Zf2Jjw7KxYY1fv2omPp/h
4MBrbu7t6fkbfN0AgHsSpADAOOLzGSkpMZGRzsTC1NScn34qm6gmjYxMJr/0UgSbTdu06XRv
r2a4ajExLm+99QCxpLi4bdOm0/X1PePfxnuZn59w27aZtrasioqOTZtOX7/eNdEtGkdYsDEY
1E2bTisUN89HnZx4b731gJ+fsKNDuWnT6dzcxvHbO4Q6AJiJCnUOh/baa9OmT3dFCG3dmnX4
cMW47m5MrFw5eeHCScSSPXsKd+zIJZZERjq99dYDdDoFLxnzXn3JkoDp0103bTpdUdFh5p8k
Jno/9VTw+PWrZoqNlWzYELdp0+k//rg+gc0AANzPIAUAxkt4uGNCgltPjzonp45Y3twsn6gm
3RKJhDw8rLlcOoUy0jMyUqmC+KYeeMDd11fIYMDRdLt4PEZIiL2DA5dKJbNYtFv/wd8ZFmxM
JpVMJhHLmUyqn59wyhSnlha5lRVjXPcOoQ4AZqJCnUIhe3nZTJnihBASCtnjvbsxUVnZiX9W
IhFn3jxPZ2eeUZ32dsW5c/VU6kD3Ehsr8fcXjW2v7uzMCwgQsdkWbNPBgRsSYj9+/aqZhEJ2
eLijjQ1rYpsBALifwZkcsAyLReVw6KblcrlGpRo0GO+BB9xfe21aUlLGyZM37lTr7pD8/Kb8
/Cb85eefP4idwIEh0WgUHo+uVGqVylsM19Rq9Z2dSiqV3N2t0ukMd6Z5dxu93tDdrWpvV3R2
Kid8vD2EOrhPTFSo9/f39/So29sVCCGj39AxR6WSeTy6Wq0nDjsahf37i/fvL8b+HRrqEBJi
b1qnsLC1sPAE/vL992fPmuVxOzsFAAAwhiAFACyTmOi9cuVk0/LPP889erTyzrcH3P0CA0Vr
18b89FPpLR8AKStrX7XqKINB7elRNzTcp0PNm5rkmzad5vOZarWupKRtopsDABhHfX3aDz88
n55+FSFUVNQ6rvtydeW/8cb0nJy6PXsKx3VHAAAA7nKQAgCW6evTtrTIEUI+PrZRUeLs7Nqa
mm6EkFI5cFchPNwxKMgeITRlihOLRZszx1MstiJu4fz5+mvXzH1yz86OExcnqajoqK3tjo2V
4OMkq6o6iYM2p00TCwTM7Ow6b29b/I6EUqk9c6auubmXuMGoKLGfn5BYUloqHfKxQGJNmUx1
5kxdR4fCzGbjPDys4+IkxBKptO/MmbreXjWPx4iLc21vV1650hwfL3F2tkIInTlTq1brYmMl
TCa1vV2RlVXb2zswXZCvr3DqVDFxU42NPWfO1Jk/ExIRl0uPjXW1t+cSC3Ny6qqqOrF/29qy
4+Jc+fybcz5ptfrs7Lq6Ohn20tGRFxfnWlwsbW7ujY+X4DWvXWs/f74BISSRCOLjJWQyyd9f
lJjoTSaTeLyB4ZdyuebMmdq2toHpoyQSQVycK3FEOp1OwUeQYqhUclycxGDoz86ujYoS+/jY
YuWdncozZ2rxCSa9vW2nTnU+c6autrab+Ofh4Y5isVV2dl1npxKvGRPjQqzT0iI/c6b2Nu+P
DUcgYMbFSfCRn1VVnRcuNBArYKGOzQqGUSq1dPoQXbRpTZVKl51d29g4bKiPHMDEmj096qys
2rENdUs3dctQDw62///snXdAU9f3wG8mWRDCSth7yhYQRVxVsY6qiF9rFUfbb11d1vGzw4ra
fmutfu0Q0dbWVm39trXgVooDVJS9p+wVCCsEkpBBkt8fj16eL4AJgqN9n7/I5eS+m5fzTu49
99xz3NxMU1JqTU0ZaEm0AutIUJAVj8e6c6fO3t44MNASacSoOpT09rZAt6BVfcoUu7S0JrFY
MWWKHZ1OQdTS1tZo/HgrtCTCpEm2UIERCgsF2dnN4C8FTkmpw1wdAGBsTJs61b6xsRuRBACQ
SITwcHsHB2O0WHY2v7BQb88RnU4OD7eH+fDq60W3b9ehI3EQBebze4qLWweVhLa6oGDwdayN
jdHUqfZZWXwd7f+ECTZmZvSUlDq0VX+kqiNAq46oZUpKbU3NQwYB4uVl7uvL1e5TGw8Ps8BA
y5SU2qEk/f15Tk6cO3fq2toe/fgg9t/cnIlu1NZeRNVv364zMaEPr+q+vlyowAg1NcLbt+s1
Gg1iq+l0ip0de948Ny53IEvfI1VdIlGkpAzY6rFA2/4Lhb1oWw20VB2x1Y9zURcXEyT/AoL2
tGTcOIvg4P4wEOR3B6NCAQGWDg7s27freTzWIyXRCpySMjByGxujKVPsc3Kay8raBx0nRoEf
aavDw+1pNFJKSl1AgCVaUlstw8PtnZ056Ja8vJa8vJZBh4GDg/P3A3cB4OjHtWuV165VAgBe
fz0wMNAyNjbz7NkStEBkpOf27WEAACKRQCQS3ntvokbzUL7xTZuu6O4CcHMz/eKLWSdO5P3x
R8nOnVPgFOfUqYK0tEaVSoN0vmqVn48Pd/Xqc5GRHjt2TEau3toqiY5OgC4AAoFAIhFWrvRZ
vz4IfYnDhzNycpphV4gkmUxES5aXd7z66nmhsHeY3OmDMmmS7YkTC9GdZ2Q0VVaer6hQcLnM
jz6akpPTXFnZuXlz6OzZLiQSYfXqc21t0i+/jDA3Z+bkNC9f/kdPj5xAAEQiceZMp0OHItCd
JyZW5ea2jMAFQCQSuFzmjh2TJ016aA382msXkGklkUhwdubs3TvD3X1goSIWK1599XxTU7dK
pQEAjBtn/uWXcw4dSrt+vRotefx4TmYmX6XSjB9veezYfDKZiNz5pUu9lizxRGTq6rpWrz4H
p5Xjx1seOTKPRiPD4RUUCKKjE9CVI2g08ltvhajVmqws/tq1/mvW+CPtBQWCtWvPd3fLka9m
6lT7b755MTo6AeMCiIrymj/fLTo6AU4rp061/+67Beiv5vbtutLStoaGbn2/5UdCJBLs7Ni7
dk319e2fCJ46VZCVxUdnAXB1Ndm37wV7e2P4FowCw3YPD7N9+2ba27NhY3u7dM2ac5iVySuv
eG/cGIz8PZQCa6t6VZVw1aqE0VV13bsaStWTkqoKClrb2iRIVy+95P766wErVsQHBFgikoiO
rV17Xl8XwLJl46ZPd1y9+txLL7nv2jUVAEAkEqRSZXR0AmZdtGzZuC1bJqnVamjPoKoHB1t9
++2Cd965VlvbdfDgbEtLw8LC1tWrE1580XXv3ukkEvHYsSzEBfDXOAcUGOHAgXv5+QKVSh0e
bvfVV3NWrUqADxoCokJ79ky/dOkBdAFQKKRNm4KXLPFES+7ceaukpB09Tl1gs2nvvTfxhRcc
kZcXLz7IyWmGjxUAwMbGaPfuaTdv1vz3v2lbtkycMQMriSjwjz/mFxe3aV+dRCIEBFgePjz3
//7vuo72f+VKn+Bg67KyeGjVAQAdHdK1ay+0tIjRH3nlSp9Nm0LQF4VWHVHL5cv/QFZQRCKB
QCCgJWfPdv7ww/Do6IRHugBmzHDcs2dadPQ5zNXBX3q7aJH7yy97Izb8kZ/OwoL5/vvhEyZY
/9XD4AqMqPrq1ed8fLjoh+KNNy7W1AiRYSBXhwoM+e234tTUhr4+jZeX2YEDs3k8FiI5b57r
iy+6IDJisWL16nMYVV+61Ou99yYifzc19axaldDeLh11qwhBHh8qlQQvUVLStnbt+a4uGdJC
JBLodMrGjcGLF3sgAoitxmRR0R0SiRAebvfttwtgy1tvXa2sFKpUAz6viAjnzz+fifzd16d+
9dXz9fUi9PceGemxdKnX6tXnwsPtP/vsBWScarUmOjoBugCQG45R4FWrzsGR+/vzYmPn7tx5
C3EBaOsnRoHRVn1QW/3GG4Hm5szc3BZo1YlEQnW1MDo6AaOWb7wRuGKFD/oTffrp7cLCVn1N
Bw4OznMK7gLAGWV++60Y2YOaN891/ny32NjMoqKHtqTQ5y11JCrK09bW6MSJvEOH0pAWOzv2
Tz8tio3NvHevAWlxczM9dCgiK4sfHZ0AAHjxRZfZs53RnQQE8DZtCq6s7EQEIM7OnCNH5sXG
ZuTnC6DksWPzYVcAABaLunatv4eH2cmTI4mfPHo0C8YscDi0bdvCrl2rRNzts2Y5GxoaXLtW
VV3dtWlT8IYNQRkZTdu3X3/5ZW9z8/6QBy6XtWlTMIlExIy8ublnBFusAICFC93nz3f79dfi
uLgsdHt6ev9G5Suv+ISF2X75ZZpYPJArnkQihofb29qyY2Mz4Lxh+XJvJycOWtLBwfi77xbE
xmZmZjatXn2OSCR4e1ts2hR86dKDy5f7j4pIJAp0DufMzKZXXz0Pd4FWrPDBRI5AgoOtf/hh
YXb2wFfDZhu8+WbIrVs1Z84U6XsflEpVbGxmenp/DIiZGSMmZlpCQtmFC+X6djU8UVFeM2c6
ffttNqz4hShwaKhNTk7/cu7Bg47NmxNhog1tBUZYvdovKMjqP/+5g45WkMv7tLdeT57MhzvP
QymwtqozmZRRV3WMl3AYhlJ1Cwvm/v0z//e/oqtXK5EWMzNmTMy0zMz+kU+caLNpU8gIBgwA
cHQ03r9/JrwJM2c6LVs2blDJ+vquw4cz4REVqOrIy9dfD0hLa/rww5tRUV6TJ9t99tnMrCz+
O+9ce/vtgYGFhFht2hRSXNyK+YCuriZffTUnNjYzObl23bpL4eH29vbGsbGZSmV/MgjEVXH4
cIZ2yFJ2dvPXX6crlf2rFy8v8337Xjh8OBPjBRueri7Zvn13f/wxD3lpack6fPjFH3/Mx2Ry
mTvX1dSUcenSgxMnsJL5+S2bNycGBVnt3z/z668z0FcnkQibNoU4OXHefPMqNDK64OLCQVt1
AACVSpozx9nJyRjedoTKys7Y2AyBoN+rCK06psPVq/2cnDixsZlILJteJCVV9fTIB726oyPn
7bcndHX1btmSVFmpU8Z7gUAcE5MM49qGUWAzM+bOnVMzMprQOhMQwNuxY3JsbGZXl8zRkbNp
U7BYrMAoFVyyFhW1vfnmVTqdbG/PfvvtCenpTb/9VozI9PWpoUcJcuZMUW5u/24wjUZetmyc
q6vJ99/n6vK5Rszx4zm3btUifxsaUt94Y3xKSi1i1adOdXj99YC0tMb4+P6jZIitnjDBBr1o
1xFjY9qOHZMx99PPj7tz55TY2Ay4Tr5ypYLPh/sHYPx4Kysrw9jYTHS+BktLwz17psOupkyx
//e/Hzom6eZmtmlTcHu7FK3A8+e7YcokQaKivCZMsI6NzayuHlyL0FZ9KFvt68tFW/UlSzz9
/XmD9lZQ0BobmwErwnh4mB48ODs2NqOiQj9HKg4OzvMI7gLAGWXy8wXIWtrGxmjmTKfk5NrH
TwdIpZL7+tTXr1fDHZI1a/z/9a9xFy8+gC4AEonAZFLKy9t//bUYACCVKgkEApJjCcHKyjAy
0nPnzlv/+99Da8V33w1dvNgjPr4UugDIZCKTSS0sbIX1mTw8zNatGy+T9em+LqJSSf7+PHNz
xqVLD86eLUlOrkXaQ0Nt3ntvYmOjCHEBUChEKpV09259Z2fvpk3BNBq5q0t27lxZQADP3Lw/
TJHFos6c6dTeLk1Jqc3NbXmcmEw2mxYQwENOaiQn15aUtA0q5ufHDQqy+uqrdHR0IotFjYry
tLRkHTmSCUC/C8DAgKRQqK5dq4TrovXrg6KivM6fL8/K4jc0FAMAZs50eu21gPx8AebOQxoa
uhsaBlaJSND+oJJkMpHFouTmtsBaSv7+vDffDOnokOruAqDRyAEBPGNj2qVLFWfPlqSm9qvQ
tGkO//d/YeXlHaPuAvDxsZg40ebIkUwYZvnCC45TptijDzu0tUkvXhyoB8bjsQZ1AQQGWk6b
5pCd3ZydzR9+opad3Qwn90MpsLaqu7iYrF8fNLqqfvasjj31q3pWFh+jKnPmuOzcOSU3twW6
AIhEQKdT6utFiCSf32Nvb9zQgA2e1wUSicBgUCoqOpGuRCIZm22AXiKamTECAnhyuerChQe/
/15cV9d/FajqyEskh8WFC+Xe3hZTptgzGJSqqs4bN2qWL/eGXdnaspcu9bp9uw7zAXfsmPzS
S+6//16SnFzL5/csXepla2t09GiW8i8/j68vd+JEm6+/ToceVTs7dkAAj8/vyctr+fXXYpg5
8rPPXpgzx+Xnnwvr9AmUlsn64BcHAFi0yGPPnul37zZgrDeVSiISCXfu1ENNRktevPggJMR6
7lzXU6cK0FcnEAgTJ9qwWNSPPrqJ9io+EiKRiLbqAAAzM8by5d4mJnRkEW5hwQwI4EkkygsX
yn/7rQSGzECr3tjYfenSAy6XGRxsnZfXHBhoOWuWU329KCWlrqmpOyDAkk4n//lnlS5GtaKi
s61N+sorPvDqEBMT+rx5rj//XHD5sq4l/cRiBebewt1drZsA6HQyVHWEiAjnwEBLZFluYkKf
O9c1P1+QklKXl9eCjp9HEAjE58+XAQD8/Xlr1vgXF7cOZYoR0AHhNjZGr70WQCQSxsIFQCQS
AgMtrawMExOr/vijFFp1b2+LjRuDhcJexKo7O3MiIz0TEsqgM9HHxyIoyIpKJfb26u0CIBAA
jUZubhajb8LUqfbe3hY//pgHXQBlZe3w549MJr70kruzM+fYsWzM+BkMSk1NF9JVW5vEysoQ
Og4AAObmjAUL3L7/Phdey8jIwM3NlEbrr5UoEEgSE6uYihnergAAIABJREFUTEpYmG1OTouP
j8W//jWuoaE7KamqoqIT2lXYJ9qqD2WryWQC2qoTiQShUCYUDoTUWVsbBQTw2tqk58+X/fpr
cXd3v2M6JmbqvHmu//tfEe4CwMH5J4C7AHCeA86eLfn889ThD2kjm6hwbzkxsTI5uXZk57pz
c1vWrbs4gm0iNIaG1O3bw3p65NHRCcMMIympetu2PyUSpZeXOQAgLi7r558LB5WfNcvZx4e7
bt3FxMSRVxJ2cjLev39mYmLV5s2Jo3Lo/Zdfir76Kk0iGZPz89pkZja98cYloRA7x9ULExP6
Bx+ENzX1rF17foxO/j+SO3fq8/MFx47NH0EsKxLwsnfv7QMH7j3mMJ6kqo8ubW3SmJhk6L65
f79xzZpzI7t6dXXX9u3XYSa2Gzdq7t1rlEoHVqre3haHD889fjzn88/vDnOJ48dzTpzIQ56F
ujrR++9fz81tGbsyb1OnOnzxxazNm69duFD+xCpHXLlS8eGHN5/Yt1xV1Ym26toEBPCOHVvw
3//e/+GH3EFHde9eQ15ey9dfvzhxou26dRcBAC4uJgcOzP7ss7u//Va8d+/0nJzmjRsvPzEL
NgLa2qR7995GHyAflIUL3T09zdatu4RJMvIsQ6GQ3n03lEgkrFt3Eb1GfSSlpe1vv3119+5p
I6gyIBLJ9+1LTUoa+c8opLm5Z+fOWzCw5c6d+uzs5uF1qadHsW/fXT6/56uv5gAA8vKa1627
uGfP9JiYaa+9dgEAYGVluGfPdAsL5sGD96Bd1Us/Cwpa0VY9Pr700qUH6B7CwmyPHZu/eXPi
77+XPK1fQBwcnKcO7gLAeQ6QyfoeGfHe16fu7pbDID25XCWXj3BarFSqRCL5iN+OQCAQmEyK
t7fF3r3T0e08HgtG+AMA5PI+GBwOAJBKlRIJdpesrU168OB9Ho9FJBKmT3ecP98NAHDyZH5m
pt5HKkgkIpKTDzr+HxOZrA+GET4BFAqVSCR7zAUPkUhAsiF+8slDX421tZGxMW2od40uCoWq
q0umUKhgBgQd+f33EuQotZkZ45tvXgQAJCfXDlpqYelSL5ifj8Oh29mxtWWepKqPLmq1RixW
wCykSqWqq2uEn0KlUvf0DJgOhUKFUTAymWhkZLBwoQfmHmKyA/b29sEtbpVK3dODrZM6uhgY
kMzM6KtW+WEyemBe6oiRkcGqVX4wo4eTE8fAgKQtJpP1DW86Ll2qEAplK1f6OjoaJySUAQAm
TLBZudKnoEBQWNiqr6ZhrLo2FAqJzTZYssTT1dUE3e7n1x/5jHybFAqRyaQgOfBIJKKRkQGN
RkLsAJFIQFvg4entVR45kuXjY/HNNy9CC7xkiWdoqM2RI5nQITW6YFRdm/p60Sef3OZw6BQK
MTLSc8UKH4VCdeJEHuYInu4sXuwBcz2wWFRnZ86IuxoeAgEwmRQfH4uYmGno3JOmpoyhAsEQ
HqkYw6BWayQSxSOXvi+84LhoUX/qASKRMH68lXZ9FpUK+WqGNB3aaDQasXjg6kqlWiSSQ1VE
rmVoSKXTyYhd7e1VonPioK26sTFNF6suk/VhbhSVSjI2pr3yis/48Q/ljxzqeAIODs7fEtwF
gIMzhpia0rWLS5eWtjc2PiL1FBqRSIYEQLJY1JiYaUiHZWXtPT2KyspO9MwJR3fMzBjaX01R
Uesjs4I9XW7frkNSYa9bNz4iwhkAIJEoa2tFVVWdcKbI4dCcnU1CQqzhB6TTKUwmZUwHNiqq
/ixjY2NEImFDNjIz+Z2dvRYWzEHfMjLUas2DBx1sNi0oyOrBgw6ZrM/FxUSl0hQUCDDrFgKB
4OzMwfitFApVWVm7XtuGlpaG3t7mwcFWsE6BiQmdSCQO/65BSU9vFIlkZ84s0Wg0iAvA09Ns
/fqg6OgEeNhk1LGzY1OpWIdFdjYfvXbicOhBQVYyWV9RUauLiwkYEXK56uLFcjbb4NNPZ6Sn
NyEugMmT7SZPtlu+/A99U1GOFq2tkp9/LgQAWFqyYmKm+fpy5XJVcXGbXN5XWdmpZ1ZIAxcX
k+DgAdNBpZLQxUfGAg6HHhhoiUk3WFnZ2dDwdOrCMhgUjP0kEAgmJmPrHWaxqAEBPI0G5OcL
XFw42gLaVp1GIz+OVXd0NDY0fOibVas1eXkteh3VwcHBeX7BXQA4OGNIamrD1q1/ard3dvbC
+nC6I5UqDx68f/RoFgBg27ZJ48dbbtmS9JhR8f9YkpNrP/zwpnb7COrhPRV+/73kxo0aAMCi
RR5xcfO2bv0TVsny9+cdODD79OkCmIPKyYlz4MDsMR3PMKo+ptd9Ypw5U6h9HFqt1ggEEphf
fVRQKtVffpkWEeFy7Nj83btT6uq6DhyYffVq5fvv38Ac2VAq1V9/nYGUaEGjUKgEAj0Od8yd
67JuXdAXX6TCJHAzZzodPDi2CjOK/PRT/unTBZhGlUoNswMCAPz9eceOzT98OGP37pSxfhae
Fm1t0j17btPpZBqN/P77k319uVu2/KlXwrxx4ywOHpx97lwZNB08HuvLLyOGf9djkpHRtHXr
n9oRIk/rp83GxujTT2eUlLTBm0AiEQ8enDWmF3VxMTl0KOL773O3b08aVD+1rbq9PfvQoTkj
vuLRo1kwjwlEqVShnxocHJy/MbgLAOc54IUXHHt65GfPljyZHVp3d7MPPww/e7ZUr+TVg9LT
Ix9qa2gELgC1WgPzXTEYFDMzhva25PA0NXV/9VU6l8vcsmXi2bMlMLHZ3xhHR+OoKC9MyXoA
QHf3kF8NhMWiLls2zsHBuK9PffZsSXHx4NkTR0BAgGVUlKevL3eYc87D09nZi6yu+/rUjo7G
DMbAdhCTSXVy4iiVavgByWTioMUjn4yq/z3o6Oh9Mh9Qo9E0N4vFYoWTE8fIyIBOpzg4GKvV
GkzlNkSypUX8+KPicOi2tkZCoQx25e1tMeIicG1t0tjYTGtrQ+RgiEql2bUrWbtixSjS3i4d
/ib89ltxX586KspLqVTfv9+wf3+qhQVj1Sq/CxfK09KwFRYeSV5ey86dt1xdTZAP2NUli4vL
6uh4+q6uvj51U1M3AIDFohoZGRCJyNEHPWAwKA4OxiqVBt5PmawPBrqPEWKxoqpKqFdU/1BW
fVSgUkm2tkbl5e1o+9nTo9D30NagMBiUZcvGLV7siW68dKmCQiEtWzZOowHZ2c1ffplma2v0
zjsT7t9vzM/v98ppW3UAwAhKAkMEAsnf22Lj4OAMD+4CwNEPExM6EvXK47EIBIKVlaGHhxkA
oKVFjI66HF3GjbNQqTSVlULkHDsAgMGglJe363WgXSxWVFR0UKkkZMAQCoVYUdGJPoFvacla
uNC9uVksEvV/ImtrQ4FArFcqfpVK3djYrVJpMJdDQJcqeCRUKsnSkkWnPxTyJ5EoZbJufUsi
NTeLjx7NWr8+aPly7+pqIabP5uYe5FhsW5tUIBBbWxui/0ujkUUieUeHVN+iwRKJorKyk0Qi
wFuhVKr4fPEwp1tHTFeXrKKiw9CQCq/l7W2xcKGHu7sZ9J709anr60UyWd+gX01bmwTO5lks
6sqVvtOmOchkfcXFbSN2AbS3S/n8HktLlkzWf8WJE22WLPG0tDTU1wXA5TI5nIecR9oKrK3q
jo4cGo1sYkJ3dTXh88VQWFvVeTzWqKu67tquUKjq6kQKhQrTFYdDq64WPq2AAm0FhqjVGnQC
8EfS0yMvL++g0ciYrohEQlVVJzrOH0qamTHq6kTawSnaqg6Ry/v4fLHuy4OOjt7a2i4TEzrs
ytrakEgkcLlMe3s2n98DKw7q1pv0+PGcrVsnffHFLADAjz/mrV17Xve368VQVh0AoFKpoaon
JJQplWoki0pTU8+RI5kxMVOXL/devvyPERSpLSpqLSpqPXVq8cqVvgCAzZsTf/hhbAvmDQ+N
RrayMkQfhUAqy7S2SjC2Wibrq6kRajQA3i5EgWHst7aqc7ksBoPC4dDc3EzRkqOCRqNpauph
MCiurqaw/iWko6O3rU0CdLPqo4hc3ldb24U2aEj+CAMDspubaXW1UPepjlSqrKoSEggDN9zI
yGDOHBfMmanExEqRSIYc7OrokP7wQ+6774Z++GF4dHQCjPHRVnU7O/agVv2RiETysrJ2JpOi
/dQoFKrm5p6xdvrg4OA8C+AuABz9mDvX9Z13JgAAzMwYFArx7bcnREf7AgD27bs7aE6yUeHs
2ZLLlyvWrvW3t+9PfnP/fuPq1edqavQofJ2b27Ju3aVXXvE5dWoxuv3mzZqNGy/X1AyU4UU2
eebNc4WSAoH4xIm8jAw9Jos9PYr9++/NmuWEuRzCd9/l3LxZo2NXXC4zJmYaJvfYiRN5SUnV
I0vFd/58WU2NcO3aAGfnh84c7t6dgpzX/eWXwqqqzs2bQ7lcFvyvXK46cSL31q1atVo/v0Nx
cdubb155+WVveCuam8Uff3wL1p0aRZKTa5uauteu9YcVth486IiJSV650hemPurs7P3Pf+7M
meMy6Fdz+HDGTz/pWg9PR86eLamp6XrjjfEwxxWiwHv2TB/+jdqsWuX/r395oVu0FVhb1Wk0
sqMjx9ycaWVl+PHHt2BlaW1Vb2uTfv99zuiq+rffZmu3D4pAIImJSZ4/3w3TVUlJ2//93/XS
0lGLwtALbQWG9PYqP/44WfeuMjKaXn31/KpVfqtX+6HbExOr3n77GvpLhJITJ9rExCRr52PT
VnVIVZXw449v6e5dunKloq6ua+1a/23bJiEtxsY0Go28dm2Ara3Rzp3JY7HQGhWGsuoAgK4u
GVrV/8Y4OnL27Jnm4GAMW+Ry1fff56Sk1GFsdX29aPv264sXe8DbhSgwrAeprepUKsnJiWNr
y7ayMkRLjgrImZfp0x2PHZtPoWBzT/z0U/7hwxlAN6s+ijQ2dn/44c2XXnKHN4FAIDg6GhOJ
hOPHF3z66R3dpzpIoaKlS71gV2Kx4vvvc0tL2z/8MFyvUWmruoHB4Fb9kdy7Vx8dnbB2rf/r
rwdi/tXY2L1z560xyv6Ig4PzTIG7AHD0o6mp++7deu325mbs0dPsbP533+VoB6+OAD6/JzOz
yd3dFNb9zszkw+q4AICbN2tKSx8RFCASyXJzW5ycOOhi7ACAtLRGuBZVqzVXr1YaGJDS0xtN
TelQsrVVkpHBH6rqeHJybVUVdmegr09dUdHBZhtgUlUj1NeLurpkv/5aDPssK2v/8ss0WIj4
9u26hoZupM/e3r78fAGm/4yMpoqKEcaQNzeL5XKV9hYK3PttbOwmEAhubqboPGcKhSojo6m6
Wgg/wnff5WRnY9eKBQWCI0cyq6oGIgy7u+X5+QJ7e2MYSCkUyob5su7cqW9tlWC2PZVK1aVL
D1QqDSb9YVub5PTpArg/394u7eqSububwXRoVVXCrCw+jUYuLW1D9pQUClV5eQeHQ0dPmiGN
jQM5qCQS5R9/lPb1qSdPthtqtLrQ1NSjVje5u5taWfUHVmRm8jMz+T//XEihELW3vwAAubnN
gz4+1dWdmAcQrcAIQ6k68omQ4ltDqXp7u3TUVX3QrgZFLu8rK2s3N2dgIlDKytozM/lwmys9
vYlIJGjbnBFw5059c7N4+PgCbQWGKBSqjg6pUNh7+HAGnDejFVgsVvz++0C9eqFQJhQ2u7qa
ah7en01La8SEykNJc3NGVhZfe+NRW9UhLS16bAkCAAQCsVSqdHc31Y7XqKnpQqIJOjqkv/xS
iFSjQFNV1XnkSOagcf5SqfLatcqkpGrdR4IGUTaMoejt7Tt3rgx+ZF1U/a8PIoyLy4Jh1Wlp
TUqlephjz4OqOoa6uq5r16pyc5uHkdGR8vKOr79OLynBOrkQVdeONElKqmazDZD7IBYrcnKa
0YYLY6shUqmyqKjV0tIQHkNDFBgKDKrqiLcaIwnBWOChGNSqq9WayspOJpPi5mai/Q3W1va7
+HWx6joy1LQEPYXo7e0rKWnjcplc7sDP3507/ZlWoNm5f79RKlUOf3JeLFYUFgpsbY1g4j2J
RJmR0fTgQYehIRX9NDU3i0+cyEtP7z+WkpvbfOxYNrwDYAhVv3Gjv0+o6omJVUwmZfgIoI6O
3o6OXg8PM+36Be3t0idZ4gcHB+cpQvjj15+XLFvxtIeB87ywHgDek7ze5Ml2p04t/v773E8+
uf0kr4uDA/6qz7R8uc9HH4Vv2HD54sWxSmmOg/O3gUQiGhpS3357woYNQdHRCdevj9AF8Mxi
YEA2NKTGxc1jsajR0Ql6nerCwcHBGWNaATjytMeA8xyARwHg4ODgDA6bTduxI4xEIq5de6Gw
cAzzmeHg/G2wsmLt2DH5hRccn/ZAxoqwMNtt2yb5+nLHNMchDg4ODg7O2IG7AHBwcHAGR63W
dHfLBQJJUlLV0x4LDs4zjbk5MyzMlsWiWlqy5s1zk0gUf/xROiqHNZ4R3N1Ng4OtAQCTJtnO
meOSmtpw82bN46Rkx8HBwcHBeVrgLgAcHBycwRGJZJ9+eudpjwIH5znA3d300KEImF/jwIF7
27YlPd0hjS6zZjl/882L8OXRo1mnTxc8xfHg4ODg4OCMGNwFgPNMU17esXlzIl69FgcHB+dZ
BrHVLFZ/2jPtzHbPO0lJVdHRCfBlauogaXFxcHBwcHCeC3AXAM4zTVub5Ny5stHt08SE7u/P
YzAosEWhUOXmtuiVWBgHYmRkEBhoyWJRpVJlXl7LGBVvJ5OJ/v48jUaTm9uiVmuGErOzY/v6
ctEtHR3S3NwWmQyP18V5hjA1pQcGWhoYkLu75bm5zX+DLNyjbqu9vS3YbIOcnJbeXmzJg6dC
eXmHdkGEZwE2mxYQwGtu7tFxeK6uJu7uZgCAurquwkK8/BsWQ0NqQIBlW5t07KqQ2tgY+flx
c3NbtGs9jBbe3hZISM6DBx261wfFwcH554C7AHD+cbi5mR46FGFnx4YtHR2969ZdvHGj5imO
6vnF3p69f/9MV1fT+nrRunWX0tLGpBC3gQH53XdDVSr1G29cGub87dSpDl9/PQfdcvdu/bp1
l8ZupoWDMwI8Pc0PH55rYcEsLGxdt+5iaWn70x7RM8eqVX4BAbzXXrswKpVl/8Y4ORnv3z/z
/PlyHU8tLVzogRSlP3Ei7733Esd4dM8fNjZGn3wyIyWldufOW2N0iSlT7L/6as66dZfi40vH
6BKrVvn9+9+BAIDPP0/dt+/uGF0FBwfn+QV3AeD8s1i61Cs42PrHH/OUyoHy8r29yooK/KzB
CCGRiIaGBsbGtK4umXZt59GCQABMJqWvT00gDCeWnc1Hz9uWL/dmsahE4rDvwcF54pDJRCMj
A2NjmqEhlUQaq6fmuYZOJ+MPry4gFphG03U6R6ORjY1pAAA6HZ8BDgJS1VL3+zkCqFSSsTGN
SiWN3SXo9P5vmUYbw6vg4OA8v+A/ADj/LKZMsff350VHJ9TWdg0lw+HQnJ1NGhu7W1r+Pums
9cLenm1paYhuEQjENTWD3zGJRJmfL+jqkjU3i3t65E9kgENSUtKGPoTs58d1cTEZu8sxGBRn
ZxMmk4Jp7+zsrarqVKn6DyzY2hpZWxthZDQaTWWlsKPjoaLiaEmlUlVZ2SkSYW+poaGBiwvH
wABrvdvaJFVVwsf5ODiPCZtt4OJiwueLm5sfEXXS3S3PyWk2MaFXVHRKpc9EoDvOP4TGxm4k
Vmsok47zN6C2tgv5lhsb8Qg4HBycQcBdADg4WPz9eQcOzD50KO0fm/B5+XKf114LQLecOVP0
8ceDR0XW13dt355EpZKUSrVA8M9ymtjYGH366QxPTzNM+/Xr1Vu2/AmXdlFRXhs3BmNkVCr1
li1Jly8/QDeiJdvbpVu2/HnvXgPmjW5upgcPztL2KcTHl/7f/11/nI+D85iMG2dx8ODs48dz
vv8+d3jJ0tK2TZuukMlEuVz1T3tqcJ4u58+X371bDwDQdi/i/G04eTL//PlyAMAYZefBwcF5
3sFdADh6Y2RkEBnp6eDARjdeulSRlcVH/rawYEZGelZXC+/da4iM9HRy6i8TVVbWER9fqlCo
9L3ijBmOU6bYoVvy8gSY1FN2duzISE9jYwPYIhYr4+NLq6uFRCIhMtLT29scABASYs3jsd55
Z4JIJIOSUmlffHwpg0GJjPQAALi6mnp5mS9f7u3iwkEE2tt74+NL+fweBoMSGekplSqHOsJn
YkKPjPRsbOy+dq0SAODry0X6RLhypTIjowktHxJiPWOG49mzJfDqCNeuVWEO1YeEWM+d64Ju
qawUxseXjsUWoqkpncGgxMeXoveoP/ggPD6+tKys/9CykxMnMtKTxRrYAO/qksfHl2of3NVR
8qWX3AMDecjfLS2S+PjS1tbBEzTqLjkMgYGWL73khm6prRXFx5d2d+sxLaZSSba2Rq2tkqSk
Ksy/tm+fBB+K/HzBzz8XAAAmTrSdNMk2Pr60pkaoVoO6uoFdOESB2WwDRBJh9mwnCwsmWtXn
znUNCbFKTq7VHkxenkDHYfv6chct8kAexshITxqN1NjYEx9f6uvLnTbNHgCQltaEKDBCZKSn
r68Fuofk5DpkDCEh1tOmOaAfH0Qtp0yxDw21RksCAGg0cmSkp5vbQ3EZaFVHHh8+v+fmzRq0
JFR1KyvDyEjPkpK2mzcHz9zh5MSJivK6fbtO95wUSJ9mZnTYolCotVX93r2G6mphZKSnhQUD
ac/Kar506QEAwMvLPDLSk0wmODpyvL0t/vWvcba2/Q6a7m7F2bMlUNWhJLzWUAqsLdnaKj17
tgRKBgZazp3rGh9fqlZroqK8oOT16zXIAg8yKqqOMGmS7ezZTugWjFWfMcPRy8v87NkSdAgV
YoGpVNLZsyVo+29mxoiM9LSyYsEWtRrEx5cWFT2Uow5t/xFbPYIaMW5upoiqIy/RaolmGFUf
Ad7eFlFRnugWPl8cH1/a3t5vVzFW/dy58ry8lkG70rb/1dVd8fGlYvFAIkljY1pkpKedXb/u
FRW1IeqBvJw923nSJBt0D1CBIY9UdYiDg3FUlBe06nfvNmRkNEVGenZ29l64UD7MPdFmUFWP
jy+FKoRW9chITyq1/+CMtqrrAotFRU9LENATmKEktScwGAXWnpYgYBT47NkSbRkbG6OoKC/0
BAat6lFRXlQqKT6+dNC8tuhpiS4KjExL4uPLpFJlZKQng0EeXhK+vHatqr5eFBnpWVTUOuKH
AgcH5xkBdwHg6IexMc3Dw2zBAjdM3vXOTllzc49AIOnrU1tYMNetG5+d3SwU9s6f7xYQwCMQ
CFwu8/r16kuXHujlAqDRyFwua9o0h+XLvdHtdHop+rfW3JwZEMCLivLicpmwUSiU1dV1icWK
jo7eyZPt5s1zBQCYmzMMDMiLF3ugcwEIhbK0tEYOh7ZihS8AgMmkUKmk4GBrNzdTRKC6WpiS
Uou4AFas8GlvlyIuACaTwuWyOjp6oUPBxIT+2msBaWmNyArK0dEY6RNBJJLz+T0CgUSp7L8J
ISHW778/WSCQUChERJLBoHC5rK4uubYLYOfOqQKBWCLpX/NnZ/NLStqqq4VdXTIw2vD5PbGx
mXAVtHy59wcfhDc0iLq6ZAKBWKMBPB5ryRJPMzMG/ODd3fKsLD5mYW9hwRw/3vJf/xrH4dBg
Y1NT95079RjJ0FCbpUu9kL+rq4UVFZ15ec0dHQ/tYLBYVGdnzuzZThERLsNLPpLAQMuPP54q
EEjgHLqgQFBW1l5e3i4U6nc/791riIlJQbcsWuRx6tTilhYJMq28ebMGWbJu3TrJ15d76lTB
9evVaHmowL/8UnjkSOZfjYwDB2ZbWLAKC1sFAjEyzhdfdHnkSZZH4uvL/fjjKSKRrK1N+vLL
4xwcjGtqumpqhOHhdmvWBPB4zLi4LLQLYPFij8hIz5YWMboWQ02NUCCQhIRY79gR1tYmRRSY
y2Xl5jaXl7e/8ILjyy97I88jMllks2kODsbz5rmGhFijByMWK5uaugUCiUKhQh6fysrOpqYe
KMnlslJT669dq5RKlaam9AUL3CwsmFVVQoFAjJkQI8q2bNm41laJji4AMzOGnx93yRJPG5uB
qAqZrA+t6k5OnC1bJpqa0m/dqo2M9LC3718ScDj0kpI2gUBiZ8d++WVvAwMSg0Gh08mBgZZO
Tv3ew5YWcUpKHVR1KAmvXlvbdfduPdoFQCAQeDxmSIj18uXe6NPCdXVd5eUdUNUDAy0/+mhK
V5dMJJKhJRUKdX29SCAQy+UqMpnI5TInTrRFWyEAQHp607Vrlfp6u7hcVni4Haar69erL1wo
h1Z9+nSHqCivu3frMS6AJUs8WSwqWtLEhO7tbbFokYer64BLSKVSZ2c3QxcAjUa2t2ej7X93
t7yuTtTTIxcI9PP6WVsbLl3qZWQ0sMSqqRG2tEhgblFDQyqXy4qIcJ4xwxH9xs5O2QhWO0Qi
gctlTZhgjbldRUWt169XQxeAm5spWkAgkLS2SgQCMTxDBAAgk4lcLissDPsl3rvXcPVqBTRf
Jib0cePMX3rJfdw4c6QlJaWusFDA5/efzwoMtIQ9UChELpf144952i6A4VVdIlEAACwsmIGB
D1l1CoUkk/WtXx9UWCjQ3QUwjKpXVnYqlapBVZ1GI9PpFC6XKZOp9HUBGBvTXF1NkGkJur28
vAPjAuBw6J6eZmjJ+/cbi4paGxpEMHrCyMjgxRddvL37l9wWFtVoWw0Gm8B0d8traoQWFkz0
tczNGf7+2AkMWtWRx+fKlQqZrI9GI3O5zJ4eBdzeR09LJk2yXbjQHXX1AQsM8fXl7to1radH
0djYs2zZOMxDIRBIZLI+RIFDQ23QWicWKysrOzdvDj11Kh93AeDgPO/gLgAc/Zg713XVKt/T
pwu/+OIeun3pUq8PPgjfvTsFzmXnznWxs2OfPl3w3//ep1JJMTFTR3A5d3fTXbum5eY2owsy
AwAwBfzWrvX39+f+5z930DFvhobUlSt9PTzMPvmuNTqRAAAgAElEQVTkdmxsxv/+VwQA2LJl
oqur6e7dyc3NAzNUpVJdVdVJJhORq4SF2cbETDt5Mh9663t7ldXVg6y4/P15MTHTjh3LHtSv
DwBITW1Aj3zJEs+YmGkxMcmNjd2wkcmkbN8+6caNGkQyNNRm167B75VUqjx48H5qan9kuIeH
2f79s777LvvXX4sHlR9Fbt6s4fN7VqzwdXMzjYlJUanUxcWtb755hULpn7etWeMfEeGs/cZ1
68a7uJh8+OENdNkzubyvshJ7av348Rw4d7S2NnzzzeCkpGq4HkYICbH+4YeFZ84UnT6dMLyk
LiiV6q+/Tr91qxZ56eJiEhMz9eefi06dyte3q8cEKnB+/sAeYFeXfN++u7NmOf/006KYmGSM
1+AxIRKJmzaF3LlTt3lz4saNwXPmuBw4MPv8+bKtW//cu3e6tnxBgWDnzltwajtnjvOBA7N3
704BABgaGkAF3rVramioTVzcvN9/L4mJSY6JmQZ7mDXLaePG4NOnC775JgPd86JFHnv2TI+J
Sa6r618nz5zpZG1tBCXRj0N1ddf27UkvveR+6FDExx/fwmwXI8q2fXtScbGu1byWL/cOD7c/
dCgNvQg3MCCtWOHr6Wm+c+ctlUr9l6SPq6vp4cOZcHE7aZLt8eMvxcQkZ2Q0vfrqeSKREBxs
tWvXtDNnin75pRCRUShU6FSjUBJ5+dZbIV5e5pghUSjEd98NZbNp69Zd6usb8FTyeCyMqlMo
xLffDklOrkNLzp/v9tlnL8TEpFRUdJiY0D/4IFyhUGHsZ3e3XN/wYBsbo5iYaY2N3ZiuOjt7
h6nQMQxLl3rNnet64kRuQ8OAMUQSZMCXLi4mhw7NSUgohRdlMikrV/p6eprFxCTrdbm8vJZ1
6y7BfKWIAu/ceQt6OcPC7Hbtmnr6dMGJE3noN6Jtte4wGJQtWyYyGBTM7RKLFeg8EdevV6Mj
GpYv93ZzM929OwXt1TU3Z3z88ZTubjmmK5FI1tU14MRZuNDDwcH49OnCmpr+GxgQwPvhh4X/
+c+dy5crAABnzhTCZZulJWvXrmlDDX4YVb99uw4A8NprAV5e5mir/sILjl99NcfFxaSwUNdY
JDCsqr/xxvibN020Vf3NN6/I5arAQMuhfiWHZ+5c1zVr/JFpCbod3jSU5MAEBmnx8bE4fHju
V1+lJST0bz80N/fs3HmLxaIiL0NCrDG2WnsCw2RSVq3yCwt7KKpx1Sq/4GBrzARmKFV3cTHZ
tWtqYmLV8eM52h/w6NEsOBsZN84cbYExrF8fdPdu/fbtSXBTAVr1oqJWRIFpNDJa6xYt8li9
2g+TJwgHB+c5BXcB4OiHlZXhuHEWMJ8QZPVqPw8PM7Qjn88Xp6U1pqU1PnjQQSYTT54sIJEI
cPdbRwwNDQICeAYGpLo6UWJi5VA7P46Oxra27JKSNvTWKI/HsrIyVKs1Gg2oqOhEJuItLWIe
j5Wb2zLoJiqyOWNmxujrU8NsOmh6e/vOnSuztWW/+27otWuVHA49KMhKJJKTSITExCoPD7PJ
k+1SUurS0xthh3DDBwCwYoXPuHHmmFTDfX2asrJ25F4BALq6ZGZmjNzcZihgbEyLiHDmcGjf
fJNx7VolXN4YG9P8/LhP5vdYIJBIJMp33w01NKQiOflFInl29sAgZ850GvSNTk6c0FCbysrO
K1cq0PLaVFcLq6v752H+/jwXFxM4O4d0dPRmZDTBezWM5DCwWNQ5c1x4PNbXX6dfuVKRn98/
Z6XRyOPGWVhb630/x4+3evfdUHQLg0H57rucggJdZ8NQgZuaBpYHSqWqtLR9wgSbCROsYbRF
cnKtRKKMivKCM+bc3OaUlDp9x6zRaCorO5E7GRnpKRYr8vJa0tKaKis70aHFHh5mc+a41NWJ
7t6tT02t7+3tX+zNmePs789D5r5KpRoqcHu7VCSSZWU1p6U1yuUq9C49j8cKCOD997/3MY/V
smXjvL0t6PSBcyICgSQtrTE9vRFR9Z9/LmQyKcilJRJFfr5gwQL3gAAenHlDnJw4VlaG+fkC
9EM3PHZ2bEdH4wcPOtAqxGJR3303lMOhoctP1NeL0tMb09MboffQ358XHGxlYkLv7OxFDviw
WFSlUlVfLxoqBgFKIixZ4qntAiASCW5upn196qwsPvoGentbYFRdo9E8eNCZnt6YltYI9WHh
QndfXy6SopJKJXl5mdNo5KoqYWJi5ePUPWEwKD4+FjY2RjU1wsTEqscp1GdlZThnjoulpWFa
WmNaWlNDw5BdicWK3NzmtLQmeD/NzBhbt7JGUHlEKJSht3nRCgx7RixVU1NPYmIlVPUR4OfH
feEFJ4VCVVAgGD4apaVFjA6XWLduPI/30KcLCbGeMsVeKJRlZjYN31VTU3d6elN6eiO0og4O
xiEh1ubm/RvLdXUi6GVzcDAeJnXrMKqOvHRy4tjYGBUWtsLBM5kUR0cOZnP7kQyj6s7OnIqK
gWr2aFWXy1Xt7VILC2ZmZtNgvQ6HlZVhaKh1ZWVnS4v4zz+xp7fQoCcwSAuPxxo/3pLLHTi3
0tvbh/ZCeniYoW01+GsCk5PTDL87JpPq5mbK47Hs7QeOUjo4GNvbYycwaFW/erXSw8Ps1VcD
btyoptMpiOr29amvXq2wsjKcPt0xN7cFyYNbWdmJdioNenAAoaoKsf9NSGQHePihIJOJ7u6m
XV0ytNZZWrLs7Ngj+InEwcF5BsFdADhjxa1bNTCBXF+f+scf84aXHxSlUiUU9oaEWJuZMerr
RSqVRq3W9PQo9HUljBYSieLYseyVK31PnVrc3i5F9mqWLPG0tjbMzm6eM8d5xQrf6OgE+Ktp
YEA2NByYZaLXOZDeXuWxY9kw7rqsrP2jj26iBczMGO++G1pc3LZjx3XkJdJuZGTw7FfMEosV
Jib0t9+eIJP1IRPQ3l4l3HZAw2IN1GEyNqYNOsvPz2/Zti1pmGmNLhgb0zZtCm5s7N68ORGg
7iebPcL7GRpq4+Pz0PHLGzdqtm9PGkGGgkfyxx+ljY3dcXHzbG37Z5AnT+YXFraKxQq9jtio
1ZqTJ/OR0BgAQG1t16ef3qms7MQUUAgKsjp0KGLDhst//FHKZFKZzH5lRmsy8lBABS4tbf/o
o5vt7dLQ0IcOHuvOnTt1H3xwA77UzsoplSpFIjmTSWGxqIjDwsCAZGhooFSqu7vl6NMKo8iF
C+UHDtx7tNwTRKlU//hj3lAhSAAAtVojEsm9vS127JgsFPYiJ1zEYsUInqC+PnVXl8zHx8LS
cmJLixhJQdLTI5fL9TbFTk6cnTunfP997mefPaJceW1t1969tx/nzAuESiUZGlIJfzl1tE2x
TNbX3i6dM8eFxaIWF7cKhbK+PnVPjxwdk68j4eH2O3dOiY5OwITZa0OjkdFuCO1CdLNnO7/2
WkB0dMIjI97//LNqz56U4WV0ZASqfuNGTXl5h7MzZ1QGoA1G1SsrO/UNA0Ho7VXK5aqlS73I
ZGJOTjMAQKFQ9fTINVpfMnoCMxRI+UD4U6XtlNRGIlHExWX19vZhzpsMz8mT+fPnu506tVih
UCGerDlzXFxcTIqKWidPtnv//cnR0Qnoo1u6cPp0ob4JjxMSyhoaujFnKHBwcJ5TcBcAzjPN
gwcdmzcn0ukUDoe2dq2/hQVTKJR98UVqbu7gOZOeNcLCbLdtmwRfenmZ8/kjrNAza5aTtfVi
dIuZGUOXOcfT5dtvs5Ew1PBwu1OnFgMAfvutGBNqi/D664HwKIGRkQH6bPZYMG2aAzIeiIkJ
HW5z6cWVKxWYmExnZ87hw3OPHs26cqXisUY5GPChQF4GBPDi4uZ98cU97XRWo8WGDUHwfCnC
mJZafCTnz5c1NnavXOnr7m6GhAqHhtps2xZ282bNnTt16CiGfzidnb3/+c8dExM6iUSYM8dl
5UpfAMA332SMQC0bG7s//PCmkZEBg0FZsMB948ZglUqzb9/dEeRjeyr4+/O2bw+D9Tu1Ffje
vf5DW/b27P37Z9Fo5LKy9i++uDdii60Ls2Y5b9wYBF/6+HD1CqTH0ZfLlyuQyqleXuaI/b9/
v/GLL1JHFvRhZcXati0MJrPQrtKCg4OD88yCuwBwnmmEQhkS5GxlZejpaU4kEhQK1ZQp9jQa
5f59bLG0J8ykSbYVFR3nzpVNnGir/V8DA3JYmO348ZbomOTHCS7t7e3DhDe3t0vLytpLS/WI
gX/yFBa2Fha2AgA4HJqdHRsA4OjIWbTIIzW1ASZ0sLNjh4XZcrlM+AHVag36aOhYgGz6oVva
26UPHnQUF7cO9ZahqKkRYnZgFi3ymD7dYSzW/wD1UCBoNMDV1XTyZDsKhTRGD0VPj0L7XgkE
Et3j7UeXqiqhSqXZvDkUrvYtLQ0jIpzPni3JzBwrP8jziEzWh5w7oFBIzs4mxsY0AICfH1ep
VKWmNuhVTEQsViD1KdlsmpubKZ1O1mjAhAnWJBIhNbVhrJ/Wx2TyZLvgYKueHnlvb/9HtrIy
ZDAeCgTg83uQ1b6vLxcJh6ZQSPPnu6WlNep+okd3DA2pYWF2Pj4W6IdoZFkVcHSntrYLCSqR
SJTIbjabbfCvf427d68Rfe5AF/z8eKGh1iQSAX6DbLbB8G95fIKDrTQazc2bNVKpEqPAODg4
OHqBuwBwng/4/B4kKo/HY506tdjfn/fUXQAbNgRduvQgOjph797pQUFWmP8aGlK3bZvU3i5F
Z9P55psXtSV1JCmp6q23ro58uE+bM2eKzpwpAgDs2DH50KGI6OgE6AJAkvy99dbV99/vD//2
9+dhtuhHneTk2n//++KYXuLJkJhYmZ3NP3VqsZ8fd4weiqNHs/QNGcV5plAqVV9/nY78HRc3
b/Zs5+johJHVExWJZPv23QUAkMnEM2eWTJ5sl53d/IxHXmzaFMxiUaOjE2CavZiYqZgE+5CC
AsGGDZcBAKGhNqdOLf7554KxcAFwuaxdu6ZmZfHRPxAnTizk8VjDvAtntLhzp+7OnTrwV/WW
bduS9HUBREV5RkV5RUcnwPCrNWv8g4Oth3/XY7JqlZ+bm2l0dMLKlT5DKTAODg6OLuAuABwc
vUlNrY+OTli/vj+A8+TJ/LKy9m3bJjU392zd+ucIalaPFlwuc8OGYGdnjlSqjIvLGqrE9AiY
McNx1Sq/O3fqMzKaRnA4drRAnAXffpv9N6tIdOJEXkiI9QcfhF++/OD8+f6yCGw2bcOGIGNj
2urV53Svcv8Poa1Nunt3SmCgJeIqamkRv/rqeVgsYyxYvtybw6HFxWWNLEX8P5bwcPv168eH
htrAxGnl5R2bNycGBPD2758VF5elnYz9eScpqUosVsyY4Whvz46N1btSCZpz58oEAvGyZeOc
nDgnTz7pSiW6s2CB25o1/p6e5k/x5++5wNCQumlTyEsvuen7xtzclnXrLr3+eiCSXSg+vozP
F69d6y8UyjZsuDwWXiptVq70feUVHyurh9IBMhiUDRuC/P15AICjR7PG1Ajj4OCMIrgLAEc/
amqEaWmNLi4mmMRFPT2KjIymx8zTpg2HQ/P15aJTNzEYlJqarvLyh6LfS0raqFRSSIi1h4fZ
8JK60NoquXGjhsmkzJnTX3xeIlEUFAhgNeCamq6amq6ICGcksDYzk08iEd99N/Tnnwvg+k2h
UGVnN6M7AQDY27ONjWnh4fYAAN2nSlKpEkmDjO4KUlraXlfXny7L0NAgIsI5NNSmq0t28eKD
x3EBsNkGkyfbOTj014X28bFgsw3u32/Ud5/Zx8cCc0KSTCampNQJhQPVj1paxElJVWy2AfyA
Tk4cFovq5MSZNs2hoEAASyVRqSQzM/r48ZZQ/czNGfn5Api0WReQ6GgSiTjo/XzwoAOm1NYR
R0cOpitra8Nbt2ph1nRXVxNnZxMAgLu7qYEBKSjIikwmajSaggIBknM7I6NJIlEEBVn5+fFg
fjUGg+LkxCkvb4cV5gAAnp7m6FTSCDQaua5OpO8uli7w+T3XrlWamTG075VUqtRr3llXJ0pJ
qbO1NcJ01dvbd/9+I8xKrSMSieLatUoXFxPkfPv//lf0/vs3RhCOXl7eYWHBDAjgQVUHAFAo
xKamnubmHg0qSxiTSbG1ZU+dao/UKgcAGBpSr1+vRpcp6eiQ3rpVS6WS4GeUyfry81uQPHw6
olZrcnNbzM0ZL7zgiHa3mZrS9VV1Go3s68vFZLgYma1msai+vlx0CXECgdDSIm5rk8K6iQCA
ysrO3NwWHx8LuJvt5WVuasowMBj4vWhrk5w7V8ZmG0REuISH27m7m8J/oR+KUSQ/X2Bnx546
1R4+XM7OJgwGZeJEG7FYgRRZsLIy9PXlot/F47Gys/na5UsfSXl5R2Njj6OjsZubKUbbRSJZ
QUGrRKIY1KpbWxtxOLQZMxzT05sQq15U1NrWJnF3N/PyMsd01dEhLSgQjCAd4+ODlOqYNMkW
BpL4+fFMTOgUin6VGoZR9cLCVr1UXUccHIzRkwSgZat1B1F1Ly9zmFDW29uCQCD4+XEfPOgo
KBD09amFwt6UlDoikQC/OxqN7OTEYbEeOjJQWtrOYlExExjEqldV9c8Tmpq6f/utODzcDgkk
LCgQSKXKf/878O7d+mESgo4YpVKdk9NsZGSA1jovL3NjYxqJ9FDSXCqVNG2aw/z5bgCAxMQq
3AWAg/O8gLsAcPTjypWKsrKO/ftnhoQ8FPAWE5N8+nQBuvb7qODmZnroUARMfg4AaG+Xbt+e
BGu5I5w4kTdpku3+/bPQ5WoGldSFvLyWdesu7tw5devW/kx+FRWdGzde1mtFLRYr9u9PXbLE
Ex3QzmJRyWTiwYOz9u1L3b8/VceuBALx7t0pq1f7DRob/9FHN48dy9Z9YDri6MjZv38WnNz/
+mvx669fGMH3+8Yb419+2Rvd8t13OZs3J4rFAyWpMjOb1q698Mkn03fsmIy0kMlEQ0Mql8v0
8DDbuPEynFVkZvI3bLj80UfhULKsrH379iS91qJIjrTly30GvZ97996GIdM6Mneu69Sp9uiW
Gzdq3nzzCqwIEBXl9d57EwEAdDqFTifv2DFZqVT19ak3brwMS0wjSf7eey8UjmpQBV692u+1
1wIwAxAKZdu3J8Fi1KNIampDQUHC/v2zPvwwHPOvmpouJF5aR5KSqoqKWvfvnzltmgO6/bPP
7u7fnzrqpkNHzpwprKzs/PzzmU5OA8nMpVLl9u1JV65Uopclv/xSdPNmzf79s2D2L+2Hoqio
7c03r+zYMRl+iXx+zxtvXExP16N6mVKp+vLLtAUL3I4dW2BgMFBmtaKic8uWRL1U3cSE/sEH
4WFhDyUrGZmttrEx+vTTGd7eA5UvVCr1li1/Xrz4AO1N+P33ktLS9oMHZ8PFTEJC2Zo1544c
mYdZHyKSn38+E90n5qEYLWJjMyMinA8dijA07F96MRgUAwPynj3TuVwWUoFl0iTbuLh56Hfl
5wu2b0/Sq+AoRCpVHjx4HwkyR7fn5bVs3Hi5oqJzUKuO1CyIi5v3wQc3oFVva5Pu3Xt7zRqs
/b99u27DhstjUXbkkRw/njNliv3Bg7Ph6ve773LeeefakSPzhn8jhmFUffv2JHRl3NFi3jzX
mJhp6BaMrdYdbQWm0cgkEmHTpmA7O/bGjZdFIrm2VRcKZchTfOhQBOzq5Mn88vL2gwcj0BMY
xKrfuDH6Vl0XEAXGTGA+++zuxx/f0vdbxsHBeTbBXQA4+tHb21dX13X8eM7Vqw/lP0tJqYOb
5Hx+z759qY2NIy8cDamv7/7yy3T01pNEoszLa8EcPRWLFYWFrf/97/1HSv7+e8mtW7VwH29Q
FApVR0dvfHwp3KgXCnu180KfPJlvYEBG8kvV1nbt3p2C3rVQqzXd3fJ79xp27x6kUBOsDZ6S
Urd9exJS0XcoVCpNV5fs5s3aQSPw0SHibW3Sgwfv83gsufyhesX6cu5cGawgjVBU1Dr8Tbt2
rbK+XoQkW8Z0VV7+0GZOdjYfHQIAAJDLVXK59PffS5DNJTRisQLJ3iSXq777Lket1rS0iNGS
bW3S8vKOQasMAgDOnClisw3gAWAEpFLa7dt1g341SM4zHUFU3dycgWmvrhY2N4th6cqbN2u1
V1xqtQb9HSmVaqGw99KlCrirPKgCX7lSoR2I3turzMnR4zx2ZmbTO+9cy87uP8L6++8lKSl1
bW1SAEBbm/SLL+41N/dru1zeJ5f3nTlTiBTQQtPVJWtq6k5Jqdux4zpU4JMn82k0CjISzEMh
k/Xx+d0//ZSPzmUIALhzpw5+QYgC6zUd7+1V/vRT/rlzZSOrBSiRKEtK2r7+Op3DGdgqVypV
mZl8TOF0qVRZVtb+zTfppqb9X7f2Q6FUqjo7e8+fL4ObimKxor5+yIMD586VZWU1Y2yLRgO6
u+VpaU2ffHIbXRqzo+MhVb93r2Hz5kTt2igXLpQXFAgQJenulv/0Ux7GN4S21brT2io5ejQb
repqtSYtram7G3uXKio6Dh/OhJKlpW2trZJjx7IoFBJ6yxqRjIvLQheTRz8UiFpi7rBYrDhy
JEsm0y+LQU+PPCuL/9lnd9HBCAj5+f03sLBQgDEILS3iqirhyDImaDSa7m75/ftY+9/a2p9E
U3errlZrRKJBJBsaRMiDVl8v+uST29rRCtnZ/HfeuTboGaKOjt5Dh9JgdBWkvLz9gw9u5uVh
H/a7d+u3bv0Tup/EYkV+fsv+/fdghYXsbH5nZ6++xXqHUfWysvZHqvoI0P5FxthqMPQEpqBA
sHXrn9AfPagCI9TWdiF+MW2r3turzMtrqajoRFtgsVhRXNyGmcAgVh3zwzGMrdZGe1qCkJnZ
9NZbVzMzsX7JK1cqKyuFyA8uosCY23XnTh2FQkJH/YC/qhonJlYhPQ81GBwcnGcNwh+//rxk
2YqnPQyc54X1AOAlYXFwcJ4yBgYkV1fTNWv8karpjyzA/jjMnOl06tTigwfv61ssHQfnn4ON
jdGpU4srKzv/HmlWcQYlKMjq1KnFv/5aFBMziAMd59mgFYAjT3sMOM8BeBQADg4ODs5zhpkZ
c9euqVOnOjztgeDg4ODg4ODgPGfgLgAcHBwcnOcDKyvDyEhPMzM6m00LDbWpqREmJJSNRdow
HBycYXBwMI6K8mKxHipNn5JSm5MzamVocJ46vr7cyEgPTOOvvxYlJ9cNKo+Dg/McgbsAcHBw
cHCeD0xN6QsWuCGp+2SyvitXKpAa9WOKVKqsre3CJLDAwfknw+UylyzxhOkAAQAtLeKtW//U
K/MlzjOOo6PxihW+6JaiotYtW/7Ut2gODg7OMwieCwBHL/BcADg4OE8NJpPq4sKBVUJbWsRI
8qoxhc02cHEx4fPFw2TewsH5R2FkZODqakKhDKTxVyhUlZWdmPSQOM81ZmYMFxcTdItYrKiq
6uztHeXyzzijCp4LAEcn8CgAnDGEwaDMmuWELukHAEhOrn2cZPU4EDs79qxZTllZ/Px8PeqE
4YwFfxtVZ7NpERHOzc09d+7UP+2xDIJEonjy2i4SybOzR78+2T8HIpEwa5YThUJKTKxCp17n
cGizZjlbWDAlEuX161UNDUOWTnhMIiKcKRRSUlIVuiQBBnd301mznNEtLS3ipKRqkUg21Fv+
yXR34w/F35/2dilSwAIHB+fvB+4CwBkrDAzI1taG//73eExV6vfeS3zu1kXPJl5e5vv2zfz0
0zu4C+Dp8ndSdXNzxrZtk+7erX82XQA4zyNEImHNGn8Wi5qcXIt2AXC5rG3bJgUFWbW0iBsa
RGPnAkCufvdu/TAuAD8/3t690+FLOp2Sm9ucl9eCuwBwcHBwcP5+4C4AnLFi/nzXV17xOX++
7PDhDHS7du13HJznGlzVcXCed+7erV++/A/4cuPGIHNzbL13HBwcHBycvwe4CwBHP7y8zAMD
LbXb09ObKioeysvt6MiZNMk2Li7r+vXqJzU6HJ3w9rZwcTFJTW1oa5M87bE8NVxcTEJDbbTb
c3Ob9V26PxlVt7Y2CguzpVJJra2S1NQGiUSBtHt4mAUFWQEAqqqE9+83jN0AHh8qlTRpkq1S
qUpNfabHifNk6O6WX71aWVbWLhLJm5vFT3cwfH4Pnz+Q62HePFfcBfDsQCIRwsLsCASQmtrQ
16d+2sN5agQHW5maMlJT63t6FE/gco6OxmFhdqmp9TU1Y55yBQcH5wmDuwBw9GPuXNcvvpil
3b5hw2WMCwDnmWXRIo/XXguIjk74J7sApk1z+O67Bdrt779/49ncvQ8I4B07Nt/YmHb3bn10
dAJ0AcyZ43LoUAQA4Mcf855xFwCDQdmyZWJXlwx3AeAAAPj8no8/vvW0R4HzHEChkN56K4RM
JmZnN4vFT2L1+2yyapVfUJBVdHRCT0/nE7hcWJjdqVOLo6MTcBcADs7fD9wFgKMfV65UtLSI
AQBTp9qvXu0XF5eVmckHAMBSQMuWjZs/3w0A4OVlzmbTduwIW73aD93DiRN5N2/W6HKttWv9
bWyM4uKyBk1IQyIR1q8PotHIsbGZMlmfm5vphg1B6BpFIpE8Li6ruLj/MLa/P2/DhqCzZ0uS
kh7aqo2IcFm0yD0uLqugQNcT9WFhtuvXBx09miWRKDdsCGIw+vOTJySUxceXakuiW6qqhHFx
mQLBwNqbwaBs2hTs68tFi50+XZiYWIlumTXLadWqgTt59GiWjqOFrFzpGxHhDADw8bEwN2fs
3DmltbV/GGlpjUePZqlUGijs6MjZsCHI0pIFW+RyVVxcpr4poN54Y7yJCT0uLgt9pNbMjLFh
Q1BjY/eJE3mw8fXXA6dOtUe/99KlB7/+WoxuCQmxXr8+iEIhwpb6elFcXFZjox6niE1M6Bs2
BLFY1OjoBO3/5uYOfEA2m/bmm8EeHv/P3pnHNXVsD3yy7ySsCWFRFmU1gIKKS12pPrVFra21
Rds+X6XW7lafr1ZLtbaWX219rRbRWn2C7ZKkFyYAACAASURBVLPVuq+ouO/sCMiOQCCsISQk
IST5/TG88XrDkiBu7Xw/fvyQycncyb1nTmbOnDnjBF+mpdVs2XJLp+tMhmyTqru72y1eHO7p
eS9foMlkTki4de1alfUtt4kFC0KioryJJSdPliQnZxNLYKcgKnCXvWDx4vBRo+5Lc2Cp6j0g
FvMWL47w8bFnMmlhYZL2dlNS0iz0bq+qDgDIzlZs2XLLpoUvqMA3blSfO1e+eHH44MGOsNxW
VUcKPG2a77RpgwAAR44UnjlTBuskdYqgIJfFi8OFQhaqqqlJu3nzzcLCRjab/tZb4fChE/fD
Q557bvDkyd5bttzKz2+AJZaqXlWl2rz5pk2qDhk/fuDChWHEkoKChoSEW01NncccTps2aNq0
QQkJt5yduURJ6201EalUsGRJBFL1ixfv/vxzBlGgV1uN8PV1WLIkgiipVrdb2mqiqtfUqBMS
bpWVdX1oGVFSodBs3nyzO8kesLTqZWXKzZtvEK269XC5jMWLw0ND7ztqh9gpoLVECgzZujX9
4sUKAEBMjGzwYMctW25FREjnzAkEAJw9W/brr7lLlkTAOpHkvHnBwcEumzffRJKgG6s+b14w
VHXE2bNlJFstFvM2bbqJOgUAoKlJS1RgJNmDVWcwaEuWRMBO8dprIUiyqkq1ZcutiooWaKv9
/Z1oNOrw4W4UCuWnn54zGDqjAH777fbhw4XEyi1VvbCwcfPmm0jV+5E5cwKHD3dLSLgVEOA0
b14wLOzSqs+ZExgd7UcsuXjx7tatacSSnlV9yZIIGLMWEeHm6Mj55ptnW1s7T16wtOoymXjJ
kohehyXQosKfQpIkssBeXvYAgLfeCocjBwBAWZlyy5ZbxHgZDAbzlIJdABjbyMurz8urBwCw
2fSYGNnFi3f37s0jCnC5DPgzxuMxqFSKnR0b/WBD2GxrtY7PZw4cKJo40SstTV5Sct9Azc1N
IJNJBg92VCp1FAoICnIeMcJdKhXY2d0bfHO5jFGj3KlUkJNTBwBwd7d76aWgnJw6kgsgIMBp
zpzAgwfvWO8C8PKyj4mR1dSoy8qaxWI+i9V5MJJM5tLQ0JadrVAqdUTJ7GwF+sns6DCNH++V
liYvLu704jOZtIkTvWQyMbEBQ4dKVCpdVpairc3A5TJkMvHQoa7E8UFEhBuPx2Ay753J1Cs8
Xuej4XKZVCpVKGSbTJ0TIYGARZT083MaMcLN3d3O3p6NCg0G08iR7h0dpuzsOrPZDKwjMtLd
3d1u587MlpZ7hXw+89lnfXJz6+CwUiLhDxki9vd3In5BAAAaxCA8PYXz5gUXFzehiZDZDMaN
G3Dzpryw0NogFC6XMXmyd3FxE2nkZAmVSrGzY6FW+fo6REV5Z2YqKitbgI2qLhKxp00bJBKx
Cwoa/tdy8/Dhbnq9MTtbYTRaG9qan19fWNg4fLgbjUaprdXIZC4cDv3s2TKiC8nZmSeTuQQG
OpPuZ2Cg88SJXtnZioaGNgqFIpO5REa6kxRYKGQTZ7CQUaM8pk71zcpSoLmrpar3AI1GFQpZ
Tk5cBoPGZNIoFAqxYRzOvbvUpaoDAHx8HCZN8s7IqK2osHYxytGR89xzg93d7ahUysCBInh1
mcyFTqcmJqYBYCZJMhg0FMcEVd1oNGdlKSIj3UNCJBUVyuBgF29ve5lMzGTSzGYwcKAoLMx1
wADhkSOFcAYVHOwSGenu6son6i2bTR8zxpPBoJaWNtvZsZyduc8+652VpUAKLBCwZDJxSIjE
wYFDPGLNUtUpFIqtqs5m02Uy8bBh5PsJ7Wp6eg083zsw0PmVV4KrqlQGgxFKisU8mUx8+XKl
rS6AQYMcwsOlHh5CdEU/P8cpU3xcXQVo0sJgUO3tOUhg4ECRSMQ+cKCA5AIICHAeMcKNZNWZ
TJql0ePzmag2Go06dqwni0VDHQ3i4sKbNMmL2CkYjK4le8XSqptMZpJVtxJPT2FYmMTHx4H0
gFCn8PGxHzZMChWYKBARIdXpDNnZimHDXKdPH3T3botUKvDwEMpkYgcHTkNDm4+Pw5AhYpnM
5cyZMugCGDrUdfbsgLIypVQqQLURVd1sNjs6cmQycXCwC+lyAQHOkyd7Z2croNd4xAi34cPd
SkubiZJsNn30aE8ajUrMgTpihNu0aYOysxXIcxoc7KJQaLKzFU1NWhqNMm7cACcnblmZkmj/
KRTKM88MuH69uqlJCy0wjUZhMmlUKsXRkYs2AqDDQQEALBYtJERiqeoKhYZKpdj0UKwkJET8
8svBlZUtAkHnb4Sbm11AgNPx48UkF0BIiHjWLP/s7DrkB4edIjtbAfe/9Krq6BIcDp1Op9rb
s5HR5vHIv5JMJs3RkYvKuxuW1NSoS0qaJBI+m00XidgymbikpAm6ANjszp82gYAJ/0d3tblZ
R6M9lPuJwWAeMdgFgOlnkGP+7bcjliyJWL/+0oULFUQB66P4duzIHDXKIz4+ateurG+/vUp8
a+zYARs3Tlm+/PSBAwU6Xccbb4QNGeKyfHlKdfU957STEzc+PkomE7/77vEH/lpd8NZb4SdP
Fn/44Uk0tH3nnYhvvnl28eKjaWlyomRCwi3kKAkJEcfHR+3Zczs+/jJR5sqVysWLj6KX//rX
mDVrJixadLisTCkW8+LixhUUNBJXrePjo154IQD5760hOTln3758AMBHH0XGxAxZu/Y8it3Q
643EddFXXgl+5pkB//znaThDgHC5jPj4qJAQydtvH+3osNYFYA0REdKEhOlffHFx/fpLxHKt
1tCl/PbtGWj27u/vFB8fdfx40dq1F/qxSZCWFt2XX15EE7NJk7w2bZr22Wfndu7MBH1S9aNH
i+LizsG/aTRqfPzk8HDXxYuPajTWugD+85+sjIxa2CkOH76zZs2E7GzF4sVHExKmI5mwMMmP
P07/4Yfr33xzhfjZBQtCEhKmL1589OzZMhqNsmTJcHt7NkmBN2yIIvmDINnZitjYwy0tvah6
lygU6s8/P0+nU4VC1o8/Tlep9ERVRzsaAABdqjoAYMwYz/j4qA0briQm3rd01ivR0X6Bgc7L
l6ekp9fAq3cnefBgwVdfdaofVPVhw6SLFh0GAAQHO2/aNG39+ksrV55NSJj+3HOD/fycli9P
ycurj4sbj2pYuDDMx8dh+fIUYtSSWMz/9ttnAwOdly07tXHjteeeG5yY+NyKFaeRAg8YIFy/
ftLFi3fff/8EehAIoqoPGuSwYcMUm1TdwYHzySdja2paSfdz+HC3+PjJW7emf//9dVgiFLJX
rBjz6685UPJvfxtE1CjrmTMncOZM/6VLT6F59axZ/jt3zhQIWCkpJbCksLDxww9PoolEbOyw
d94ZblnVa6+FhIdLly49SbTqJpPZslvt2pX122+dC8ve3vZffz158GDHTz89S5QJDZUkJj63
du151Ck8PYUbNjxrKWklRKseHOyyYcOzlla9V6KivFeuHLt8+elz58qJ5ahTREf7L1gQAhWY
KPDll5NGj/aA/cjLyz4+Pmrz5hsffngyIWH6xIlewcEuS5eeysioISm8p6cQSiJ9IKp6R4c5
KMhl06ZpO3dmkhRm7tygn356fvHio8ePF8GSgIDOToEkxWJ+fPzkoCDnDz88Sfxsfn7D+++f
QO6SN98c+u9/T3377aNoN1BEhNuOHc9/+mkqsv+DBjnEx0cNHChat+4itMAsFj0hYTqdTlm8
+KhGY/jfXbr3AyEUsrtUdYPBZNmt+guplL9mzYRt29LhRV9+ORjuybJELlevXp2amVkLX8JO
8fbbR/fvLwBWqPrmzTd/+ikdALB+/eTQUPHHH59CkflabQfpWtBWUyid/as7W/3WW+FnzpQu
X57S3KwbNkxK7O8pKSVwT9mcOYEJCdOJqt7RYXo0aQgwGMzDBrsAMP2MRmOAP8xtbQaTyaxS
6ft8rqxa3d7WZhAKWZarwWw23dGR295uVKn0AAAej8HlMlpa7rsWnU7lcOg2TZJt4uDBgt9/
z5PLVcSDpuzt2TB2l8djxsQM8fAQfvjhyXPnylHDNBqDnR2Ly+3semPHes6c6X/hQkV6ei2x
8VQqRSRi02hU0LmIyqbRKESBPXtut7cbY2KGWN9gjaYdjizb2gxGo5l0u4hwuQw+n0l6dnw+
k8WiwWWB/oXFojs6cl94IYBOp/7nP1ldjthYLFpMjMzb2/6TT86cPl2KGqZWtwsETEsN6QGl
Urd5801/fyficG3PntuWMfkmkxlNegEAer3RwYGD1vatV/Vp0waNHz/w119zr16tRDJ0OpXJ
pLHZdDRWswaNxoA6BY1GFYnYVCqlqUnb3n5PCZlMmqMjx2g0k9pjMpkdHDiElSUmm01vbtai
1aETJ0rodNqCBTL0kfBw6auvDikoaNi3L7+qqmtV7xWj0Qwv0dFham836nQd3d2oLlUdAKDT
ddjbs4mLflZy+fLd//73dm5uXUNDW2urfvPmmwaDEQW/AACef95v9GiPn3/OuHz53qOBqo7m
qGVlyuTk7LNny4xGc0eH6cqVql9+ycnNrfP2tidei89ncjh0pVJHbDybTedyGTwew2wGKpVe
rzc6OnKI4SF0OlUkYlMoAMUq0+nU114LsVR1iYRvq6pTqRShkFVfryHdz7Y2g1DIJlal0bT/
8kvOH3/kQ8krV+4uX57Sh5QNXC7Dzo6lVrejK16+XPnVV5eIlspgMDU33wvMJk7kiPB4jKAg
5/feG/Hf/95G7oMuUavb0WTJyYnL5zMtl0aLipp2784mmmKRiN2lZA9wOPQFC0Isrbpa3U60
6tbg5MSNiZE5OHD+7/+upKXJezDFQiGrrc1AEmAwqHZ2LLi+XVPTmpycc/x4cXOz1mAwpqfX
7N6dk5YmHzGCnO5UodDs2pV1/Hhxd6rOZNIcHDhmMyBdzmg0Ozpy0MozAKCiQrlrV9bZs2VI
Eqo6+sENCRHHxMgqKlpOniwpLW1GD8hsBqSAl4KChuTk7EuX7hJVnc9ncrkMZIHZbLpe32E0
UhsbtV2uIkBV9/Gx/+c/RycnZz+ag3IbG7XJydmHD9+BLT97tmzp0lNEZ423t31MjKyjw/TF
FxdychToCxoMJicnLovVqTC9qnprq761FQAAtFqDwWBqbtb1MKxqbzc2Nt638aFLW33wYAG0
6lptR1ZW7Zo155HbTqfrgFEb8FYTuzMGg/nTgF0AmCcatbo9J6eOQgHBwS5lZc0ajYHBoHp5
2QsEzLS0moexwc96Tp4sOXToTnfvcjj0mTP9zWawenUqn8+EOdsBAP7+TuiHHwAQEiJ5881h
K1eeaWxsQzIAALGYT66RfPViCgW88ELAg32JJ4LmZm16eo1IxI6MdM/Lq1ep9G1thrKyZuL6
BoNBmzFjsEDAWr06lc2mo3s1eLCjrTNDtbp979686Gj/Tz8diwrLy5XNzdqyMiVxLs1gUL29
7dGquI+Pfd9iSiMj3WfPDli9OlWr7UAtp9EoDg6ctrau5z+PhWvXqhoa2tC2TwCAv7/TBx+M
XL06tapKNWTIvb0Grq6Cx9FAm7l+vRptRNfrjZYdduxYz+nTB61efa693YgeDYfDEInYaNR7
927Ltm3ptbVquLn65s1q0ub2/oVOp3ap6j4+9n1wgliJRmP44498dKRFSUnzjz/e7Jea8/Lq
CwsbIyKktnpj795VVVWpZDIx7JsAAIVCA/fgkPD0FLq4dGbvHzhQ1OWsvqysOSHhljX7VnqA
xeraqgcE3GfVrUEkYs+dG3TrlvzBEyLCiX1BQcPAgSIAQHa2Aj47SxdAfX2n5ANeEQBQVaWC
naI7gUGDHN95Z/g331wpL1eidCoAADc3sukoKmrctOkG2inQNwwG4507jXw+c/Roz8LCJuhi
qKhQ1tc/xLlrU5P2119zb93qXF1H2yQRUqngjTdCjx8vPnq0yMND6OHRmSADPimE9apuDUIh
y9vbHq4fgO5t9cmTJQcOFMC/a2vVMLQNg8H8dcAuAMwTTUFBw7vvHl+4MGzDhmc//vhUTk6d
SMReuXKsRmN49dU/FIrHfI5Ur4wZ4/nrry8QS9hsulh831lTPB5jxYoxpKmgkxPX1m2lTy/X
r1cvWLCfQqHIZOL16yfb27Pz8xs+/viU5Z7nESPcdu2aRcxEwGLRenWXdElqahlx7/EHH4yI
iBj38ceniINakYi9atW4ESPc4Esej2l9JgsSHh5269dPIq6iUyhALOY/FUdmLlkynJSfz8GB
83gdcP2It7f9hg3PEl0/VCpFLOYdP17cw6ceNpaqzmTSJJK+qPpTys6dGfv35wMAFiwIgVZ0
587MdesuWkq+8UZoTExn6AqTSSMZ2H7H0qqzWHSJBJ8g2AWLFg17+eVgYom9Pae7HV4PglKp
X7v2PIfDYDJpy5aNWr58FABg9erUX3/N7fdr2crcuUGkzKzEPf/AFlW3hpAQyXffTUGX+DPZ
agwG049gFwDmiUan66ioUFIowNNTCJdZaDSqVCqoqlKVlDwFM+Sysmb4007i3Ll7m8bb241n
z5ZZfh25XP0X+eVGcbwdHabffrvN5zMAAK+8EnzpUiVphnz3bssff+RbJs+7dMnmiGWVSg93
kUBOnSodOlTy1lvDTp8uu3TpLgBg1CiPZ5/1Li5uLC7u9ET4+TnNnt3HsAulUnf0aJGl06qg
oJE4+bSGu3db/v3v6yIR6+WXg44eLbx2rbpvTbKey5fv5uSQA2ubmnR9yE7/BNLYqD106E5j
I3m1MC+vgbhloF/Iy6tft+6iu7vg9ddD9+7NGzXKY9Qo93378iwVuB9V/Smlvr4NLuGeO1du
MpkAAAwGdfny0X/8kY/co4MHO86eHUChgN27OzMmODpy+9xJrcQaq46BXLtWRTxjBaJStZeX
9/Mhc0ajCW6kp9Opx48Xw7yhfn6Of/972N69eURT/+jJzKyFGRmJmEwA5U20RtWtZPbsAJnM
5fDhe+FO48YNdHe3e6AvgMFg/oxgFwDmKaCpSVtbq3Z25vr6Otjbs5ubdeg0uwcBrheREgj3
L9nZiri48z3L6HQdu3fnnDhh25KjWMxzdRU8jbl57e3ZAwYIiXngEeXlSpisKzRUkpQ0i8Wi
k1wAcAb1gCGjXXLo0B2VSp+UNEunMyIXQGxs+Lx5+1Cmrpkz/eEpgH2grk6TmJiG0kE9CHfv
tmzceO3DD0dOneoLQ2P6S4cdHDgDBggtQ5r37y/o9fSEpxe5vHXz5pv9Eh3dKzBUeNu258aN
G3jiRHFUlPfkyd7z5+8nJlFHkg9J1R8xAgFLKhUIBEyrTxEhc/ZsGTyY4IMPRq5cOTY7W0F0
Afzzn6NXrUrdtOkGLPH3d4LHp5Hg8Zje3vYlJc3E00n7hjVWvVcMBmNVlcpgMHl72ysU6u4S
IvQvLBbd01NYV6d5ZM7lw4cLYR67Rwb0I8O/ExKmT5rkfepUCdEFQKNRxWIel8swm80Khcb6
/MR9JjW1/IsvrErh2YOqW8msWf5OTtx58/ahPS9xceDVV2U9fwqDwfwFsSqZEwbzeNm7N++7
76698UZYUtKsdesmHTlSSDpTt2+4uvLXrJlgU0a9J4fFiyOWLx/VZfL2J5wZM/y++24q6Zhr
jK3s3Zu3fHlKaWl/LqbNnh3wzTfPenuLehfFYKzjmWc8//OfmV1Oyx8loaGSxMQZpHjsx4hC
ofn88/NyeWti4gyYY+IRMGCAMD4+6sUXAx/N5Z5MRCLWihVjkpJm/fxzdESE2+NuDgaDwTwe
cBQAxjbCwiSjR3sCACIj3Wk06tSpvnB76rlz5ZYLWf1FZaWKx2N6eYnCw6W1tWq5vLWkpJko
cP58RWtr+6xZ/sSD2Wk0Snp6TU5OZ6vKy5XbtqWLRGx0ABWTSWtoaLt7VxUQ4AT6G52u4/Dh
Qjc3QZfnXd24UX3jRjUAIDtbsWtXVkiI2NfXgSRTV6c5ebKkpUXX0qLbuzeP2HIAAINBLSpq
JGUVspKbN+UODpzISHc09CwqakxJKUVhz1euVAIApk0bNHnyvREzhUIpKGgoLGy0KTr6zJmy
IUNc5s4NQocOOjhwcnIUxK2zPj4OUVHedPo9jySLRTt1quTq1Xsp+g0G47FjRV5e9m++OdRy
OTEtTU4U7hk+nxkV5e3mRo6N5HIZe/fmoZOTMjJq9uy5PXy4W3CwCyyRycQMBm3cuAF1dZpT
p0qsXz66fr2ay2VMmuQ1Zown6a3S0uaUlFKDwba9AACAykpVZWXXcfiWqg4RCJjbt2dUVLQA
AEwm86lTJX5+TgsWhKAH6uTEyc2tk0rvpY+6c6dh06Ybnp5CSzVWKnWnT5f2kA/MEr3eePRo
kYeHHbG2ixcrUPruLlUdAMDjMXbvzumXGAoSXao6pLi46dSpnhLRk0hNLQ8JERNVHQBAp1Ov
Xq0ineiWmlre1KSdOzeorc2wZ89tUvpuo9HUX6quVrcfOFDg7Mwj3U+SqvcjlqouFLLS0uQO
Dhxbq3rmmQEymZhYQlRgiKWqi8U8FxdeaKhk4cKwlJTSu3c7hVtadBkZtf7+TkiSwaCeO1du
eQ5ID+j1RmusujXodB25uXUODhwPD7sxYzzDwlyJ76JOYWmrIdXVrWlpNbYmE21rM+Tm1rm6
3ms/tOrFxU3QCFRWtuzYkcnlMkhfUCRib92aRjwjtleKi5u2bLklFpN1DwCgVrenpJQQD8Dr
FaPRdOJEsa+vwxtvhKEEGVeuVKKexeUypkzxIVn1hoa2P/7IJxlqBoMWEOA0cqS7Ttfh6Giz
WtpETU3rrl1ZNBrF8iaYTOaUlJKioiZgnapDLlyo0Ok6nntuMBrqZGXVXrx4FwmkpJQGBjoT
rXpEhJtQyJ4zJ5DBoBIlrcHS/tfVaVJSSpqbHzSUBoPBPHawCwBjG6NHe65dOwH+rdG0v/BC
AExK/9FHJ0kuAJ2uQ6XSd3RYe+C5Nej1Xdf53//mlpcrExNneHoKUWFdnSY29giK4s7NrVu+
PCU+Pmrp0khYUlTUGBt7pLS0eenSUTbNwdrbjUqlznILt05nRM1Tq9t//PHmSy8FJSbOsKzh
668vw8HihQsVWVm127dHT5rkRZLJzKy9dUve0qKrr2/bsOHqm28OjY+PQu/Gxh45e7YsMNBF
r7c5VPjkyeL8/PrExBloae6PP/LPnClDg4b9+wvg/Rw06N5avUbTHht75OjRIpuulZycPX78
wMTEGShl98aN11atSnVx4aGE/0FBznFx44jx5zk5dbGxh/Pz78Vm6/XGbdvSn3/eb+vWGZaR
6hs3XrN+XmRnx/r738MsZ+OXLt2NjT2Czq8+c6YsJ6du+/bniZJarWHqVF+RiH3tWhUaWfaq
6keOFJaUNCUmPjdkiAvpraNHi86fr7BG/QwGY0uLvsvHbTab4WGB8KWlqkMSEm6tWHEa/m0y
mXfsyJwyxScx8TmhsDOW5OuvL3/22Tl3dzv0aG7elN+8KU9MnPHSS0Gki5aWNhcUNNjkAtBq
DVu23CJ1ik8+OYNcAF2qOgDgzJmy2NjDpKlyzxiNptZWfa+B9F2qOuTQoTunT5e2tRk0mnbY
NYxGU2trO6pTr+9oadGhZ/fLLzlwURepOgBALm9duPAQaZ75yy85d++2bN/+/A8/3EAR7AiD
wdRfqq5U6v797+vz54d8//1UYjlJ1fvRVh85UnjnTuP27c8jVf/ll5z33z+RmDiDx+t6L0B3
Vn3GjMFvvjmUWEJUYEh3qh4aKvHwEJaXK6ELoK3NcP169bJlp1aufAZJlpY2/+MfhzIyuvYr
abUdanU7yd2p1RqsserWA+1/YuJzxGM4AKFTWNpqyJIlx375JQe1E3qd4EnyqPNa/k5VVam+
+OLCjBmDiT/iRKt+507jJ5+cWbt2AhKA7NiR+dFHJ3u+OaSrZ2bWZmbWfv/93z7+eBTpW8vl
rcXFTdXVrWYz0GgMRqOJpBikjgYAMBhM27dnTJ8+CCoSLPz88/PIBcDnMy2t+kcfndyxg5zo
3mQyazTtbW2Gvh3vgtDpOlpb9ZbZOoiUlDR/9tm5lSvHku4nAKCjw1Rbq4YuAGtUHfL773ll
ZcrExBnoRNKEhFvEif2uXVmTJnlt3x6NrDpk4cKw9nYjlOxuAGOJpf3PzKzNyKjFLgAM5k8A
Zd+e3S/MffVxNwPztPCWt3dAYKCz5Rs5OQqSx9rb297Hxz4jo7ZfTpT193dKSppVWalKSLjZ
ZZ0ODpzQUAnxpGu9vsNSMjjYBa2cq9XtGRm1Dg7sQYMcMzJq6+utzS/g5mYXFibJyKitrr5v
GXbwYEc3N0Fm5r0fSChpWUNhYSNKd89gUMPCXInTBohSqcvIqEF7RAcOFKHlaABARkZte7sx
LExSVNRYVmZzNDiHwwgLk6ClObm8NSOjlph+XChkh4VJiOd4dXSYMjNrbZryQZycuGFhEjSZ
KS5uqqhoCQuTtLbqYYyGqys/NNSVmNdApdJnZNS0tpKX2S0lUZ3W7+Vms+lhYRJHR/L++cbG
toyMWuK4k8WiDx3ahWRTkzY9vQZJWqPqAgEzLMyVlAgaAFBbq87MrLVm9uXiwgsLk9y502iZ
SYvJpIWGSvR6Y1bWvfkMUdUhZWXNt2/fd2YVrBOd0V1Y2FhdrQoLc21u1hIlQ0MllgmlNJp2
oqpbD6lT3L5dR1JgkqoDAOrqNJmZtTblTYQKXFPTeucO+VyJLiUtj6yrqWlNT6+VycQcDj0j
o1av77CzY4WFSRQKDVS2AQOEAQHOxE5BUnUAgFbbkZHRxfGljo6coUNdS0qau1tZ7RdVh3h6
CklrjCRV719bzeczhw69p+qVlarsbEVYmIRGo2Zk1FiqupeXyNfXoWdbDbFU4O4kAQDt7UZk
1YcOdaXRqJmZNX5+TkhSo2lPT6/tLjVAcLCLUMjKzKy13KVvjVW3HgaDGhrqSjrFgNgpSLYa
kplZC5NxBgU529tzMjNr1ep2KInsb32AFAAAIABJREFUqlQqCAuTZGUpoOT//V/U5Mne8+bt
MxpNfn6dgW9dWvWAAGcfH3tiSUWFEsXTAQBkMjGPx0hPryV6JKFd1WgM2dkKoiTRLw/Rajsy
M2saG7VUKmXoUFez2ZyRUUt0KEBrWVenIam6RMIPDZWgeLH8/AaURrdLW205LIGSYWGSuXOD
3norfP78/Xv35oE+4efn6OoqyMjoVoWIkpYeRvitoRvOelUHANjbs0NDJcgPYinp7MwbOvSe
Vbess7sBTHcQ7b9SqYPKZs0HMY+JOgB+fNxtwDwFYBcAxibeAuAR7VokMmSIOCrKe8mSiD/+
yF+2LOXRNwCDwWAwmKcX5AJ4NJkvn1jYbPrIke5wh9fmzTeuX3/oJ6pgMI8W7ALAWAXeCIB5
CnjppcBPP33mcbcCg8FgMBjMU4xIxF65cmxVlWrBgv2Puy0YDAbz2MAuAMyTyxtvhE6c6AUA
CA2VyOWtW7bcsnUjOgaDwWAwGAykpUW3fv1lWzMpYjAYzJ8M7ALAPLnw+Ux44HlVleratar/
/vd2UZHNOy0xGAwGg/mLc+dOI5fL0Gj+6ru4tdqOM2dKH3crMBgM5jGDcwFgbOKR5gLg85ls
dqeXCqYI7t/zBTAYDAaD+SvA4zEYDFpra3vPSewxGMxTDs4FgLEKHAWAeXJRq9tx4lkM5s/B
2LGes2cHEEsKChqSk3P+3MuSIhF7wYKQmprW33/vY+LxJ5whQ1xiYmQHD965cqXycbcF0xMa
jQEAa6Pf3dwEMTEyiYTf0qLftSuru3MrMCSoVEpMjIzFoiUnZ6PzEfuFoCDnV1+VHT9eRDwC
EIPBYPoMdgFgMBjMQ4fDoXt52RMPrTSbzWVlSsvj4v6suLoKiKd2e3nZ37xZvW9f/p/bBcDn
M198MTA3t+7P6gLw8XF4++2IsjIldgH8mXB25sXEyIKDXaqqVKdPl2IXgJVQqZS//c2Xz2f+
/nte/7oAvLzsFy8Ol8tbsQsAg8H0C9gFgMFgMA8dd3e7desm+vs7oRKj0bR8+eljx/4qGS5T
UkqIB4bHx0+2PLkag8FgMBgMBvOwwS4ADObpIDxcOn78wIMHC4qKmh53WzCdODvzoqP9JBJ+
l+8eO1aUnl4DABg/fuDYsZ45OXW5uXVEgfBwKY/HOHjwTnu70fqLenjYRUf7Z2bWXrr0NC0H
NTfrmpt16GVLix4m+3yojBnjGRoqOXiwoLJS9eC1icX86Gg/FxeeUqnrrzr/sowfP5AYFQIx
mcwHDhTk5dXDl25uglmzAh6lqkdH+3G5jIMH7zw5GeOFQvbMmX4eHkL48vbtuoMH75hM5j5U
JRbzZ83yLyhoOHeuvGdJhUK9dWuaiwtPpdJXVrb04VoYm3j0qo7BYP7iYBcAxgY8PIRaLbeh
oa3LdzkculjMb2npHOiLRGzSEF+jaVcoNGjs4ujI4fGYCoVar783/6FQgFjMp1AAlGSz6WIx
X6XSazTtYjGPxerUWJVKX1en6du3gHUyGFRUYjSaFAoNGvPxeAyxmE+lUpBAe7tRodDo9R00
GkUs5kN5sZgnELAAAPX1bXp9h1jMYzBoBoNRodDodF1LAgB0ug6FQmMwdH5loZDt6MiprVWT
RpxOTlwOh15bqxEImA4OHADAjBmDP/xwZEuLzvy/sV9bm0GhUBuN98aCDAZNLOahHIoQhULT
2qqHf7NYdLGYp1a3q1R6sZjP4XRKqtXtCoXa3JdRZS+4uPDodKpCobG3Z4tEbFhoMJgUCrVO
1xknyeczxWJefX2bwWAUi/l0euejaW7WNjbeFycPJSmUe49GrzcqFGriFJpCoYjFPD6fSfxg
Y2Mbcf4JALCzY7m48IglWq1BodDYlHJSLOYtWRIxcKCoy05RUtIEXQCTJnnNnOk/f/7+zMxa
9C6dTk1KmhUWJjl+vNgaFwBSy2HDXFesGP3bb3m1tWr4FkmBIc7OXKGQTSxRKnXddd5evyZS
YEhTk5a0hUEgYIrF97lCSKpuPUIh29n5PtNhqeo9S9rbc6CyzZ4d8NJLgfX1mrS0GijwIKru
6sp/993hwcEu5eXKzMxaSxcAl8uACg9fNjffu0VUKkUs5pnNQKHQmC0ub2/PFgrZCoUaBQ+T
VL1LBXZ25ioUGrMZSCQ9SQIrOgWNRhWLecSNKgCA+npNS4ueWEK06mYzUCjUXd2nXoAWeOJE
r3nzgklvGY2mrCxFRYUSqnpoqMRWVUe2miggkfApFIpCoXZ05CBJg8FYW3vPqsPv/sYbYfb2
7OLiJnRniKpOpVIkkk6rTqyfxaJLJLzW1nYoCa26QqGmUChE/2BDQ5tSSX40PWNvzwkMdJo1
KyAoyBmWnD9fkZdXL5errbfqSC0DApyWLRt14kRxVVWn6ppMZoVCgzbjEBX4+PFiAEBHB/nL
QuDPPVL1/0mSFbhvVr293UgaGPQjJFUnDUsAAEwmTSzma7WG5madFZL3DUts3diFrLqVqg46
uw8PhVBZWnUulyGR3DeAQcMS+BLaamhRxWIejdb5aCytOgaD+RODXQAYG1i3buLNm8YffrjR
5bsBAc6ffTZu7978pKQsAMC0aYPefXc4UeDChYq4uPNabedP2ty5waNHe8TFnSce9UelUpcs
iWAyaVDSz8/xs8/GHzp0JzW1LC5uPIqjPnasaO3aC337FrBOV9d7I7OWFl1c3Plr16rgy9BQ
SVzceOJwuaKiJS7uXEFBg0DAWrZsVEuLPi7u3OLFEVOm+AAANmy4WlDQ8Nln49zd7aqqVJ9/
fj43t65LSQDA7dv1cXHn0AgsKso7NnbYqlWp6OqQmBhZSIh41arUqVN9Fy4MAwBIJHwej7F0
aeTf/x4GZa5dq/r88/PEMaVYzIuLG48Gi5Avvrhw9GhntLmXlygubnxqatmhQ3dWr35GJhPD
8tOnS+Pizj+MTNGxscOcnXmff35u3rzgV14ZAgtratSff34uK6szLDwiwi0ubtyGDVerqlRr
106ALg8AQFJS9o8/3iTWBiWZzHsB5EVFTXFx54hbVRkM6nvvjZgwYSDxgz/+eAuqJWL8+IH/
+tcYYkl6es3nn5/vg2vp2LGiLjtFWVl/bqBFaikQsJyceHPmBEZGusO3SAoMWbAgZM6cQGLJ
nj23N2681odLExUYsn17xk8/pRNLRo/2/OyzccQSkqpbT1SU99KlkcQSS1XvTvLmTfnq1akx
MbK5c4MAAG5udk5OvFWrxqH50sNTdQBAUJBzXNx4ogIfOnQH/s1i0T/4YKTRaI6LO2fp8Zkx
w2/OnIDPPz8PfUbAQtW7VOClSyPhd1m7dkIPksCKTiESsVasGBMRISUKxMdf3r+/gFhCtOpG
o3nVqtTeb4oF0AJnZNTMn7+f9JbZbC4ubkaqzuczbVV1ZKuJAkuWRHA4jLi4c0TJqirVqlWp
yKqPHOkOAPD1daDTqQkJ0w2GTg0hqjqXy0BWnVi/l5do7doJJ0+WQElo1ePiznE4jLVrJyCx
jRuv7dlz26Z7FR3t9+KLgcnJOciYhIVJfv45+ssvL1pv1ZFa8ngMV1dBdLT/0KGuUEar7YiL
O3fhQgV8SVJgAEBdnWb16lRkqxEBAc5EWw0lLRUYWvXPPhuH/K3WWPXS0mbSwKAfIak6aVgC
AHB3t4uLG3/zZvUvv+T0LOnqyicNS7766pJNjbFV1QEAvr4OcLABX1padZlMvHbtBOIABg1L
4Etoq6FFjYsbh5xillYdg8H8icEuAIwN5OXVOzm5v/56aEpKSXV1K/Gt8eMHDh/uVlraXFvb
6uDAiYry8fV1uHVLTpQxmcz/+MfQ1NQy+FPk4WEnk4l5vPvWnSgU4OvrwGbTaTQKAEAgYIWF
SRgMqoMDp6Gh7dYtOY/HmDzZx9vbvm9f4ZlnBowY4VZerqyuvjcz0WgMcLGLSqVERXmHhkry
8upJUQAzZgx2dubm5zf4+zs5OnIbGtoYDGpDQ1tUlM9LLwXduFFdWany9BSGhkrgTy+dTiVK
oluh03W8+GLg5cuVN25UAwAkEn54uBQtjyMGDBAGB7uw2XS5vBV+ViYTu7oKioqaysuVUKao
qIm0ZM1m04OCnHk8xvnzFagwNFRCpVJTUkp0ug4+nxkSIhaJWFwuo6VFf+uWnMWiR0V5+/o6
ENZg+hNvb/vISPeamlY2m45ugsFgevZZH3t7DoxHdXTkDB/uNnduUFaWoqioiUajODtzo6J8
PDzsSLVByStXKlGosF5vnDnT/+rVyqtXqwAAgYHOkyZ5AQBIuldbe09d+XxmVJR3YKAzSaa4
uMmmgHyEXN5qOVAjcv16NZfLmDTJi8djXL5cCQDw93eaPNm7rExZVtZs5Tp5S4s+I6OWw6FL
pQJPTzu5XIXajxQYMnCgKCrKWyRik76ggwNn4cKwlJTSu3etjez183OMivIhKjD6yiRJJyfu
yJHuKSmld+50zr5Iqm49Egk/LMw1JaUEqbpeb3zttZBz58rRVEQgYE2Z4uPv70RqWGFhY0eH
qbKyBZZTKEAkYt2504AaXFrabLkIbw2jR3uMHOl+6lTJuXPlBoMpMtKdTqcSA6onTvQKD5dC
BYYlYjHv9ddDXV0Fubl1JpOpuLjJy8s+NnbYmTNlSIGdnLhRUd5eXqLsbAXyUwAAmpu16ek1
aO3Uy0s0b17wyZMlaJnOxYUXGenx6qtDioubsrIUqP9CyZSUUrQ2aE2nYDBoAQFOdnass2fL
UGFQkAuFQklJKW1t1Xdp1UeOdPPysrc1pwO06unpNd31mpYWPlR1iYQ/YICwB1WH3L3bggSQ
rSZmTfP1dQgOdlEo1HZ2LCg5fLgbstUdHaaioiZ4q+3tORwOPTNTgWZ6RFWHVt0ylIbPZ4aG
Sm7f7pxiSST80aM9YmJkxIYBAAYPdnzppaCUlBLLMA1LXFx4UVHeAwYIb92S37hRVVLS6QIw
GIz+/k6hoRI6nZqSUtrWZrC06lCSRqMuXhx++nSpSqXPylIIBExnZ667u7CmppV4u4ieNSQJ
Xw4bJh061JUUAQS6UnV4GydP9haJ2FCFiFa9tLQZ2RzYKeAQgkajTpniExIiJiowAKCmRk2c
afcvBoOpsLARXY40LAEAcLmMIUNcpFIBlUrRag3oXpEkR4xwHz3aAw5LoACLRX/77YhBgxxr
asjmsTuQVbdS1Z95ZgCbTa+sVKFgAUurLhKxw8Ol2dkKlHvFYDBNneprb8+GnQLa6nnzgvPy
6gsKGtFDdHcXxMTITp8uRZVjMJg/MdgFgLGB9esvffzx7LVrJ5SXK0kugLlzg/z9nebP319V
pQoOdlmxYvTp06XvvnucKDNzpn9S0qxly1JIO6J7ZfJkb7GYFxt7JCOj1sWFt3Urpw8bNRkM
KpfLeOGFgMGDHWNjj3Q5C6JSKa+/HsrnM+fP308cGPn7OyUlzXJzE6xbdxEAEBIiXrt2Qmzs
katXq8aM8ZwxY5C9PTs29ohKpXv1VRmxQiT522+diz8jR7onJc0SCllWzouOHSuCGePeeWe4
TCZOTEw7cqSwS0k2m87jMbXajosX7y5fnoLKd+yIHjPG8+rVShQHOG7cQFdXQWzskWvXqoRC
VmLicw9146uPj8OKFWNWrjz72WfnYMnAgaKkpFne3vbEGdTMmf52dqyFCw/V1WmGDHHx9BSh
BgMAKBTA5TIYDGpLi37nziy0ehkaKklKmuXszIUugFGjPP7v/6IWLTqyb1+eRtP1lxKJ2O+9
N6KysuXdd0+0tRn6EKluK0eOFJaXK5OSZg0cKLp9ux4AMHGi13ffTZk/f/9//5trZSW5uXXw
sY4Z4zl0qOuRI0VffNF1IExwsEt8fNSqVamkRdoPPhi5fv3k6ur91rsAIiLcfvjhb7GxR3bv
zmlra+9y7kyhULhcBp1OVSp1P/2U3mdVBwBQqRQul0GlUmpr1Zs23Th5sgSWT53qm5Q0i0Kh
QBcAm00fMED49tsRt27JSUYGsm9f/r59+QCATz99Rizmf/fdtQffYTtzpv/kyd7z5+/Pza3r
UoHnzQseOFA0f/5+NID+4IORn38+HgYS6/XGbdvS58wJTEqa9e67x5ELwN3d7pNPxh45Uviv
f50hXi4zs5a4beSrryZ98snYnJw6YqQug0F9+eXgAwcKFi48hELfoWR+fkNDQxu8n2PHeq5c
OXbRoiMoJIEEi0UXCJh6vfHMmbL33rt3PxMSpk+Z4pOeXtPaqpdKBSSrTqdTt29//oUXAonr
t9bQ0WFSqfQAAOT6NJnMbW0G5NBEqj5ypHt4uLQHVYf8/nseOnAB2WpS4nQ/P6eVK59ZtuwU
7BQrVox58cVAGAyiVrejdemkpFlOTtwVK073bcsMgs1mzJ8v27Pn9sKFh1Dhd99NWbZsVHa2
whoXgKen8NNPn9m7N4/Ui9PSatLSanbsiB4/fuD169XIdBOtOix5+eXgpKRZb755eOfOzE8+
OQMACA2VhIRITpwo7i58486dRigJWbFizJIlEZZi8+YF+/o6zJu3jzhXdHe3S0qaNWiQA9GL
BK16bOwR5ElZsWIMGkIwGNQ33xxKpVIWLTrS3KztmwfWVlQq/aZN94K2uhuWjBnj4eFhFxt7
BPVxkuSMGYPmzAmcP38/mrS/8sqQzZun8XgM610Atqo6GmygwDeSVedyGSwWTaXSJydnb9vW
uaTv6+tg2SnmzAk8frw4NvYw2pcRFzfus8/GFRc3YRcABvNXALsAME8Be/fmbd+eUVqqBAC0
tOjXr7/ch+N2QkNdly6NzMio2bPndn39Aw3vrlyp3LDhakZGbViYBADwn/9kJSdnd7ktFkk+
yOWsJDra7/nn/ZKTs3udcR08eGfr1rTCwkYAQFubYcOGq0ajyXKjdX+Rm1v37bdX4ep3D2zf
nvHrrzlw3aOiouVf/zpN3IMK46hdXHixsYd7vp8MBu2990ZIpYJvv73aw5hy3LiBO3ZEb9hw
pdeG9SPTpg0aOFAEALAMcHiSWbw43M1NEB9/pcsD/AQC5tKlkQIBa/78/Q+o6mIxf+nSyI4O
U89POTraLzra3xpVf7wcPlzY3Kxdvnz0Q6q/vd34ww/X9+3L786N5eDA+eijSAaD+sYbhzIz
a7qrZ9o033nzgg8fvgP9aFZiNJq///56ZaWKtBejVwoLGz/88OS4cQOSkmbBkuZm3bffXiW6
PPqdzMyaDRuuXr/eqTB//JF//XoV/E15GLS1tW/YcPXgwa59Lg8DolV/coBWvecd5hERbjt2
PL9x4/VTp0oeWcN65dix4oSEmzYtV1y4UPH66wc++si27mATPQw2IIsXh/v4OHz44Um0I6M7
EhJu/fbb7dbWP/OZrBgMpgewCwBjGwUFDadPlwYHu2g0hps3qwEAbm52kZHuSqUuNbX8IS0m
37nTiDzxen1Hz0HX3SEW86ZM8bl06e6Dn19dVaWCS/HQBXD7dn1300gk+QgYNMhx4kSv/PyG
4GCX4GAXVO7lZU8KqiwqakQLNQaDCT7Hh0dDQ1tKSu+xhdnZCjQDUan0xL0MAAA6nRoeLnV1
Fdy6JR81ymPUKA9YPmCAkJj0rqSkGa5COztz58wJNJnMdXWaa9eqiJrZ1mZITS2vrVWbTOYR
I9xhqu0bN6r7fPa1v7/Tyy/fl9isqkp17VoVWtUcMkQ8cqTb9evVQiHKCmmkUCiRke4kySeN
8nIljFMQidizZ/sbDKaGhrZr16rU6nsDRyaTNny4G5/PvHGjeuzYeznefX0dSPnneoXHY4we
7dHSos/MrJ040QuVh4SIWax7S82DBjlGRrp///11W+OJHjElJU16fcc//jG0D5/18LAbOdId
ZeoKDHS2lDGZzGlpNaTwfiJsNj0y0r24uOn48Z7OnvTxcYiK8iksbGpp0RMv5Ovr0MOnzGZz
WlqNh4fQVu1tatKePVvm5MQdPNgRfZGxYz1ZLBqaotvEsGGugwZ1ViWVCogb1BEKhebkyRIU
21VY2PhQZ8sGg+nmTXmv07B+hGjVnxyIVt0So9F86dJdGO0VFiaBDy4rqzY/v6G7jzw4bDZ9
5Eh3lKYxPFxKTGqIKClpSkkptanmqipVba365ZeDbbV71tPDYAMSGioZMkR865Z85Eh3mN4C
ACAW8xwdycevZGbWPuEuVAwG81DBLgCMbRw7VpSTo/j55+ghQ1zg1HHYMNdt257717/ObNuW
9vBWkjHWIBbz4+LGkaK1aTQKCqh+2hk+XDpsWDSxhEIBVOq9Adz58+UXL1YAAGbN8v/552g2
m37+fMVrrx0gugCamrTr1l2gUChsNv3nn6NnzfIHABBDK21l2rRBU6f6EksOHbrz2msH0Dx5
zpyAmTP933jjINqcuWBByIgRbkuWDHd3tyNKPmlcvlwJPW5RUT5JSTOFQvb169WvvXZArSaf
TAm3yhNLSI/GeqKivOHedUJVFOKu478CERFuUIHhSyqVgvYOPAxEIvaKFWNIWRKoVMqDO0y7
Y+/evD/+yId/i8X8n39+PjRU0jcXwIIFIW+/3Rmv3metwzx6DAbjxo3X4FkACQnTv/hiIgBg
5cqzD9UFAFUdWZg/n22RyVwSE2cQS3CnwGAwlmAXAMY2TCaz0WimUikoWx6VSoFOdDz/f+zU
12sSE9Msp7LV1ao/R7xfWlrN1q1pKFk3Iienc2ptMpnhoU03bsjffvsojUYVidirVj1z+PAd
lEAbdOqqWas1/PjjTZhqYfBgxxUrxiQmphEPcrOSU6dKSIm+795tISYygP3FZDKj9dILFyoW
Ljy0aNEwYtbJJxCz2dzRYQYAZGfXvvfeCSaTZmfHWro08tSpkgMH7ssVf+1a1datXWST7kN0
d2pqeXJytmX541qzCgx0XrRo2OTJXq6ugi++mNjcrOXzmYMHOzo787ZsmbF1a5r1i703b8oX
LTocEOC8YsWYhISbU6f6jhnjuWXLLWJkE4NBXbw4wt3d7v33T6ATyObMCRwwQNj/3+1/tLTo
t25Ns/QyKBTqB9wV3x2oqwIAmpraNmy4OnSo6/btz2/dmma9IyAkRLJo0VC5vPXNNw/DEldX
/qJFwx5GgzEPA2iKAQA7dmTC9W0vL9EXX0zcujXN+pQl1jN1qu+sWf4nTxajJCxhYZLY2D+V
wuTm1m/ZcssyJPOh+hAxGMxTB3YBYGxGp+u4caOaRqPClU83N0Fqanm//Fq7uQlCQyWuroI+
TMN6pa5Oc+ZMGY/HGDHCLTtb0YdsAn1AKhVMneqbna2wzKDeHU5OXJlMDHeM24pKpT92rKhv
GyVICIUsmUzM4zG1WoOV+au6w9GRO2HCwKtXq1CC9z5TXq5MSsomzq67o6JCmZSkBP87O628
XEl0AUCMRjPaYLJt23ORke7Jydl90L3c3LqdOzNt+khxcVN5uTIqyhst8z7hVFe3/vJLDgBg
5Ej3d98dXlenJrkASkqabb0J3ZGfX99zVSUlTTduVPv7O7W06PPzH/q4VioVzJ0b1NKiu3Gj
msWiwRDi9PQaDw/hq68OOXGiuDsXgLe3/ahRHvb29+LSoVpCZdu5MzM8XDpmjGdiYhpxRwON
Rp0wYWBHh2n16lSk6n5+jn1wASBbHRXlk5Oj6GEzjlZrOHWq5PRpGyKfKRRKSIg4LEyCdiv0
Ga2249SpEqlUsHbthJSUUutdAB4edq+8MmTVqlSkMP7+TrNnBzxge2zC398pMtIdnR4PYTCo
Q4e6Vla2WB6nZyUtLfpLl+6aTOZx4wYQLbCrK18mEzc1aWtr1Xr9vRwQPj4OJMmniytXKmHI
yVdfTZoxY/DevXnEQQWVSpHJxLDr5ebW9eGoUUhwsMvzz/v9/nseUnWl0h+ds/uAoAEM8WiP
R091teqXX3Isj1DFYDAYIjg0CGMzTU3aL7+8WFzclJQ0Kylp1tixA95551i/7EIcO3bAzp0z
SeHE/UVmZm1s7GFXV8GqVeOcnHgP4xKWjB7tkZQ0C21ctwaZTJyQMH3KFN/eRR8mXl72X38d
lZQ067vvpqAtu30jONh506Zp06cP6q+2Yf7iHDx458svL8bEyF57LeSRXfSXX3Lnz99P/Ldj
R0bPH5kxY/C//z31AbvPg4Bs9Y4dz6PjzfsLGo3y3nsjPvhg5NPixnpIxMTI1qyZIBbziYVc
LmPp0sglS4b3udqysubly1MMBhPJAo8c6b5z58yCgob16y+1tNyb5kVH+z24rX5igUle4ZBj
/PiBj7s5XfNQBzAYDAbTv/ylf7kxfcNkMre06Ds6TE5OXAAAi0VratISF2ZratTffHPFx8fh
u++mED/Y1mZYvToVJbM5cqSoqUk7b14wGser1e1ffXUpJmbIw2h2e7uxsVF74EDBiBFu7703
nJgBSKMxJCdnFxQ0mEzmXbuyQkMlq1Y9Q4zQNhhMv/+ed/26zavrOTl1u3fnhIZKRo/u9ALo
9cbExDR0RNnFixVr11545pkBU6b4wBKttiMxMe355/14vPuWlaDkqFEeaBNjQUFDcnIOStJ+
6lSJTtcxc6b/3LlBpGaQJK2BTqfa27OdnLhqdbut536TKCtTJidnu7jwkD50dJiOHCm8ebPb
NGaW6PXGn3/OGDJE/OWXkygWsfNnzpTBtIsjR7qTvr5O17Fx4zVickGRiB0TI/PxsSeKVVS0
ELOF9S/HjxerVHqiqkNyc+uysxXEpTxrKC1tXrv2gqenEN1PpMDw5e3bdZ98csbVVUDqgCqV
/tNPbdtnGx4uffXV+/ojSYEBABpNe2JiWlCQM+lykJMnS06cKLbycg0NbRs3Xhs82LHLqg4c
KIDPsa3NUFam3LYtzVKysLBx165sUqeYMWPwCy90rgxnZNQmJ2ejEPReeeWVIUOGuHzzzZVz
58pJIfGnTpWaTOaICKlIxE5Ozt6z53Z4uPTjj0ehrcUtLfrvv7++YAHZT4EkVSr9N99cqam5
b3HeYDBZqvqYMZ6urvx//nPqgxtKAAAgAElEQVT0nj23rc8wCm31pUt3N2y4OnKkOzHDIgDg
yJHCM2fKAACpqWVms3nSJC9LPx3svE1N2i6tenFx0++/58XEyIAteHvbx8TI7O3ZpHK1un3p
0lPEkIrycqWtqu7gwPHwEI4bN/CLLyYSJa0kOTln6FDJv/41Btl/ogJrtQZLVW9u1v38cwbp
Ket0xj17bldUKEmS3357lXjQSQ90dJiam3VQgWfNCkAJRzUaw9dfX758uZJ0aPzly3dPnSol
SS5blkLcPlNdrfrqq0teXiLUqvZ2Y3Jydk6ObWk1LVUdAGA0mk+eLOkhOaUldDr1tddCiMlr
AQBKpe7rry9XV9+3zk+hAIGACYccD+JyslR1Hx8HFov24ouBTCYNqrqVVUGr/uKLgchCPsgA
pldVtxKowKQBDOTChYr9+wu6/BQGg/kLgl0AmL5jMpnLypQlJc2k8XRjY9vu3TkxMbL33x9B
LD9/viIxMQ1tUbt8+W5tbeuaNRPQwsWRI4X//vd1R0cOi0WHdarV7Tk5ddZH0ffKuXPlSqVu
zZoJrq73Fm2USt3Ro4XwGx0/Xtza2r527QRiUt/ycuWOHZn5+fUiEbuoqAlNFJVKXWZmbV1d
55BOLlfn5tYRU7sVFDRs3HhtzZoJY8Z0ZkrPza3bvPlGZWXn+CYrS1Fa2rxu3aTIyM6lg6tX
q+LjLwMAQkMl6KxvJEmsikajMhj3HBk3blTX1LSuWTOBNKIiSmo0htxcq+4nlBQIWL1K9srd
uy3btqXPnRs0bVrnqKumRr17dyraJd7crE1Pr+n5pEaDwXj4cGFbm2HNmgmW55CXlHSmPxCL
+ej+QNLSar777hp6RgAAJpMWHOwybJgrUeyLLy4ePGjz8EirNeTl1fcalXrlSqVCoSaqOgDA
aDSvXp3ah3Ow5PLWn3/OWLw4HI1ikQJDysqUCQm3li0b/be/3RdL8uuvuYmJaTZdy9mZS7qf
JAUGAGi1HQcOFOj1HWvWTLCsoTuPQ1mZsrlZR0omr1Tq9uy5/dJLQcuWjbL8CHEyo1Lpu5Rk
MmmkTlFZqVq7dnxIiASWtLUZKBQK3H5sDYMGOdjZsb755go6PRuRk6MoKWlas2ZCQIATlUo5
fbpUpdKvWTPB0bEz8v8//8n67bfbHh52pH1Sp0+XNjdr162blJycvXt3Dqlao9HUpaqXlSn9
/Z3QFqH6+rb09BrLfSvV1a23b9cTdwLn5tYVFjauXTuB9ChRB0xLqykvV65ZM2H4cDdSbQIB
k8Wig66sutFoXrnyzJUrlYMHO9TXWzWthdjZscLDpUQLDDlypPD7768TS2pr1X1Q9crKFgDA
iBFuSLK0tJnLZRiNvZ9ccPJksUqlW7NmgkjU6aEgKrBeb7RU9W+/vZqZqfD2tpfL1QTJjkOH
7rS3G9etm0iU/PXX3F7bQMRSgU+dKvnhhxuW3+X69erdu3N6lqyvb9u1K+vvfw+bMWMwLNFq
DcePd+uhq6lpzc5WWCYrRQqMVB0AUFenWb06NS2t04PTnVWHdcJQeSqVEhDgTFLLTZtuWKYC
MZnMpaXNxcVN3t724AHoUtWzshR2diyZzAWqendWXanUZWTUIFW/cqVSLm+F3R+WoAGMlcpG
pFdVJw02EAqFOjOzFsWDQAX+8stJlqcSIKPd2Nh265a8sZH8aCwHMBgM5k8MZd+e3S/MffVx
NwPztPAWAJ3Di3/8Y+imTdOWL0/Zty+/pqbVclXNwYHj4nJfvH1raztJksWiuboKkFO/pUVX
W6t2dRVQKBQoyeEwpFK+Uqm3/LnqM7BO4sq20WiSy9Vo5ZDPZ7q6CojrG+3tRrm8VafroNGo
UinfaDTDWTSUbGjQwO2XTk5cOztWTU2rVtvh5MRNSprV0NA2f/5+qVRgZ9c5l9ZqDTU1auJ5
9VQqxc1NwON1/mBrNO1yuRoOI+TyVpKkVCpAP+1QkjjUYDJprq58Due+8AGiJJtNl0oFra36
nufbAAAo+d57I6Kj/ebP309c9bWJHTui3d3t5s/fbzKZ0WFdBoNRLlejowoFApZUylcoNL0u
wkNJikUYQGOjFo7MRCI2Ou0J0tZmkMtbiVNNOp0qlQpIe3dra9V9CAGACtzWZrAcmXUpSVy/
MptBTU2rStXHXaPOzlx0zhNJgSFiMY+4Cx0A0NSk7bWdJOzsWFKpgFhiqcDdSUIaGtq6zCcn
lQpoNApJgSH29mxSWDVEodCQZryWkhqNQS5vJdbJYFClUgHqFCqVvqam1Wx16lJXVz6dTqup
ae3y6DsqleLqKgDALJerzWYzj8dwdRWgCKPGRm1zs9bNTaDXG0n78LlchlQqaGrSdrfqaI2q
i8U8uVxN2njs7Mzj8xlyuZroQKRQKFIpn+TRq6/XIL8GnU51dRWQIo8AAFqtQS5vRQk4iVbd
bAZyeavZbJZKBXV1vXdehKUFhrS06EgBEf/7RjarOklSKhVQqRS5vIvfKUt4PKZUykcJDiwV
mKTqCoVGqzVIpQKVSg8l33ln+Nq1E+bP33/hQgVJsg+pRnpV4PBwaVLSrL1789asOW+Nqjs6
cp2dO++nyWSWy1u7m/U5OnJEIo5c3ko6Vhb8T4GJwXQGg6mmphX5nrqz6rBOKEmhUKRSgUBw
32SVqJYIqMAzZ/rHx0e9//6Jn37qIvOolfSq6t1ZdT6fSVJ1JpMmlXYxgLFe2Uj0oOqkwQbC
3p7j5MQhSvJ4TGhdSZUj+w8VWC4n//oQBzC2thzzJFEHwI+Puw2YpwDsAsDYxFsASOzsWNHR
frNnB0yd6jt//v69e/Med6ueRIgugMfdlr7g6sqPjvYXi3lqdfvevXkVFX1M94hcAD2kIsNg
MJg/DcgFYP2WjQcBuQBWrUp9BJd7LNDp1Ohov6AgFwaDeuDAnbQ0G7YbYDB/MbALAGMVeCMA
xgakUgGTKZJI+G+/HREc7FJR0WLT9nLMU4STE2/OnMDjx4s2bLj6uNuCwWAwmL8uNBpl0iRv
Go3y4YcnLY+7w2AwGIytYBcAxgbWrZvo6xvIYtEGD3Y6d678q68uFRY2Pu5GYR4KMB91P+6/
wGAwGAymDxgMpu+/v06hAOL2FgwGg8H0GewCwNjAnTuNanUtAOD69eqrV6vgKb6YLtHpOg4f
Lnx6M+uo1e3dnXZuE2fOlIlEbLxug8Fg/iJkZyu2bUsvL1c+msvV1Wl2785ByR3/lJhMZltz
42MwGAymB3AuAIxN3EsH+OCw2XTS6T7t7ca/7FyRyaSREtQZjSaNxtCHlEKPFyaTxuEw2tra
UQoxDAaDwWAwGMzDB+cCwFgFjgLAPDbmzg2aMyeQWHLmTNnGjdceV3seL6NGeSxdGkksKS5u
io+/UlPTbwciPhomTfL6+9/DNmy4eu1a1eNuCwaDwWAwGAwGg7kP7ALAPDba240oTp7DoY8c
6d7l4WF/ehgM2qhR7uHhUtKugbY2g9n6s8ueGAYMEE2d6mt52jkGg8FgMBgMBoN57GAXAOax
sWfP7d9/7zxQUCLh79w58/G253HB4zGWLRvd1KQlHR9oNgOTCcfSYzAYDAaDwWAwmH4DuwAw
jw2TyYw2und0mB7NindMjMzTU7h1a9qDRxwsWjQsMtKdVFhXp9m6Na2kpNmmqmg0CoUCOjoe
7oT/lVeGREV5AwAOHy784498WMjlMhYtGhYSIgYAbN+ecenS3YfaBgwGg8FgMBgMBvMYwS4A
jM2wWPTgYGd7ew6xsKCgoapKRSwZMEA4aJAjsaS+XpObW2802jzR9fGx9/KyJ5bI5a15efVW
SubnNwQFOUskfADAnDmBPj72FRVKhUIDBe7ebbH1aEOJhB8c7BIY6Ozubkd6i0qlMJk0kiR6
eedOQ2Vl513ichlBQc5CIZvHYzo6chkM6uTJ3sSqVCp9bm4dyo/o4WHn5+dEFGhsbMvNrTcY
jFY2OyJC+vrroQCAqioVcgEwmbRJk7xmzBgMADh/vgK5AOzsWEFBzjweE33caDTl5tbX12uI
dQ4a5DBggAj+rdV23L5dZ3ldBwdOUJALi3XvtkBJpVJnZcsxGAwGg8FgMBhMv4BdABibcXDg
fPLJ2FGjPIiF//zn6V27sogl06YNWr16HLHkxInid945ptHY7AKYMyfwgw9GEkv27Ln9wQcn
rJT8+ONT77wzPDraDwBgZ8ei06nffTcVeSK2bUtfvTrVpvaMHu2xadO0lSvPrl9/ifSW0WhS
KvUkSfTyk0/O7tiRAf92ceHFxY0fOtSVSqUIhWyTyZyU5EKsKitL8dZbR9DJUpMn+3z55USi
QGpq+TvvHGtq0trUeCvx8hLFx0f5+jqgEo3G8M47x06cKCaKzZs3ZPHicPh3ZaXqnXeOWVYV
FOSyadPfXFx4qARK3rhR/TBajsFgMBgMBoPBYLoDuwAwtjFhwsDp0wffvCm/ePG+iPGMDPKh
xDwek8djJCfnoDV2Lpexdu3EvXvzrlyptOmifD6TSqUkJ2ejJXQ+n7lhw7PJyTkZGZ1n13t7
28fEyCgU8PXXl4mfzcurN5nMBw8WwFOFZ88OcHMTJCdnNzfr/tfyGpsaAwDgcBgSCb+93Vhb
q+5Z8vbtemJ7vLxEH3wwMjk5u6GhTanU7dqVlZJSyuHQFywIUavbSSn0FAo1cZ2cx2MIhezk
5GwU/sD5f/buO76JI30Y+KjLktzl3nEvmOJCB8d00xMuPidxcpCcOV5KyHEh1BwJEPiRQkJC
CinkMIEzISGUAKaYYopx71VusiwX2bKKJavr/WN9yyLJxjYQCH6+H/7Aq9FqtXo0mn1mdsaK
umXLlNOnq65fbxzgkTc1SY8cKdHpDO++O+3IkWIPD+vFi0Nu324Si3teeSUSL7ZwYfCkSV6n
T1cRF/YjkdCUKd7OzuwjR4oNBmNQkOMrr0TqdAb8DVKp5OefD42JcTd5UQaD4uzMzs5uvnq1
gVjSx8cWnwwCAAAAAAAA8AeAFAAYnKgo9+TkyHffvZqeXot3UJuwsqL6+dlTqeTbtwU//liI
d/YuXhySmrqkurpz4CkADofu52dvNKIbNxq/+66goqL36vdvfxv9739Py8kRYhfwPj62MTHu
Eyd6HT9e9sMPBeb7OX+ed/48DyHk729PIqFDhwr7OviB6OxU5uYKbWwY0dG9l7vd3Zr6eola
rTMpWVnZgaUeMJ9/PnfmzBFnz1ZjKYC0tDKEkJ0dc+pUn44OZV8LIjIYVD8/OyaTeveu4PDh
Inys/pw5AampS5qaZANPAbS1KQ4fLlq6NOz118dkZNSPGuW6fPmY5OST9fWSl14aiRebMsU7
Ls43Ofkk8eA5HHpq6pIRI+yPHi0xGIze3rZ///vYjz++gx+2m5v1jh1x/v4OxFf09bVzdeWU
l4t+/rn8yJFifGNq6hJbWwakAAAAAAAAAPgjQQoADBp2I4Cnp822bZbHz3t62uzaFV9V1bl6
9bmHXNY+KMhx796Z1683vPPOZaGwz10tWzYmMtLlgw8yy8osTBDwyN261ZScfHLduvFr1sRi
W4qK2jZsuMTnSx/Hy7m4sLdvj2tulqWknH3I8/lYdXQoduy40dQk+9e/JuIbU1Ki/P3tt2zJ
GOyECwAAAAAAAIBHDlIAYHCysgTYDfB6vXHr1qkIoaqqjlOnqjSae5PSMRhUX187LpdlstB9
aCiXOFXeQLBYNH9/e6PRdLmAMWNciX+6uLCdnFh8vrSz82Hn+R8ImUwtk6kvX67D58YzGtFr
r426fr3xxo37OuQjIpwXLw7B/4yJcR/Cugd0OsXHx9bX1xa/eQETEODAYtGG8gYeD63W0Ngo
xedZxLi5caKi3BcvDiEGg50d08vLtrTUwtyBAAAAAAAAgMcHUgBgcG7e5GMD0RMTw/fsmYFt
KS1tFwhkcvl9F/yRkS7mE+YLhXK5XI0GKTranTgvHaaxUaJQaCyW/2OcOFF+4kTvOPYxY1z3
7ZtNoZBqa7s6OhRqtZ5MJjk5sSZM8Hz99TH4UxwdrYY8TiEszMnFhWOysb1dIZMN+nxKJKrW
1m57eyaNRubzpUqllsOhP/hpQ+XhYf3SSyNNVoIwGo2dnY9lIkMAAAAAAABAXyAFAIbo2rXG
5OSTCKGwMKcvvkjYv//uqVNVxALnztUcOJBj/kQeTzzY1/r553KT5QYQQkaj8ekZW87jda1f
f2nBgsCPP561Y8f1sjKRtTXj7bcnMRgU7Cxh3nprvLu79dBe4tKlun37LEwWUFfXNdhdnTpV
2dgoefHF8JaW7hUrzlZXd86a5T+0oxqI0tL2HTtumK9c0NLygMkUAQAAAAAAAI8WpADAELW1
dbe1dSOEuFxWbKyHm5vpla1AIMMnrntIfL60/11lZvIVCu3ChcE3b/Lz8wc9w//Dk8vVeXnC
BQsCo6LcrK0ZCCEajRwe7tTRoSQeeWJi+JBTAEKh/FGdz6YmmVKpDQ7mCgSyrCzBI9knQsja
mh4f7zdlirfJdolElZ3d/MDVE6ZN8wkNdUII3bnTVFTU9qiOCgAAAAAAAICDFAAYHBqNwmDc
dz8/lUpWKLRa7b25AAwGo1KpNRqRxeHlarWOuNRc//R6g1KpRcjyrlQqnU5nQAgdPVpSX9/1
3XcLbWwYJkMDtFoDcaJ+jUav0eitrKj4DrVavVqtR4NBpZKZTMvfHaVSi414NxqNKpVOrzcS
j5xGo1AoZBaLRqdTiLMn9M9gMPb06IxGYx/nU088+QPU2dnz0Ue3+3pUo9Gr1Xomk0p8RTab
ptMZVKrek6nXGxQKLYl076Px9LRZu3bcpElexM8XOzwWi2Z+8CYfzSuvRL7xxliE0NtvX4IU
AAAAAAAAAI8DpADA4MyfH7h8+RjiloYGycqVZ4l9701N0k2brkyZ4n3s2Avme/jyyxxsfb6B
qKrqXLPm/LRpPua70uuNn3xyB59+r6+SV67UExfbO3SocPx4z23bpllb916Rnj5d9e23+QM8
Hszkyd7r108w356XJ1y37gJ2p4Ncrtm9++akSV7E44mIcLa1ZX766Zzvvss/erRkgC/X1ta9
bVvG5MmWz+e33+afPl1lvv1hHDlSwuOJ16+fYGfHxDdqtYaMjPrbt5v0eiNCqKSkfeXKs9Om
+eJHJZdrjh0rrazsePXVUfizvvoqd/x4jz17pltZmc5ceP4878svLdwqAgAAAAAAAHhMIAUA
BkerNZjM89/QIDl/nod3DiOE5HLNjRuNNjaMiAhni3sw36hS6a5dazC/XVws7snIqOdyWUFB
jiYPGQxGbAhA/yWJ/cwIodLSdq3WEBnpQiLhBQbdha7TmZ6E/+1cdPVqA/Z/jUafnd1Mp1Ni
Yz3wAvioe+IQAI1Gf/16Yz+zJCoU2lu3mjgc+ujRruaPDnwIQEFBq1KptTh9IJ8vPX68rL6+
d1qBigqRWq2LiHCmUsl4GZVKl5UlwHM9HR3KS5fqXFw4/v72+JbMTH5Dg4TFogkEMmxjUVGr
Xm8YM8bN1tZ0LQSTjyYnR4iNFKis7BjgOwIAAAAAAAAMCumXtJ9eSHz5SR8G+LP4B5nsRiaT
iJuMRiPWLWyCTCaZlMQYDEaDwUJ5CoVkNCKLD/W1K73edLVA85LmL0ciITKZjKcA+jqefpBI
JAplQG9tgCWxMhZPI26w59PiHkgkksFgMF+YEDtO4vk0OUuY/k+40YgMBgOJRCKTTXY1oJOA
72oInwgAAAAAwLDXjtCXT/oYwJ8AjAIAgzPwy7PBXsj1cwH8aF/UaEQmC9QNltFo1OkGdDwD
LNn/xT/m4S+MDQYjQpb3YH6cAzxL5kdlNFrYMpCTAFf+AAAAAAAAPG7kBxcBAAAAAAAAAADA
nx+kAAAAAAAAAAAAgGEBUgAAAAAAAAAAAMCwACkAAAAAAAAAAABgWIAUAAAAAAAAAAAAMCxA
CgAAAAAAAAAAABgWIAUAAAAAAAAAAAAMC5ACAAAAAAAAAAAAhgVIAQAAAAAAAAAAAMMCpAAA
AAAAAAAAAIBhAVIAAAAAAAAAAADAsAApAAAAAAAAAAAAYFiAFAAAAAAAAAAAADAsQAoAAAAA
AAAAAAAYFiAFAAAAAAAAAAAADAuQAgAAAAAAAAAAAIYFSAEAAAAAAAAAAADDAqQAAAAAAAAA
AACAYQFSAAAAAAAAAAAAwLAAKQAAAAAAAAAAAGBYgBQAAAAAAAAAAAAwLEAKAAAAAAAAAAAA
GBYgBQAAAAAAAAAAAAwLkAIAAAAAAAAAAACGBUgBAAAAAAAAAAAAwwL1SR8AAP3hclkxMe4N
DZKKio5Hu082my6Xq7Ozm7u6VI9qz0QMBiUmxsPVlUPcWFDQWlsrHvI+aTRKbKy7m5s1Qig7
u5nPlw55VywWLTbWg8tlETfm5AgbGyVD3udTxcPDJjbWnUIhi0SK7GxhT4/2SR8RAAAAAAAA
Tx6kAMBTLSjIcd++OT/+WFhRcfPR7tPHx7aqqnP58lNdXS2Pas9EHA5jw4aJM2f6Eze+9Vb6
w6QAWCza+vUT584NQAgtX37qYVIATk6sbdumTpzoRdyYknImNfUZSQHExrr/8MMiJpN640bj
8uWnmpshBQAAAAAAAACkAMDTjUwmMRgUKvVR3rGC7ZPJpDIYFDKZ9Aj3TKRQaL78Mvf06Wrs
z/BwpzfeGPuQb4REQjQamcmkIoQolKHvat68wLlzA8+erT52rJS4PSur+WEO76lCoZCZTCqT
SaXTKSTS4/qUAQAAAAAA+HOBFAAYhOhodw7Hu69HJRJVRYVIrdb/kYc0BFKpKitL0NAg4fOl
crn6Mb2KSqW7cIGH/zlnTsArr0Q+5D51OkNJSTuHQ0cItbV1D3k/Y8a4zZsXmJx88uZN/kMe
0h/MyYkVGupUU9PZ0vKAty8SKW7caKTTKYWFrWq17o85PAAAAAAAAJ5ykAIAg7Bnz4zw8JF9
PXr7dtPq1edbWuR/5CENQVVV59q15ykUsk5nkEofy0QAj4lCof3ww1sMBhUh9Oc68kdl3DjP
L76Yu3lzxtGjJf2XvHu3+dVXfyORkEajH57nCgAAAAAAAHOQAgCDcPhwkbNzb+9rbKzHkiUh
R4+WlJS0Y1uamqTd3fc61adN85k/P4j49LIy0bFjJebDBAZS0tmZnZQU4elpg/2ZmytMSyvD
H33hhVBXV87Ro6XjxnlMn+6HbZTLNceOldTU9N57Hxrq9NJLEdgoeoxIpDx6tEQgkFl8s0uW
hJjcKp+ZyT99ugr/MykpYuxYN+z/fL702LHSjg6lxV09JC6XlZQU4e1tS9x47Fhpfv59sxjM
mDEiOtr92LEST0+bxYtD8O1paWW5uUKE0MKFwVOmeCOExo/3dHCwWrUqZtGiYOIe8JIIIU9P
m5deGunkdG++QI1Gf+xYaWlp78cdGOiQlDTy+vWGmhrxK69E4iWzsgS//FKBEIqMdHn55ZE/
/1wulaqSkkZaW9OFQvmxY6WhoU4JCQHEkpi//CUsNtYD+z9WsrX1XrD95S9hCKGgIEcPD5vX
Xhs1Zoxr/yVxdXVdR4+WmmcBHlhy2jSfadN8f/qp2NGRRSz5668Vd+4ITPZmbc1ISooIDHTQ
6QzHjpUWF7chAAAAAAAAnj6QAgCDcPhwEUK91zZvvDF2wYKgM2eqT5wot1g4JsZj3brxjY33
Bts7OFhVVHTweOLOzt5LZSaT6uNjO2GC14wZI4jPpVDIx4+XIdSbAnB15URFucXF+fr62uFP
rKzsaGyUSiQqhNCMGSPGjfOsr5eMH++J70oqVfN4YrVaj02b5+TEmjbN19qajj3q5sbp6lJl
ZNSbpwBsbBg+PraTJnnj2QRMe7uC+GdEhDP+WrW1XVVVncXFbfi16CNkZUWLifEYOdIZ+9Pe
nunjY1dU1GaSAhg/3jMlZWxzs8zZmU08n42NUrG4h8+XBgc7YttdXDhMJjUqyj0khEvcQ2Zm
730B7u7W0dHucXG+bm73VjRQq3W1tV1yuYbPlxiNyMfHbuXKaDs75rVrDVhJOp3i42PL4dCx
C/ugIMd//nOCQqHl8cTx8X6hodyuLhWfLwsJcUxICCSWxISGOuGHzedLq6s78/NbsUElHh7W
2EN2dkwKhRQaynV2ZmMlq6o6z5ypxneCl8R4edmWlLSdOVNNTAHQaBQfH1tiqGAqKzsqKzvK
ykTYBx0T47F2baxQKGexaMSSQqG8o0PZ0CDVau+lqNhs2l/+EjZjxgiVSpeX1wIpAAAAAAAA
8HSCFAB4jCQS1Z49N7OyertMo6Pdv/hi7ocf3j5+vLcD39PTZteu+JoacXLySeITZTK1SnXv
/u2lS8MCAx0OHMipq+vCtkyb5vOf/yzZtOny+fO999sHBzvu2zf7yJFifFd2dsxVq2LCwpy2
bs1ACBUUtKxYcQafRW/NmtipU30sHvaYMa67d884caLc5KjwzAXmq69y8en0AgIcNmyY+Ouv
lV9+mTOoUzQQbW3d27dfY7Fo2J9z5gR8+OFMiyVdXDjbt8f99lsl8cj/8Y/oiAjnjRsvHzlS
jJ2ulJSoF14I3bHjekFBK/HpeDYkKWnk1Knen36aJRTeu62DyaSuWhUTGsrduPGKXm/4X8mI
oCBHrKS7u/WePdNNDiklZWxmJn/r1ozXXx/z179G7Nkz/fjxsrfeSjcv+f33+b/+2psR8PGx
XbUq9uLF2k8/zUIIXbvWWFNzEiE0c+aI3btnfPddAV5SpdIRkzh4Scx778U5OFiZvJCDA3Pz
5ind3RqTzzcszGn79rjDh4u+/74A22Jry9y8ecrZs9XEkq+/Pmbbtmlvv32xre2+lBAAAAAA
AABPP0gBgEfPyYk1f34Qm0379NOsa9caeLzeofgBAQ4hIVz8kiwuznfiRK/Kys7bt5vw4eUW
VVV1pKfX5ue34Bd70dHu4eFOtrZMvIxY3HPlSv2tW/d25erK4XJZeCpBLtdUVHTg5U269DFk
Mmn+/KDISJdr1xru3AfbO/0AACAASURBVHnAUQkEMvx4OBy6j4+dszOrn/JDptHo8dwHQigi
wrmvkgqF9tYt/vXrjcQjZ7Nprq4cKpXc0tKNzaLX3q7QaPT19ZK+3qCrK9vd3ZrPl1ZW3jtj
HA7dzo7JZFKJ8+tXVIguXqwtKGgViRTNzbKDB/NNxkEUFrZdvlxfVNTa0aGUydTXrzdmZvKr
qzsVCtNV+pqb5c3NvRkHKpXs5WXj4tLb1d/V1dPV1YMQCgnhGo1GoVDe15HjJTFicY95CoBG
o/j52fF4YpOdcLmsESPsnZzY+Ba1WnfnTtP16w3Ekkwm1c/PjkajEJ+rUGj++9+y3FyhTmcg
njQAAAAAAACeKpACAI+eiwtn7dpxd+8279x5AyGE38Dv6GhFXJ5t9mz/+fODkpNPFha2Wt7R
/1y6VPfJJ3f6L9PQINm791ZDw0Mta08mk5KSIjgcenLySewWg344OFjhPfPOzuxHu3Lh0HR2
Kr/8MhcfdvEHOHeOt3//Xez/XV2qr7/ONSlw4kT5jz8WYv8XCuWffppVWtqO39BBZG/PZLN7
b9NwdmabXGM/EXK55ttv869daxhIye+/z3/8RwQAAAAAAMBDgRQAeFwSEgKDgx2JW7hcFnE2
vj+7lSuj8VvEbWwYLi6c/suD/r3xxtiEhEDs/xwOHc8cAQAAAAAAAB6VZ+d6DDxtJBIVfgsA
hscTZ2UJKipET+qQHpWAAIe4OF8Oh46/QWdndkCAw5M9qj8vPz+7adN87e2t8PPp6Mjy97d/
skcFAAAAAADAswdSAOBxSU/nvf32pX4KaDR6lUrHYFAZDIr5SoFPCnZILBZNodASp3wnGj/e
89tvFyQnnzxypBjfEhbm9Ace5jMlKsr9q6/mrVlzfvPmK9iW0aNdAwOXPNmjGhQSicRkUrDJ
JlUqnU5neNJHBAAAAAAAgAVP/u5lMGylpZUdOJCTkjI2KWnkkz6WXnq98cCBnIyM+n37Zs+c
OeLBTwAAIYSQrS1j48bJqalLfvhhUWysx5M+HAAAAAAAACyDUQDg0ZNK1Zcv16nV+qVLw8wf
zc9vwea3Ly8XyeWa8HCngAAHk5JCoTw7u/mP70o1Go25uUKj0RgT4z5qlAs+2x+mpqazqKgN
IcTnS0+cKHdxYeOHHRjowOHQQ0Od5swJyM5uFot7LOz9z6OkpN3WljFhgidx9QEqldzYKG1o
kBiNxkf7cgKB7OTJSgcHK/x8+vra2doyQkK48+YFZmc3i0TKvkpKJKrs7GaZTD3wl+vp0V6/
3mhlRTWJOmdn9tWrDUObz5/JpE6c6DVjxgiVSoeveQkAAAAAAMDTBlIA4NETCGRbtmSsXTsu
NdXCWO41a87jS9z1VfLMmerly091d2v+iMM1U1DQmpJy9sMPZ7777jTi9i++yC4quoQQunWL
n53d/M0383fujMceIpNJNBr5+edDw8Odly8/lZ3d/ASO+9E5erSkpqbzm2/mBwbem9BRodCs
WHH29Olqvf4RpwBycpqXLz+1f//c996Lw7Zg59PNzXrkSJfly0+JRI19lSwublu27FR5+SAm
mBCLez74IPO110aZRN3Nm/wVK87y+dKHf0cAAAAAAAA8nSAFAIYoM7Nx5crf8/KE5g8ZjUaN
Rp+ezrO4rt7Nm/wHlmxokKjVOoRQTY1448bLVVWdJju5datpxYqz+JX2kSPF9vZWHR1KYhmp
VP3JJ3fM15/H/PZbVVFRm8VFBA0Go1qt++9/S4uL24jb8cXh9XqjXq87dKgwM5Nv8lyZTG1x
n6Wl7W+9lZ6f32LxYAYlO7v5738/Y77y39mz1dXVnXh6BXfoUCGLRSPmU86era6p6aypEaM+
6HSGmhrx++/fsLNj4hu1Wn1urhCfH6G8XLR+/cWSkrY+9oHy8oQrVpy9dasJ+/Pnn8tv325q
bpYjhDo6lP/3f7e6unrHSmDnMzW1yDx1olBoamruffrmJTs7lS0t3X0dw+HDRTY2DPyFMEYj
0mj0N240rllznri9pUXe1taNjz1JT+cJhfKqKtNBAViwmewTC7a0tDKdzmDxSwEAAAAAAMDT
gPRL2k8vJL78pA8D/Fn8AyHXJ30MAAAAAAAAABPtCH35pI8B/AnAdIAAAAAAAAAAAMCwACkA
AAAAAAAAAABgWIAUAAAAAAAAAAAAMCxACgAAAAAAAAAAABgWIAUAAAAAAAAAAAAMC5ACAAAA
AAAAAAAAhgVIAQAAAAAAAAAAAMMCpAAAAAAAAAAAAIBhAVIAAAAAAAAAAADAsAApAAAAAAAA
AAAAYFiAFAAAAAAAAAAAADAsQAoAAAAAAAAAAAAYFiAFAAAAAAAAAAAADAuQAgAAAAAAAAAA
AIYFSAEAAAAAAAAAAADDAqQAAAAAAAAAAACAYQFSAAAAAAAAAAAAwLAAKQAAAAAAAAAAAGBY
gBQAAAAAAAAAAAAwLEAKAAAAAAAAAAAAGBYgBQAAAAAAAAAAAAwLkAIAAAAAAAAAAACGBUgB
AAAAAAAAAAAAwwKkAAAAAAAAAAAAgGEBUgAAAAAAAAAAAMCwACkAAAAAAAAAAABgWKA+6QMA
AIBnB41Gfv31sVFRbgihI0eKr19vfNJHBAAAAAAAwD2QAgBD5ObGCQx0rKgQiUTKvsrQ6ZTQ
UK5Kpauq6uxnV15eNl5ethUVoq4u1WM40mcHlUoODeU6OrIQQhUVorY2xZB3xWRSQ0O5trZM
nc5QUSHq7OyxWMzHx9bPzx4hJBTKq6stf4gcDj0szInFoqlUuooKkVSqtljM39/ey8sWIcTn
S+vquiyWsbNjhoU50emU7m5NRYVIodBaLBYc7OjmZo0Qqqvr4vOlxIfc3DjBwVyLz1IoNBUV
Hd3dGouPPhKurpyICOeRI50DAhwQQra2TJMCXl42/v4OCKHW1u7Kyo7HdyRPMxcXdmioE/4n
jycWCGSP7+UebaiHhnLZbHpfoW5vzwwNfXAAI0KoY3/286V4JMhkUmgo18mJjRCqru4UCuVD
3hVWq9vbWxmNxvLy/up/8AfDQ12vN5SXP5pQV6t15eVDr9Xxurq2VtzUZPlr7uTECg11IpNJ
+BbzupoYwDjz+n/gXF05ISFchFBHh7KiQqTXG4e2HzSwWp3FooWGcq2tGVqtvry8z6aOn5+d
j48dQkggkPF4YotlbGwYoaFcKytaT4+2vFwkl1v+RQsMdPDwsEEINTRIGhokFss4OFiFhnJp
NIpMpq6oEPX06CwWCw3lurhwUL91tbMzOzSUSyKRxOKeigqRVmswKeDhYR0Y6Ejc0tXVU15+
X0k8gInFKis7Wlu7TfZmUrK9XVFRITIO/jPEAxgh1Feo29kxQ0O5DMa9yyW1WldR0SGRmH6I
JiUf+KV4mABGj7RWB8MTpADAEMXF+e7YEf/mm+d//72mrzK2tsyNGyc3Nck2bLjUz64SEgJX
rIheu/b8zZv8x3Ckzw4Wi7Z+/cTp0/0QQm++eeHXXyuGvCsul7Vt27SYGHeZTL127YUrV+os
Flu0KOTttycihI4cKd606YrFMj4+tnv3zvD3dxAIZGvXXsjJabZYLClp5IoVUQihL7/M2b37
psUyoaHcL75IcHJilZeL1q4931fm6PXXxyYlRSCEdu+++eWXOcSH4uJ89+6dafFZVVWdb755
vqxMZPHRR2LKFO89e2Zs334Ne4Pm7byEhMCtW6cihH7+ufyf/0x/fEfyNJs0yfuzz+bgf27f
fu377wse38s92lDfvXtGcLBjX6EeHu68f//cBwYwIoQ69mc/X4pHgkajrF07LiEhECG0adOV
I0eKh7wrrFafPNlbrzesWnWun/of/MHwUFcotKtWnXskod7S0r1q1bkh1+p4Xb1z541vvsmz
uJPYWI/PPpvLYFDwLeZ1NTGAceb1/8BNmeL9ySezEULp6bVvvnm+n2zdAw2kVndzs37//eci
I13E4p5Vq8711dRZujRs7dpxCKHvvy/Yvv2axTIBAQ4ffTTL19euoUGyatW54uI2i8VefXXU
3/42GiG0b1/WJ5/csVgmMtLls8/mODhY5ee3vPnmhb4yBf/4R/Tzz4eifuvq8eM99++fQ6GQ
r11rePPNC2Kxafpp5kz/HTueI265eZO/atU5Ykk8gInF/vnP9J9/LjfZm0nJ06er3nzzgk5n
mnd4IDyAEUJ9hXpoKPezz+a6uXHwLS0t3W++ef7OHUH/JR/4pXiYAEaPtFYHwxPpl7SfXkh8
+UkfBviz+MeUKeMmT/ZKSyuLj/f7/PO5ycknT5woRwgtXhzi7MxOSyuVStUuLpzExHAeT5yf
35KauqShQfL3v59BCIWFOSUmhp87V3P3bjNCaM6cgJAQblpa2csvj1y/fkJy8snLl+vIZFJi
YjiVSk5LK9No9AM/Ml9fu8TEcDs7037X/PyWX36pSEwMj4x06eu5SqU2La0M7w8JCeEmJoYz
mb0JsitX6i9fvq8tNWaM64svhpvvx7zkIzRhgueCBcFKpRb7nWOxaPX1XcePlw2h7RIf7zd9
up9SqdXrjSQSYrFo5eWitLQyg+FeFt3T0+bFF8NtbBgqlQ4hRKdTKBRSWlpZefl9l9AJCYET
J3oplVqDwUgmk1gsWm6u8LffKollAgIcsM9UrdYjhBgMikqlS0srM2lwvPBC6OjRrkql1mhE
FAqJxaJlZvIvXOARy0REOCcmhmu1Biw2mEyqWNyTllbW1tbbSzBqlMvcufc1EzGzZ/tzuazk
5JOFha34RiqVnJgYHhHhjBD69deKnBzhYM8kztqa/uKLEd7eNnK55syZ6qoq074g7Evh4GCF
n08Gg3L8eFlRkeUGXF8WLgyeMMHT4kP5+S1YU8kkgInwUMe+aH19KW7dajp7thr1HeoIoc7O
nuPHy/h8KZtNe/HF8KAgR4vFiF8KJpOamBju7++gVN4L2suX63Jze8+8o6NVYmKEl5eNxV2d
PVtz61Zv09nenpmUNNK8JI/X9d//luBfij8m1LGwpFLJOp1BqdTOnRtgbc1ITj5ZWtpu8Y0Q
Qx2TlSW4dq0B+z+VSk5KiggLc7L43OvXG02+FGFhTklJEVQqub5egtXAJk+JiXF//vlQpVKL
dbhZWVGbm+UWSz7QlCk+c+cGEGuhmprOR1VXI4QMBiP+pegn1AsLW9PSytDAQh0hlJQU8UhC
ncmkJiVFPDDUJ0zwXLgw2GKZ5mZ5WlqZSKQYVKgnJkb4+NialOHxuo4fL8U7gYmhjhBisy2E
upubdVJSxKBCnURCbDbdvFYfMcIeizq8Vtdo9GlpZXV1XXQ6JTExHAvgnh6dh4d1YmLEzp03
PvrotslbwEI9MNCRWCEghLDv182b9+p/JpOamrokLMyJGGzXrjVkZZlehj0QXldjnd40GpnF
ov32WyXWLBkUJyd2YmI4l8vqv1afNct/2jQfYi1UXNxmclnr7W2blBTBZFLx82kwGInNEszC
hcGxsR7EWigrS4AFMC4oyDEpKcJoRP/7laR0d2uxACYWw377iD+4V682WGzq4FUHk0nt6FBi
AYyXManVqVQyi0X7/fd7AYxZvTr2ww9npqWV4QMlGhokp05V9fTc++h9fe1SU5fQaBRisP3+
e3VJyX0VqUmoI4TKy0Vnz1bjoZ6QEDhlijeypLS0PS2tTKczmDRLEEIWQ928rsZKsli0wsLW
X36p6KcksVbHmDdgJBJVWlpZS8ugO/DNa/WWlu60tNKuLhVC7Qh9OdgdgmEIRgGAwfH3t58z
J6C2tsvKiooNmrKxYXh62kyb5mNryzx1qlIqVVtb06dO9XZz48hk6o4OpVAoJ5FInp42sbEe
CQmBZWUi7Lc2JIQ7a5Z/TU0nlUqurOzo7tbY2TG9vW2fe86vp0f7yy8VA29WurtbR0W5zZ4d
gPeq4fR646+/Vo4d6zZnTgC2hcWieXnZiMUq/GdMIlFlZDRUV3eSSAg/ThaLhj2qVusaGyUC
gQwfJhce7rxx42SBQGYyEkyt1vH5UoFAZtKg8fS0wdq7QqHcPDv+QHQ6xdPTZsIEr7g4302b
LmO3l+/ePX369BGVlR3V1eLOTiVCyMmJbW/PNH91Dw8bGo3c1CTT6w1WVlRPT5tJk7yio903
brxSUNBibc3YvXv6c8/5lZWJ+Hwp9o5cXTljx7rNnu1/9mz1559nI4RefDH87bcn1tdL5HK1
QCAzGhGHQ/f0tJkyxTsw0OHtty/V10vc3a337JnBZtOqqzsFAplMpsZePTrafc6cgO+/L/jx
x0KE0Ouvj3n55UgeT6zR6LGha/8LIV8Oh75hw6WODmVICHf37ukIofr6LoFAplBoyWSSp6fN
uHEe8+YF7dx5AxsBsW7deCyE8vNbsSxAUVGbSfOLzaZ5etpYW9PDwpywhhqOSiUvXhyydGkY
Qqi2tmvIKQAulxUR4fzGG2MqKzuWLTtlXsDFhT12rOusWf5XrzZ8/PFthNCiRcHvv/9cQ4Ok
q0slEMgMBiOLRfP0tOnqUhFbVwghOzumh4e1QCDDLthmzhyxfPkYgUBm/u3Q641YszIgwGHd
uvE9PVrzkcB4qJPJpIULg+fNCxIIZHq9aeeJRKLCmpV9hTpCiM+XXrxYy+dLraxoL74YPn68
p8Uxok1NMqxZ6eBgFRDgEB/vJxTK9+yx3ONtb2+VnBwZFORocUxjWZkIa1Y6ObEjIpxmzhyB
3XBBlJUl+OWXcoS0jyLUNQKB1CTUN268wuOJTULdzc06ISGQTqdkZQk2bbri4GA1Y8YIi2/Q
PNTNy1Cp5OefD42P98MCw+TRtjaFSQogKMjxX/+ayGRSr11rOHeuhnhhT6ORPT1txo/3nDXL
f+PGK5cu1SKEtm2bOn26X2VlR/+3cZlgMnvP54QJnps2XcnKElAo5A8/nBkf71dR0VFX14XV
bC4ubBsbRlOTjPhdw+pVMpnU1CQzGIyenjb/+Ee0lRXNJNQRQnq98eZNPvYV7ifUEUJYCmAg
oY4QelShzmRSBxLqUVHub789SSCQyeWmSZayMtHvv1eLRIML9RkzRgQHm+YdsrIEp05VyuUa
81BnsWh79860FOqugw11Fxf2hx/OMqvVrc1r9VdfHVVb26VW67q6VNHR7vHxfgihf//72o0b
jSa99zgs1HU6Q3LySWLAREQ4p6YuoVBIJqFeXd35ySd3HuZmLi6XFRLCnTHDr7a2C6uF4uP9
du+e3tamEImUTU0yrVaPhXp3t8Zk/Dn25W1t7cZDfdQo15kzR9y4wTep1SUSlUAg0+t7a/XJ
k71HjnTZtOlyWZnIzo754Ycz7e2tystFeK3u5mY9dqzb7NkB//1v6cGDeQihV16J/H//L6au
rkup1GLBZm1Nxxparq6cTZuu8PlSb2/bvXtn0ukUbHw+dlo8PW1iYtwTEgI//TTr2LFShND/
+38xzz8fwuOJtVp9S0s3QsjOjunpaRMX50sikTZuvCyRqCIjXXbvnq7V6vEGDIWC/eB6zp8f
tGnTFew78s47k2bOHFFd3VlY2NrerkCEWr29XfHee9f1esOkSd579kzv6uppbZULBDL8Ahsh
pFLpTpwoN0lYmCsoaOnrB8I81C0We+4539WrYwUCmckvPkKIwaCeOFGu0yFfX7vVq2M//vgO
npmyGOpz5gQEBDgkJ58kfuU9PW1SU5e4unKwFACxVt+06bLFOzSxNnBfDZjcXCPejfFAVKrl
Wn3GjBFVVR2lpe2ixzjSETxTIAUABufcuZrGRklKSlR7u2LZslN8vjQqym3nzvgTJ8rPnMkR
i1UIIYFAtmVLxpIloTt3xh88mJeZyafRyGvXxjo4WK1efR6/wy0traympjMlJaq8XLR69Xk+
X/Lcc37//ve0gwfzLl6sNa+7+7Fs2ehRo1w/+CDTvEktFvcYDIYvvsj56acSbMvo0a67dsWf
PFn53Xf52BadztDYKEUIkcnkVatiXV05b72Vjl9IL14cvHfvzC1bMky6Sr76KvfcufsGwS5e
HPzRR7O2bMkoKbnvKnTlymisDbRnz620tNKBvy+Miwtn+/a49nbFihVnsONECH39de7UqT57
9878+utc7K0tWhS8cGGw+aunpIzlcllbtmRIJCo/P/tdu+JLStrfeisd25VSqfnkkzszZ444
dGjRe+9dP326CiGUlBQxdarPp59m4X3mV67UNzZKU1LGhoRwt2zJ0OsN4eFOu3ZNv3y5bsuW
DKGwGyHU0aHcseP6/PlB3367YOvWjKtXG7BXDwhw2Lo1o6KiN/d/5kx1Y6M0JSUqJIS7a1cm
Qig21mPXrviffio5d64Ga602Nko2bbrywguh+/fP3bIlIzdXyGRS160bb21NX7HiDH5/Hdbp
tGpV7MWLtfv337V49kJDnXbtir9xo3HTpiuNjZYHOj6khITADRsmenvb9XUj6NKlYXPnBh48
mId3d2dm8pctO5WSEhUa6rR1a4ZSqQ0Odty5876wxEyd6vPuu9O2bLmSnl6Lbamq6ty6NcP8
ysEku/Sf/xRhl0lEeKhjCgpatm7NML+b1OTazDzUUW9q7N6ubt9u2rIlw/y9483omTP9166N
PXgwz6RjxNylS7V79twy397c3NsIW7QoODEx/Ouvc2trTe+0lMvVWFP44UM9PNxp48YrJqGO
NQRNQj0np3nZslNkMkkuV5tfQBKZh3pfsrObt2zJML/6HdQMIA4OVps3T1EqtVhdjW08dKhw
8mTv7dvjUlOLDh0qHOCuPD1tdu6Mr6/vwupqhJDBYNi//258vN8XX8z96KM72HCwpUvDZswY
sXHjZeJNEFi9ymLRNm68jNerJ06Um4Q6QshoNBKDqrZWvHHjFfNQ7+p6qkMdIaRUaj/++HZm
pul4b6VSi9WWmAGG+sGDeTU1pneG48FmHuoqlc5iqMfF+Q421MVilXmt/vrrY0NDuSa1el1d
F1ar79x549NPs7DQamqSjhzZ5/i7P15CQuDy5WMOHszDh+Ln5Qn//vczf/vb6G3bpm7ZkiEU
yrFQv3tXsG9fFvG5WFNn374sPNTnzQs6eDAvO7t3+ABeq48c6bJlyxW5XIPV6llZgg0bLmFf
wO5uzZ49N+fODfzPf5bgtfprr42Kjnb/4INMvLs7PZ3X0CBJSYkKC3PCgm3MGLedO+NPnar8
+us87HKxra373XevLl4c8tVX87Zsybh9uwkhtHJltJeX7VtvpePDB379tYLHE6ekRAUGOnz4
4W2E0MSJXrt2xR88mJeeXovVljye+F//upiYGI43YLC7DqlUcnLySTz4jxwprqrqXLdu/OnT
VV9/nYvuq9UbDQYDQqi4uG3lyt+TkyPff/+5LVsy+rq5YGjMQ70vjY3SLVsyamtNvzUSiUqj
sXy/gMVQHwhirY61gc1hbWA7O6ZJAwZrA/v71/fVgDGH3YqlVutMavUJEzw3b55y9GjJoUMD
PXIwzEEKAAxOe7uCTqe4unJGjLDHZvcJD3eKinJPTS3Gr+2x+f90OsPYsa7Tpvm4u1tTqeRZ
s/zr6rrKytrxFH5Li7yx0crb29bWlon14URHu0dGukil6vr6wf1seHrauLlxeDxxX783jY2S
xv9Nzc7h0DUafWtrN3FMOEIoLMwpISFQq9XfuNFYUNCC9/k7O7OZTNrChcEuLmzirwKfLzXZ
w+LFwaGhXDabZvLq3t62o0e7IoTMBykMBINBCQx0kEpVxOFwjY1SkUgZEnJvhqSGBkl5uWj+
/EBnZ9aVK/UIoZAQbkJCIIlEKiho1Wr1CCEWixYSwi0tbcfTGXq9sa6uSypVR0a6ODhYYRvd
3a09PW3q6yVYpwFCqLNTqVbrHBysWCwaiYQQQtbWjPBwpwsXeHhbX6PR19SIe3p0kZEu+Dw9
3t62zs7sqqpOrNMAIdTeruDxxG5unM7O3kGwdnbMyEiXb7/Nx0Oop0dXWdmh1xvDwpw4HDpC
iEwm+fnZ6XSGkpJ2PD3U0iLn86U+PrbE+/SIZs3yj452LyxsvX1bYHJ9PnKk8+zZAVVVnVgn
gJsbB7tLpa/Zlfrh7Mz29bU/d67GpM8K5+rK8fGx5fOl+MWMWNwjk6ltbRkuLmxsHiyJRHXr
VpOHh/WyZWPOnatpa+tms2kJCYEhIdwrV+qIF34Khaa8XPTAplVzs9wkPs3JZOqSkvb+r0WR
pVA3Jxb39F/GyYkVFubU2dnDZtP/9a+J+ParV+vz8u7rzBGJlH3tysWFk5AQ6OFhffVqQ26u
sJ9W4MOHuo0NY4ChLpGoHngOMXioq9W6v/99LJtNx7bfvducmXnf4hESiaq4uK3/TCiVSk5I
CAwPd/rii2zsqF56aeS1aw34NQmNRgkIcODxxMQbhgUCWWtrd2CgAzbF1wAxmdTgYMemJmlZ
WW8tZDSihgaJWNwTHu7M5fbWbLW1XV5enUuWhN6504SNVwoPd547N0Cr1RcWdhI74c1rYHMK
hfbPGOoIIb3eUF8veWCxgYd6P7+J5qFuMFgOdW9v28GGulZroVb38rJxdeWY1OpYw6C7W2Mw
GAf4C67TGU6dqgoIcFi9OjY9nYf9wE2Z4jNpkteFCzzzBEpAgMPateM0Gn1Tk3TIdXVwsGN7
uwK/dpJK1cXFbVZW1IAAB2x6zu5uzd27Ajs75sqV0efO1TQ2SslkUkJC4KhRLrduNeHZGVdX
jp+fnUAgM6/VORw6hUJGCLHZ9LAwpzt37v366HSG2tqu7m7NqFEu9va9H42Hh7WHhzWPJ8a7
gkUipdHY4eTEIv1vkkQbG8bIkc7Hj5fV1PR+NGq1vrq6U6PRR0Q429gwsI3e3rZcLqu8XISH
emtrN4dD9/Cwdne3xrY4OFiNHu0ql2vwa1GlUotlc/AGDIVC9vOzk0hUxPhsbpa7ucn8/Oxc
XXtbHXitjqfX5XJ1aWk7nU4JCnI0uUOHwaAuWRKCzcJ4/jwPr0lMjBrliv1AVFZ2nDtXQxwJ
hYe6QCBbsCDIyiK4kgAAIABJREFU07O3CWFesqdHi3WJW3wJiyyG+sWLte3tipdeGpmRUY9l
8GNjPeLifG/fbsLPDLFWX758tLV172dBrNXJZJKvrx1CyKQBg7WB+2rAWESjkf397RsaJCa1
ektLd0DA4Gp1MMxBCgAM0ciRzt7etgghJpNKp5MtlmGz6UuXhmk0ehIJ2doy+5ryOjraHRvl
aGVlevE8QDKZurtbg99ojRBSKLTmgzD7N3as2+7d05OTT/73v/d11GNDQFNTl5ikAAZOKlVj
HUQPM+fQA12+XMfjiQ8cSHBx4WATKY0b5/HPf45fv/6ieRfZMPGXv4SZj+LDjBvnuWPHc/hk
Ft9+uyA+3u/WraYhNCsRQnK5+uDBvIeZCaK+XvLBB5nvvDMpJWVsY6OEREKOjqyXX45saJCs
W3dhyLt9qpDJJHt75vjxnuvXT8A3Go3GhgaJVKoeyGROXl42GzZMPHGi/L33rj/OI328bGwY
o0a5rloVg63ugRA6dKiwsrJDKlUN6qZ6KpWcnBxJpZKTkn5RqXRxcb6pqUvIZBKeAvjjXbjA
4/HEX389396eiV1GTprk9eab41avPn/qVOUDnw5wz0ao90+nM/z4Y+HSpWGpqUsMBiN2W8qL
L4bFxfmazNtiNCKJRMXlstasiUUI5eYKKys7eLwuheLRr/DS2tq9b1/WypXRq1bFCIVytVpP
oZCXLg0zGo2rV597rD/izzCFQiuVqhISArERkTKZuqVFLpGoiNfter1BLO6JjfXAfiDS02sL
ClrFYqXJUgUcDj0gwOG110ZhPSv9lBwUCoVka8vEkymYn38uF4mUqalL2Gwa1opYuDD4tddG
JSefNBnOhtXqK1fGuLj05keGVqsD8IeBFAAYooyMBqz7dPJk782bp1gsI5GoPvggMy+vhU6n
9FUGIXT2bDU2qGz2bH9i9+DAff99wfjxntu2TcWnmPrllwqsZ+xpcOBANnadiefvH5O2tu5t
267OmDHi2LEXEEKlpe2vvvqbyf0L4Gl2/HhZbW3X66+PcXe37u7WnDxZiQ3vfDawWLS33550
9Wp9UtIv+MbZs/137Zr+wQeZD7M80p9LSkrUnTtNGzdewYdETZ7sfeBAwgcfZD6w3/jpJxTK
N268PGuWP1YLFRa2vvLKr/iIcQAsSkmJWrAgCCE0YoQ9dhs2kVar//TTLPxuPl9fu/fffy4t
rezo0ZLHdDxnz1Y3NcmWLAlZt268wWA8ebLy2rWGQd2fCIguXuTV19/rBFq0KHjz5ik7dlwn
zl0iEim3b7+G98BHRDgfPrz4ww9vmwyvW7Ik1NfX7tix0v/7v1v9lxwUBwerbdumzZ7tb/HR
l1+OnDrVByGEdX2Zw2r1d9+9ikfvs1Srg2cSpADAoCkUmnPnatrbFVgSVCpVubpyKipMrzOL
i9t+/LHw3DleRYWIRiOPGGFPoZBMVovt6uo5ebKyokKE7Uqj0Ts4WJnf3/tA1dWdBoMxLMzJ
0bF3ZJ2LCxsbE/v41kqdNs3HfCbqn38ux8dG4ioqOv6YFnBPjy4/v2XiRK+4OF+EUGtr940b
jUNYKecZ4OdnN22ar0ikrK7ufBw9RY9Jfb2EwaC+886k6Gj31tbuzz67az6/gKsrJzExnDj/
mUqlu3atwWSkw4QJniYN1tLSdpMJtL29bZOTI4k9JzKZOiOj3mRODfNQz89vyc+/b/R+QIDD
G2+MJW7Bqghia95gMLa0yEtK2on9J4sWBUdFueGzbyKEwsKcTHYlEMiepfZ3e7uivFyUmdmI
N3/Hj/ecMMGTOEm+n5/93/42mvjlFYt7rl5tMLkN/imkVGpzc4Vxcb5YLdTQIMHuCDARFeVm
8ilXV3feuHFfSWdn9p8i1EUi5dWr9cRQp9Mps2b5u7reNyg3K0tgMjL5mQ/1/lEo5Oee8x0x
wj41tRgf8W5vb8XlspYsCaHRyPgUrQaDsaxMhFBvMyMuznfsWDfzVdkeoaYmmVZrePPNcXFx
vjqd4dtv8wc1qhyYaG6WNzffa4y99tooT08bGo1CLKNS6QoK7l0tu7pypk71SU01Xeuuq6un
qqrz9u0m/M5B85KOjlbPPx86fvy9JUW0Wv21aw34vWPNzfKjR0usrKj4F5BOp+h0BpFIid8x
gRCaMsV77Fi306ersJtEEEJsNj0gwCEhIVCvNxDvVcFrdXwxYPNaHYCnCqQAwKB1damwSWUw
BQWtq1efMy928WLtxYu9E5hptQasn99Ec7P8/ffvjXK8fbtpyH2ePJ5448bL+J+rV8fu3j09
JeWsSKQwyTs8Kq+9NuqVVyKJW3btyty+3fIyy+APFhXl/tVX89asOW8+5RiJhGg0CpVKRgjR
aGSsxU+lkslkEoNBwZZ2ewJHPGAjRti/995zRsIiRZ2dymXLTptcF/3lL+HYYs64L77INrku
iohw/vDDmcTljmpru3g8scl1kcVQN7kuionxwIdlYrKzm8vK2onXRUql9vPPsx84I/S0aT4T
J3oRt1y6VJuTI3xmrosOHy4yD0sTo0e77ts3m7ilvFxUWdmBpwAoFDKTSaVQyNh/EEJ0OoVE
IlGpZAaDotEYiBHyFJo/PwhfpQWTmlpskgLw9bX7U4R6fn5LaWkbMdRZLNqKFVEmCzq8/fYl
k8vIZz7U+0ejkVetijFZEWDHjufefnvStm1T6XTKwyzUCp5VZ89Wb9t2tf8ynp42mzdPIVYd
3d2a5ctP4SmAigrR+vUXd++e/vnnc7Etzc3yV189WV3dOWrUTPxZr746yuRewn/9a+LOnc+t
Xz/B3p5JTAEMpFYH4KkCKQDwbEpP50kkqgULggIC7A8cyHkcL/HVV7km8xXBkPs/BQcHqzVr
xs2fH0SjUdauHYddPERFuXM49M8+m/vdd/kmK2A/baqrO/fvv0tczk2t1pksA4EQOny4yGRU
pPl9KAUFrfv33yWuItndrSEO18QMJNRv3eJjK43hOjt7BjV9Pe7Spbrvvy8gbmlt7e7uHvQi
9n9qOTnN+/ffJaYvpVI18dI3Ls5n1arY2Fh3Eon0ww+L9HqDkxPbwYGZmBju4GC1f//dRzsX
9yN34kQ5cVVthJD5AdfWivfty3r6Q72ryzTUFQrt55/fNZnnsqjIdDwwhLq5tLQysbhn7dpx
T/pAwJ9YY6N0//672JTVGJ3OYPJ9RAgdO1aKb+zp0VZXd0ZGPmABizNnqmUyNcQneAZACgA8
m2pqxHK55rXXRpnPz9+XpibpmTPVbm6c8eM98/KEeOM7JIQ7bpxHUVGbSQdOTo4Qu8P/gaKi
3Ly8bBFCxcVtfc2J2A+FQnPjRqPBYJw3LzAvrwWbWTAqys3f3/7KlXrisjdsNj0qyo3DoWMX
sS0t3QsWBOXlteB3WUskqitX6g0G46xZ/nl5ws7OHhqNHBXl7ubGOXOmGi9WViayt7caN86D
RELYLQy+vnbR0e58vpTPl2KZdZFIceECj8GgPPecb06OsLtbw2LRoqLcbG0ZZ89Wt7T0Dvkr
KGjt6dFhZbBhe4GBjuPGeZSXi7DVvxFCQqH8zJlqe3vm5MneOTlCtVpna8uIinKn0cjp6bVY
N51OZ8jObnZx4cybF4hPBR8W5jR2rFturpDYTCeTSdHR7h4e1r//XmPxKsjKijZtmg+Xa3Xm
TBVCCBsOUFTUyuWy4uP98MWiBoXJpE6c6CUW95h0GGIqKjo8PYVjx7rpdAYsiry9baOi3Fpa
ukUiBXHQQWgoNzbWo6ioTSCQ9fToAgMdzPfZ0aE8f573wAu8wsLWB8ZnS4v89OmqB06TPpBQ
5/Ol/Zepq+u6eLHW19cuKsrNvClGxOOJ+9oVMYBzcoT9jIp/+FBvbpabh3peXotMprYY6gNh
Hup9lRQIZCdPVvbTG+znZ79oUXBurlAolJNIiEold3X1pKfXhoc7zZw54vDhIoRQT4/u5k0+
g0HF6gHsrqhRo1xDQrg3bjTiy4YhhBgManS0m5MTW6834CWJZDL11asNarV+zpyAvLwWkUhB
IpFiYty9vW0vXLjvLl8Ohx4T485gULBaqKNDuXBhcF5eCz6VOn7mHxhUnZ09f8ZQRwhptfpb
t5oeOOBlgKGOBXBfOzEvSaWSo6MthLqDw6BD3cqKGh3tbhLqhYWtOp3BpFaPiXGvrBzcHOwW
YXt49dVRQ3iuj4/tmDFuCKGWFnleXov5eK6aGvHVqw3EetXNjRMV5S6VqjMz+cQMUUCAQ0yM
e02NuLtbYzQiNzfOuHEexH1WVHTcvds8apSLSqUzqdU7O5XYEjydncqLF2vJZNL06X55eS0S
iYpOp8TEuHO5rNOnq/CMXnFxG4NBnTzZm8GgYJNo+vvbR0e7YwNVsDKtrd2//17D4dCnTvXJ
y2tRKDRsNj0mxp3Fop0/X4NnoPLyWgICHGbN8s/NFWKNjZAQbkyMe0lJO/7RNDVJf/ut0tmZ
PWGCV16eUKPR29tbRUW5IYQuX67DFpfVavVZWQIHB6vFi0Py8oTYtfTIkc6jRrncvdtcWdlb
deC1enS0e15ei9FodHZmR0W5K5Xa69cbhza3bj8G9aW4dKnugdFYXNyGz6tvMdTNVVV1KBSa
pKQIfAuxVs/LE1qcklCvN+bkCN3drU0aMNHR7vn5LeYNGOxmhMLCVvPaT6XS3b7dZGVFM6nV
w8Kcbt7kE2t1APpneSJ3AIahW7eali8/FRXltn79BBaLjm9//vnQdevGHzpUcOSI6T1pA7Ry
ZUxq6pLU1CUzZ44YwtPb2hTbt18XCru/+WY+PgB15cqY2bMDNmy4dOFCLV7SxYW9fXucuzsn
OflkcvLJvLyWH35YNGWKN16grq5rw4ZLWq1h377ZQUGOCCEWi75+/YSoKLfly0/ho3CPHSs5
dKhg3brxS5eGYVumT/f74ouEzEz+gQM5er0RIVRaKlq9+pytLXPnznjs54rLZW3bNs3b2/aN
N87g13jffJN35kz1zp3x2DzACKEFC4I2b56SllaGr0mend28fPmpgACHzZun2NkxEEI+Pna7
d09nsWhvvnkem2ZCrdbt25eVlSX45pv52D3GCKHExPCUlLEHDuQQlzyg0ylr1sSOH++5YsXZ
69cb+jqr1641YmcJ//fBB5lY62cIbG0ZGzdOTkmJsvjoiRPlBw7kpKSMxdsNU6Z4//DDory8
ln37sojXgUuXhmHBlpx8cuvWjAULgvra55/OpUt1b72VHh/vt3JlzJB3QgzggAD7AZYcWqjv
33/XPNSxZagshvpAmIf6w9Bo9J9/nm0SxmfO3LvsFIt7Pvggk8cT//DDothYD2zjsmWjlywJ
2b79OvEC1c6O8c47k1NTlxBLEgkEsq1bM6RS1RdfJEREOCGEKBTSmjWxU6Z4r159LiOjHi/p
7m69c2e8rS0TO57Kyo7//GfxhAme5vsE/TAP4IGXZDCoFkP94MH8wYY6NkeaSah/913ByZOV
JrX69u3TTp6s/O67AvTkYItipKYuWbduPINhoYvr3Lkak3o1Ksr9u+8W8PnSHTtuEMebJCQE
7twZf+ZMdXLySaxhYLLPEyfKP/00a9myMea1+scf38GyCdXVnW+9lU6jkffunennZ48Qsram
v/PO5JAQ7muv/Ybfq3L4cNFPPxVv3jxl0aIQbMvs2QF7985MT+fhd1AWFrauWHHW3Z2zfXsc
Nue8iwv7/ffjuFzWypW/49exX3+dm57O27dvNt7YeP750A0bJv30UzHegLl1qyk5+WRkpMuG
DROtrekIoYAA+48/noUQWr/+ItapoFRqP/74TnFxW2rqEvxelVdeiVy2bMynn2b9+mvv+B28
Vl+1KoZCISGEIiNdvvpqXkeH8t13rw4qPToQA/9SDIHFUB8IYq2Or8FpQqvV799/17wBs2pV
zMGD+eYNGCyMp0/3M9+VVKres+emea2emBj+wQeZD0w7AoCDUQDgWfDSSyOJF7oYnc6Qnl6b
lzfQmwl1OoNMpv7xx6KxY9127YrHfs8QQm1t3Xv23Kqu7lSrh7iyC4NBwRa3N5n8ZoAMBmNP
j9ZoNDo5sdeuHbdoUTBCaOpU79raLqVSi/U2IITmzg2cM8f/7Nnq7OxmbKbxu3cF77xzOSzM
ac2a2EOHCrEVm7GmiZeX7TvvTGpp6WYwqDExHnfuNHV3a/D+DbVar1brmUzq4sUh2OV9WJgT
m03T6Qx4t6Reb1AoDCQSCg52fP/9uK4ulbU1Y+RI59paMXH6PbVap9XqWSzaX/8aERrKRQiN
GeNmZUXVaPT4pa9OZ+ju1pDJpFGjXPbunalUarlcVkCAQ0ZGPb4Ck9GIVCqdTmdgs+nLlo3B
pvkZN86TREIqlc5k0R3s1miFQmM+DcTs2f7z5gX9/ntNTk4zPh87pqiobePGy4GBDtu2TT10
qNB8HcG+XLpUu3Ejadmy0QyG5c9Xo9GrVDoGgzpvXhDWRAgO5nI4dL3+3vn093dYtmy0VqvH
gg37sL78Mjcy0uXAgYRDhwqxRYn/vLRafUeH8ttv80aPdv3qq3n4dqFQvmfPTWxsywNhAXzu
XI1Mpv7rXyOWLx9jUqCysuP77wseX6j/+9/TxOIek1AfO9Zt2bLR2HAShNCECV6entbbtk3F
M0qZmXxs6nIs1I8eLYmJ8di6dSr+lPZ2xaZNVwbYgWNvz1y2bIyjo9WaNedv324yCePjx8ua
mmSvvjrK39/+l18qenp0BoPR3p65cmU0Ntn11Kk+7e2Knh4t8VtDIpGsrKgcDp1KJeNHZX7m
se7Qf/5zwosvhpPJpIkTvYqL2xQKLf5FW7gwOD7e78SJ8qwsAXZgN2/yN226EhXl5uzM/v77
gn4GPgAiYqi/8EKYea94ZWXHoUOFMpnaPNRpNEofoa4bbKhzOHSLtbpGY16r07BancGgLls2
etSo3gHV7u7W9vbM558P9ffvzdlJJKpDhwqrqzuxSYJGj3b95JPZ+HSACCGVSnf4cBFxYiAa
jbxs2ZgxY3oz4N3dmr17b5mP2KLRen9qmUwqcYc4rVavVGppNEpcnC9WC/n52Ts4sLAfWfyA
ly0bzWBQ33vveklJG/bb9OOPRVFRbnv3zkhLK8OyKv+r1Sn91Op6fe9HM2KE/ZYtU0QiBZNJ
HTPG9fLlOuLXFquFrKyoS5eG+vnZIYQiI11YLJpWe29XOp1Bp9OQSKSwMKedO+OlUpWtLTMk
xCkvr4W4TqFKpdNqDSwW7ZVXIrEOg+hodyaTir0Evqvubg2FQoqKcvvoo1kqlc7FhePjY4cQ
wsdBYD+4er2Rw6GnpERhV62TJnmp1XriD+7/zicZm/3eYDB6e9u6uLCNRkQcUoEQiovzTUwM
x/+sqRH/8kuFSd3l6Gi1bNkYYpysWXP+zp17YdDXl8K85AC98ELojBkj/vdeDOnpvJwcITHU
jxwpjonx2LBhEo12r1bUag1YE4J4PrFa/Z13JuMlTWp1iw0YGo2MfZuIR8VkUvtpMRqNRou1
uljc09NjuisA+gEpAPAscHe3johwNtkoFvf85z9F5hdOMpk6N1fY1GRhBTKDwXj5cp1Sqd22
bSpWBSOEcnKEaWmlxGLt7YqbN/nmM//3pbq6E2usPMzyBEKhPDu72dqajr3TtjZFWZmIeInr
7MxyceEcPJhXVtY7qIzHE/N44s2bp/j42FEo937AmpqkRUWtjo4sbFnypiZpVVWnydxh3d2a
/PwWb29b/MTeuSPo7Lxv6iyEUEODpKKiw8PDxsPDBntF8wUdJBJVdnazg4MVtiutVp+bKzRf
9onHE9fVdY0Y0fvzX14uwmfuwXV0KG/fbqLTKdiuFAoNjyc2aWoYDEZsFn2TubgwTk5sT0+b
Q4cKiDMPY4RC+ZEjxf/4R/TEiV5WVoOoG4uK2pqaZG5uHBKJNHGiV3V1p8kcYwghpVJbWNga
EOCAn89bt5pEonshxGbTgoMdz56txoNNqdSePVut1xtmzfK3te3tMa6r6yKTSf3PFiYW92Rl
CfoPNqMRVVV1WllR+5/7cCChrtUayspEUukDhlgjhDQa/fnzPL3eiHceIoQyMhrwe8J7enQD
uVkmP79FKJS/915cWJiTyUMqle6xhrq7uzV2+UQMdRsbRliYEz5ltFyurqhQ4yURQiZfiuvX
G2Uy9fbtcXiX0U8/leB9dAaDsaKiQ683WAxghBCVSvH1tWtullmcferu3WaRSLlt21R8OvrW
1u47dwQsFg17g2JxT0lJu0lCU6PRl5a2+/raYX2/fREIZPn5LXZ2TGyaa6FQXlHRgXUgY1xc
2E5OrAMHsmtqegcw/3/27js+qir/G/iZ3pPJpPdOEjpJCKEjUtaIUpXHpdkVC8oPRB8VRfnp
ugrLiijq6rKKrisPXUSaSCeBhCRACCG995lMpvfnj5u9XGbSCQSYz/u1r31lDt8598zMueOc
7z33nIKC5qIi1erVE8LDPdlsFun0G5ippETF53NuvqtTbeiTrm61dqur19Ro0tOrOp9S1KOu
vnr1BNf/wBmNVmaypjtdXae72a5OU6udv9XPn6+h3hk2m8U8BCGE+rKlSxob9dQNejab/eDB
YpPJNm1aNH36EEJKS1u++OI83YUIISwWKzTUg64hO7vuP//JY35/UurqtGfOVHZ+fZjq6kIh
l64tI6OKeb1aKOTGxCgyM2uou2nIf38YmEzW+++P8vK6vsC7wWDJza2Li/Pp6FudUlGhvny5
wd9fQl29LytrYb40ikZjysysCQiQUlXZ7Y6MjGrXG51KSlSFhc2hoR6hoR6EkIKCptJS54ni
KpUhPb1KKm37qWA0WrOyajUa5//gXrvWHBEhj4lRUA8vXaqvqHDOelMnBf0fXLXaVFDQROdK
KFar/cqVRrlcSH8bZ2bWMBf/p9BdhbJ3b8Fvvzlv4MfjcSIj5XTY77+X/uMfF2w259PW9aRw
iiwra8nJqXP6YdAu+g0nhDQ26r/55gI9n4JCfVevXj3R11dMFzY26l1/QrhGMr/VKa4/YEpL
W5x2LKJ+wOTnN3XejV2/1S9erHeTZUShr7B2/Pzj3PkL+rsZcLd4npCArqNuOy8voUTCdyq0
2RxKpcH1opNAwPHyEun1FtdRKEUo5CoUIurXKiGktdXkFCkW8xQKkVJp6M5/YwghCoWI2vOs
pcXolPbuPqmU77S7jNFoVSoN9DjBw0MgFvOUSoNTGtjLS8ThsJwiPTxumISs11ucfrDy+RyF
QsT8ielwOKg0MzPM01NIzSSk6XRmelMcikDAVShE9KwKQojValepDE6DENcPUaMxMTcNJoSI
RDyFQshiXN+xWGxKpYGZCmGxCDWyUioNrmuiy2QCqZSnVDofnfGKBEIhV6k00tMruoPDYXl5
iebOTXjttbGvvPLbr78WOgXweGyFQsRM6jscRKW63oU66pZiMc/LS0RHyuVCHo+jVBpcfxjR
qA7c2mrqvLNRnZzZMVx1p6uz2SyFQmS3O7p5GwVVJ/2QeVJwuWyFQmQ227q8Z5vDYXt7i5jD
BorrSXEburprt3TS3knBUSjE9EnB7OosFlEoxIQ42u3A1GtXKIRWq92pThrV2YxGGzUkk0h4
Xl43TE81maxKpZHZhagO/MQTw99//75Fi3Z1dIO6TMand+2mGAxWpdJAr7xNfQs1NxucTh+q
szU3GxwOR5ffwBS5XMjnc5qb776uLpXyPTwESqWhk1/kPerqCoXIdYaR0WhVqQx0/qU7XZ3H
43h799W3+g0dmBBis9mp71UWi6VQiDrJotKR1MMOvtVv+AamvtVForaVfVw7MEUi4QUESD/9
9AGLxbZo0a52ewXV1Z22flSpjPRIzOn0oYlEXIVC1NJioiOpD5H5LeT0rU5x/Wh0OovT8N71
W4jqZk5dSC4X0hcnKFqt2akLOf2AIYRYrXbXHwb0zxJaRz91mCVms02pNDCzadRJ4fR+uv7U
cfoB0+6J5tTVXTtwNyM9PYVCIcfph0G7mF3dqVvSBAKOQiFiZpa7GdntHzDtdPVZs+I//fSB
lSsPtbuXFmn/W9323x8GDYR80fkLByBIAUAP3aEpAIA7wZAhfg8+OEAs5lFTAXfvvpqRUd3f
jQLomkzGf/TRwWFhHhqN+ZdfrhUUNPV3iwB6bOTIoDlzEvR6S15e47591zApGu46XC57/vxB
cXE+er3l4MEi1+mK3YAUAHQLlgMEAOgbly41bNhwVirlz5gxYMaMAdTdlQB3PoGAm5oaTAhZ
t+4Mxv9wlwoN9Zw2LTo9vXrnznyM/+FuxOGwkpKCPD0FGzdm9Gr8D9BdWAsAAKDPmM32jRsz
qJtImZsSA9zJWlqMH310ymzuYt4swJ3s+PGyoiIlvQ8iwF2H+glBrXPc322BexxSAAAAfcbh
cHS5jTnAncZqtbsu+QZwd2luNnSyVzzAnQ8/IeC2QQoAAO4CLBaLWqiPEKJWm5wWJQYAAAAA
gO5ACgAA7gJCIWf58tQxY0IJIX/721nX/YQAAAAAAKBLSAEAOAsJ8ZgwIZy5049abTxxosJ1
/2Q6srFRd+JEhevWu5Tx48Ojo70IIenpVdSW9a6iorwmTAgnhFRXt544UcHcy1AmE0yYEObr
K2HGnzhR3uWe0n1CKuWPHx/W0mI8e7aq3QCFQjRxYrinp1CrNZ84Ud7RxtrJyUHUBraXLtVn
ZdV2csTk5KCgINmJE+XMvY7sdtLcbKiqaiWEDB8e4HCQEyfKu7kpIwAAAAAAUJACgL7HYrF4
PDZzW1omi8VObefL5bKZu+Ay2WwOaqNUNpvF47E72nDbYrFRuyLzeGzmrq03VmWn9oZls1k8
HqfdmhwOYrHYqC2jeTxOUlLg3/423dPz+ka+hYXNzz237/x5I3M7XGZkZmZNaem+a9eamQGE
EA6HxeNxnn56xKOPDiKErFp1uKREZbHYHTfu983nc8aNC9u8+UFCyO+/l1650lhXp6M3Pfbz
E69aNTbWzixWAAAgAElEQVQlJZj5lOee21dV1Wqx2OiaXN9P+m2kdfP9pHG57OBg2dtvT7h4
sb7dFACXy46O9nrvvUmxsd4VFernntunUjlvxku98/PnD3rppRRCyN//nn75coPFYnfdo5uK
XLBgyKRJEYsW7WKmAEwm68aNGdTfmzc/OHly5LVrzRUVaqc3HAAAAAAAOsHa8fOPc+cv6O9m
wN3ieUICugwKDfVctiwlIqL9HdH+8Y8Lhw4VE0IWLBgya1Z8uzHnz9ds3JhhNFrj432WLRvl
6yt2jbHbHRs3Zpw+XUkIefbZpKlTo9qt6tixss8/P08ISUoKXLZslFjMc43RaMwbN2bk5NRx
OKyXXx4VGSlPT69ijmNlMv7o0SFnzlT96185dOGyZaOio72oSG9vUWpqyG+/FW3blsesecKE
8JdfTklPryovVxNCEhMDCSEbN2bU1WnpGImE9+qrqV5eovT0KkJIQIA0NTXkp58u/fprIRUg
lfJHjgz29hYxa05NDVGpDBs3nqOnHsydm/B//s9gZszp05WffZbBHNVHR3stWzYqKEjW7nv1
+efnjx0rY5bMnZvw1FOJI0cGbd9+ZenSX12fsnjxsPHjw86cqdRozBIJLzU1JDu77uuvs5gx
Q4f6v/xySllZS0FBMyEkIcEnMFC2cWOG64SIQYN8X301dcKEcL3esmjRrsuXG9ptZ1JS4KhR
IampITt35u/efbXdGAAAAAA300DIF/3dBrgLYBYA9ExMjCI62isrq7ap6YZZ8cOGBchk/Kys
GoPB6ukpmDIlSirltzuEo69ADx7sN21adFZWrVptdIrhcNqCfHzEDzwQYzBYXbeqttsd9NXs
ESMC7rsvMiurxnVmOD07IDBQ9vDDcRUVatf581wui6qKxWKNGhUslfLfffcY8xJ0fLzPCy+M
1OnaKg8N9UhKCgoP92xo0O3dW6DTWQYM8B4+PGDgQJ8pU6KysmpVKgOfz0lKCkpODuJy2ZmZ
NcePlxNCvLyEI0cGT50adf58DTUAjorySk4OCgyUFRUpt2+/QggZMSIwJSVo2LAAnc5y/nyN
TmfWas1//FHq1OaZM+MGDfL96qssjaatJCHB94EHYrKyapXKtiWRw8I8H344Liurlt4kyctL
NG1aNIvFys9vdP1omBM35HJhUlLgoEF+HA6r3VkDvr6SpKTAAQO8NRrzoUMl1dWtfn6SuDif
qCivGTMGZGXV1NZqCSGJiYGjRgVLJPzLlxv37LlKCJkzJ2HAAO8JE8IFAm5u7vVtb0eMCBg1
KkQi4Xc0f4SWlVVrMtkSEwOHDPFTq41ZWbWtre3fggEAAAAAAExIAUDPpKXFvvDCyGee2Xvy
ZAWz/Iknhg8Y4P3MM3urq9uGpPv3F7711lHXGph3uVdVtb799tGLF+udYqxWOzNs+/YrH398
2rUq5r6p1641L19+0HVDYKdJ6d99l+t0jZoQ4nA4jEYb6bYxY0K/+ebhl17a//PPeVQ7i4uV
K1YcWrVqzPr1055+eu/58waZjL9q1Ri12rRo0S66nd9/n3vtWvOmTWk//XT5ww9PEkKmTo16
552Jzz+/7/DhEirm4sX6pUt/Xbt28vvvT3r88T0lJebuN6y+XrdmzbHz52uohzNnxv/znzNf
emn/jz9eYobt2XN17doTrk9nvp+RkV4ffzx1//7C5csPfvPNw67Bgwf7btqU9tVXmR9+eJJ6
YmOjfu3aE088Mfybbx56+ulf9u27Rgh59tmksDCPl176rbKylXrivn3X8vMbN21KGzjQ99VX
D9AVPvVUYmysYunSX195ZRS1LEIn8vMbX3nlt7ffnvC//zv5mWd+uXKlnYwGAAAAAAA4QQoA
eub48TKHw/Hww3Hh4fIffrhICBk2LOCJJ4Y3NuqOHi1tabl+MdZstmm1XQxf7XaHXm/pMqw7
Vdls9puvym53fPttdmJi4P/+7+Tt269Qs+JnzBgwZUrUv/99KSOjmgrj8ThSKd9mc9BjZpvN
QU1AEIt51LwDFoslFHK1WjPzcCaTzWSyCYVcPp9NVyUW8ywWO6Mqu05nZ7GISMTr8nq4a/sN
Bit9xIyMqtdfPzJwoO/LL6ds2ZJDl3fn/eRwWNRNE3q9hV6V4MYAtkTCczgIPfPC4XAYDBa7
3SGR8OlVCQQCDo/H0est9KoEZrPNYLDy+RyBgMOsUCDg8Pkcvd5iNnedjrHZHNSkDLG4x+8S
AAAAAIDbQgoAeiY3t76mRrt69YTExMCyshZCyMCBvkOG+G3cmLF3b0F/t+5m2e2OI0dKhELu
//2/48xmG7XU3OzZ8WPGhC5atCszs6a/G0gIIb6+4rg4n5YWY329zmmOg5OiImVRkXLLlpmJ
iYE//XS5y2E/LTJSHh3tlZ/f5Dqr4lbw8RFTNxRcutTQnfE/AAAAAAD0DlIA0GNKpeHDD0/O
nZuwdetsQsipUxUvvbSf2q3tXrJkybDZs+MJIXK5kLl6X79LTQ3ZuPGBDz88uXdvQUfbEN6k
xx4bMmFC+Icfnrx4sV4uF96KQzCNHBm0YcOfPvssY8eOfNeFIQAAAAAAoK8gBQA9ZrPZ6+q0
JpONWvM/J6eusrLV9QrzuHFha9fexyzJz2/avv0K8zKvv7/kxRdHMgfYdrtj+/b8S5duWB3g
/vsjnSaNZ2fX7dyZzywJD5evWDGauYafVmvevv1KcfENi//NmBHr7y9hlpw9W7V/f9va+2w2
a968gYMG+a5ff5YOuO++iGHD/JcuTd6xI5+O7BdCIXfevIGxsYpvv80+e7aqvl7Xu3omTYpw
+mguXWrYvv2K3e6IjvaaN28gj8feti0vL6+xpcV4S1MAfD5n3ryBcXHeP/xw8fTpyjsq1QIA
AAAAcO9BCgBulZgYhVTKZ5Z4eJTu3n2VmQKQyQSTJkUwV6Gz2Rzp6VVOKYCEBF8fnxv2BWSx
WE4pAG9v0bRp0czKm5r0x4+XO6UAhg71Dw72YJZotWZmCmD27HiplM/clF6pNISGej722JDW
VlM/pgAUClFMjGLq1KiGBt1rrx2+mari4rydBvZCIXfHjnxCHJGRXq++mvrjjxfPnasODJQG
BkqDgmQSCU+hEA0c6FtV1dq3a+/z+ZxHHhkokfDeeON3q9U+eLAfIcTHRywUcmNiFI2N+vp6
JAUAAAAAAPoMUgBwq+zfX7hhQzqzRK02Mkf75L87AlDbxVMcDkd5ufP959u3X/nmmwvMEnrf
O1pBQfPbbx+tqdHQJRaLvaKixSnsu+9yf/45j1nS2NjFtfSdO/NrajQffDC587BbberU6GXL
Ur7+OuvYsfKbrGrPnoLPPz/PLFGpjHb79WUFHntsyP33R1F/8/mc8HDPsDDPkBCPt98++scf
ZTd5dFcjRwZv2TLTbndQD4OCZDKZ4C9/uX/z5syNGzP6/HAAAAAAAG4LKQDoMZmMn5YWGxgo
XbfuDCHEZLItXZp86FBxbu4Nl+4bGnQ5OXUd1NHGaLQWFDR3GVZXp+0yRqczX7nSSK1Q2Inq
ak2XVbke/erVJnrde0LIlSuN69adiYiQz54dv39/kclkDQyUpaXFEEK+/Ta7tlZDCDEYLDt2
5IeHe65cOWb//kJq17r7749MSQnesSP/zJkqqqrs7Np//ONCYmIgm82iphhERMgffDC2tdX0
ww8XqZkIcrkwLS02JkZx9GjpuXM15eVdvEZafLxPWlpsZWXr6dOVBsP19nfyfpaXt2zenCmT
XZ++4ekp9PQUNjXpjx0ra2zUO0WKxbzFi4ft23dNqTR4eAjS0mJ9fcUbN2YUFSmpsAMHioYO
9V+8eNjRo6XUeoopKcH33Rdx8mRFVlaNxWLbs6eADqZMmhQRFuaZnl7lVA4AAAAAADcJKQDo
GYmEFxXltXDh0GvXmlesOEQI+dOfYjZtSjMYrJWVrWq10WZz9Hcbb4pabeJwWL6+YqHw+tkh
lwtbW00aTdt6Bxcu1F64ULt16+wJE8Lz8hpbW00jRgS8/faE777L+eijU1SMTmf55psLCxcO
3bp1tsFgoaYtLFgwJCHBd9GiXfTg9vTpyry8xp9+mpuYGHjhQi0hZPTokPffv2/t2hOfftp2
AdzHR/zyyyn5+Y1vvnmUEBIQIKXKTSabWm2kL54TQrhctkIhogNGjQr+n/9JXbHikNPEh04U
Firff/84syQiQp6Q4HP5csNbbx11jfzkk6mrVo0pKVEVFSlDQz2WL0+9cKF26dJf6bCff85r
bjZs3TpbIuFRa0Y+/HDcggVDFi3adepUBSHkX//KcWrDJ59MnTIlav36s5cvN3TUTj6f4+kp
dDhIc7OB2rgBAAAAAAC6hBQA9ExaWuxjjw3Ztevq2bNt17GzsmqfeWZvWlrsm2+O/+ijU01N
+s5ruJPZbI5Nm86NHRu6YcOfmAsQKpWGLVtyzp2rdoofMSLgq69mWK12T0+hn5+EdGDp0uRZ
s+IJIXFxPtXV7W+dMHZsKLXDgre3mHkRnjZlSnRoqCezJDOz5qOPTqnV12/O9/OTrFkziV5U
Pz+/6ckn91661OFAuk+Ehck//niqTmcWibgDBnhTiQxXjz02ZMyYUEIItYrkTUpI8HnjjXF5
eY1vvfX7vbcbBQAAAADALYIUAPSMRmMuK2s5c6by6tUmqqSxUffHH7qwMM/AQBk1BUClMu7d
W0BNfe/EhQu1NpvD9a5+pvp63fbtV3Jzu5i6n55e1e6uBEyVla3//vel/PzOWuVwOC5fbuBw
2EOH+ovFPLq8tlZ76lSF010GJ09W0Nefq6pa8/IacnJuuBWCEFJcrGJe5a6qai0pUTmtqGc2
244cKaEXw6+qas3NrWO+e9QyhFFRXk6VNzXpmXMucnPrtm274Wp/fn7jkSMlzGkCTU36Xbuu
Zmf34FYIrdb8229FHWUuMjNrfHyu0A8LC5Xp6VVOMTU1mp9/zvP0FNAvsKlJ38l2BpmZNXq9
RaXqcHfAMWNCU1KC1WpTdnZtRoZzXgYAAAAAADrC2vHzj3PnL+jvZsDd4nlCAvq7DeCmOBwW
i8UihGze/GBkpNeSJbs7SkwAAAAAuJ8GQr7o7zbAXQCzAADgLiAUcl98cWRychAhJCen7qef
LqtUnc0fAQAAAAAAV0gBAMDdgc/nUGs0ZmXVHj1a2t/NAQAAAAC4+yAFAAB3AZPJumFDOpfL
pv7u7+YAAAAAANyVkAIAgLuAw0GMRoz8AQAAAABuCru/GwAAAAAAAAAAtwNSAAAAAAAAAABu
ASkAAAAAAAAAALeAFAAAAAAAAACAW0AKAAAAAAAAAMAtIAUAAAAAAAAA4BaQAgAAAAAAAABw
C0gBAAAAAAAAALgFpAAAAAAAAAAA3AJSAAAAAAAAAABuASkAAAAAAAAAALeAFAAAAAAAAACA
W0AKAAAAAAAAAMAtIAUAAAAAAAAA4BaQAgAAAAAAAABwC0gBAAAAAAAAALgFpAAAAAAAAAAA
3AJSAAAAAAAAAABuASkAAAAAAAAAALeAFAAAAAAAAACAW0AKAAAAAAAAAMAtIAUAAAAAAAAA
4BaQAgAAAAAAAABwC0gBAAAAAAAAALgFpAAAAAAAAAAA3AJSAAAAAAAAAABuASkAAAAAAAAA
ALeAFAAAAAAAAACAW0AKAAAAAAAAAMAtIAUAAAAAAAAA4BaQAgAAAAAAAABwC0gBAAAAAAAA
ALgFpAAAAAAAAAAA3AJSAAAAAAAAAABuASkAAAAAAAAAALeAFAAAAAAAAACAW0AKAAAAAAAA
AMAtIAUAAAAAAAAA4BaQAgAAAAAAAABwC0gBAAAAAAAAALgFpAAAAAAAAAAA3AJSAAAAAAAA
AABuASkAAAAAAAAAALeAFAAAAAAAAACAW0AKAAAAAAAAAMAtIAUAAAAAAAAA4BaQAgAAAAAA
AABwC0gBAAAAAAAAALgFpAAAAAAAAAAA3AJSAAAAAAAAAABuASkAAAAAAAAAALeAFAAAAAAA
AACAW0AKAAAAAAAAAMAtIAUAAAAAAAAA4BaQAgAAAAAAAABwC0gBAAAAAAAAALgFpAAAAAAA
AAAA3AJSAAAAAAAAAABuASkAAAAAAAAAALeAFAAAAAAAAACAW0AKAAAAAAAAAMAtIAUAAAAA
AAAA4BaQAgAAAAAAAABwC0gBAAAAAAAAALgFpAAAAAAAAAAA3AJSAAAAAAAAAABugdvfDQD3
NX/+oBkzBjBLTp6s+PrrLGbJgAHeS5cm+/iI6RK12rR5c2ZeXsNtamWnhg8PWLo0WSzmFRer
Nm8+X1+v6+8WtePZZ5M8PQVffpmp0Zj7uy1dSEjwefHFFE9PAV2iVBq+/DIzP7+pH1t1R1m8
eFh4uOfmzZlNTfpbUb+/v+TFF1OuXWv+4YeLt6J+AAAAAOhfmAUA/UYs5vn4iKn/BQd7PPBA
7OjRIU4xPB7by0tEh40cGTR3bkJgoLRfGuwqJMTj0UcHLVw4dPr0aJlM0PUT+sPo0SGTJ0cK
BHd6vm/wYL+xY8MCA6X0x+3jI1YoRDwep7+bdgcZOTJo2rRoqZR/i+qXyQQPPBCTlBR4i+oH
AAAAgP51p48K4B62bVveL79co/7285Ns3vyga8y1a83Llx/kcFjUwxdeGLl0afLtayLcRk89
NWLAAO8VKw4xr2/b7Q6NxtSPrQIAAAAAuJcgBQA9JpcLFy4cGh3txeWyrVY79f+EkLKylu++
y21pMXazHp3OotNZqL+5XLbZbHONsVjsKpWBfqjXW266+V0bNMh3wYKhBw4UnThR3nnk5csN
b775u0DAra3V3KKJ2f0lNNRzyZJhFy7U7t9feHuOKJXyxWJeS4vxHnsnAQAAAADuHEgBQM8E
BsqGDvUfNSo4Jkbh9E98PofP5zAjw8M9mQFKpaG4WGmzOW5Fw2QyQUyMF3O6u8ViKypSqtXO
15Dbi7QXFyu5XDb1osaODX355RQ+n0NnJQwGS1GRSqdru5fex0dMv/zs7DpCiFZrNhqtzKNQ
tVmt9qIiZUyMgl7OQKs1FxUpmcEcDjs2ViGXC6mHLS3GoiJlcLCHTMZ3iuySUMiNiVHQs8Sb
m/VFRUrXsOBgWWho20djtdqLi5UqVVvixtNTEBOj4PE48fE+Tz894o8/vJTKthSMzWYvKlIx
MzKEkPBwz8BAGfW3yWQtKlL16KI9h8OKjlYoFCJCiJ+fxMNDkJgYSB+REGI224qKlK2tbXUq
FKKYGAWbzaIDdDpLcbGSzg35+UkiIuTUq2ZGVlSoa2o03W8Yk5+fJCrKi1mi0ZgKC5Vms00s
5kVHK1pbjTU12pgYL0/Ptg/RtatTkRIJj3rY2KgrLla5His01CM42INZ0p1IqgN3P/tG8/IS
RkcruNy2O8KqqlqdAqiuXlSkdMrLhIR4+PiIi4qUUik/ONiDefrQHZi6YaeqqpWqNiBAGhLi
UVys5HDYzG+PsrKWujptT1sOAAAAAL2DFAD0TFpazNNPJ37yyZmLF+ud/slgsDAHb2lpMW+8
MY4ZcORIyYoVh27RlfwBA7zXr5/KHD41NelXrDh05kxll5EqlXHlykNeXsJ166YRQiQSnljM
W7x42MyZcVRASYlq5cpDly61rUE4dmwoFUnLyalbufJQebmaLpHJBKtWjVEqjStXHnr++WS6
KtdIiYS3atWY8ePDqYcnT5avWHF44cIhyclBr756gBnZJX9/ybvvThw+PIB6+OuvhStWHHIN
mzkzfvnyVOrv1lbTypWH/vijjHo4aJDf+vXTfHzEAgHX318yc2bcuHFh1D/p9ZYVKw4dOVLC
rOqxx4Y89dQI6u/q6tYVKw5nZdV0v8ECAXf58tQpU6IIIX5+Eh6P8/nnadSkEkpdnXblykMZ
GdXUw5SU4HXrpgkE1zNN+flNK1ceunatmXo4aVLEO+9MXLnyECGEGblu3ZmvvrphpcnumzQp
4oMPJjNLsrJqX331QF2dNiTE44MPJp85U/nttxfeeGPcmDGhVIBrV6ciExJ8qIc7d+a//voR
12PNmzfwhRdGMku6E0l14C4nrbgaPjxg3bppHh5ty1h89tk5p0kfVFdfufLQnj0FzPI5cxIe
fjhu5cpDgwf7LVs2inn60B348ceHU3Vu3JhBCJkyJWr58tSVKw95eAiYp88HH5z8179yetpy
AAAAAOgdpACgB55/PjkgwOP//b8rFy7UlpW1dBTm5yeZMychIEDy44/Oi4qvWjVm377CzMwe
jBK7SSTihofLS0pUJ09eHwhNmxbl5yfZvfsqXZKWFpuSEnTsWBnzuXq9taZG09JipBocG+s9
Z07C+fPV58+3jTybmgzNzdezG6WlLcyX9sADsSEhHk6r1nE4rMBAWVJS0Jo1E7VaEzP+iSeG
HztWTrUhJSU4LS2mokLNDHjllZTp02O4XHaPVsKbMCF88uSIvLwG5nYJq1ePHz48wOkq6+XL
DczDTZwY7u0t3rkz32531NVpd+zIl0p5gYGyOXMSrlxp/OOPUirMbLa7XiW+cKFWKLzeyIce
ig0MlO7bd62bbbZa7cePl9fXawkhDz0Up1CItm+/Qs+2IIS0tpqpfRb4fM6cOQnx8d7bt+c5
VfLnPw8+daqSyk14eAji4ryfeGJ4fn4jFRkeLp8zJ8HLS9TNJjFJpfx58wZGRHg69eSKilZq
eM/nc0JDPR56aIBQyCktVZWWqjgc9pw5CQEBUuZUBUJIS4tx//7CCxeu9/x33pm4c2f+5ctt
H1ZYmOecOQmengKnY+XkOOfawsI8X3lllFptZEZOnhyhUIiYXb1zbDZrzpyEwYN9f/nl+the
oRC+/HJKUJCMLpHJBDExCtelLhUKYXi4p1DIlcuFgwb5PvNMYnGx8scfL86enTB+fPgbb4w1
GCzHjpXNmZOgULTNjJDLhQMH+j79dGJhYTOz5RERns8+m7RzZz5uAAEAAAC4DZACgB547rmk
I0f0a9Yc7zzMz0/y3HNJR46UvPbaYWb5rFnxW7fOrqvT9XkKwNdX4u0tqq7W7NiR/8UX56nC
gADp1q2zw8Pl1LhIIuH5+0unTIkKCpKtWHGoutp5NEsIoaY2zJgxIC0t9rffijZtOtfu4S5e
rGdOgvD2FicnB7UbGRnptWDBUOZF1NTUkK1bZxNC6BTAK6+kPvbYjgMHiqiACRPC162bFhur
aHcOfycmTAhfsGDookW70tOrqJIHHxywfv3UoCCZUwrgxIly+oqxXC7cunV2XJzP7t1X7XZH
SYlq3bozhJDk5KAJE8JPnCjv/OM+dKj40KFi6u+ICPnWrbP9/XuQAjCbbf/5z2Xq7+Bgj5gY
xfr1Z9udFs7nc+bPH2S12hct2sW8OWL48ICtW2cLBFx6egKHw5owIbyhQbdy5SGTyUbdtOJ0
/0J3yOXC2FjFQw8NKChofvPN3zuJHDjQl81mUVNOBAKOXC7kctl2+w03vDQ06L78MpN++Pjj
w//xj4euXWtmpgBeeWXUrl1X//739Pp6ncnU4Q0gfn6S2bPjP/74DN3VfXzEzK7eHWw2a+7c
BKmUv2jRLvoOgmXLRj3++Ahv756lSwQC7uTJkfX1upUrD0VHK+bMSXjkkUHvv3/8wIHiSZMi
mJF8Pue++yJqa7XUNA3Khg3TH3xwwIkT5UgBAAAAANwGSAHAveCJJ4YPH+7/4Ycnc3PrOooZ
PjxgzZpJBw8Wf/vthaYm3e1p2OnTFe+9d7xHg/mLF+uXLv31tdfGREd7dR3dqfT0qiVLdq9e
PZHeUsEdWCz2jRsztm/Pt1jshJD8/KZXXjnQi7vN09JiH398+Pff57reS+Jk//7Cv/3tLPUp
Wyz2jRvPsVikkzF8J+bNGxgUJFuz5tjVq00dxRQUNL/33rFz56p7UX/ndu7Mr6nRrF17X4+e
pdGYPvnkDJ33uXixfs2a47m5dRERcqdIvd6yfv1Zp3sKAAAAAOB2QgoA7gWRkfKUlJCrV5uZ
y7bJZPzQUA967rqXlyg5OWjPnoK8vMbb1rCmJj19Tb6bWlqMWVk1tbWam08BNDfrm5v1jY26
gAApszw5OSg1NYT6WyTiRkTI6WvRPTV2bOiIEW17yCsUosBAWa+r6it2u6OwUFlY2LY6QGur
6cKF2l7UExQkGzLEr6qqtaSkndX4mGpqNFlZtYyjN7vGKBSiqVOjfX3bVoUcNSrYKaC2VvP9
97kKhchsts2YMWDKlCidznLkSHFlpfN0FY3GlJ1dV13dy9UNO1FV1ZqTU6fVmrsOZbBa7Vev
NtF5LqoDNzXpXVMAVqu9oKC5p9NbAAAAAKAPIQUA94jwcM8VK0Y7zb4mt2sfwbsFh8MWi3l/
+lPMihWjqRIWiyUW83oxbudy2WIxb+bM+GeeSaRK2GyWWMzry+beK6idGpYtSxk40JcqYe6d
QSkuVr377jFCSGys99dfzxg+PKCxUd/QoG1uNqAPAwAAAEBfQQoA7hHXrjWvX3+2ocF5hr/r
RVR3FhkpX7FidEODbtGiXVSJRMKj0wE9Mniw3//8z+iCgia6Kj8/Se+quufNmzdw6tSor7/O
oheVvP/+yJdeSmk3uLZWs3r1H3K5UCTiPfRQXGys99//nn4bGwsAAAAA9zKkAKAH9u8vtNv9
58xJOH26glqn/c6hVBqOHi3tZJ+CqqrWbdvyPDwE06ZFnz5dyVx2/o4SFCQbMyaU3j3uZkRE
yMeMCY2O9tLp2i4jy+XCSZMitm+/Qt+5LZcLFy4c2ovKfXzEU6dGXbxYT1cVESF/4onhN9/s
O8SVK4379xcOHepvNFp7ejeHk7g478TEwA0b0nNy2taq8PERdxSs1ZpPnaoghAQESJ99NpG5
A+KtNnSo/9SpUZ0vB+jjIx47NnTIEP9e1M/ncyZNilCpDKdPd7G8QpckEv748WE+PmKz2Xb6
dGW7q3sSQgYP9qP2yLx2rbmj1RO8vUVjxoR5egq0WvPp05WNjXfWNxsAAABA32L3dwPgbvLW
W8e5zT0AACAASURBVEfVatOnn/4pIcG3v9vSYzk5dc89ty8wULp69QT6luw70NCh/ps3Pzh9
eszNV5WaGvLdd7PGjw+/+arc0P79hW+9dXT27PinnhrR3225TebMiV+3blpkZGeLUMTEKNat
mzZnTkIv6heLeStWjH7++eTeNvA6X1/xu+9O3Lp19ldfzRgxIqCjMGoXkq1bZ3eSnIqM9Pr4
4ylbt87esGF6XJz3zbcNAAAA4E6GWQDQM/v3F6pUxnbHRVevNm3enKlUGqqqWt9662hiYiC1
+x2toUH30kv7z5y5qQuq7dqyJSclJfjNN8eLRM5d+uTJiq+/zqIffv99bkFBs1OkVmvevDmT
3ucvO7vuuef2DRvmT7e/tla7eXNmaWkXy8L1wuHDxVqtefr06AULhlAlTU36VasOz58/yNu7
Z3mK3buvNjToFi4c+uKLI6mSujrtk0/uoe/VJ4SUlqpWrToyYkQA/dL4fM6IEQEWi/2772Z9
+WXWyZPlHUWaTLbNm8/T695dvtzw0kv7qT35qBKplB8X5+3vL/nmm4eZkX3CaLT+/e/pyclB
X301g82+vsGBRmP+/PPzGRl936kIIWq18cMPTyYlBTn15GvXmj///LxS2d2NBrdvz6+u1jz7
bJJMxqdKoqO9OBzWiy+ODAiQfvllptFoHTDAe+nSZObsALPZtm/ftXPn+ngHTYrN5vj88/Mj
RwZt2DCdy23LBRcXK1euPET3H0LI6dMVixbtGjr0+rmgVps++eTM9OnRQ4f2eCKAXm/ZvDmz
vl7LfD+vXm16550/amr6fnVDAAAAAHCFFAD0zJUrjQ0NugEDFK4zmT08BNTYrKXFuH9/oUjE
HTs2lBlQWKjcti3PYGhnszSTyZaZWdPlxuClpao//ihrbnYOO3euWqczJycHubaKHnRRzp+v
0estTpF8Poe5PFt1deu2bXk+PuLExLa17o1GKz1McpWf32S12p3WbDObbVlZtWq10Sm4pcV4
8mR5UVFbNqGgoLmqShMTo4iPb2tPebl6x478oUP9x40L6+iI7bp8uUGpNCQk+NAvLS+v8d//
vuTnJ/HyEpnNNkJIc7Phl18KpFLe6NEh9BMvXWoghCgUIqHw+pvgGmk0Wvn8698YdXXaHTvy
qX0W6EJq2O/tLWJGdlNeXqNSaTCZbO3+q9VqP3683GZzTJwYzuNdb2drq+nAgSL6BpCqqtbD
h4t7sQVguwwG6+HDJRwOe+LEG2ZS1NfrqK6u1ZrPnKksKGhnCwCm3Nw6tdo4ZIgf/dGo1aaD
B4sJIR4eAhaLEEJ4PLaXl4jZLVUq44kT5dnZN+xzmZ/fZDLZDIZ2OptK1d2UBCHE4XCcOlVh
NtvGjg2TSNoWcTx4sPjo0dLwcDm9JWFpaUtpactrr40ZMsSPKmlq0u/bd02vt6jVxpYWY3m5
+ujRUvrMvXix3tNTSHU2p65OtfPYsTK93jJ5ciRdmJfX+NtvRd1vOcVgsKSnV7W0GHU6i+sK
ILTiYuWBA0WEkCtXOtwHRK02nTpVUVbWUl+v69F7CAAAAHA3Yu34+ce58xf0dzPgbvE8IQFs
Nksm4zOHYRSLxabRmOk1+UUirkRyw/DbbLZpNCaH85r9hBBC1WmzOTrfkEwk4opEPI3GbLE4
DxR5PLZUKuBwWE7lRqPVqU7XSLvdodWaqXELTSrlC4Vt41ibza7RmK1We7utkkr5XC5bozHZ
bNdfG5vNkkr5DodDo7nh6FwuWyYTmExWOmXAYrFkMj6dgzCbbVqtef36aePGhT322I4e7aDG
4bBkMgGdrTCZbBqNSSrls9ksrfb6RyMW89pdul+jMTvtZs+MpF6L07skkfBEIueq2o3sklTK
53BYzC7kSiDgSKVtY2aK1WrXaMw2W9tHIxRyJRK+VmvqKJXQC0IhVyq9oSdbLHaNxmS3Ozgc
tkzGt1hs9GoLHaEiXRNJ9EnRbrd07epSKZ/DYVNHpwupzkZ14x69ND6fI5PxWf99Q/V6i8lk
lckEFouduViGTMYXCNrOBavVrtGYBAKuQMDVaEzUxhD06UPVRnU2p67+0kspa9fet2jRrsOH
S5iJOZ3O3G5asHNsNsvDQ8DlsjvvbHQHdv0eoHG5bJmMz+GwbTaHVmuyWNo/zQEAAO54DYR8
0d9tgLsAZgFAj9ntDrXa1GWYwWDt/i/7m6/TYrF38wpeNyO1WnM3B1TthtntjtbWdl6R1ep8
dIej/chesNkcLS3O8w5cm6fXW7q5z1yXkTqdpcvRbzd15902mWwmU2dTRYxGq9HY4/Fk5zqp
02azu77hvYvsfrd0Leyos3XJbLbRmxTQXNup0ZidMll0x7Ba7cw3hxnm2tUpJpPVKdPUC3Z7
O13dVXe6utVqV6m69SECAAAA3AOQAgDoZxwOOyrKy9NTwCw0m235+U03P1ICAAAAAACgIQUA
0M/EYt6qVWOc7vz/5z+zN2/OvNN2XgQAAAAAgLsaUgAA/cxisR0/Xu60sfnJkxX0EncA94Bz
56r/+tfT1651sXQiAAAAANxSSAFA/5PLhdRC6K2tpk4W9+4OhUKkUIgIIS0txi73F3DFYhF/
f6nT2m9KpaGj7d8kEp6/v5TNZhmN1vp6nesihd1hNFp/+OGiTMb395cSQvR6S329lrmy4B2C
zWb5+0scDlJfr2Wu6SgQcPz9pXw+x2Kx19dre3ErvlTK9/eXNDbq+2pNBLpOFmPlQLPZVl+v
7cNlAu9qVFdnsVj19dpO1l+8GUIh199fotGYqdPn3Lnqc+eqb8WBAAAAAKD7kAKA/peWFvvy
yymEkP37C9euPXEzVT3yyMDHHx9OCPn557y//z29p09ns9kvvjhyypQoZuG332Z/882FduOH
Dw9Ys2aSVMrPy2tcs+ZYVVVru2HdMXZs2LvvTiSEpKdXvffe8W4uMnc7CQTcV19NNZtta9Yc
p1fgJ4SEhcnXrr0vPNyztlb73nvHcnPre1rzyJHBa9ZMXL/+7N69BX3VWqpO5l6PJSWqNWuO
FxbiKjQh/+3qIhFvzZpjPd1HoJtiYhTvvjvx4MHijk4fAAAAALj9kAKA/hcUJEtNDSGE0LuR
91pIiAdVVXp6VS+e7nA4SkpUmZk11MOAAOnUqVEhIbKO4r28RMnJQXK5kBBC7yDYOz4+Yqrl
LS1G163j7gQcDmvAAG+j0cq6ceNFiYQ3bJh/fLxPWVmLTCbo4Nmd8fYWpaQE+/lJ+qid7KlT
o0aMCMjNrWc2tbZWazD0zeYF9wAWi8TEKKj9LG/RIaRS/vDhAXl5DbeofgAAAADoBaQAoGcE
Aq5I1E630estPd0HnmY0WqmL3h1t3yUUcnk8jl5vYV587ryqXuw0Tgix2x1btuRs2ZJDPUxN
DRk+PKCTeIvFRu1lSG2E3osj0sxmG9Vync7icNxxdwF0wmazazSmlhZja6vJau3/PdV5PPZT
T40ghCxatKvPNwgEAAAAALirIQUAPZOWFvPkkyNcy7/44vxvvxX1rs79+wuppe8qK9ufSD9v
3sCxY0PXrz9bVKTsvKrt269QE9FLS1W9a0yPZGfXPffcLzweR6Uy1Ndrb6aq06crFy3aRQhp
aNA57cF+hysvV69adUQq5ev1Fiz2BgAAAABwJ0MKAHrGYrFTdw5HR3slJgalp1dVVqqpcjrG
01OQmhpSX6+7erUpNTUkIEBKlVdVtaanV9EXiocN809I8GVWLhRymA+Tk4NiYhSEkDlzEkaN
Cq6sbC0paRvYl5aqMjKqXSNpfH77fTspKTA21pv6u7XVlJ5e1dFSf52IiJBTk/ZpRqOVdeP8
eIGAk5oaEhjY/k0Ely83XL7cQAiJjVUkJQUx/0mjMTnNtJdK+ampISqV4eLFhtGjQ4KC2uqs
rdWkp1cx17ejIqm1FQkhFRXqs2erUlKChEKuU2SXFApRamqIh0fbxP6iIqXTbRr+/tLU1BDm
lBAWi3A4Nza9g0idzpyeXtXY2OF6jXK5cPTokJoaTfdXFhCLeampIX5+Eh6PHRrqSQh55JGB
zG6pVhvPnq2iF1mIivJKSQlm1tDQoEtPr6KnosTH+8TF+Zw9WymV8pmRmZk1XaaiOhIf7+M0
r4Q+KXx9xampIcXFqqqq1tTUEGpVS+LS1QkhVKRE0rZoZUFBc3Z2reuxmF29+5Eajfns2cqb
PykuXHA+UGysYsgQ//T0qpoaDbN8xIhAX19xenpVWJhneLg8Pb1KoRBSJwXVgUeNCo6IkFN1
UjmmgQN9o6O9zpy5HknJyKgqLcU+GgAAAACdQQoAemb//sIDB4oIIU8+OeLTT/03bszYuTOf
EMKcBh8S4vHBB/f//nvJhg3pb7wx7v77I6nyvXsLlizZTa899uijg1atGsus/Pvvc5mjnSee
GP7ss0mEEDabxWKx3n9/Ej1BvqNI2saNGe2OdhYvHvbCCyOpvwsKmpYs2d2L0c6YMaHffTeL
WZKRUb1kyW6t9vrIUCYTvPba2OnTo9utYe3aE1QKYOrU6E8//RPznw4eLH788d0m0/Xhsb+/
dM2aSVlZNe++e+x//mf0gw/Gdh45alTbeHXbtrxz56qffTbJ31/qFNmlyEj5xx9PiYvzoR5+
/XXW668fYQYMHuy7adMDdH6HEFJe3rJkyW7XgX33I2nh4Z5/+cuUX3+91v0UgJeX6M03x0+c
GE5IWyYiKWkmMyAvr3HJkl10CmDSpIivvprBDDh+vHzJkt10CiAtLXb58tSFC3dGRyuYkS++
uL/XKYC0tNi//nUKs4Q+KQYM8N6wYfo//5mzY0f+++/fl5QUSAU4dXVCCBUZHi6nHnanq3c/
srhYuWDBzps/KVasOOS0/v/UqdHvvTfp8cd3O6UAFi4cMnZs2JIlu+fMSfjznwcvWbI7KSmI
OimoDrx0afKf/zyEqpNKAcyaFf/kk8MXLNhJR1KeemovUgAAAAAAnUMKAHrGbndQo336/11v
/2axWBwOa8aMAT4+4t9+K/zhh4tUuZ+fZNOmtO+/zz16tJQQsn37lfz8tgvLnp6CpUuT2ewb
riF/913u2bNVhJB58waOHBn05ZeZ9O/74mJVu5GEkMBAqWtVtB9+uHj+fNtqfxIJ78knRyQk
+NIt7KazZyufeGIP/XDx4mEyGd/p0r1GY/7b387+5z+XnZ4bHe21dOlI9n+XYPv99xJmVc8/
n+x6IZ26uj59eoyHh+D48bLt269Q5T4+4o8/nvrzz3kHDxYRQmbOjEtLi/3pp0tffplJBQQE
SP/5z5ljx4b2dH7+Y48NHjcu7LPPzul0bePh0FCPb755KCkp6PTpCqokL6/x1VcPiEQ86uHM
mXHJyUFOUyEIIc8+mzRwoO+77x5jLhWh1ZqvXetwFP3YY4PHjw//8svMjIwerOmoUhn++tdT
//pXDo/Hfv75ZELIl19mMmcBtLQYKypaCSEKhWjp0mSplM9856ny996buGdPwS+/XCOEsNks
b2/xW29NyMqqoSKTkgKff77DrtW5kBCPpUuT7XaH00ErK9XUggUsFovDYT/66MCwMM/vv8/d
tOlcuycFIeTaNeXKlYfprSvDwz03b35w8+bMixfb0iXDhwcsXZpcXq52OpbrcpsjRgR89dWM
3Nx6OlIs7vFJIZPxn38+2ddXwjxcfLzPu+9OpPa5pLDZLC6X7dpD2GwWh8NisQibTYKCPNas
mXThQu2LL+5fujSZSivk5NRt2JDOfOfZbFZAgJSKZB508GC/N94Y9/nn5+6uW2kAAAAAbiek
AOBWEYt5IhHvxIny7Ow6qmTWrPj33puUnl5FpQCys+vofwoIkM6aFe9UA72ReFycd1yc92+/
FdFr9XcUSQiJj/d59NFBHbXq/PkaOgUQH+/z9NOJZrOtpymA0tIW5sXGUaOCk5ODnGJMJiv1
MpkSEny5XPaxY6VFRW0pjIKC5oKC6+Pz6dOj6Wn8TkQirkwmOH26kn6lf/pTzFtvjb94sZ5K
AQwZ4j95cuSWLTn0bggTJ4ZPmhQhEPT4NE9MDExJCf7ss3P0oDEtLXby5EiB4PqdGnV12h07
8umHERFy1zeBEDJ6dMiwYQEZGVVnz1ZRKz50QqEQDRvmP3iwn8PhOHCgqMt4Jr3ecvhwCSFE
KOSmpcUSQn766XK7ywGKxbwpU6KKipROn/ukSRGvvTamqEhFpQAIIWw2y9NTUF+voyKLi1UR
EfKKCnX3W0WJjVWkpASHhnqeOFHeeWcTi/kcDuvw4ZLCwmYvL1FIiEdTk/NcicZG3e7dV+mH
r76aOm/ewD17CugUQEiIx6OPDvr3vy8dPVqam1vXydKYfD7H21t86VLDL7+0bccYE6N45pme
nRQCAXfy5MimJv2qVYfpwueeS7r//sh2bwzpBIfDksuF1dWabdvyHnpogL+/1NtbnJVVy+dz
nnhiODOSzWZTkcx2btkyMykp8JtvLiAFAAAAANARpADgVvn118J33vkDv8WZliwZlpwctGrV
4V5sf3j4cMnrrx/u0fuZnl71+OO7P/vsAWrbwptx9GhpXl7D5s0P9uK5gwf7btqU9s47f3z+
+fnOIxMSfDZtSvvXv3I++eTMndBz1Grjhx+e/P33tlROVlbN00/vpWdGdN+8eQMfeihu1arD
7c7DZ9q+/conn5ymXrtabfzoo1M2Wy+3h1i8eFh0tNczz+yjVutoV3Z23Qsv/FpdrekooNd+
+OFSWZm6px2mvl63Zs3x06crqK0K09OrXnjhV5XKeN99EU6RTU1tkX3UXgAAAAB3gRQA3CoG
g6UXdxTfanPnJowbF0b9rVCIqHXjboP4eJ+FC4fqdOZ//COrpETV0faHnTAYLM3NPXs/TSab
yaTvk43xjEZrc7OhRwsKUn766TJ1P7+fn2TDhumEkN9/L92375pr5Pz5gzIza/75z+xjx8ro
O/b7l93uUKtN9OoVZrOtpx8BRSzmyWR8rdbcZfpAr7eoVEbm0V1joqK8Fi4c6uXVltYZMSLQ
KSAvr+HNN38XCLgCAWfZshQul93QoPvhh0uuuQDqFd2KrRN1OrNabexyF08nNptdrTZqtWYq
aWUyWZua9O3uNGmzOajIvmkuAAAAgNtACgDchaenMCpKnpoaQqcAhEIufUP1LRUZ6ZWSEjx2
bOjmzZnbtuXdhiPeOQ4dKj50qJgQ8soro6j5+TqdpbxcXVqqchq/xcQoGhp0hw+XVFX1/UXp
e0ZYmOfIkUFjxoR6e7dtGeDvL3GKKS1t2bw5kxAyeLDfhx/eHxgora/XUutBdDIjAAAAAADc
AVIA4C5GjAj4+OMp//lP3qJFu6iSyEivjz+e0vmz+sTSpckhIR6vv36ksLBny/LdS3766fLB
g8WEkDlzEjZsmL5q1WGnfeO+/Tb76tWmDz6Y/PXXF7Zsye6nZt7pFi8elpgY+OGHJxsadHTJ
M88kthtcXKxcvvwAj8cJDpYtX546YID3X/5y6jY2FgAAAADuOEgBgLuQSvmxsd5ms415H/6t
mALNNHiw36xZ8QaD5eDBosuXG3ox//9mDBzoO2tW/LBh/vX1upusKjExcNas+Lg4n9zcut7V
0NCgo0atdrsjOtpLLOY5BdTVabOyanbvvhoW5vH004l79hQ0Nt5ss+8Qx4+XOxzkoYcG+PiI
jxwpuZmq/P0lvr7iigo1vVYinQtwZTBY6b0z/P2lfn7O8wVunalTo+fOTVAoRJ3EREd7zZwZ
n5IS3Iv65XLh448P9/QUUmth3ozAQOnMmfE+PuKWFuOePVcrK1vbDZsyJSo1NYQQcuZMpetK
n5TISPnMmfFSKb+uTnsvdWAAAAC4lyAFAD3j4SGgftZ7e4tYLJavrzgiQk4IaW7W37r121pa
jA0NOm9vEXUsQohWa3ZdKb1zer2lokLN47HpSoKDZQIBx8NDEBrq2dSk62Th9F5gs1m+vuIp
U6LWrr1v+fKDx4+XMwdgLS3GPr/dvaXFWF+vUyiuv0upqSFPPjnC31/S0xSASmVsbjb4+Uno
FMm4cWFLlgzz8RH3NAXg4yN2utuCzWZVVbW2m3wpLW35619Pv/nm+PnzBxUXK3NybPSN8X3I
arXX1WlNJhv9RlHkcmFtrVat7vsjHjlSUlGh3rBhukTCLyq6YTdEvd7S2Kh3OLq75p9SaVCp
jAEB1zfb8/IScjgsf3+Jj4+YOilEIp6vr5i5m6Cfn6S52XAr3kxCiM3mqK/Xmc03vJ/TpkU9
/HCch4eALmltNVVVtcpkfDosKSlo8eJhkZHynm5aSQiRSvkPPxyn11sKCm7I6NXX63q6gGJw
sMcrr4yKj/cpK2vJyanrKAUwfXr0ypVjCCEffXSqoxRAdLTi9dfHBgRIc3Lq0tOrkAIAAACA
OxBSANAzM2YMePnlFEKIn5+Ex2MvX566ePEwQsjHH5/etetqV8/upW3b8goLlU89lRga6kGV
7N9fuHbtiR5Vkp1d+9RTe+fPH/TTT3OpEpGIFxXl5esrCQ6WrVlznN5Lr094eAjeeGPcjBkD
CCEvvjhy/vwb9in89tvsb7650IeHI4Ts2pVfVtayePGw8PC2NQ6zs+sWL9715pvje7o3248/
XiwsbF6xYjSdtjhzpvLxx3evWTOpp61aujSZWgKA9vvvpcuW/UZvi9ju0QsKmpYtG3X4cMkX
X3SxiUAvKJWGtWtPTJsWTfcESlGRcvXqPy5dqu/zIxJCqqpa33jj9xkzYp0OeuJE+Zo1xw2G
7k4P2bIl5+rV5tWrJ9AX2AMDpTKZ4I03xoWFeVInRWJiwJo1k5iZl4YG3bffXjh3rv09NW+S
RmP66KNT998fyXxpu3dfXb36KLPDHDpUXFmpXrhw6LJlo6iSq1ebVqw4+MwzSdHRXj09aGOj
fvXqo15eIuZBf/rp8uHDxRpNO2soAgAAAAAFKQDomfp6bWZmOwOJxsbr1+Sbmw0//5zHvDpH
KSlRff111uXLDa5P1+ste/YUdHRhvLKy1Wy2xcX51NdrqZLS0g53jFepDNu2XSkpUbqUGzMz
ayIj5ULh9W5/8mQ5IUSns7S79HpdnfaHHy6eP9/FwOnEifKyshanq8dWq72wUHngQPuzlGtq
2l/x7vDhEqmU73SFXK02bt9+xXU7+vJy9bffZufktF2Wr67WmM22uDhv+trjhQu11KVI5kXj
7igvVzscJC7Oh15q7vz5mjNnKn/44aLVarfb27nKev58DY/Hrq11fl2lpS1OHebcuers7Bum
EhQVKb/8MvPKlUb66DabIy7Op6qq/euxnbPZ7NTb3tFy9Gaz7cqVRrlc6DTyLCpSZmRU0Z0w
O7t2y5ac6uretMGVXm+5dKnez08cFCRzOqjdbieE1NZqvv8+t8vOVlbWwuGw4uO9XefY0yeF
Wm3Kzq4Tia738/p6XUZGNbML2e2OQ4eKBQKu0y4ParWx3dOnE1ar/erVJpmMHx/vQxdmZFSX
lbWEhHjQr6iuTqtWm+LifOjbYfLzmzIyquVyYVSUQqUynDtX43CQujotIcRksv36a6HJZKU6
m1NXJ4SYTNa8vEY+n0MnvKiD5uf3eLvNhgbdjz9e8veXKJUG1w5MO3OmctOmc4SQs2c7zBVW
Vqq3bMmRyfjV1ZrebR4BAAAAcKuxdvz849z5C/q7GXC3eJ6QgP5uA/TMli0zAwKkixbt6umt
EwB3prffnvDUUyMee2xH387cAQAAuMs1EPJFf7cB7gLs/m4AAAAAAAAAANwOuBEA4N4hlfJT
U0N8fMTMwoYGXUFBs9N8bwAAAAAAcENIAQDcO/z9pWvWTBo16oZd1p599pfvv8/t6TLpAAAA
AABw70EKAODe0dCg+8tfTvr63rD9+6lTFRj/w71k796Cq1ebiot7sGYhAAAAAFCQAgC4d2g0
pl9/LezvVgDcWhcv1l+8eEv2bgQAAAC452E5QAAAAAAAAAC3gBQAAAAAAAAAgFtACgAAAAAA
AADALSAFAAAAAAAAAOAWkAIAAAAAAAAAcAtIAQAAAAAAAAC4BaQAAAAAAAAAANwCUgAAAAAA
AAAAbgEpAAAAAAAAAAC3gBQAAAAAAAAAgFtACgAAAAAAAADALSAFAAAAAAAAAOAWkAIAAAAA
AAAAcAtIAQAAAAAAAAC4BaQAAAAAAAAAANwCUgAAAAAAAAAAbgEpAAAAAAAAAAC3gBQAAAAA
AAAAgFtACgAAAAAAAADALSAFAAAAAAAAAOAWkAIAAAAAAAAAcAtIAQAAAAAAAAC4BaQAAAAA
AAAAANwCUgAAAAAAAAAAbgEpAAAAAAAAAAC3gBQAAAAAAAAAgFtACgAAAAAAAADALSAFAAAA
AAAAAOAWkAIAAAAAAAAAcAtIAQAAAAAAAAC4BaQAAAAAAAAAANwCUgAAAAAAAAAAbgEpAAAA
AAAAAAC3gBQAAAAAAAAAgFtACgAAAAAAAADALSAFAAAAAAAAAOAWkAIAAAAAAAAAcAusRx55
pL/bAAAAAAAAAAC3HLdPavHw8AgODubxeH1SG9w5LBZLTU2NWq2mHoaFhSUkJPD5/P5tFfQ5
s9mcn59fUVHR3w0BAAAAAIBbqG9SACEhIVartbGx0WKxOByOPqkT+h2Hw/Hy8goMDKRTAPHx
8Ww222Qy2e12FovVv82DPsTlcuPj45ECAAAAAAC4t/VNCoDP5zc0NBiNRoz/7yV2u12pVIaG
htIlPB6PGv87HA6kAO4lNptNKBT2dysAAAAAAODW6psUACHEZrOxWCwMC+8xVquVmdZxOBw2
m40qQbrnXuJwOPCBAgAAAADc8/osBYDB/z3JKa3jcDioKQD92CS4RfCxAgAAAADc8/omBUAN
FNlsbDF4j7P/l1N59yeAsFgsJBHuTK4fKwAAAAAA3GP6MgXgOggcOnRoeHh4NyupqKjIzc2l
/qbvNm+3WmrSsusFatdCV47/oprNTFt0ftBOKuwkmHksFotFN5I+HBVGteTOnEnhOgvAm/7f
MAAAF5BJREFUdazI4XCmPzBVLBJbrR2O7blcFofDViqVfxw9YbFYut+Abn6ynaAaTNXAbDz1
N5vNprsB9aFQh6M+Eeol22w2KpLD4Tg1g4p3rYp+rxwOB/1Eun4quN0+7FpVlwGuze7Fu4S8
DAAAAADAPa/PbgQg7d0L4OfnN3Xq1O7MDrDZbPv27aNqsFqtRqPRYrGw2WyBQMDn85k1OBwO
q9VqsVi4XC6Px6P+iSq0Wq1c7v9v7zzDpCjyBl7Vobp7emZ2NhMWhAVUVBT0zBhRfAVfTkUB
E6BIFFHgkCAgonIkSQtI0EVFPEBRT1HAsBIEPEBQRHJcwgILGyZ1V1d3130oth03Hb7Ce9xe
/R4enqGm+l81Vc2Hf5YkSap0RZbHblkWIYRVLpAkCSEkSZIoitUvWilMoOu6lWqGbIJlWYZh
UEo1TUMIsQ2wmRhjpgkLgiBJkqqqiqJc4JEUVZkABEFISgq2bjMfgyioqExSAABQoP7Vsq7B
pCTwexzOruuyK5Mk6f9wPuyOWKFKdqdeOwNCiGEYAABd1/1+vyiKhJB4PG4Yhuu6oij6fD5V
VR3HicVipmm6rosQ8vl8Pp/Pu252xfF4PB6PJ4qilGKMY7EYxphSqqqqruuCIBiGYRiGbduC
IKiq6vf7EULVi/Leq6omVNx24g5/11n9rvkcDofD4XA4HA7nP45zFgUgCEJFvc6yLNd1+/Tp
gzGu+BTT5AkhsizPnz8fY8zcpKbpRK8eMrFzeiC+b9eM1985FfJWYV5ZwzCenjOoeMDLn5MU
WZbZoG3bHXIGo5EvfRBPBr91HTOxhJCYKQeu7tDhziuuSLYd24zt/ibvs1U/xHSEkGk6sWuq
XNRz4IMyTYnJjJFaze6qJa5ctdsOSpIEfuvtd103Ho+3nftBV/vNsX0/2Q5SLDu1zqjJr/39
ng6rUft3P+uqhSMEQgk6e5YszvlwLUlVFOVCiwU4mygABnaj17QMsfln/oIAQAAohBB8v+rU
9l921quXBcpMAImVBdgr5MVosDNkL5VhGDe+8OhFb8z6lNRi2nWiFz0xrKOiX9113Vgsdqj2
sNxbXhz5NxUAcCRrxFsthw3KpdJ9L/a9Ji07BMDsjqMKmiKEIhGrsOEjzzyYfTEiQnjDlgUL
lhZnGL4bWzxy270XB0KiA459s+79xd9E6uqBADNGuK6LMbbu7N/36lRPlKqqlmUVhv0prbr1
vjUlQwJqwYLF83ZuxtrJ7Ef6PZjdWCYQni7+Ztr7/yBWMFmW5apEaZqW6OqvOKHSbS+P1PH5
/aIo/q6L5iYADofD4XA4HA6nxnN+owAwxrbtRKPRQYMGbd26df/+/UzNcxyHEGJZFsbYNM1d
u3bZts3MBLZtR+L+S9o0JK+16rw9KRQKSZLJnO2eH9iyLEppOBwusQSEEPPkO47z2SuzlSLR
lmwmmfnnFUVRFMVxnIhd76pn+zx+avbb09+cVwxtqAeubN918Est3hwxe58vbKRcVvWisiyz
MAFP+2VqW6mV1rzdbeEvP9pkAqa9I4TYZEIIcwUDm5bIj/a47aNn8wzsYtcFhBCMKXSKNvZv
M2S37gh1rxz97rT2X6x6z0YIMflVBYEn2jU85fkcXmL1VGUCwBgDACmUYtiFEAAKyjRxCCGw
iH2qKAyA1KhxYwG6nhDmJ7csCwCgKIqmaZTSeDzOnOTeYWKMv5u+eGuJgDXMboGFe6iqyo6a
+dUhhD6fT9M0SZI8i4DjOLGYpLaQ7bXHCKlHiE9tIZPvjkJYF/y88O3PTqLnR79omuxtOSa1
fb6zjF977JlDweglA6f3at30la82oLCwaWrOnKMHowje8Vpuj4JDf/0hX1U9vR1CCH9e+Pan
J5goy7JEUQxHgNF6wMtZEyf237jTTQk2qFfLFoqc5g8/no7GP/z0di2W8tALk55vv/3F+ZbO
fmylohRF8Q654oSqtn3pmLw9svx7zUncBMDhcDgcDofD4dR4zm8UANPWbNtesWLFY489hhDK
y8uzbZvFwzNUVS0uLrYsyzRNCKHjOFk9hv+lqT914NuzTuS9N22v/dRfujWGoqTo4dXLp+Uu
LQ46jkNhUmr78X+9oX56yI4sHT3u06KITTsN70EHD1lQguzmPYc81byJYEJrx6a5k97Z43OA
X3342S5be7+w3CaiBEUguvHw5nnj99/Xf1T3m0bM3NZjUjWLfl6SZFlW99zx8Kt8vV4oWCs1
sGbkiEWFmd26tAol49Ezr8P5eXPzr3q5yS/P5awhSTG36d3jOl4+rterRRDSE+unfNu47zMt
10xZGkmi9NcqAGf+hhKSHFJsUSo5jmOLSHfjNlVYWAHDcRyMMVP5RFFkyQ7s2L1siPPE2UQB
YIxd1xEEwbQhgL8+ZRG7oLAkFscAAE1I3r1rV/36WYZhMBvQyXjWxR07dMk2LVvwm3nLZ3+3
MkzbjX3B//1JNQXJqaHUzZNmfxuJEbfN8K6hseM+KBFK6z3UpUOzFr44oab87WsvrfUX133w
ye6XX6HZIjxdtHzKez/pWNWIIPupQSTNdd0wvbRtgw15SxQAQQRcfF+DDSuXaKqq0hNHD8d8
9eGZ44UQxkMXN4kumXNEVn1KdM/qteix1umLtpZs3XVApaGMkBA+uHX7oQ4NQ3TtAcdhPnZK
qSRJ4omjh2OaJ8qyrEL76iduzv9u8IrN0XRdt+npwiJFgeT0kVKpIRKA7bgSUnHBkRikMmW6
faWiEo+60gmVbrtVyqJtsbSqMmKqgpsAOBwOh8PhcDicGs+5bApYRRQAYfnPpmmapllcXEzK
sG2b6ZOWZVkWYYkAkiTlzx6T02h0xxndRx3JVNSQmPtc92MlBnbE26Z+0uOSJaMPUkpdrcmd
8fY9njFP+W7vOn1s/+2dBvwoM697ib/dK/0ywiMe7LxbxVcMyx3+zO3PTFoC7hrSdOGs98yY
euX1Tz3dqZFlHdqyIxQ8NGbGrFXvzmox4+NpL01rMqHTzCoXJYQ4cuZlu3s+l4vC2l0D33iu
3ZcDps+d/XXLNsXD+i4xU+O+P18FACHEFV0WAkAIAQABALQj77666dM57d9eNssAZeqxK6Rc
N37pIkuSU5KTDueOHV8KkM+2bXXgWzP3PNLtU0mSJC9L3LZt65LHn2rf/JpMEv1p+YoVa9YV
ZtZr9WCHvWNz8tPOayBAORNAOb2UYRiG47hAkAwbQggogBCAmIFLIgalkqxKAABgiPUbXCRL
gmEYLJSjsG7XnKThfbv+XKIHA5n1MiTRMCKOXKfZvucGzA9GpCtvGf1yj51PvrBNo5TGYrEC
+FDfXnWDU54ccjAkaslBv3IS3tbjcevQiI4TCyRLv/mxqcM67R8883S6++y0cQeeGpKX4ThO
Scbtdxa+PiWu2YpdmnnHnYWvTzN12SdTSpkn3yuwpxVv3e5vfXv2sh93ms4Vt7UMJKWHHFAC
RFG0LAuTYNb9N2b/2G+B7WPn4P18VpYCJNSbiPoaNxGLttw18ZUbslLAsYKv5yxYb1Ky8e+T
spu/+veFlAD19L6pvd85lR7KcJgmX1EUK0NYTjMvN6GqbZMSUvHZ6uEdATgcDofD4XA4nBrP
+e0IgDG2LHL8+PGbbropNzd37dq1Xto2KItsN00TY0yIhTFmhfFYALOmaZqm2a6s3ND/lbuz
0oGJpdqh4BWE7AEACMYvX68uEYKZIWvrx+uCnf4UsDaEAQCO45CGd157fFL/fF8w5A/v+3Rh
ybAH65gLyVXZByfvt1Sp/Yv9o89071d4ssmAOWPVE8CM7S+VmweZL736RUW8c912qgUCLinY
Gq7VOskVigUWf66LuiVKwHPs/zZoX0WxQ/MXbZ4+5IFFo7d4ldvdoh+G/nnEgZAjpNXpOit3
4I+PTDmJEDIXjBuPZVbOzTMBAACuanFyz5TuMwoza7Vs3+npqY8Gjh5eOW/BAU2Q//9aCSRW
pE8kFotRlwqCbLoS24qBiUUESdG9OVAU9+3Z26RJ41gspus6pVQ9uXZtxgtDB6zYsHPX/h0H
802/bdsi3rH2Z6oEAgAfWrM52KcZMjeZrBJerGGrWwrHvnxAD6amIITicSda9+6bahU3HDy9
pSAAAEUFpYRcoVigH70xh/gppaYp6tdlKOsPlkh1LUtmn0vl+j7wm1gMVncgNfbFjFkPPN05
d7IWiez4bs3xy+53KEs0CEdFePfQKQ1nz51cGvPVVss88OynJYo649IHAlSb3RXrPGiAdTz1
gR6vvdr70BPPH7q/29Bmvsntn9gil9Z+dOjo8d0nDHvfSk5015cT5RVNqHStarbtdTHwLi6x
rGClLwyPAuBwOBwOh8PhcGo859cEYJpmLBY9fPjwqFGjCCEQwpycHPZVv379PD3ZsiyMzyQC
QAiZ9suqBkSy+kx6eOfCfi99WSyVpPd5f5JSuQIDy6XE/5owf2YcQgiB66LkJtbhD46YSlA4
uGpN4f/YNpWSdbEIM5d7NYsKggCoAwQZIYSpCIAgCZBFgzP9TYDABYC6rm3bhLiS8KtOhRBK
ji2buOKh93pelg9c7ycoihIIBFzX2Ld65+kxrVx3gSiKsGDXLigjJHpqoSAICKG9S74FIC0t
yTY2vzfnH/PmAIAQUhRd/v21338XZ5MIYBgGBRSKInYlQAEFlIqi/NtqdFQkderWEQRgGAar
cpca/fjNwV9lZGc3uezRzo+X7H5l4uxiGUBRAI7ruq4LgQiA+5sqjABAmtBsD0AoH543ddC6
k/5kWZYlSdL1WoqCnJN7d0MEoRt1m9x16c+rlsouhFE3+65Lf179ORJkGZRVo6QUsKwETdNU
VQjuW/D26Hg8Hj/l3PD8WwV7CyXbtsNRWb53yNQr588Zm7dbqRUQRcdxvKYS5UTZti2Kohw9
WIDRnnUnTaW2dnrl4j0d782WoqXXt4R5C7a5SsDvO5m3qKDdlIbOvK2YvfMVRbHWFdWsVc22
WUQM61UBygwWoiiyoxNFsWLvQG4C4HA4HA6Hw+FwajznLIec6c/lwBibJmZ5/izzv2fPnr16
9erVqxfGmI2wr1iiO9NYvLruEEJXTQ5Ed+8PC4IYqNP67mx0Rntxtctb35ZCo5GI3PyBmyMH
foiqqgoAQAihw99urNW5bZYRCUdxo3Ydk9atOu5Ti3ccanBdfTFatAtl3VDXR4h70a03p1E7
dOvjbXZ8vUVgddeqWZSpUlIZTKFCkht1/LqAMcYQH9tvXnRxyIpGY2bmjbdkuJ4CJkmS3y+Y
n7+9vMXw7o3ONG8HALB2bnETZd1wWVrxLlbHzm107bW1SOKRiqKIENI0zefz6boeDAZTUlJS
UlICgYCqquxAzh+VmgDKwbrrCYIkIl1UdEnxy2r5P1CQHcehAMbjcSbHDtS/SMg/tHHZx3Nn
zSu6qnmySQhxlKa33KhbRadP0cv/fF1J/pY4i3uXJEnNX7Eq7al2DaLFhYWFRYYsm+qh5SvT
eva4SZMcx3VFKevSbM0hhBhZVzYLReLxeGnaHfeEl/wjpjuOE8lodU94yYa4XxAEy7IikUg4
HHZdYBhGaWlpPB63iIBSNWQTC2Ze2qV32+PzPjqRFMd+pd3IKZe8NXrQ4jUlkBWwjMViuHbj
S6TT7L0tJwpj7Dc3fbK74Z+uCdF4LKq1aJMdO37QQuHd+7Qbb76IxCKRaPD6+7KKjx5zMcZW
nSZViYpGo9WvVem2PylMdhwnWqtpU73YMs2IoaJ69RqAItM0i+1amQ2CATPspeF4cBMAh8Ph
cDgcDodT4zmXtQAqDmKMMTZZM/NfC8SX4Xl3mSGAdQRgdeCFskr+oSPzphztM3xy60NF1Dr1
0wn7TJqAaO5dFRw2Mqd2RrIT/XzoxAMpug4EQfD5fOklyybMqDt4yAfzJFvGv2yaPGsNTQuR
7986OHpk67w+S0blPDt6TI4Z3bN+/c7b73u68YY3c5abyayVelWLqqoqlNWoF22R9XJXVTUg
7l/2jT5h3N/eiO3ZOH7SW/PvHTN85pgT4fjpY8dLIatyDyFUFEVV1VS8MXfxo/f3kkxF0TQN
SCktJnzxPoFAFMWjK5ZMXa+qyZRS9cHevfas6bHUYapvxRMWzmfxv+qpKgqAjSRrklVgVvWs
jiQoUAFC1sHecZxI5gM9+natA4kDAfxlwowDSaJoi+ber5VBA8fVTQ/Z5orh0/LTdR2wbIu0
8Nezc1J6PDl/sh4nbsxeNmrEmi/nvK4/+fg7OT1MAgR08ssv5+3ca0PQpkuXfd+s+lBSr2uY
9P3OQjHdtm32+ZRUS6GUEGK2n/HujZauATh06dz4zl+m5Lx1qpF2z+gJLYgEDOOnN+dO33EM
hWJpXUb8r18lPV9c0BNCKOENaya8+1GpVrf9U51XfDVwm04prShq3imQP2/Rp93enNLelWBR
4fKhUw9kZtJvps+9aMDzi2dLFhSKCpeOnHEkHQow/aFunVd8XamobZOn5RYGql+r4rYLlFRK
qdC2yxO78174Eplyo2ZPtL17Tq+R+Uok7Z77nyzcOXzeStfHowA4HA6Hw+FwOJz/NuDDDz/8
x6Vcf/31BQUFibnHDIxxx46d2rZtE4/Hq3nc5/N98cWyhQv/pigKq6LHOqvJsuw4DmsrwLqm
iaKoqiqrIMCqnTEFmz3IYrAFQSCEsAZ+giBomoYQchynmDT8U6/O9x+YNvPDzb+UUAqQr9Gt
bS/ds+1Hy9Z0tm41i0IIWS86r+cfc5KzWAb2oOu6zLnKoglYC0O2K4QQ85YTQpgFAWNMyBlv
vyzLqqoqisKKI7JnEzsC/BupXbv2pk2b2OeWLVsWFhZWvOjDhw/36t2znM2iUkzTnDN7bv36
9VnZPNYCEADAOjuWlpZ2nv5cYb8RXzipCCFmOmE3K0kSK8uX2BRQkiRCCMaYXRZCiBlrWNtI
Qsg1Iwc2mz5qYTydENL8xeebTR+12MxUVdW27Xg8zq6DWXN8Ph+7FIwxqxSoaZosy5ZlRaNR
dinsHn0+HwCg3LUmitJ1nW3MG/SMQawopuM4zMjFQlfYi1epKLarataqdNusCyarr4kQYlY2
Fr3COnTIlbUMTE9PX79+/Tl5ZzgcDofD4XA4HM6FyTmrBVDpOMYYIbRy5ap/KcG2CcaYqSUs
qdurC8BUay+IgH1gmqG3uiAIlFKmWjO1hzWZZ18xOcngwNaZ4/a3aHP/sG69dSgJprHvu415
cUcNMt1VluXqF/XkC4LgTWYqFihzznsecu8pryggAICF+rN/+ny+cj8BlnWGA/9WV381MO99
RRNAIBCYMX0mpS4AgBAiyxIrZgAAcFzXsizHdrzfFQolMwmyLAcCAe9AXNdlJ5yUlJRMk1mB
Rnaz3vugqio7cO8iWP1IdpJehgV7PSRJ+mnM1G1imixLgiCwzwiJnm3Ie4u8lAdRFNmb440w
W4x3U2wcAMB+jvdIRVHMqJG4VQCAz+djM71BSinLFqlK1NmsVW7b7CtmX2BLMBtW4n+uiqEc
PAqAw+FwOBwOh8Op8ZwzPzPTNMoNiqI0Y8b0s1EtIIR+v/8c6r1MrUrcniiKsmzjbR8u3EJY
dTRZlhFKQgr6I+uWe7bcutVMrn7mhUOltQDKzdF1Xdd1AIDruidPnbjjzjuuu/b6zIxMSumJ
E8fXrlu7dt3ajNRMIaHuvSfck8/MIh8MmiPLaQjJ5UwqXi+JxEfYt4kjiVYVFjgAy/DU4IpP
efLLiUo07iTO9D5XI6rSrVY1WI2os1mr0m2XWyJxvNycimtxOBwOh8PhcDicGsn57QgQDAaC
wcA5WeKPk+iYLeeb5VRDRYWz+gbyaSnpq75dvXrVGgrKwigoTEtOB2fRed5T2s9m8lnyL1Vf
DoOfDIfD4XA4HA6HU+M5l+UAK5oALkD+U3zvFyZVRQGUIyU5peLg2av0XFH/t3CubC4cDofD
4XA4HA7nguX8RgFwagBnkwjAqQFwswuHw+FwOBwOh1Pj+a+LAuD8EbgJoAbDTQAcDofD4XA4
HE6N55xFAaSlpZ0TUZwLjcTUCUppeno6t/XUSPi1cjgcDofD4XA4NZ5/Ak7oDKfdrmA+AAAA
AElFTkSuQmCC
--------------050804050700040807000507
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
--------------050804050700040807000507--


From win-pv-devel-bounces@lists.xenproject.org Fri Oct 17 09:38:39 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 17 Oct 2014 09:38:39 +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 1Xf3zZ-00024B-Il; Fri, 17 Oct 2014 09:38:37 +0000
Received: from mail6.bemta4.messagelabs.com ([85.158.143.247])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1Xf3zX-000246-Ha
	for win-pv-devel@lists.xenproject.org; Fri, 17 Oct 2014 09:38:36 +0000
Received: from [85.158.143.35] by server-2.bemta-4.messagelabs.com id
	02/DB-10419-A93E0445; Fri, 17 Oct 2014 09:38:34 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-15.tower-21.messagelabs.com!1413538713!12271813!1
X-Originating-IP: [74.125.82.51]
X-SpamReason: No, hits=1.7 required=7.0 tests=BIZ_TLD
X-StarScan-Received: 
X-StarScan-Version: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 6034 invoked from network); 17 Oct 2014 09:38:33 -0000
Received: from mail-wg0-f51.google.com (HELO mail-wg0-f51.google.com)
	(74.125.82.51)
	by server-15.tower-21.messagelabs.com with RC4-SHA encrypted SMTP;
	17 Oct 2014 09:38:33 -0000
Received: by mail-wg0-f51.google.com with SMTP id b13so484005wgh.34
	for <win-pv-devel@lists.xenproject.org>;
	Fri, 17 Oct 2014 02:38:32 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:message-id:date:from:user-agent:mime-version:to
	:subject:references:in-reply-to:content-type;
	bh=QuNocfz5LG0OGxrXPa+6R5AmfcZqW6GP3PjKyHLHe8Q=;
	b=X7SM6CIyRZNuDRvtNJ023aGZzrq1yaMjxGriBezJts4Jl7QvfGYBGUrkT2mg47HboZ
	8ZbR2AS3I/kpJY47T/taR5d5ao7eRpMhQO/X10M7g3ttwso9dYCATUca0SqlebOaiqcH
	C6lxzmT7cVi2VbEbsaJ8pqAghtOFSwWnjrDPPHBmLmblSxbNgBYHmZFA8PWJup3hM0w0
	YPouKpEsNv9Un2TpI+8dQBUi0b72qCynvUjiIXfsazAuO/3T3a58bRq+V24QqOIAn3Ht
	riRZB9FFooFnZvDc5yx5FzfO3zJK4hI/QlTrwnL8qwmXBzf9eoW9KreUD290mZp/SsW8
	bnBQ==
X-Gm-Message-State: ALoCoQmUhk2vMf3OBQvPM2EXHyAeRhn6m7VhO72PYdiVEphj3+UdEwEjdb8pORzxaQOnA0EjXFl7
X-Received: by 10.180.80.39 with SMTP id o7mr27355905wix.82.1413538712681;
	Fri, 17 Oct 2014 02:38:32 -0700 (PDT)
Received: from [192.168.1.15] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by mx.google.com with ESMTPSA id cz3sm1016423wjb.23.2014.10.17.02.38.24
	for <multiple recipients>
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Fri, 17 Oct 2014 02:38:31 -0700 (PDT)
Message-ID: <5440E39B.6080104@m2r.biz>
Date: Fri, 17 Oct 2014 11:38:35 +0200
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64;
	rv:24.0) Gecko/20100101 Thunderbird/24.6.0
MIME-Version: 1.0
To: Paul Durrant <Paul.Durrant@citrix.com>, 
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <543F887B.5030500@m2r.biz>	<9AAE0902D5BC7E449B7C8E4E778ABCD0111050FF@AMSPEX01CL01.citrite.net>	<543F912C.8000504@m2r.biz>	<9AAE0902D5BC7E449B7C8E4E778ABCD01110526F@AMSPEX01CL01.citrite.net>	<543FA4F6.5090804@m2r.biz>	<9AAE0902D5BC7E449B7C8E4E778ABCD0111053EA@AMSPEX01CL01.citrite.net>	<543FCA93.2010805@m2r.biz>	<9AAE0902D5BC7E449B7C8E4E778ABCD0111057A2@AMSPEX01CL01.citrite.net>	<543FDA2D.2090900@m2r.biz>	<9AAE0902D5BC7E449B7C8E4E778ABCD0111058E6@AMSPEX01CL01.citrite.net>
	<543FDE85.1030908@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD011105A08@AMSPEX01CL01.citrite.net>
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD011105A08@AMSPEX01CL01.citrite.net>
Content-Type: multipart/mixed; boundary="------------050804050700040807000507"
Subject: Re: [win-pv-devel] Blue screen on xenvif install
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.
--------------050804050700040807000507
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

Il 16/10/2014 17:58, Paul Durrant ha scritto:
>> -----Original Message-----
>> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
>> bounces@lists.xenproject.org] On Behalf Of Fabio Fantoni
>> Sent: 16 October 2014 16:05
>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>> Subject: Re: [win-pv-devel] Blue screen on xenvif install
>>
>> Il 16/10/2014 16:54, Paul Durrant ha scritto:
>>>> -----Original Message-----
>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>> Sent: 16 October 2014 15:46
>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>>>> Subject: Re: Blue screen on xenvif install
>>>>
>>>> Il 16/10/2014 15:45, Paul Durrant ha scritto:
>>>>>> -----Original Message-----
>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>>>> Sent: 16 October 2014 14:40
>>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>>>>>> Subject: Re: Blue screen on xenvif install
>>>>>>
>>>>>> Il 16/10/2014 13:04, Paul Durrant ha scritto:
>>>>>>>> -----Original Message-----
>>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>>>>>> Sent: 16 October 2014 11:59
>>>>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>>>>>>>> Subject: Re: Blue screen on xenvif install
>>>>>>>>
>>>>>>>> Il 16/10/2014 12:00, Paul Durrant ha scritto:
>>>>>>>>>> -----Original Message-----
>>>>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>>>>>>>> Sent: 16 October 2014 10:35
>>>>>>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>>>>>>>>>> Subject: Re: Blue screen on xenvif install
>>>>>>>>>>
>>>>>>>>>> Il 16/10/2014 10:59, Paul Durrant ha scritto:
>>>>>>>>>>>> -----Original Message-----
>>>>>>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>>>>>>>>>> Sent: 16 October 2014 09:58
>>>>>>>>>>>> To: win-pv-devel@lists.xenproject.org
>>>>>>>>>>>> Cc: Paul Durrant
>>>>>>>>>>>> Subject: Blue screen on xenvif install
>>>>>>>>>>>>
>>>>>>>>>>>> Today I tried to install new winpv driver to other 3 windows 7
>> pro
>>>> 64
>>>>>>>>>>>> bit domUs.
>>>>>>>>>>>> Days ago I installed them successful on one windows 7 pro 64
>> bit
>>>> and
>>>>>>>> one
>>>>>>>>>>>> windows 8.1 enterprise 64 bit.
>>>>>>>>>>>> On first domUs I tried to install them today I installed xenbus
>> and
>>>>>>>>>>>> xenvbd successful but on xenvif install windows crashed with
>> blue
>>>>>>>>>>>> screen, if I saw it correctly was an kernel in-page error or
>>>> something
>>>>>>>>>>>> similar.
>>>>>>>>>>>> After reboot I retried to install xenvif but now always fails.
>>>>>>>>>>>>
>>>>>>>>>>> Sounds odd. Do you have a MEMORY.DMP?
>>>>>>>>>>>
>>>>>>>>>>>         Paul
>>>>>>>>>> Windows is setted to write dump of kernel memory on system
>> error
>>>>>> but
>>>>>>>>>> %systemroot%\memory.dmp is missed :(
>>>>>>>>>> I also checked the windows events log but I found only kernel-
>>>> power
>>>>>> as
>>>>>>>>>> critical that seems not contains useful data.
>>>>>>>>>>
>>>>>>>>>> I found probably useful data in xl dmesg (I copied all below from
>>>> domU
>>>>>>>>>> start to xen bug):
>>>>>>>>>>> (d98) HVM Loader
>>>>>>>>>>> (d98) Detected Xen v4.5-unstable
>>>>>>>>>>> (d98) Xenbus rings @0xfeffc000, event channel 1
>>>>>>>>>>> (d98) System requested SeaBIOS
>>>>>>>>>>> (d98) CPU speed is 2660 MHz
>>>>>>>>>>> (d98) Relocating guest memory for lowmem MMIO space
>> disabled
>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 0 changed 0 -> 5
>>>>>>>>>>> (d98) PCI-ISA link 0 routed to IRQ5
>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 1 changed 0 -> 10
>>>>>>>>>>> (d98) PCI-ISA link 1 routed to IRQ10
>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 2 changed 0 -> 11
>>>>>>>>>>> (d98) PCI-ISA link 2 routed to IRQ11
>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 3 changed 0 -> 5
>>>>>>>>>>> (d98) PCI-ISA link 3 routed to IRQ5
>>>>>>>>>>> (d98) pci dev 01:3 INTA->IRQ10
>>>>>>>>>>> (d98) pci dev 02:0 INTA->IRQ11
>>>>>>>>>>> (d98) pci dev 03:0 INTA->IRQ5
>>>>>>>>>>> (d98) pci dev 04:0 INTA->IRQ5
>>>>>>>>>>> (d98) pci dev 05:0 INTA->IRQ10
>>>>>>>>>>> (d98) pci dev 06:0 INTA->IRQ11
>>>>>>>>>>> (d98) pci dev 1d:0 INTA->IRQ10
>>>>>>>>>>> (d98) pci dev 1d:1 INTB->IRQ11
>>>>>>>>>>> (d98) pci dev 1d:2 INTC->IRQ5
>>>>>>>>>>> (d98) pci dev 1d:7 INTD->IRQ5
>>>>>>>>>>> (d98) No RAM in high memory; setting high_mem resource base
>> to
>>>>>>>>>> 100000000
>>>>>>>>>>> (d98) pci dev 05:0 bar 10 size 004000000: 0f0000000
>>>>>>>>>>> (d98) pci dev 05:0 bar 14 size 004000000: 0f4000000
>>>>>>>>>>> (d98) pci dev 02:0 bar 14 size 001000000: 0f8000008
>>>>>>>>>>> (d98) pci dev 06:0 bar 30 size 000040000: 0f9000000
>>>>>>>>>>> (d98) pci dev 05:0 bar 30 size 000010000: 0f9040000
>>>>>>>>>>> (d98) pci dev 03:0 bar 10 size 000004000: 0f9050000
>>>>>>>>>>> (d98) pci dev 05:0 bar 18 size 000002000: 0f9054000
>>>>>>>>>>> (d98) pci dev 04:0 bar 14 size 000001000: 0f9056000
>>>>>>>>>>> (d98) pci dev 1d:7 bar 10 size 000001000: 0f9057000
>>>>>>>>>>> (d98) pci dev 02:0 bar 10 size 000000100: 00000c001
>>>>>>>>>>> (d98) pci dev 06:0 bar 10 size 000000100: 00000c101
>>>>>>>>>>> (d98) pci dev 06:0 bar 14 size 000000100: 0f9058000
>>>>>>>>>>> (d98) pci dev 04:0 bar 10 size 000000020: 00000c201
>>>>>>>>>>> (d98) pci dev 05:0 bar 1c size 000000020: 00000c221
>>>>>>>>>>> (d98) pci dev 1d:0 bar 20 size 000000020: 00000c241
>>>>>>>>>>> (d98) pci dev 1d:1 bar 20 size 000000020: 00000c261
>>>>>>>>>>> (d98) pci dev 1d:2 bar 20 size 000000020: 00000c281
>>>>>>>>>>> (d98) pci dev 01:1 bar 20 size 000000010: 00000c2a1
>>>>>>>>>>> (d98) Multiprocessor initialisation:
>>>>>>>>>>> (d98)  - CPU0 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8] ...
>>>>>>>>>>> done.
>>>>>>>>>>> (d98)  - CPU1 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8] ...
>>>>>>>>>>> done.
>>>>>>>>>>> (d98) Testing HVM environment:
>>>>>>>>>>> (d98)  - REP INSB across page boundaries ... passed
>>>>>>>>>>> (d98)  - GS base MSRs and SWAPGS ... passed
>>>>>>>>>>> (d98) Passed 2 of 2 tests
>>>>>>>>>>> (d98) Writing SMBIOS tables ...
>>>>>>>>>>> (d98) Loading SeaBIOS ...
>>>>>>>>>>> (d98) Creating MP tables ...
>>>>>>>>>>> (d98) Loading ACPI ...
>>>>>>>>>>> (d98) S3 disabled
>>>>>>>>>>> (d98) S4 disabled
>>>>>>>>>>> (d98) vm86 TSS at fc00a100
>>>>>>>>>>> (d98) BIOS map:
>>>>>>>>>>> (d98)  10000-100d3: Scratch space
>>>>>>>>>>> (d98)  c0000-fffff: Main BIOS
>>>>>>>>>>> (d98) E820 table:
>>>>>>>>>>> (d98)  [00]: 00000000:00000000 - 00000000:000a0000: RAM
>>>>>>>>>>> (d98)  HOLE: 00000000:000a0000 - 00000000:000c0000
>>>>>>>>>>> (d98)  [01]: 00000000:000c0000 - 00000000:00100000: RESERVED
>>>>>>>>>>> (d98)  [02]: 00000000:00100000 - 00000000:78000000: RAM
>>>>>>>>>>> (d98)  HOLE: 00000000:78000000 - 00000000:fc000000
>>>>>>>>>>> (d98)  [03]: 00000000:fc000000 - 00000001:00000000: RESERVED
>>>>>>>>>>> (d98) Invoking SeaBIOS ...
>>>>>>>>>>> (d98) SeaBIOS (version
>>>>>>>>>>> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
>>>>>>>>>>> (d98)
>>>>>>>>>>> (d98) Found Xen hypervisor signature at 40000100
>>>>>>>>>>> (d98) Running on QEMU (i440fx)
>>>>>>>>>>> (d98) xen: copy e820...
>>>>>>>>>>> (d98) Relocating init from 0x000df619 to 0x77fae600 (size 71995)
>>>>>>>>>>> (d98) CPU Mhz=2660
>>>>>>>>>>> (d98) Found 13 PCI devices (max PCI bus is 00)
>>>>>>>>>>> (d98) Allocated Xen hypercall page at 77fff000
>>>>>>>>>>> (d98) Detected Xen v4.5-unstable
>>>>>>>>>>> (d98) xen: copy BIOS tables...
>>>>>>>>>>> (d98) Copying SMBIOS entry point from 0x00010010 to
>> 0x000f0f40
>>>>>>>>>>> (d98) Copying MPTABLE from 0xfc001170/fc001180 to 0x000f0e40
>>>>>>>>>>> (d98) Copying PIR from 0x00010030 to 0x000f0dc0
>>>>>>>>>>> (d98) Copying ACPI RSDP from 0x000100b0 to 0x000f0d90
>>>>>>>>>>> (d98) Using pmtimer, ioport 0xb008
>>>>>>>>>>> (d98) Scan for VGA option rom
>>>>>>>>>>> (d98) Running option rom at c000:0003
>>>>>>>>>>> (XEN) stdvga.c:147:d98v0 entering stdvga and caching modes
>>>>>>>>>>> (d98) pmm call arg1=0
>>>>>>>>>>> (d98) Turning on vga text mode console
>>>>>>>>>>> (d98) SeaBIOS (version
>>>>>>>>>>> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
>>>>>>>>>>> (d98) Machine UUID f4cdeb74-0db1-4748-948d-42579a494120
>>>>>>>>>>> (d98) EHCI init on dev 00:1d.7 (regs=0xf9057020)
>>>>>>>>>>> (d98) Found 0 lpt ports
>>>>>>>>>>> (d98) Found 0 serial ports
>>>>>>>>>>> (d98) ATA controller 1 at 1f0/3f4/0 (irq 14 dev 9)
>>>>>>>>>>> (d98) ATA controller 2 at 170/374/0 (irq 15 dev 9)
>>>>>>>>>>> (d98) ata0-0: QEMU HARDDISK ATA-7 Hard-Disk (40720 MiBytes)
>>>>>>>>>>> (d98) Searching bootorder for:
>> /pci@i0cf8/*@1,1/drive@0/disk@0
>>>>>>>>>>> (d98) DVD/CD [ata0-1: QEMU DVD-ROM ATAPI-4 DVD/CD]
>>>>>>>>>>> (d98) Searching bootorder for:
>> /pci@i0cf8/*@1,1/drive@0/disk@1
>>>>>>>>>>> (d98) UHCI init on dev 00:1d.0 (io=c240)
>>>>>>>>>>> (d98) UHCI init on dev 00:1d.1 (io=c260)
>>>>>>>>>>> (d98) UHCI init on dev 00:1d.2 (io=c280)
>>>>>>>>>>> (d98) PS2 keyboard initialized
>>>>>>>>>>> (d98) All threads complete.
>>>>>>>>>>> (d98) Scan for option roms
>>>>>>>>>>> (d98) Running option rom at c980:0003
>>>>>>>>>>> (d98) pmm call arg1=1
>>>>>>>>>>> (d98) pmm call arg1=0
>>>>>>>>>>> (d98) pmm call arg1=1
>>>>>>>>>>> (d98) pmm call arg1=0
>>>>>>>>>>> (d98) Searching bootorder for: /pci@i0cf8/*@6
>>>>>>>>>>> (d98)
>>>>>>>>>>> (d98) Press F12 for boot menu.
>>>>>>>>>>> (d98)
>>>>>>>>>>> (d98) Searching bootorder for: HALT
>>>>>>>>>>> (d98) drive 0x000f0d40: PCHS=16383/16/63 translation=lba
>>>>>>>>>>> LCHS=1024/255/63 s=83394560
>>>>>>>>>>> (d98) Space available for UMB: ca800-ee800, f0000-f0ce0
>>>>>>>>>>> (d98) Returned 258048 bytes of ZoneHigh
>>>>>>>>>>> (d98) e820 map has 6 items:
>>>>>>>>>>> (d98)   0: 0000000000000000 - 000000000009fc00 = 1 RAM
>>>>>>>>>>> (d98)   1: 000000000009fc00 - 00000000000a0000 = 2 RESERVED
>>>>>>>>>>> (d98)   2: 00000000000f0000 - 0000000000100000 = 2 RESERVED
>>>>>>>>>>> (d98)   3: 0000000000100000 - 0000000077fff000 = 1 RAM
>>>>>>>>>>> (d98)   4: 0000000077fff000 - 0000000078000000 = 2 RESERVED
>>>>>>>>>>> (d98)   5: 00000000fc000000 - 0000000100000000 = 2 RESERVED
>>>>>>>>>>> (d98) enter handle_19:
>>>>>>>>>>> (d98)   NULL
>>>>>>>>>>> (d98) Booting from Hard Disk...
>>>>>>>>>>> (d98) Booting from 0000:7c00
>>>>>>>>>>> (XEN) d98: VIRIDIAN GUEST_OS_ID: vendor: 1 os: 4 major: 6
>> minor:
>>>> 1
>>>>>> sp:
>>>>>>>>>>> 1 build: 1db1
>>>>>>>>>>> (XEN) d98: VIRIDIAN HYPERCALL: enabled: 1 pfn: 3ffff
>>>>>>>>>>> (XEN) d98v0: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffe
>>>>>>>>>>> (XEN) d98v1: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffd
>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 0 changed 5 -> 0
>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 1 changed 10 -> 0
>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 2 changed 11 -> 0
>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 3 changed 5 -> 0
>>>>>>>>>>> (XEN) irq.c:380: Dom98 callback via changed to GSI 24
>>>>>>>>>>> (d98) XEN|BUGCHECK: ====>
>>>>>>>>>>> (d98) XEN|BUGCHECK: 0000007A: FFFFF6FC000171C8
>>>>>> FFFFFFFFC0000185
>>>>>>>>>>> 000000001BD6A860 FFFF
>>>>>>>>>>> (d98) F80002E39000
>>>>>>>>>>> (d98) XEN|BUGCHECK: CONTEXT (FFFFF8800310E530):
>>>>>>>>>>> (d98) XEN|BUGCHECK: - GS = 002B
>>>>>>>>>>> (d98) XEN|BUGCHECK: - FS = 0053
>>>>>>>>>>> (d98) XEN|BUGCHECK: - ES = 002B
>>>>>>>>>>> (d98) XEN|BUGCHECK: - DS = 002B
>>>>>>>>>>> (d98) XEN|BUGCHECK: - SS = 0018
>>>>>>>>>>> (d98) XEN|BUGCHECK: - CS = 0010
>>>>>>>>>>> (d98) XEN|BUGCHECK: - EFLAGS = 00000086
>>>>>>>>>>> (d98) XEN|BUGCHECK: - RDI = 00000000000171C8
>>>>>>>>>>> (d98) XEN|BUGCHECK: - RSI = 00000000C0000185
>>>>>>>>>>> (d98) XEN|BUGCHECK: - RBX = 00000000038AC8F8
>>>>>>>>>>> (d98) XEN|BUGCHECK: - RDX = 0000000000000000
>>>>>>>>>>> (d98) XEN|BUGCHECK: - RCX = 000000000310E530
>>>>>>>>>>> (d98) XEN|BUGCHECK: - RAX = 000000002ECF4722
>>>>>>>>>>> (d98) XEN|BUGCHECK: - RBP = 000000001BD6A860
>>>>>>>>>>> (d98) XEN|BUGCHECK: - RIP = 00000000038A2A43
>>>>>>>>>>> (d98) XEN|BUGCHECK: - RSP = 000000000310E510
>>>>>>>>>>> (d98) XEN|BUGCHECK: - R8 = 0000000000000000
>>>>>>>>>>> (d98) XEN|BUGCHECK: - R9 = 0000000000000000
>>>>>>>>>>> (d98) XEN|BUGCHECK: - R10 = 0000000000000000
>>>>>>>>>>> (d98) XEN|BUGCHECK: - R11 = 0000000000000000
>>>>>>>>>>> (d98) XEN|BUGCHECK: - R12 = 000000000000007A
>>>>>>>>>>> (d98) XEN|BUGCHECK: - R13 = 0000000000000001
>>>>>>>>>>> (d98) XEN|BUGCHECK: - R14 = 0000000002E39000
>>>>>>>>>>> (d98) XEN|BUGCHECK: - R15 = 0000000002CBAC40
>>>>>>>>>>> (d98) XEN|BUGCHECK: STACK:
>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310EA20: (0000000000000003
>>>>>>>>>>> 00000000038A50F0 00000000038A
>>>>>>>>>>> (d98) 4860 000000000000007A) xen.sys + 00000000000049AC
>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310EA70: (00000000038AD0D0
>>>>>>>>>>> 0000000000000000 000000000000
>>>>>>>>>>> (d98) 0004 0000000002C83500) ntoskrnl.exe + 0000000000128585
>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310EAA0: (00000000038AD0D0
>>>>>>>>>>> 0000000002C83500 000000000000
>>>>>>>>>>> (d98) 000F 0000000001780660) ntoskrnl.exe + 0000000000167C0D
>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F170: (0000000003816470
>>>>>>>>>>> 0000000002B4C8C1 000000000000
>>>>>>>>>>> (d98) 00FE 0000000000000000) ntoskrnl.exe + 0000000000075CC4
>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F1B0: (000000000000007A
>>>>>>>>>>> 00000000000171C8 00000000C000
>>>>>>>>>>> (d98) 0185 000000001BD6A860) ntoskrnl.exe + 00000000000E8752
>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F290: (00000000038163B0
>>>>>>>>>>> 000000000310F320 0000000002CB
>>>>>>>>>>> (d98) D540 00000000038163B0) ntoskrnl.exe + 000000000009C91F
>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F360: (0000000000000000
>>>>>>>>>>> 0000000000000008 00000000FFFF
>>>>>>>>>>> (d98) FFFF 00000000003500F0) ntoskrnl.exe + 00000000000831B9
>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F4C0: (0000000000000008
>>>>>>>>>>> 0000000002E39000 000000000000
>>>>>>>>>>> (d98) 0000 0000000000000000) ntoskrnl.exe + 0000000000073CEE
>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F658: (0000000002E5CFD5
>>>>>>>>>>> 0000000000000000 0000000003EB
>>>>>>>>>>> (d98) 8710 00000000FFFFFFFF) ntoskrnl.exe + 000000000042C000
>>>>>>>>>> If you need more tests/informations tell me and I'll post them.
>>>>>>>>>> Thanks for any reply and sorry for my bad english.
>>>>>>>>> Well, that tells me you had a 7A BSOD, which is a
>>>>>>>> KERNEL_DATA_INPAGE_ERROR. The error status (param 2) was
>>>> C0000185
>>>>>> so
>>>>>>>> that's a STATUS_IO_DEVICE_ERROR. The documentation at
>>>>>>>> http://msdn.microsoft.com/en-
>>>>>>>> gb/library/windows/hardware/ff559211%28v=vs.85%29.aspx tells
>> me
>>>> that
>>>>>>>> this means:
>>>>>>>>> "improper termination or defective cabling on SCSI devices or that
>>>> two
>>>>>>>> devices are trying to use the same IRQ."
>>>>>>>>> But you said you had xenvbd already installed so you'll be using a
>> PV
>>>>>>>> storage path. Is there any indication of problems with your storage?
>>>>>>>>>        Paul
>>>>>>>> DomUs disk are all raw files in local dom0 disks, raid1 with "LSI Logic
>>>>>>>> / Symbios Logic SAS2008 PCI-Express Fusion-MPT SAS-2" dom0
>>>> partitions
>>>>>>>> are GTP and fs ext4.
>>>>>>>> Dom0 is wheezy with kernel is linux-image-3.16-0.bpo.2-amd64
>> version
>>>>>>>> 3.16.3-2~bpo70+1
>>>>>>>> No kern or syslog errors, only many of these warning that someone
>>>>>>>> replied me that should not be a problem:
>>>>>>>> Oct 15 10:45:13 mtorMN01OU kernel: [773197.117518] xen:balloon:
>>>>>>>> reserve_additional_memory: add_memory() failed: -17
>>>>>>>> DomU now see disk as xen pvdisk, on xenvif install probably still was
>>>>>>>> full emulated disk even if xenvbd was installed successful before
>> xenvif
>>>>>>>> install (failed with BSOD)
>>>>>>>> The IRQ seems visible from xl dmesg output below, can you check
>>>> them is
>>>>>>>> have something wrong or strange, I see some of them "duplicate"
>> but I
>>>>>>>> not know if is correct.
>>>>>>>>
>>>>>>>> DomU xl cfg:
>>>>>>>>> name='office1_w7'
>>>>>>>>> builder="hvm"
>>>>>>>>> memory=2048
>>>>>>>>> vcpus=2
>>>>>>>>> acpi_s3=0
>>>>>>>>> acpi_s4=0
>>>>>>>>> vif=['bridge=xenbr0,mac=00:16:3e:41:ae:8b']
>>>>>>>>>
>> disk=['/mnt/vm/disks/office1_w7.disk1.xm,raw,hda,rw',',raw,hdb,ro,cdrom'
>>>>>>>> ]
>>>>>>>>> boot='c'
>>>>>>>>> device_model_version="qemu-xen"
>>>>>>>>> viridian=1
>>>>>>>>> vnc=0
>>>>>>>>> keymap="it"
>>>>>>>>> on_crash="destroy"
>>>>>>>>> vga="qxl"
>>>>>>>>> spice=1
>>>>>>>>> spicehost='0.0.0.0'
>>>>>>>>> spiceport=6001
>>>>>>>>> spicedisable_ticketing=0
>>>>>>>>> spicepasswd="password"
>>>>>>>>> spicevdagent=1
>>>>>>>>> spice_clipboard_sharing=0
>>>>>>>>> spiceusbredirection=4
>>>>>>>>> soundhw="hda"
>>>>>>>>> localtime=1
>>>>>>>> If you need more tests/informations tell me and I'll post them.
>>>>>>>>
>>>>>>> Do you have the qemu log (with xen platform logging enabled). This is
>>>>>> where the PV drivers log failures/warnings.
>>>>>>>       Paul
>>>>>>>
>>>>>>>
>>>>>> I retried enabling xen platform debug in qemu trace but no add lines in
>>>>>> log when I try to install xenvif and fails.
>>>>>> I attach anyway the log if can be useful.
>>>>> All I can see there is an apparently clean shutdown of domain 101; no
>> sign
>>>> of XENVIF and no sign of a BSOD.
>>>>>> I'll also try to restore the backup of this night of the domU when I had
>>>>>> the BSOD trying reproduce it with xen debug in qemu trace and
>> different
>>>>>> windows memory dump options.
>>>>> Ok.
>>>>>
>>>>>      Paul
>>>>>
>>>> Reproduced it but now with xen platform trace enabled in qemu. (see
>>>> attachment)
>>>> Dump of memory instead is not present also in this case (probably
>>>> because disk is "failed").
>>> You're using emulate disk in this case. Did your BSOD not indicate that it
>> was dumping?
>>>     Paul
>>>
>> I have to time to see if do a dump but I suppose it can't write to disk
>> since its driver fails.
>> Log qemu is not enough? You need the windows memory dump to find and
>> fix
>> the bug?
> I don't know what the bug is. My guess is that it's a deadlock somewhere which is causing Windows to believe there's a storage issue, but since the stack is entirely in the kernel and without a crashdump I cannot decode to symbols there's not much more I can do unless I happen to repro.
>
>    Paul
>
>> If needed tomorrow I'll do other tests.
I retried and seems always reproducible on same domU.
Now I disabled automatic reboot on crash and do a screenshot (in 
attachment) but memory dump is still missed :( Probably with disk 
"failed" can't write.
Is there another way to take/save the memory dump or the data you need?

About IRQ you checked in xl dmesg I posted if are all ok?

Thanks for any reply and sorry for my bad english.

--------------050804050700040807000507
Content-Type: image/png;
 name="bluescreen.png"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="bluescreen.png"

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
G0g8CVZWHDqd+vXXsz/55Ao23PTP6dChgspK8YcfRjs4mJHeOnKk+M03B59gf8R1d6u2br0W
F+dHPJ+Wlmwmk/bll09t3Xrtq6+yjNxVv0V948b0Gzeav/56aAXGsKhTqRQej6PT6Q8dWpCY
OISiXlgoXL369L//PcHwquntVa9Zcxpb/dsY1683JySkrF8flZgYSdyelHR7zZrTI1518Hic
9eujJk4UEDdu2ZL522+FYvHdcMOpUxWlpR0ffhg9fryjQcqioeaqubn7/fcvLl0agp+u+9XV
Azt0qKC0VLRp0xN4UTczY5qbM99+e5KTk/maNWeM39WuXddjYjy2b59J7EuC2b8/H1seZQTF
xHhu2vQEcUt2duM776QNY8JRhFBHh2zTpnRXV0ti8fvkkytHj5YYjmsYwC+/FJaWdmzaNN3V
1QLfKJerN25MP3u2kthB5tdf71y8WLNxYzQ+4WVycukrrxzHS8K+fXlRUffU6oTPFr7zzkAT
6f9tPPNMwBtvTCBuOXmyYunSY4YrdxrewJDq6hEs6sa43w0MQqi2tnPNmjNYHParr7JItfqO
HdkffHBpqP+7AQB/ThACAEPT3a2qqBAfPlyUlUWO9dbXS3t61AihtraenTtzamvJTalFRcIP
P7yck9P3QalUWVIiTEoqsLMjP8yUl4uIA9K6upSlpR0//XSb2PVAp9NXVPS1Nhw7VpqZ2YD9
69VodO3tvenpdUqldnitBAqFprm5+9SpCnygo0gkI4b2ZTK1TKZOSSmrrLyn5fnq1XrjmxZF
Itnu3TdbW/sadvLzW9atu5Cf3zeFwYkT5bdutWJzqmPf6MqVOnzxHqKCgr7AxMWLNUJhL9aC
rdPpOzpkOTmNu3ffILY2qFTa1taeixf/j707D4iqah8HfmbfmQFmWAeGXfZFBBRkyT0szcrM
18hI35ZvpvX20yj3ei2yvfSt3kxS3jLNosytNAXBDVBBVgFlX4dtYJh9ht8fl66XGcAZBDF9
Pn85x8O9Z2aee+be5557TvWQ4wwtmsy/oaFn9+4rxFNqmUxVWNhqNOyiq0t55UrLrl2X8ZoX
LjSUlUk/+yxXKh34SIuK2jZuPJ2XN9L8+f39/R0ditzcpi++yDcdT2vRnQe93iCVKs6erRty
9mZ8FokzZ2pVKp3p4AIs2GSyIcZ6XLrU/MMPxUVFoxlpX1PTvX37WfzbJGyzaf36U/gMi93d
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
AElFTkSuQmCC
--------------050804050700040807000507
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
--------------050804050700040807000507--


From win-pv-devel-bounces@lists.xenproject.org Fri Oct 17 09:48:06 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 17 Oct 2014 09:48:06 +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 1Xf48k-0002LE-P2; Fri, 17 Oct 2014 09:48:06 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <Paul.Durrant@citrix.com>) id 1Xf48i-0002L7-LN
	for win-pv-devel@lists.xenproject.org; Fri, 17 Oct 2014 09:48:05 +0000
Received: from [85.158.137.68:12228] by server-14.bemta-3.messagelabs.com id
	98/45-01575-3D5E0445; Fri, 17 Oct 2014 09:48:03 +0000
X-Env-Sender: Paul.Durrant@citrix.com
X-Msg-Ref: server-4.tower-31.messagelabs.com!1413539282!11249410!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: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 7585 invoked from network); 17 Oct 2014 09:48:02 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-4.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	17 Oct 2014 09:48:02 -0000
X-IronPort-AV: E=Sophos;i="5.04,737,1406592000"; d="scan'208";a="26036417"
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: [win-pv-devel] Blue screen on xenvif install
Thread-Index: AQHP6R88TE2eCcEtSU6laq0K5grY5pwybJlQ///obQCAACb2gP//8KIAgAAjAsCAAAnUgIAAIsDw///v2YAABHezEP//4XCA///QCHCAAWc2gP//3DXA
Date: Fri, 17 Oct 2014 09:48:01 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD01110668E@AMSPEX01CL01.citrite.net>
References: <543F887B.5030500@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111050FF@AMSPEX01CL01.citrite.net>
	<543F912C.8000504@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD01110526F@AMSPEX01CL01.citrite.net>
	<543FA4F6.5090804@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111053EA@AMSPEX01CL01.citrite.net>
	<543FCA93.2010805@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111057A2@AMSPEX01CL01.citrite.net>
	<543FDA2D.2090900@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111058E6@AMSPEX01CL01.citrite.net>
	<543FDE85.1030908@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD011105A08@AMSPEX01CL01.citrite.net>
	<5440E39B.6080104@m2r.biz>
In-Reply-To: <5440E39B.6080104@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] Blue screen on xenvif install
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 Fabio Fantoni
> Sent: 17 October 2014 10:39
> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> Subject: Re: [win-pv-devel] Blue screen on xenvif install
> 
> Il 16/10/2014 17:58, Paul Durrant ha scritto:
> >> -----Original Message-----
> >> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> >> bounces@lists.xenproject.org] On Behalf Of Fabio Fantoni
> >> Sent: 16 October 2014 16:05
> >> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >> Subject: Re: [win-pv-devel] Blue screen on xenvif install
> >>
> >> Il 16/10/2014 16:54, Paul Durrant ha scritto:
> >>>> -----Original Message-----
> >>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >>>> Sent: 16 October 2014 15:46
> >>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >>>> Subject: Re: Blue screen on xenvif install
> >>>>
> >>>> Il 16/10/2014 15:45, Paul Durrant ha scritto:
> >>>>>> -----Original Message-----
> >>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >>>>>> Sent: 16 October 2014 14:40
> >>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >>>>>> Subject: Re: Blue screen on xenvif install
> >>>>>>
> >>>>>> Il 16/10/2014 13:04, Paul Durrant ha scritto:
> >>>>>>>> -----Original Message-----
> >>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >>>>>>>> Sent: 16 October 2014 11:59
> >>>>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >>>>>>>> Subject: Re: Blue screen on xenvif install
> >>>>>>>>
> >>>>>>>> Il 16/10/2014 12:00, Paul Durrant ha scritto:
> >>>>>>>>>> -----Original Message-----
> >>>>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >>>>>>>>>> Sent: 16 October 2014 10:35
> >>>>>>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >>>>>>>>>> Subject: Re: Blue screen on xenvif install
> >>>>>>>>>>
> >>>>>>>>>> Il 16/10/2014 10:59, Paul Durrant ha scritto:
> >>>>>>>>>>>> -----Original Message-----
> >>>>>>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >>>>>>>>>>>> Sent: 16 October 2014 09:58
> >>>>>>>>>>>> To: win-pv-devel@lists.xenproject.org
> >>>>>>>>>>>> Cc: Paul Durrant
> >>>>>>>>>>>> Subject: Blue screen on xenvif install
> >>>>>>>>>>>>
> >>>>>>>>>>>> Today I tried to install new winpv driver to other 3 windows 7
> >> pro
> >>>> 64
> >>>>>>>>>>>> bit domUs.
> >>>>>>>>>>>> Days ago I installed them successful on one windows 7 pro 64
> >> bit
> >>>> and
> >>>>>>>> one
> >>>>>>>>>>>> windows 8.1 enterprise 64 bit.
> >>>>>>>>>>>> On first domUs I tried to install them today I installed xenbus
> >> and
> >>>>>>>>>>>> xenvbd successful but on xenvif install windows crashed
> with
> >> blue
> >>>>>>>>>>>> screen, if I saw it correctly was an kernel in-page error or
> >>>> something
> >>>>>>>>>>>> similar.
> >>>>>>>>>>>> After reboot I retried to install xenvif but now always fails.
> >>>>>>>>>>>>
> >>>>>>>>>>> Sounds odd. Do you have a MEMORY.DMP?
> >>>>>>>>>>>
> >>>>>>>>>>>         Paul
> >>>>>>>>>> Windows is setted to write dump of kernel memory on system
> >> error
> >>>>>> but
> >>>>>>>>>> %systemroot%\memory.dmp is missed :(
> >>>>>>>>>> I also checked the windows events log but I found only kernel-
> >>>> power
> >>>>>> as
> >>>>>>>>>> critical that seems not contains useful data.
> >>>>>>>>>>
> >>>>>>>>>> I found probably useful data in xl dmesg (I copied all below
> from
> >>>> domU
> >>>>>>>>>> start to xen bug):
> >>>>>>>>>>> (d98) HVM Loader
> >>>>>>>>>>> (d98) Detected Xen v4.5-unstable
> >>>>>>>>>>> (d98) Xenbus rings @0xfeffc000, event channel 1
> >>>>>>>>>>> (d98) System requested SeaBIOS
> >>>>>>>>>>> (d98) CPU speed is 2660 MHz
> >>>>>>>>>>> (d98) Relocating guest memory for lowmem MMIO space
> >> disabled
> >>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 0 changed 0 -> 5
> >>>>>>>>>>> (d98) PCI-ISA link 0 routed to IRQ5
> >>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 1 changed 0 -> 10
> >>>>>>>>>>> (d98) PCI-ISA link 1 routed to IRQ10
> >>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 2 changed 0 -> 11
> >>>>>>>>>>> (d98) PCI-ISA link 2 routed to IRQ11
> >>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 3 changed 0 -> 5
> >>>>>>>>>>> (d98) PCI-ISA link 3 routed to IRQ5
> >>>>>>>>>>> (d98) pci dev 01:3 INTA->IRQ10
> >>>>>>>>>>> (d98) pci dev 02:0 INTA->IRQ11
> >>>>>>>>>>> (d98) pci dev 03:0 INTA->IRQ5
> >>>>>>>>>>> (d98) pci dev 04:0 INTA->IRQ5
> >>>>>>>>>>> (d98) pci dev 05:0 INTA->IRQ10
> >>>>>>>>>>> (d98) pci dev 06:0 INTA->IRQ11
> >>>>>>>>>>> (d98) pci dev 1d:0 INTA->IRQ10
> >>>>>>>>>>> (d98) pci dev 1d:1 INTB->IRQ11
> >>>>>>>>>>> (d98) pci dev 1d:2 INTC->IRQ5
> >>>>>>>>>>> (d98) pci dev 1d:7 INTD->IRQ5
> >>>>>>>>>>> (d98) No RAM in high memory; setting high_mem resource
> base
> >> to
> >>>>>>>>>> 100000000
> >>>>>>>>>>> (d98) pci dev 05:0 bar 10 size 004000000: 0f0000000
> >>>>>>>>>>> (d98) pci dev 05:0 bar 14 size 004000000: 0f4000000
> >>>>>>>>>>> (d98) pci dev 02:0 bar 14 size 001000000: 0f8000008
> >>>>>>>>>>> (d98) pci dev 06:0 bar 30 size 000040000: 0f9000000
> >>>>>>>>>>> (d98) pci dev 05:0 bar 30 size 000010000: 0f9040000
> >>>>>>>>>>> (d98) pci dev 03:0 bar 10 size 000004000: 0f9050000
> >>>>>>>>>>> (d98) pci dev 05:0 bar 18 size 000002000: 0f9054000
> >>>>>>>>>>> (d98) pci dev 04:0 bar 14 size 000001000: 0f9056000
> >>>>>>>>>>> (d98) pci dev 1d:7 bar 10 size 000001000: 0f9057000
> >>>>>>>>>>> (d98) pci dev 02:0 bar 10 size 000000100: 00000c001
> >>>>>>>>>>> (d98) pci dev 06:0 bar 10 size 000000100: 00000c101
> >>>>>>>>>>> (d98) pci dev 06:0 bar 14 size 000000100: 0f9058000
> >>>>>>>>>>> (d98) pci dev 04:0 bar 10 size 000000020: 00000c201
> >>>>>>>>>>> (d98) pci dev 05:0 bar 1c size 000000020: 00000c221
> >>>>>>>>>>> (d98) pci dev 1d:0 bar 20 size 000000020: 00000c241
> >>>>>>>>>>> (d98) pci dev 1d:1 bar 20 size 000000020: 00000c261
> >>>>>>>>>>> (d98) pci dev 1d:2 bar 20 size 000000020: 00000c281
> >>>>>>>>>>> (d98) pci dev 01:1 bar 20 size 000000010: 00000c2a1
> >>>>>>>>>>> (d98) Multiprocessor initialisation:
> >>>>>>>>>>> (d98)  - CPU0 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8]
> ...
> >>>>>>>>>>> done.
> >>>>>>>>>>> (d98)  - CPU1 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8]
> ...
> >>>>>>>>>>> done.
> >>>>>>>>>>> (d98) Testing HVM environment:
> >>>>>>>>>>> (d98)  - REP INSB across page boundaries ... passed
> >>>>>>>>>>> (d98)  - GS base MSRs and SWAPGS ... passed
> >>>>>>>>>>> (d98) Passed 2 of 2 tests
> >>>>>>>>>>> (d98) Writing SMBIOS tables ...
> >>>>>>>>>>> (d98) Loading SeaBIOS ...
> >>>>>>>>>>> (d98) Creating MP tables ...
> >>>>>>>>>>> (d98) Loading ACPI ...
> >>>>>>>>>>> (d98) S3 disabled
> >>>>>>>>>>> (d98) S4 disabled
> >>>>>>>>>>> (d98) vm86 TSS at fc00a100
> >>>>>>>>>>> (d98) BIOS map:
> >>>>>>>>>>> (d98)  10000-100d3: Scratch space
> >>>>>>>>>>> (d98)  c0000-fffff: Main BIOS
> >>>>>>>>>>> (d98) E820 table:
> >>>>>>>>>>> (d98)  [00]: 00000000:00000000 - 00000000:000a0000: RAM
> >>>>>>>>>>> (d98)  HOLE: 00000000:000a0000 - 00000000:000c0000
> >>>>>>>>>>> (d98)  [01]: 00000000:000c0000 - 00000000:00100000:
> RESERVED
> >>>>>>>>>>> (d98)  [02]: 00000000:00100000 - 00000000:78000000: RAM
> >>>>>>>>>>> (d98)  HOLE: 00000000:78000000 - 00000000:fc000000
> >>>>>>>>>>> (d98)  [03]: 00000000:fc000000 - 00000001:00000000: RESERVED
> >>>>>>>>>>> (d98) Invoking SeaBIOS ...
> >>>>>>>>>>> (d98) SeaBIOS (version
> >>>>>>>>>>> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
> >>>>>>>>>>> (d98)
> >>>>>>>>>>> (d98) Found Xen hypervisor signature at 40000100
> >>>>>>>>>>> (d98) Running on QEMU (i440fx)
> >>>>>>>>>>> (d98) xen: copy e820...
> >>>>>>>>>>> (d98) Relocating init from 0x000df619 to 0x77fae600 (size
> 71995)
> >>>>>>>>>>> (d98) CPU Mhz=2660
> >>>>>>>>>>> (d98) Found 13 PCI devices (max PCI bus is 00)
> >>>>>>>>>>> (d98) Allocated Xen hypercall page at 77fff000
> >>>>>>>>>>> (d98) Detected Xen v4.5-unstable
> >>>>>>>>>>> (d98) xen: copy BIOS tables...
> >>>>>>>>>>> (d98) Copying SMBIOS entry point from 0x00010010 to
> >> 0x000f0f40
> >>>>>>>>>>> (d98) Copying MPTABLE from 0xfc001170/fc001180 to
> 0x000f0e40
> >>>>>>>>>>> (d98) Copying PIR from 0x00010030 to 0x000f0dc0
> >>>>>>>>>>> (d98) Copying ACPI RSDP from 0x000100b0 to 0x000f0d90
> >>>>>>>>>>> (d98) Using pmtimer, ioport 0xb008
> >>>>>>>>>>> (d98) Scan for VGA option rom
> >>>>>>>>>>> (d98) Running option rom at c000:0003
> >>>>>>>>>>> (XEN) stdvga.c:147:d98v0 entering stdvga and caching modes
> >>>>>>>>>>> (d98) pmm call arg1=0
> >>>>>>>>>>> (d98) Turning on vga text mode console
> >>>>>>>>>>> (d98) SeaBIOS (version
> >>>>>>>>>>> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
> >>>>>>>>>>> (d98) Machine UUID f4cdeb74-0db1-4748-948d-42579a494120
> >>>>>>>>>>> (d98) EHCI init on dev 00:1d.7 (regs=0xf9057020)
> >>>>>>>>>>> (d98) Found 0 lpt ports
> >>>>>>>>>>> (d98) Found 0 serial ports
> >>>>>>>>>>> (d98) ATA controller 1 at 1f0/3f4/0 (irq 14 dev 9)
> >>>>>>>>>>> (d98) ATA controller 2 at 170/374/0 (irq 15 dev 9)
> >>>>>>>>>>> (d98) ata0-0: QEMU HARDDISK ATA-7 Hard-Disk (40720
> MiBytes)
> >>>>>>>>>>> (d98) Searching bootorder for:
> >> /pci@i0cf8/*@1,1/drive@0/disk@0
> >>>>>>>>>>> (d98) DVD/CD [ata0-1: QEMU DVD-ROM ATAPI-4 DVD/CD]
> >>>>>>>>>>> (d98) Searching bootorder for:
> >> /pci@i0cf8/*@1,1/drive@0/disk@1
> >>>>>>>>>>> (d98) UHCI init on dev 00:1d.0 (io=c240)
> >>>>>>>>>>> (d98) UHCI init on dev 00:1d.1 (io=c260)
> >>>>>>>>>>> (d98) UHCI init on dev 00:1d.2 (io=c280)
> >>>>>>>>>>> (d98) PS2 keyboard initialized
> >>>>>>>>>>> (d98) All threads complete.
> >>>>>>>>>>> (d98) Scan for option roms
> >>>>>>>>>>> (d98) Running option rom at c980:0003
> >>>>>>>>>>> (d98) pmm call arg1=1
> >>>>>>>>>>> (d98) pmm call arg1=0
> >>>>>>>>>>> (d98) pmm call arg1=1
> >>>>>>>>>>> (d98) pmm call arg1=0
> >>>>>>>>>>> (d98) Searching bootorder for: /pci@i0cf8/*@6
> >>>>>>>>>>> (d98)
> >>>>>>>>>>> (d98) Press F12 for boot menu.
> >>>>>>>>>>> (d98)
> >>>>>>>>>>> (d98) Searching bootorder for: HALT
> >>>>>>>>>>> (d98) drive 0x000f0d40: PCHS=16383/16/63 translation=lba
> >>>>>>>>>>> LCHS=1024/255/63 s=83394560
> >>>>>>>>>>> (d98) Space available for UMB: ca800-ee800, f0000-f0ce0
> >>>>>>>>>>> (d98) Returned 258048 bytes of ZoneHigh
> >>>>>>>>>>> (d98) e820 map has 6 items:
> >>>>>>>>>>> (d98)   0: 0000000000000000 - 000000000009fc00 = 1 RAM
> >>>>>>>>>>> (d98)   1: 000000000009fc00 - 00000000000a0000 = 2 RESERVED
> >>>>>>>>>>> (d98)   2: 00000000000f0000 - 0000000000100000 = 2 RESERVED
> >>>>>>>>>>> (d98)   3: 0000000000100000 - 0000000077fff000 = 1 RAM
> >>>>>>>>>>> (d98)   4: 0000000077fff000 - 0000000078000000 = 2 RESERVED
> >>>>>>>>>>> (d98)   5: 00000000fc000000 - 0000000100000000 = 2 RESERVED
> >>>>>>>>>>> (d98) enter handle_19:
> >>>>>>>>>>> (d98)   NULL
> >>>>>>>>>>> (d98) Booting from Hard Disk...
> >>>>>>>>>>> (d98) Booting from 0000:7c00
> >>>>>>>>>>> (XEN) d98: VIRIDIAN GUEST_OS_ID: vendor: 1 os: 4 major: 6
> >> minor:
> >>>> 1
> >>>>>> sp:
> >>>>>>>>>>> 1 build: 1db1
> >>>>>>>>>>> (XEN) d98: VIRIDIAN HYPERCALL: enabled: 1 pfn: 3ffff
> >>>>>>>>>>> (XEN) d98v0: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffe
> >>>>>>>>>>> (XEN) d98v1: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffd
> >>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 0 changed 5 -> 0
> >>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 1 changed 10 -> 0
> >>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 2 changed 11 -> 0
> >>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 3 changed 5 -> 0
> >>>>>>>>>>> (XEN) irq.c:380: Dom98 callback via changed to GSI 24
> >>>>>>>>>>> (d98) XEN|BUGCHECK: ====>
> >>>>>>>>>>> (d98) XEN|BUGCHECK: 0000007A: FFFFF6FC000171C8
> >>>>>> FFFFFFFFC0000185
> >>>>>>>>>>> 000000001BD6A860 FFFF
> >>>>>>>>>>> (d98) F80002E39000
> >>>>>>>>>>> (d98) XEN|BUGCHECK: CONTEXT (FFFFF8800310E530):
> >>>>>>>>>>> (d98) XEN|BUGCHECK: - GS = 002B
> >>>>>>>>>>> (d98) XEN|BUGCHECK: - FS = 0053
> >>>>>>>>>>> (d98) XEN|BUGCHECK: - ES = 002B
> >>>>>>>>>>> (d98) XEN|BUGCHECK: - DS = 002B
> >>>>>>>>>>> (d98) XEN|BUGCHECK: - SS = 0018
> >>>>>>>>>>> (d98) XEN|BUGCHECK: - CS = 0010
> >>>>>>>>>>> (d98) XEN|BUGCHECK: - EFLAGS = 00000086
> >>>>>>>>>>> (d98) XEN|BUGCHECK: - RDI = 00000000000171C8
> >>>>>>>>>>> (d98) XEN|BUGCHECK: - RSI = 00000000C0000185
> >>>>>>>>>>> (d98) XEN|BUGCHECK: - RBX = 00000000038AC8F8
> >>>>>>>>>>> (d98) XEN|BUGCHECK: - RDX = 0000000000000000
> >>>>>>>>>>> (d98) XEN|BUGCHECK: - RCX = 000000000310E530
> >>>>>>>>>>> (d98) XEN|BUGCHECK: - RAX = 000000002ECF4722
> >>>>>>>>>>> (d98) XEN|BUGCHECK: - RBP = 000000001BD6A860
> >>>>>>>>>>> (d98) XEN|BUGCHECK: - RIP = 00000000038A2A43
> >>>>>>>>>>> (d98) XEN|BUGCHECK: - RSP = 000000000310E510
> >>>>>>>>>>> (d98) XEN|BUGCHECK: - R8 = 0000000000000000
> >>>>>>>>>>> (d98) XEN|BUGCHECK: - R9 = 0000000000000000
> >>>>>>>>>>> (d98) XEN|BUGCHECK: - R10 = 0000000000000000
> >>>>>>>>>>> (d98) XEN|BUGCHECK: - R11 = 0000000000000000
> >>>>>>>>>>> (d98) XEN|BUGCHECK: - R12 = 000000000000007A
> >>>>>>>>>>> (d98) XEN|BUGCHECK: - R13 = 0000000000000001
> >>>>>>>>>>> (d98) XEN|BUGCHECK: - R14 = 0000000002E39000
> >>>>>>>>>>> (d98) XEN|BUGCHECK: - R15 = 0000000002CBAC40
> >>>>>>>>>>> (d98) XEN|BUGCHECK: STACK:
> >>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310EA20:
> (0000000000000003
> >>>>>>>>>>> 00000000038A50F0 00000000038A
> >>>>>>>>>>> (d98) 4860 000000000000007A) xen.sys + 00000000000049AC
> >>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310EA70:
> (00000000038AD0D0
> >>>>>>>>>>> 0000000000000000 000000000000
> >>>>>>>>>>> (d98) 0004 0000000002C83500) ntoskrnl.exe +
> 0000000000128585
> >>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310EAA0:
> (00000000038AD0D0
> >>>>>>>>>>> 0000000002C83500 000000000000
> >>>>>>>>>>> (d98) 000F 0000000001780660) ntoskrnl.exe +
> 0000000000167C0D
> >>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F170: (0000000003816470
> >>>>>>>>>>> 0000000002B4C8C1 000000000000
> >>>>>>>>>>> (d98) 00FE 0000000000000000) ntoskrnl.exe +
> 0000000000075CC4
> >>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F1B0:
> (000000000000007A
> >>>>>>>>>>> 00000000000171C8 00000000C000
> >>>>>>>>>>> (d98) 0185 000000001BD6A860) ntoskrnl.exe +
> 00000000000E8752
> >>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F290: (00000000038163B0
> >>>>>>>>>>> 000000000310F320 0000000002CB
> >>>>>>>>>>> (d98) D540 00000000038163B0) ntoskrnl.exe +
> 000000000009C91F
> >>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F360: (0000000000000000
> >>>>>>>>>>> 0000000000000008 00000000FFFF
> >>>>>>>>>>> (d98) FFFF 00000000003500F0) ntoskrnl.exe +
> 00000000000831B9
> >>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F4C0: (0000000000000008
> >>>>>>>>>>> 0000000002E39000 000000000000
> >>>>>>>>>>> (d98) 0000 0000000000000000) ntoskrnl.exe +
> 0000000000073CEE
> >>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F658:
> (0000000002E5CFD5
> >>>>>>>>>>> 0000000000000000 0000000003EB
> >>>>>>>>>>> (d98) 8710 00000000FFFFFFFF) ntoskrnl.exe +
> 000000000042C000
> >>>>>>>>>> If you need more tests/informations tell me and I'll post them.
> >>>>>>>>>> Thanks for any reply and sorry for my bad english.
> >>>>>>>>> Well, that tells me you had a 7A BSOD, which is a
> >>>>>>>> KERNEL_DATA_INPAGE_ERROR. The error status (param 2) was
> >>>> C0000185
> >>>>>> so
> >>>>>>>> that's a STATUS_IO_DEVICE_ERROR. The documentation at
> >>>>>>>> http://msdn.microsoft.com/en-
> >>>>>>>> gb/library/windows/hardware/ff559211%28v=vs.85%29.aspx tells
> >> me
> >>>> that
> >>>>>>>> this means:
> >>>>>>>>> "improper termination or defective cabling on SCSI devices or
> that
> >>>> two
> >>>>>>>> devices are trying to use the same IRQ."
> >>>>>>>>> But you said you had xenvbd already installed so you'll be using a
> >> PV
> >>>>>>>> storage path. Is there any indication of problems with your
> storage?
> >>>>>>>>>        Paul
> >>>>>>>> DomUs disk are all raw files in local dom0 disks, raid1 with "LSI
> Logic
> >>>>>>>> / Symbios Logic SAS2008 PCI-Express Fusion-MPT SAS-2" dom0
> >>>> partitions
> >>>>>>>> are GTP and fs ext4.
> >>>>>>>> Dom0 is wheezy with kernel is linux-image-3.16-0.bpo.2-amd64
> >> version
> >>>>>>>> 3.16.3-2~bpo70+1
> >>>>>>>> No kern or syslog errors, only many of these warning that
> someone
> >>>>>>>> replied me that should not be a problem:
> >>>>>>>> Oct 15 10:45:13 mtorMN01OU kernel: [773197.117518]
> xen:balloon:
> >>>>>>>> reserve_additional_memory: add_memory() failed: -17
> >>>>>>>> DomU now see disk as xen pvdisk, on xenvif install probably still
> was
> >>>>>>>> full emulated disk even if xenvbd was installed successful before
> >> xenvif
> >>>>>>>> install (failed with BSOD)
> >>>>>>>> The IRQ seems visible from xl dmesg output below, can you check
> >>>> them is
> >>>>>>>> have something wrong or strange, I see some of them "duplicate"
> >> but I
> >>>>>>>> not know if is correct.
> >>>>>>>>
> >>>>>>>> DomU xl cfg:
> >>>>>>>>> name='office1_w7'
> >>>>>>>>> builder="hvm"
> >>>>>>>>> memory=2048
> >>>>>>>>> vcpus=2
> >>>>>>>>> acpi_s3=0
> >>>>>>>>> acpi_s4=0
> >>>>>>>>> vif=['bridge=xenbr0,mac=00:16:3e:41:ae:8b']
> >>>>>>>>>
> >>
> disk=['/mnt/vm/disks/office1_w7.disk1.xm,raw,hda,rw',',raw,hdb,ro,cdrom'
> >>>>>>>> ]
> >>>>>>>>> boot='c'
> >>>>>>>>> device_model_version="qemu-xen"
> >>>>>>>>> viridian=1
> >>>>>>>>> vnc=0
> >>>>>>>>> keymap="it"
> >>>>>>>>> on_crash="destroy"
> >>>>>>>>> vga="qxl"
> >>>>>>>>> spice=1
> >>>>>>>>> spicehost='0.0.0.0'
> >>>>>>>>> spiceport=6001
> >>>>>>>>> spicedisable_ticketing=0
> >>>>>>>>> spicepasswd="password"
> >>>>>>>>> spicevdagent=1
> >>>>>>>>> spice_clipboard_sharing=0
> >>>>>>>>> spiceusbredirection=4
> >>>>>>>>> soundhw="hda"
> >>>>>>>>> localtime=1
> >>>>>>>> If you need more tests/informations tell me and I'll post them.
> >>>>>>>>
> >>>>>>> Do you have the qemu log (with xen platform logging enabled).
> This is
> >>>>>> where the PV drivers log failures/warnings.
> >>>>>>>       Paul
> >>>>>>>
> >>>>>>>
> >>>>>> I retried enabling xen platform debug in qemu trace but no add lines
> in
> >>>>>> log when I try to install xenvif and fails.
> >>>>>> I attach anyway the log if can be useful.
> >>>>> All I can see there is an apparently clean shutdown of domain 101; no
> >> sign
> >>>> of XENVIF and no sign of a BSOD.
> >>>>>> I'll also try to restore the backup of this night of the domU when I
> had
> >>>>>> the BSOD trying reproduce it with xen debug in qemu trace and
> >> different
> >>>>>> windows memory dump options.
> >>>>> Ok.
> >>>>>
> >>>>>      Paul
> >>>>>
> >>>> Reproduced it but now with xen platform trace enabled in qemu. (see
> >>>> attachment)
> >>>> Dump of memory instead is not present also in this case (probably
> >>>> because disk is "failed").
> >>> You're using emulate disk in this case. Did your BSOD not indicate that it
> >> was dumping?
> >>>     Paul
> >>>
> >> I have to time to see if do a dump but I suppose it can't write to disk
> >> since its driver fails.
> >> Log qemu is not enough? You need the windows memory dump to find
> and
> >> fix
> >> the bug?
> > I don't know what the bug is. My guess is that it's a deadlock somewhere
> which is causing Windows to believe there's a storage issue, but since the
> stack is entirely in the kernel and without a crashdump I cannot decode to
> symbols there's not much more I can do unless I happen to repro.
> >
> >    Paul
> >
> >> If needed tomorrow I'll do other tests.
> I retried and seems always reproducible on same domU.
> Now I disabled automatic reboot on crash and do a screenshot (in
> attachment) but memory dump is still missed :( Probably with disk
> "failed" can't write.
> Is there another way to take/save the memory dump or the data you need?
> 

Could you remove xenvbd and make sure the emulated disk is functional. Then, install Xenvif and see if it BSODs.

> About IRQ you checked in xl dmesg I posted if are all ok?
> 

Yes, I don't think there's a problem there.

  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 Fri Oct 17 09:48:06 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 17 Oct 2014 09:48:06 +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 1Xf48k-0002LE-P2; Fri, 17 Oct 2014 09:48:06 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <Paul.Durrant@citrix.com>) id 1Xf48i-0002L7-LN
	for win-pv-devel@lists.xenproject.org; Fri, 17 Oct 2014 09:48:05 +0000
Received: from [85.158.137.68:12228] by server-14.bemta-3.messagelabs.com id
	98/45-01575-3D5E0445; Fri, 17 Oct 2014 09:48:03 +0000
X-Env-Sender: Paul.Durrant@citrix.com
X-Msg-Ref: server-4.tower-31.messagelabs.com!1413539282!11249410!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: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 7585 invoked from network); 17 Oct 2014 09:48:02 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-4.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	17 Oct 2014 09:48:02 -0000
X-IronPort-AV: E=Sophos;i="5.04,737,1406592000"; d="scan'208";a="26036417"
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: [win-pv-devel] Blue screen on xenvif install
Thread-Index: AQHP6R88TE2eCcEtSU6laq0K5grY5pwybJlQ///obQCAACb2gP//8KIAgAAjAsCAAAnUgIAAIsDw///v2YAABHezEP//4XCA///QCHCAAWc2gP//3DXA
Date: Fri, 17 Oct 2014 09:48:01 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD01110668E@AMSPEX01CL01.citrite.net>
References: <543F887B.5030500@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111050FF@AMSPEX01CL01.citrite.net>
	<543F912C.8000504@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD01110526F@AMSPEX01CL01.citrite.net>
	<543FA4F6.5090804@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111053EA@AMSPEX01CL01.citrite.net>
	<543FCA93.2010805@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111057A2@AMSPEX01CL01.citrite.net>
	<543FDA2D.2090900@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111058E6@AMSPEX01CL01.citrite.net>
	<543FDE85.1030908@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD011105A08@AMSPEX01CL01.citrite.net>
	<5440E39B.6080104@m2r.biz>
In-Reply-To: <5440E39B.6080104@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] Blue screen on xenvif install
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 Fabio Fantoni
> Sent: 17 October 2014 10:39
> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> Subject: Re: [win-pv-devel] Blue screen on xenvif install
> 
> Il 16/10/2014 17:58, Paul Durrant ha scritto:
> >> -----Original Message-----
> >> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> >> bounces@lists.xenproject.org] On Behalf Of Fabio Fantoni
> >> Sent: 16 October 2014 16:05
> >> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >> Subject: Re: [win-pv-devel] Blue screen on xenvif install
> >>
> >> Il 16/10/2014 16:54, Paul Durrant ha scritto:
> >>>> -----Original Message-----
> >>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >>>> Sent: 16 October 2014 15:46
> >>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >>>> Subject: Re: Blue screen on xenvif install
> >>>>
> >>>> Il 16/10/2014 15:45, Paul Durrant ha scritto:
> >>>>>> -----Original Message-----
> >>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >>>>>> Sent: 16 October 2014 14:40
> >>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >>>>>> Subject: Re: Blue screen on xenvif install
> >>>>>>
> >>>>>> Il 16/10/2014 13:04, Paul Durrant ha scritto:
> >>>>>>>> -----Original Message-----
> >>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >>>>>>>> Sent: 16 October 2014 11:59
> >>>>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >>>>>>>> Subject: Re: Blue screen on xenvif install
> >>>>>>>>
> >>>>>>>> Il 16/10/2014 12:00, Paul Durrant ha scritto:
> >>>>>>>>>> -----Original Message-----
> >>>>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >>>>>>>>>> Sent: 16 October 2014 10:35
> >>>>>>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >>>>>>>>>> Subject: Re: Blue screen on xenvif install
> >>>>>>>>>>
> >>>>>>>>>> Il 16/10/2014 10:59, Paul Durrant ha scritto:
> >>>>>>>>>>>> -----Original Message-----
> >>>>>>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >>>>>>>>>>>> Sent: 16 October 2014 09:58
> >>>>>>>>>>>> To: win-pv-devel@lists.xenproject.org
> >>>>>>>>>>>> Cc: Paul Durrant
> >>>>>>>>>>>> Subject: Blue screen on xenvif install
> >>>>>>>>>>>>
> >>>>>>>>>>>> Today I tried to install new winpv driver to other 3 windows 7
> >> pro
> >>>> 64
> >>>>>>>>>>>> bit domUs.
> >>>>>>>>>>>> Days ago I installed them successful on one windows 7 pro 64
> >> bit
> >>>> and
> >>>>>>>> one
> >>>>>>>>>>>> windows 8.1 enterprise 64 bit.
> >>>>>>>>>>>> On first domUs I tried to install them today I installed xenbus
> >> and
> >>>>>>>>>>>> xenvbd successful but on xenvif install windows crashed
> with
> >> blue
> >>>>>>>>>>>> screen, if I saw it correctly was an kernel in-page error or
> >>>> something
> >>>>>>>>>>>> similar.
> >>>>>>>>>>>> After reboot I retried to install xenvif but now always fails.
> >>>>>>>>>>>>
> >>>>>>>>>>> Sounds odd. Do you have a MEMORY.DMP?
> >>>>>>>>>>>
> >>>>>>>>>>>         Paul
> >>>>>>>>>> Windows is setted to write dump of kernel memory on system
> >> error
> >>>>>> but
> >>>>>>>>>> %systemroot%\memory.dmp is missed :(
> >>>>>>>>>> I also checked the windows events log but I found only kernel-
> >>>> power
> >>>>>> as
> >>>>>>>>>> critical that seems not contains useful data.
> >>>>>>>>>>
> >>>>>>>>>> I found probably useful data in xl dmesg (I copied all below
> from
> >>>> domU
> >>>>>>>>>> start to xen bug):
> >>>>>>>>>>> (d98) HVM Loader
> >>>>>>>>>>> (d98) Detected Xen v4.5-unstable
> >>>>>>>>>>> (d98) Xenbus rings @0xfeffc000, event channel 1
> >>>>>>>>>>> (d98) System requested SeaBIOS
> >>>>>>>>>>> (d98) CPU speed is 2660 MHz
> >>>>>>>>>>> (d98) Relocating guest memory for lowmem MMIO space
> >> disabled
> >>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 0 changed 0 -> 5
> >>>>>>>>>>> (d98) PCI-ISA link 0 routed to IRQ5
> >>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 1 changed 0 -> 10
> >>>>>>>>>>> (d98) PCI-ISA link 1 routed to IRQ10
> >>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 2 changed 0 -> 11
> >>>>>>>>>>> (d98) PCI-ISA link 2 routed to IRQ11
> >>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 3 changed 0 -> 5
> >>>>>>>>>>> (d98) PCI-ISA link 3 routed to IRQ5
> >>>>>>>>>>> (d98) pci dev 01:3 INTA->IRQ10
> >>>>>>>>>>> (d98) pci dev 02:0 INTA->IRQ11
> >>>>>>>>>>> (d98) pci dev 03:0 INTA->IRQ5
> >>>>>>>>>>> (d98) pci dev 04:0 INTA->IRQ5
> >>>>>>>>>>> (d98) pci dev 05:0 INTA->IRQ10
> >>>>>>>>>>> (d98) pci dev 06:0 INTA->IRQ11
> >>>>>>>>>>> (d98) pci dev 1d:0 INTA->IRQ10
> >>>>>>>>>>> (d98) pci dev 1d:1 INTB->IRQ11
> >>>>>>>>>>> (d98) pci dev 1d:2 INTC->IRQ5
> >>>>>>>>>>> (d98) pci dev 1d:7 INTD->IRQ5
> >>>>>>>>>>> (d98) No RAM in high memory; setting high_mem resource
> base
> >> to
> >>>>>>>>>> 100000000
> >>>>>>>>>>> (d98) pci dev 05:0 bar 10 size 004000000: 0f0000000
> >>>>>>>>>>> (d98) pci dev 05:0 bar 14 size 004000000: 0f4000000
> >>>>>>>>>>> (d98) pci dev 02:0 bar 14 size 001000000: 0f8000008
> >>>>>>>>>>> (d98) pci dev 06:0 bar 30 size 000040000: 0f9000000
> >>>>>>>>>>> (d98) pci dev 05:0 bar 30 size 000010000: 0f9040000
> >>>>>>>>>>> (d98) pci dev 03:0 bar 10 size 000004000: 0f9050000
> >>>>>>>>>>> (d98) pci dev 05:0 bar 18 size 000002000: 0f9054000
> >>>>>>>>>>> (d98) pci dev 04:0 bar 14 size 000001000: 0f9056000
> >>>>>>>>>>> (d98) pci dev 1d:7 bar 10 size 000001000: 0f9057000
> >>>>>>>>>>> (d98) pci dev 02:0 bar 10 size 000000100: 00000c001
> >>>>>>>>>>> (d98) pci dev 06:0 bar 10 size 000000100: 00000c101
> >>>>>>>>>>> (d98) pci dev 06:0 bar 14 size 000000100: 0f9058000
> >>>>>>>>>>> (d98) pci dev 04:0 bar 10 size 000000020: 00000c201
> >>>>>>>>>>> (d98) pci dev 05:0 bar 1c size 000000020: 00000c221
> >>>>>>>>>>> (d98) pci dev 1d:0 bar 20 size 000000020: 00000c241
> >>>>>>>>>>> (d98) pci dev 1d:1 bar 20 size 000000020: 00000c261
> >>>>>>>>>>> (d98) pci dev 1d:2 bar 20 size 000000020: 00000c281
> >>>>>>>>>>> (d98) pci dev 01:1 bar 20 size 000000010: 00000c2a1
> >>>>>>>>>>> (d98) Multiprocessor initialisation:
> >>>>>>>>>>> (d98)  - CPU0 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8]
> ...
> >>>>>>>>>>> done.
> >>>>>>>>>>> (d98)  - CPU1 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8]
> ...
> >>>>>>>>>>> done.
> >>>>>>>>>>> (d98) Testing HVM environment:
> >>>>>>>>>>> (d98)  - REP INSB across page boundaries ... passed
> >>>>>>>>>>> (d98)  - GS base MSRs and SWAPGS ... passed
> >>>>>>>>>>> (d98) Passed 2 of 2 tests
> >>>>>>>>>>> (d98) Writing SMBIOS tables ...
> >>>>>>>>>>> (d98) Loading SeaBIOS ...
> >>>>>>>>>>> (d98) Creating MP tables ...
> >>>>>>>>>>> (d98) Loading ACPI ...
> >>>>>>>>>>> (d98) S3 disabled
> >>>>>>>>>>> (d98) S4 disabled
> >>>>>>>>>>> (d98) vm86 TSS at fc00a100
> >>>>>>>>>>> (d98) BIOS map:
> >>>>>>>>>>> (d98)  10000-100d3: Scratch space
> >>>>>>>>>>> (d98)  c0000-fffff: Main BIOS
> >>>>>>>>>>> (d98) E820 table:
> >>>>>>>>>>> (d98)  [00]: 00000000:00000000 - 00000000:000a0000: RAM
> >>>>>>>>>>> (d98)  HOLE: 00000000:000a0000 - 00000000:000c0000
> >>>>>>>>>>> (d98)  [01]: 00000000:000c0000 - 00000000:00100000:
> RESERVED
> >>>>>>>>>>> (d98)  [02]: 00000000:00100000 - 00000000:78000000: RAM
> >>>>>>>>>>> (d98)  HOLE: 00000000:78000000 - 00000000:fc000000
> >>>>>>>>>>> (d98)  [03]: 00000000:fc000000 - 00000001:00000000: RESERVED
> >>>>>>>>>>> (d98) Invoking SeaBIOS ...
> >>>>>>>>>>> (d98) SeaBIOS (version
> >>>>>>>>>>> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
> >>>>>>>>>>> (d98)
> >>>>>>>>>>> (d98) Found Xen hypervisor signature at 40000100
> >>>>>>>>>>> (d98) Running on QEMU (i440fx)
> >>>>>>>>>>> (d98) xen: copy e820...
> >>>>>>>>>>> (d98) Relocating init from 0x000df619 to 0x77fae600 (size
> 71995)
> >>>>>>>>>>> (d98) CPU Mhz=2660
> >>>>>>>>>>> (d98) Found 13 PCI devices (max PCI bus is 00)
> >>>>>>>>>>> (d98) Allocated Xen hypercall page at 77fff000
> >>>>>>>>>>> (d98) Detected Xen v4.5-unstable
> >>>>>>>>>>> (d98) xen: copy BIOS tables...
> >>>>>>>>>>> (d98) Copying SMBIOS entry point from 0x00010010 to
> >> 0x000f0f40
> >>>>>>>>>>> (d98) Copying MPTABLE from 0xfc001170/fc001180 to
> 0x000f0e40
> >>>>>>>>>>> (d98) Copying PIR from 0x00010030 to 0x000f0dc0
> >>>>>>>>>>> (d98) Copying ACPI RSDP from 0x000100b0 to 0x000f0d90
> >>>>>>>>>>> (d98) Using pmtimer, ioport 0xb008
> >>>>>>>>>>> (d98) Scan for VGA option rom
> >>>>>>>>>>> (d98) Running option rom at c000:0003
> >>>>>>>>>>> (XEN) stdvga.c:147:d98v0 entering stdvga and caching modes
> >>>>>>>>>>> (d98) pmm call arg1=0
> >>>>>>>>>>> (d98) Turning on vga text mode console
> >>>>>>>>>>> (d98) SeaBIOS (version
> >>>>>>>>>>> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
> >>>>>>>>>>> (d98) Machine UUID f4cdeb74-0db1-4748-948d-42579a494120
> >>>>>>>>>>> (d98) EHCI init on dev 00:1d.7 (regs=0xf9057020)
> >>>>>>>>>>> (d98) Found 0 lpt ports
> >>>>>>>>>>> (d98) Found 0 serial ports
> >>>>>>>>>>> (d98) ATA controller 1 at 1f0/3f4/0 (irq 14 dev 9)
> >>>>>>>>>>> (d98) ATA controller 2 at 170/374/0 (irq 15 dev 9)
> >>>>>>>>>>> (d98) ata0-0: QEMU HARDDISK ATA-7 Hard-Disk (40720
> MiBytes)
> >>>>>>>>>>> (d98) Searching bootorder for:
> >> /pci@i0cf8/*@1,1/drive@0/disk@0
> >>>>>>>>>>> (d98) DVD/CD [ata0-1: QEMU DVD-ROM ATAPI-4 DVD/CD]
> >>>>>>>>>>> (d98) Searching bootorder for:
> >> /pci@i0cf8/*@1,1/drive@0/disk@1
> >>>>>>>>>>> (d98) UHCI init on dev 00:1d.0 (io=c240)
> >>>>>>>>>>> (d98) UHCI init on dev 00:1d.1 (io=c260)
> >>>>>>>>>>> (d98) UHCI init on dev 00:1d.2 (io=c280)
> >>>>>>>>>>> (d98) PS2 keyboard initialized
> >>>>>>>>>>> (d98) All threads complete.
> >>>>>>>>>>> (d98) Scan for option roms
> >>>>>>>>>>> (d98) Running option rom at c980:0003
> >>>>>>>>>>> (d98) pmm call arg1=1
> >>>>>>>>>>> (d98) pmm call arg1=0
> >>>>>>>>>>> (d98) pmm call arg1=1
> >>>>>>>>>>> (d98) pmm call arg1=0
> >>>>>>>>>>> (d98) Searching bootorder for: /pci@i0cf8/*@6
> >>>>>>>>>>> (d98)
> >>>>>>>>>>> (d98) Press F12 for boot menu.
> >>>>>>>>>>> (d98)
> >>>>>>>>>>> (d98) Searching bootorder for: HALT
> >>>>>>>>>>> (d98) drive 0x000f0d40: PCHS=16383/16/63 translation=lba
> >>>>>>>>>>> LCHS=1024/255/63 s=83394560
> >>>>>>>>>>> (d98) Space available for UMB: ca800-ee800, f0000-f0ce0
> >>>>>>>>>>> (d98) Returned 258048 bytes of ZoneHigh
> >>>>>>>>>>> (d98) e820 map has 6 items:
> >>>>>>>>>>> (d98)   0: 0000000000000000 - 000000000009fc00 = 1 RAM
> >>>>>>>>>>> (d98)   1: 000000000009fc00 - 00000000000a0000 = 2 RESERVED
> >>>>>>>>>>> (d98)   2: 00000000000f0000 - 0000000000100000 = 2 RESERVED
> >>>>>>>>>>> (d98)   3: 0000000000100000 - 0000000077fff000 = 1 RAM
> >>>>>>>>>>> (d98)   4: 0000000077fff000 - 0000000078000000 = 2 RESERVED
> >>>>>>>>>>> (d98)   5: 00000000fc000000 - 0000000100000000 = 2 RESERVED
> >>>>>>>>>>> (d98) enter handle_19:
> >>>>>>>>>>> (d98)   NULL
> >>>>>>>>>>> (d98) Booting from Hard Disk...
> >>>>>>>>>>> (d98) Booting from 0000:7c00
> >>>>>>>>>>> (XEN) d98: VIRIDIAN GUEST_OS_ID: vendor: 1 os: 4 major: 6
> >> minor:
> >>>> 1
> >>>>>> sp:
> >>>>>>>>>>> 1 build: 1db1
> >>>>>>>>>>> (XEN) d98: VIRIDIAN HYPERCALL: enabled: 1 pfn: 3ffff
> >>>>>>>>>>> (XEN) d98v0: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffe
> >>>>>>>>>>> (XEN) d98v1: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffd
> >>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 0 changed 5 -> 0
> >>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 1 changed 10 -> 0
> >>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 2 changed 11 -> 0
> >>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 3 changed 5 -> 0
> >>>>>>>>>>> (XEN) irq.c:380: Dom98 callback via changed to GSI 24
> >>>>>>>>>>> (d98) XEN|BUGCHECK: ====>
> >>>>>>>>>>> (d98) XEN|BUGCHECK: 0000007A: FFFFF6FC000171C8
> >>>>>> FFFFFFFFC0000185
> >>>>>>>>>>> 000000001BD6A860 FFFF
> >>>>>>>>>>> (d98) F80002E39000
> >>>>>>>>>>> (d98) XEN|BUGCHECK: CONTEXT (FFFFF8800310E530):
> >>>>>>>>>>> (d98) XEN|BUGCHECK: - GS = 002B
> >>>>>>>>>>> (d98) XEN|BUGCHECK: - FS = 0053
> >>>>>>>>>>> (d98) XEN|BUGCHECK: - ES = 002B
> >>>>>>>>>>> (d98) XEN|BUGCHECK: - DS = 002B
> >>>>>>>>>>> (d98) XEN|BUGCHECK: - SS = 0018
> >>>>>>>>>>> (d98) XEN|BUGCHECK: - CS = 0010
> >>>>>>>>>>> (d98) XEN|BUGCHECK: - EFLAGS = 00000086
> >>>>>>>>>>> (d98) XEN|BUGCHECK: - RDI = 00000000000171C8
> >>>>>>>>>>> (d98) XEN|BUGCHECK: - RSI = 00000000C0000185
> >>>>>>>>>>> (d98) XEN|BUGCHECK: - RBX = 00000000038AC8F8
> >>>>>>>>>>> (d98) XEN|BUGCHECK: - RDX = 0000000000000000
> >>>>>>>>>>> (d98) XEN|BUGCHECK: - RCX = 000000000310E530
> >>>>>>>>>>> (d98) XEN|BUGCHECK: - RAX = 000000002ECF4722
> >>>>>>>>>>> (d98) XEN|BUGCHECK: - RBP = 000000001BD6A860
> >>>>>>>>>>> (d98) XEN|BUGCHECK: - RIP = 00000000038A2A43
> >>>>>>>>>>> (d98) XEN|BUGCHECK: - RSP = 000000000310E510
> >>>>>>>>>>> (d98) XEN|BUGCHECK: - R8 = 0000000000000000
> >>>>>>>>>>> (d98) XEN|BUGCHECK: - R9 = 0000000000000000
> >>>>>>>>>>> (d98) XEN|BUGCHECK: - R10 = 0000000000000000
> >>>>>>>>>>> (d98) XEN|BUGCHECK: - R11 = 0000000000000000
> >>>>>>>>>>> (d98) XEN|BUGCHECK: - R12 = 000000000000007A
> >>>>>>>>>>> (d98) XEN|BUGCHECK: - R13 = 0000000000000001
> >>>>>>>>>>> (d98) XEN|BUGCHECK: - R14 = 0000000002E39000
> >>>>>>>>>>> (d98) XEN|BUGCHECK: - R15 = 0000000002CBAC40
> >>>>>>>>>>> (d98) XEN|BUGCHECK: STACK:
> >>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310EA20:
> (0000000000000003
> >>>>>>>>>>> 00000000038A50F0 00000000038A
> >>>>>>>>>>> (d98) 4860 000000000000007A) xen.sys + 00000000000049AC
> >>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310EA70:
> (00000000038AD0D0
> >>>>>>>>>>> 0000000000000000 000000000000
> >>>>>>>>>>> (d98) 0004 0000000002C83500) ntoskrnl.exe +
> 0000000000128585
> >>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310EAA0:
> (00000000038AD0D0
> >>>>>>>>>>> 0000000002C83500 000000000000
> >>>>>>>>>>> (d98) 000F 0000000001780660) ntoskrnl.exe +
> 0000000000167C0D
> >>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F170: (0000000003816470
> >>>>>>>>>>> 0000000002B4C8C1 000000000000
> >>>>>>>>>>> (d98) 00FE 0000000000000000) ntoskrnl.exe +
> 0000000000075CC4
> >>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F1B0:
> (000000000000007A
> >>>>>>>>>>> 00000000000171C8 00000000C000
> >>>>>>>>>>> (d98) 0185 000000001BD6A860) ntoskrnl.exe +
> 00000000000E8752
> >>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F290: (00000000038163B0
> >>>>>>>>>>> 000000000310F320 0000000002CB
> >>>>>>>>>>> (d98) D540 00000000038163B0) ntoskrnl.exe +
> 000000000009C91F
> >>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F360: (0000000000000000
> >>>>>>>>>>> 0000000000000008 00000000FFFF
> >>>>>>>>>>> (d98) FFFF 00000000003500F0) ntoskrnl.exe +
> 00000000000831B9
> >>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F4C0: (0000000000000008
> >>>>>>>>>>> 0000000002E39000 000000000000
> >>>>>>>>>>> (d98) 0000 0000000000000000) ntoskrnl.exe +
> 0000000000073CEE
> >>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F658:
> (0000000002E5CFD5
> >>>>>>>>>>> 0000000000000000 0000000003EB
> >>>>>>>>>>> (d98) 8710 00000000FFFFFFFF) ntoskrnl.exe +
> 000000000042C000
> >>>>>>>>>> If you need more tests/informations tell me and I'll post them.
> >>>>>>>>>> Thanks for any reply and sorry for my bad english.
> >>>>>>>>> Well, that tells me you had a 7A BSOD, which is a
> >>>>>>>> KERNEL_DATA_INPAGE_ERROR. The error status (param 2) was
> >>>> C0000185
> >>>>>> so
> >>>>>>>> that's a STATUS_IO_DEVICE_ERROR. The documentation at
> >>>>>>>> http://msdn.microsoft.com/en-
> >>>>>>>> gb/library/windows/hardware/ff559211%28v=vs.85%29.aspx tells
> >> me
> >>>> that
> >>>>>>>> this means:
> >>>>>>>>> "improper termination or defective cabling on SCSI devices or
> that
> >>>> two
> >>>>>>>> devices are trying to use the same IRQ."
> >>>>>>>>> But you said you had xenvbd already installed so you'll be using a
> >> PV
> >>>>>>>> storage path. Is there any indication of problems with your
> storage?
> >>>>>>>>>        Paul
> >>>>>>>> DomUs disk are all raw files in local dom0 disks, raid1 with "LSI
> Logic
> >>>>>>>> / Symbios Logic SAS2008 PCI-Express Fusion-MPT SAS-2" dom0
> >>>> partitions
> >>>>>>>> are GTP and fs ext4.
> >>>>>>>> Dom0 is wheezy with kernel is linux-image-3.16-0.bpo.2-amd64
> >> version
> >>>>>>>> 3.16.3-2~bpo70+1
> >>>>>>>> No kern or syslog errors, only many of these warning that
> someone
> >>>>>>>> replied me that should not be a problem:
> >>>>>>>> Oct 15 10:45:13 mtorMN01OU kernel: [773197.117518]
> xen:balloon:
> >>>>>>>> reserve_additional_memory: add_memory() failed: -17
> >>>>>>>> DomU now see disk as xen pvdisk, on xenvif install probably still
> was
> >>>>>>>> full emulated disk even if xenvbd was installed successful before
> >> xenvif
> >>>>>>>> install (failed with BSOD)
> >>>>>>>> The IRQ seems visible from xl dmesg output below, can you check
> >>>> them is
> >>>>>>>> have something wrong or strange, I see some of them "duplicate"
> >> but I
> >>>>>>>> not know if is correct.
> >>>>>>>>
> >>>>>>>> DomU xl cfg:
> >>>>>>>>> name='office1_w7'
> >>>>>>>>> builder="hvm"
> >>>>>>>>> memory=2048
> >>>>>>>>> vcpus=2
> >>>>>>>>> acpi_s3=0
> >>>>>>>>> acpi_s4=0
> >>>>>>>>> vif=['bridge=xenbr0,mac=00:16:3e:41:ae:8b']
> >>>>>>>>>
> >>
> disk=['/mnt/vm/disks/office1_w7.disk1.xm,raw,hda,rw',',raw,hdb,ro,cdrom'
> >>>>>>>> ]
> >>>>>>>>> boot='c'
> >>>>>>>>> device_model_version="qemu-xen"
> >>>>>>>>> viridian=1
> >>>>>>>>> vnc=0
> >>>>>>>>> keymap="it"
> >>>>>>>>> on_crash="destroy"
> >>>>>>>>> vga="qxl"
> >>>>>>>>> spice=1
> >>>>>>>>> spicehost='0.0.0.0'
> >>>>>>>>> spiceport=6001
> >>>>>>>>> spicedisable_ticketing=0
> >>>>>>>>> spicepasswd="password"
> >>>>>>>>> spicevdagent=1
> >>>>>>>>> spice_clipboard_sharing=0
> >>>>>>>>> spiceusbredirection=4
> >>>>>>>>> soundhw="hda"
> >>>>>>>>> localtime=1
> >>>>>>>> If you need more tests/informations tell me and I'll post them.
> >>>>>>>>
> >>>>>>> Do you have the qemu log (with xen platform logging enabled).
> This is
> >>>>>> where the PV drivers log failures/warnings.
> >>>>>>>       Paul
> >>>>>>>
> >>>>>>>
> >>>>>> I retried enabling xen platform debug in qemu trace but no add lines
> in
> >>>>>> log when I try to install xenvif and fails.
> >>>>>> I attach anyway the log if can be useful.
> >>>>> All I can see there is an apparently clean shutdown of domain 101; no
> >> sign
> >>>> of XENVIF and no sign of a BSOD.
> >>>>>> I'll also try to restore the backup of this night of the domU when I
> had
> >>>>>> the BSOD trying reproduce it with xen debug in qemu trace and
> >> different
> >>>>>> windows memory dump options.
> >>>>> Ok.
> >>>>>
> >>>>>      Paul
> >>>>>
> >>>> Reproduced it but now with xen platform trace enabled in qemu. (see
> >>>> attachment)
> >>>> Dump of memory instead is not present also in this case (probably
> >>>> because disk is "failed").
> >>> You're using emulate disk in this case. Did your BSOD not indicate that it
> >> was dumping?
> >>>     Paul
> >>>
> >> I have to time to see if do a dump but I suppose it can't write to disk
> >> since its driver fails.
> >> Log qemu is not enough? You need the windows memory dump to find
> and
> >> fix
> >> the bug?
> > I don't know what the bug is. My guess is that it's a deadlock somewhere
> which is causing Windows to believe there's a storage issue, but since the
> stack is entirely in the kernel and without a crashdump I cannot decode to
> symbols there's not much more I can do unless I happen to repro.
> >
> >    Paul
> >
> >> If needed tomorrow I'll do other tests.
> I retried and seems always reproducible on same domU.
> Now I disabled automatic reboot on crash and do a screenshot (in
> attachment) but memory dump is still missed :( Probably with disk
> "failed" can't write.
> Is there another way to take/save the memory dump or the data you need?
> 

Could you remove xenvbd and make sure the emulated disk is functional. Then, install Xenvif and see if it BSODs.

> About IRQ you checked in xl dmesg I posted if are all ok?
> 

Yes, I don't think there's a problem there.

  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 Fri Oct 17 11:02:20 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 17 Oct 2014 11:02: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 1Xf5IZ-00059t-Vc; Fri, 17 Oct 2014 11:02:19 +0000
Received: from mail6.bemta4.messagelabs.com ([85.158.143.247])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1Xf5IY-00059f-Eg
	for win-pv-devel@lists.xenproject.org; Fri, 17 Oct 2014 11:02:18 +0000
Received: from [85.158.143.35] by server-2.bemta-4.messagelabs.com id
	0D/B0-10419-937F0445; Fri, 17 Oct 2014 11:02:17 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-8.tower-21.messagelabs.com!1413543735!13604629!1
X-Originating-IP: [209.85.212.174]
X-SpamReason: No, hits=2.2 required=7.0 tests=BIZ_TLD,BODY_RANDOM_LONG
X-StarScan-Received: 
X-StarScan-Version: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 26598 invoked from network); 17 Oct 2014 11:02:16 -0000
Received: from mail-wi0-f174.google.com (HELO mail-wi0-f174.google.com)
	(209.85.212.174)
	by server-8.tower-21.messagelabs.com with RC4-SHA encrypted SMTP;
	17 Oct 2014 11:02:16 -0000
Received: by mail-wi0-f174.google.com with SMTP id h11so1910380wiw.13
	for <win-pv-devel@lists.xenproject.org>;
	Fri, 17 Oct 2014 04:02:15 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:message-id:date:from:user-agent:mime-version:to
	:subject:references:in-reply-to:content-type;
	bh=k1kPphSwRiDz5e1E5EASmv+lSW5wq+XKltuUgw8ZxGo=;
	b=lraMWX5MnAteXLTkwTljEzNvnG+kGO4NUux0qW4CEbnsUiQFS0kXzVW2BUwAwAkzAR
	sgWxXbPCuO07fkqgUAamNEUaUL7P6qzHcjD55LJo77zboW+vR5jqTmqFeP7QguFwOtDU
	BHk3SS3af+ktv2bj78mHRgxpRit4L0FKlGtAujEuw3AS9qgJ4nX9nj7OZxhDwH097x6w
	hrqAffiuCZrYBLOfsUUXdUqBtqwfLgMwohYjI4Vr2I7z4i4I01POSovM0DLBZxQ45vei
	d1P2deXDcQYuaSwfYVlS+nu/2ogRvFBMEqLmLthPuliUwPJaYALO04H7tdkCvFTfL38b
	rQ6A==
X-Gm-Message-State: ALoCoQlcCgXqerVem7ITk9ioPB3I7Tt/jTdkujGmZlmKSbPYYUHgyTabPcaHE4aYvWOrfnw+PA0i
X-Received: by 10.194.203.201 with SMTP id ks9mr8999459wjc.105.1413543735509; 
	Fri, 17 Oct 2014 04:02:15 -0700 (PDT)
Received: from [192.168.1.15] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by mx.google.com with ESMTPSA id u9sm5248525wiv.8.2014.10.17.04.02.13
	for <multiple recipients>
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Fri, 17 Oct 2014 04:02:14 -0700 (PDT)
Message-ID: <5440F740.4070701@m2r.biz>
Date: Fri, 17 Oct 2014 13:02:24 +0200
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64;
	rv:24.0) Gecko/20100101 Thunderbird/24.6.0
MIME-Version: 1.0
To: Paul Durrant <Paul.Durrant@citrix.com>, 
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <543F887B.5030500@m2r.biz>	<9AAE0902D5BC7E449B7C8E4E778ABCD0111050FF@AMSPEX01CL01.citrite.net>	<543F912C.8000504@m2r.biz>	<9AAE0902D5BC7E449B7C8E4E778ABCD01110526F@AMSPEX01CL01.citrite.net>	<543FA4F6.5090804@m2r.biz>	<9AAE0902D5BC7E449B7C8E4E778ABCD0111053EA@AMSPEX01CL01.citrite.net>	<543FCA93.2010805@m2r.biz>	<9AAE0902D5BC7E449B7C8E4E778ABCD0111057A2@AMSPEX01CL01.citrite.net>	<543FDA2D.2090900@m2r.biz>	<9AAE0902D5BC7E449B7C8E4E778ABCD0111058E6@AMSPEX01CL01.citrite.net>	<543FDE85.1030908@m2r.biz>	<9AAE0902D5BC7E449B7C8E4E778ABCD011105A08@AMSPEX01CL01.citrite.net>
	<5440E39B.6080104@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD01110668E@AMSPEX01CL01.citrite.net>
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD01110668E@AMSPEX01CL01.citrite.net>
Content-Type: multipart/mixed; boundary="------------080104040904080607010802"
Subject: Re: [win-pv-devel] Blue screen on xenvif install
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.
--------------080104040904080607010802
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

Il 17/10/2014 11:48, Paul Durrant ha scritto:
>> -----Original Message-----
>> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
>> bounces@lists.xenproject.org] On Behalf Of Fabio Fantoni
>> Sent: 17 October 2014 10:39
>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>> Subject: Re: [win-pv-devel] Blue screen on xenvif install
>>
>> Il 16/10/2014 17:58, Paul Durrant ha scritto:
>>>> -----Original Message-----
>>>> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
>>>> bounces@lists.xenproject.org] On Behalf Of Fabio Fantoni
>>>> Sent: 16 October 2014 16:05
>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>>>> Subject: Re: [win-pv-devel] Blue screen on xenvif install
>>>>
>>>> Il 16/10/2014 16:54, Paul Durrant ha scritto:
>>>>>> -----Original Message-----
>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>>>> Sent: 16 October 2014 15:46
>>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>>>>>> Subject: Re: Blue screen on xenvif install
>>>>>>
>>>>>> Il 16/10/2014 15:45, Paul Durrant ha scritto:
>>>>>>>> -----Original Message-----
>>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>>>>>> Sent: 16 October 2014 14:40
>>>>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>>>>>>>> Subject: Re: Blue screen on xenvif install
>>>>>>>>
>>>>>>>> Il 16/10/2014 13:04, Paul Durrant ha scritto:
>>>>>>>>>> -----Original Message-----
>>>>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>>>>>>>> Sent: 16 October 2014 11:59
>>>>>>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>>>>>>>>>> Subject: Re: Blue screen on xenvif install
>>>>>>>>>>
>>>>>>>>>> Il 16/10/2014 12:00, Paul Durrant ha scritto:
>>>>>>>>>>>> -----Original Message-----
>>>>>>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>>>>>>>>>> Sent: 16 October 2014 10:35
>>>>>>>>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>>>>>>>>>>>> Subject: Re: Blue screen on xenvif install
>>>>>>>>>>>>
>>>>>>>>>>>> Il 16/10/2014 10:59, Paul Durrant ha scritto:
>>>>>>>>>>>>>> -----Original Message-----
>>>>>>>>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>>>>>>>>>>>> Sent: 16 October 2014 09:58
>>>>>>>>>>>>>> To: win-pv-devel@lists.xenproject.org
>>>>>>>>>>>>>> Cc: Paul Durrant
>>>>>>>>>>>>>> Subject: Blue screen on xenvif install
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Today I tried to install new winpv driver to other 3 windows 7
>>>> pro
>>>>>> 64
>>>>>>>>>>>>>> bit domUs.
>>>>>>>>>>>>>> Days ago I installed them successful on one windows 7 pro 64
>>>> bit
>>>>>> and
>>>>>>>>>> one
>>>>>>>>>>>>>> windows 8.1 enterprise 64 bit.
>>>>>>>>>>>>>> On first domUs I tried to install them today I installed xenbus
>>>> and
>>>>>>>>>>>>>> xenvbd successful but on xenvif install windows crashed
>> with
>>>> blue
>>>>>>>>>>>>>> screen, if I saw it correctly was an kernel in-page error or
>>>>>> something
>>>>>>>>>>>>>> similar.
>>>>>>>>>>>>>> After reboot I retried to install xenvif but now always fails.
>>>>>>>>>>>>>>
>>>>>>>>>>>>> Sounds odd. Do you have a MEMORY.DMP?
>>>>>>>>>>>>>
>>>>>>>>>>>>>          Paul
>>>>>>>>>>>> Windows is setted to write dump of kernel memory on system
>>>> error
>>>>>>>> but
>>>>>>>>>>>> %systemroot%\memory.dmp is missed :(
>>>>>>>>>>>> I also checked the windows events log but I found only kernel-
>>>>>> power
>>>>>>>> as
>>>>>>>>>>>> critical that seems not contains useful data.
>>>>>>>>>>>>
>>>>>>>>>>>> I found probably useful data in xl dmesg (I copied all below
>> from
>>>>>> domU
>>>>>>>>>>>> start to xen bug):
>>>>>>>>>>>>> (d98) HVM Loader
>>>>>>>>>>>>> (d98) Detected Xen v4.5-unstable
>>>>>>>>>>>>> (d98) Xenbus rings @0xfeffc000, event channel 1
>>>>>>>>>>>>> (d98) System requested SeaBIOS
>>>>>>>>>>>>> (d98) CPU speed is 2660 MHz
>>>>>>>>>>>>> (d98) Relocating guest memory for lowmem MMIO space
>>>> disabled
>>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 0 changed 0 -> 5
>>>>>>>>>>>>> (d98) PCI-ISA link 0 routed to IRQ5
>>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 1 changed 0 -> 10
>>>>>>>>>>>>> (d98) PCI-ISA link 1 routed to IRQ10
>>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 2 changed 0 -> 11
>>>>>>>>>>>>> (d98) PCI-ISA link 2 routed to IRQ11
>>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 3 changed 0 -> 5
>>>>>>>>>>>>> (d98) PCI-ISA link 3 routed to IRQ5
>>>>>>>>>>>>> (d98) pci dev 01:3 INTA->IRQ10
>>>>>>>>>>>>> (d98) pci dev 02:0 INTA->IRQ11
>>>>>>>>>>>>> (d98) pci dev 03:0 INTA->IRQ5
>>>>>>>>>>>>> (d98) pci dev 04:0 INTA->IRQ5
>>>>>>>>>>>>> (d98) pci dev 05:0 INTA->IRQ10
>>>>>>>>>>>>> (d98) pci dev 06:0 INTA->IRQ11
>>>>>>>>>>>>> (d98) pci dev 1d:0 INTA->IRQ10
>>>>>>>>>>>>> (d98) pci dev 1d:1 INTB->IRQ11
>>>>>>>>>>>>> (d98) pci dev 1d:2 INTC->IRQ5
>>>>>>>>>>>>> (d98) pci dev 1d:7 INTD->IRQ5
>>>>>>>>>>>>> (d98) No RAM in high memory; setting high_mem resource
>> base
>>>> to
>>>>>>>>>>>> 100000000
>>>>>>>>>>>>> (d98) pci dev 05:0 bar 10 size 004000000: 0f0000000
>>>>>>>>>>>>> (d98) pci dev 05:0 bar 14 size 004000000: 0f4000000
>>>>>>>>>>>>> (d98) pci dev 02:0 bar 14 size 001000000: 0f8000008
>>>>>>>>>>>>> (d98) pci dev 06:0 bar 30 size 000040000: 0f9000000
>>>>>>>>>>>>> (d98) pci dev 05:0 bar 30 size 000010000: 0f9040000
>>>>>>>>>>>>> (d98) pci dev 03:0 bar 10 size 000004000: 0f9050000
>>>>>>>>>>>>> (d98) pci dev 05:0 bar 18 size 000002000: 0f9054000
>>>>>>>>>>>>> (d98) pci dev 04:0 bar 14 size 000001000: 0f9056000
>>>>>>>>>>>>> (d98) pci dev 1d:7 bar 10 size 000001000: 0f9057000
>>>>>>>>>>>>> (d98) pci dev 02:0 bar 10 size 000000100: 00000c001
>>>>>>>>>>>>> (d98) pci dev 06:0 bar 10 size 000000100: 00000c101
>>>>>>>>>>>>> (d98) pci dev 06:0 bar 14 size 000000100: 0f9058000
>>>>>>>>>>>>> (d98) pci dev 04:0 bar 10 size 000000020: 00000c201
>>>>>>>>>>>>> (d98) pci dev 05:0 bar 1c size 000000020: 00000c221
>>>>>>>>>>>>> (d98) pci dev 1d:0 bar 20 size 000000020: 00000c241
>>>>>>>>>>>>> (d98) pci dev 1d:1 bar 20 size 000000020: 00000c261
>>>>>>>>>>>>> (d98) pci dev 1d:2 bar 20 size 000000020: 00000c281
>>>>>>>>>>>>> (d98) pci dev 01:1 bar 20 size 000000010: 00000c2a1
>>>>>>>>>>>>> (d98) Multiprocessor initialisation:
>>>>>>>>>>>>> (d98)  - CPU0 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8]
>> ...
>>>>>>>>>>>>> done.
>>>>>>>>>>>>> (d98)  - CPU1 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8]
>> ...
>>>>>>>>>>>>> done.
>>>>>>>>>>>>> (d98) Testing HVM environment:
>>>>>>>>>>>>> (d98)  - REP INSB across page boundaries ... passed
>>>>>>>>>>>>> (d98)  - GS base MSRs and SWAPGS ... passed
>>>>>>>>>>>>> (d98) Passed 2 of 2 tests
>>>>>>>>>>>>> (d98) Writing SMBIOS tables ...
>>>>>>>>>>>>> (d98) Loading SeaBIOS ...
>>>>>>>>>>>>> (d98) Creating MP tables ...
>>>>>>>>>>>>> (d98) Loading ACPI ...
>>>>>>>>>>>>> (d98) S3 disabled
>>>>>>>>>>>>> (d98) S4 disabled
>>>>>>>>>>>>> (d98) vm86 TSS at fc00a100
>>>>>>>>>>>>> (d98) BIOS map:
>>>>>>>>>>>>> (d98)  10000-100d3: Scratch space
>>>>>>>>>>>>> (d98)  c0000-fffff: Main BIOS
>>>>>>>>>>>>> (d98) E820 table:
>>>>>>>>>>>>> (d98)  [00]: 00000000:00000000 - 00000000:000a0000: RAM
>>>>>>>>>>>>> (d98)  HOLE: 00000000:000a0000 - 00000000:000c0000
>>>>>>>>>>>>> (d98)  [01]: 00000000:000c0000 - 00000000:00100000:
>> RESERVED
>>>>>>>>>>>>> (d98)  [02]: 00000000:00100000 - 00000000:78000000: RAM
>>>>>>>>>>>>> (d98)  HOLE: 00000000:78000000 - 00000000:fc000000
>>>>>>>>>>>>> (d98)  [03]: 00000000:fc000000 - 00000001:00000000: RESERVED
>>>>>>>>>>>>> (d98) Invoking SeaBIOS ...
>>>>>>>>>>>>> (d98) SeaBIOS (version
>>>>>>>>>>>>> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
>>>>>>>>>>>>> (d98)
>>>>>>>>>>>>> (d98) Found Xen hypervisor signature at 40000100
>>>>>>>>>>>>> (d98) Running on QEMU (i440fx)
>>>>>>>>>>>>> (d98) xen: copy e820...
>>>>>>>>>>>>> (d98) Relocating init from 0x000df619 to 0x77fae600 (size
>> 71995)
>>>>>>>>>>>>> (d98) CPU Mhz=2660
>>>>>>>>>>>>> (d98) Found 13 PCI devices (max PCI bus is 00)
>>>>>>>>>>>>> (d98) Allocated Xen hypercall page at 77fff000
>>>>>>>>>>>>> (d98) Detected Xen v4.5-unstable
>>>>>>>>>>>>> (d98) xen: copy BIOS tables...
>>>>>>>>>>>>> (d98) Copying SMBIOS entry point from 0x00010010 to
>>>> 0x000f0f40
>>>>>>>>>>>>> (d98) Copying MPTABLE from 0xfc001170/fc001180 to
>> 0x000f0e40
>>>>>>>>>>>>> (d98) Copying PIR from 0x00010030 to 0x000f0dc0
>>>>>>>>>>>>> (d98) Copying ACPI RSDP from 0x000100b0 to 0x000f0d90
>>>>>>>>>>>>> (d98) Using pmtimer, ioport 0xb008
>>>>>>>>>>>>> (d98) Scan for VGA option rom
>>>>>>>>>>>>> (d98) Running option rom at c000:0003
>>>>>>>>>>>>> (XEN) stdvga.c:147:d98v0 entering stdvga and caching modes
>>>>>>>>>>>>> (d98) pmm call arg1=0
>>>>>>>>>>>>> (d98) Turning on vga text mode console
>>>>>>>>>>>>> (d98) SeaBIOS (version
>>>>>>>>>>>>> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
>>>>>>>>>>>>> (d98) Machine UUID f4cdeb74-0db1-4748-948d-42579a494120
>>>>>>>>>>>>> (d98) EHCI init on dev 00:1d.7 (regs=0xf9057020)
>>>>>>>>>>>>> (d98) Found 0 lpt ports
>>>>>>>>>>>>> (d98) Found 0 serial ports
>>>>>>>>>>>>> (d98) ATA controller 1 at 1f0/3f4/0 (irq 14 dev 9)
>>>>>>>>>>>>> (d98) ATA controller 2 at 170/374/0 (irq 15 dev 9)
>>>>>>>>>>>>> (d98) ata0-0: QEMU HARDDISK ATA-7 Hard-Disk (40720
>> MiBytes)
>>>>>>>>>>>>> (d98) Searching bootorder for:
>>>> /pci@i0cf8/*@1,1/drive@0/disk@0
>>>>>>>>>>>>> (d98) DVD/CD [ata0-1: QEMU DVD-ROM ATAPI-4 DVD/CD]
>>>>>>>>>>>>> (d98) Searching bootorder for:
>>>> /pci@i0cf8/*@1,1/drive@0/disk@1
>>>>>>>>>>>>> (d98) UHCI init on dev 00:1d.0 (io=c240)
>>>>>>>>>>>>> (d98) UHCI init on dev 00:1d.1 (io=c260)
>>>>>>>>>>>>> (d98) UHCI init on dev 00:1d.2 (io=c280)
>>>>>>>>>>>>> (d98) PS2 keyboard initialized
>>>>>>>>>>>>> (d98) All threads complete.
>>>>>>>>>>>>> (d98) Scan for option roms
>>>>>>>>>>>>> (d98) Running option rom at c980:0003
>>>>>>>>>>>>> (d98) pmm call arg1=1
>>>>>>>>>>>>> (d98) pmm call arg1=0
>>>>>>>>>>>>> (d98) pmm call arg1=1
>>>>>>>>>>>>> (d98) pmm call arg1=0
>>>>>>>>>>>>> (d98) Searching bootorder for: /pci@i0cf8/*@6
>>>>>>>>>>>>> (d98)
>>>>>>>>>>>>> (d98) Press F12 for boot menu.
>>>>>>>>>>>>> (d98)
>>>>>>>>>>>>> (d98) Searching bootorder for: HALT
>>>>>>>>>>>>> (d98) drive 0x000f0d40: PCHS=16383/16/63 translation=lba
>>>>>>>>>>>>> LCHS=1024/255/63 s=83394560
>>>>>>>>>>>>> (d98) Space available for UMB: ca800-ee800, f0000-f0ce0
>>>>>>>>>>>>> (d98) Returned 258048 bytes of ZoneHigh
>>>>>>>>>>>>> (d98) e820 map has 6 items:
>>>>>>>>>>>>> (d98)   0: 0000000000000000 - 000000000009fc00 = 1 RAM
>>>>>>>>>>>>> (d98)   1: 000000000009fc00 - 00000000000a0000 = 2 RESERVED
>>>>>>>>>>>>> (d98)   2: 00000000000f0000 - 0000000000100000 = 2 RESERVED
>>>>>>>>>>>>> (d98)   3: 0000000000100000 - 0000000077fff000 = 1 RAM
>>>>>>>>>>>>> (d98)   4: 0000000077fff000 - 0000000078000000 = 2 RESERVED
>>>>>>>>>>>>> (d98)   5: 00000000fc000000 - 0000000100000000 = 2 RESERVED
>>>>>>>>>>>>> (d98) enter handle_19:
>>>>>>>>>>>>> (d98)   NULL
>>>>>>>>>>>>> (d98) Booting from Hard Disk...
>>>>>>>>>>>>> (d98) Booting from 0000:7c00
>>>>>>>>>>>>> (XEN) d98: VIRIDIAN GUEST_OS_ID: vendor: 1 os: 4 major: 6
>>>> minor:
>>>>>> 1
>>>>>>>> sp:
>>>>>>>>>>>>> 1 build: 1db1
>>>>>>>>>>>>> (XEN) d98: VIRIDIAN HYPERCALL: enabled: 1 pfn: 3ffff
>>>>>>>>>>>>> (XEN) d98v0: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffe
>>>>>>>>>>>>> (XEN) d98v1: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffd
>>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 0 changed 5 -> 0
>>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 1 changed 10 -> 0
>>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 2 changed 11 -> 0
>>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 3 changed 5 -> 0
>>>>>>>>>>>>> (XEN) irq.c:380: Dom98 callback via changed to GSI 24
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: ====>
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 0000007A: FFFFF6FC000171C8
>>>>>>>> FFFFFFFFC0000185
>>>>>>>>>>>>> 000000001BD6A860 FFFF
>>>>>>>>>>>>> (d98) F80002E39000
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: CONTEXT (FFFFF8800310E530):
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - GS = 002B
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - FS = 0053
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - ES = 002B
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - DS = 002B
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - SS = 0018
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - CS = 0010
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - EFLAGS = 00000086
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RDI = 00000000000171C8
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RSI = 00000000C0000185
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RBX = 00000000038AC8F8
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RDX = 0000000000000000
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RCX = 000000000310E530
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RAX = 000000002ECF4722
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RBP = 000000001BD6A860
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RIP = 00000000038A2A43
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RSP = 000000000310E510
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R8 = 0000000000000000
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R9 = 0000000000000000
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R10 = 0000000000000000
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R11 = 0000000000000000
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R12 = 000000000000007A
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R13 = 0000000000000001
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R14 = 0000000002E39000
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R15 = 0000000002CBAC40
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: STACK:
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310EA20:
>> (0000000000000003
>>>>>>>>>>>>> 00000000038A50F0 00000000038A
>>>>>>>>>>>>> (d98) 4860 000000000000007A) xen.sys + 00000000000049AC
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310EA70:
>> (00000000038AD0D0
>>>>>>>>>>>>> 0000000000000000 000000000000
>>>>>>>>>>>>> (d98) 0004 0000000002C83500) ntoskrnl.exe +
>> 0000000000128585
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310EAA0:
>> (00000000038AD0D0
>>>>>>>>>>>>> 0000000002C83500 000000000000
>>>>>>>>>>>>> (d98) 000F 0000000001780660) ntoskrnl.exe +
>> 0000000000167C0D
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F170: (0000000003816470
>>>>>>>>>>>>> 0000000002B4C8C1 000000000000
>>>>>>>>>>>>> (d98) 00FE 0000000000000000) ntoskrnl.exe +
>> 0000000000075CC4
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F1B0:
>> (000000000000007A
>>>>>>>>>>>>> 00000000000171C8 00000000C000
>>>>>>>>>>>>> (d98) 0185 000000001BD6A860) ntoskrnl.exe +
>> 00000000000E8752
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F290: (00000000038163B0
>>>>>>>>>>>>> 000000000310F320 0000000002CB
>>>>>>>>>>>>> (d98) D540 00000000038163B0) ntoskrnl.exe +
>> 000000000009C91F
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F360: (0000000000000000
>>>>>>>>>>>>> 0000000000000008 00000000FFFF
>>>>>>>>>>>>> (d98) FFFF 00000000003500F0) ntoskrnl.exe +
>> 00000000000831B9
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F4C0: (0000000000000008
>>>>>>>>>>>>> 0000000002E39000 000000000000
>>>>>>>>>>>>> (d98) 0000 0000000000000000) ntoskrnl.exe +
>> 0000000000073CEE
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F658:
>> (0000000002E5CFD5
>>>>>>>>>>>>> 0000000000000000 0000000003EB
>>>>>>>>>>>>> (d98) 8710 00000000FFFFFFFF) ntoskrnl.exe +
>> 000000000042C000
>>>>>>>>>>>> If you need more tests/informations tell me and I'll post them.
>>>>>>>>>>>> Thanks for any reply and sorry for my bad english.
>>>>>>>>>>> Well, that tells me you had a 7A BSOD, which is a
>>>>>>>>>> KERNEL_DATA_INPAGE_ERROR. The error status (param 2) was
>>>>>> C0000185
>>>>>>>> so
>>>>>>>>>> that's a STATUS_IO_DEVICE_ERROR. The documentation at
>>>>>>>>>> http://msdn.microsoft.com/en-
>>>>>>>>>> gb/library/windows/hardware/ff559211%28v=vs.85%29.aspx tells
>>>> me
>>>>>> that
>>>>>>>>>> this means:
>>>>>>>>>>> "improper termination or defective cabling on SCSI devices or
>> that
>>>>>> two
>>>>>>>>>> devices are trying to use the same IRQ."
>>>>>>>>>>> But you said you had xenvbd already installed so you'll be using a
>>>> PV
>>>>>>>>>> storage path. Is there any indication of problems with your
>> storage?
>>>>>>>>>>>         Paul
>>>>>>>>>> DomUs disk are all raw files in local dom0 disks, raid1 with "LSI
>> Logic
>>>>>>>>>> / Symbios Logic SAS2008 PCI-Express Fusion-MPT SAS-2" dom0
>>>>>> partitions
>>>>>>>>>> are GTP and fs ext4.
>>>>>>>>>> Dom0 is wheezy with kernel is linux-image-3.16-0.bpo.2-amd64
>>>> version
>>>>>>>>>> 3.16.3-2~bpo70+1
>>>>>>>>>> No kern or syslog errors, only many of these warning that
>> someone
>>>>>>>>>> replied me that should not be a problem:
>>>>>>>>>> Oct 15 10:45:13 mtorMN01OU kernel: [773197.117518]
>> xen:balloon:
>>>>>>>>>> reserve_additional_memory: add_memory() failed: -17
>>>>>>>>>> DomU now see disk as xen pvdisk, on xenvif install probably still
>> was
>>>>>>>>>> full emulated disk even if xenvbd was installed successful before
>>>> xenvif
>>>>>>>>>> install (failed with BSOD)
>>>>>>>>>> The IRQ seems visible from xl dmesg output below, can you check
>>>>>> them is
>>>>>>>>>> have something wrong or strange, I see some of them "duplicate"
>>>> but I
>>>>>>>>>> not know if is correct.
>>>>>>>>>>
>>>>>>>>>> DomU xl cfg:
>>>>>>>>>>> name='office1_w7'
>>>>>>>>>>> builder="hvm"
>>>>>>>>>>> memory=2048
>>>>>>>>>>> vcpus=2
>>>>>>>>>>> acpi_s3=0
>>>>>>>>>>> acpi_s4=0
>>>>>>>>>>> vif=['bridge=xenbr0,mac=00:16:3e:41:ae:8b']
>>>>>>>>>>>
>> disk=['/mnt/vm/disks/office1_w7.disk1.xm,raw,hda,rw',',raw,hdb,ro,cdrom'
>>>>>>>>>> ]
>>>>>>>>>>> boot='c'
>>>>>>>>>>> device_model_version="qemu-xen"
>>>>>>>>>>> viridian=1
>>>>>>>>>>> vnc=0
>>>>>>>>>>> keymap="it"
>>>>>>>>>>> on_crash="destroy"
>>>>>>>>>>> vga="qxl"
>>>>>>>>>>> spice=1
>>>>>>>>>>> spicehost='0.0.0.0'
>>>>>>>>>>> spiceport=6001
>>>>>>>>>>> spicedisable_ticketing=0
>>>>>>>>>>> spicepasswd="password"
>>>>>>>>>>> spicevdagent=1
>>>>>>>>>>> spice_clipboard_sharing=0
>>>>>>>>>>> spiceusbredirection=4
>>>>>>>>>>> soundhw="hda"
>>>>>>>>>>> localtime=1
>>>>>>>>>> If you need more tests/informations tell me and I'll post them.
>>>>>>>>>>
>>>>>>>>> Do you have the qemu log (with xen platform logging enabled).
>> This is
>>>>>>>> where the PV drivers log failures/warnings.
>>>>>>>>>        Paul
>>>>>>>>>
>>>>>>>>>
>>>>>>>> I retried enabling xen platform debug in qemu trace but no add lines
>> in
>>>>>>>> log when I try to install xenvif and fails.
>>>>>>>> I attach anyway the log if can be useful.
>>>>>>> All I can see there is an apparently clean shutdown of domain 101; no
>>>> sign
>>>>>> of XENVIF and no sign of a BSOD.
>>>>>>>> I'll also try to restore the backup of this night of the domU when I
>> had
>>>>>>>> the BSOD trying reproduce it with xen debug in qemu trace and
>>>> different
>>>>>>>> windows memory dump options.
>>>>>>> Ok.
>>>>>>>
>>>>>>>       Paul
>>>>>>>
>>>>>> Reproduced it but now with xen platform trace enabled in qemu. (see
>>>>>> attachment)
>>>>>> Dump of memory instead is not present also in this case (probably
>>>>>> because disk is "failed").
>>>>> You're using emulate disk in this case. Did your BSOD not indicate that it
>>>> was dumping?
>>>>>      Paul
>>>>>
>>>> I have to time to see if do a dump but I suppose it can't write to disk
>>>> since its driver fails.
>>>> Log qemu is not enough? You need the windows memory dump to find
>> and
>>>> fix
>>>> the bug?
>>> I don't know what the bug is. My guess is that it's a deadlock somewhere
>> which is causing Windows to believe there's a storage issue, but since the
>> stack is entirely in the kernel and without a crashdump I cannot decode to
>> symbols there's not much more I can do unless I happen to repro.
>>>     Paul
>>>
>>>> If needed tomorrow I'll do other tests.
>> I retried and seems always reproducible on same domU.
>> Now I disabled automatic reboot on crash and do a screenshot (in
>> attachment) but memory dump is still missed :( Probably with disk
>> "failed" can't write.
>> Is there another way to take/save the memory dump or the data you need?
>>
> Could you remove xenvbd and make sure the emulated disk is functional. Then, install Xenvif and see if it BSODs.

Now I tried to install xenvif without install xenvbd and installation is 
ok, after I installed xennet (ok), xenvbd (ok) and xeniface but on this 
latest same blue screen.
I can (and I must try) install all except xenvbd?
I also attached the new test's qemu log.

Thanks for any reply.

>
>> About IRQ you checked in xl dmesg I posted if are all ok?
>>
> Yes, I don't think there's a problem there.
>
>    Paul
>
>> Thanks for any reply and sorry for my bad english.


--------------080104040904080607010802
Content-Type: text/plain; charset=windows-1252;
 name="qemu-dm-office1_w7.log"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
 filename="qemu-dm-office1_w7.log"

(/usr/sbin/xl:9006): Spice-Warning **: reds.c:1863:reds_handle_ticket: Invalid password
main_channel_link: add main channel client
main_channel_handle_parsed: net test: latency 5.835000 ms, bitrate 295484057 bps (281.795556 Mbps)
inputs_connect: inputs channel client create
red_dispatcher_set_cursor_peer: 
main_channel_handle_parsed: agent start
main_channel_handle_parsed: agent start
xen_platform_log xen platform: XEN|DllInitialize: XEN 8.0.0 (0) (13.10.2014)
xen_platform_log xen platform: XEN|SystemGetStartOptions:  TESTSIGNING  NOEXECUTE=OPTIN
xen_platform_log xen platform: XEN|SystemGetVersionInformation: KERNEL: 6.1 (BUILD 7601) PLATFORM WIN32_NT (x64)
xen_platform_log xen platform: XEN|SystemGetVersionInformation: SP: 1.0 ()
xen_platform_log xen platform: XEN|SystemGetVersionInformation: SUITES:
xen_platform_log xen platform: XEN|SystemGetVersionInformation: - TERMINAL
xen_platform_log xen platform: XEN|SystemGetVersionInformation: - SINGLEUSERTS
xen_platform_log xen platform: XEN|SystemGetVersionInformation: TYPE: WORKSTATION
xen_platform_log xen platform: XEN|SystemGetMemoryInformation: RANGE[0] 00000000.00001000 - 00000000.0009efff
xen_platform_log xen platform: XEN|SystemGetMemoryInformation: RANGE[1] 00000000.00100000 - 00000000.77ffefff
xen_platform_log xen platform: XEN|SystemCpuInformation: ====> (0)
xen_platform_log xen platform: XEN|SystemCpuInformation: Manufacturer: GenuineIntel
xen_platform_log xen platform: XEN|SystemCpuInformation: Local APIC ID: 00
xen_platform_log xen platform: XEN|SystemCpuInformation: <==== (0)
xen_platform_log xen platform: XEN|SystemCpuInformation: ====> (1)
xen_platform_log xen platform: XEN|SystemCpuInformation: Manufacturer: GenuineIntel
xen_platform_log xen platform: XEN|SystemCpuInformation: Local APIC ID: 02
xen_platform_log xen platform: XEN|SystemCpuInformation: <==== (1)
xen_platform_log xen platform: XEN|HypercallInitialize: XEN 4.5
xen_platform_log xen platform: XEN|HypercallInitialize: INTERFACE 0x00040300
xen_platform_log xen platform: XEN|HypercallInitialize: HypercallPfn[0]: 0000000000074505
xen_platform_log xen platform: XENBUS|DriverEntry: XENBUS 8.0.0 (0) (13.10.2014)
xen_platform_log xen platform: XENBUS|FdoCreate: FFFFFA80028CCA30 (XS0001 XENBUS) [ACTIVE]
xen_platform_log xen platform: SHARED_INFO: MAP XENMAPSPACE_shared_info @ 00000000.f8000000
xen_platform_log xen platform: STORE: PAGE @ 00000000.feffc000
xen_platform_log xen platform: XENBUS|FdoScan: ====>
xen_platform_log xen platform: XENBUS|FdoSuspend: ====>
xen_platform_log xen platform: XENBUS|FdoBalloon: ====>
xen_platform_log xen platform: XENBUS|PdoCreate: FFFFFA8003EBC7F0 (VBD 00000001)
xen_platform_log xen platform: XENBUS|PdoCreate: FFFFFA800283CD40 (VIF 00000001)
xen_platform_log xen platform: XENBUS|PdoCreate: FFFFFA80024CA720 (IFACE 00000001)
xen_platform_log xen platform: XENVIF|DriverEntry: XENVIF 8.0.0 (0) (24.09.2014)
xen_platform_log xen platform: XENFILT|DriverEntry: XENFILT 8.0.0 (0) (13.10.2014)
xen_platform_log xen platform: XENFILT|DriverSetActiveDeviceInstance: PCI\VEN_5853&DEV_0001&SUBSYS_00015853&REV_01/10
xen_platform_log xen platform: XENFILT|UnplugCheckForPVDisks: NOT PRESENT
xen_platform_log xen platform: XENFILT|UnplugCheckForPVNics: NOT PRESENT
xen_platform_log xen platform: UNPLUG: PRE-AMBLE (DRIVERS NOT BLACKLISTED)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VIF: BUS_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VIF: DEBUG_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VIF: SUSPEND_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VIF: EVTCHN_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VIF: STORE_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VIF: RANGE_SET_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VIF: CACHE_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VIF: GNTTAB_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENVIF|FdoCreate: FFFFFA8002D956B0 (XS0001 XENVIF)
xen_platform_log xen platform: XENFILT|DriverUnload: XENFILT 8.0.0 (0) (13.10.2014)
xen_platform_log xen platform: XENVIF|__PdoSetPermanentAddress: 0 00:16:3E:41:AE:8B
xen_platform_log xen platform: XENVIF|__PdoSetContainerID: 0 {9999882d-5ecc-503e-924b-b4b937e3da35}
xen_platform_log xen platform: XENVIF|PdoCreate: FFFFFA8002739210 (0 00000001)
xen_platform_log xen platform: XENVIF|LinkGetRoutineAddress: netio.sys:NotifyUnicastIpAddressChange (00F9) @ FFFFF880015D4850
xen_platform_log xen platform: XENVIF|LinkGetRoutineAddress: netio.sys:GetUnicastIpAddressTable (0044) @ FFFFF880015D4900
xen_platform_log xen platform: XENVIF|LinkGetRoutineAddress: netio.sys:FreeMibTable (0022) @ FFFFF880015BCFD0
xen_platform_log xen platform: XENVIF|LinkGetRoutineAddress: netio.sys:CancelMibChangeNotify2 (0000) @ FFFFF880015C9D30
xen_platform_log xen platform: XENNET|DriverEntry: XENNET 8.0.0 (0) (24.09.2014)
xen_platform_log xen platform: XENVIF|LinkGetRoutineAddress: netio.sys:GetIfTable2 (0035) @ FFFFF880015D0270
xen_platform_log xen platform: XENVIF|LinkGetRoutineAddress: netio.sys:FreeMibTable (0022) @ FFFFF880015BCFD0
xen_platform_log xen platform: XENVIF|PdoStartDevice: fail4
xen_platform_log xen platform: XENVIF|PdoStartDevice: fail3
xen_platform_log xen platform: XENVIF|PdoStartDevice: fail2
xen_platform_log xen platform: XENVIF|PdoStartDevice: fail1 (c0000001)
xen_platform_log xen platform: XENNET|DriverUnload: XENNET 8.0.0 (0) (24.09.2014)
xen_platform_log xen platform: XENVBD|DriverEntry:8.0.0.0 (24/9/2014)
xen_platform_log xen platform: XENVBD|__DriverParseParameterKey:DriverParameters: 
xen_platform_log xen platform: XENVBD|DispatchPnp:DeviceObject 0xFFFFFA800264A380 is not FDO (0x0000000000000000) or a PDO
xen_platform_log xen platform: XENVBD|DispatchPnp:DeviceObject 0xFFFFFA800264A380 is not FDO (0x0000000000000000) or a PDO
xen_platform_log xen platform: XENVBD|DispatchPnp:DeviceObject 0xFFFFFA800264A380 is not FDO (0x0000000000000000) or a PDO
xen_platform_log xen platform: XENVBD|DispatchPnp:DeviceObject 0xFFFFFA800264A380 is not FDO (0x0000000000000000) or a PDO
xen_platform_log xen platform: XENVBD|DispatchPnp:DeviceObject 0xFFFFFA800264A380 is not FDO (0x0000000000000000) or a PDO
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: BUS_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENVBD|DispatchPnp:DeviceObject 0xFFFFFA800264A380 is not FDO (0x0000000000000000) or a PDO
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: BUS_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: Version = 0
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: Master = TRUE
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: ScatterGather = TRUE
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: DemandMode = FALSE
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: AutoInitialize = FALSE
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: Dma32BitAddresses = TRUE
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: IgnoreCount = FALSE
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: Dma64BitAddresses = TRUE
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: BusNumber = 00000000
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: DmaChannel = ffffffff
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: InterfaceType = Internal
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: DmaWidth = 8Bits
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: DmaSpeed = Compatible
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: MaximumLength = 000b0000
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: DmaPort = ffffffff
xen_platform_log xen platform: XENBUS|DmaGetAdapter: no interception
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: STORE_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: EVTCHN_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: GNTTAB_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: SUSPEND_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: DEBUG_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: EMULATED_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENVBD|__FdoSetDevicePowerState:POWER D3 to D0
xen_platform_log xen platform: XENVBD|__FdoD3ToD0:D3->D0
xen_platform_log xen platform: XENVBD|__FdoIsPdoUnplugged:Target[0] : (vbd/768) Emulated NOT_KNOWN (assumed PRESENT)
xen_platform_log xen platform: XENVBD|PdoCreate:Target[0] : Creating (Emulated)
xen_platform_log xen platform: XENVBD|PdoSetDevicePowerState:Target[0] : POWER D3 to D0
xen_platform_log xen platform: XENVBD|PdoD3ToD0:Target[0] : D3->D0 (Emulated)
xen_platform_log xen platform: XENVBD|PdoCreate:Target[0] : Created (Emulated)
xen_platform_log xen platform: XENVBD|FdoLogTargets:ScanThread ===>
xen_platform_log xen platform: XENVBD|FdoLogTargets:ScanThread : Target[0] = 0xFFFFFA8002896A80 (present)
xen_platform_log xen platform: XENVBD|FdoLogTargets:ScanThread <===
xen_platform_log xen platform: XENVBD|FdoDispatchPnp:14:QUERY_PNP_DEVICE_STATE -> c00000bb
xen_platform_log xen platform: XENVBD|__ValidateSrbForPdo:Target[0] : Disk is Emulated (a0:SCSIOP_REPORT_LUNS)
xen_platform_log xen platform: XENVBD|__ValidateSrbForPdo:Target[0] : Disk is Emulated (12:SCSIOP_INQUIRY)
xen_platform_log xen platform: XENIFACE|DriverEntry: 8.0.0.0 (8/10/2014)
xen_platform_log xen platform: XENFILT|DriverEntry: XENFILT 8.0.0 (0) (13.10.2014)
xen_platform_log xen platform: XENFILT|DriverSetActiveDeviceInstance: PCI\VEN_5853&DEV_0001&SUBSYS_00015853&REV_01/10
xen_platform_log xen platform: XENFILT|UnplugCheckForPVDisks: PRESENT
xen_platform_log xen platform: XENFILT|UnplugCheckForPVNics: PRESENT
xen_platform_log xen platform: UNPLUG: PRE-AMBLE (DRIVERS NOT BLACKLISTED)
xen_platform_log xen platform: UNPLUG: DISKS
xen_platform_log xen platform: UNPLUG: NICS
xen_platform_log xen platform: XENIFACE|ThreadCreate: Create thread FFFFF880057205B0 FFFFFA8003D54830
xen_platform_log xen platform: XENIFACE|ThreadCreate: Create thread FFFFF8800571F630 FFFFFA8003D54840
xen_platform_log xen platform: XENBUS|PdoQueryInterface: IFACE: SUSPEND_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: IFACE: SHARED_INFO_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: IFACE: STORE_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENIFACE|FdoInitialiseXSRegistryEntries: no such xenstore key
xen_platform_log xen platform: XENIFACE|FdoInitialiseXSRegistryEntries: Failed to initialise registry (c0000022)
xen_platform_log xen platform: XENIFACE|ThreadCreate: Create thread FFFFF8800572008C FFFFFA8003D54A50
xen_platform_log xen platform: XENIFACE|FdoCreate: FFFFFA8001910040 (IFACE)
xen_platform_log xen platform: XENFILT|DriverUnload: XENFILT 8.0.0 (0) (13.10.2014)
xen_platform_log xen platform: XENIFACE|WmiInit: DRV: XenIface WMI Initialisation
xen_platform_log xen platform: XEN|DEBUG: ====> (xenbus.sys + 0000000000011990)
xen_platform_log xen platform: XENBUS|SUSPEND: Count = 0
xen_platform_log xen platform: XENBUS|SUSPEND: EARLY: xenbus.sys + 00000000000072F4 (FFFFFA800193D000)
xen_platform_log xen platform: XENBUS|SUSPEND: EARLY: xenbus.sys + 000000000000EAB0 (FFFFFA8003226A40)
xen_platform_log xen platform: XENBUS|SUSPEND: EARLY: xenbus.sys + 000000000001115C (FFFFFA800191B000)
xen_platform_log xen platform: XENBUS|SUSPEND: EARLY: xenbus.sys + 000000000000C7BC (FFFFFA8002942470)
xen_platform_log xen platform: XENBUS|SUSPEND: LATE: xenbus.sys + 000000000001119C (FFFFFA800191B000)
xen_platform_log xen platform: XENBUS|SUSPEND: LATE: xenbus.sys + 000000000000B62C (FFFFFA8003E04010)
xen_platform_log xen platform: XENBUS|SUSPEND: LATE: xenbus.sys + 000000000000DF60 (FFFFFA8003EBC6A0)
xen_platform_log xen platform: XENBUS|SUSPEND: LATE: xenvif.sys + 0000000000007738 (FFFFFA80025BBB80)
xen_platform_log xen platform: XENBUS|SUSPEND: LATE: xenvif.sys + 000000000000BE50 (FFFFFA80018AE010)
xen_platform_log xen platform: XENBUS|SUSPEND: LATE: xenbus.sys + 000000000000DF60 (FFFFFA80026B59B0)
xen_platform_log xen platform: XENBUS|SUSPEND: LATE: xenvbd.sys + 0000000000008C4C (FFFFFA80018F4538)
xen_platform_log xen platform: XENBUS|SUSPEND: LATE: xenvbd.sys + 000000000000F500 (FFFFFA8003ACE740)
xen_platform_log xen platform: XENBUS|SUSPEND: LATE: xenbus.sys + 000000000000DF60 (FFFFFA80024CA5D0)
xen_platform_log xen platform: XENBUS|SUSPEND: LATE: xeniface.sys + 0000000000002158 (FFFFFA8003D547C0)
xen_platform_log xen platform: XEN|DEBUG: <==== (xenbus.sys + 0000000000011990)
xen_platform_log xen platform: XEN|DEBUG: ====> (xenbus.sys + 0000000000012AD4)
xen_platform_log xen platform: XENBUS|RANGE_SET: RANGE SETS:
xen_platform_log xen platform: XENBUS|RANGE_SET:  - io_space:
xen_platform_log xen platform: XENBUS|RANGE_SET:    {f8021000 - f8ffffff}*
xen_platform_log xen platform: XENBUS|RANGE_SET:  - balloon:
xen_platform_log xen platform: XENBUS|RANGE_SET:    EMPTY
xen_platform_log xen platform: XENBUS|RANGE_SET:  - device_vif_0_transmitter_req_id:
xen_platform_log xen platform: XENBUS|RANGE_SET:    {1 - 3ff}*
xen_platform_log xen platform: XENBUS|RANGE_SET:  - gnttab:
xen_platform_log xen platform: XENBUS|RANGE_SET:    EMPTY
xen_platform_log xen platform: XEN|DEBUG: <==== (xenbus.sys + 0000000000012AD4)
xen_platform_log xen platform: XEN|DEBUG: ====> (xenbus.sys + 0000000000006F48)
xen_platform_log xen platform: XENBUS|EVTCHN: EVENT CHANNELS:
xen_platform_log xen platform: XENBUS|EVTCHN: - (0001) BY xenbus.sys + 0000000000010690 [TRUE]
xen_platform_log xen platform: XENBUS|EVTCHN: FIXED: Mask = FALSE
xen_platform_log xen platform: XENBUS|EVTCHN: - (0006) BY xenbus.sys + 00000000000088A8 [TRUE]
xen_platform_log xen platform: XENBUS|EVTCHN: VIRQ: Index = 1
xen_platform_log xen platform: XEN|DEBUG: <==== (xenbus.sys + 0000000000006F48)
xen_platform_log xen platform: XEN|DEBUG: ====> (xenbus.sys + 000000000000E7EC)
xen_platform_log xen platform: XENBUS|SHARED_INFO: Address = 00000000.f8000000
xen_platform_log xen platform: XEN|DEBUG: <==== (xenbus.sys + 000000000000E7EC)
xen_platform_log xen platform: XEN|DEBUG: ====> (xenbus.sys + 00000000000103B8)
xen_platform_log xen platform: XENBUS|STORE: Address = 00000000.feffc000
xen_platform_log xen platform: XENBUS|STORE: WATCHES:
xen_platform_log xen platform: XENBUS|STORE: - (4792) ON device BY xenbus.sys + 000000000000890D [ACTIVE]
xen_platform_log xen platform: XENBUS|STORE: - (4793) ON control/shutdown BY xenbus.sys + 0000000000008949 [ACTIVE]
xen_platform_log xen platform: XENBUS|STORE: - (4794) ON memory/target BY xenbus.sys + 00000000000089BC [ACTIVE]
xen_platform_log xen platform: XENBUS|STORE: - (4795) ON device/vif BY xenvif.sys + 00000000000058B2 [ACTIVE]
xen_platform_log xen platform: XENBUS|STORE: - (479B) ON device/vbd BY xenvbd.sys + 000000000000964A [ACTIVE]
xen_platform_log xen platform: XEN|DEBUG: <==== (xenbus.sys + 00000000000103B8)
xen_platform_log xen platform: XEN|DEBUG: ====> (xenbus.sys + 0000000000014428)
xen_platform_log xen platform: XENBUS|CACHE: CACHES:
xen_platform_log xen platform: XENBUS|CACHE: - device_vif_0_receiver_packet: Count = 0 (Reservation = 0)
xen_platform_log xen platform: XENBUS|CACHE: - device_vif_0_receiver_fragment: Count = 0 (Reservation = 0)
xen_platform_log xen platform: XENBUS|CACHE: - device_vif_0_transmitter_buffer: Count = 0 (Reservation = 0)
xen_platform_log xen platform: XENBUS|CACHE: - device_vif_0_transmitter_fragment: Count = 0 (Reservation = 0)
xen_platform_log xen platform: XEN|DEBUG: <==== (xenbus.sys + 0000000000014428)
xen_platform_log xen platform: XEN|DEBUG: ====> (xenbus.sys + 000000000000C454)
xen_platform_log xen platform: XENBUS|GNTTAB: Address = 00000000.f8001000
xen_platform_log xen platform: XENBUS|GNTTAB: FrameIndex = -1
xen_platform_log xen platform: XEN|DEBUG: <==== (xenbus.sys + 000000000000C454)
xen_platform_log xen platform: XEN|DEBUG: ====> (xenvbd.sys + 00000000000064B4)
xen_platform_log xen platform: XENVBD: FDO: Version: 8.0.0.0 (24/9/2014)
xen_platform_log xen platform: XENVBD: FDO: Fdo: 0xFFFFFA80018F4538 (ref-count 1) CRASHING
xen_platform_log xen platform: XENVBD: FDO: DevObj 0xFFFFFA800264A380 LowerDevObj 0xFFFFFA8003EBC7F0 PhysDevObj 0xFFFFFA8003EBC7F0
xen_platform_log xen platform: XENVBD: FDO: DevicePowerState: D0
xen_platform_log xen platform: XENVBD: FDO: Enumerator      : vbd (0x0000000000000000)
xen_platform_log xen platform: XENVBD: FDO: Srbs            : 0 / 1 (1526 Total)
xen_platform_log xen platform: XENVBD: BUFFER: Allocated/Freed : 32 / 0
xen_platform_log xen platform: XENVBD: BUFFER: Free (Cur/Max)  : 32 / 32
xen_platform_log xen platform: XENVBD: BUFFER: Used (Cur/Max)  : 0 / 0
xen_platform_log xen platform: XENVBD: BUFFER: Reaped          : 0 / 0
xen_platform_log xen platform: XENVBD: FDO: ====> Target[0  ]    : 0xFFFFFA8002896A80
xen_platform_log xen platform: XENVBD: PDO: Fdo 0xFFFFFA80018F4538 DeviceObject 0x0000000000000000
xen_platform_log xen platform: XENVBD: PDO: ReferenceCount 1
xen_platform_log xen platform: XENVBD: PDO: DevicePnpState Present (Invalid)
xen_platform_log xen platform: XENVBD: PDO: DevicePowerState D0
xen_platform_log xen platform: XENVBD: PDO: EMULATED Not Missing
xen_platform_log xen platform: XENVBD: PDO: BLKIF_OPs: READ=0 WRITE=0
xen_platform_log xen platform: XENVBD: PDO: BLKIF_OPs: INDIRECT_READ=0 INDIRECT_WRITE=0
xen_platform_log xen platform: XENVBD: PDO: BLKIF_OPs: BARRIER=0 DISCARD=0
xen_platform_log xen platform: XENVBD: PDO: Failed: Maps=0 Bounces=0 Grants=0
xen_platform_log xen platform: XENVBD: PDO: Segments Granted=0 Bounced=0
xen_platform_log xen platform: XENVBD: LOOKASIDE: REQUESTs: 0 / 0 (0 failed)
xen_platform_log xen platform: XENVBD: LOOKASIDE: SEGMENTs: 0 / 0 (0 failed)
xen_platform_log xen platform: XENVBD: LOOKASIDE: INDIRECTs: 0 / 0 (0 failed)
xen_platform_log xen platform: XENVBD: QUEUE: Fresh     : 0 / 0
xen_platform_log xen platform: XENVBD: QUEUE: Prepared  : 0 / 0
xen_platform_log xen platform: XENVBD: QUEUE: Submitted : 0 / 0
xen_platform_log xen platform: XENVBD: QUEUE: Shutdown  : 0 / 0
xen_platform_log xen platform: XENVBD: FRONTEND: TargetId=0 DeviceId=768 BackendId=32756
xen_platform_log xen platform: XENVBD: FRONTEND: FrontendPath device/vbd/768
xen_platform_log xen platform: XENVBD: FRONTEND: BackendPath  NULL
xen_platform_log xen platform: XENVBD: FRONTEND: TargetPath   data/scsi/target/0
xen_platform_log xen platform: XENVBD: FRONTEND: State   : INITIALIZED
xen_platform_log xen platform: XENVBD: FRONTEND: Caps    : 
xen_platform_log xen platform: XENVBD: FRONTEND: Features: 
xen_platform_log xen platform: XENVBD: FRONTEND: DiskInfo: 0 @ 512 (0) 00000000
xen_platform_log xen platform: XENVBD: GRANTER: DISCONNECTED DISABLED
xen_platform_log xen platform: XENVBD: GRANTER: 0 / 0
xen_platform_log xen platform: XENVBD: BLOCKRING: Requests  : 0 / 0 / 0
xen_platform_log xen platform: XENVBD: BLOCKRING: SharedRing : 0x0000000000000000
xen_platform_log xen platform: XENVBD: BLOCKRING: FrontRing  : 0 / 0 (0)
xen_platform_log xen platform: XENVBD: BLOCKRING: Order      : 0
xen_platform_log xen platform: XENVBD: BLOCKRING: Grants[0 ] : 0x0000000000000000 (0)
xen_platform_log xen platform: XENVBD: NOTIFIER: Int / DPC : 0 / 0
xen_platform_log xen platform: XENVBD: FDO: <==== Target[0  ]    : 0xFFFFFA8002896A80
xen_platform_log xen platform: XEN|DEBUG: <==== (xenvbd.sys + 00000000000064B4)
xen_platform_log xen platform: XEN|BUGCHECK: ====>
xen_platform_log xen platform: XEN|BUGCHECK: 0000007A: FFFFF6FC00017560 FFFFFFFFC0000185 0000000033599860 FFFFF80002EACFC0
xen_platform_log xen platform: XEN|BUGCHECK: CONTEXT (FFFFF8800310EB50):
xen_platform_log xen platform: XEN|BUGCHECK: - GS = 002B
xen_platform_log xen platform: XEN|BUGCHECK: - FS = 0053
xen_platform_log xen platform: XEN|BUGCHECK: - ES = 002B
xen_platform_log xen platform: XEN|BUGCHECK: - DS = 002B
xen_platform_log xen platform: XEN|BUGCHECK: - SS = 0018
xen_platform_log xen platform: XEN|BUGCHECK: - CS = 0010
xen_platform_log xen platform: XEN|BUGCHECK: - EFLAGS = 00000082
xen_platform_log xen platform: XEN|BUGCHECK: - RDI = 0000000000017560
xen_platform_log xen platform: XEN|BUGCHECK: - RSI = 00000000C0000185
xen_platform_log xen platform: XEN|BUGCHECK: - RBX = 0000000003BD58F8
xen_platform_log xen platform: XEN|BUGCHECK: - RDX = 0000000000000000
xen_platform_log xen platform: XEN|BUGCHECK: - RCX = 000000000310EB50
xen_platform_log xen platform: XEN|BUGCHECK: - RAX = 000000002ECF4902
xen_platform_log xen platform: XEN|BUGCHECK: - RBP = 0000000033599860
xen_platform_log xen platform: XEN|BUGCHECK: - RIP = 0000000003BCBA43
xen_platform_log xen platform: XEN|BUGCHECK: - RSP = 000000000310EB30
xen_platform_log xen platform: XEN|BUGCHECK: - R8 = 0000000000000000
xen_platform_log xen platform: XEN|BUGCHECK: - R9 = 0000000000000000
xen_platform_log xen platform: XEN|BUGCHECK: - R10 = 0000000000000000
xen_platform_log xen platform: XEN|BUGCHECK: - R11 = 0000000000000000
xen_platform_log xen platform: XEN|BUGCHECK: - R12 = 000000000000007A
xen_platform_log xen platform: XEN|BUGCHECK: - R13 = 0000000000000001
xen_platform_log xen platform: XEN|BUGCHECK: - R14 = 0000000002EACFC0
xen_platform_log xen platform: XEN|BUGCHECK: - R15 = 0000000002CB7C40
xen_platform_log xen platform: XEN|BUGCHECK: STACK:
xen_platform_log xen platform: XEN|BUGCHECK: 000000000310F040: (0000000000000003 0000000003BCE0F0 0000000003BCD860 000000000000007A) xen.sys + 00000000000049AC
xen_platform_log xen platform: XEN|BUGCHECK: 000000000310F090: (0000000003BD60D0 0000000000000000 0000000000000004 0000000002C80500) ntoskrnl.exe + 0000000000128585
xen_platform_log xen platform: XEN|BUGCHECK: 000000000310F0C0: (0000000003BD60D0 0000000002C80500 000000000000000F 0000000001780660) ntoskrnl.exe + 0000000000167C0D
xen_platform_log xen platform: XEN|BUGCHECK: 000000000310F790: (000000000310F938 00000000039BDA80 0000000000000000 00000000039BD990) ntoskrnl.exe + 0000000000075CC4
xen_platform_log xen platform: XEN|BUGCHECK: 000000000310F7D0: (000000000000007A 0000000000017560 00000000C0000185 0000000033599860) ntoskrnl.exe + 00000000000E8752
xen_platform_log xen platform: XEN|BUGCHECK: 000000000310F8B0: (00000000039BD990 000000000310F940 0000000002CBA540 00000000039BD990) ntoskrnl.exe + 000000000009C91F
xen_platform_log xen platform: XEN|BUGCHECK: 000000000310F980: (0000000000000000 0000000000000008 00000000FFFFFFFF 000000000178EB50) ntoskrnl.exe + 00000000000831B9
xen_platform_log xen platform: XEN|BUGCHECK: 000000000310FAE0: (0000000000000008 0000000002EACFC0 0000000001780600 00000000021B0BC0) ntoskrnl.exe + 0000000000073CEE
xen_platform_log xen platform: XEN|BUGCHECK: 000000000310FC78: (0000000002EDA20C 0000000000000000 0000000000000001 00000000039CE6A0) ntoskrnl.exe + 00000000004A2FC0

--------------080104040904080607010802
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
--------------080104040904080607010802--


From win-pv-devel-bounces@lists.xenproject.org Fri Oct 17 11:02:20 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 17 Oct 2014 11:02: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 1Xf5IZ-00059t-Vc; Fri, 17 Oct 2014 11:02:19 +0000
Received: from mail6.bemta4.messagelabs.com ([85.158.143.247])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1Xf5IY-00059f-Eg
	for win-pv-devel@lists.xenproject.org; Fri, 17 Oct 2014 11:02:18 +0000
Received: from [85.158.143.35] by server-2.bemta-4.messagelabs.com id
	0D/B0-10419-937F0445; Fri, 17 Oct 2014 11:02:17 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-8.tower-21.messagelabs.com!1413543735!13604629!1
X-Originating-IP: [209.85.212.174]
X-SpamReason: No, hits=2.2 required=7.0 tests=BIZ_TLD,BODY_RANDOM_LONG
X-StarScan-Received: 
X-StarScan-Version: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 26598 invoked from network); 17 Oct 2014 11:02:16 -0000
Received: from mail-wi0-f174.google.com (HELO mail-wi0-f174.google.com)
	(209.85.212.174)
	by server-8.tower-21.messagelabs.com with RC4-SHA encrypted SMTP;
	17 Oct 2014 11:02:16 -0000
Received: by mail-wi0-f174.google.com with SMTP id h11so1910380wiw.13
	for <win-pv-devel@lists.xenproject.org>;
	Fri, 17 Oct 2014 04:02:15 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:message-id:date:from:user-agent:mime-version:to
	:subject:references:in-reply-to:content-type;
	bh=k1kPphSwRiDz5e1E5EASmv+lSW5wq+XKltuUgw8ZxGo=;
	b=lraMWX5MnAteXLTkwTljEzNvnG+kGO4NUux0qW4CEbnsUiQFS0kXzVW2BUwAwAkzAR
	sgWxXbPCuO07fkqgUAamNEUaUL7P6qzHcjD55LJo77zboW+vR5jqTmqFeP7QguFwOtDU
	BHk3SS3af+ktv2bj78mHRgxpRit4L0FKlGtAujEuw3AS9qgJ4nX9nj7OZxhDwH097x6w
	hrqAffiuCZrYBLOfsUUXdUqBtqwfLgMwohYjI4Vr2I7z4i4I01POSovM0DLBZxQ45vei
	d1P2deXDcQYuaSwfYVlS+nu/2ogRvFBMEqLmLthPuliUwPJaYALO04H7tdkCvFTfL38b
	rQ6A==
X-Gm-Message-State: ALoCoQlcCgXqerVem7ITk9ioPB3I7Tt/jTdkujGmZlmKSbPYYUHgyTabPcaHE4aYvWOrfnw+PA0i
X-Received: by 10.194.203.201 with SMTP id ks9mr8999459wjc.105.1413543735509; 
	Fri, 17 Oct 2014 04:02:15 -0700 (PDT)
Received: from [192.168.1.15] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by mx.google.com with ESMTPSA id u9sm5248525wiv.8.2014.10.17.04.02.13
	for <multiple recipients>
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Fri, 17 Oct 2014 04:02:14 -0700 (PDT)
Message-ID: <5440F740.4070701@m2r.biz>
Date: Fri, 17 Oct 2014 13:02:24 +0200
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64;
	rv:24.0) Gecko/20100101 Thunderbird/24.6.0
MIME-Version: 1.0
To: Paul Durrant <Paul.Durrant@citrix.com>, 
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <543F887B.5030500@m2r.biz>	<9AAE0902D5BC7E449B7C8E4E778ABCD0111050FF@AMSPEX01CL01.citrite.net>	<543F912C.8000504@m2r.biz>	<9AAE0902D5BC7E449B7C8E4E778ABCD01110526F@AMSPEX01CL01.citrite.net>	<543FA4F6.5090804@m2r.biz>	<9AAE0902D5BC7E449B7C8E4E778ABCD0111053EA@AMSPEX01CL01.citrite.net>	<543FCA93.2010805@m2r.biz>	<9AAE0902D5BC7E449B7C8E4E778ABCD0111057A2@AMSPEX01CL01.citrite.net>	<543FDA2D.2090900@m2r.biz>	<9AAE0902D5BC7E449B7C8E4E778ABCD0111058E6@AMSPEX01CL01.citrite.net>	<543FDE85.1030908@m2r.biz>	<9AAE0902D5BC7E449B7C8E4E778ABCD011105A08@AMSPEX01CL01.citrite.net>
	<5440E39B.6080104@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD01110668E@AMSPEX01CL01.citrite.net>
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD01110668E@AMSPEX01CL01.citrite.net>
Content-Type: multipart/mixed; boundary="------------080104040904080607010802"
Subject: Re: [win-pv-devel] Blue screen on xenvif install
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.
--------------080104040904080607010802
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

Il 17/10/2014 11:48, Paul Durrant ha scritto:
>> -----Original Message-----
>> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
>> bounces@lists.xenproject.org] On Behalf Of Fabio Fantoni
>> Sent: 17 October 2014 10:39
>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>> Subject: Re: [win-pv-devel] Blue screen on xenvif install
>>
>> Il 16/10/2014 17:58, Paul Durrant ha scritto:
>>>> -----Original Message-----
>>>> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
>>>> bounces@lists.xenproject.org] On Behalf Of Fabio Fantoni
>>>> Sent: 16 October 2014 16:05
>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>>>> Subject: Re: [win-pv-devel] Blue screen on xenvif install
>>>>
>>>> Il 16/10/2014 16:54, Paul Durrant ha scritto:
>>>>>> -----Original Message-----
>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>>>> Sent: 16 October 2014 15:46
>>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>>>>>> Subject: Re: Blue screen on xenvif install
>>>>>>
>>>>>> Il 16/10/2014 15:45, Paul Durrant ha scritto:
>>>>>>>> -----Original Message-----
>>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>>>>>> Sent: 16 October 2014 14:40
>>>>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>>>>>>>> Subject: Re: Blue screen on xenvif install
>>>>>>>>
>>>>>>>> Il 16/10/2014 13:04, Paul Durrant ha scritto:
>>>>>>>>>> -----Original Message-----
>>>>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>>>>>>>> Sent: 16 October 2014 11:59
>>>>>>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>>>>>>>>>> Subject: Re: Blue screen on xenvif install
>>>>>>>>>>
>>>>>>>>>> Il 16/10/2014 12:00, Paul Durrant ha scritto:
>>>>>>>>>>>> -----Original Message-----
>>>>>>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>>>>>>>>>> Sent: 16 October 2014 10:35
>>>>>>>>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>>>>>>>>>>>> Subject: Re: Blue screen on xenvif install
>>>>>>>>>>>>
>>>>>>>>>>>> Il 16/10/2014 10:59, Paul Durrant ha scritto:
>>>>>>>>>>>>>> -----Original Message-----
>>>>>>>>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>>>>>>>>>>>> Sent: 16 October 2014 09:58
>>>>>>>>>>>>>> To: win-pv-devel@lists.xenproject.org
>>>>>>>>>>>>>> Cc: Paul Durrant
>>>>>>>>>>>>>> Subject: Blue screen on xenvif install
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Today I tried to install new winpv driver to other 3 windows 7
>>>> pro
>>>>>> 64
>>>>>>>>>>>>>> bit domUs.
>>>>>>>>>>>>>> Days ago I installed them successful on one windows 7 pro 64
>>>> bit
>>>>>> and
>>>>>>>>>> one
>>>>>>>>>>>>>> windows 8.1 enterprise 64 bit.
>>>>>>>>>>>>>> On first domUs I tried to install them today I installed xenbus
>>>> and
>>>>>>>>>>>>>> xenvbd successful but on xenvif install windows crashed
>> with
>>>> blue
>>>>>>>>>>>>>> screen, if I saw it correctly was an kernel in-page error or
>>>>>> something
>>>>>>>>>>>>>> similar.
>>>>>>>>>>>>>> After reboot I retried to install xenvif but now always fails.
>>>>>>>>>>>>>>
>>>>>>>>>>>>> Sounds odd. Do you have a MEMORY.DMP?
>>>>>>>>>>>>>
>>>>>>>>>>>>>          Paul
>>>>>>>>>>>> Windows is setted to write dump of kernel memory on system
>>>> error
>>>>>>>> but
>>>>>>>>>>>> %systemroot%\memory.dmp is missed :(
>>>>>>>>>>>> I also checked the windows events log but I found only kernel-
>>>>>> power
>>>>>>>> as
>>>>>>>>>>>> critical that seems not contains useful data.
>>>>>>>>>>>>
>>>>>>>>>>>> I found probably useful data in xl dmesg (I copied all below
>> from
>>>>>> domU
>>>>>>>>>>>> start to xen bug):
>>>>>>>>>>>>> (d98) HVM Loader
>>>>>>>>>>>>> (d98) Detected Xen v4.5-unstable
>>>>>>>>>>>>> (d98) Xenbus rings @0xfeffc000, event channel 1
>>>>>>>>>>>>> (d98) System requested SeaBIOS
>>>>>>>>>>>>> (d98) CPU speed is 2660 MHz
>>>>>>>>>>>>> (d98) Relocating guest memory for lowmem MMIO space
>>>> disabled
>>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 0 changed 0 -> 5
>>>>>>>>>>>>> (d98) PCI-ISA link 0 routed to IRQ5
>>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 1 changed 0 -> 10
>>>>>>>>>>>>> (d98) PCI-ISA link 1 routed to IRQ10
>>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 2 changed 0 -> 11
>>>>>>>>>>>>> (d98) PCI-ISA link 2 routed to IRQ11
>>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 3 changed 0 -> 5
>>>>>>>>>>>>> (d98) PCI-ISA link 3 routed to IRQ5
>>>>>>>>>>>>> (d98) pci dev 01:3 INTA->IRQ10
>>>>>>>>>>>>> (d98) pci dev 02:0 INTA->IRQ11
>>>>>>>>>>>>> (d98) pci dev 03:0 INTA->IRQ5
>>>>>>>>>>>>> (d98) pci dev 04:0 INTA->IRQ5
>>>>>>>>>>>>> (d98) pci dev 05:0 INTA->IRQ10
>>>>>>>>>>>>> (d98) pci dev 06:0 INTA->IRQ11
>>>>>>>>>>>>> (d98) pci dev 1d:0 INTA->IRQ10
>>>>>>>>>>>>> (d98) pci dev 1d:1 INTB->IRQ11
>>>>>>>>>>>>> (d98) pci dev 1d:2 INTC->IRQ5
>>>>>>>>>>>>> (d98) pci dev 1d:7 INTD->IRQ5
>>>>>>>>>>>>> (d98) No RAM in high memory; setting high_mem resource
>> base
>>>> to
>>>>>>>>>>>> 100000000
>>>>>>>>>>>>> (d98) pci dev 05:0 bar 10 size 004000000: 0f0000000
>>>>>>>>>>>>> (d98) pci dev 05:0 bar 14 size 004000000: 0f4000000
>>>>>>>>>>>>> (d98) pci dev 02:0 bar 14 size 001000000: 0f8000008
>>>>>>>>>>>>> (d98) pci dev 06:0 bar 30 size 000040000: 0f9000000
>>>>>>>>>>>>> (d98) pci dev 05:0 bar 30 size 000010000: 0f9040000
>>>>>>>>>>>>> (d98) pci dev 03:0 bar 10 size 000004000: 0f9050000
>>>>>>>>>>>>> (d98) pci dev 05:0 bar 18 size 000002000: 0f9054000
>>>>>>>>>>>>> (d98) pci dev 04:0 bar 14 size 000001000: 0f9056000
>>>>>>>>>>>>> (d98) pci dev 1d:7 bar 10 size 000001000: 0f9057000
>>>>>>>>>>>>> (d98) pci dev 02:0 bar 10 size 000000100: 00000c001
>>>>>>>>>>>>> (d98) pci dev 06:0 bar 10 size 000000100: 00000c101
>>>>>>>>>>>>> (d98) pci dev 06:0 bar 14 size 000000100: 0f9058000
>>>>>>>>>>>>> (d98) pci dev 04:0 bar 10 size 000000020: 00000c201
>>>>>>>>>>>>> (d98) pci dev 05:0 bar 1c size 000000020: 00000c221
>>>>>>>>>>>>> (d98) pci dev 1d:0 bar 20 size 000000020: 00000c241
>>>>>>>>>>>>> (d98) pci dev 1d:1 bar 20 size 000000020: 00000c261
>>>>>>>>>>>>> (d98) pci dev 1d:2 bar 20 size 000000020: 00000c281
>>>>>>>>>>>>> (d98) pci dev 01:1 bar 20 size 000000010: 00000c2a1
>>>>>>>>>>>>> (d98) Multiprocessor initialisation:
>>>>>>>>>>>>> (d98)  - CPU0 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8]
>> ...
>>>>>>>>>>>>> done.
>>>>>>>>>>>>> (d98)  - CPU1 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8]
>> ...
>>>>>>>>>>>>> done.
>>>>>>>>>>>>> (d98) Testing HVM environment:
>>>>>>>>>>>>> (d98)  - REP INSB across page boundaries ... passed
>>>>>>>>>>>>> (d98)  - GS base MSRs and SWAPGS ... passed
>>>>>>>>>>>>> (d98) Passed 2 of 2 tests
>>>>>>>>>>>>> (d98) Writing SMBIOS tables ...
>>>>>>>>>>>>> (d98) Loading SeaBIOS ...
>>>>>>>>>>>>> (d98) Creating MP tables ...
>>>>>>>>>>>>> (d98) Loading ACPI ...
>>>>>>>>>>>>> (d98) S3 disabled
>>>>>>>>>>>>> (d98) S4 disabled
>>>>>>>>>>>>> (d98) vm86 TSS at fc00a100
>>>>>>>>>>>>> (d98) BIOS map:
>>>>>>>>>>>>> (d98)  10000-100d3: Scratch space
>>>>>>>>>>>>> (d98)  c0000-fffff: Main BIOS
>>>>>>>>>>>>> (d98) E820 table:
>>>>>>>>>>>>> (d98)  [00]: 00000000:00000000 - 00000000:000a0000: RAM
>>>>>>>>>>>>> (d98)  HOLE: 00000000:000a0000 - 00000000:000c0000
>>>>>>>>>>>>> (d98)  [01]: 00000000:000c0000 - 00000000:00100000:
>> RESERVED
>>>>>>>>>>>>> (d98)  [02]: 00000000:00100000 - 00000000:78000000: RAM
>>>>>>>>>>>>> (d98)  HOLE: 00000000:78000000 - 00000000:fc000000
>>>>>>>>>>>>> (d98)  [03]: 00000000:fc000000 - 00000001:00000000: RESERVED
>>>>>>>>>>>>> (d98) Invoking SeaBIOS ...
>>>>>>>>>>>>> (d98) SeaBIOS (version
>>>>>>>>>>>>> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
>>>>>>>>>>>>> (d98)
>>>>>>>>>>>>> (d98) Found Xen hypervisor signature at 40000100
>>>>>>>>>>>>> (d98) Running on QEMU (i440fx)
>>>>>>>>>>>>> (d98) xen: copy e820...
>>>>>>>>>>>>> (d98) Relocating init from 0x000df619 to 0x77fae600 (size
>> 71995)
>>>>>>>>>>>>> (d98) CPU Mhz=2660
>>>>>>>>>>>>> (d98) Found 13 PCI devices (max PCI bus is 00)
>>>>>>>>>>>>> (d98) Allocated Xen hypercall page at 77fff000
>>>>>>>>>>>>> (d98) Detected Xen v4.5-unstable
>>>>>>>>>>>>> (d98) xen: copy BIOS tables...
>>>>>>>>>>>>> (d98) Copying SMBIOS entry point from 0x00010010 to
>>>> 0x000f0f40
>>>>>>>>>>>>> (d98) Copying MPTABLE from 0xfc001170/fc001180 to
>> 0x000f0e40
>>>>>>>>>>>>> (d98) Copying PIR from 0x00010030 to 0x000f0dc0
>>>>>>>>>>>>> (d98) Copying ACPI RSDP from 0x000100b0 to 0x000f0d90
>>>>>>>>>>>>> (d98) Using pmtimer, ioport 0xb008
>>>>>>>>>>>>> (d98) Scan for VGA option rom
>>>>>>>>>>>>> (d98) Running option rom at c000:0003
>>>>>>>>>>>>> (XEN) stdvga.c:147:d98v0 entering stdvga and caching modes
>>>>>>>>>>>>> (d98) pmm call arg1=0
>>>>>>>>>>>>> (d98) Turning on vga text mode console
>>>>>>>>>>>>> (d98) SeaBIOS (version
>>>>>>>>>>>>> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
>>>>>>>>>>>>> (d98) Machine UUID f4cdeb74-0db1-4748-948d-42579a494120
>>>>>>>>>>>>> (d98) EHCI init on dev 00:1d.7 (regs=0xf9057020)
>>>>>>>>>>>>> (d98) Found 0 lpt ports
>>>>>>>>>>>>> (d98) Found 0 serial ports
>>>>>>>>>>>>> (d98) ATA controller 1 at 1f0/3f4/0 (irq 14 dev 9)
>>>>>>>>>>>>> (d98) ATA controller 2 at 170/374/0 (irq 15 dev 9)
>>>>>>>>>>>>> (d98) ata0-0: QEMU HARDDISK ATA-7 Hard-Disk (40720
>> MiBytes)
>>>>>>>>>>>>> (d98) Searching bootorder for:
>>>> /pci@i0cf8/*@1,1/drive@0/disk@0
>>>>>>>>>>>>> (d98) DVD/CD [ata0-1: QEMU DVD-ROM ATAPI-4 DVD/CD]
>>>>>>>>>>>>> (d98) Searching bootorder for:
>>>> /pci@i0cf8/*@1,1/drive@0/disk@1
>>>>>>>>>>>>> (d98) UHCI init on dev 00:1d.0 (io=c240)
>>>>>>>>>>>>> (d98) UHCI init on dev 00:1d.1 (io=c260)
>>>>>>>>>>>>> (d98) UHCI init on dev 00:1d.2 (io=c280)
>>>>>>>>>>>>> (d98) PS2 keyboard initialized
>>>>>>>>>>>>> (d98) All threads complete.
>>>>>>>>>>>>> (d98) Scan for option roms
>>>>>>>>>>>>> (d98) Running option rom at c980:0003
>>>>>>>>>>>>> (d98) pmm call arg1=1
>>>>>>>>>>>>> (d98) pmm call arg1=0
>>>>>>>>>>>>> (d98) pmm call arg1=1
>>>>>>>>>>>>> (d98) pmm call arg1=0
>>>>>>>>>>>>> (d98) Searching bootorder for: /pci@i0cf8/*@6
>>>>>>>>>>>>> (d98)
>>>>>>>>>>>>> (d98) Press F12 for boot menu.
>>>>>>>>>>>>> (d98)
>>>>>>>>>>>>> (d98) Searching bootorder for: HALT
>>>>>>>>>>>>> (d98) drive 0x000f0d40: PCHS=16383/16/63 translation=lba
>>>>>>>>>>>>> LCHS=1024/255/63 s=83394560
>>>>>>>>>>>>> (d98) Space available for UMB: ca800-ee800, f0000-f0ce0
>>>>>>>>>>>>> (d98) Returned 258048 bytes of ZoneHigh
>>>>>>>>>>>>> (d98) e820 map has 6 items:
>>>>>>>>>>>>> (d98)   0: 0000000000000000 - 000000000009fc00 = 1 RAM
>>>>>>>>>>>>> (d98)   1: 000000000009fc00 - 00000000000a0000 = 2 RESERVED
>>>>>>>>>>>>> (d98)   2: 00000000000f0000 - 0000000000100000 = 2 RESERVED
>>>>>>>>>>>>> (d98)   3: 0000000000100000 - 0000000077fff000 = 1 RAM
>>>>>>>>>>>>> (d98)   4: 0000000077fff000 - 0000000078000000 = 2 RESERVED
>>>>>>>>>>>>> (d98)   5: 00000000fc000000 - 0000000100000000 = 2 RESERVED
>>>>>>>>>>>>> (d98) enter handle_19:
>>>>>>>>>>>>> (d98)   NULL
>>>>>>>>>>>>> (d98) Booting from Hard Disk...
>>>>>>>>>>>>> (d98) Booting from 0000:7c00
>>>>>>>>>>>>> (XEN) d98: VIRIDIAN GUEST_OS_ID: vendor: 1 os: 4 major: 6
>>>> minor:
>>>>>> 1
>>>>>>>> sp:
>>>>>>>>>>>>> 1 build: 1db1
>>>>>>>>>>>>> (XEN) d98: VIRIDIAN HYPERCALL: enabled: 1 pfn: 3ffff
>>>>>>>>>>>>> (XEN) d98v0: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffe
>>>>>>>>>>>>> (XEN) d98v1: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffd
>>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 0 changed 5 -> 0
>>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 1 changed 10 -> 0
>>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 2 changed 11 -> 0
>>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 3 changed 5 -> 0
>>>>>>>>>>>>> (XEN) irq.c:380: Dom98 callback via changed to GSI 24
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: ====>
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 0000007A: FFFFF6FC000171C8
>>>>>>>> FFFFFFFFC0000185
>>>>>>>>>>>>> 000000001BD6A860 FFFF
>>>>>>>>>>>>> (d98) F80002E39000
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: CONTEXT (FFFFF8800310E530):
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - GS = 002B
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - FS = 0053
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - ES = 002B
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - DS = 002B
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - SS = 0018
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - CS = 0010
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - EFLAGS = 00000086
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RDI = 00000000000171C8
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RSI = 00000000C0000185
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RBX = 00000000038AC8F8
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RDX = 0000000000000000
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RCX = 000000000310E530
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RAX = 000000002ECF4722
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RBP = 000000001BD6A860
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RIP = 00000000038A2A43
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RSP = 000000000310E510
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R8 = 0000000000000000
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R9 = 0000000000000000
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R10 = 0000000000000000
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R11 = 0000000000000000
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R12 = 000000000000007A
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R13 = 0000000000000001
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R14 = 0000000002E39000
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R15 = 0000000002CBAC40
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: STACK:
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310EA20:
>> (0000000000000003
>>>>>>>>>>>>> 00000000038A50F0 00000000038A
>>>>>>>>>>>>> (d98) 4860 000000000000007A) xen.sys + 00000000000049AC
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310EA70:
>> (00000000038AD0D0
>>>>>>>>>>>>> 0000000000000000 000000000000
>>>>>>>>>>>>> (d98) 0004 0000000002C83500) ntoskrnl.exe +
>> 0000000000128585
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310EAA0:
>> (00000000038AD0D0
>>>>>>>>>>>>> 0000000002C83500 000000000000
>>>>>>>>>>>>> (d98) 000F 0000000001780660) ntoskrnl.exe +
>> 0000000000167C0D
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F170: (0000000003816470
>>>>>>>>>>>>> 0000000002B4C8C1 000000000000
>>>>>>>>>>>>> (d98) 00FE 0000000000000000) ntoskrnl.exe +
>> 0000000000075CC4
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F1B0:
>> (000000000000007A
>>>>>>>>>>>>> 00000000000171C8 00000000C000
>>>>>>>>>>>>> (d98) 0185 000000001BD6A860) ntoskrnl.exe +
>> 00000000000E8752
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F290: (00000000038163B0
>>>>>>>>>>>>> 000000000310F320 0000000002CB
>>>>>>>>>>>>> (d98) D540 00000000038163B0) ntoskrnl.exe +
>> 000000000009C91F
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F360: (0000000000000000
>>>>>>>>>>>>> 0000000000000008 00000000FFFF
>>>>>>>>>>>>> (d98) FFFF 00000000003500F0) ntoskrnl.exe +
>> 00000000000831B9
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F4C0: (0000000000000008
>>>>>>>>>>>>> 0000000002E39000 000000000000
>>>>>>>>>>>>> (d98) 0000 0000000000000000) ntoskrnl.exe +
>> 0000000000073CEE
>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F658:
>> (0000000002E5CFD5
>>>>>>>>>>>>> 0000000000000000 0000000003EB
>>>>>>>>>>>>> (d98) 8710 00000000FFFFFFFF) ntoskrnl.exe +
>> 000000000042C000
>>>>>>>>>>>> If you need more tests/informations tell me and I'll post them.
>>>>>>>>>>>> Thanks for any reply and sorry for my bad english.
>>>>>>>>>>> Well, that tells me you had a 7A BSOD, which is a
>>>>>>>>>> KERNEL_DATA_INPAGE_ERROR. The error status (param 2) was
>>>>>> C0000185
>>>>>>>> so
>>>>>>>>>> that's a STATUS_IO_DEVICE_ERROR. The documentation at
>>>>>>>>>> http://msdn.microsoft.com/en-
>>>>>>>>>> gb/library/windows/hardware/ff559211%28v=vs.85%29.aspx tells
>>>> me
>>>>>> that
>>>>>>>>>> this means:
>>>>>>>>>>> "improper termination or defective cabling on SCSI devices or
>> that
>>>>>> two
>>>>>>>>>> devices are trying to use the same IRQ."
>>>>>>>>>>> But you said you had xenvbd already installed so you'll be using a
>>>> PV
>>>>>>>>>> storage path. Is there any indication of problems with your
>> storage?
>>>>>>>>>>>         Paul
>>>>>>>>>> DomUs disk are all raw files in local dom0 disks, raid1 with "LSI
>> Logic
>>>>>>>>>> / Symbios Logic SAS2008 PCI-Express Fusion-MPT SAS-2" dom0
>>>>>> partitions
>>>>>>>>>> are GTP and fs ext4.
>>>>>>>>>> Dom0 is wheezy with kernel is linux-image-3.16-0.bpo.2-amd64
>>>> version
>>>>>>>>>> 3.16.3-2~bpo70+1
>>>>>>>>>> No kern or syslog errors, only many of these warning that
>> someone
>>>>>>>>>> replied me that should not be a problem:
>>>>>>>>>> Oct 15 10:45:13 mtorMN01OU kernel: [773197.117518]
>> xen:balloon:
>>>>>>>>>> reserve_additional_memory: add_memory() failed: -17
>>>>>>>>>> DomU now see disk as xen pvdisk, on xenvif install probably still
>> was
>>>>>>>>>> full emulated disk even if xenvbd was installed successful before
>>>> xenvif
>>>>>>>>>> install (failed with BSOD)
>>>>>>>>>> The IRQ seems visible from xl dmesg output below, can you check
>>>>>> them is
>>>>>>>>>> have something wrong or strange, I see some of them "duplicate"
>>>> but I
>>>>>>>>>> not know if is correct.
>>>>>>>>>>
>>>>>>>>>> DomU xl cfg:
>>>>>>>>>>> name='office1_w7'
>>>>>>>>>>> builder="hvm"
>>>>>>>>>>> memory=2048
>>>>>>>>>>> vcpus=2
>>>>>>>>>>> acpi_s3=0
>>>>>>>>>>> acpi_s4=0
>>>>>>>>>>> vif=['bridge=xenbr0,mac=00:16:3e:41:ae:8b']
>>>>>>>>>>>
>> disk=['/mnt/vm/disks/office1_w7.disk1.xm,raw,hda,rw',',raw,hdb,ro,cdrom'
>>>>>>>>>> ]
>>>>>>>>>>> boot='c'
>>>>>>>>>>> device_model_version="qemu-xen"
>>>>>>>>>>> viridian=1
>>>>>>>>>>> vnc=0
>>>>>>>>>>> keymap="it"
>>>>>>>>>>> on_crash="destroy"
>>>>>>>>>>> vga="qxl"
>>>>>>>>>>> spice=1
>>>>>>>>>>> spicehost='0.0.0.0'
>>>>>>>>>>> spiceport=6001
>>>>>>>>>>> spicedisable_ticketing=0
>>>>>>>>>>> spicepasswd="password"
>>>>>>>>>>> spicevdagent=1
>>>>>>>>>>> spice_clipboard_sharing=0
>>>>>>>>>>> spiceusbredirection=4
>>>>>>>>>>> soundhw="hda"
>>>>>>>>>>> localtime=1
>>>>>>>>>> If you need more tests/informations tell me and I'll post them.
>>>>>>>>>>
>>>>>>>>> Do you have the qemu log (with xen platform logging enabled).
>> This is
>>>>>>>> where the PV drivers log failures/warnings.
>>>>>>>>>        Paul
>>>>>>>>>
>>>>>>>>>
>>>>>>>> I retried enabling xen platform debug in qemu trace but no add lines
>> in
>>>>>>>> log when I try to install xenvif and fails.
>>>>>>>> I attach anyway the log if can be useful.
>>>>>>> All I can see there is an apparently clean shutdown of domain 101; no
>>>> sign
>>>>>> of XENVIF and no sign of a BSOD.
>>>>>>>> I'll also try to restore the backup of this night of the domU when I
>> had
>>>>>>>> the BSOD trying reproduce it with xen debug in qemu trace and
>>>> different
>>>>>>>> windows memory dump options.
>>>>>>> Ok.
>>>>>>>
>>>>>>>       Paul
>>>>>>>
>>>>>> Reproduced it but now with xen platform trace enabled in qemu. (see
>>>>>> attachment)
>>>>>> Dump of memory instead is not present also in this case (probably
>>>>>> because disk is "failed").
>>>>> You're using emulate disk in this case. Did your BSOD not indicate that it
>>>> was dumping?
>>>>>      Paul
>>>>>
>>>> I have to time to see if do a dump but I suppose it can't write to disk
>>>> since its driver fails.
>>>> Log qemu is not enough? You need the windows memory dump to find
>> and
>>>> fix
>>>> the bug?
>>> I don't know what the bug is. My guess is that it's a deadlock somewhere
>> which is causing Windows to believe there's a storage issue, but since the
>> stack is entirely in the kernel and without a crashdump I cannot decode to
>> symbols there's not much more I can do unless I happen to repro.
>>>     Paul
>>>
>>>> If needed tomorrow I'll do other tests.
>> I retried and seems always reproducible on same domU.
>> Now I disabled automatic reboot on crash and do a screenshot (in
>> attachment) but memory dump is still missed :( Probably with disk
>> "failed" can't write.
>> Is there another way to take/save the memory dump or the data you need?
>>
> Could you remove xenvbd and make sure the emulated disk is functional. Then, install Xenvif and see if it BSODs.

Now I tried to install xenvif without install xenvbd and installation is 
ok, after I installed xennet (ok), xenvbd (ok) and xeniface but on this 
latest same blue screen.
I can (and I must try) install all except xenvbd?
I also attached the new test's qemu log.

Thanks for any reply.

>
>> About IRQ you checked in xl dmesg I posted if are all ok?
>>
> Yes, I don't think there's a problem there.
>
>    Paul
>
>> Thanks for any reply and sorry for my bad english.


--------------080104040904080607010802
Content-Type: text/plain; charset=windows-1252;
 name="qemu-dm-office1_w7.log"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
 filename="qemu-dm-office1_w7.log"

(/usr/sbin/xl:9006): Spice-Warning **: reds.c:1863:reds_handle_ticket: Invalid password
main_channel_link: add main channel client
main_channel_handle_parsed: net test: latency 5.835000 ms, bitrate 295484057 bps (281.795556 Mbps)
inputs_connect: inputs channel client create
red_dispatcher_set_cursor_peer: 
main_channel_handle_parsed: agent start
main_channel_handle_parsed: agent start
xen_platform_log xen platform: XEN|DllInitialize: XEN 8.0.0 (0) (13.10.2014)
xen_platform_log xen platform: XEN|SystemGetStartOptions:  TESTSIGNING  NOEXECUTE=OPTIN
xen_platform_log xen platform: XEN|SystemGetVersionInformation: KERNEL: 6.1 (BUILD 7601) PLATFORM WIN32_NT (x64)
xen_platform_log xen platform: XEN|SystemGetVersionInformation: SP: 1.0 ()
xen_platform_log xen platform: XEN|SystemGetVersionInformation: SUITES:
xen_platform_log xen platform: XEN|SystemGetVersionInformation: - TERMINAL
xen_platform_log xen platform: XEN|SystemGetVersionInformation: - SINGLEUSERTS
xen_platform_log xen platform: XEN|SystemGetVersionInformation: TYPE: WORKSTATION
xen_platform_log xen platform: XEN|SystemGetMemoryInformation: RANGE[0] 00000000.00001000 - 00000000.0009efff
xen_platform_log xen platform: XEN|SystemGetMemoryInformation: RANGE[1] 00000000.00100000 - 00000000.77ffefff
xen_platform_log xen platform: XEN|SystemCpuInformation: ====> (0)
xen_platform_log xen platform: XEN|SystemCpuInformation: Manufacturer: GenuineIntel
xen_platform_log xen platform: XEN|SystemCpuInformation: Local APIC ID: 00
xen_platform_log xen platform: XEN|SystemCpuInformation: <==== (0)
xen_platform_log xen platform: XEN|SystemCpuInformation: ====> (1)
xen_platform_log xen platform: XEN|SystemCpuInformation: Manufacturer: GenuineIntel
xen_platform_log xen platform: XEN|SystemCpuInformation: Local APIC ID: 02
xen_platform_log xen platform: XEN|SystemCpuInformation: <==== (1)
xen_platform_log xen platform: XEN|HypercallInitialize: XEN 4.5
xen_platform_log xen platform: XEN|HypercallInitialize: INTERFACE 0x00040300
xen_platform_log xen platform: XEN|HypercallInitialize: HypercallPfn[0]: 0000000000074505
xen_platform_log xen platform: XENBUS|DriverEntry: XENBUS 8.0.0 (0) (13.10.2014)
xen_platform_log xen platform: XENBUS|FdoCreate: FFFFFA80028CCA30 (XS0001 XENBUS) [ACTIVE]
xen_platform_log xen platform: SHARED_INFO: MAP XENMAPSPACE_shared_info @ 00000000.f8000000
xen_platform_log xen platform: STORE: PAGE @ 00000000.feffc000
xen_platform_log xen platform: XENBUS|FdoScan: ====>
xen_platform_log xen platform: XENBUS|FdoSuspend: ====>
xen_platform_log xen platform: XENBUS|FdoBalloon: ====>
xen_platform_log xen platform: XENBUS|PdoCreate: FFFFFA8003EBC7F0 (VBD 00000001)
xen_platform_log xen platform: XENBUS|PdoCreate: FFFFFA800283CD40 (VIF 00000001)
xen_platform_log xen platform: XENBUS|PdoCreate: FFFFFA80024CA720 (IFACE 00000001)
xen_platform_log xen platform: XENVIF|DriverEntry: XENVIF 8.0.0 (0) (24.09.2014)
xen_platform_log xen platform: XENFILT|DriverEntry: XENFILT 8.0.0 (0) (13.10.2014)
xen_platform_log xen platform: XENFILT|DriverSetActiveDeviceInstance: PCI\VEN_5853&DEV_0001&SUBSYS_00015853&REV_01/10
xen_platform_log xen platform: XENFILT|UnplugCheckForPVDisks: NOT PRESENT
xen_platform_log xen platform: XENFILT|UnplugCheckForPVNics: NOT PRESENT
xen_platform_log xen platform: UNPLUG: PRE-AMBLE (DRIVERS NOT BLACKLISTED)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VIF: BUS_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VIF: DEBUG_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VIF: SUSPEND_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VIF: EVTCHN_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VIF: STORE_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VIF: RANGE_SET_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VIF: CACHE_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VIF: GNTTAB_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENVIF|FdoCreate: FFFFFA8002D956B0 (XS0001 XENVIF)
xen_platform_log xen platform: XENFILT|DriverUnload: XENFILT 8.0.0 (0) (13.10.2014)
xen_platform_log xen platform: XENVIF|__PdoSetPermanentAddress: 0 00:16:3E:41:AE:8B
xen_platform_log xen platform: XENVIF|__PdoSetContainerID: 0 {9999882d-5ecc-503e-924b-b4b937e3da35}
xen_platform_log xen platform: XENVIF|PdoCreate: FFFFFA8002739210 (0 00000001)
xen_platform_log xen platform: XENVIF|LinkGetRoutineAddress: netio.sys:NotifyUnicastIpAddressChange (00F9) @ FFFFF880015D4850
xen_platform_log xen platform: XENVIF|LinkGetRoutineAddress: netio.sys:GetUnicastIpAddressTable (0044) @ FFFFF880015D4900
xen_platform_log xen platform: XENVIF|LinkGetRoutineAddress: netio.sys:FreeMibTable (0022) @ FFFFF880015BCFD0
xen_platform_log xen platform: XENVIF|LinkGetRoutineAddress: netio.sys:CancelMibChangeNotify2 (0000) @ FFFFF880015C9D30
xen_platform_log xen platform: XENNET|DriverEntry: XENNET 8.0.0 (0) (24.09.2014)
xen_platform_log xen platform: XENVIF|LinkGetRoutineAddress: netio.sys:GetIfTable2 (0035) @ FFFFF880015D0270
xen_platform_log xen platform: XENVIF|LinkGetRoutineAddress: netio.sys:FreeMibTable (0022) @ FFFFF880015BCFD0
xen_platform_log xen platform: XENVIF|PdoStartDevice: fail4
xen_platform_log xen platform: XENVIF|PdoStartDevice: fail3
xen_platform_log xen platform: XENVIF|PdoStartDevice: fail2
xen_platform_log xen platform: XENVIF|PdoStartDevice: fail1 (c0000001)
xen_platform_log xen platform: XENNET|DriverUnload: XENNET 8.0.0 (0) (24.09.2014)
xen_platform_log xen platform: XENVBD|DriverEntry:8.0.0.0 (24/9/2014)
xen_platform_log xen platform: XENVBD|__DriverParseParameterKey:DriverParameters: 
xen_platform_log xen platform: XENVBD|DispatchPnp:DeviceObject 0xFFFFFA800264A380 is not FDO (0x0000000000000000) or a PDO
xen_platform_log xen platform: XENVBD|DispatchPnp:DeviceObject 0xFFFFFA800264A380 is not FDO (0x0000000000000000) or a PDO
xen_platform_log xen platform: XENVBD|DispatchPnp:DeviceObject 0xFFFFFA800264A380 is not FDO (0x0000000000000000) or a PDO
xen_platform_log xen platform: XENVBD|DispatchPnp:DeviceObject 0xFFFFFA800264A380 is not FDO (0x0000000000000000) or a PDO
xen_platform_log xen platform: XENVBD|DispatchPnp:DeviceObject 0xFFFFFA800264A380 is not FDO (0x0000000000000000) or a PDO
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: BUS_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENVBD|DispatchPnp:DeviceObject 0xFFFFFA800264A380 is not FDO (0x0000000000000000) or a PDO
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: BUS_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: Version = 0
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: Master = TRUE
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: ScatterGather = TRUE
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: DemandMode = FALSE
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: AutoInitialize = FALSE
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: Dma32BitAddresses = TRUE
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: IgnoreCount = FALSE
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: Dma64BitAddresses = TRUE
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: BusNumber = 00000000
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: DmaChannel = ffffffff
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: InterfaceType = Internal
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: DmaWidth = 8Bits
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: DmaSpeed = Compatible
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: MaximumLength = 000b0000
xen_platform_log xen platform: XENBUS|DmaDumpDeviceDescription: DmaPort = ffffffff
xen_platform_log xen platform: XENBUS|DmaGetAdapter: no interception
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: STORE_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: EVTCHN_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: GNTTAB_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: SUSPEND_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: DEBUG_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: VBD: EMULATED_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENVBD|__FdoSetDevicePowerState:POWER D3 to D0
xen_platform_log xen platform: XENVBD|__FdoD3ToD0:D3->D0
xen_platform_log xen platform: XENVBD|__FdoIsPdoUnplugged:Target[0] : (vbd/768) Emulated NOT_KNOWN (assumed PRESENT)
xen_platform_log xen platform: XENVBD|PdoCreate:Target[0] : Creating (Emulated)
xen_platform_log xen platform: XENVBD|PdoSetDevicePowerState:Target[0] : POWER D3 to D0
xen_platform_log xen platform: XENVBD|PdoD3ToD0:Target[0] : D3->D0 (Emulated)
xen_platform_log xen platform: XENVBD|PdoCreate:Target[0] : Created (Emulated)
xen_platform_log xen platform: XENVBD|FdoLogTargets:ScanThread ===>
xen_platform_log xen platform: XENVBD|FdoLogTargets:ScanThread : Target[0] = 0xFFFFFA8002896A80 (present)
xen_platform_log xen platform: XENVBD|FdoLogTargets:ScanThread <===
xen_platform_log xen platform: XENVBD|FdoDispatchPnp:14:QUERY_PNP_DEVICE_STATE -> c00000bb
xen_platform_log xen platform: XENVBD|__ValidateSrbForPdo:Target[0] : Disk is Emulated (a0:SCSIOP_REPORT_LUNS)
xen_platform_log xen platform: XENVBD|__ValidateSrbForPdo:Target[0] : Disk is Emulated (12:SCSIOP_INQUIRY)
xen_platform_log xen platform: XENIFACE|DriverEntry: 8.0.0.0 (8/10/2014)
xen_platform_log xen platform: XENFILT|DriverEntry: XENFILT 8.0.0 (0) (13.10.2014)
xen_platform_log xen platform: XENFILT|DriverSetActiveDeviceInstance: PCI\VEN_5853&DEV_0001&SUBSYS_00015853&REV_01/10
xen_platform_log xen platform: XENFILT|UnplugCheckForPVDisks: PRESENT
xen_platform_log xen platform: XENFILT|UnplugCheckForPVNics: PRESENT
xen_platform_log xen platform: UNPLUG: PRE-AMBLE (DRIVERS NOT BLACKLISTED)
xen_platform_log xen platform: UNPLUG: DISKS
xen_platform_log xen platform: UNPLUG: NICS
xen_platform_log xen platform: XENIFACE|ThreadCreate: Create thread FFFFF880057205B0 FFFFFA8003D54830
xen_platform_log xen platform: XENIFACE|ThreadCreate: Create thread FFFFF8800571F630 FFFFFA8003D54840
xen_platform_log xen platform: XENBUS|PdoQueryInterface: IFACE: SUSPEND_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: IFACE: SHARED_INFO_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENBUS|PdoQueryInterface: IFACE: STORE_INTERFACE (VERSION 1)
xen_platform_log xen platform: XENIFACE|FdoInitialiseXSRegistryEntries: no such xenstore key
xen_platform_log xen platform: XENIFACE|FdoInitialiseXSRegistryEntries: Failed to initialise registry (c0000022)
xen_platform_log xen platform: XENIFACE|ThreadCreate: Create thread FFFFF8800572008C FFFFFA8003D54A50
xen_platform_log xen platform: XENIFACE|FdoCreate: FFFFFA8001910040 (IFACE)
xen_platform_log xen platform: XENFILT|DriverUnload: XENFILT 8.0.0 (0) (13.10.2014)
xen_platform_log xen platform: XENIFACE|WmiInit: DRV: XenIface WMI Initialisation
xen_platform_log xen platform: XEN|DEBUG: ====> (xenbus.sys + 0000000000011990)
xen_platform_log xen platform: XENBUS|SUSPEND: Count = 0
xen_platform_log xen platform: XENBUS|SUSPEND: EARLY: xenbus.sys + 00000000000072F4 (FFFFFA800193D000)
xen_platform_log xen platform: XENBUS|SUSPEND: EARLY: xenbus.sys + 000000000000EAB0 (FFFFFA8003226A40)
xen_platform_log xen platform: XENBUS|SUSPEND: EARLY: xenbus.sys + 000000000001115C (FFFFFA800191B000)
xen_platform_log xen platform: XENBUS|SUSPEND: EARLY: xenbus.sys + 000000000000C7BC (FFFFFA8002942470)
xen_platform_log xen platform: XENBUS|SUSPEND: LATE: xenbus.sys + 000000000001119C (FFFFFA800191B000)
xen_platform_log xen platform: XENBUS|SUSPEND: LATE: xenbus.sys + 000000000000B62C (FFFFFA8003E04010)
xen_platform_log xen platform: XENBUS|SUSPEND: LATE: xenbus.sys + 000000000000DF60 (FFFFFA8003EBC6A0)
xen_platform_log xen platform: XENBUS|SUSPEND: LATE: xenvif.sys + 0000000000007738 (FFFFFA80025BBB80)
xen_platform_log xen platform: XENBUS|SUSPEND: LATE: xenvif.sys + 000000000000BE50 (FFFFFA80018AE010)
xen_platform_log xen platform: XENBUS|SUSPEND: LATE: xenbus.sys + 000000000000DF60 (FFFFFA80026B59B0)
xen_platform_log xen platform: XENBUS|SUSPEND: LATE: xenvbd.sys + 0000000000008C4C (FFFFFA80018F4538)
xen_platform_log xen platform: XENBUS|SUSPEND: LATE: xenvbd.sys + 000000000000F500 (FFFFFA8003ACE740)
xen_platform_log xen platform: XENBUS|SUSPEND: LATE: xenbus.sys + 000000000000DF60 (FFFFFA80024CA5D0)
xen_platform_log xen platform: XENBUS|SUSPEND: LATE: xeniface.sys + 0000000000002158 (FFFFFA8003D547C0)
xen_platform_log xen platform: XEN|DEBUG: <==== (xenbus.sys + 0000000000011990)
xen_platform_log xen platform: XEN|DEBUG: ====> (xenbus.sys + 0000000000012AD4)
xen_platform_log xen platform: XENBUS|RANGE_SET: RANGE SETS:
xen_platform_log xen platform: XENBUS|RANGE_SET:  - io_space:
xen_platform_log xen platform: XENBUS|RANGE_SET:    {f8021000 - f8ffffff}*
xen_platform_log xen platform: XENBUS|RANGE_SET:  - balloon:
xen_platform_log xen platform: XENBUS|RANGE_SET:    EMPTY
xen_platform_log xen platform: XENBUS|RANGE_SET:  - device_vif_0_transmitter_req_id:
xen_platform_log xen platform: XENBUS|RANGE_SET:    {1 - 3ff}*
xen_platform_log xen platform: XENBUS|RANGE_SET:  - gnttab:
xen_platform_log xen platform: XENBUS|RANGE_SET:    EMPTY
xen_platform_log xen platform: XEN|DEBUG: <==== (xenbus.sys + 0000000000012AD4)
xen_platform_log xen platform: XEN|DEBUG: ====> (xenbus.sys + 0000000000006F48)
xen_platform_log xen platform: XENBUS|EVTCHN: EVENT CHANNELS:
xen_platform_log xen platform: XENBUS|EVTCHN: - (0001) BY xenbus.sys + 0000000000010690 [TRUE]
xen_platform_log xen platform: XENBUS|EVTCHN: FIXED: Mask = FALSE
xen_platform_log xen platform: XENBUS|EVTCHN: - (0006) BY xenbus.sys + 00000000000088A8 [TRUE]
xen_platform_log xen platform: XENBUS|EVTCHN: VIRQ: Index = 1
xen_platform_log xen platform: XEN|DEBUG: <==== (xenbus.sys + 0000000000006F48)
xen_platform_log xen platform: XEN|DEBUG: ====> (xenbus.sys + 000000000000E7EC)
xen_platform_log xen platform: XENBUS|SHARED_INFO: Address = 00000000.f8000000
xen_platform_log xen platform: XEN|DEBUG: <==== (xenbus.sys + 000000000000E7EC)
xen_platform_log xen platform: XEN|DEBUG: ====> (xenbus.sys + 00000000000103B8)
xen_platform_log xen platform: XENBUS|STORE: Address = 00000000.feffc000
xen_platform_log xen platform: XENBUS|STORE: WATCHES:
xen_platform_log xen platform: XENBUS|STORE: - (4792) ON device BY xenbus.sys + 000000000000890D [ACTIVE]
xen_platform_log xen platform: XENBUS|STORE: - (4793) ON control/shutdown BY xenbus.sys + 0000000000008949 [ACTIVE]
xen_platform_log xen platform: XENBUS|STORE: - (4794) ON memory/target BY xenbus.sys + 00000000000089BC [ACTIVE]
xen_platform_log xen platform: XENBUS|STORE: - (4795) ON device/vif BY xenvif.sys + 00000000000058B2 [ACTIVE]
xen_platform_log xen platform: XENBUS|STORE: - (479B) ON device/vbd BY xenvbd.sys + 000000000000964A [ACTIVE]
xen_platform_log xen platform: XEN|DEBUG: <==== (xenbus.sys + 00000000000103B8)
xen_platform_log xen platform: XEN|DEBUG: ====> (xenbus.sys + 0000000000014428)
xen_platform_log xen platform: XENBUS|CACHE: CACHES:
xen_platform_log xen platform: XENBUS|CACHE: - device_vif_0_receiver_packet: Count = 0 (Reservation = 0)
xen_platform_log xen platform: XENBUS|CACHE: - device_vif_0_receiver_fragment: Count = 0 (Reservation = 0)
xen_platform_log xen platform: XENBUS|CACHE: - device_vif_0_transmitter_buffer: Count = 0 (Reservation = 0)
xen_platform_log xen platform: XENBUS|CACHE: - device_vif_0_transmitter_fragment: Count = 0 (Reservation = 0)
xen_platform_log xen platform: XEN|DEBUG: <==== (xenbus.sys + 0000000000014428)
xen_platform_log xen platform: XEN|DEBUG: ====> (xenbus.sys + 000000000000C454)
xen_platform_log xen platform: XENBUS|GNTTAB: Address = 00000000.f8001000
xen_platform_log xen platform: XENBUS|GNTTAB: FrameIndex = -1
xen_platform_log xen platform: XEN|DEBUG: <==== (xenbus.sys + 000000000000C454)
xen_platform_log xen platform: XEN|DEBUG: ====> (xenvbd.sys + 00000000000064B4)
xen_platform_log xen platform: XENVBD: FDO: Version: 8.0.0.0 (24/9/2014)
xen_platform_log xen platform: XENVBD: FDO: Fdo: 0xFFFFFA80018F4538 (ref-count 1) CRASHING
xen_platform_log xen platform: XENVBD: FDO: DevObj 0xFFFFFA800264A380 LowerDevObj 0xFFFFFA8003EBC7F0 PhysDevObj 0xFFFFFA8003EBC7F0
xen_platform_log xen platform: XENVBD: FDO: DevicePowerState: D0
xen_platform_log xen platform: XENVBD: FDO: Enumerator      : vbd (0x0000000000000000)
xen_platform_log xen platform: XENVBD: FDO: Srbs            : 0 / 1 (1526 Total)
xen_platform_log xen platform: XENVBD: BUFFER: Allocated/Freed : 32 / 0
xen_platform_log xen platform: XENVBD: BUFFER: Free (Cur/Max)  : 32 / 32
xen_platform_log xen platform: XENVBD: BUFFER: Used (Cur/Max)  : 0 / 0
xen_platform_log xen platform: XENVBD: BUFFER: Reaped          : 0 / 0
xen_platform_log xen platform: XENVBD: FDO: ====> Target[0  ]    : 0xFFFFFA8002896A80
xen_platform_log xen platform: XENVBD: PDO: Fdo 0xFFFFFA80018F4538 DeviceObject 0x0000000000000000
xen_platform_log xen platform: XENVBD: PDO: ReferenceCount 1
xen_platform_log xen platform: XENVBD: PDO: DevicePnpState Present (Invalid)
xen_platform_log xen platform: XENVBD: PDO: DevicePowerState D0
xen_platform_log xen platform: XENVBD: PDO: EMULATED Not Missing
xen_platform_log xen platform: XENVBD: PDO: BLKIF_OPs: READ=0 WRITE=0
xen_platform_log xen platform: XENVBD: PDO: BLKIF_OPs: INDIRECT_READ=0 INDIRECT_WRITE=0
xen_platform_log xen platform: XENVBD: PDO: BLKIF_OPs: BARRIER=0 DISCARD=0
xen_platform_log xen platform: XENVBD: PDO: Failed: Maps=0 Bounces=0 Grants=0
xen_platform_log xen platform: XENVBD: PDO: Segments Granted=0 Bounced=0
xen_platform_log xen platform: XENVBD: LOOKASIDE: REQUESTs: 0 / 0 (0 failed)
xen_platform_log xen platform: XENVBD: LOOKASIDE: SEGMENTs: 0 / 0 (0 failed)
xen_platform_log xen platform: XENVBD: LOOKASIDE: INDIRECTs: 0 / 0 (0 failed)
xen_platform_log xen platform: XENVBD: QUEUE: Fresh     : 0 / 0
xen_platform_log xen platform: XENVBD: QUEUE: Prepared  : 0 / 0
xen_platform_log xen platform: XENVBD: QUEUE: Submitted : 0 / 0
xen_platform_log xen platform: XENVBD: QUEUE: Shutdown  : 0 / 0
xen_platform_log xen platform: XENVBD: FRONTEND: TargetId=0 DeviceId=768 BackendId=32756
xen_platform_log xen platform: XENVBD: FRONTEND: FrontendPath device/vbd/768
xen_platform_log xen platform: XENVBD: FRONTEND: BackendPath  NULL
xen_platform_log xen platform: XENVBD: FRONTEND: TargetPath   data/scsi/target/0
xen_platform_log xen platform: XENVBD: FRONTEND: State   : INITIALIZED
xen_platform_log xen platform: XENVBD: FRONTEND: Caps    : 
xen_platform_log xen platform: XENVBD: FRONTEND: Features: 
xen_platform_log xen platform: XENVBD: FRONTEND: DiskInfo: 0 @ 512 (0) 00000000
xen_platform_log xen platform: XENVBD: GRANTER: DISCONNECTED DISABLED
xen_platform_log xen platform: XENVBD: GRANTER: 0 / 0
xen_platform_log xen platform: XENVBD: BLOCKRING: Requests  : 0 / 0 / 0
xen_platform_log xen platform: XENVBD: BLOCKRING: SharedRing : 0x0000000000000000
xen_platform_log xen platform: XENVBD: BLOCKRING: FrontRing  : 0 / 0 (0)
xen_platform_log xen platform: XENVBD: BLOCKRING: Order      : 0
xen_platform_log xen platform: XENVBD: BLOCKRING: Grants[0 ] : 0x0000000000000000 (0)
xen_platform_log xen platform: XENVBD: NOTIFIER: Int / DPC : 0 / 0
xen_platform_log xen platform: XENVBD: FDO: <==== Target[0  ]    : 0xFFFFFA8002896A80
xen_platform_log xen platform: XEN|DEBUG: <==== (xenvbd.sys + 00000000000064B4)
xen_platform_log xen platform: XEN|BUGCHECK: ====>
xen_platform_log xen platform: XEN|BUGCHECK: 0000007A: FFFFF6FC00017560 FFFFFFFFC0000185 0000000033599860 FFFFF80002EACFC0
xen_platform_log xen platform: XEN|BUGCHECK: CONTEXT (FFFFF8800310EB50):
xen_platform_log xen platform: XEN|BUGCHECK: - GS = 002B
xen_platform_log xen platform: XEN|BUGCHECK: - FS = 0053
xen_platform_log xen platform: XEN|BUGCHECK: - ES = 002B
xen_platform_log xen platform: XEN|BUGCHECK: - DS = 002B
xen_platform_log xen platform: XEN|BUGCHECK: - SS = 0018
xen_platform_log xen platform: XEN|BUGCHECK: - CS = 0010
xen_platform_log xen platform: XEN|BUGCHECK: - EFLAGS = 00000082
xen_platform_log xen platform: XEN|BUGCHECK: - RDI = 0000000000017560
xen_platform_log xen platform: XEN|BUGCHECK: - RSI = 00000000C0000185
xen_platform_log xen platform: XEN|BUGCHECK: - RBX = 0000000003BD58F8
xen_platform_log xen platform: XEN|BUGCHECK: - RDX = 0000000000000000
xen_platform_log xen platform: XEN|BUGCHECK: - RCX = 000000000310EB50
xen_platform_log xen platform: XEN|BUGCHECK: - RAX = 000000002ECF4902
xen_platform_log xen platform: XEN|BUGCHECK: - RBP = 0000000033599860
xen_platform_log xen platform: XEN|BUGCHECK: - RIP = 0000000003BCBA43
xen_platform_log xen platform: XEN|BUGCHECK: - RSP = 000000000310EB30
xen_platform_log xen platform: XEN|BUGCHECK: - R8 = 0000000000000000
xen_platform_log xen platform: XEN|BUGCHECK: - R9 = 0000000000000000
xen_platform_log xen platform: XEN|BUGCHECK: - R10 = 0000000000000000
xen_platform_log xen platform: XEN|BUGCHECK: - R11 = 0000000000000000
xen_platform_log xen platform: XEN|BUGCHECK: - R12 = 000000000000007A
xen_platform_log xen platform: XEN|BUGCHECK: - R13 = 0000000000000001
xen_platform_log xen platform: XEN|BUGCHECK: - R14 = 0000000002EACFC0
xen_platform_log xen platform: XEN|BUGCHECK: - R15 = 0000000002CB7C40
xen_platform_log xen platform: XEN|BUGCHECK: STACK:
xen_platform_log xen platform: XEN|BUGCHECK: 000000000310F040: (0000000000000003 0000000003BCE0F0 0000000003BCD860 000000000000007A) xen.sys + 00000000000049AC
xen_platform_log xen platform: XEN|BUGCHECK: 000000000310F090: (0000000003BD60D0 0000000000000000 0000000000000004 0000000002C80500) ntoskrnl.exe + 0000000000128585
xen_platform_log xen platform: XEN|BUGCHECK: 000000000310F0C0: (0000000003BD60D0 0000000002C80500 000000000000000F 0000000001780660) ntoskrnl.exe + 0000000000167C0D
xen_platform_log xen platform: XEN|BUGCHECK: 000000000310F790: (000000000310F938 00000000039BDA80 0000000000000000 00000000039BD990) ntoskrnl.exe + 0000000000075CC4
xen_platform_log xen platform: XEN|BUGCHECK: 000000000310F7D0: (000000000000007A 0000000000017560 00000000C0000185 0000000033599860) ntoskrnl.exe + 00000000000E8752
xen_platform_log xen platform: XEN|BUGCHECK: 000000000310F8B0: (00000000039BD990 000000000310F940 0000000002CBA540 00000000039BD990) ntoskrnl.exe + 000000000009C91F
xen_platform_log xen platform: XEN|BUGCHECK: 000000000310F980: (0000000000000000 0000000000000008 00000000FFFFFFFF 000000000178EB50) ntoskrnl.exe + 00000000000831B9
xen_platform_log xen platform: XEN|BUGCHECK: 000000000310FAE0: (0000000000000008 0000000002EACFC0 0000000001780600 00000000021B0BC0) ntoskrnl.exe + 0000000000073CEE
xen_platform_log xen platform: XEN|BUGCHECK: 000000000310FC78: (0000000002EDA20C 0000000000000000 0000000000000001 00000000039CE6A0) ntoskrnl.exe + 00000000004A2FC0

--------------080104040904080607010802
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
--------------080104040904080607010802--


From win-pv-devel-bounces@lists.xenproject.org Fri Oct 17 12:02:44 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 17 Oct 2014 12:02:44 +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 1Xf6F1-00073E-82; Fri, 17 Oct 2014 12:02:43 +0000
Received: from mail6.bemta4.messagelabs.com ([85.158.143.247])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <Paul.Durrant@citrix.com>) id 1Xf6Ez-000738-Q2
	for win-pv-devel@lists.xenproject.org; Fri, 17 Oct 2014 12:02:42 +0000
Received: from [85.158.143.35] by server-1.bemta-4.messagelabs.com id
	C0/9D-02952-16501445; Fri, 17 Oct 2014 12:02:41 +0000
X-Env-Sender: Paul.Durrant@citrix.com
X-Msg-Ref: server-5.tower-21.messagelabs.com!1413547359!13596961!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: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 16015 invoked from network); 17 Oct 2014 12:02:39 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-5.tower-21.messagelabs.com with RC4-SHA encrypted SMTP;
	17 Oct 2014 12:02:39 -0000
X-IronPort-AV: E=Sophos;i="5.04,738,1406592000"; d="scan'208";a="26040690"
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: [win-pv-devel] Blue screen on xenvif install
Thread-Index: AQHP6R88TE2eCcEtSU6laq0K5grY5pwybJlQ///obQCAACb2gP//8KIAgAAjAsCAAAnUgIAAIsDw///v2YAABHezEP//4XCA///QCHCAAWc2gP//3DXAgAA7NgD//84M0A==
Date: Fri, 17 Oct 2014 12:02:37 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD011106840@AMSPEX01CL01.citrite.net>
References: <543F887B.5030500@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111050FF@AMSPEX01CL01.citrite.net>
	<543F912C.8000504@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD01110526F@AMSPEX01CL01.citrite.net>
	<543FA4F6.5090804@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111053EA@AMSPEX01CL01.citrite.net>
	<543FCA93.2010805@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111057A2@AMSPEX01CL01.citrite.net>
	<543FDA2D.2090900@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111058E6@AMSPEX01CL01.citrite.net>
	<543FDE85.1030908@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD011105A08@AMSPEX01CL01.citrite.net>
	<5440E39B.6080104@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD01110668E@AMSPEX01CL01.citrite.net>
	<5440F740.4070701@m2r.biz>
In-Reply-To: <5440F740.4070701@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] Blue screen on xenvif install
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: 17 October 2014 12:02
> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> Subject: Re: [win-pv-devel] Blue screen on xenvif install
> 
> Il 17/10/2014 11:48, Paul Durrant ha scritto:
> >> -----Original Message-----
> >> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> >> bounces@lists.xenproject.org] On Behalf Of Fabio Fantoni
> >> Sent: 17 October 2014 10:39
> >> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >> Subject: Re: [win-pv-devel] Blue screen on xenvif install
> >>
> >> Il 16/10/2014 17:58, Paul Durrant ha scritto:
> >>>> -----Original Message-----
> >>>> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-
> devel-
> >>>> bounces@lists.xenproject.org] On Behalf Of Fabio Fantoni
> >>>> Sent: 16 October 2014 16:05
> >>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >>>> Subject: Re: [win-pv-devel] Blue screen on xenvif install
> >>>>
> >>>> Il 16/10/2014 16:54, Paul Durrant ha scritto:
> >>>>>> -----Original Message-----
> >>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >>>>>> Sent: 16 October 2014 15:46
> >>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >>>>>> Subject: Re: Blue screen on xenvif install
> >>>>>>
> >>>>>> Il 16/10/2014 15:45, Paul Durrant ha scritto:
> >>>>>>>> -----Original Message-----
> >>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >>>>>>>> Sent: 16 October 2014 14:40
> >>>>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >>>>>>>> Subject: Re: Blue screen on xenvif install
> >>>>>>>>
> >>>>>>>> Il 16/10/2014 13:04, Paul Durrant ha scritto:
> >>>>>>>>>> -----Original Message-----
> >>>>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >>>>>>>>>> Sent: 16 October 2014 11:59
> >>>>>>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >>>>>>>>>> Subject: Re: Blue screen on xenvif install
> >>>>>>>>>>
> >>>>>>>>>> Il 16/10/2014 12:00, Paul Durrant ha scritto:
> >>>>>>>>>>>> -----Original Message-----
> >>>>>>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >>>>>>>>>>>> Sent: 16 October 2014 10:35
> >>>>>>>>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >>>>>>>>>>>> Subject: Re: Blue screen on xenvif install
> >>>>>>>>>>>>
> >>>>>>>>>>>> Il 16/10/2014 10:59, Paul Durrant ha scritto:
> >>>>>>>>>>>>>> -----Original Message-----
> >>>>>>>>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >>>>>>>>>>>>>> Sent: 16 October 2014 09:58
> >>>>>>>>>>>>>> To: win-pv-devel@lists.xenproject.org
> >>>>>>>>>>>>>> Cc: Paul Durrant
> >>>>>>>>>>>>>> Subject: Blue screen on xenvif install
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> Today I tried to install new winpv driver to other 3
> windows 7
> >>>> pro
> >>>>>> 64
> >>>>>>>>>>>>>> bit domUs.
> >>>>>>>>>>>>>> Days ago I installed them successful on one windows 7 pro
> 64
> >>>> bit
> >>>>>> and
> >>>>>>>>>> one
> >>>>>>>>>>>>>> windows 8.1 enterprise 64 bit.
> >>>>>>>>>>>>>> On first domUs I tried to install them today I installed
> xenbus
> >>>> and
> >>>>>>>>>>>>>> xenvbd successful but on xenvif install windows crashed
> >> with
> >>>> blue
> >>>>>>>>>>>>>> screen, if I saw it correctly was an kernel in-page error or
> >>>>>> something
> >>>>>>>>>>>>>> similar.
> >>>>>>>>>>>>>> After reboot I retried to install xenvif but now always fails.
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>> Sounds odd. Do you have a MEMORY.DMP?
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>          Paul
> >>>>>>>>>>>> Windows is setted to write dump of kernel memory on
> system
> >>>> error
> >>>>>>>> but
> >>>>>>>>>>>> %systemroot%\memory.dmp is missed :(
> >>>>>>>>>>>> I also checked the windows events log but I found only
> kernel-
> >>>>>> power
> >>>>>>>> as
> >>>>>>>>>>>> critical that seems not contains useful data.
> >>>>>>>>>>>>
> >>>>>>>>>>>> I found probably useful data in xl dmesg (I copied all below
> >> from
> >>>>>> domU
> >>>>>>>>>>>> start to xen bug):
> >>>>>>>>>>>>> (d98) HVM Loader
> >>>>>>>>>>>>> (d98) Detected Xen v4.5-unstable
> >>>>>>>>>>>>> (d98) Xenbus rings @0xfeffc000, event channel 1
> >>>>>>>>>>>>> (d98) System requested SeaBIOS
> >>>>>>>>>>>>> (d98) CPU speed is 2660 MHz
> >>>>>>>>>>>>> (d98) Relocating guest memory for lowmem MMIO space
> >>>> disabled
> >>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 0 changed 0 -> 5
> >>>>>>>>>>>>> (d98) PCI-ISA link 0 routed to IRQ5
> >>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 1 changed 0 -> 10
> >>>>>>>>>>>>> (d98) PCI-ISA link 1 routed to IRQ10
> >>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 2 changed 0 -> 11
> >>>>>>>>>>>>> (d98) PCI-ISA link 2 routed to IRQ11
> >>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 3 changed 0 -> 5
> >>>>>>>>>>>>> (d98) PCI-ISA link 3 routed to IRQ5
> >>>>>>>>>>>>> (d98) pci dev 01:3 INTA->IRQ10
> >>>>>>>>>>>>> (d98) pci dev 02:0 INTA->IRQ11
> >>>>>>>>>>>>> (d98) pci dev 03:0 INTA->IRQ5
> >>>>>>>>>>>>> (d98) pci dev 04:0 INTA->IRQ5
> >>>>>>>>>>>>> (d98) pci dev 05:0 INTA->IRQ10
> >>>>>>>>>>>>> (d98) pci dev 06:0 INTA->IRQ11
> >>>>>>>>>>>>> (d98) pci dev 1d:0 INTA->IRQ10
> >>>>>>>>>>>>> (d98) pci dev 1d:1 INTB->IRQ11
> >>>>>>>>>>>>> (d98) pci dev 1d:2 INTC->IRQ5
> >>>>>>>>>>>>> (d98) pci dev 1d:7 INTD->IRQ5
> >>>>>>>>>>>>> (d98) No RAM in high memory; setting high_mem resource
> >> base
> >>>> to
> >>>>>>>>>>>> 100000000
> >>>>>>>>>>>>> (d98) pci dev 05:0 bar 10 size 004000000: 0f0000000
> >>>>>>>>>>>>> (d98) pci dev 05:0 bar 14 size 004000000: 0f4000000
> >>>>>>>>>>>>> (d98) pci dev 02:0 bar 14 size 001000000: 0f8000008
> >>>>>>>>>>>>> (d98) pci dev 06:0 bar 30 size 000040000: 0f9000000
> >>>>>>>>>>>>> (d98) pci dev 05:0 bar 30 size 000010000: 0f9040000
> >>>>>>>>>>>>> (d98) pci dev 03:0 bar 10 size 000004000: 0f9050000
> >>>>>>>>>>>>> (d98) pci dev 05:0 bar 18 size 000002000: 0f9054000
> >>>>>>>>>>>>> (d98) pci dev 04:0 bar 14 size 000001000: 0f9056000
> >>>>>>>>>>>>> (d98) pci dev 1d:7 bar 10 size 000001000: 0f9057000
> >>>>>>>>>>>>> (d98) pci dev 02:0 bar 10 size 000000100: 00000c001
> >>>>>>>>>>>>> (d98) pci dev 06:0 bar 10 size 000000100: 00000c101
> >>>>>>>>>>>>> (d98) pci dev 06:0 bar 14 size 000000100: 0f9058000
> >>>>>>>>>>>>> (d98) pci dev 04:0 bar 10 size 000000020: 00000c201
> >>>>>>>>>>>>> (d98) pci dev 05:0 bar 1c size 000000020: 00000c221
> >>>>>>>>>>>>> (d98) pci dev 1d:0 bar 20 size 000000020: 00000c241
> >>>>>>>>>>>>> (d98) pci dev 1d:1 bar 20 size 000000020: 00000c261
> >>>>>>>>>>>>> (d98) pci dev 1d:2 bar 20 size 000000020: 00000c281
> >>>>>>>>>>>>> (d98) pci dev 01:1 bar 20 size 000000010: 00000c2a1
> >>>>>>>>>>>>> (d98) Multiprocessor initialisation:
> >>>>>>>>>>>>> (d98)  - CPU0 ... 36-bit phys ... fixed MTRRs ... var MTRRs
> [1/8]
> >> ...
> >>>>>>>>>>>>> done.
> >>>>>>>>>>>>> (d98)  - CPU1 ... 36-bit phys ... fixed MTRRs ... var MTRRs
> [1/8]
> >> ...
> >>>>>>>>>>>>> done.
> >>>>>>>>>>>>> (d98) Testing HVM environment:
> >>>>>>>>>>>>> (d98)  - REP INSB across page boundaries ... passed
> >>>>>>>>>>>>> (d98)  - GS base MSRs and SWAPGS ... passed
> >>>>>>>>>>>>> (d98) Passed 2 of 2 tests
> >>>>>>>>>>>>> (d98) Writing SMBIOS tables ...
> >>>>>>>>>>>>> (d98) Loading SeaBIOS ...
> >>>>>>>>>>>>> (d98) Creating MP tables ...
> >>>>>>>>>>>>> (d98) Loading ACPI ...
> >>>>>>>>>>>>> (d98) S3 disabled
> >>>>>>>>>>>>> (d98) S4 disabled
> >>>>>>>>>>>>> (d98) vm86 TSS at fc00a100
> >>>>>>>>>>>>> (d98) BIOS map:
> >>>>>>>>>>>>> (d98)  10000-100d3: Scratch space
> >>>>>>>>>>>>> (d98)  c0000-fffff: Main BIOS
> >>>>>>>>>>>>> (d98) E820 table:
> >>>>>>>>>>>>> (d98)  [00]: 00000000:00000000 - 00000000:000a0000: RAM
> >>>>>>>>>>>>> (d98)  HOLE: 00000000:000a0000 - 00000000:000c0000
> >>>>>>>>>>>>> (d98)  [01]: 00000000:000c0000 - 00000000:00100000:
> >> RESERVED
> >>>>>>>>>>>>> (d98)  [02]: 00000000:00100000 - 00000000:78000000: RAM
> >>>>>>>>>>>>> (d98)  HOLE: 00000000:78000000 - 00000000:fc000000
> >>>>>>>>>>>>> (d98)  [03]: 00000000:fc000000 - 00000001:00000000:
> RESERVED
> >>>>>>>>>>>>> (d98) Invoking SeaBIOS ...
> >>>>>>>>>>>>> (d98) SeaBIOS (version
> >>>>>>>>>>>>> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
> >>>>>>>>>>>>> (d98)
> >>>>>>>>>>>>> (d98) Found Xen hypervisor signature at 40000100
> >>>>>>>>>>>>> (d98) Running on QEMU (i440fx)
> >>>>>>>>>>>>> (d98) xen: copy e820...
> >>>>>>>>>>>>> (d98) Relocating init from 0x000df619 to 0x77fae600 (size
> >> 71995)
> >>>>>>>>>>>>> (d98) CPU Mhz=2660
> >>>>>>>>>>>>> (d98) Found 13 PCI devices (max PCI bus is 00)
> >>>>>>>>>>>>> (d98) Allocated Xen hypercall page at 77fff000
> >>>>>>>>>>>>> (d98) Detected Xen v4.5-unstable
> >>>>>>>>>>>>> (d98) xen: copy BIOS tables...
> >>>>>>>>>>>>> (d98) Copying SMBIOS entry point from 0x00010010 to
> >>>> 0x000f0f40
> >>>>>>>>>>>>> (d98) Copying MPTABLE from 0xfc001170/fc001180 to
> >> 0x000f0e40
> >>>>>>>>>>>>> (d98) Copying PIR from 0x00010030 to 0x000f0dc0
> >>>>>>>>>>>>> (d98) Copying ACPI RSDP from 0x000100b0 to 0x000f0d90
> >>>>>>>>>>>>> (d98) Using pmtimer, ioport 0xb008
> >>>>>>>>>>>>> (d98) Scan for VGA option rom
> >>>>>>>>>>>>> (d98) Running option rom at c000:0003
> >>>>>>>>>>>>> (XEN) stdvga.c:147:d98v0 entering stdvga and caching
> modes
> >>>>>>>>>>>>> (d98) pmm call arg1=0
> >>>>>>>>>>>>> (d98) Turning on vga text mode console
> >>>>>>>>>>>>> (d98) SeaBIOS (version
> >>>>>>>>>>>>> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
> >>>>>>>>>>>>> (d98) Machine UUID f4cdeb74-0db1-4748-948d-
> 42579a494120
> >>>>>>>>>>>>> (d98) EHCI init on dev 00:1d.7 (regs=0xf9057020)
> >>>>>>>>>>>>> (d98) Found 0 lpt ports
> >>>>>>>>>>>>> (d98) Found 0 serial ports
> >>>>>>>>>>>>> (d98) ATA controller 1 at 1f0/3f4/0 (irq 14 dev 9)
> >>>>>>>>>>>>> (d98) ATA controller 2 at 170/374/0 (irq 15 dev 9)
> >>>>>>>>>>>>> (d98) ata0-0: QEMU HARDDISK ATA-7 Hard-Disk (40720
> >> MiBytes)
> >>>>>>>>>>>>> (d98) Searching bootorder for:
> >>>> /pci@i0cf8/*@1,1/drive@0/disk@0
> >>>>>>>>>>>>> (d98) DVD/CD [ata0-1: QEMU DVD-ROM ATAPI-4 DVD/CD]
> >>>>>>>>>>>>> (d98) Searching bootorder for:
> >>>> /pci@i0cf8/*@1,1/drive@0/disk@1
> >>>>>>>>>>>>> (d98) UHCI init on dev 00:1d.0 (io=c240)
> >>>>>>>>>>>>> (d98) UHCI init on dev 00:1d.1 (io=c260)
> >>>>>>>>>>>>> (d98) UHCI init on dev 00:1d.2 (io=c280)
> >>>>>>>>>>>>> (d98) PS2 keyboard initialized
> >>>>>>>>>>>>> (d98) All threads complete.
> >>>>>>>>>>>>> (d98) Scan for option roms
> >>>>>>>>>>>>> (d98) Running option rom at c980:0003
> >>>>>>>>>>>>> (d98) pmm call arg1=1
> >>>>>>>>>>>>> (d98) pmm call arg1=0
> >>>>>>>>>>>>> (d98) pmm call arg1=1
> >>>>>>>>>>>>> (d98) pmm call arg1=0
> >>>>>>>>>>>>> (d98) Searching bootorder for: /pci@i0cf8/*@6
> >>>>>>>>>>>>> (d98)
> >>>>>>>>>>>>> (d98) Press F12 for boot menu.
> >>>>>>>>>>>>> (d98)
> >>>>>>>>>>>>> (d98) Searching bootorder for: HALT
> >>>>>>>>>>>>> (d98) drive 0x000f0d40: PCHS=16383/16/63 translation=lba
> >>>>>>>>>>>>> LCHS=1024/255/63 s=83394560
> >>>>>>>>>>>>> (d98) Space available for UMB: ca800-ee800, f0000-f0ce0
> >>>>>>>>>>>>> (d98) Returned 258048 bytes of ZoneHigh
> >>>>>>>>>>>>> (d98) e820 map has 6 items:
> >>>>>>>>>>>>> (d98)   0: 0000000000000000 - 000000000009fc00 = 1 RAM
> >>>>>>>>>>>>> (d98)   1: 000000000009fc00 - 00000000000a0000 = 2
> RESERVED
> >>>>>>>>>>>>> (d98)   2: 00000000000f0000 - 0000000000100000 = 2
> RESERVED
> >>>>>>>>>>>>> (d98)   3: 0000000000100000 - 0000000077fff000 = 1 RAM
> >>>>>>>>>>>>> (d98)   4: 0000000077fff000 - 0000000078000000 = 2
> RESERVED
> >>>>>>>>>>>>> (d98)   5: 00000000fc000000 - 0000000100000000 = 2
> RESERVED
> >>>>>>>>>>>>> (d98) enter handle_19:
> >>>>>>>>>>>>> (d98)   NULL
> >>>>>>>>>>>>> (d98) Booting from Hard Disk...
> >>>>>>>>>>>>> (d98) Booting from 0000:7c00
> >>>>>>>>>>>>> (XEN) d98: VIRIDIAN GUEST_OS_ID: vendor: 1 os: 4 major: 6
> >>>> minor:
> >>>>>> 1
> >>>>>>>> sp:
> >>>>>>>>>>>>> 1 build: 1db1
> >>>>>>>>>>>>> (XEN) d98: VIRIDIAN HYPERCALL: enabled: 1 pfn: 3ffff
> >>>>>>>>>>>>> (XEN) d98v0: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffe
> >>>>>>>>>>>>> (XEN) d98v1: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffd
> >>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 0 changed 5 -> 0
> >>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 1 changed 10 -> 0
> >>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 2 changed 11 -> 0
> >>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 3 changed 5 -> 0
> >>>>>>>>>>>>> (XEN) irq.c:380: Dom98 callback via changed to GSI 24
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: ====>
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: 0000007A: FFFFF6FC000171C8
> >>>>>>>> FFFFFFFFC0000185
> >>>>>>>>>>>>> 000000001BD6A860 FFFF
> >>>>>>>>>>>>> (d98) F80002E39000
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: CONTEXT (FFFFF8800310E530):
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: - GS = 002B
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: - FS = 0053
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: - ES = 002B
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: - DS = 002B
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: - SS = 0018
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: - CS = 0010
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: - EFLAGS = 00000086
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RDI = 00000000000171C8
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RSI = 00000000C0000185
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RBX = 00000000038AC8F8
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RDX = 0000000000000000
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RCX = 000000000310E530
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RAX = 000000002ECF4722
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RBP = 000000001BD6A860
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RIP = 00000000038A2A43
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RSP = 000000000310E510
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R8 = 0000000000000000
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R9 = 0000000000000000
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R10 = 0000000000000000
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R11 = 0000000000000000
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R12 = 000000000000007A
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R13 = 0000000000000001
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R14 = 0000000002E39000
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R15 = 0000000002CBAC40
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: STACK:
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310EA20:
> >> (0000000000000003
> >>>>>>>>>>>>> 00000000038A50F0 00000000038A
> >>>>>>>>>>>>> (d98) 4860 000000000000007A) xen.sys + 00000000000049AC
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310EA70:
> >> (00000000038AD0D0
> >>>>>>>>>>>>> 0000000000000000 000000000000
> >>>>>>>>>>>>> (d98) 0004 0000000002C83500) ntoskrnl.exe +
> >> 0000000000128585
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310EAA0:
> >> (00000000038AD0D0
> >>>>>>>>>>>>> 0000000002C83500 000000000000
> >>>>>>>>>>>>> (d98) 000F 0000000001780660) ntoskrnl.exe +
> >> 0000000000167C0D
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F170:
> (0000000003816470
> >>>>>>>>>>>>> 0000000002B4C8C1 000000000000
> >>>>>>>>>>>>> (d98) 00FE 0000000000000000) ntoskrnl.exe +
> >> 0000000000075CC4
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F1B0:
> >> (000000000000007A
> >>>>>>>>>>>>> 00000000000171C8 00000000C000
> >>>>>>>>>>>>> (d98) 0185 000000001BD6A860) ntoskrnl.exe +
> >> 00000000000E8752
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F290:
> (00000000038163B0
> >>>>>>>>>>>>> 000000000310F320 0000000002CB
> >>>>>>>>>>>>> (d98) D540 00000000038163B0) ntoskrnl.exe +
> >> 000000000009C91F
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F360:
> (0000000000000000
> >>>>>>>>>>>>> 0000000000000008 00000000FFFF
> >>>>>>>>>>>>> (d98) FFFF 00000000003500F0) ntoskrnl.exe +
> >> 00000000000831B9
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F4C0:
> (0000000000000008
> >>>>>>>>>>>>> 0000000002E39000 000000000000
> >>>>>>>>>>>>> (d98) 0000 0000000000000000) ntoskrnl.exe +
> >> 0000000000073CEE
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F658:
> >> (0000000002E5CFD5
> >>>>>>>>>>>>> 0000000000000000 0000000003EB
> >>>>>>>>>>>>> (d98) 8710 00000000FFFFFFFF) ntoskrnl.exe +
> >> 000000000042C000
> >>>>>>>>>>>> If you need more tests/informations tell me and I'll post
> them.
> >>>>>>>>>>>> Thanks for any reply and sorry for my bad english.
> >>>>>>>>>>> Well, that tells me you had a 7A BSOD, which is a
> >>>>>>>>>> KERNEL_DATA_INPAGE_ERROR. The error status (param 2) was
> >>>>>> C0000185
> >>>>>>>> so
> >>>>>>>>>> that's a STATUS_IO_DEVICE_ERROR. The documentation at
> >>>>>>>>>> http://msdn.microsoft.com/en-
> >>>>>>>>>> gb/library/windows/hardware/ff559211%28v=vs.85%29.aspx
> tells
> >>>> me
> >>>>>> that
> >>>>>>>>>> this means:
> >>>>>>>>>>> "improper termination or defective cabling on SCSI devices or
> >> that
> >>>>>> two
> >>>>>>>>>> devices are trying to use the same IRQ."
> >>>>>>>>>>> But you said you had xenvbd already installed so you'll be
> using a
> >>>> PV
> >>>>>>>>>> storage path. Is there any indication of problems with your
> >> storage?
> >>>>>>>>>>>         Paul
> >>>>>>>>>> DomUs disk are all raw files in local dom0 disks, raid1 with "LSI
> >> Logic
> >>>>>>>>>> / Symbios Logic SAS2008 PCI-Express Fusion-MPT SAS-2" dom0
> >>>>>> partitions
> >>>>>>>>>> are GTP and fs ext4.
> >>>>>>>>>> Dom0 is wheezy with kernel is linux-image-3.16-0.bpo.2-amd64
> >>>> version
> >>>>>>>>>> 3.16.3-2~bpo70+1
> >>>>>>>>>> No kern or syslog errors, only many of these warning that
> >> someone
> >>>>>>>>>> replied me that should not be a problem:
> >>>>>>>>>> Oct 15 10:45:13 mtorMN01OU kernel: [773197.117518]
> >> xen:balloon:
> >>>>>>>>>> reserve_additional_memory: add_memory() failed: -17
> >>>>>>>>>> DomU now see disk as xen pvdisk, on xenvif install probably still
> >> was
> >>>>>>>>>> full emulated disk even if xenvbd was installed successful
> before
> >>>> xenvif
> >>>>>>>>>> install (failed with BSOD)
> >>>>>>>>>> The IRQ seems visible from xl dmesg output below, can you
> check
> >>>>>> them is
> >>>>>>>>>> have something wrong or strange, I see some of them
> "duplicate"
> >>>> but I
> >>>>>>>>>> not know if is correct.
> >>>>>>>>>>
> >>>>>>>>>> DomU xl cfg:
> >>>>>>>>>>> name='office1_w7'
> >>>>>>>>>>> builder="hvm"
> >>>>>>>>>>> memory=2048
> >>>>>>>>>>> vcpus=2
> >>>>>>>>>>> acpi_s3=0
> >>>>>>>>>>> acpi_s4=0
> >>>>>>>>>>> vif=['bridge=xenbr0,mac=00:16:3e:41:ae:8b']
> >>>>>>>>>>>
> >>
> disk=['/mnt/vm/disks/office1_w7.disk1.xm,raw,hda,rw',',raw,hdb,ro,cdrom'
> >>>>>>>>>> ]
> >>>>>>>>>>> boot='c'
> >>>>>>>>>>> device_model_version="qemu-xen"
> >>>>>>>>>>> viridian=1
> >>>>>>>>>>> vnc=0
> >>>>>>>>>>> keymap="it"
> >>>>>>>>>>> on_crash="destroy"
> >>>>>>>>>>> vga="qxl"
> >>>>>>>>>>> spice=1
> >>>>>>>>>>> spicehost='0.0.0.0'
> >>>>>>>>>>> spiceport=6001
> >>>>>>>>>>> spicedisable_ticketing=0
> >>>>>>>>>>> spicepasswd="password"
> >>>>>>>>>>> spicevdagent=1
> >>>>>>>>>>> spice_clipboard_sharing=0
> >>>>>>>>>>> spiceusbredirection=4
> >>>>>>>>>>> soundhw="hda"
> >>>>>>>>>>> localtime=1
> >>>>>>>>>> If you need more tests/informations tell me and I'll post them.
> >>>>>>>>>>
> >>>>>>>>> Do you have the qemu log (with xen platform logging enabled).
> >> This is
> >>>>>>>> where the PV drivers log failures/warnings.
> >>>>>>>>>        Paul
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>> I retried enabling xen platform debug in qemu trace but no add
> lines
> >> in
> >>>>>>>> log when I try to install xenvif and fails.
> >>>>>>>> I attach anyway the log if can be useful.
> >>>>>>> All I can see there is an apparently clean shutdown of domain 101;
> no
> >>>> sign
> >>>>>> of XENVIF and no sign of a BSOD.
> >>>>>>>> I'll also try to restore the backup of this night of the domU when I
> >> had
> >>>>>>>> the BSOD trying reproduce it with xen debug in qemu trace and
> >>>> different
> >>>>>>>> windows memory dump options.
> >>>>>>> Ok.
> >>>>>>>
> >>>>>>>       Paul
> >>>>>>>
> >>>>>> Reproduced it but now with xen platform trace enabled in qemu.
> (see
> >>>>>> attachment)
> >>>>>> Dump of memory instead is not present also in this case (probably
> >>>>>> because disk is "failed").
> >>>>> You're using emulate disk in this case. Did your BSOD not indicate that
> it
> >>>> was dumping?
> >>>>>      Paul
> >>>>>
> >>>> I have to time to see if do a dump but I suppose it can't write to disk
> >>>> since its driver fails.
> >>>> Log qemu is not enough? You need the windows memory dump to find
> >> and
> >>>> fix
> >>>> the bug?
> >>> I don't know what the bug is. My guess is that it's a deadlock somewhere
> >> which is causing Windows to believe there's a storage issue, but since the
> >> stack is entirely in the kernel and without a crashdump I cannot decode to
> >> symbols there's not much more I can do unless I happen to repro.
> >>>     Paul
> >>>
> >>>> If needed tomorrow I'll do other tests.
> >> I retried and seems always reproducible on same domU.
> >> Now I disabled automatic reboot on crash and do a screenshot (in
> >> attachment) but memory dump is still missed :( Probably with disk
> >> "failed" can't write.
> >> Is there another way to take/save the memory dump or the data you
> need?
> >>
> > Could you remove xenvbd and make sure the emulated disk is functional.
> Then, install Xenvif and see if it BSODs.
> 
> Now I tried to install xenvif without install xenvbd and installation is
> ok, after I installed xennet (ok), xenvbd (ok) and xeniface but on this
> latest same blue screen.
> I can (and I must try) install all except xenvbd?
> I also attached the new test's qemu log.

You obviously have not rebooted yet. Try installing everything except xenvbd. Reboot. Then install xenvbd and reboot. Any hand over from an emulated device to a PV device requires a reboot.

  Paul

> 
> Thanks for any reply.
> 
> >
> >> About IRQ you checked in xl dmesg I posted if are all ok?
> >>
> > Yes, I don't think there's a problem there.
> >
> >    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 Fri Oct 17 12:02:44 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 17 Oct 2014 12:02:44 +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 1Xf6F1-00073E-82; Fri, 17 Oct 2014 12:02:43 +0000
Received: from mail6.bemta4.messagelabs.com ([85.158.143.247])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <Paul.Durrant@citrix.com>) id 1Xf6Ez-000738-Q2
	for win-pv-devel@lists.xenproject.org; Fri, 17 Oct 2014 12:02:42 +0000
Received: from [85.158.143.35] by server-1.bemta-4.messagelabs.com id
	C0/9D-02952-16501445; Fri, 17 Oct 2014 12:02:41 +0000
X-Env-Sender: Paul.Durrant@citrix.com
X-Msg-Ref: server-5.tower-21.messagelabs.com!1413547359!13596961!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: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 16015 invoked from network); 17 Oct 2014 12:02:39 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-5.tower-21.messagelabs.com with RC4-SHA encrypted SMTP;
	17 Oct 2014 12:02:39 -0000
X-IronPort-AV: E=Sophos;i="5.04,738,1406592000"; d="scan'208";a="26040690"
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: [win-pv-devel] Blue screen on xenvif install
Thread-Index: AQHP6R88TE2eCcEtSU6laq0K5grY5pwybJlQ///obQCAACb2gP//8KIAgAAjAsCAAAnUgIAAIsDw///v2YAABHezEP//4XCA///QCHCAAWc2gP//3DXAgAA7NgD//84M0A==
Date: Fri, 17 Oct 2014 12:02:37 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD011106840@AMSPEX01CL01.citrite.net>
References: <543F887B.5030500@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111050FF@AMSPEX01CL01.citrite.net>
	<543F912C.8000504@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD01110526F@AMSPEX01CL01.citrite.net>
	<543FA4F6.5090804@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111053EA@AMSPEX01CL01.citrite.net>
	<543FCA93.2010805@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111057A2@AMSPEX01CL01.citrite.net>
	<543FDA2D.2090900@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111058E6@AMSPEX01CL01.citrite.net>
	<543FDE85.1030908@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD011105A08@AMSPEX01CL01.citrite.net>
	<5440E39B.6080104@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD01110668E@AMSPEX01CL01.citrite.net>
	<5440F740.4070701@m2r.biz>
In-Reply-To: <5440F740.4070701@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] Blue screen on xenvif install
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: 17 October 2014 12:02
> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> Subject: Re: [win-pv-devel] Blue screen on xenvif install
> 
> Il 17/10/2014 11:48, Paul Durrant ha scritto:
> >> -----Original Message-----
> >> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> >> bounces@lists.xenproject.org] On Behalf Of Fabio Fantoni
> >> Sent: 17 October 2014 10:39
> >> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >> Subject: Re: [win-pv-devel] Blue screen on xenvif install
> >>
> >> Il 16/10/2014 17:58, Paul Durrant ha scritto:
> >>>> -----Original Message-----
> >>>> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-
> devel-
> >>>> bounces@lists.xenproject.org] On Behalf Of Fabio Fantoni
> >>>> Sent: 16 October 2014 16:05
> >>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >>>> Subject: Re: [win-pv-devel] Blue screen on xenvif install
> >>>>
> >>>> Il 16/10/2014 16:54, Paul Durrant ha scritto:
> >>>>>> -----Original Message-----
> >>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >>>>>> Sent: 16 October 2014 15:46
> >>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >>>>>> Subject: Re: Blue screen on xenvif install
> >>>>>>
> >>>>>> Il 16/10/2014 15:45, Paul Durrant ha scritto:
> >>>>>>>> -----Original Message-----
> >>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >>>>>>>> Sent: 16 October 2014 14:40
> >>>>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >>>>>>>> Subject: Re: Blue screen on xenvif install
> >>>>>>>>
> >>>>>>>> Il 16/10/2014 13:04, Paul Durrant ha scritto:
> >>>>>>>>>> -----Original Message-----
> >>>>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >>>>>>>>>> Sent: 16 October 2014 11:59
> >>>>>>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >>>>>>>>>> Subject: Re: Blue screen on xenvif install
> >>>>>>>>>>
> >>>>>>>>>> Il 16/10/2014 12:00, Paul Durrant ha scritto:
> >>>>>>>>>>>> -----Original Message-----
> >>>>>>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >>>>>>>>>>>> Sent: 16 October 2014 10:35
> >>>>>>>>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >>>>>>>>>>>> Subject: Re: Blue screen on xenvif install
> >>>>>>>>>>>>
> >>>>>>>>>>>> Il 16/10/2014 10:59, Paul Durrant ha scritto:
> >>>>>>>>>>>>>> -----Original Message-----
> >>>>>>>>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >>>>>>>>>>>>>> Sent: 16 October 2014 09:58
> >>>>>>>>>>>>>> To: win-pv-devel@lists.xenproject.org
> >>>>>>>>>>>>>> Cc: Paul Durrant
> >>>>>>>>>>>>>> Subject: Blue screen on xenvif install
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> Today I tried to install new winpv driver to other 3
> windows 7
> >>>> pro
> >>>>>> 64
> >>>>>>>>>>>>>> bit domUs.
> >>>>>>>>>>>>>> Days ago I installed them successful on one windows 7 pro
> 64
> >>>> bit
> >>>>>> and
> >>>>>>>>>> one
> >>>>>>>>>>>>>> windows 8.1 enterprise 64 bit.
> >>>>>>>>>>>>>> On first domUs I tried to install them today I installed
> xenbus
> >>>> and
> >>>>>>>>>>>>>> xenvbd successful but on xenvif install windows crashed
> >> with
> >>>> blue
> >>>>>>>>>>>>>> screen, if I saw it correctly was an kernel in-page error or
> >>>>>> something
> >>>>>>>>>>>>>> similar.
> >>>>>>>>>>>>>> After reboot I retried to install xenvif but now always fails.
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>> Sounds odd. Do you have a MEMORY.DMP?
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>          Paul
> >>>>>>>>>>>> Windows is setted to write dump of kernel memory on
> system
> >>>> error
> >>>>>>>> but
> >>>>>>>>>>>> %systemroot%\memory.dmp is missed :(
> >>>>>>>>>>>> I also checked the windows events log but I found only
> kernel-
> >>>>>> power
> >>>>>>>> as
> >>>>>>>>>>>> critical that seems not contains useful data.
> >>>>>>>>>>>>
> >>>>>>>>>>>> I found probably useful data in xl dmesg (I copied all below
> >> from
> >>>>>> domU
> >>>>>>>>>>>> start to xen bug):
> >>>>>>>>>>>>> (d98) HVM Loader
> >>>>>>>>>>>>> (d98) Detected Xen v4.5-unstable
> >>>>>>>>>>>>> (d98) Xenbus rings @0xfeffc000, event channel 1
> >>>>>>>>>>>>> (d98) System requested SeaBIOS
> >>>>>>>>>>>>> (d98) CPU speed is 2660 MHz
> >>>>>>>>>>>>> (d98) Relocating guest memory for lowmem MMIO space
> >>>> disabled
> >>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 0 changed 0 -> 5
> >>>>>>>>>>>>> (d98) PCI-ISA link 0 routed to IRQ5
> >>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 1 changed 0 -> 10
> >>>>>>>>>>>>> (d98) PCI-ISA link 1 routed to IRQ10
> >>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 2 changed 0 -> 11
> >>>>>>>>>>>>> (d98) PCI-ISA link 2 routed to IRQ11
> >>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 3 changed 0 -> 5
> >>>>>>>>>>>>> (d98) PCI-ISA link 3 routed to IRQ5
> >>>>>>>>>>>>> (d98) pci dev 01:3 INTA->IRQ10
> >>>>>>>>>>>>> (d98) pci dev 02:0 INTA->IRQ11
> >>>>>>>>>>>>> (d98) pci dev 03:0 INTA->IRQ5
> >>>>>>>>>>>>> (d98) pci dev 04:0 INTA->IRQ5
> >>>>>>>>>>>>> (d98) pci dev 05:0 INTA->IRQ10
> >>>>>>>>>>>>> (d98) pci dev 06:0 INTA->IRQ11
> >>>>>>>>>>>>> (d98) pci dev 1d:0 INTA->IRQ10
> >>>>>>>>>>>>> (d98) pci dev 1d:1 INTB->IRQ11
> >>>>>>>>>>>>> (d98) pci dev 1d:2 INTC->IRQ5
> >>>>>>>>>>>>> (d98) pci dev 1d:7 INTD->IRQ5
> >>>>>>>>>>>>> (d98) No RAM in high memory; setting high_mem resource
> >> base
> >>>> to
> >>>>>>>>>>>> 100000000
> >>>>>>>>>>>>> (d98) pci dev 05:0 bar 10 size 004000000: 0f0000000
> >>>>>>>>>>>>> (d98) pci dev 05:0 bar 14 size 004000000: 0f4000000
> >>>>>>>>>>>>> (d98) pci dev 02:0 bar 14 size 001000000: 0f8000008
> >>>>>>>>>>>>> (d98) pci dev 06:0 bar 30 size 000040000: 0f9000000
> >>>>>>>>>>>>> (d98) pci dev 05:0 bar 30 size 000010000: 0f9040000
> >>>>>>>>>>>>> (d98) pci dev 03:0 bar 10 size 000004000: 0f9050000
> >>>>>>>>>>>>> (d98) pci dev 05:0 bar 18 size 000002000: 0f9054000
> >>>>>>>>>>>>> (d98) pci dev 04:0 bar 14 size 000001000: 0f9056000
> >>>>>>>>>>>>> (d98) pci dev 1d:7 bar 10 size 000001000: 0f9057000
> >>>>>>>>>>>>> (d98) pci dev 02:0 bar 10 size 000000100: 00000c001
> >>>>>>>>>>>>> (d98) pci dev 06:0 bar 10 size 000000100: 00000c101
> >>>>>>>>>>>>> (d98) pci dev 06:0 bar 14 size 000000100: 0f9058000
> >>>>>>>>>>>>> (d98) pci dev 04:0 bar 10 size 000000020: 00000c201
> >>>>>>>>>>>>> (d98) pci dev 05:0 bar 1c size 000000020: 00000c221
> >>>>>>>>>>>>> (d98) pci dev 1d:0 bar 20 size 000000020: 00000c241
> >>>>>>>>>>>>> (d98) pci dev 1d:1 bar 20 size 000000020: 00000c261
> >>>>>>>>>>>>> (d98) pci dev 1d:2 bar 20 size 000000020: 00000c281
> >>>>>>>>>>>>> (d98) pci dev 01:1 bar 20 size 000000010: 00000c2a1
> >>>>>>>>>>>>> (d98) Multiprocessor initialisation:
> >>>>>>>>>>>>> (d98)  - CPU0 ... 36-bit phys ... fixed MTRRs ... var MTRRs
> [1/8]
> >> ...
> >>>>>>>>>>>>> done.
> >>>>>>>>>>>>> (d98)  - CPU1 ... 36-bit phys ... fixed MTRRs ... var MTRRs
> [1/8]
> >> ...
> >>>>>>>>>>>>> done.
> >>>>>>>>>>>>> (d98) Testing HVM environment:
> >>>>>>>>>>>>> (d98)  - REP INSB across page boundaries ... passed
> >>>>>>>>>>>>> (d98)  - GS base MSRs and SWAPGS ... passed
> >>>>>>>>>>>>> (d98) Passed 2 of 2 tests
> >>>>>>>>>>>>> (d98) Writing SMBIOS tables ...
> >>>>>>>>>>>>> (d98) Loading SeaBIOS ...
> >>>>>>>>>>>>> (d98) Creating MP tables ...
> >>>>>>>>>>>>> (d98) Loading ACPI ...
> >>>>>>>>>>>>> (d98) S3 disabled
> >>>>>>>>>>>>> (d98) S4 disabled
> >>>>>>>>>>>>> (d98) vm86 TSS at fc00a100
> >>>>>>>>>>>>> (d98) BIOS map:
> >>>>>>>>>>>>> (d98)  10000-100d3: Scratch space
> >>>>>>>>>>>>> (d98)  c0000-fffff: Main BIOS
> >>>>>>>>>>>>> (d98) E820 table:
> >>>>>>>>>>>>> (d98)  [00]: 00000000:00000000 - 00000000:000a0000: RAM
> >>>>>>>>>>>>> (d98)  HOLE: 00000000:000a0000 - 00000000:000c0000
> >>>>>>>>>>>>> (d98)  [01]: 00000000:000c0000 - 00000000:00100000:
> >> RESERVED
> >>>>>>>>>>>>> (d98)  [02]: 00000000:00100000 - 00000000:78000000: RAM
> >>>>>>>>>>>>> (d98)  HOLE: 00000000:78000000 - 00000000:fc000000
> >>>>>>>>>>>>> (d98)  [03]: 00000000:fc000000 - 00000001:00000000:
> RESERVED
> >>>>>>>>>>>>> (d98) Invoking SeaBIOS ...
> >>>>>>>>>>>>> (d98) SeaBIOS (version
> >>>>>>>>>>>>> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
> >>>>>>>>>>>>> (d98)
> >>>>>>>>>>>>> (d98) Found Xen hypervisor signature at 40000100
> >>>>>>>>>>>>> (d98) Running on QEMU (i440fx)
> >>>>>>>>>>>>> (d98) xen: copy e820...
> >>>>>>>>>>>>> (d98) Relocating init from 0x000df619 to 0x77fae600 (size
> >> 71995)
> >>>>>>>>>>>>> (d98) CPU Mhz=2660
> >>>>>>>>>>>>> (d98) Found 13 PCI devices (max PCI bus is 00)
> >>>>>>>>>>>>> (d98) Allocated Xen hypercall page at 77fff000
> >>>>>>>>>>>>> (d98) Detected Xen v4.5-unstable
> >>>>>>>>>>>>> (d98) xen: copy BIOS tables...
> >>>>>>>>>>>>> (d98) Copying SMBIOS entry point from 0x00010010 to
> >>>> 0x000f0f40
> >>>>>>>>>>>>> (d98) Copying MPTABLE from 0xfc001170/fc001180 to
> >> 0x000f0e40
> >>>>>>>>>>>>> (d98) Copying PIR from 0x00010030 to 0x000f0dc0
> >>>>>>>>>>>>> (d98) Copying ACPI RSDP from 0x000100b0 to 0x000f0d90
> >>>>>>>>>>>>> (d98) Using pmtimer, ioport 0xb008
> >>>>>>>>>>>>> (d98) Scan for VGA option rom
> >>>>>>>>>>>>> (d98) Running option rom at c000:0003
> >>>>>>>>>>>>> (XEN) stdvga.c:147:d98v0 entering stdvga and caching
> modes
> >>>>>>>>>>>>> (d98) pmm call arg1=0
> >>>>>>>>>>>>> (d98) Turning on vga text mode console
> >>>>>>>>>>>>> (d98) SeaBIOS (version
> >>>>>>>>>>>>> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
> >>>>>>>>>>>>> (d98) Machine UUID f4cdeb74-0db1-4748-948d-
> 42579a494120
> >>>>>>>>>>>>> (d98) EHCI init on dev 00:1d.7 (regs=0xf9057020)
> >>>>>>>>>>>>> (d98) Found 0 lpt ports
> >>>>>>>>>>>>> (d98) Found 0 serial ports
> >>>>>>>>>>>>> (d98) ATA controller 1 at 1f0/3f4/0 (irq 14 dev 9)
> >>>>>>>>>>>>> (d98) ATA controller 2 at 170/374/0 (irq 15 dev 9)
> >>>>>>>>>>>>> (d98) ata0-0: QEMU HARDDISK ATA-7 Hard-Disk (40720
> >> MiBytes)
> >>>>>>>>>>>>> (d98) Searching bootorder for:
> >>>> /pci@i0cf8/*@1,1/drive@0/disk@0
> >>>>>>>>>>>>> (d98) DVD/CD [ata0-1: QEMU DVD-ROM ATAPI-4 DVD/CD]
> >>>>>>>>>>>>> (d98) Searching bootorder for:
> >>>> /pci@i0cf8/*@1,1/drive@0/disk@1
> >>>>>>>>>>>>> (d98) UHCI init on dev 00:1d.0 (io=c240)
> >>>>>>>>>>>>> (d98) UHCI init on dev 00:1d.1 (io=c260)
> >>>>>>>>>>>>> (d98) UHCI init on dev 00:1d.2 (io=c280)
> >>>>>>>>>>>>> (d98) PS2 keyboard initialized
> >>>>>>>>>>>>> (d98) All threads complete.
> >>>>>>>>>>>>> (d98) Scan for option roms
> >>>>>>>>>>>>> (d98) Running option rom at c980:0003
> >>>>>>>>>>>>> (d98) pmm call arg1=1
> >>>>>>>>>>>>> (d98) pmm call arg1=0
> >>>>>>>>>>>>> (d98) pmm call arg1=1
> >>>>>>>>>>>>> (d98) pmm call arg1=0
> >>>>>>>>>>>>> (d98) Searching bootorder for: /pci@i0cf8/*@6
> >>>>>>>>>>>>> (d98)
> >>>>>>>>>>>>> (d98) Press F12 for boot menu.
> >>>>>>>>>>>>> (d98)
> >>>>>>>>>>>>> (d98) Searching bootorder for: HALT
> >>>>>>>>>>>>> (d98) drive 0x000f0d40: PCHS=16383/16/63 translation=lba
> >>>>>>>>>>>>> LCHS=1024/255/63 s=83394560
> >>>>>>>>>>>>> (d98) Space available for UMB: ca800-ee800, f0000-f0ce0
> >>>>>>>>>>>>> (d98) Returned 258048 bytes of ZoneHigh
> >>>>>>>>>>>>> (d98) e820 map has 6 items:
> >>>>>>>>>>>>> (d98)   0: 0000000000000000 - 000000000009fc00 = 1 RAM
> >>>>>>>>>>>>> (d98)   1: 000000000009fc00 - 00000000000a0000 = 2
> RESERVED
> >>>>>>>>>>>>> (d98)   2: 00000000000f0000 - 0000000000100000 = 2
> RESERVED
> >>>>>>>>>>>>> (d98)   3: 0000000000100000 - 0000000077fff000 = 1 RAM
> >>>>>>>>>>>>> (d98)   4: 0000000077fff000 - 0000000078000000 = 2
> RESERVED
> >>>>>>>>>>>>> (d98)   5: 00000000fc000000 - 0000000100000000 = 2
> RESERVED
> >>>>>>>>>>>>> (d98) enter handle_19:
> >>>>>>>>>>>>> (d98)   NULL
> >>>>>>>>>>>>> (d98) Booting from Hard Disk...
> >>>>>>>>>>>>> (d98) Booting from 0000:7c00
> >>>>>>>>>>>>> (XEN) d98: VIRIDIAN GUEST_OS_ID: vendor: 1 os: 4 major: 6
> >>>> minor:
> >>>>>> 1
> >>>>>>>> sp:
> >>>>>>>>>>>>> 1 build: 1db1
> >>>>>>>>>>>>> (XEN) d98: VIRIDIAN HYPERCALL: enabled: 1 pfn: 3ffff
> >>>>>>>>>>>>> (XEN) d98v0: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffe
> >>>>>>>>>>>>> (XEN) d98v1: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffd
> >>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 0 changed 5 -> 0
> >>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 1 changed 10 -> 0
> >>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 2 changed 11 -> 0
> >>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 3 changed 5 -> 0
> >>>>>>>>>>>>> (XEN) irq.c:380: Dom98 callback via changed to GSI 24
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: ====>
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: 0000007A: FFFFF6FC000171C8
> >>>>>>>> FFFFFFFFC0000185
> >>>>>>>>>>>>> 000000001BD6A860 FFFF
> >>>>>>>>>>>>> (d98) F80002E39000
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: CONTEXT (FFFFF8800310E530):
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: - GS = 002B
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: - FS = 0053
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: - ES = 002B
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: - DS = 002B
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: - SS = 0018
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: - CS = 0010
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: - EFLAGS = 00000086
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RDI = 00000000000171C8
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RSI = 00000000C0000185
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RBX = 00000000038AC8F8
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RDX = 0000000000000000
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RCX = 000000000310E530
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RAX = 000000002ECF4722
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RBP = 000000001BD6A860
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RIP = 00000000038A2A43
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RSP = 000000000310E510
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R8 = 0000000000000000
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R9 = 0000000000000000
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R10 = 0000000000000000
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R11 = 0000000000000000
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R12 = 000000000000007A
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R13 = 0000000000000001
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R14 = 0000000002E39000
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R15 = 0000000002CBAC40
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: STACK:
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310EA20:
> >> (0000000000000003
> >>>>>>>>>>>>> 00000000038A50F0 00000000038A
> >>>>>>>>>>>>> (d98) 4860 000000000000007A) xen.sys + 00000000000049AC
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310EA70:
> >> (00000000038AD0D0
> >>>>>>>>>>>>> 0000000000000000 000000000000
> >>>>>>>>>>>>> (d98) 0004 0000000002C83500) ntoskrnl.exe +
> >> 0000000000128585
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310EAA0:
> >> (00000000038AD0D0
> >>>>>>>>>>>>> 0000000002C83500 000000000000
> >>>>>>>>>>>>> (d98) 000F 0000000001780660) ntoskrnl.exe +
> >> 0000000000167C0D
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F170:
> (0000000003816470
> >>>>>>>>>>>>> 0000000002B4C8C1 000000000000
> >>>>>>>>>>>>> (d98) 00FE 0000000000000000) ntoskrnl.exe +
> >> 0000000000075CC4
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F1B0:
> >> (000000000000007A
> >>>>>>>>>>>>> 00000000000171C8 00000000C000
> >>>>>>>>>>>>> (d98) 0185 000000001BD6A860) ntoskrnl.exe +
> >> 00000000000E8752
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F290:
> (00000000038163B0
> >>>>>>>>>>>>> 000000000310F320 0000000002CB
> >>>>>>>>>>>>> (d98) D540 00000000038163B0) ntoskrnl.exe +
> >> 000000000009C91F
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F360:
> (0000000000000000
> >>>>>>>>>>>>> 0000000000000008 00000000FFFF
> >>>>>>>>>>>>> (d98) FFFF 00000000003500F0) ntoskrnl.exe +
> >> 00000000000831B9
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F4C0:
> (0000000000000008
> >>>>>>>>>>>>> 0000000002E39000 000000000000
> >>>>>>>>>>>>> (d98) 0000 0000000000000000) ntoskrnl.exe +
> >> 0000000000073CEE
> >>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F658:
> >> (0000000002E5CFD5
> >>>>>>>>>>>>> 0000000000000000 0000000003EB
> >>>>>>>>>>>>> (d98) 8710 00000000FFFFFFFF) ntoskrnl.exe +
> >> 000000000042C000
> >>>>>>>>>>>> If you need more tests/informations tell me and I'll post
> them.
> >>>>>>>>>>>> Thanks for any reply and sorry for my bad english.
> >>>>>>>>>>> Well, that tells me you had a 7A BSOD, which is a
> >>>>>>>>>> KERNEL_DATA_INPAGE_ERROR. The error status (param 2) was
> >>>>>> C0000185
> >>>>>>>> so
> >>>>>>>>>> that's a STATUS_IO_DEVICE_ERROR. The documentation at
> >>>>>>>>>> http://msdn.microsoft.com/en-
> >>>>>>>>>> gb/library/windows/hardware/ff559211%28v=vs.85%29.aspx
> tells
> >>>> me
> >>>>>> that
> >>>>>>>>>> this means:
> >>>>>>>>>>> "improper termination or defective cabling on SCSI devices or
> >> that
> >>>>>> two
> >>>>>>>>>> devices are trying to use the same IRQ."
> >>>>>>>>>>> But you said you had xenvbd already installed so you'll be
> using a
> >>>> PV
> >>>>>>>>>> storage path. Is there any indication of problems with your
> >> storage?
> >>>>>>>>>>>         Paul
> >>>>>>>>>> DomUs disk are all raw files in local dom0 disks, raid1 with "LSI
> >> Logic
> >>>>>>>>>> / Symbios Logic SAS2008 PCI-Express Fusion-MPT SAS-2" dom0
> >>>>>> partitions
> >>>>>>>>>> are GTP and fs ext4.
> >>>>>>>>>> Dom0 is wheezy with kernel is linux-image-3.16-0.bpo.2-amd64
> >>>> version
> >>>>>>>>>> 3.16.3-2~bpo70+1
> >>>>>>>>>> No kern or syslog errors, only many of these warning that
> >> someone
> >>>>>>>>>> replied me that should not be a problem:
> >>>>>>>>>> Oct 15 10:45:13 mtorMN01OU kernel: [773197.117518]
> >> xen:balloon:
> >>>>>>>>>> reserve_additional_memory: add_memory() failed: -17
> >>>>>>>>>> DomU now see disk as xen pvdisk, on xenvif install probably still
> >> was
> >>>>>>>>>> full emulated disk even if xenvbd was installed successful
> before
> >>>> xenvif
> >>>>>>>>>> install (failed with BSOD)
> >>>>>>>>>> The IRQ seems visible from xl dmesg output below, can you
> check
> >>>>>> them is
> >>>>>>>>>> have something wrong or strange, I see some of them
> "duplicate"
> >>>> but I
> >>>>>>>>>> not know if is correct.
> >>>>>>>>>>
> >>>>>>>>>> DomU xl cfg:
> >>>>>>>>>>> name='office1_w7'
> >>>>>>>>>>> builder="hvm"
> >>>>>>>>>>> memory=2048
> >>>>>>>>>>> vcpus=2
> >>>>>>>>>>> acpi_s3=0
> >>>>>>>>>>> acpi_s4=0
> >>>>>>>>>>> vif=['bridge=xenbr0,mac=00:16:3e:41:ae:8b']
> >>>>>>>>>>>
> >>
> disk=['/mnt/vm/disks/office1_w7.disk1.xm,raw,hda,rw',',raw,hdb,ro,cdrom'
> >>>>>>>>>> ]
> >>>>>>>>>>> boot='c'
> >>>>>>>>>>> device_model_version="qemu-xen"
> >>>>>>>>>>> viridian=1
> >>>>>>>>>>> vnc=0
> >>>>>>>>>>> keymap="it"
> >>>>>>>>>>> on_crash="destroy"
> >>>>>>>>>>> vga="qxl"
> >>>>>>>>>>> spice=1
> >>>>>>>>>>> spicehost='0.0.0.0'
> >>>>>>>>>>> spiceport=6001
> >>>>>>>>>>> spicedisable_ticketing=0
> >>>>>>>>>>> spicepasswd="password"
> >>>>>>>>>>> spicevdagent=1
> >>>>>>>>>>> spice_clipboard_sharing=0
> >>>>>>>>>>> spiceusbredirection=4
> >>>>>>>>>>> soundhw="hda"
> >>>>>>>>>>> localtime=1
> >>>>>>>>>> If you need more tests/informations tell me and I'll post them.
> >>>>>>>>>>
> >>>>>>>>> Do you have the qemu log (with xen platform logging enabled).
> >> This is
> >>>>>>>> where the PV drivers log failures/warnings.
> >>>>>>>>>        Paul
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>> I retried enabling xen platform debug in qemu trace but no add
> lines
> >> in
> >>>>>>>> log when I try to install xenvif and fails.
> >>>>>>>> I attach anyway the log if can be useful.
> >>>>>>> All I can see there is an apparently clean shutdown of domain 101;
> no
> >>>> sign
> >>>>>> of XENVIF and no sign of a BSOD.
> >>>>>>>> I'll also try to restore the backup of this night of the domU when I
> >> had
> >>>>>>>> the BSOD trying reproduce it with xen debug in qemu trace and
> >>>> different
> >>>>>>>> windows memory dump options.
> >>>>>>> Ok.
> >>>>>>>
> >>>>>>>       Paul
> >>>>>>>
> >>>>>> Reproduced it but now with xen platform trace enabled in qemu.
> (see
> >>>>>> attachment)
> >>>>>> Dump of memory instead is not present also in this case (probably
> >>>>>> because disk is "failed").
> >>>>> You're using emulate disk in this case. Did your BSOD not indicate that
> it
> >>>> was dumping?
> >>>>>      Paul
> >>>>>
> >>>> I have to time to see if do a dump but I suppose it can't write to disk
> >>>> since its driver fails.
> >>>> Log qemu is not enough? You need the windows memory dump to find
> >> and
> >>>> fix
> >>>> the bug?
> >>> I don't know what the bug is. My guess is that it's a deadlock somewhere
> >> which is causing Windows to believe there's a storage issue, but since the
> >> stack is entirely in the kernel and without a crashdump I cannot decode to
> >> symbols there's not much more I can do unless I happen to repro.
> >>>     Paul
> >>>
> >>>> If needed tomorrow I'll do other tests.
> >> I retried and seems always reproducible on same domU.
> >> Now I disabled automatic reboot on crash and do a screenshot (in
> >> attachment) but memory dump is still missed :( Probably with disk
> >> "failed" can't write.
> >> Is there another way to take/save the memory dump or the data you
> need?
> >>
> > Could you remove xenvbd and make sure the emulated disk is functional.
> Then, install Xenvif and see if it BSODs.
> 
> Now I tried to install xenvif without install xenvbd and installation is
> ok, after I installed xennet (ok), xenvbd (ok) and xeniface but on this
> latest same blue screen.
> I can (and I must try) install all except xenvbd?
> I also attached the new test's qemu log.

You obviously have not rebooted yet. Try installing everything except xenvbd. Reboot. Then install xenvbd and reboot. Any hand over from an emulated device to a PV device requires a reboot.

  Paul

> 
> Thanks for any reply.
> 
> >
> >> About IRQ you checked in xl dmesg I posted if are all ok?
> >>
> > Yes, I don't think there's a problem there.
> >
> >    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 Fri Oct 17 12:56:50 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 17 Oct 2014 12:56: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 1Xf75O-0001dT-BK; Fri, 17 Oct 2014 12:56:50 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1Xf75M-0001dO-Hg
	for win-pv-devel@lists.xenproject.org; Fri, 17 Oct 2014 12:56:48 +0000
Received: from [193.109.254.147:42613] by server-16.bemta-14.messagelabs.com
	id 02/DA-16990-F0211445; Fri, 17 Oct 2014 12:56:47 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-14.tower-27.messagelabs.com!1413550606!13437377!1
X-Originating-IP: [209.85.212.169]
X-SpamReason: No, hits=2.2 required=7.0 tests=BIZ_TLD,BODY_RANDOM_LONG
X-StarScan-Received: 
X-StarScan-Version: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 10420 invoked from network); 17 Oct 2014 12:56:46 -0000
Received: from mail-wi0-f169.google.com (HELO mail-wi0-f169.google.com)
	(209.85.212.169)
	by server-14.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	17 Oct 2014 12:56:46 -0000
Received: by mail-wi0-f169.google.com with SMTP id h11so4003488wiw.2
	for <win-pv-devel@lists.xenproject.org>;
	Fri, 17 Oct 2014 05:56:46 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:message-id:date:from:user-agent:mime-version:to
	:subject:references:in-reply-to:content-type
	:content-transfer-encoding;
	bh=NkBat9DsH1ydUYel2DLPHV34q5h/IkelrLdedIcd30s=;
	b=U50IQ08o9aT0R1+NPY+mT4MctAY929Q4YhFzW0ss8Z+gxeglt9mZtnJXWaFEdUQVGp
	Qq8Eb0HM8udlU90wW7XHVIn17G5P3K9W7pjblfpYh3zdzIrCXpR1kBbwptTsWdie7+N2
	UwrN4M+ld1G+Hay9//7JCHPK+Nbf/FbTBOj00/jV3knBmDKcfBRcADfVu9B/MNRtmJXY
	QZi7fHxt2wLwd7YJ93LEFAwjyOW3oGKnUc4N6N0cdBYx+IL11uFbHA4GWLV44Rtrwflk
	wWDjX+5+/r7fyqRynfghN5w/7nW5yJxqnjC+2G/GLAFklg3g7o/DZ6HH2x6x4HwQoP7V
	yMbQ==
X-Gm-Message-State: ALoCoQkWIoUx9pDT8RRhwTEAMDXYl0iwJKyZHKGmlwfxnzIh7ecv4qSWkEogn1zWZt85pt2FgATU
X-Received: by 10.194.189.82 with SMTP id gg18mr3509534wjc.115.1413550606021; 
	Fri, 17 Oct 2014 05:56:46 -0700 (PDT)
Received: from [192.168.1.15] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by mx.google.com with ESMTPSA id ga7sm2015009wic.5.2014.10.17.05.56.44
	for <multiple recipients>
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Fri, 17 Oct 2014 05:56:45 -0700 (PDT)
Message-ID: <54411217.4090806@m2r.biz>
Date: Fri, 17 Oct 2014 14:56:55 +0200
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64;
	rv:24.0) Gecko/20100101 Thunderbird/24.6.0
MIME-Version: 1.0
To: Paul Durrant <Paul.Durrant@citrix.com>, 
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <543F887B.5030500@m2r.biz>	<9AAE0902D5BC7E449B7C8E4E778ABCD0111050FF@AMSPEX01CL01.citrite.net>	<543F912C.8000504@m2r.biz>	<9AAE0902D5BC7E449B7C8E4E778ABCD01110526F@AMSPEX01CL01.citrite.net>	<543FA4F6.5090804@m2r.biz>	<9AAE0902D5BC7E449B7C8E4E778ABCD0111053EA@AMSPEX01CL01.citrite.net>	<543FCA93.2010805@m2r.biz>	<9AAE0902D5BC7E449B7C8E4E778ABCD0111057A2@AMSPEX01CL01.citrite.net>	<543FDA2D.2090900@m2r.biz>	<9AAE0902D5BC7E449B7C8E4E778ABCD0111058E6@AMSPEX01CL01.citrite.net>	<543FDE85.1030908@m2r.biz>	<9AAE0902D5BC7E449B7C8E4E778ABCD011105A08@AMSPEX01CL01.citrite.net>
	<5440E39B.6080104@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD01110668E@AMSPEX01CL01.citrite.net>
	<5440F740.4070701@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD011106840@AMSPEX01CL01.citrite.net>
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD011106840@AMSPEX01CL01.citrite.net>
Subject: Re: [win-pv-devel] Blue screen on xenvif install
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 17/10/2014 14:02, Paul Durrant ha scritto:
>> -----Original Message-----
>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>> Sent: 17 October 2014 12:02
>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>> Subject: Re: [win-pv-devel] Blue screen on xenvif install
>>
>> Il 17/10/2014 11:48, Paul Durrant ha scritto:
>>>> -----Original Message-----
>>>> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
>>>> bounces@lists.xenproject.org] On Behalf Of Fabio Fantoni
>>>> Sent: 17 October 2014 10:39
>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>>>> Subject: Re: [win-pv-devel] Blue screen on xenvif install
>>>>
>>>> Il 16/10/2014 17:58, Paul Durrant ha scritto:
>>>>>> -----Original Message-----
>>>>>> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-
>> devel-
>>>>>> bounces@lists.xenproject.org] On Behalf Of Fabio Fantoni
>>>>>> Sent: 16 October 2014 16:05
>>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>>>>>> Subject: Re: [win-pv-devel] Blue screen on xenvif install
>>>>>>
>>>>>> Il 16/10/2014 16:54, Paul Durrant ha scritto:
>>>>>>>> -----Original Message-----
>>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>>>>>> Sent: 16 October 2014 15:46
>>>>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>>>>>>>> Subject: Re: Blue screen on xenvif install
>>>>>>>>
>>>>>>>> Il 16/10/2014 15:45, Paul Durrant ha scritto:
>>>>>>>>>> -----Original Message-----
>>>>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>>>>>>>> Sent: 16 October 2014 14:40
>>>>>>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>>>>>>>>>> Subject: Re: Blue screen on xenvif install
>>>>>>>>>>
>>>>>>>>>> Il 16/10/2014 13:04, Paul Durrant ha scritto:
>>>>>>>>>>>> -----Original Message-----
>>>>>>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>>>>>>>>>> Sent: 16 October 2014 11:59
>>>>>>>>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>>>>>>>>>>>> Subject: Re: Blue screen on xenvif install
>>>>>>>>>>>>
>>>>>>>>>>>> Il 16/10/2014 12:00, Paul Durrant ha scritto:
>>>>>>>>>>>>>> -----Original Message-----
>>>>>>>>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>>>>>>>>>>>> Sent: 16 October 2014 10:35
>>>>>>>>>>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>>>>>>>>>>>>>> Subject: Re: Blue screen on xenvif install
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Il 16/10/2014 10:59, Paul Durrant ha scritto:
>>>>>>>>>>>>>>>> -----Original Message-----
>>>>>>>>>>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>>>>>>>>>>>>>> Sent: 16 October 2014 09:58
>>>>>>>>>>>>>>>> To: win-pv-devel@lists.xenproject.org
>>>>>>>>>>>>>>>> Cc: Paul Durrant
>>>>>>>>>>>>>>>> Subject: Blue screen on xenvif install
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Today I tried to install new winpv driver to other 3
>> windows 7
>>>>>> pro
>>>>>>>> 64
>>>>>>>>>>>>>>>> bit domUs.
>>>>>>>>>>>>>>>> Days ago I installed them successful on one windows 7 pro
>> 64
>>>>>> bit
>>>>>>>> and
>>>>>>>>>>>> one
>>>>>>>>>>>>>>>> windows 8.1 enterprise 64 bit.
>>>>>>>>>>>>>>>> On first domUs I tried to install them today I installed
>> xenbus
>>>>>> and
>>>>>>>>>>>>>>>> xenvbd successful but on xenvif install windows crashed
>>>> with
>>>>>> blue
>>>>>>>>>>>>>>>> screen, if I saw it correctly was an kernel in-page error or
>>>>>>>> something
>>>>>>>>>>>>>>>> similar.
>>>>>>>>>>>>>>>> After reboot I retried to install xenvif but now always fails.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Sounds odd. Do you have a MEMORY.DMP?
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>           Paul
>>>>>>>>>>>>>> Windows is setted to write dump of kernel memory on
>> system
>>>>>> error
>>>>>>>>>> but
>>>>>>>>>>>>>> %systemroot%\memory.dmp is missed :(
>>>>>>>>>>>>>> I also checked the windows events log but I found only
>> kernel-
>>>>>>>> power
>>>>>>>>>> as
>>>>>>>>>>>>>> critical that seems not contains useful data.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> I found probably useful data in xl dmesg (I copied all below
>>>> from
>>>>>>>> domU
>>>>>>>>>>>>>> start to xen bug):
>>>>>>>>>>>>>>> (d98) HVM Loader
>>>>>>>>>>>>>>> (d98) Detected Xen v4.5-unstable
>>>>>>>>>>>>>>> (d98) Xenbus rings @0xfeffc000, event channel 1
>>>>>>>>>>>>>>> (d98) System requested SeaBIOS
>>>>>>>>>>>>>>> (d98) CPU speed is 2660 MHz
>>>>>>>>>>>>>>> (d98) Relocating guest memory for lowmem MMIO space
>>>>>> disabled
>>>>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 0 changed 0 -> 5
>>>>>>>>>>>>>>> (d98) PCI-ISA link 0 routed to IRQ5
>>>>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 1 changed 0 -> 10
>>>>>>>>>>>>>>> (d98) PCI-ISA link 1 routed to IRQ10
>>>>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 2 changed 0 -> 11
>>>>>>>>>>>>>>> (d98) PCI-ISA link 2 routed to IRQ11
>>>>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 3 changed 0 -> 5
>>>>>>>>>>>>>>> (d98) PCI-ISA link 3 routed to IRQ5
>>>>>>>>>>>>>>> (d98) pci dev 01:3 INTA->IRQ10
>>>>>>>>>>>>>>> (d98) pci dev 02:0 INTA->IRQ11
>>>>>>>>>>>>>>> (d98) pci dev 03:0 INTA->IRQ5
>>>>>>>>>>>>>>> (d98) pci dev 04:0 INTA->IRQ5
>>>>>>>>>>>>>>> (d98) pci dev 05:0 INTA->IRQ10
>>>>>>>>>>>>>>> (d98) pci dev 06:0 INTA->IRQ11
>>>>>>>>>>>>>>> (d98) pci dev 1d:0 INTA->IRQ10
>>>>>>>>>>>>>>> (d98) pci dev 1d:1 INTB->IRQ11
>>>>>>>>>>>>>>> (d98) pci dev 1d:2 INTC->IRQ5
>>>>>>>>>>>>>>> (d98) pci dev 1d:7 INTD->IRQ5
>>>>>>>>>>>>>>> (d98) No RAM in high memory; setting high_mem resource
>>>> base
>>>>>> to
>>>>>>>>>>>>>> 100000000
>>>>>>>>>>>>>>> (d98) pci dev 05:0 bar 10 size 004000000: 0f0000000
>>>>>>>>>>>>>>> (d98) pci dev 05:0 bar 14 size 004000000: 0f4000000
>>>>>>>>>>>>>>> (d98) pci dev 02:0 bar 14 size 001000000: 0f8000008
>>>>>>>>>>>>>>> (d98) pci dev 06:0 bar 30 size 000040000: 0f9000000
>>>>>>>>>>>>>>> (d98) pci dev 05:0 bar 30 size 000010000: 0f9040000
>>>>>>>>>>>>>>> (d98) pci dev 03:0 bar 10 size 000004000: 0f9050000
>>>>>>>>>>>>>>> (d98) pci dev 05:0 bar 18 size 000002000: 0f9054000
>>>>>>>>>>>>>>> (d98) pci dev 04:0 bar 14 size 000001000: 0f9056000
>>>>>>>>>>>>>>> (d98) pci dev 1d:7 bar 10 size 000001000: 0f9057000
>>>>>>>>>>>>>>> (d98) pci dev 02:0 bar 10 size 000000100: 00000c001
>>>>>>>>>>>>>>> (d98) pci dev 06:0 bar 10 size 000000100: 00000c101
>>>>>>>>>>>>>>> (d98) pci dev 06:0 bar 14 size 000000100: 0f9058000
>>>>>>>>>>>>>>> (d98) pci dev 04:0 bar 10 size 000000020: 00000c201
>>>>>>>>>>>>>>> (d98) pci dev 05:0 bar 1c size 000000020: 00000c221
>>>>>>>>>>>>>>> (d98) pci dev 1d:0 bar 20 size 000000020: 00000c241
>>>>>>>>>>>>>>> (d98) pci dev 1d:1 bar 20 size 000000020: 00000c261
>>>>>>>>>>>>>>> (d98) pci dev 1d:2 bar 20 size 000000020: 00000c281
>>>>>>>>>>>>>>> (d98) pci dev 01:1 bar 20 size 000000010: 00000c2a1
>>>>>>>>>>>>>>> (d98) Multiprocessor initialisation:
>>>>>>>>>>>>>>> (d98)  - CPU0 ... 36-bit phys ... fixed MTRRs ... var MTRRs
>> [1/8]
>>>> ...
>>>>>>>>>>>>>>> done.
>>>>>>>>>>>>>>> (d98)  - CPU1 ... 36-bit phys ... fixed MTRRs ... var MTRRs
>> [1/8]
>>>> ...
>>>>>>>>>>>>>>> done.
>>>>>>>>>>>>>>> (d98) Testing HVM environment:
>>>>>>>>>>>>>>> (d98)  - REP INSB across page boundaries ... passed
>>>>>>>>>>>>>>> (d98)  - GS base MSRs and SWAPGS ... passed
>>>>>>>>>>>>>>> (d98) Passed 2 of 2 tests
>>>>>>>>>>>>>>> (d98) Writing SMBIOS tables ...
>>>>>>>>>>>>>>> (d98) Loading SeaBIOS ...
>>>>>>>>>>>>>>> (d98) Creating MP tables ...
>>>>>>>>>>>>>>> (d98) Loading ACPI ...
>>>>>>>>>>>>>>> (d98) S3 disabled
>>>>>>>>>>>>>>> (d98) S4 disabled
>>>>>>>>>>>>>>> (d98) vm86 TSS at fc00a100
>>>>>>>>>>>>>>> (d98) BIOS map:
>>>>>>>>>>>>>>> (d98)  10000-100d3: Scratch space
>>>>>>>>>>>>>>> (d98)  c0000-fffff: Main BIOS
>>>>>>>>>>>>>>> (d98) E820 table:
>>>>>>>>>>>>>>> (d98)  [00]: 00000000:00000000 - 00000000:000a0000: RAM
>>>>>>>>>>>>>>> (d98)  HOLE: 00000000:000a0000 - 00000000:000c0000
>>>>>>>>>>>>>>> (d98)  [01]: 00000000:000c0000 - 00000000:00100000:
>>>> RESERVED
>>>>>>>>>>>>>>> (d98)  [02]: 00000000:00100000 - 00000000:78000000: RAM
>>>>>>>>>>>>>>> (d98)  HOLE: 00000000:78000000 - 00000000:fc000000
>>>>>>>>>>>>>>> (d98)  [03]: 00000000:fc000000 - 00000001:00000000:
>> RESERVED
>>>>>>>>>>>>>>> (d98) Invoking SeaBIOS ...
>>>>>>>>>>>>>>> (d98) SeaBIOS (version
>>>>>>>>>>>>>>> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
>>>>>>>>>>>>>>> (d98)
>>>>>>>>>>>>>>> (d98) Found Xen hypervisor signature at 40000100
>>>>>>>>>>>>>>> (d98) Running on QEMU (i440fx)
>>>>>>>>>>>>>>> (d98) xen: copy e820...
>>>>>>>>>>>>>>> (d98) Relocating init from 0x000df619 to 0x77fae600 (size
>>>> 71995)
>>>>>>>>>>>>>>> (d98) CPU Mhz=2660
>>>>>>>>>>>>>>> (d98) Found 13 PCI devices (max PCI bus is 00)
>>>>>>>>>>>>>>> (d98) Allocated Xen hypercall page at 77fff000
>>>>>>>>>>>>>>> (d98) Detected Xen v4.5-unstable
>>>>>>>>>>>>>>> (d98) xen: copy BIOS tables...
>>>>>>>>>>>>>>> (d98) Copying SMBIOS entry point from 0x00010010 to
>>>>>> 0x000f0f40
>>>>>>>>>>>>>>> (d98) Copying MPTABLE from 0xfc001170/fc001180 to
>>>> 0x000f0e40
>>>>>>>>>>>>>>> (d98) Copying PIR from 0x00010030 to 0x000f0dc0
>>>>>>>>>>>>>>> (d98) Copying ACPI RSDP from 0x000100b0 to 0x000f0d90
>>>>>>>>>>>>>>> (d98) Using pmtimer, ioport 0xb008
>>>>>>>>>>>>>>> (d98) Scan for VGA option rom
>>>>>>>>>>>>>>> (d98) Running option rom at c000:0003
>>>>>>>>>>>>>>> (XEN) stdvga.c:147:d98v0 entering stdvga and caching
>> modes
>>>>>>>>>>>>>>> (d98) pmm call arg1=0
>>>>>>>>>>>>>>> (d98) Turning on vga text mode console
>>>>>>>>>>>>>>> (d98) SeaBIOS (version
>>>>>>>>>>>>>>> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
>>>>>>>>>>>>>>> (d98) Machine UUID f4cdeb74-0db1-4748-948d-
>> 42579a494120
>>>>>>>>>>>>>>> (d98) EHCI init on dev 00:1d.7 (regs=0xf9057020)
>>>>>>>>>>>>>>> (d98) Found 0 lpt ports
>>>>>>>>>>>>>>> (d98) Found 0 serial ports
>>>>>>>>>>>>>>> (d98) ATA controller 1 at 1f0/3f4/0 (irq 14 dev 9)
>>>>>>>>>>>>>>> (d98) ATA controller 2 at 170/374/0 (irq 15 dev 9)
>>>>>>>>>>>>>>> (d98) ata0-0: QEMU HARDDISK ATA-7 Hard-Disk (40720
>>>> MiBytes)
>>>>>>>>>>>>>>> (d98) Searching bootorder for:
>>>>>> /pci@i0cf8/*@1,1/drive@0/disk@0
>>>>>>>>>>>>>>> (d98) DVD/CD [ata0-1: QEMU DVD-ROM ATAPI-4 DVD/CD]
>>>>>>>>>>>>>>> (d98) Searching bootorder for:
>>>>>> /pci@i0cf8/*@1,1/drive@0/disk@1
>>>>>>>>>>>>>>> (d98) UHCI init on dev 00:1d.0 (io=c240)
>>>>>>>>>>>>>>> (d98) UHCI init on dev 00:1d.1 (io=c260)
>>>>>>>>>>>>>>> (d98) UHCI init on dev 00:1d.2 (io=c280)
>>>>>>>>>>>>>>> (d98) PS2 keyboard initialized
>>>>>>>>>>>>>>> (d98) All threads complete.
>>>>>>>>>>>>>>> (d98) Scan for option roms
>>>>>>>>>>>>>>> (d98) Running option rom at c980:0003
>>>>>>>>>>>>>>> (d98) pmm call arg1=1
>>>>>>>>>>>>>>> (d98) pmm call arg1=0
>>>>>>>>>>>>>>> (d98) pmm call arg1=1
>>>>>>>>>>>>>>> (d98) pmm call arg1=0
>>>>>>>>>>>>>>> (d98) Searching bootorder for: /pci@i0cf8/*@6
>>>>>>>>>>>>>>> (d98)
>>>>>>>>>>>>>>> (d98) Press F12 for boot menu.
>>>>>>>>>>>>>>> (d98)
>>>>>>>>>>>>>>> (d98) Searching bootorder for: HALT
>>>>>>>>>>>>>>> (d98) drive 0x000f0d40: PCHS=16383/16/63 translation=lba
>>>>>>>>>>>>>>> LCHS=1024/255/63 s=83394560
>>>>>>>>>>>>>>> (d98) Space available for UMB: ca800-ee800, f0000-f0ce0
>>>>>>>>>>>>>>> (d98) Returned 258048 bytes of ZoneHigh
>>>>>>>>>>>>>>> (d98) e820 map has 6 items:
>>>>>>>>>>>>>>> (d98)   0: 0000000000000000 - 000000000009fc00 = 1 RAM
>>>>>>>>>>>>>>> (d98)   1: 000000000009fc00 - 00000000000a0000 = 2
>> RESERVED
>>>>>>>>>>>>>>> (d98)   2: 00000000000f0000 - 0000000000100000 = 2
>> RESERVED
>>>>>>>>>>>>>>> (d98)   3: 0000000000100000 - 0000000077fff000 = 1 RAM
>>>>>>>>>>>>>>> (d98)   4: 0000000077fff000 - 0000000078000000 = 2
>> RESERVED
>>>>>>>>>>>>>>> (d98)   5: 00000000fc000000 - 0000000100000000 = 2
>> RESERVED
>>>>>>>>>>>>>>> (d98) enter handle_19:
>>>>>>>>>>>>>>> (d98)   NULL
>>>>>>>>>>>>>>> (d98) Booting from Hard Disk...
>>>>>>>>>>>>>>> (d98) Booting from 0000:7c00
>>>>>>>>>>>>>>> (XEN) d98: VIRIDIAN GUEST_OS_ID: vendor: 1 os: 4 major: 6
>>>>>> minor:
>>>>>>>> 1
>>>>>>>>>> sp:
>>>>>>>>>>>>>>> 1 build: 1db1
>>>>>>>>>>>>>>> (XEN) d98: VIRIDIAN HYPERCALL: enabled: 1 pfn: 3ffff
>>>>>>>>>>>>>>> (XEN) d98v0: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffe
>>>>>>>>>>>>>>> (XEN) d98v1: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffd
>>>>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 0 changed 5 -> 0
>>>>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 1 changed 10 -> 0
>>>>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 2 changed 11 -> 0
>>>>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 3 changed 5 -> 0
>>>>>>>>>>>>>>> (XEN) irq.c:380: Dom98 callback via changed to GSI 24
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: ====>
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 0000007A: FFFFF6FC000171C8
>>>>>>>>>> FFFFFFFFC0000185
>>>>>>>>>>>>>>> 000000001BD6A860 FFFF
>>>>>>>>>>>>>>> (d98) F80002E39000
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: CONTEXT (FFFFF8800310E530):
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - GS = 002B
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - FS = 0053
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - ES = 002B
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - DS = 002B
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - SS = 0018
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - CS = 0010
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - EFLAGS = 00000086
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RDI = 00000000000171C8
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RSI = 00000000C0000185
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RBX = 00000000038AC8F8
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RDX = 0000000000000000
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RCX = 000000000310E530
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RAX = 000000002ECF4722
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RBP = 000000001BD6A860
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RIP = 00000000038A2A43
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RSP = 000000000310E510
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R8 = 0000000000000000
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R9 = 0000000000000000
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R10 = 0000000000000000
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R11 = 0000000000000000
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R12 = 000000000000007A
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R13 = 0000000000000001
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R14 = 0000000002E39000
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R15 = 0000000002CBAC40
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: STACK:
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310EA20:
>>>> (0000000000000003
>>>>>>>>>>>>>>> 00000000038A50F0 00000000038A
>>>>>>>>>>>>>>> (d98) 4860 000000000000007A) xen.sys + 00000000000049AC
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310EA70:
>>>> (00000000038AD0D0
>>>>>>>>>>>>>>> 0000000000000000 000000000000
>>>>>>>>>>>>>>> (d98) 0004 0000000002C83500) ntoskrnl.exe +
>>>> 0000000000128585
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310EAA0:
>>>> (00000000038AD0D0
>>>>>>>>>>>>>>> 0000000002C83500 000000000000
>>>>>>>>>>>>>>> (d98) 000F 0000000001780660) ntoskrnl.exe +
>>>> 0000000000167C0D
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F170:
>> (0000000003816470
>>>>>>>>>>>>>>> 0000000002B4C8C1 000000000000
>>>>>>>>>>>>>>> (d98) 00FE 0000000000000000) ntoskrnl.exe +
>>>> 0000000000075CC4
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F1B0:
>>>> (000000000000007A
>>>>>>>>>>>>>>> 00000000000171C8 00000000C000
>>>>>>>>>>>>>>> (d98) 0185 000000001BD6A860) ntoskrnl.exe +
>>>> 00000000000E8752
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F290:
>> (00000000038163B0
>>>>>>>>>>>>>>> 000000000310F320 0000000002CB
>>>>>>>>>>>>>>> (d98) D540 00000000038163B0) ntoskrnl.exe +
>>>> 000000000009C91F
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F360:
>> (0000000000000000
>>>>>>>>>>>>>>> 0000000000000008 00000000FFFF
>>>>>>>>>>>>>>> (d98) FFFF 00000000003500F0) ntoskrnl.exe +
>>>> 00000000000831B9
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F4C0:
>> (0000000000000008
>>>>>>>>>>>>>>> 0000000002E39000 000000000000
>>>>>>>>>>>>>>> (d98) 0000 0000000000000000) ntoskrnl.exe +
>>>> 0000000000073CEE
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F658:
>>>> (0000000002E5CFD5
>>>>>>>>>>>>>>> 0000000000000000 0000000003EB
>>>>>>>>>>>>>>> (d98) 8710 00000000FFFFFFFF) ntoskrnl.exe +
>>>> 000000000042C000
>>>>>>>>>>>>>> If you need more tests/informations tell me and I'll post
>> them.
>>>>>>>>>>>>>> Thanks for any reply and sorry for my bad english.
>>>>>>>>>>>>> Well, that tells me you had a 7A BSOD, which is a
>>>>>>>>>>>> KERNEL_DATA_INPAGE_ERROR. The error status (param 2) was
>>>>>>>> C0000185
>>>>>>>>>> so
>>>>>>>>>>>> that's a STATUS_IO_DEVICE_ERROR. The documentation at
>>>>>>>>>>>> http://msdn.microsoft.com/en-
>>>>>>>>>>>> gb/library/windows/hardware/ff559211%28v=vs.85%29.aspx
>> tells
>>>>>> me
>>>>>>>> that
>>>>>>>>>>>> this means:
>>>>>>>>>>>>> "improper termination or defective cabling on SCSI devices or
>>>> that
>>>>>>>> two
>>>>>>>>>>>> devices are trying to use the same IRQ."
>>>>>>>>>>>>> But you said you had xenvbd already installed so you'll be
>> using a
>>>>>> PV
>>>>>>>>>>>> storage path. Is there any indication of problems with your
>>>> storage?
>>>>>>>>>>>>>          Paul
>>>>>>>>>>>> DomUs disk are all raw files in local dom0 disks, raid1 with "LSI
>>>> Logic
>>>>>>>>>>>> / Symbios Logic SAS2008 PCI-Express Fusion-MPT SAS-2" dom0
>>>>>>>> partitions
>>>>>>>>>>>> are GTP and fs ext4.
>>>>>>>>>>>> Dom0 is wheezy with kernel is linux-image-3.16-0.bpo.2-amd64
>>>>>> version
>>>>>>>>>>>> 3.16.3-2~bpo70+1
>>>>>>>>>>>> No kern or syslog errors, only many of these warning that
>>>> someone
>>>>>>>>>>>> replied me that should not be a problem:
>>>>>>>>>>>> Oct 15 10:45:13 mtorMN01OU kernel: [773197.117518]
>>>> xen:balloon:
>>>>>>>>>>>> reserve_additional_memory: add_memory() failed: -17
>>>>>>>>>>>> DomU now see disk as xen pvdisk, on xenvif install probably still
>>>> was
>>>>>>>>>>>> full emulated disk even if xenvbd was installed successful
>> before
>>>>>> xenvif
>>>>>>>>>>>> install (failed with BSOD)
>>>>>>>>>>>> The IRQ seems visible from xl dmesg output below, can you
>> check
>>>>>>>> them is
>>>>>>>>>>>> have something wrong or strange, I see some of them
>> "duplicate"
>>>>>> but I
>>>>>>>>>>>> not know if is correct.
>>>>>>>>>>>>
>>>>>>>>>>>> DomU xl cfg:
>>>>>>>>>>>>> name='office1_w7'
>>>>>>>>>>>>> builder="hvm"
>>>>>>>>>>>>> memory=2048
>>>>>>>>>>>>> vcpus=2
>>>>>>>>>>>>> acpi_s3=0
>>>>>>>>>>>>> acpi_s4=0
>>>>>>>>>>>>> vif=['bridge=xenbr0,mac=00:16:3e:41:ae:8b']
>>>>>>>>>>>>>
>> disk=['/mnt/vm/disks/office1_w7.disk1.xm,raw,hda,rw',',raw,hdb,ro,cdrom'
>>>>>>>>>>>> ]
>>>>>>>>>>>>> boot='c'
>>>>>>>>>>>>> device_model_version="qemu-xen"
>>>>>>>>>>>>> viridian=1
>>>>>>>>>>>>> vnc=0
>>>>>>>>>>>>> keymap="it"
>>>>>>>>>>>>> on_crash="destroy"
>>>>>>>>>>>>> vga="qxl"
>>>>>>>>>>>>> spice=1
>>>>>>>>>>>>> spicehost='0.0.0.0'
>>>>>>>>>>>>> spiceport=6001
>>>>>>>>>>>>> spicedisable_ticketing=0
>>>>>>>>>>>>> spicepasswd="password"
>>>>>>>>>>>>> spicevdagent=1
>>>>>>>>>>>>> spice_clipboard_sharing=0
>>>>>>>>>>>>> spiceusbredirection=4
>>>>>>>>>>>>> soundhw="hda"
>>>>>>>>>>>>> localtime=1
>>>>>>>>>>>> If you need more tests/informations tell me and I'll post them.
>>>>>>>>>>>>
>>>>>>>>>>> Do you have the qemu log (with xen platform logging enabled).
>>>> This is
>>>>>>>>>> where the PV drivers log failures/warnings.
>>>>>>>>>>>         Paul
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>> I retried enabling xen platform debug in qemu trace but no add
>> lines
>>>> in
>>>>>>>>>> log when I try to install xenvif and fails.
>>>>>>>>>> I attach anyway the log if can be useful.
>>>>>>>>> All I can see there is an apparently clean shutdown of domain 101;
>> no
>>>>>> sign
>>>>>>>> of XENVIF and no sign of a BSOD.
>>>>>>>>>> I'll also try to restore the backup of this night of the domU when I
>>>> had
>>>>>>>>>> the BSOD trying reproduce it with xen debug in qemu trace and
>>>>>> different
>>>>>>>>>> windows memory dump options.
>>>>>>>>> Ok.
>>>>>>>>>
>>>>>>>>>        Paul
>>>>>>>>>
>>>>>>>> Reproduced it but now with xen platform trace enabled in qemu.
>> (see
>>>>>>>> attachment)
>>>>>>>> Dump of memory instead is not present also in this case (probably
>>>>>>>> because disk is "failed").
>>>>>>> You're using emulate disk in this case. Did your BSOD not indicate that
>> it
>>>>>> was dumping?
>>>>>>>       Paul
>>>>>>>
>>>>>> I have to time to see if do a dump but I suppose it can't write to disk
>>>>>> since its driver fails.
>>>>>> Log qemu is not enough? You need the windows memory dump to find
>>>> and
>>>>>> fix
>>>>>> the bug?
>>>>> I don't know what the bug is. My guess is that it's a deadlock somewhere
>>>> which is causing Windows to believe there's a storage issue, but since the
>>>> stack is entirely in the kernel and without a crashdump I cannot decode to
>>>> symbols there's not much more I can do unless I happen to repro.
>>>>>      Paul
>>>>>
>>>>>> If needed tomorrow I'll do other tests.
>>>> I retried and seems always reproducible on same domU.
>>>> Now I disabled automatic reboot on crash and do a screenshot (in
>>>> attachment) but memory dump is still missed :( Probably with disk
>>>> "failed" can't write.
>>>> Is there another way to take/save the memory dump or the data you
>> need?
>>> Could you remove xenvbd and make sure the emulated disk is functional.
>> Then, install Xenvif and see if it BSODs.
>>
>> Now I tried to install xenvif without install xenvbd and installation is
>> ok, after I installed xennet (ok), xenvbd (ok) and xeniface but on this
>> latest same blue screen.
>> I can (and I must try) install all except xenvbd?
>> I also attached the new test's qemu log.
> You obviously have not rebooted yet. Try installing everything except xenvbd. Reboot. Then install xenvbd and reboot. Any hand over from an emulated device to a PV device requires a reboot.
>
>    Paul

Yes, I know that pvdrivers installation require reboot but the crash was 
before finish install all them and reboot.
Now I install all other 4 component (not xenvbd), rebooted, installed 
xenvbd and rebooted and no crash happen for now.
I suppose that this is only a workaround and one or more cases of disk 
crash can still happen, or I'm wrong?
What I can do to verify if can still crash in some cases?

Thanks for any reply.

>>>> About IRQ you checked in xl dmesg I posted if are all ok?
>>>>
>>> Yes, I don't think there's a problem there.
>>>
>>>     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 Fri Oct 17 12:56:50 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 17 Oct 2014 12:56: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 1Xf75O-0001dT-BK; Fri, 17 Oct 2014 12:56:50 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1Xf75M-0001dO-Hg
	for win-pv-devel@lists.xenproject.org; Fri, 17 Oct 2014 12:56:48 +0000
Received: from [193.109.254.147:42613] by server-16.bemta-14.messagelabs.com
	id 02/DA-16990-F0211445; Fri, 17 Oct 2014 12:56:47 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-14.tower-27.messagelabs.com!1413550606!13437377!1
X-Originating-IP: [209.85.212.169]
X-SpamReason: No, hits=2.2 required=7.0 tests=BIZ_TLD,BODY_RANDOM_LONG
X-StarScan-Received: 
X-StarScan-Version: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 10420 invoked from network); 17 Oct 2014 12:56:46 -0000
Received: from mail-wi0-f169.google.com (HELO mail-wi0-f169.google.com)
	(209.85.212.169)
	by server-14.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	17 Oct 2014 12:56:46 -0000
Received: by mail-wi0-f169.google.com with SMTP id h11so4003488wiw.2
	for <win-pv-devel@lists.xenproject.org>;
	Fri, 17 Oct 2014 05:56:46 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:message-id:date:from:user-agent:mime-version:to
	:subject:references:in-reply-to:content-type
	:content-transfer-encoding;
	bh=NkBat9DsH1ydUYel2DLPHV34q5h/IkelrLdedIcd30s=;
	b=U50IQ08o9aT0R1+NPY+mT4MctAY929Q4YhFzW0ss8Z+gxeglt9mZtnJXWaFEdUQVGp
	Qq8Eb0HM8udlU90wW7XHVIn17G5P3K9W7pjblfpYh3zdzIrCXpR1kBbwptTsWdie7+N2
	UwrN4M+ld1G+Hay9//7JCHPK+Nbf/FbTBOj00/jV3knBmDKcfBRcADfVu9B/MNRtmJXY
	QZi7fHxt2wLwd7YJ93LEFAwjyOW3oGKnUc4N6N0cdBYx+IL11uFbHA4GWLV44Rtrwflk
	wWDjX+5+/r7fyqRynfghN5w/7nW5yJxqnjC+2G/GLAFklg3g7o/DZ6HH2x6x4HwQoP7V
	yMbQ==
X-Gm-Message-State: ALoCoQkWIoUx9pDT8RRhwTEAMDXYl0iwJKyZHKGmlwfxnzIh7ecv4qSWkEogn1zWZt85pt2FgATU
X-Received: by 10.194.189.82 with SMTP id gg18mr3509534wjc.115.1413550606021; 
	Fri, 17 Oct 2014 05:56:46 -0700 (PDT)
Received: from [192.168.1.15] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by mx.google.com with ESMTPSA id ga7sm2015009wic.5.2014.10.17.05.56.44
	for <multiple recipients>
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Fri, 17 Oct 2014 05:56:45 -0700 (PDT)
Message-ID: <54411217.4090806@m2r.biz>
Date: Fri, 17 Oct 2014 14:56:55 +0200
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64;
	rv:24.0) Gecko/20100101 Thunderbird/24.6.0
MIME-Version: 1.0
To: Paul Durrant <Paul.Durrant@citrix.com>, 
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <543F887B.5030500@m2r.biz>	<9AAE0902D5BC7E449B7C8E4E778ABCD0111050FF@AMSPEX01CL01.citrite.net>	<543F912C.8000504@m2r.biz>	<9AAE0902D5BC7E449B7C8E4E778ABCD01110526F@AMSPEX01CL01.citrite.net>	<543FA4F6.5090804@m2r.biz>	<9AAE0902D5BC7E449B7C8E4E778ABCD0111053EA@AMSPEX01CL01.citrite.net>	<543FCA93.2010805@m2r.biz>	<9AAE0902D5BC7E449B7C8E4E778ABCD0111057A2@AMSPEX01CL01.citrite.net>	<543FDA2D.2090900@m2r.biz>	<9AAE0902D5BC7E449B7C8E4E778ABCD0111058E6@AMSPEX01CL01.citrite.net>	<543FDE85.1030908@m2r.biz>	<9AAE0902D5BC7E449B7C8E4E778ABCD011105A08@AMSPEX01CL01.citrite.net>
	<5440E39B.6080104@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD01110668E@AMSPEX01CL01.citrite.net>
	<5440F740.4070701@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD011106840@AMSPEX01CL01.citrite.net>
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD011106840@AMSPEX01CL01.citrite.net>
Subject: Re: [win-pv-devel] Blue screen on xenvif install
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 17/10/2014 14:02, Paul Durrant ha scritto:
>> -----Original Message-----
>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>> Sent: 17 October 2014 12:02
>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>> Subject: Re: [win-pv-devel] Blue screen on xenvif install
>>
>> Il 17/10/2014 11:48, Paul Durrant ha scritto:
>>>> -----Original Message-----
>>>> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
>>>> bounces@lists.xenproject.org] On Behalf Of Fabio Fantoni
>>>> Sent: 17 October 2014 10:39
>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>>>> Subject: Re: [win-pv-devel] Blue screen on xenvif install
>>>>
>>>> Il 16/10/2014 17:58, Paul Durrant ha scritto:
>>>>>> -----Original Message-----
>>>>>> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-
>> devel-
>>>>>> bounces@lists.xenproject.org] On Behalf Of Fabio Fantoni
>>>>>> Sent: 16 October 2014 16:05
>>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>>>>>> Subject: Re: [win-pv-devel] Blue screen on xenvif install
>>>>>>
>>>>>> Il 16/10/2014 16:54, Paul Durrant ha scritto:
>>>>>>>> -----Original Message-----
>>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>>>>>> Sent: 16 October 2014 15:46
>>>>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>>>>>>>> Subject: Re: Blue screen on xenvif install
>>>>>>>>
>>>>>>>> Il 16/10/2014 15:45, Paul Durrant ha scritto:
>>>>>>>>>> -----Original Message-----
>>>>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>>>>>>>> Sent: 16 October 2014 14:40
>>>>>>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>>>>>>>>>> Subject: Re: Blue screen on xenvif install
>>>>>>>>>>
>>>>>>>>>> Il 16/10/2014 13:04, Paul Durrant ha scritto:
>>>>>>>>>>>> -----Original Message-----
>>>>>>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>>>>>>>>>> Sent: 16 October 2014 11:59
>>>>>>>>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>>>>>>>>>>>> Subject: Re: Blue screen on xenvif install
>>>>>>>>>>>>
>>>>>>>>>>>> Il 16/10/2014 12:00, Paul Durrant ha scritto:
>>>>>>>>>>>>>> -----Original Message-----
>>>>>>>>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>>>>>>>>>>>> Sent: 16 October 2014 10:35
>>>>>>>>>>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>>>>>>>>>>>>>> Subject: Re: Blue screen on xenvif install
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Il 16/10/2014 10:59, Paul Durrant ha scritto:
>>>>>>>>>>>>>>>> -----Original Message-----
>>>>>>>>>>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>>>>>>>>>>>>>> Sent: 16 October 2014 09:58
>>>>>>>>>>>>>>>> To: win-pv-devel@lists.xenproject.org
>>>>>>>>>>>>>>>> Cc: Paul Durrant
>>>>>>>>>>>>>>>> Subject: Blue screen on xenvif install
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Today I tried to install new winpv driver to other 3
>> windows 7
>>>>>> pro
>>>>>>>> 64
>>>>>>>>>>>>>>>> bit domUs.
>>>>>>>>>>>>>>>> Days ago I installed them successful on one windows 7 pro
>> 64
>>>>>> bit
>>>>>>>> and
>>>>>>>>>>>> one
>>>>>>>>>>>>>>>> windows 8.1 enterprise 64 bit.
>>>>>>>>>>>>>>>> On first domUs I tried to install them today I installed
>> xenbus
>>>>>> and
>>>>>>>>>>>>>>>> xenvbd successful but on xenvif install windows crashed
>>>> with
>>>>>> blue
>>>>>>>>>>>>>>>> screen, if I saw it correctly was an kernel in-page error or
>>>>>>>> something
>>>>>>>>>>>>>>>> similar.
>>>>>>>>>>>>>>>> After reboot I retried to install xenvif but now always fails.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Sounds odd. Do you have a MEMORY.DMP?
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>           Paul
>>>>>>>>>>>>>> Windows is setted to write dump of kernel memory on
>> system
>>>>>> error
>>>>>>>>>> but
>>>>>>>>>>>>>> %systemroot%\memory.dmp is missed :(
>>>>>>>>>>>>>> I also checked the windows events log but I found only
>> kernel-
>>>>>>>> power
>>>>>>>>>> as
>>>>>>>>>>>>>> critical that seems not contains useful data.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> I found probably useful data in xl dmesg (I copied all below
>>>> from
>>>>>>>> domU
>>>>>>>>>>>>>> start to xen bug):
>>>>>>>>>>>>>>> (d98) HVM Loader
>>>>>>>>>>>>>>> (d98) Detected Xen v4.5-unstable
>>>>>>>>>>>>>>> (d98) Xenbus rings @0xfeffc000, event channel 1
>>>>>>>>>>>>>>> (d98) System requested SeaBIOS
>>>>>>>>>>>>>>> (d98) CPU speed is 2660 MHz
>>>>>>>>>>>>>>> (d98) Relocating guest memory for lowmem MMIO space
>>>>>> disabled
>>>>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 0 changed 0 -> 5
>>>>>>>>>>>>>>> (d98) PCI-ISA link 0 routed to IRQ5
>>>>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 1 changed 0 -> 10
>>>>>>>>>>>>>>> (d98) PCI-ISA link 1 routed to IRQ10
>>>>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 2 changed 0 -> 11
>>>>>>>>>>>>>>> (d98) PCI-ISA link 2 routed to IRQ11
>>>>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 3 changed 0 -> 5
>>>>>>>>>>>>>>> (d98) PCI-ISA link 3 routed to IRQ5
>>>>>>>>>>>>>>> (d98) pci dev 01:3 INTA->IRQ10
>>>>>>>>>>>>>>> (d98) pci dev 02:0 INTA->IRQ11
>>>>>>>>>>>>>>> (d98) pci dev 03:0 INTA->IRQ5
>>>>>>>>>>>>>>> (d98) pci dev 04:0 INTA->IRQ5
>>>>>>>>>>>>>>> (d98) pci dev 05:0 INTA->IRQ10
>>>>>>>>>>>>>>> (d98) pci dev 06:0 INTA->IRQ11
>>>>>>>>>>>>>>> (d98) pci dev 1d:0 INTA->IRQ10
>>>>>>>>>>>>>>> (d98) pci dev 1d:1 INTB->IRQ11
>>>>>>>>>>>>>>> (d98) pci dev 1d:2 INTC->IRQ5
>>>>>>>>>>>>>>> (d98) pci dev 1d:7 INTD->IRQ5
>>>>>>>>>>>>>>> (d98) No RAM in high memory; setting high_mem resource
>>>> base
>>>>>> to
>>>>>>>>>>>>>> 100000000
>>>>>>>>>>>>>>> (d98) pci dev 05:0 bar 10 size 004000000: 0f0000000
>>>>>>>>>>>>>>> (d98) pci dev 05:0 bar 14 size 004000000: 0f4000000
>>>>>>>>>>>>>>> (d98) pci dev 02:0 bar 14 size 001000000: 0f8000008
>>>>>>>>>>>>>>> (d98) pci dev 06:0 bar 30 size 000040000: 0f9000000
>>>>>>>>>>>>>>> (d98) pci dev 05:0 bar 30 size 000010000: 0f9040000
>>>>>>>>>>>>>>> (d98) pci dev 03:0 bar 10 size 000004000: 0f9050000
>>>>>>>>>>>>>>> (d98) pci dev 05:0 bar 18 size 000002000: 0f9054000
>>>>>>>>>>>>>>> (d98) pci dev 04:0 bar 14 size 000001000: 0f9056000
>>>>>>>>>>>>>>> (d98) pci dev 1d:7 bar 10 size 000001000: 0f9057000
>>>>>>>>>>>>>>> (d98) pci dev 02:0 bar 10 size 000000100: 00000c001
>>>>>>>>>>>>>>> (d98) pci dev 06:0 bar 10 size 000000100: 00000c101
>>>>>>>>>>>>>>> (d98) pci dev 06:0 bar 14 size 000000100: 0f9058000
>>>>>>>>>>>>>>> (d98) pci dev 04:0 bar 10 size 000000020: 00000c201
>>>>>>>>>>>>>>> (d98) pci dev 05:0 bar 1c size 000000020: 00000c221
>>>>>>>>>>>>>>> (d98) pci dev 1d:0 bar 20 size 000000020: 00000c241
>>>>>>>>>>>>>>> (d98) pci dev 1d:1 bar 20 size 000000020: 00000c261
>>>>>>>>>>>>>>> (d98) pci dev 1d:2 bar 20 size 000000020: 00000c281
>>>>>>>>>>>>>>> (d98) pci dev 01:1 bar 20 size 000000010: 00000c2a1
>>>>>>>>>>>>>>> (d98) Multiprocessor initialisation:
>>>>>>>>>>>>>>> (d98)  - CPU0 ... 36-bit phys ... fixed MTRRs ... var MTRRs
>> [1/8]
>>>> ...
>>>>>>>>>>>>>>> done.
>>>>>>>>>>>>>>> (d98)  - CPU1 ... 36-bit phys ... fixed MTRRs ... var MTRRs
>> [1/8]
>>>> ...
>>>>>>>>>>>>>>> done.
>>>>>>>>>>>>>>> (d98) Testing HVM environment:
>>>>>>>>>>>>>>> (d98)  - REP INSB across page boundaries ... passed
>>>>>>>>>>>>>>> (d98)  - GS base MSRs and SWAPGS ... passed
>>>>>>>>>>>>>>> (d98) Passed 2 of 2 tests
>>>>>>>>>>>>>>> (d98) Writing SMBIOS tables ...
>>>>>>>>>>>>>>> (d98) Loading SeaBIOS ...
>>>>>>>>>>>>>>> (d98) Creating MP tables ...
>>>>>>>>>>>>>>> (d98) Loading ACPI ...
>>>>>>>>>>>>>>> (d98) S3 disabled
>>>>>>>>>>>>>>> (d98) S4 disabled
>>>>>>>>>>>>>>> (d98) vm86 TSS at fc00a100
>>>>>>>>>>>>>>> (d98) BIOS map:
>>>>>>>>>>>>>>> (d98)  10000-100d3: Scratch space
>>>>>>>>>>>>>>> (d98)  c0000-fffff: Main BIOS
>>>>>>>>>>>>>>> (d98) E820 table:
>>>>>>>>>>>>>>> (d98)  [00]: 00000000:00000000 - 00000000:000a0000: RAM
>>>>>>>>>>>>>>> (d98)  HOLE: 00000000:000a0000 - 00000000:000c0000
>>>>>>>>>>>>>>> (d98)  [01]: 00000000:000c0000 - 00000000:00100000:
>>>> RESERVED
>>>>>>>>>>>>>>> (d98)  [02]: 00000000:00100000 - 00000000:78000000: RAM
>>>>>>>>>>>>>>> (d98)  HOLE: 00000000:78000000 - 00000000:fc000000
>>>>>>>>>>>>>>> (d98)  [03]: 00000000:fc000000 - 00000001:00000000:
>> RESERVED
>>>>>>>>>>>>>>> (d98) Invoking SeaBIOS ...
>>>>>>>>>>>>>>> (d98) SeaBIOS (version
>>>>>>>>>>>>>>> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
>>>>>>>>>>>>>>> (d98)
>>>>>>>>>>>>>>> (d98) Found Xen hypervisor signature at 40000100
>>>>>>>>>>>>>>> (d98) Running on QEMU (i440fx)
>>>>>>>>>>>>>>> (d98) xen: copy e820...
>>>>>>>>>>>>>>> (d98) Relocating init from 0x000df619 to 0x77fae600 (size
>>>> 71995)
>>>>>>>>>>>>>>> (d98) CPU Mhz=2660
>>>>>>>>>>>>>>> (d98) Found 13 PCI devices (max PCI bus is 00)
>>>>>>>>>>>>>>> (d98) Allocated Xen hypercall page at 77fff000
>>>>>>>>>>>>>>> (d98) Detected Xen v4.5-unstable
>>>>>>>>>>>>>>> (d98) xen: copy BIOS tables...
>>>>>>>>>>>>>>> (d98) Copying SMBIOS entry point from 0x00010010 to
>>>>>> 0x000f0f40
>>>>>>>>>>>>>>> (d98) Copying MPTABLE from 0xfc001170/fc001180 to
>>>> 0x000f0e40
>>>>>>>>>>>>>>> (d98) Copying PIR from 0x00010030 to 0x000f0dc0
>>>>>>>>>>>>>>> (d98) Copying ACPI RSDP from 0x000100b0 to 0x000f0d90
>>>>>>>>>>>>>>> (d98) Using pmtimer, ioport 0xb008
>>>>>>>>>>>>>>> (d98) Scan for VGA option rom
>>>>>>>>>>>>>>> (d98) Running option rom at c000:0003
>>>>>>>>>>>>>>> (XEN) stdvga.c:147:d98v0 entering stdvga and caching
>> modes
>>>>>>>>>>>>>>> (d98) pmm call arg1=0
>>>>>>>>>>>>>>> (d98) Turning on vga text mode console
>>>>>>>>>>>>>>> (d98) SeaBIOS (version
>>>>>>>>>>>>>>> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
>>>>>>>>>>>>>>> (d98) Machine UUID f4cdeb74-0db1-4748-948d-
>> 42579a494120
>>>>>>>>>>>>>>> (d98) EHCI init on dev 00:1d.7 (regs=0xf9057020)
>>>>>>>>>>>>>>> (d98) Found 0 lpt ports
>>>>>>>>>>>>>>> (d98) Found 0 serial ports
>>>>>>>>>>>>>>> (d98) ATA controller 1 at 1f0/3f4/0 (irq 14 dev 9)
>>>>>>>>>>>>>>> (d98) ATA controller 2 at 170/374/0 (irq 15 dev 9)
>>>>>>>>>>>>>>> (d98) ata0-0: QEMU HARDDISK ATA-7 Hard-Disk (40720
>>>> MiBytes)
>>>>>>>>>>>>>>> (d98) Searching bootorder for:
>>>>>> /pci@i0cf8/*@1,1/drive@0/disk@0
>>>>>>>>>>>>>>> (d98) DVD/CD [ata0-1: QEMU DVD-ROM ATAPI-4 DVD/CD]
>>>>>>>>>>>>>>> (d98) Searching bootorder for:
>>>>>> /pci@i0cf8/*@1,1/drive@0/disk@1
>>>>>>>>>>>>>>> (d98) UHCI init on dev 00:1d.0 (io=c240)
>>>>>>>>>>>>>>> (d98) UHCI init on dev 00:1d.1 (io=c260)
>>>>>>>>>>>>>>> (d98) UHCI init on dev 00:1d.2 (io=c280)
>>>>>>>>>>>>>>> (d98) PS2 keyboard initialized
>>>>>>>>>>>>>>> (d98) All threads complete.
>>>>>>>>>>>>>>> (d98) Scan for option roms
>>>>>>>>>>>>>>> (d98) Running option rom at c980:0003
>>>>>>>>>>>>>>> (d98) pmm call arg1=1
>>>>>>>>>>>>>>> (d98) pmm call arg1=0
>>>>>>>>>>>>>>> (d98) pmm call arg1=1
>>>>>>>>>>>>>>> (d98) pmm call arg1=0
>>>>>>>>>>>>>>> (d98) Searching bootorder for: /pci@i0cf8/*@6
>>>>>>>>>>>>>>> (d98)
>>>>>>>>>>>>>>> (d98) Press F12 for boot menu.
>>>>>>>>>>>>>>> (d98)
>>>>>>>>>>>>>>> (d98) Searching bootorder for: HALT
>>>>>>>>>>>>>>> (d98) drive 0x000f0d40: PCHS=16383/16/63 translation=lba
>>>>>>>>>>>>>>> LCHS=1024/255/63 s=83394560
>>>>>>>>>>>>>>> (d98) Space available for UMB: ca800-ee800, f0000-f0ce0
>>>>>>>>>>>>>>> (d98) Returned 258048 bytes of ZoneHigh
>>>>>>>>>>>>>>> (d98) e820 map has 6 items:
>>>>>>>>>>>>>>> (d98)   0: 0000000000000000 - 000000000009fc00 = 1 RAM
>>>>>>>>>>>>>>> (d98)   1: 000000000009fc00 - 00000000000a0000 = 2
>> RESERVED
>>>>>>>>>>>>>>> (d98)   2: 00000000000f0000 - 0000000000100000 = 2
>> RESERVED
>>>>>>>>>>>>>>> (d98)   3: 0000000000100000 - 0000000077fff000 = 1 RAM
>>>>>>>>>>>>>>> (d98)   4: 0000000077fff000 - 0000000078000000 = 2
>> RESERVED
>>>>>>>>>>>>>>> (d98)   5: 00000000fc000000 - 0000000100000000 = 2
>> RESERVED
>>>>>>>>>>>>>>> (d98) enter handle_19:
>>>>>>>>>>>>>>> (d98)   NULL
>>>>>>>>>>>>>>> (d98) Booting from Hard Disk...
>>>>>>>>>>>>>>> (d98) Booting from 0000:7c00
>>>>>>>>>>>>>>> (XEN) d98: VIRIDIAN GUEST_OS_ID: vendor: 1 os: 4 major: 6
>>>>>> minor:
>>>>>>>> 1
>>>>>>>>>> sp:
>>>>>>>>>>>>>>> 1 build: 1db1
>>>>>>>>>>>>>>> (XEN) d98: VIRIDIAN HYPERCALL: enabled: 1 pfn: 3ffff
>>>>>>>>>>>>>>> (XEN) d98v0: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffe
>>>>>>>>>>>>>>> (XEN) d98v1: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffd
>>>>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 0 changed 5 -> 0
>>>>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 1 changed 10 -> 0
>>>>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 2 changed 11 -> 0
>>>>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 3 changed 5 -> 0
>>>>>>>>>>>>>>> (XEN) irq.c:380: Dom98 callback via changed to GSI 24
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: ====>
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 0000007A: FFFFF6FC000171C8
>>>>>>>>>> FFFFFFFFC0000185
>>>>>>>>>>>>>>> 000000001BD6A860 FFFF
>>>>>>>>>>>>>>> (d98) F80002E39000
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: CONTEXT (FFFFF8800310E530):
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - GS = 002B
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - FS = 0053
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - ES = 002B
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - DS = 002B
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - SS = 0018
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - CS = 0010
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - EFLAGS = 00000086
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RDI = 00000000000171C8
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RSI = 00000000C0000185
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RBX = 00000000038AC8F8
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RDX = 0000000000000000
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RCX = 000000000310E530
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RAX = 000000002ECF4722
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RBP = 000000001BD6A860
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RIP = 00000000038A2A43
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RSP = 000000000310E510
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R8 = 0000000000000000
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R9 = 0000000000000000
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R10 = 0000000000000000
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R11 = 0000000000000000
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R12 = 000000000000007A
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R13 = 0000000000000001
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R14 = 0000000002E39000
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R15 = 0000000002CBAC40
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: STACK:
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310EA20:
>>>> (0000000000000003
>>>>>>>>>>>>>>> 00000000038A50F0 00000000038A
>>>>>>>>>>>>>>> (d98) 4860 000000000000007A) xen.sys + 00000000000049AC
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310EA70:
>>>> (00000000038AD0D0
>>>>>>>>>>>>>>> 0000000000000000 000000000000
>>>>>>>>>>>>>>> (d98) 0004 0000000002C83500) ntoskrnl.exe +
>>>> 0000000000128585
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310EAA0:
>>>> (00000000038AD0D0
>>>>>>>>>>>>>>> 0000000002C83500 000000000000
>>>>>>>>>>>>>>> (d98) 000F 0000000001780660) ntoskrnl.exe +
>>>> 0000000000167C0D
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F170:
>> (0000000003816470
>>>>>>>>>>>>>>> 0000000002B4C8C1 000000000000
>>>>>>>>>>>>>>> (d98) 00FE 0000000000000000) ntoskrnl.exe +
>>>> 0000000000075CC4
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F1B0:
>>>> (000000000000007A
>>>>>>>>>>>>>>> 00000000000171C8 00000000C000
>>>>>>>>>>>>>>> (d98) 0185 000000001BD6A860) ntoskrnl.exe +
>>>> 00000000000E8752
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F290:
>> (00000000038163B0
>>>>>>>>>>>>>>> 000000000310F320 0000000002CB
>>>>>>>>>>>>>>> (d98) D540 00000000038163B0) ntoskrnl.exe +
>>>> 000000000009C91F
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F360:
>> (0000000000000000
>>>>>>>>>>>>>>> 0000000000000008 00000000FFFF
>>>>>>>>>>>>>>> (d98) FFFF 00000000003500F0) ntoskrnl.exe +
>>>> 00000000000831B9
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F4C0:
>> (0000000000000008
>>>>>>>>>>>>>>> 0000000002E39000 000000000000
>>>>>>>>>>>>>>> (d98) 0000 0000000000000000) ntoskrnl.exe +
>>>> 0000000000073CEE
>>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F658:
>>>> (0000000002E5CFD5
>>>>>>>>>>>>>>> 0000000000000000 0000000003EB
>>>>>>>>>>>>>>> (d98) 8710 00000000FFFFFFFF) ntoskrnl.exe +
>>>> 000000000042C000
>>>>>>>>>>>>>> If you need more tests/informations tell me and I'll post
>> them.
>>>>>>>>>>>>>> Thanks for any reply and sorry for my bad english.
>>>>>>>>>>>>> Well, that tells me you had a 7A BSOD, which is a
>>>>>>>>>>>> KERNEL_DATA_INPAGE_ERROR. The error status (param 2) was
>>>>>>>> C0000185
>>>>>>>>>> so
>>>>>>>>>>>> that's a STATUS_IO_DEVICE_ERROR. The documentation at
>>>>>>>>>>>> http://msdn.microsoft.com/en-
>>>>>>>>>>>> gb/library/windows/hardware/ff559211%28v=vs.85%29.aspx
>> tells
>>>>>> me
>>>>>>>> that
>>>>>>>>>>>> this means:
>>>>>>>>>>>>> "improper termination or defective cabling on SCSI devices or
>>>> that
>>>>>>>> two
>>>>>>>>>>>> devices are trying to use the same IRQ."
>>>>>>>>>>>>> But you said you had xenvbd already installed so you'll be
>> using a
>>>>>> PV
>>>>>>>>>>>> storage path. Is there any indication of problems with your
>>>> storage?
>>>>>>>>>>>>>          Paul
>>>>>>>>>>>> DomUs disk are all raw files in local dom0 disks, raid1 with "LSI
>>>> Logic
>>>>>>>>>>>> / Symbios Logic SAS2008 PCI-Express Fusion-MPT SAS-2" dom0
>>>>>>>> partitions
>>>>>>>>>>>> are GTP and fs ext4.
>>>>>>>>>>>> Dom0 is wheezy with kernel is linux-image-3.16-0.bpo.2-amd64
>>>>>> version
>>>>>>>>>>>> 3.16.3-2~bpo70+1
>>>>>>>>>>>> No kern or syslog errors, only many of these warning that
>>>> someone
>>>>>>>>>>>> replied me that should not be a problem:
>>>>>>>>>>>> Oct 15 10:45:13 mtorMN01OU kernel: [773197.117518]
>>>> xen:balloon:
>>>>>>>>>>>> reserve_additional_memory: add_memory() failed: -17
>>>>>>>>>>>> DomU now see disk as xen pvdisk, on xenvif install probably still
>>>> was
>>>>>>>>>>>> full emulated disk even if xenvbd was installed successful
>> before
>>>>>> xenvif
>>>>>>>>>>>> install (failed with BSOD)
>>>>>>>>>>>> The IRQ seems visible from xl dmesg output below, can you
>> check
>>>>>>>> them is
>>>>>>>>>>>> have something wrong or strange, I see some of them
>> "duplicate"
>>>>>> but I
>>>>>>>>>>>> not know if is correct.
>>>>>>>>>>>>
>>>>>>>>>>>> DomU xl cfg:
>>>>>>>>>>>>> name='office1_w7'
>>>>>>>>>>>>> builder="hvm"
>>>>>>>>>>>>> memory=2048
>>>>>>>>>>>>> vcpus=2
>>>>>>>>>>>>> acpi_s3=0
>>>>>>>>>>>>> acpi_s4=0
>>>>>>>>>>>>> vif=['bridge=xenbr0,mac=00:16:3e:41:ae:8b']
>>>>>>>>>>>>>
>> disk=['/mnt/vm/disks/office1_w7.disk1.xm,raw,hda,rw',',raw,hdb,ro,cdrom'
>>>>>>>>>>>> ]
>>>>>>>>>>>>> boot='c'
>>>>>>>>>>>>> device_model_version="qemu-xen"
>>>>>>>>>>>>> viridian=1
>>>>>>>>>>>>> vnc=0
>>>>>>>>>>>>> keymap="it"
>>>>>>>>>>>>> on_crash="destroy"
>>>>>>>>>>>>> vga="qxl"
>>>>>>>>>>>>> spice=1
>>>>>>>>>>>>> spicehost='0.0.0.0'
>>>>>>>>>>>>> spiceport=6001
>>>>>>>>>>>>> spicedisable_ticketing=0
>>>>>>>>>>>>> spicepasswd="password"
>>>>>>>>>>>>> spicevdagent=1
>>>>>>>>>>>>> spice_clipboard_sharing=0
>>>>>>>>>>>>> spiceusbredirection=4
>>>>>>>>>>>>> soundhw="hda"
>>>>>>>>>>>>> localtime=1
>>>>>>>>>>>> If you need more tests/informations tell me and I'll post them.
>>>>>>>>>>>>
>>>>>>>>>>> Do you have the qemu log (with xen platform logging enabled).
>>>> This is
>>>>>>>>>> where the PV drivers log failures/warnings.
>>>>>>>>>>>         Paul
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>> I retried enabling xen platform debug in qemu trace but no add
>> lines
>>>> in
>>>>>>>>>> log when I try to install xenvif and fails.
>>>>>>>>>> I attach anyway the log if can be useful.
>>>>>>>>> All I can see there is an apparently clean shutdown of domain 101;
>> no
>>>>>> sign
>>>>>>>> of XENVIF and no sign of a BSOD.
>>>>>>>>>> I'll also try to restore the backup of this night of the domU when I
>>>> had
>>>>>>>>>> the BSOD trying reproduce it with xen debug in qemu trace and
>>>>>> different
>>>>>>>>>> windows memory dump options.
>>>>>>>>> Ok.
>>>>>>>>>
>>>>>>>>>        Paul
>>>>>>>>>
>>>>>>>> Reproduced it but now with xen platform trace enabled in qemu.
>> (see
>>>>>>>> attachment)
>>>>>>>> Dump of memory instead is not present also in this case (probably
>>>>>>>> because disk is "failed").
>>>>>>> You're using emulate disk in this case. Did your BSOD not indicate that
>> it
>>>>>> was dumping?
>>>>>>>       Paul
>>>>>>>
>>>>>> I have to time to see if do a dump but I suppose it can't write to disk
>>>>>> since its driver fails.
>>>>>> Log qemu is not enough? You need the windows memory dump to find
>>>> and
>>>>>> fix
>>>>>> the bug?
>>>>> I don't know what the bug is. My guess is that it's a deadlock somewhere
>>>> which is causing Windows to believe there's a storage issue, but since the
>>>> stack is entirely in the kernel and without a crashdump I cannot decode to
>>>> symbols there's not much more I can do unless I happen to repro.
>>>>>      Paul
>>>>>
>>>>>> If needed tomorrow I'll do other tests.
>>>> I retried and seems always reproducible on same domU.
>>>> Now I disabled automatic reboot on crash and do a screenshot (in
>>>> attachment) but memory dump is still missed :( Probably with disk
>>>> "failed" can't write.
>>>> Is there another way to take/save the memory dump or the data you
>> need?
>>> Could you remove xenvbd and make sure the emulated disk is functional.
>> Then, install Xenvif and see if it BSODs.
>>
>> Now I tried to install xenvif without install xenvbd and installation is
>> ok, after I installed xennet (ok), xenvbd (ok) and xeniface but on this
>> latest same blue screen.
>> I can (and I must try) install all except xenvbd?
>> I also attached the new test's qemu log.
> You obviously have not rebooted yet. Try installing everything except xenvbd. Reboot. Then install xenvbd and reboot. Any hand over from an emulated device to a PV device requires a reboot.
>
>    Paul

Yes, I know that pvdrivers installation require reboot but the crash was 
before finish install all them and reboot.
Now I install all other 4 component (not xenvbd), rebooted, installed 
xenvbd and rebooted and no crash happen for now.
I suppose that this is only a workaround and one or more cases of disk 
crash can still happen, or I'm wrong?
What I can do to verify if can still crash in some cases?

Thanks for any reply.

>>>> About IRQ you checked in xl dmesg I posted if are all ok?
>>>>
>>> Yes, I don't think there's a problem there.
>>>
>>>     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 Fri Oct 17 13:20:59 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 17 Oct 2014 13:20: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 1Xf7Sl-00026T-4L; Fri, 17 Oct 2014 13:20:59 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <Paul.Durrant@citrix.com>) id 1Xf7Sk-00026O-2m
	for win-pv-devel@lists.xenproject.org; Fri, 17 Oct 2014 13:20:58 +0000
Received: from [85.158.137.68:45268] by server-5.bemta-3.messagelabs.com id
	6C/25-30889-9B711445; Fri, 17 Oct 2014 13:20:57 +0000
X-Env-Sender: Paul.Durrant@citrix.com
X-Msg-Ref: server-15.tower-31.messagelabs.com!1413552055!11229980!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: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 5365 invoked from network); 17 Oct 2014 13:20:56 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-15.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	17 Oct 2014 13:20:56 -0000
X-IronPort-AV: E=Sophos;i="5.04,739,1406592000"; d="scan'208";a="26043222"
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: [win-pv-devel] Blue screen on xenvif install
Thread-Index: AQHP6R88TE2eCcEtSU6laq0K5grY5pwybJlQ///obQCAACb2gP//8KIAgAAjAsCAAAnUgIAAIsDw///v2YAABHezEP//4XCA///QCHCAAWc2gP//3DXAgAA7NgD//84M0AAKPl6A///YicA=
Date: Fri, 17 Oct 2014 13:20:55 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD011106987@AMSPEX01CL01.citrite.net>
References: <543F887B.5030500@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111050FF@AMSPEX01CL01.citrite.net>
	<543F912C.8000504@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD01110526F@AMSPEX01CL01.citrite.net>
	<543FA4F6.5090804@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111053EA@AMSPEX01CL01.citrite.net>
	<543FCA93.2010805@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111057A2@AMSPEX01CL01.citrite.net>
	<543FDA2D.2090900@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111058E6@AMSPEX01CL01.citrite.net>
	<543FDE85.1030908@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD011105A08@AMSPEX01CL01.citrite.net>
	<5440E39B.6080104@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD01110668E@AMSPEX01CL01.citrite.net>
	<5440F740.4070701@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD011106840@AMSPEX01CL01.citrite.net>
	<54411217.4090806@m2r.biz>
In-Reply-To: <54411217.4090806@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] Blue screen on xenvif install
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: 17 October 2014 13:57
> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> Subject: Re: [win-pv-devel] Blue screen on xenvif install
> 
> Il 17/10/2014 14:02, Paul Durrant ha scritto:
> >> -----Original Message-----
> >> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >> Sent: 17 October 2014 12:02
> >> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >> Subject: Re: [win-pv-devel] Blue screen on xenvif install
> >>
> >> Il 17/10/2014 11:48, Paul Durrant ha scritto:
> >>>> -----Original Message-----
> >>>> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-
> devel-
> >>>> bounces@lists.xenproject.org] On Behalf Of Fabio Fantoni
> >>>> Sent: 17 October 2014 10:39
> >>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >>>> Subject: Re: [win-pv-devel] Blue screen on xenvif install
> >>>>
> >>>> Il 16/10/2014 17:58, Paul Durrant ha scritto:
> >>>>>> -----Original Message-----
> >>>>>> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-
> >> devel-
> >>>>>> bounces@lists.xenproject.org] On Behalf Of Fabio Fantoni
> >>>>>> Sent: 16 October 2014 16:05
> >>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >>>>>> Subject: Re: [win-pv-devel] Blue screen on xenvif install
> >>>>>>
> >>>>>> Il 16/10/2014 16:54, Paul Durrant ha scritto:
> >>>>>>>> -----Original Message-----
> >>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >>>>>>>> Sent: 16 October 2014 15:46
> >>>>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >>>>>>>> Subject: Re: Blue screen on xenvif install
> >>>>>>>>
> >>>>>>>> Il 16/10/2014 15:45, Paul Durrant ha scritto:
> >>>>>>>>>> -----Original Message-----
> >>>>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >>>>>>>>>> Sent: 16 October 2014 14:40
> >>>>>>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >>>>>>>>>> Subject: Re: Blue screen on xenvif install
> >>>>>>>>>>
> >>>>>>>>>> Il 16/10/2014 13:04, Paul Durrant ha scritto:
> >>>>>>>>>>>> -----Original Message-----
> >>>>>>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >>>>>>>>>>>> Sent: 16 October 2014 11:59
> >>>>>>>>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >>>>>>>>>>>> Subject: Re: Blue screen on xenvif install
> >>>>>>>>>>>>
> >>>>>>>>>>>> Il 16/10/2014 12:00, Paul Durrant ha scritto:
> >>>>>>>>>>>>>> -----Original Message-----
> >>>>>>>>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >>>>>>>>>>>>>> Sent: 16 October 2014 10:35
> >>>>>>>>>>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >>>>>>>>>>>>>> Subject: Re: Blue screen on xenvif install
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> Il 16/10/2014 10:59, Paul Durrant ha scritto:
> >>>>>>>>>>>>>>>> -----Original Message-----
> >>>>>>>>>>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >>>>>>>>>>>>>>>> Sent: 16 October 2014 09:58
> >>>>>>>>>>>>>>>> To: win-pv-devel@lists.xenproject.org
> >>>>>>>>>>>>>>>> Cc: Paul Durrant
> >>>>>>>>>>>>>>>> Subject: Blue screen on xenvif install
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> Today I tried to install new winpv driver to other 3
> >> windows 7
> >>>>>> pro
> >>>>>>>> 64
> >>>>>>>>>>>>>>>> bit domUs.
> >>>>>>>>>>>>>>>> Days ago I installed them successful on one windows 7
> pro
> >> 64
> >>>>>> bit
> >>>>>>>> and
> >>>>>>>>>>>> one
> >>>>>>>>>>>>>>>> windows 8.1 enterprise 64 bit.
> >>>>>>>>>>>>>>>> On first domUs I tried to install them today I installed
> >> xenbus
> >>>>>> and
> >>>>>>>>>>>>>>>> xenvbd successful but on xenvif install windows
> crashed
> >>>> with
> >>>>>> blue
> >>>>>>>>>>>>>>>> screen, if I saw it correctly was an kernel in-page error
> or
> >>>>>>>> something
> >>>>>>>>>>>>>>>> similar.
> >>>>>>>>>>>>>>>> After reboot I retried to install xenvif but now always
> fails.
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> Sounds odd. Do you have a MEMORY.DMP?
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>           Paul
> >>>>>>>>>>>>>> Windows is setted to write dump of kernel memory on
> >> system
> >>>>>> error
> >>>>>>>>>> but
> >>>>>>>>>>>>>> %systemroot%\memory.dmp is missed :(
> >>>>>>>>>>>>>> I also checked the windows events log but I found only
> >> kernel-
> >>>>>>>> power
> >>>>>>>>>> as
> >>>>>>>>>>>>>> critical that seems not contains useful data.
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> I found probably useful data in xl dmesg (I copied all
> below
> >>>> from
> >>>>>>>> domU
> >>>>>>>>>>>>>> start to xen bug):
> >>>>>>>>>>>>>>> (d98) HVM Loader
> >>>>>>>>>>>>>>> (d98) Detected Xen v4.5-unstable
> >>>>>>>>>>>>>>> (d98) Xenbus rings @0xfeffc000, event channel 1
> >>>>>>>>>>>>>>> (d98) System requested SeaBIOS
> >>>>>>>>>>>>>>> (d98) CPU speed is 2660 MHz
> >>>>>>>>>>>>>>> (d98) Relocating guest memory for lowmem MMIO
> space
> >>>>>> disabled
> >>>>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 0 changed 0 -> 5
> >>>>>>>>>>>>>>> (d98) PCI-ISA link 0 routed to IRQ5
> >>>>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 1 changed 0 -> 10
> >>>>>>>>>>>>>>> (d98) PCI-ISA link 1 routed to IRQ10
> >>>>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 2 changed 0 -> 11
> >>>>>>>>>>>>>>> (d98) PCI-ISA link 2 routed to IRQ11
> >>>>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 3 changed 0 -> 5
> >>>>>>>>>>>>>>> (d98) PCI-ISA link 3 routed to IRQ5
> >>>>>>>>>>>>>>> (d98) pci dev 01:3 INTA->IRQ10
> >>>>>>>>>>>>>>> (d98) pci dev 02:0 INTA->IRQ11
> >>>>>>>>>>>>>>> (d98) pci dev 03:0 INTA->IRQ5
> >>>>>>>>>>>>>>> (d98) pci dev 04:0 INTA->IRQ5
> >>>>>>>>>>>>>>> (d98) pci dev 05:0 INTA->IRQ10
> >>>>>>>>>>>>>>> (d98) pci dev 06:0 INTA->IRQ11
> >>>>>>>>>>>>>>> (d98) pci dev 1d:0 INTA->IRQ10
> >>>>>>>>>>>>>>> (d98) pci dev 1d:1 INTB->IRQ11
> >>>>>>>>>>>>>>> (d98) pci dev 1d:2 INTC->IRQ5
> >>>>>>>>>>>>>>> (d98) pci dev 1d:7 INTD->IRQ5
> >>>>>>>>>>>>>>> (d98) No RAM in high memory; setting high_mem
> resource
> >>>> base
> >>>>>> to
> >>>>>>>>>>>>>> 100000000
> >>>>>>>>>>>>>>> (d98) pci dev 05:0 bar 10 size 004000000: 0f0000000
> >>>>>>>>>>>>>>> (d98) pci dev 05:0 bar 14 size 004000000: 0f4000000
> >>>>>>>>>>>>>>> (d98) pci dev 02:0 bar 14 size 001000000: 0f8000008
> >>>>>>>>>>>>>>> (d98) pci dev 06:0 bar 30 size 000040000: 0f9000000
> >>>>>>>>>>>>>>> (d98) pci dev 05:0 bar 30 size 000010000: 0f9040000
> >>>>>>>>>>>>>>> (d98) pci dev 03:0 bar 10 size 000004000: 0f9050000
> >>>>>>>>>>>>>>> (d98) pci dev 05:0 bar 18 size 000002000: 0f9054000
> >>>>>>>>>>>>>>> (d98) pci dev 04:0 bar 14 size 000001000: 0f9056000
> >>>>>>>>>>>>>>> (d98) pci dev 1d:7 bar 10 size 000001000: 0f9057000
> >>>>>>>>>>>>>>> (d98) pci dev 02:0 bar 10 size 000000100: 00000c001
> >>>>>>>>>>>>>>> (d98) pci dev 06:0 bar 10 size 000000100: 00000c101
> >>>>>>>>>>>>>>> (d98) pci dev 06:0 bar 14 size 000000100: 0f9058000
> >>>>>>>>>>>>>>> (d98) pci dev 04:0 bar 10 size 000000020: 00000c201
> >>>>>>>>>>>>>>> (d98) pci dev 05:0 bar 1c size 000000020: 00000c221
> >>>>>>>>>>>>>>> (d98) pci dev 1d:0 bar 20 size 000000020: 00000c241
> >>>>>>>>>>>>>>> (d98) pci dev 1d:1 bar 20 size 000000020: 00000c261
> >>>>>>>>>>>>>>> (d98) pci dev 1d:2 bar 20 size 000000020: 00000c281
> >>>>>>>>>>>>>>> (d98) pci dev 01:1 bar 20 size 000000010: 00000c2a1
> >>>>>>>>>>>>>>> (d98) Multiprocessor initialisation:
> >>>>>>>>>>>>>>> (d98)  - CPU0 ... 36-bit phys ... fixed MTRRs ... var MTRRs
> >> [1/8]
> >>>> ...
> >>>>>>>>>>>>>>> done.
> >>>>>>>>>>>>>>> (d98)  - CPU1 ... 36-bit phys ... fixed MTRRs ... var MTRRs
> >> [1/8]
> >>>> ...
> >>>>>>>>>>>>>>> done.
> >>>>>>>>>>>>>>> (d98) Testing HVM environment:
> >>>>>>>>>>>>>>> (d98)  - REP INSB across page boundaries ... passed
> >>>>>>>>>>>>>>> (d98)  - GS base MSRs and SWAPGS ... passed
> >>>>>>>>>>>>>>> (d98) Passed 2 of 2 tests
> >>>>>>>>>>>>>>> (d98) Writing SMBIOS tables ...
> >>>>>>>>>>>>>>> (d98) Loading SeaBIOS ...
> >>>>>>>>>>>>>>> (d98) Creating MP tables ...
> >>>>>>>>>>>>>>> (d98) Loading ACPI ...
> >>>>>>>>>>>>>>> (d98) S3 disabled
> >>>>>>>>>>>>>>> (d98) S4 disabled
> >>>>>>>>>>>>>>> (d98) vm86 TSS at fc00a100
> >>>>>>>>>>>>>>> (d98) BIOS map:
> >>>>>>>>>>>>>>> (d98)  10000-100d3: Scratch space
> >>>>>>>>>>>>>>> (d98)  c0000-fffff: Main BIOS
> >>>>>>>>>>>>>>> (d98) E820 table:
> >>>>>>>>>>>>>>> (d98)  [00]: 00000000:00000000 - 00000000:000a0000:
> RAM
> >>>>>>>>>>>>>>> (d98)  HOLE: 00000000:000a0000 - 00000000:000c0000
> >>>>>>>>>>>>>>> (d98)  [01]: 00000000:000c0000 - 00000000:00100000:
> >>>> RESERVED
> >>>>>>>>>>>>>>> (d98)  [02]: 00000000:00100000 - 00000000:78000000:
> RAM
> >>>>>>>>>>>>>>> (d98)  HOLE: 00000000:78000000 - 00000000:fc000000
> >>>>>>>>>>>>>>> (d98)  [03]: 00000000:fc000000 - 00000001:00000000:
> >> RESERVED
> >>>>>>>>>>>>>>> (d98) Invoking SeaBIOS ...
> >>>>>>>>>>>>>>> (d98) SeaBIOS (version
> >>>>>>>>>>>>>>> debian/1.7.5-1-0-g506b58d-20140603_102943-
> testVS01OU)
> >>>>>>>>>>>>>>> (d98)
> >>>>>>>>>>>>>>> (d98) Found Xen hypervisor signature at 40000100
> >>>>>>>>>>>>>>> (d98) Running on QEMU (i440fx)
> >>>>>>>>>>>>>>> (d98) xen: copy e820...
> >>>>>>>>>>>>>>> (d98) Relocating init from 0x000df619 to 0x77fae600 (size
> >>>> 71995)
> >>>>>>>>>>>>>>> (d98) CPU Mhz=2660
> >>>>>>>>>>>>>>> (d98) Found 13 PCI devices (max PCI bus is 00)
> >>>>>>>>>>>>>>> (d98) Allocated Xen hypercall page at 77fff000
> >>>>>>>>>>>>>>> (d98) Detected Xen v4.5-unstable
> >>>>>>>>>>>>>>> (d98) xen: copy BIOS tables...
> >>>>>>>>>>>>>>> (d98) Copying SMBIOS entry point from 0x00010010 to
> >>>>>> 0x000f0f40
> >>>>>>>>>>>>>>> (d98) Copying MPTABLE from 0xfc001170/fc001180 to
> >>>> 0x000f0e40
> >>>>>>>>>>>>>>> (d98) Copying PIR from 0x00010030 to 0x000f0dc0
> >>>>>>>>>>>>>>> (d98) Copying ACPI RSDP from 0x000100b0 to 0x000f0d90
> >>>>>>>>>>>>>>> (d98) Using pmtimer, ioport 0xb008
> >>>>>>>>>>>>>>> (d98) Scan for VGA option rom
> >>>>>>>>>>>>>>> (d98) Running option rom at c000:0003
> >>>>>>>>>>>>>>> (XEN) stdvga.c:147:d98v0 entering stdvga and caching
> >> modes
> >>>>>>>>>>>>>>> (d98) pmm call arg1=0
> >>>>>>>>>>>>>>> (d98) Turning on vga text mode console
> >>>>>>>>>>>>>>> (d98) SeaBIOS (version
> >>>>>>>>>>>>>>> debian/1.7.5-1-0-g506b58d-20140603_102943-
> testVS01OU)
> >>>>>>>>>>>>>>> (d98) Machine UUID f4cdeb74-0db1-4748-948d-
> >> 42579a494120
> >>>>>>>>>>>>>>> (d98) EHCI init on dev 00:1d.7 (regs=0xf9057020)
> >>>>>>>>>>>>>>> (d98) Found 0 lpt ports
> >>>>>>>>>>>>>>> (d98) Found 0 serial ports
> >>>>>>>>>>>>>>> (d98) ATA controller 1 at 1f0/3f4/0 (irq 14 dev 9)
> >>>>>>>>>>>>>>> (d98) ATA controller 2 at 170/374/0 (irq 15 dev 9)
> >>>>>>>>>>>>>>> (d98) ata0-0: QEMU HARDDISK ATA-7 Hard-Disk (40720
> >>>> MiBytes)
> >>>>>>>>>>>>>>> (d98) Searching bootorder for:
> >>>>>> /pci@i0cf8/*@1,1/drive@0/disk@0
> >>>>>>>>>>>>>>> (d98) DVD/CD [ata0-1: QEMU DVD-ROM ATAPI-4
> DVD/CD]
> >>>>>>>>>>>>>>> (d98) Searching bootorder for:
> >>>>>> /pci@i0cf8/*@1,1/drive@0/disk@1
> >>>>>>>>>>>>>>> (d98) UHCI init on dev 00:1d.0 (io=c240)
> >>>>>>>>>>>>>>> (d98) UHCI init on dev 00:1d.1 (io=c260)
> >>>>>>>>>>>>>>> (d98) UHCI init on dev 00:1d.2 (io=c280)
> >>>>>>>>>>>>>>> (d98) PS2 keyboard initialized
> >>>>>>>>>>>>>>> (d98) All threads complete.
> >>>>>>>>>>>>>>> (d98) Scan for option roms
> >>>>>>>>>>>>>>> (d98) Running option rom at c980:0003
> >>>>>>>>>>>>>>> (d98) pmm call arg1=1
> >>>>>>>>>>>>>>> (d98) pmm call arg1=0
> >>>>>>>>>>>>>>> (d98) pmm call arg1=1
> >>>>>>>>>>>>>>> (d98) pmm call arg1=0
> >>>>>>>>>>>>>>> (d98) Searching bootorder for: /pci@i0cf8/*@6
> >>>>>>>>>>>>>>> (d98)
> >>>>>>>>>>>>>>> (d98) Press F12 for boot menu.
> >>>>>>>>>>>>>>> (d98)
> >>>>>>>>>>>>>>> (d98) Searching bootorder for: HALT
> >>>>>>>>>>>>>>> (d98) drive 0x000f0d40: PCHS=16383/16/63
> translation=lba
> >>>>>>>>>>>>>>> LCHS=1024/255/63 s=83394560
> >>>>>>>>>>>>>>> (d98) Space available for UMB: ca800-ee800, f0000-f0ce0
> >>>>>>>>>>>>>>> (d98) Returned 258048 bytes of ZoneHigh
> >>>>>>>>>>>>>>> (d98) e820 map has 6 items:
> >>>>>>>>>>>>>>> (d98)   0: 0000000000000000 - 000000000009fc00 = 1 RAM
> >>>>>>>>>>>>>>> (d98)   1: 000000000009fc00 - 00000000000a0000 = 2
> >> RESERVED
> >>>>>>>>>>>>>>> (d98)   2: 00000000000f0000 - 0000000000100000 = 2
> >> RESERVED
> >>>>>>>>>>>>>>> (d98)   3: 0000000000100000 - 0000000077fff000 = 1 RAM
> >>>>>>>>>>>>>>> (d98)   4: 0000000077fff000 - 0000000078000000 = 2
> >> RESERVED
> >>>>>>>>>>>>>>> (d98)   5: 00000000fc000000 - 0000000100000000 = 2
> >> RESERVED
> >>>>>>>>>>>>>>> (d98) enter handle_19:
> >>>>>>>>>>>>>>> (d98)   NULL
> >>>>>>>>>>>>>>> (d98) Booting from Hard Disk...
> >>>>>>>>>>>>>>> (d98) Booting from 0000:7c00
> >>>>>>>>>>>>>>> (XEN) d98: VIRIDIAN GUEST_OS_ID: vendor: 1 os: 4
> major: 6
> >>>>>> minor:
> >>>>>>>> 1
> >>>>>>>>>> sp:
> >>>>>>>>>>>>>>> 1 build: 1db1
> >>>>>>>>>>>>>>> (XEN) d98: VIRIDIAN HYPERCALL: enabled: 1 pfn: 3ffff
> >>>>>>>>>>>>>>> (XEN) d98v0: VIRIDIAN APIC_ASSIST: enabled: 1 pfn:
> 3fffe
> >>>>>>>>>>>>>>> (XEN) d98v1: VIRIDIAN APIC_ASSIST: enabled: 1 pfn:
> 3fffd
> >>>>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 0 changed 5 -> 0
> >>>>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 1 changed 10 -> 0
> >>>>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 2 changed 11 -> 0
> >>>>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 3 changed 5 -> 0
> >>>>>>>>>>>>>>> (XEN) irq.c:380: Dom98 callback via changed to GSI 24
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: ====>
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 0000007A: FFFFF6FC000171C8
> >>>>>>>>>> FFFFFFFFC0000185
> >>>>>>>>>>>>>>> 000000001BD6A860 FFFF
> >>>>>>>>>>>>>>> (d98) F80002E39000
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: CONTEXT (FFFFF8800310E530):
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - GS = 002B
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - FS = 0053
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - ES = 002B
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - DS = 002B
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - SS = 0018
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - CS = 0010
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - EFLAGS = 00000086
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RDI = 00000000000171C8
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RSI = 00000000C0000185
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RBX = 00000000038AC8F8
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RDX = 0000000000000000
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RCX = 000000000310E530
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RAX = 000000002ECF4722
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RBP = 000000001BD6A860
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RIP = 00000000038A2A43
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RSP = 000000000310E510
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R8 = 0000000000000000
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R9 = 0000000000000000
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R10 = 0000000000000000
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R11 = 0000000000000000
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R12 = 000000000000007A
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R13 = 0000000000000001
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R14 = 0000000002E39000
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R15 = 0000000002CBAC40
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: STACK:
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310EA20:
> >>>> (0000000000000003
> >>>>>>>>>>>>>>> 00000000038A50F0 00000000038A
> >>>>>>>>>>>>>>> (d98) 4860 000000000000007A) xen.sys +
> 00000000000049AC
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310EA70:
> >>>> (00000000038AD0D0
> >>>>>>>>>>>>>>> 0000000000000000 000000000000
> >>>>>>>>>>>>>>> (d98) 0004 0000000002C83500) ntoskrnl.exe +
> >>>> 0000000000128585
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310EAA0:
> >>>> (00000000038AD0D0
> >>>>>>>>>>>>>>> 0000000002C83500 000000000000
> >>>>>>>>>>>>>>> (d98) 000F 0000000001780660) ntoskrnl.exe +
> >>>> 0000000000167C0D
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F170:
> >> (0000000003816470
> >>>>>>>>>>>>>>> 0000000002B4C8C1 000000000000
> >>>>>>>>>>>>>>> (d98) 00FE 0000000000000000) ntoskrnl.exe +
> >>>> 0000000000075CC4
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F1B0:
> >>>> (000000000000007A
> >>>>>>>>>>>>>>> 00000000000171C8 00000000C000
> >>>>>>>>>>>>>>> (d98) 0185 000000001BD6A860) ntoskrnl.exe +
> >>>> 00000000000E8752
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F290:
> >> (00000000038163B0
> >>>>>>>>>>>>>>> 000000000310F320 0000000002CB
> >>>>>>>>>>>>>>> (d98) D540 00000000038163B0) ntoskrnl.exe +
> >>>> 000000000009C91F
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F360:
> >> (0000000000000000
> >>>>>>>>>>>>>>> 0000000000000008 00000000FFFF
> >>>>>>>>>>>>>>> (d98) FFFF 00000000003500F0) ntoskrnl.exe +
> >>>> 00000000000831B9
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F4C0:
> >> (0000000000000008
> >>>>>>>>>>>>>>> 0000000002E39000 000000000000
> >>>>>>>>>>>>>>> (d98) 0000 0000000000000000) ntoskrnl.exe +
> >>>> 0000000000073CEE
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F658:
> >>>> (0000000002E5CFD5
> >>>>>>>>>>>>>>> 0000000000000000 0000000003EB
> >>>>>>>>>>>>>>> (d98) 8710 00000000FFFFFFFF) ntoskrnl.exe +
> >>>> 000000000042C000
> >>>>>>>>>>>>>> If you need more tests/informations tell me and I'll post
> >> them.
> >>>>>>>>>>>>>> Thanks for any reply and sorry for my bad english.
> >>>>>>>>>>>>> Well, that tells me you had a 7A BSOD, which is a
> >>>>>>>>>>>> KERNEL_DATA_INPAGE_ERROR. The error status (param 2)
> was
> >>>>>>>> C0000185
> >>>>>>>>>> so
> >>>>>>>>>>>> that's a STATUS_IO_DEVICE_ERROR. The documentation at
> >>>>>>>>>>>> http://msdn.microsoft.com/en-
> >>>>>>>>>>>> gb/library/windows/hardware/ff559211%28v=vs.85%29.aspx
> >> tells
> >>>>>> me
> >>>>>>>> that
> >>>>>>>>>>>> this means:
> >>>>>>>>>>>>> "improper termination or defective cabling on SCSI devices
> or
> >>>> that
> >>>>>>>> two
> >>>>>>>>>>>> devices are trying to use the same IRQ."
> >>>>>>>>>>>>> But you said you had xenvbd already installed so you'll be
> >> using a
> >>>>>> PV
> >>>>>>>>>>>> storage path. Is there any indication of problems with your
> >>>> storage?
> >>>>>>>>>>>>>          Paul
> >>>>>>>>>>>> DomUs disk are all raw files in local dom0 disks, raid1 with
> "LSI
> >>>> Logic
> >>>>>>>>>>>> / Symbios Logic SAS2008 PCI-Express Fusion-MPT SAS-2"
> dom0
> >>>>>>>> partitions
> >>>>>>>>>>>> are GTP and fs ext4.
> >>>>>>>>>>>> Dom0 is wheezy with kernel is linux-image-3.16-0.bpo.2-
> amd64
> >>>>>> version
> >>>>>>>>>>>> 3.16.3-2~bpo70+1
> >>>>>>>>>>>> No kern or syslog errors, only many of these warning that
> >>>> someone
> >>>>>>>>>>>> replied me that should not be a problem:
> >>>>>>>>>>>> Oct 15 10:45:13 mtorMN01OU kernel: [773197.117518]
> >>>> xen:balloon:
> >>>>>>>>>>>> reserve_additional_memory: add_memory() failed: -17
> >>>>>>>>>>>> DomU now see disk as xen pvdisk, on xenvif install probably
> still
> >>>> was
> >>>>>>>>>>>> full emulated disk even if xenvbd was installed successful
> >> before
> >>>>>> xenvif
> >>>>>>>>>>>> install (failed with BSOD)
> >>>>>>>>>>>> The IRQ seems visible from xl dmesg output below, can you
> >> check
> >>>>>>>> them is
> >>>>>>>>>>>> have something wrong or strange, I see some of them
> >> "duplicate"
> >>>>>> but I
> >>>>>>>>>>>> not know if is correct.
> >>>>>>>>>>>>
> >>>>>>>>>>>> DomU xl cfg:
> >>>>>>>>>>>>> name='office1_w7'
> >>>>>>>>>>>>> builder="hvm"
> >>>>>>>>>>>>> memory=2048
> >>>>>>>>>>>>> vcpus=2
> >>>>>>>>>>>>> acpi_s3=0
> >>>>>>>>>>>>> acpi_s4=0
> >>>>>>>>>>>>> vif=['bridge=xenbr0,mac=00:16:3e:41:ae:8b']
> >>>>>>>>>>>>>
> >>
> disk=['/mnt/vm/disks/office1_w7.disk1.xm,raw,hda,rw',',raw,hdb,ro,cdrom'
> >>>>>>>>>>>> ]
> >>>>>>>>>>>>> boot='c'
> >>>>>>>>>>>>> device_model_version="qemu-xen"
> >>>>>>>>>>>>> viridian=1
> >>>>>>>>>>>>> vnc=0
> >>>>>>>>>>>>> keymap="it"
> >>>>>>>>>>>>> on_crash="destroy"
> >>>>>>>>>>>>> vga="qxl"
> >>>>>>>>>>>>> spice=1
> >>>>>>>>>>>>> spicehost='0.0.0.0'
> >>>>>>>>>>>>> spiceport=6001
> >>>>>>>>>>>>> spicedisable_ticketing=0
> >>>>>>>>>>>>> spicepasswd="password"
> >>>>>>>>>>>>> spicevdagent=1
> >>>>>>>>>>>>> spice_clipboard_sharing=0
> >>>>>>>>>>>>> spiceusbredirection=4
> >>>>>>>>>>>>> soundhw="hda"
> >>>>>>>>>>>>> localtime=1
> >>>>>>>>>>>> If you need more tests/informations tell me and I'll post
> them.
> >>>>>>>>>>>>
> >>>>>>>>>>> Do you have the qemu log (with xen platform logging
> enabled).
> >>>> This is
> >>>>>>>>>> where the PV drivers log failures/warnings.
> >>>>>>>>>>>         Paul
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>> I retried enabling xen platform debug in qemu trace but no add
> >> lines
> >>>> in
> >>>>>>>>>> log when I try to install xenvif and fails.
> >>>>>>>>>> I attach anyway the log if can be useful.
> >>>>>>>>> All I can see there is an apparently clean shutdown of domain
> 101;
> >> no
> >>>>>> sign
> >>>>>>>> of XENVIF and no sign of a BSOD.
> >>>>>>>>>> I'll also try to restore the backup of this night of the domU
> when I
> >>>> had
> >>>>>>>>>> the BSOD trying reproduce it with xen debug in qemu trace and
> >>>>>> different
> >>>>>>>>>> windows memory dump options.
> >>>>>>>>> Ok.
> >>>>>>>>>
> >>>>>>>>>        Paul
> >>>>>>>>>
> >>>>>>>> Reproduced it but now with xen platform trace enabled in qemu.
> >> (see
> >>>>>>>> attachment)
> >>>>>>>> Dump of memory instead is not present also in this case (probably
> >>>>>>>> because disk is "failed").
> >>>>>>> You're using emulate disk in this case. Did your BSOD not indicate
> that
> >> it
> >>>>>> was dumping?
> >>>>>>>       Paul
> >>>>>>>
> >>>>>> I have to time to see if do a dump but I suppose it can't write to disk
> >>>>>> since its driver fails.
> >>>>>> Log qemu is not enough? You need the windows memory dump to
> find
> >>>> and
> >>>>>> fix
> >>>>>> the bug?
> >>>>> I don't know what the bug is. My guess is that it's a deadlock
> somewhere
> >>>> which is causing Windows to believe there's a storage issue, but since
> the
> >>>> stack is entirely in the kernel and without a crashdump I cannot decode
> to
> >>>> symbols there's not much more I can do unless I happen to repro.
> >>>>>      Paul
> >>>>>
> >>>>>> If needed tomorrow I'll do other tests.
> >>>> I retried and seems always reproducible on same domU.
> >>>> Now I disabled automatic reboot on crash and do a screenshot (in
> >>>> attachment) but memory dump is still missed :( Probably with disk
> >>>> "failed" can't write.
> >>>> Is there another way to take/save the memory dump or the data you
> >> need?
> >>> Could you remove xenvbd and make sure the emulated disk is
> functional.
> >> Then, install Xenvif and see if it BSODs.
> >>
> >> Now I tried to install xenvif without install xenvbd and installation is
> >> ok, after I installed xennet (ok), xenvbd (ok) and xeniface but on this
> >> latest same blue screen.
> >> I can (and I must try) install all except xenvbd?
> >> I also attached the new test's qemu log.
> > You obviously have not rebooted yet. Try installing everything except
> xenvbd. Reboot. Then install xenvbd and reboot. Any hand over from an
> emulated device to a PV device requires a reboot.
> >
> >    Paul
> 
> Yes, I know that pvdrivers installation require reboot but the crash was
> before finish install all them and reboot.
> Now I install all other 4 component (not xenvbd), rebooted, installed
> xenvbd and rebooted and no crash happen for now.
> I suppose that this is only a workaround and one or more cases of disk
> crash can still happen, or I'm wrong?

Ok, it's good that the crash now stops. It seems to me then the, for some reason, having xenvbd present but inactive (due to emulated disks still being present until after reboot) is causing the problem.

> What I can do to verify if can still crash in some cases?
> 

I don't think there's much point in you trying to repro unless you can successfully get a memory.dmp as there's little more I'm going to be able to figure out without one. OTOH I probably have enough idea about what's happening to try to repro this myself now.

  Paul

> Thanks for any reply.
> 
> >>>> About IRQ you checked in xl dmesg I posted if are all ok?
> >>>>
> >>> Yes, I don't think there's a problem there.
> >>>
> >>>     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 Fri Oct 17 13:20:59 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 17 Oct 2014 13:20: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 1Xf7Sl-00026T-4L; Fri, 17 Oct 2014 13:20:59 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <Paul.Durrant@citrix.com>) id 1Xf7Sk-00026O-2m
	for win-pv-devel@lists.xenproject.org; Fri, 17 Oct 2014 13:20:58 +0000
Received: from [85.158.137.68:45268] by server-5.bemta-3.messagelabs.com id
	6C/25-30889-9B711445; Fri, 17 Oct 2014 13:20:57 +0000
X-Env-Sender: Paul.Durrant@citrix.com
X-Msg-Ref: server-15.tower-31.messagelabs.com!1413552055!11229980!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: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 5365 invoked from network); 17 Oct 2014 13:20:56 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-15.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	17 Oct 2014 13:20:56 -0000
X-IronPort-AV: E=Sophos;i="5.04,739,1406592000"; d="scan'208";a="26043222"
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: [win-pv-devel] Blue screen on xenvif install
Thread-Index: AQHP6R88TE2eCcEtSU6laq0K5grY5pwybJlQ///obQCAACb2gP//8KIAgAAjAsCAAAnUgIAAIsDw///v2YAABHezEP//4XCA///QCHCAAWc2gP//3DXAgAA7NgD//84M0AAKPl6A///YicA=
Date: Fri, 17 Oct 2014 13:20:55 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD011106987@AMSPEX01CL01.citrite.net>
References: <543F887B.5030500@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111050FF@AMSPEX01CL01.citrite.net>
	<543F912C.8000504@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD01110526F@AMSPEX01CL01.citrite.net>
	<543FA4F6.5090804@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111053EA@AMSPEX01CL01.citrite.net>
	<543FCA93.2010805@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111057A2@AMSPEX01CL01.citrite.net>
	<543FDA2D.2090900@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD0111058E6@AMSPEX01CL01.citrite.net>
	<543FDE85.1030908@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD011105A08@AMSPEX01CL01.citrite.net>
	<5440E39B.6080104@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD01110668E@AMSPEX01CL01.citrite.net>
	<5440F740.4070701@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD011106840@AMSPEX01CL01.citrite.net>
	<54411217.4090806@m2r.biz>
In-Reply-To: <54411217.4090806@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] Blue screen on xenvif install
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: 17 October 2014 13:57
> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> Subject: Re: [win-pv-devel] Blue screen on xenvif install
> 
> Il 17/10/2014 14:02, Paul Durrant ha scritto:
> >> -----Original Message-----
> >> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >> Sent: 17 October 2014 12:02
> >> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >> Subject: Re: [win-pv-devel] Blue screen on xenvif install
> >>
> >> Il 17/10/2014 11:48, Paul Durrant ha scritto:
> >>>> -----Original Message-----
> >>>> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-
> devel-
> >>>> bounces@lists.xenproject.org] On Behalf Of Fabio Fantoni
> >>>> Sent: 17 October 2014 10:39
> >>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >>>> Subject: Re: [win-pv-devel] Blue screen on xenvif install
> >>>>
> >>>> Il 16/10/2014 17:58, Paul Durrant ha scritto:
> >>>>>> -----Original Message-----
> >>>>>> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-
> >> devel-
> >>>>>> bounces@lists.xenproject.org] On Behalf Of Fabio Fantoni
> >>>>>> Sent: 16 October 2014 16:05
> >>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >>>>>> Subject: Re: [win-pv-devel] Blue screen on xenvif install
> >>>>>>
> >>>>>> Il 16/10/2014 16:54, Paul Durrant ha scritto:
> >>>>>>>> -----Original Message-----
> >>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >>>>>>>> Sent: 16 October 2014 15:46
> >>>>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >>>>>>>> Subject: Re: Blue screen on xenvif install
> >>>>>>>>
> >>>>>>>> Il 16/10/2014 15:45, Paul Durrant ha scritto:
> >>>>>>>>>> -----Original Message-----
> >>>>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >>>>>>>>>> Sent: 16 October 2014 14:40
> >>>>>>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >>>>>>>>>> Subject: Re: Blue screen on xenvif install
> >>>>>>>>>>
> >>>>>>>>>> Il 16/10/2014 13:04, Paul Durrant ha scritto:
> >>>>>>>>>>>> -----Original Message-----
> >>>>>>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >>>>>>>>>>>> Sent: 16 October 2014 11:59
> >>>>>>>>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >>>>>>>>>>>> Subject: Re: Blue screen on xenvif install
> >>>>>>>>>>>>
> >>>>>>>>>>>> Il 16/10/2014 12:00, Paul Durrant ha scritto:
> >>>>>>>>>>>>>> -----Original Message-----
> >>>>>>>>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >>>>>>>>>>>>>> Sent: 16 October 2014 10:35
> >>>>>>>>>>>>>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> >>>>>>>>>>>>>> Subject: Re: Blue screen on xenvif install
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> Il 16/10/2014 10:59, Paul Durrant ha scritto:
> >>>>>>>>>>>>>>>> -----Original Message-----
> >>>>>>>>>>>>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> >>>>>>>>>>>>>>>> Sent: 16 October 2014 09:58
> >>>>>>>>>>>>>>>> To: win-pv-devel@lists.xenproject.org
> >>>>>>>>>>>>>>>> Cc: Paul Durrant
> >>>>>>>>>>>>>>>> Subject: Blue screen on xenvif install
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> Today I tried to install new winpv driver to other 3
> >> windows 7
> >>>>>> pro
> >>>>>>>> 64
> >>>>>>>>>>>>>>>> bit domUs.
> >>>>>>>>>>>>>>>> Days ago I installed them successful on one windows 7
> pro
> >> 64
> >>>>>> bit
> >>>>>>>> and
> >>>>>>>>>>>> one
> >>>>>>>>>>>>>>>> windows 8.1 enterprise 64 bit.
> >>>>>>>>>>>>>>>> On first domUs I tried to install them today I installed
> >> xenbus
> >>>>>> and
> >>>>>>>>>>>>>>>> xenvbd successful but on xenvif install windows
> crashed
> >>>> with
> >>>>>> blue
> >>>>>>>>>>>>>>>> screen, if I saw it correctly was an kernel in-page error
> or
> >>>>>>>> something
> >>>>>>>>>>>>>>>> similar.
> >>>>>>>>>>>>>>>> After reboot I retried to install xenvif but now always
> fails.
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> Sounds odd. Do you have a MEMORY.DMP?
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>           Paul
> >>>>>>>>>>>>>> Windows is setted to write dump of kernel memory on
> >> system
> >>>>>> error
> >>>>>>>>>> but
> >>>>>>>>>>>>>> %systemroot%\memory.dmp is missed :(
> >>>>>>>>>>>>>> I also checked the windows events log but I found only
> >> kernel-
> >>>>>>>> power
> >>>>>>>>>> as
> >>>>>>>>>>>>>> critical that seems not contains useful data.
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> I found probably useful data in xl dmesg (I copied all
> below
> >>>> from
> >>>>>>>> domU
> >>>>>>>>>>>>>> start to xen bug):
> >>>>>>>>>>>>>>> (d98) HVM Loader
> >>>>>>>>>>>>>>> (d98) Detected Xen v4.5-unstable
> >>>>>>>>>>>>>>> (d98) Xenbus rings @0xfeffc000, event channel 1
> >>>>>>>>>>>>>>> (d98) System requested SeaBIOS
> >>>>>>>>>>>>>>> (d98) CPU speed is 2660 MHz
> >>>>>>>>>>>>>>> (d98) Relocating guest memory for lowmem MMIO
> space
> >>>>>> disabled
> >>>>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 0 changed 0 -> 5
> >>>>>>>>>>>>>>> (d98) PCI-ISA link 0 routed to IRQ5
> >>>>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 1 changed 0 -> 10
> >>>>>>>>>>>>>>> (d98) PCI-ISA link 1 routed to IRQ10
> >>>>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 2 changed 0 -> 11
> >>>>>>>>>>>>>>> (d98) PCI-ISA link 2 routed to IRQ11
> >>>>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 3 changed 0 -> 5
> >>>>>>>>>>>>>>> (d98) PCI-ISA link 3 routed to IRQ5
> >>>>>>>>>>>>>>> (d98) pci dev 01:3 INTA->IRQ10
> >>>>>>>>>>>>>>> (d98) pci dev 02:0 INTA->IRQ11
> >>>>>>>>>>>>>>> (d98) pci dev 03:0 INTA->IRQ5
> >>>>>>>>>>>>>>> (d98) pci dev 04:0 INTA->IRQ5
> >>>>>>>>>>>>>>> (d98) pci dev 05:0 INTA->IRQ10
> >>>>>>>>>>>>>>> (d98) pci dev 06:0 INTA->IRQ11
> >>>>>>>>>>>>>>> (d98) pci dev 1d:0 INTA->IRQ10
> >>>>>>>>>>>>>>> (d98) pci dev 1d:1 INTB->IRQ11
> >>>>>>>>>>>>>>> (d98) pci dev 1d:2 INTC->IRQ5
> >>>>>>>>>>>>>>> (d98) pci dev 1d:7 INTD->IRQ5
> >>>>>>>>>>>>>>> (d98) No RAM in high memory; setting high_mem
> resource
> >>>> base
> >>>>>> to
> >>>>>>>>>>>>>> 100000000
> >>>>>>>>>>>>>>> (d98) pci dev 05:0 bar 10 size 004000000: 0f0000000
> >>>>>>>>>>>>>>> (d98) pci dev 05:0 bar 14 size 004000000: 0f4000000
> >>>>>>>>>>>>>>> (d98) pci dev 02:0 bar 14 size 001000000: 0f8000008
> >>>>>>>>>>>>>>> (d98) pci dev 06:0 bar 30 size 000040000: 0f9000000
> >>>>>>>>>>>>>>> (d98) pci dev 05:0 bar 30 size 000010000: 0f9040000
> >>>>>>>>>>>>>>> (d98) pci dev 03:0 bar 10 size 000004000: 0f9050000
> >>>>>>>>>>>>>>> (d98) pci dev 05:0 bar 18 size 000002000: 0f9054000
> >>>>>>>>>>>>>>> (d98) pci dev 04:0 bar 14 size 000001000: 0f9056000
> >>>>>>>>>>>>>>> (d98) pci dev 1d:7 bar 10 size 000001000: 0f9057000
> >>>>>>>>>>>>>>> (d98) pci dev 02:0 bar 10 size 000000100: 00000c001
> >>>>>>>>>>>>>>> (d98) pci dev 06:0 bar 10 size 000000100: 00000c101
> >>>>>>>>>>>>>>> (d98) pci dev 06:0 bar 14 size 000000100: 0f9058000
> >>>>>>>>>>>>>>> (d98) pci dev 04:0 bar 10 size 000000020: 00000c201
> >>>>>>>>>>>>>>> (d98) pci dev 05:0 bar 1c size 000000020: 00000c221
> >>>>>>>>>>>>>>> (d98) pci dev 1d:0 bar 20 size 000000020: 00000c241
> >>>>>>>>>>>>>>> (d98) pci dev 1d:1 bar 20 size 000000020: 00000c261
> >>>>>>>>>>>>>>> (d98) pci dev 1d:2 bar 20 size 000000020: 00000c281
> >>>>>>>>>>>>>>> (d98) pci dev 01:1 bar 20 size 000000010: 00000c2a1
> >>>>>>>>>>>>>>> (d98) Multiprocessor initialisation:
> >>>>>>>>>>>>>>> (d98)  - CPU0 ... 36-bit phys ... fixed MTRRs ... var MTRRs
> >> [1/8]
> >>>> ...
> >>>>>>>>>>>>>>> done.
> >>>>>>>>>>>>>>> (d98)  - CPU1 ... 36-bit phys ... fixed MTRRs ... var MTRRs
> >> [1/8]
> >>>> ...
> >>>>>>>>>>>>>>> done.
> >>>>>>>>>>>>>>> (d98) Testing HVM environment:
> >>>>>>>>>>>>>>> (d98)  - REP INSB across page boundaries ... passed
> >>>>>>>>>>>>>>> (d98)  - GS base MSRs and SWAPGS ... passed
> >>>>>>>>>>>>>>> (d98) Passed 2 of 2 tests
> >>>>>>>>>>>>>>> (d98) Writing SMBIOS tables ...
> >>>>>>>>>>>>>>> (d98) Loading SeaBIOS ...
> >>>>>>>>>>>>>>> (d98) Creating MP tables ...
> >>>>>>>>>>>>>>> (d98) Loading ACPI ...
> >>>>>>>>>>>>>>> (d98) S3 disabled
> >>>>>>>>>>>>>>> (d98) S4 disabled
> >>>>>>>>>>>>>>> (d98) vm86 TSS at fc00a100
> >>>>>>>>>>>>>>> (d98) BIOS map:
> >>>>>>>>>>>>>>> (d98)  10000-100d3: Scratch space
> >>>>>>>>>>>>>>> (d98)  c0000-fffff: Main BIOS
> >>>>>>>>>>>>>>> (d98) E820 table:
> >>>>>>>>>>>>>>> (d98)  [00]: 00000000:00000000 - 00000000:000a0000:
> RAM
> >>>>>>>>>>>>>>> (d98)  HOLE: 00000000:000a0000 - 00000000:000c0000
> >>>>>>>>>>>>>>> (d98)  [01]: 00000000:000c0000 - 00000000:00100000:
> >>>> RESERVED
> >>>>>>>>>>>>>>> (d98)  [02]: 00000000:00100000 - 00000000:78000000:
> RAM
> >>>>>>>>>>>>>>> (d98)  HOLE: 00000000:78000000 - 00000000:fc000000
> >>>>>>>>>>>>>>> (d98)  [03]: 00000000:fc000000 - 00000001:00000000:
> >> RESERVED
> >>>>>>>>>>>>>>> (d98) Invoking SeaBIOS ...
> >>>>>>>>>>>>>>> (d98) SeaBIOS (version
> >>>>>>>>>>>>>>> debian/1.7.5-1-0-g506b58d-20140603_102943-
> testVS01OU)
> >>>>>>>>>>>>>>> (d98)
> >>>>>>>>>>>>>>> (d98) Found Xen hypervisor signature at 40000100
> >>>>>>>>>>>>>>> (d98) Running on QEMU (i440fx)
> >>>>>>>>>>>>>>> (d98) xen: copy e820...
> >>>>>>>>>>>>>>> (d98) Relocating init from 0x000df619 to 0x77fae600 (size
> >>>> 71995)
> >>>>>>>>>>>>>>> (d98) CPU Mhz=2660
> >>>>>>>>>>>>>>> (d98) Found 13 PCI devices (max PCI bus is 00)
> >>>>>>>>>>>>>>> (d98) Allocated Xen hypercall page at 77fff000
> >>>>>>>>>>>>>>> (d98) Detected Xen v4.5-unstable
> >>>>>>>>>>>>>>> (d98) xen: copy BIOS tables...
> >>>>>>>>>>>>>>> (d98) Copying SMBIOS entry point from 0x00010010 to
> >>>>>> 0x000f0f40
> >>>>>>>>>>>>>>> (d98) Copying MPTABLE from 0xfc001170/fc001180 to
> >>>> 0x000f0e40
> >>>>>>>>>>>>>>> (d98) Copying PIR from 0x00010030 to 0x000f0dc0
> >>>>>>>>>>>>>>> (d98) Copying ACPI RSDP from 0x000100b0 to 0x000f0d90
> >>>>>>>>>>>>>>> (d98) Using pmtimer, ioport 0xb008
> >>>>>>>>>>>>>>> (d98) Scan for VGA option rom
> >>>>>>>>>>>>>>> (d98) Running option rom at c000:0003
> >>>>>>>>>>>>>>> (XEN) stdvga.c:147:d98v0 entering stdvga and caching
> >> modes
> >>>>>>>>>>>>>>> (d98) pmm call arg1=0
> >>>>>>>>>>>>>>> (d98) Turning on vga text mode console
> >>>>>>>>>>>>>>> (d98) SeaBIOS (version
> >>>>>>>>>>>>>>> debian/1.7.5-1-0-g506b58d-20140603_102943-
> testVS01OU)
> >>>>>>>>>>>>>>> (d98) Machine UUID f4cdeb74-0db1-4748-948d-
> >> 42579a494120
> >>>>>>>>>>>>>>> (d98) EHCI init on dev 00:1d.7 (regs=0xf9057020)
> >>>>>>>>>>>>>>> (d98) Found 0 lpt ports
> >>>>>>>>>>>>>>> (d98) Found 0 serial ports
> >>>>>>>>>>>>>>> (d98) ATA controller 1 at 1f0/3f4/0 (irq 14 dev 9)
> >>>>>>>>>>>>>>> (d98) ATA controller 2 at 170/374/0 (irq 15 dev 9)
> >>>>>>>>>>>>>>> (d98) ata0-0: QEMU HARDDISK ATA-7 Hard-Disk (40720
> >>>> MiBytes)
> >>>>>>>>>>>>>>> (d98) Searching bootorder for:
> >>>>>> /pci@i0cf8/*@1,1/drive@0/disk@0
> >>>>>>>>>>>>>>> (d98) DVD/CD [ata0-1: QEMU DVD-ROM ATAPI-4
> DVD/CD]
> >>>>>>>>>>>>>>> (d98) Searching bootorder for:
> >>>>>> /pci@i0cf8/*@1,1/drive@0/disk@1
> >>>>>>>>>>>>>>> (d98) UHCI init on dev 00:1d.0 (io=c240)
> >>>>>>>>>>>>>>> (d98) UHCI init on dev 00:1d.1 (io=c260)
> >>>>>>>>>>>>>>> (d98) UHCI init on dev 00:1d.2 (io=c280)
> >>>>>>>>>>>>>>> (d98) PS2 keyboard initialized
> >>>>>>>>>>>>>>> (d98) All threads complete.
> >>>>>>>>>>>>>>> (d98) Scan for option roms
> >>>>>>>>>>>>>>> (d98) Running option rom at c980:0003
> >>>>>>>>>>>>>>> (d98) pmm call arg1=1
> >>>>>>>>>>>>>>> (d98) pmm call arg1=0
> >>>>>>>>>>>>>>> (d98) pmm call arg1=1
> >>>>>>>>>>>>>>> (d98) pmm call arg1=0
> >>>>>>>>>>>>>>> (d98) Searching bootorder for: /pci@i0cf8/*@6
> >>>>>>>>>>>>>>> (d98)
> >>>>>>>>>>>>>>> (d98) Press F12 for boot menu.
> >>>>>>>>>>>>>>> (d98)
> >>>>>>>>>>>>>>> (d98) Searching bootorder for: HALT
> >>>>>>>>>>>>>>> (d98) drive 0x000f0d40: PCHS=16383/16/63
> translation=lba
> >>>>>>>>>>>>>>> LCHS=1024/255/63 s=83394560
> >>>>>>>>>>>>>>> (d98) Space available for UMB: ca800-ee800, f0000-f0ce0
> >>>>>>>>>>>>>>> (d98) Returned 258048 bytes of ZoneHigh
> >>>>>>>>>>>>>>> (d98) e820 map has 6 items:
> >>>>>>>>>>>>>>> (d98)   0: 0000000000000000 - 000000000009fc00 = 1 RAM
> >>>>>>>>>>>>>>> (d98)   1: 000000000009fc00 - 00000000000a0000 = 2
> >> RESERVED
> >>>>>>>>>>>>>>> (d98)   2: 00000000000f0000 - 0000000000100000 = 2
> >> RESERVED
> >>>>>>>>>>>>>>> (d98)   3: 0000000000100000 - 0000000077fff000 = 1 RAM
> >>>>>>>>>>>>>>> (d98)   4: 0000000077fff000 - 0000000078000000 = 2
> >> RESERVED
> >>>>>>>>>>>>>>> (d98)   5: 00000000fc000000 - 0000000100000000 = 2
> >> RESERVED
> >>>>>>>>>>>>>>> (d98) enter handle_19:
> >>>>>>>>>>>>>>> (d98)   NULL
> >>>>>>>>>>>>>>> (d98) Booting from Hard Disk...
> >>>>>>>>>>>>>>> (d98) Booting from 0000:7c00
> >>>>>>>>>>>>>>> (XEN) d98: VIRIDIAN GUEST_OS_ID: vendor: 1 os: 4
> major: 6
> >>>>>> minor:
> >>>>>>>> 1
> >>>>>>>>>> sp:
> >>>>>>>>>>>>>>> 1 build: 1db1
> >>>>>>>>>>>>>>> (XEN) d98: VIRIDIAN HYPERCALL: enabled: 1 pfn: 3ffff
> >>>>>>>>>>>>>>> (XEN) d98v0: VIRIDIAN APIC_ASSIST: enabled: 1 pfn:
> 3fffe
> >>>>>>>>>>>>>>> (XEN) d98v1: VIRIDIAN APIC_ASSIST: enabled: 1 pfn:
> 3fffd
> >>>>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 0 changed 5 -> 0
> >>>>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 1 changed 10 -> 0
> >>>>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 2 changed 11 -> 0
> >>>>>>>>>>>>>>> (XEN) irq.c:270: Dom98 PCI link 3 changed 5 -> 0
> >>>>>>>>>>>>>>> (XEN) irq.c:380: Dom98 callback via changed to GSI 24
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: ====>
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 0000007A: FFFFF6FC000171C8
> >>>>>>>>>> FFFFFFFFC0000185
> >>>>>>>>>>>>>>> 000000001BD6A860 FFFF
> >>>>>>>>>>>>>>> (d98) F80002E39000
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: CONTEXT (FFFFF8800310E530):
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - GS = 002B
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - FS = 0053
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - ES = 002B
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - DS = 002B
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - SS = 0018
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - CS = 0010
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - EFLAGS = 00000086
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RDI = 00000000000171C8
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RSI = 00000000C0000185
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RBX = 00000000038AC8F8
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RDX = 0000000000000000
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RCX = 000000000310E530
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RAX = 000000002ECF4722
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RBP = 000000001BD6A860
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RIP = 00000000038A2A43
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - RSP = 000000000310E510
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R8 = 0000000000000000
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R9 = 0000000000000000
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R10 = 0000000000000000
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R11 = 0000000000000000
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R12 = 000000000000007A
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R13 = 0000000000000001
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R14 = 0000000002E39000
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: - R15 = 0000000002CBAC40
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: STACK:
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310EA20:
> >>>> (0000000000000003
> >>>>>>>>>>>>>>> 00000000038A50F0 00000000038A
> >>>>>>>>>>>>>>> (d98) 4860 000000000000007A) xen.sys +
> 00000000000049AC
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310EA70:
> >>>> (00000000038AD0D0
> >>>>>>>>>>>>>>> 0000000000000000 000000000000
> >>>>>>>>>>>>>>> (d98) 0004 0000000002C83500) ntoskrnl.exe +
> >>>> 0000000000128585
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310EAA0:
> >>>> (00000000038AD0D0
> >>>>>>>>>>>>>>> 0000000002C83500 000000000000
> >>>>>>>>>>>>>>> (d98) 000F 0000000001780660) ntoskrnl.exe +
> >>>> 0000000000167C0D
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F170:
> >> (0000000003816470
> >>>>>>>>>>>>>>> 0000000002B4C8C1 000000000000
> >>>>>>>>>>>>>>> (d98) 00FE 0000000000000000) ntoskrnl.exe +
> >>>> 0000000000075CC4
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F1B0:
> >>>> (000000000000007A
> >>>>>>>>>>>>>>> 00000000000171C8 00000000C000
> >>>>>>>>>>>>>>> (d98) 0185 000000001BD6A860) ntoskrnl.exe +
> >>>> 00000000000E8752
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F290:
> >> (00000000038163B0
> >>>>>>>>>>>>>>> 000000000310F320 0000000002CB
> >>>>>>>>>>>>>>> (d98) D540 00000000038163B0) ntoskrnl.exe +
> >>>> 000000000009C91F
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F360:
> >> (0000000000000000
> >>>>>>>>>>>>>>> 0000000000000008 00000000FFFF
> >>>>>>>>>>>>>>> (d98) FFFF 00000000003500F0) ntoskrnl.exe +
> >>>> 00000000000831B9
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F4C0:
> >> (0000000000000008
> >>>>>>>>>>>>>>> 0000000002E39000 000000000000
> >>>>>>>>>>>>>>> (d98) 0000 0000000000000000) ntoskrnl.exe +
> >>>> 0000000000073CEE
> >>>>>>>>>>>>>>> (d98) XEN|BUGCHECK: 000000000310F658:
> >>>> (0000000002E5CFD5
> >>>>>>>>>>>>>>> 0000000000000000 0000000003EB
> >>>>>>>>>>>>>>> (d98) 8710 00000000FFFFFFFF) ntoskrnl.exe +
> >>>> 000000000042C000
> >>>>>>>>>>>>>> If you need more tests/informations tell me and I'll post
> >> them.
> >>>>>>>>>>>>>> Thanks for any reply and sorry for my bad english.
> >>>>>>>>>>>>> Well, that tells me you had a 7A BSOD, which is a
> >>>>>>>>>>>> KERNEL_DATA_INPAGE_ERROR. The error status (param 2)
> was
> >>>>>>>> C0000185
> >>>>>>>>>> so
> >>>>>>>>>>>> that's a STATUS_IO_DEVICE_ERROR. The documentation at
> >>>>>>>>>>>> http://msdn.microsoft.com/en-
> >>>>>>>>>>>> gb/library/windows/hardware/ff559211%28v=vs.85%29.aspx
> >> tells
> >>>>>> me
> >>>>>>>> that
> >>>>>>>>>>>> this means:
> >>>>>>>>>>>>> "improper termination or defective cabling on SCSI devices
> or
> >>>> that
> >>>>>>>> two
> >>>>>>>>>>>> devices are trying to use the same IRQ."
> >>>>>>>>>>>>> But you said you had xenvbd already installed so you'll be
> >> using a
> >>>>>> PV
> >>>>>>>>>>>> storage path. Is there any indication of problems with your
> >>>> storage?
> >>>>>>>>>>>>>          Paul
> >>>>>>>>>>>> DomUs disk are all raw files in local dom0 disks, raid1 with
> "LSI
> >>>> Logic
> >>>>>>>>>>>> / Symbios Logic SAS2008 PCI-Express Fusion-MPT SAS-2"
> dom0
> >>>>>>>> partitions
> >>>>>>>>>>>> are GTP and fs ext4.
> >>>>>>>>>>>> Dom0 is wheezy with kernel is linux-image-3.16-0.bpo.2-
> amd64
> >>>>>> version
> >>>>>>>>>>>> 3.16.3-2~bpo70+1
> >>>>>>>>>>>> No kern or syslog errors, only many of these warning that
> >>>> someone
> >>>>>>>>>>>> replied me that should not be a problem:
> >>>>>>>>>>>> Oct 15 10:45:13 mtorMN01OU kernel: [773197.117518]
> >>>> xen:balloon:
> >>>>>>>>>>>> reserve_additional_memory: add_memory() failed: -17
> >>>>>>>>>>>> DomU now see disk as xen pvdisk, on xenvif install probably
> still
> >>>> was
> >>>>>>>>>>>> full emulated disk even if xenvbd was installed successful
> >> before
> >>>>>> xenvif
> >>>>>>>>>>>> install (failed with BSOD)
> >>>>>>>>>>>> The IRQ seems visible from xl dmesg output below, can you
> >> check
> >>>>>>>> them is
> >>>>>>>>>>>> have something wrong or strange, I see some of them
> >> "duplicate"
> >>>>>> but I
> >>>>>>>>>>>> not know if is correct.
> >>>>>>>>>>>>
> >>>>>>>>>>>> DomU xl cfg:
> >>>>>>>>>>>>> name='office1_w7'
> >>>>>>>>>>>>> builder="hvm"
> >>>>>>>>>>>>> memory=2048
> >>>>>>>>>>>>> vcpus=2
> >>>>>>>>>>>>> acpi_s3=0
> >>>>>>>>>>>>> acpi_s4=0
> >>>>>>>>>>>>> vif=['bridge=xenbr0,mac=00:16:3e:41:ae:8b']
> >>>>>>>>>>>>>
> >>
> disk=['/mnt/vm/disks/office1_w7.disk1.xm,raw,hda,rw',',raw,hdb,ro,cdrom'
> >>>>>>>>>>>> ]
> >>>>>>>>>>>>> boot='c'
> >>>>>>>>>>>>> device_model_version="qemu-xen"
> >>>>>>>>>>>>> viridian=1
> >>>>>>>>>>>>> vnc=0
> >>>>>>>>>>>>> keymap="it"
> >>>>>>>>>>>>> on_crash="destroy"
> >>>>>>>>>>>>> vga="qxl"
> >>>>>>>>>>>>> spice=1
> >>>>>>>>>>>>> spicehost='0.0.0.0'
> >>>>>>>>>>>>> spiceport=6001
> >>>>>>>>>>>>> spicedisable_ticketing=0
> >>>>>>>>>>>>> spicepasswd="password"
> >>>>>>>>>>>>> spicevdagent=1
> >>>>>>>>>>>>> spice_clipboard_sharing=0
> >>>>>>>>>>>>> spiceusbredirection=4
> >>>>>>>>>>>>> soundhw="hda"
> >>>>>>>>>>>>> localtime=1
> >>>>>>>>>>>> If you need more tests/informations tell me and I'll post
> them.
> >>>>>>>>>>>>
> >>>>>>>>>>> Do you have the qemu log (with xen platform logging
> enabled).
> >>>> This is
> >>>>>>>>>> where the PV drivers log failures/warnings.
> >>>>>>>>>>>         Paul
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>> I retried enabling xen platform debug in qemu trace but no add
> >> lines
> >>>> in
> >>>>>>>>>> log when I try to install xenvif and fails.
> >>>>>>>>>> I attach anyway the log if can be useful.
> >>>>>>>>> All I can see there is an apparently clean shutdown of domain
> 101;
> >> no
> >>>>>> sign
> >>>>>>>> of XENVIF and no sign of a BSOD.
> >>>>>>>>>> I'll also try to restore the backup of this night of the domU
> when I
> >>>> had
> >>>>>>>>>> the BSOD trying reproduce it with xen debug in qemu trace and
> >>>>>> different
> >>>>>>>>>> windows memory dump options.
> >>>>>>>>> Ok.
> >>>>>>>>>
> >>>>>>>>>        Paul
> >>>>>>>>>
> >>>>>>>> Reproduced it but now with xen platform trace enabled in qemu.
> >> (see
> >>>>>>>> attachment)
> >>>>>>>> Dump of memory instead is not present also in this case (probably
> >>>>>>>> because disk is "failed").
> >>>>>>> You're using emulate disk in this case. Did your BSOD not indicate
> that
> >> it
> >>>>>> was dumping?
> >>>>>>>       Paul
> >>>>>>>
> >>>>>> I have to time to see if do a dump but I suppose it can't write to disk
> >>>>>> since its driver fails.
> >>>>>> Log qemu is not enough? You need the windows memory dump to
> find
> >>>> and
> >>>>>> fix
> >>>>>> the bug?
> >>>>> I don't know what the bug is. My guess is that it's a deadlock
> somewhere
> >>>> which is causing Windows to believe there's a storage issue, but since
> the
> >>>> stack is entirely in the kernel and without a crashdump I cannot decode
> to
> >>>> symbols there's not much more I can do unless I happen to repro.
> >>>>>      Paul
> >>>>>
> >>>>>> If needed tomorrow I'll do other tests.
> >>>> I retried and seems always reproducible on same domU.
> >>>> Now I disabled automatic reboot on crash and do a screenshot (in
> >>>> attachment) but memory dump is still missed :( Probably with disk
> >>>> "failed" can't write.
> >>>> Is there another way to take/save the memory dump or the data you
> >> need?
> >>> Could you remove xenvbd and make sure the emulated disk is
> functional.
> >> Then, install Xenvif and see if it BSODs.
> >>
> >> Now I tried to install xenvif without install xenvbd and installation is
> >> ok, after I installed xennet (ok), xenvbd (ok) and xeniface but on this
> >> latest same blue screen.
> >> I can (and I must try) install all except xenvbd?
> >> I also attached the new test's qemu log.
> > You obviously have not rebooted yet. Try installing everything except
> xenvbd. Reboot. Then install xenvbd and reboot. Any hand over from an
> emulated device to a PV device requires a reboot.
> >
> >    Paul
> 
> Yes, I know that pvdrivers installation require reboot but the crash was
> before finish install all them and reboot.
> Now I install all other 4 component (not xenvbd), rebooted, installed
> xenvbd and rebooted and no crash happen for now.
> I suppose that this is only a workaround and one or more cases of disk
> crash can still happen, or I'm wrong?

Ok, it's good that the crash now stops. It seems to me then the, for some reason, having xenvbd present but inactive (due to emulated disks still being present until after reboot) is causing the problem.

> What I can do to verify if can still crash in some cases?
> 

I don't think there's much point in you trying to repro unless you can successfully get a memory.dmp as there's little more I'm going to be able to figure out without one. OTOH I probably have enough idea about what's happening to try to repro this myself now.

  Paul

> Thanks for any reply.
> 
> >>>> About IRQ you checked in xl dmesg I posted if are all ok?
> >>>>
> >>> Yes, I don't think there's a problem there.
> >>>
> >>>     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 Oct 20 11:12:05 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 20 Oct 2014 11:12:05 +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 1XgAsf-0008GY-EQ; Mon, 20 Oct 2014 11:12:05 +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 1XgAse-0008G9-AD; Mon, 20 Oct 2014 11:12:04 +0000
Received: from [85.158.139.211] by server-17.bemta-5.messagelabs.com id
	D2/60-02704-30EE4445; Mon, 20 Oct 2014 11:12:03 +0000
X-Env-Sender: lars.kurth.xen@gmail.com
X-Msg-Ref: server-9.tower-206.messagelabs.com!1413803522!10815593!1
X-Originating-IP: [209.85.212.176]
X-SpamReason: No, hits=0.3 required=7.0 tests=HTML_60_70,HTML_MESSAGE
X-StarScan-Received: 
X-StarScan-Version: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 27705 invoked from network); 20 Oct 2014 11:12:02 -0000
Received: from mail-wi0-f176.google.com (HELO mail-wi0-f176.google.com)
	(209.85.212.176)
	by server-9.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	20 Oct 2014 11:12:02 -0000
Received: by mail-wi0-f176.google.com with SMTP id hi2so6781058wib.3
	for <multiple recipients>; Mon, 20 Oct 2014 04:12:02 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:content-type:subject:message-id:date:to:mime-version;
	bh=uHNNr+fTjHRVlRgCIBIV7tDeYkWN+AgcBrK/uOyc6zw=;
	b=uHHGdb2ypw+dLhk0JorAAI0shz96Zz0FmZf1UWoxNRpQ4gr60uIhyed2TVAAizLf0+
	NpgMXJP8uiODJKY1YFARWdfdT/kZpCnTy0m/hjuE9Ox7igTHxIV4HEy2qSLi4eIAx0ZX
	ydWT0WIckxRkJHFeA0yJD37l229IqPcWIl8Wfv75q9Ty9MYmuMEXSADm1EyaT11JwCSC
	YJv9/dXduXvMPxcOrP6SM2mLwP0qWx05rfxROF36ljQT0diUEcyboIZtQ/ehSYPsISz6
	nJnFHxRlE7cVl5GMbOs9QA2HaT/xbZbnWZQ5UQXJc+ljcmmxo3BjGrKUcrfQ/yA3VveI
	sZ8Q==
X-Received: by 10.180.91.234 with SMTP id ch10mr19433763wib.60.1413803521959; 
	Mon, 20 Oct 2014 04:12:01 -0700 (PDT)
Received: from [192.168.0.25] (97e553ce.skybroadband.com. [151.229.83.206])
	by mx.google.com with ESMTPSA id
	kw2sm11494293wjb.34.2014.10.20.04.11.59 for <multiple recipients>
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Mon, 20 Oct 2014 04:12:01 -0700 (PDT)
From: Lars Kurth <lars.kurth.xen@gmail.com>
Message-Id: <C35237A3-B594-4228-AB5B-94FCBB6CF52C@gmail.com>
Date: Mon, 20 Oct 2014 12:11:57 +0100
To: xen-devel <xen-devel@lists.xenproject.org>,
	Xen API mailing list <xen-api@lists.xen.org>,
	mirageos-devel@lists.xenproject.org, Win-pv-devel@lists.xenproject.org
Mime-Version: 1.0 (Mac OS X Mail 7.3 \(1878.6\))
X-Mailer: Apple Mail (2.1878.6)
Subject: [win-pv-devel] September Advisory Board Minutes + Off-Line Votes
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="===============0673637402618671647=="
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org


--===============0673637402618671647==
Content-Type: multipart/alternative; boundary="Apple-Mail=_2B052B73-56A5-4969-8561-49487E6B7AF8"


--Apple-Mail=_2B052B73-56A5-4969-8561-49487E6B7AF8
Content-Transfer-Encoding: 7bit
Content-Type: text/plain;
	charset=us-ascii

See
* http://wiki.xenproject.org/wiki/AB_Meeting/September_2014_Minutes
* http://wiki.xenproject.org/wiki/AB_Votes/2014_Xen_Project_Summit_in_Seattle
* http://wiki.xenproject.org/wiki/AB_Votes/Post_XSA_108_PR_-_Clarification
* http://wiki.xenproject.org/wiki/AB_Votes/STARTUP_membership_class

Regards
Lars
--Apple-Mail=_2B052B73-56A5-4969-8561-49487E6B7AF8
Content-Transfer-Encoding: 7bit
Content-Type: text/html;
	charset=us-ascii

<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">See<div>*&nbsp;<a href="http://wiki.xenproject.org/wiki/AB_Meeting/September_2014_Minutes">http://wiki.xenproject.org/wiki/AB_Meeting/September_2014_Minutes</a></div><div>*&nbsp;<a href="http://wiki.xenproject.org/wiki/AB_Votes/2014_Xen_Project_Summit_in_Seattle">http://wiki.xenproject.org/wiki/AB_Votes/2014_Xen_Project_Summit_in_Seattle</a></div><div>*&nbsp;<a href="http://wiki.xenproject.org/wiki/AB_Votes/Post_XSA_108_PR_-_Clarification">http://wiki.xenproject.org/wiki/AB_Votes/Post_XSA_108_PR_-_Clarification</a></div><div>*&nbsp;<a href="http://wiki.xenproject.org/wiki/AB_Votes/STARTUP_membership_class">http://wiki.xenproject.org/wiki/AB_Votes/STARTUP_membership_class</a></div><div><br></div><div>Regards</div><div>Lars</div></body></html>
--Apple-Mail=_2B052B73-56A5-4969-8561-49487E6B7AF8--


--===============0673637402618671647==
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
--===============0673637402618671647==--


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 20 11:12:05 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 20 Oct 2014 11:12:05 +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 1XgAsf-0008GY-EQ; Mon, 20 Oct 2014 11:12:05 +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 1XgAse-0008G9-AD; Mon, 20 Oct 2014 11:12:04 +0000
Received: from [85.158.139.211] by server-17.bemta-5.messagelabs.com id
	D2/60-02704-30EE4445; Mon, 20 Oct 2014 11:12:03 +0000
X-Env-Sender: lars.kurth.xen@gmail.com
X-Msg-Ref: server-9.tower-206.messagelabs.com!1413803522!10815593!1
X-Originating-IP: [209.85.212.176]
X-SpamReason: No, hits=0.3 required=7.0 tests=HTML_60_70,HTML_MESSAGE
X-StarScan-Received: 
X-StarScan-Version: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 27705 invoked from network); 20 Oct 2014 11:12:02 -0000
Received: from mail-wi0-f176.google.com (HELO mail-wi0-f176.google.com)
	(209.85.212.176)
	by server-9.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	20 Oct 2014 11:12:02 -0000
Received: by mail-wi0-f176.google.com with SMTP id hi2so6781058wib.3
	for <multiple recipients>; Mon, 20 Oct 2014 04:12:02 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:content-type:subject:message-id:date:to:mime-version;
	bh=uHNNr+fTjHRVlRgCIBIV7tDeYkWN+AgcBrK/uOyc6zw=;
	b=uHHGdb2ypw+dLhk0JorAAI0shz96Zz0FmZf1UWoxNRpQ4gr60uIhyed2TVAAizLf0+
	NpgMXJP8uiODJKY1YFARWdfdT/kZpCnTy0m/hjuE9Ox7igTHxIV4HEy2qSLi4eIAx0ZX
	ydWT0WIckxRkJHFeA0yJD37l229IqPcWIl8Wfv75q9Ty9MYmuMEXSADm1EyaT11JwCSC
	YJv9/dXduXvMPxcOrP6SM2mLwP0qWx05rfxROF36ljQT0diUEcyboIZtQ/ehSYPsISz6
	nJnFHxRlE7cVl5GMbOs9QA2HaT/xbZbnWZQ5UQXJc+ljcmmxo3BjGrKUcrfQ/yA3VveI
	sZ8Q==
X-Received: by 10.180.91.234 with SMTP id ch10mr19433763wib.60.1413803521959; 
	Mon, 20 Oct 2014 04:12:01 -0700 (PDT)
Received: from [192.168.0.25] (97e553ce.skybroadband.com. [151.229.83.206])
	by mx.google.com with ESMTPSA id
	kw2sm11494293wjb.34.2014.10.20.04.11.59 for <multiple recipients>
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Mon, 20 Oct 2014 04:12:01 -0700 (PDT)
From: Lars Kurth <lars.kurth.xen@gmail.com>
Message-Id: <C35237A3-B594-4228-AB5B-94FCBB6CF52C@gmail.com>
Date: Mon, 20 Oct 2014 12:11:57 +0100
To: xen-devel <xen-devel@lists.xenproject.org>,
	Xen API mailing list <xen-api@lists.xen.org>,
	mirageos-devel@lists.xenproject.org, Win-pv-devel@lists.xenproject.org
Mime-Version: 1.0 (Mac OS X Mail 7.3 \(1878.6\))
X-Mailer: Apple Mail (2.1878.6)
Subject: [win-pv-devel] September Advisory Board Minutes + Off-Line Votes
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="===============0673637402618671647=="
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org


--===============0673637402618671647==
Content-Type: multipart/alternative; boundary="Apple-Mail=_2B052B73-56A5-4969-8561-49487E6B7AF8"


--Apple-Mail=_2B052B73-56A5-4969-8561-49487E6B7AF8
Content-Transfer-Encoding: 7bit
Content-Type: text/plain;
	charset=us-ascii

See
* http://wiki.xenproject.org/wiki/AB_Meeting/September_2014_Minutes
* http://wiki.xenproject.org/wiki/AB_Votes/2014_Xen_Project_Summit_in_Seattle
* http://wiki.xenproject.org/wiki/AB_Votes/Post_XSA_108_PR_-_Clarification
* http://wiki.xenproject.org/wiki/AB_Votes/STARTUP_membership_class

Regards
Lars
--Apple-Mail=_2B052B73-56A5-4969-8561-49487E6B7AF8
Content-Transfer-Encoding: 7bit
Content-Type: text/html;
	charset=us-ascii

<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">See<div>*&nbsp;<a href="http://wiki.xenproject.org/wiki/AB_Meeting/September_2014_Minutes">http://wiki.xenproject.org/wiki/AB_Meeting/September_2014_Minutes</a></div><div>*&nbsp;<a href="http://wiki.xenproject.org/wiki/AB_Votes/2014_Xen_Project_Summit_in_Seattle">http://wiki.xenproject.org/wiki/AB_Votes/2014_Xen_Project_Summit_in_Seattle</a></div><div>*&nbsp;<a href="http://wiki.xenproject.org/wiki/AB_Votes/Post_XSA_108_PR_-_Clarification">http://wiki.xenproject.org/wiki/AB_Votes/Post_XSA_108_PR_-_Clarification</a></div><div>*&nbsp;<a href="http://wiki.xenproject.org/wiki/AB_Votes/STARTUP_membership_class">http://wiki.xenproject.org/wiki/AB_Votes/STARTUP_membership_class</a></div><div><br></div><div>Regards</div><div>Lars</div></body></html>
--Apple-Mail=_2B052B73-56A5-4969-8561-49487E6B7AF8--


--===============0673637402618671647==
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
--===============0673637402618671647==--


From win-pv-devel-bounces@lists.xenproject.org Wed Oct 22 08:00:16 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 22 Oct 2014 08:00:16 +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 1Xgqq7-000411-IY; Wed, 22 Oct 2014 08:00:15 +0000
Received: from mail6.bemta4.messagelabs.com ([85.158.143.247])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1Xgqq6-00040f-3u
	for win-pv-devel@lists.xenproject.org; Wed, 22 Oct 2014 08:00:14 +0000
Received: from [85.158.143.35] by server-1.bemta-4.messagelabs.com id
	0C/8F-02952-C0467445; Wed, 22 Oct 2014 08:00:12 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-15.tower-21.messagelabs.com!1413964811!11829157!1
X-Originating-IP: [209.85.212.177]
X-SpamReason: No, hits=0.9 required=7.0 tests=SUBJ_HAS_UNIQ_ID
X-StarScan-Received: 
X-StarScan-Version: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 934 invoked from network); 22 Oct 2014 08:00:11 -0000
Received: from mail-wi0-f177.google.com (HELO mail-wi0-f177.google.com)
	(209.85.212.177)
	by server-15.tower-21.messagelabs.com with RC4-SHA encrypted SMTP;
	22 Oct 2014 08:00:11 -0000
Received: by mail-wi0-f177.google.com with SMTP id fb4so557649wid.10
	for <win-pv-devel@lists.xenproject.org>;
	Wed, 22 Oct 2014 01:00:11 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:message-id:date:from:user-agent:mime-version:to
	:subject:references:in-reply-to:content-type
	:content-transfer-encoding;
	bh=tYLzgFjjIPMqqyxEZCU5pvITtMnHQoU8V1L5wBJDjJo=;
	b=mzQuigipMH1D8okN88Y6fEbTEuAE6cdRmY7phmbG9Z5vSZG3UxlNxtqBkJOz2A2Ukl
	s4S0zLSgW+y828CQRHW5txYMhZ9AJRRV6sd7lOmQK1FN4VY6INC214Krp9FHviOY+Fia
	XAOI/P8oX87XL1wdjAbHU0UlsBShM+dzbLr5mpWF4TsVJcqB7vO9v6+5IaPJ0Krt9M7D
	RfYpjR4SpKhF9p0PqRzWBYOKzQ7gPVFEIHAyVGReUl40k+g/w6Aw72O5xyfV6gWfihOs
	5Wvf62gMI3P7o0ncjCep58zs+MwqLZSfBy5CKz8NHPja/yh5K4SqWC9InHHoKGA5gFFs
	LptQ==
X-Gm-Message-State: ALoCoQkjcvQcSAyPOUyjC+OlTS0AmRVgGT02hZJAF2jBQoKwY4CswihcfvkAeVb3BLjpS66YoJcp
X-Received: by 10.180.107.170 with SMTP id hd10mr2971469wib.66.1413964811345; 
	Wed, 22 Oct 2014 01:00:11 -0700 (PDT)
Received: from [192.168.1.15] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by mx.google.com with ESMTPSA id
	vm6sm17946432wjc.16.2014.10.22.01.00.06 for <multiple recipients>
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Wed, 22 Oct 2014 01:00:10 -0700 (PDT)
Message-ID: <544763F0.7050205@m2r.biz>
Date: Wed, 22 Oct 2014 09:59:44 +0200
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64;
	rv:24.0) Gecko/20100101 Thunderbird/24.6.0
MIME-Version: 1.0
To: xen-devel <xen-devel@lists.xensource.com>, 
	"xen-users@lists.xenproject.org" <xen-users@lists.xenproject.org>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <54255FFF.3050006@m2r.biz>
In-Reply-To: <54255FFF.3050006@m2r.biz>
Subject: Re: [win-pv-devel] New xen project's windows pv drivers unofficial
	test build 20141020
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 26/09/2014 14:45, Fabio Fantoni ha scritto:
> I did and uploaded a test build of new xen project's windows pv 
> drivers I did 2 days ago.
> For download it:
> http://fantu.info/xen/winpv-20140924-free.7z
> Contains 32 and 64 bit pv drivers that I build on windows 8.1 64 bit 
> with WDK 8.1 and visual studio 2013.3 express with "build.py free 
> nosdv" command, so is without debug, next build I'll do with debug.
> I tested it on windows 7 and window 8.1 domUs 64 bit and reported to 
> win-pv-devel@lists.xenproject.org the problems found for now.
> I uploaded them to make possible everyone start to do fast and easy 
> tests of them waiting official builds.
I did another build updated with latest commits including some important 
fixes:
http://fantu.info/xen/winpv-20141020-free.7z

_______________________________________________
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 Oct 22 08:00:16 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 22 Oct 2014 08:00:16 +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 1Xgqq7-000411-IY; Wed, 22 Oct 2014 08:00:15 +0000
Received: from mail6.bemta4.messagelabs.com ([85.158.143.247])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1Xgqq6-00040f-3u
	for win-pv-devel@lists.xenproject.org; Wed, 22 Oct 2014 08:00:14 +0000
Received: from [85.158.143.35] by server-1.bemta-4.messagelabs.com id
	0C/8F-02952-C0467445; Wed, 22 Oct 2014 08:00:12 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-15.tower-21.messagelabs.com!1413964811!11829157!1
X-Originating-IP: [209.85.212.177]
X-SpamReason: No, hits=0.9 required=7.0 tests=SUBJ_HAS_UNIQ_ID
X-StarScan-Received: 
X-StarScan-Version: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 934 invoked from network); 22 Oct 2014 08:00:11 -0000
Received: from mail-wi0-f177.google.com (HELO mail-wi0-f177.google.com)
	(209.85.212.177)
	by server-15.tower-21.messagelabs.com with RC4-SHA encrypted SMTP;
	22 Oct 2014 08:00:11 -0000
Received: by mail-wi0-f177.google.com with SMTP id fb4so557649wid.10
	for <win-pv-devel@lists.xenproject.org>;
	Wed, 22 Oct 2014 01:00:11 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:message-id:date:from:user-agent:mime-version:to
	:subject:references:in-reply-to:content-type
	:content-transfer-encoding;
	bh=tYLzgFjjIPMqqyxEZCU5pvITtMnHQoU8V1L5wBJDjJo=;
	b=mzQuigipMH1D8okN88Y6fEbTEuAE6cdRmY7phmbG9Z5vSZG3UxlNxtqBkJOz2A2Ukl
	s4S0zLSgW+y828CQRHW5txYMhZ9AJRRV6sd7lOmQK1FN4VY6INC214Krp9FHviOY+Fia
	XAOI/P8oX87XL1wdjAbHU0UlsBShM+dzbLr5mpWF4TsVJcqB7vO9v6+5IaPJ0Krt9M7D
	RfYpjR4SpKhF9p0PqRzWBYOKzQ7gPVFEIHAyVGReUl40k+g/w6Aw72O5xyfV6gWfihOs
	5Wvf62gMI3P7o0ncjCep58zs+MwqLZSfBy5CKz8NHPja/yh5K4SqWC9InHHoKGA5gFFs
	LptQ==
X-Gm-Message-State: ALoCoQkjcvQcSAyPOUyjC+OlTS0AmRVgGT02hZJAF2jBQoKwY4CswihcfvkAeVb3BLjpS66YoJcp
X-Received: by 10.180.107.170 with SMTP id hd10mr2971469wib.66.1413964811345; 
	Wed, 22 Oct 2014 01:00:11 -0700 (PDT)
Received: from [192.168.1.15] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by mx.google.com with ESMTPSA id
	vm6sm17946432wjc.16.2014.10.22.01.00.06 for <multiple recipients>
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Wed, 22 Oct 2014 01:00:10 -0700 (PDT)
Message-ID: <544763F0.7050205@m2r.biz>
Date: Wed, 22 Oct 2014 09:59:44 +0200
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64;
	rv:24.0) Gecko/20100101 Thunderbird/24.6.0
MIME-Version: 1.0
To: xen-devel <xen-devel@lists.xensource.com>, 
	"xen-users@lists.xenproject.org" <xen-users@lists.xenproject.org>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <54255FFF.3050006@m2r.biz>
In-Reply-To: <54255FFF.3050006@m2r.biz>
Subject: Re: [win-pv-devel] New xen project's windows pv drivers unofficial
	test build 20141020
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 26/09/2014 14:45, Fabio Fantoni ha scritto:
> I did and uploaded a test build of new xen project's windows pv 
> drivers I did 2 days ago.
> For download it:
> http://fantu.info/xen/winpv-20140924-free.7z
> Contains 32 and 64 bit pv drivers that I build on windows 8.1 64 bit 
> with WDK 8.1 and visual studio 2013.3 express with "build.py free 
> nosdv" command, so is without debug, next build I'll do with debug.
> I tested it on windows 7 and window 8.1 domUs 64 bit and reported to 
> win-pv-devel@lists.xenproject.org the problems found for now.
> I uploaded them to make possible everyone start to do fast and easy 
> tests of them waiting official builds.
I did another build updated with latest commits including some important 
fixes:
http://fantu.info/xen/winpv-20141020-free.7z

_______________________________________________
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 Oct 22 10:45:14 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 22 Oct 2014 10:45: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 1XgtPm-0002nq-Nj; Wed, 22 Oct 2014 10:45:14 +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 1XgtPl-0002mr-0q
	for win-pv-devel@lists.xenproject.org; Wed, 22 Oct 2014 10:45:13 +0000
Received: from [85.158.139.211] by server-3.bemta-5.messagelabs.com id
	54/CF-02953-8BA87445; Wed, 22 Oct 2014 10:45:12 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-4.tower-206.messagelabs.com!1413974710!11092374!1
X-Originating-IP: [209.85.212.170]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 11419 invoked from network); 22 Oct 2014 10:45:10 -0000
Received: from mail-wi0-f170.google.com (HELO mail-wi0-f170.google.com)
	(209.85.212.170)
	by server-4.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	22 Oct 2014 10:45:10 -0000
Received: by mail-wi0-f170.google.com with SMTP id n3so430872wiv.5
	for <win-pv-devel@lists.xenproject.org>;
	Wed, 22 Oct 2014 03:45:10 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:message-id:date:from:user-agent:mime-version:to
	:cc:subject:content-type:content-transfer-encoding;
	bh=IlJafy8Gu96WDNarztfgG+MDm6boVrpIgf0rU5ThAD0=;
	b=gskrAj4qQdunJfS2AEd55bjiazSz+0G21jE2Kb8Rc1o03gztqhDENmNTG2z1XkSpQZ
	XDJKHpgcgQ6AF8hHFuV9f6UFePP1c7k9QI4Qqtl/SzuB1bLyAmHTd5RBkIWXrm7Jm+qc
	TIdfmZiEznlulAsrwxyDiT57/bwvUeTfmCwSMbHnfPWc7k9XhRk1G16tPyPcX+OXbAmO
	+pxxw4QQ8LfHCB4fJ+CCsMSVLUaU2t7WXoh5n5gD6jAbe3z8FR6Wf95OlXwFmh/zIu34
	hgvXFB8PRrdq6h/G4pH9vhjfN8hssoUKFreDbK0vvPL/MF/IJWO4db8nguAlLl3v8XVN
	EosQ==
X-Gm-Message-State: ALoCoQmeOlhccBeskGttdBP3agyT2TcItVw1HbZ77Kjj7V0jbxtty3PSWGuuQd9RybfMcHrJSxqY
X-Received: by 10.194.5.227 with SMTP id v3mr50058500wjv.63.1413974710149;
	Wed, 22 Oct 2014 03:45:10 -0700 (PDT)
Received: from [192.168.1.15] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by mx.google.com with ESMTPSA id hh13sm1463701wib.1.2014.10.22.03.45.08
	for <multiple recipients>
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Wed, 22 Oct 2014 03:45:09 -0700 (PDT)
Message-ID: <54478AB9.8080508@m2r.biz>
Date: Wed, 22 Oct 2014 12:45:13 +0200
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64;
	rv:24.0) Gecko/20100101 Thunderbird/24.6.0
MIME-Version: 1.0
To: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Cc: Anthony PERARD <anthony.perard@citrix.com>,
	xen-devel <xen-devel@lists.xensource.com>,
	Paul Durrant <paul.durrant@citrix.com>,
	Stefano Stabellini <Stefano.Stabellini@eu.citrix.com>
Subject: [win-pv-devel] Question about strange things in windows 7 domUs
	save/restore
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

Trying new windows pv drivers I found in qemu log with xen platform 
trace enabled a strange thing:
> xen_platform_log xen platform: XENIFACE|FdoRegistryThreadHandler: 
> WriteRegistry
> xen_platform_log xen platform: 
> XENIFACE|FdoInitialiseXSRegistryEntries: no such xenstore key
> xen_platform_log xen platform: 
> XENIFACE|FdoInitialiseXSRegistryEntries: Failed to initialise registry 
> (c0000022)

Is there something to remove or add? (probably about xen hypervisor-only 
systems)

---

I'm also trying for a long time to solve one stringe problem of 2-3 
minutes "windows freeze" with qxl after restore and using spice.
These memory areas that seems not restored can be the cause of this problem?
> xen_ram_alloc: do not alloc 78000000 bytes of ram at 0 when runstate 
> is INMIGRATE
> xen_ram_alloc: do not alloc 4000000 bytes of ram at 78000000 when 
> runstate is INMIGRATE
> xen_ram_alloc: do not alloc 2000 bytes of ram at 7c000000 when 
> runstate is INMIGRATE
> xen_ram_alloc: do not alloc 4000000 bytes of ram at 7c002000 when 
> runstate is INMIGRATE
> xen_ram_alloc: do not alloc 10000 bytes of ram at 80002000 when 
> runstate is INMIGRATE
> xen_ram_alloc: do not alloc 40000 bytes of ram at 80012000 when 
> runstate is INMIGRATE

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

Thanks for any reply and sorry for my bad english.


Here the full qemu log after restore:
> less /var/log/xen/qemu-dm-W7-02.log
> xen_ram_alloc: do not alloc 78000000 bytes of ram at 0 when runstate 
> is INMIGRATE
> xen_ram_alloc: do not alloc 4000000 bytes of ram at 78000000 when 
> runstate is INMIGRATE
> xen_ram_alloc: do not alloc 2000 bytes of ram at 7c000000 when 
> runstate is INMIGRATE
> xen_ram_alloc: do not alloc 4000000 bytes of ram at 7c002000 when 
> runstate is INMIGRATE
> xen_ram_alloc: do not alloc 10000 bytes of ram at 80002000 when 
> runstate is INMIGRATE
> xen_ram_alloc: do not alloc 40000 bytes of ram at 80012000 when 
> runstate is INMIGRATE
> red_dispatcher_loadvm_commands:
> xen_platform_log xen platform: SUSPEND: 
> SCHEDOP_shutdown:SHUTDOWN_suspend <==== (00000000)
> xen_platform_log xen platform: SHARED_INFO: MAP 
> XENMAPSPACE_shared_info @ 00000000.f8000000
> xen_platform_log xen platform: STORE: PAGE @ 00000000.feffc000
> xen_platform_log xen platform: GNTTAB: MAP XENMAPSPACE_grant_table[0] 
> @ 00000000.f8001000
> xen_platform_log xen platform: GNTTAB: MAP XENMAPSPACE_grant_table[1] 
> @ 00000000.f8002000
> xen_platform_log xen platform: XENVBD|FdoSuspendLateCallback:8.0.0.0 
> (24/9/2014)
> xen_platform_log xen platform: 
> XENVBD|FrontendSuspendLateCallback:Target[0] : ===> from ENABLED
> xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : 
> ENABLED ----> CLOSED
> xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : 
> in state CONNECTED
> xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : 
> in state CLOSING
> xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : 
> in state CLOSED
> xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : 
> CLOSED ----> ENABLED
> xen_platform_log xen platform: XENVBD|FrontendWriteUsage:Target[0] : 
> DUMP NOT_HIBER PAGE
> xen_platform_log xen platform: XENVBD|PdoUpdateInquiryData:Target[0] : 
> VDI-UUID = {00000000-0000-0000-0000-000000000000}
> xen_ram_alloc: do not alloc 78000000 bytes of ram at 0 when runstate 
> is INMIGRATE
> xen_ram_alloc: do not alloc 4000000 bytes of ram at 78000000 when 
> runstate is INMIGRATE
> xen_ram_alloc: do not alloc 2000 bytes of ram at 7c000000 when 
> runstate is INMIGRATE
> xen_ram_alloc: do not alloc 4000000 bytes of ram at 7c002000 when 
> runstate is INMIGRATE
> xen_ram_alloc: do not alloc 10000 bytes of ram at 80002000 when 
> runstate is INMIGRATE
> xen_ram_alloc: do not alloc 40000 bytes of ram at 80012000 when 
> runstate is INMIGRATE
> red_dispatcher_loadvm_commands:
> xen_platform_log xen platform: SUSPEND: 
> SCHEDOP_shutdown:SHUTDOWN_suspend <==== (00000000)
> xen_platform_log xen platform: SHARED_INFO: MAP 
> XENMAPSPACE_shared_info @ 00000000.f8000000
> xen_ram_alloc: do not alloc 40000 bytes of ram at 80012000 when 
> runstate is INMIGRATE
> red_dispatcher_loadvm_commands:
> xen_platform_log xen platform: SUSPEND: 
> SCHEDOP_shutdown:SHUTDOWN_suspend <==== (00000000)
> xen_platform_log xen platform: SHARED_INFO: MAP 
> XENMAPSPACE_shared_info @ 00000000.f8000000
> xen_platform_log xen platform: STORE: PAGE @ 00000000.feffc000
> xen_platform_log xen platform: GNTTAB: MAP XENMAPSPACE_grant_table[0] 
> @ 00000000.f8001000
> xen_platform_log xen platform: GNTTAB: MAP XENMAPSPACE_grant_table[1] 
> @ 00000000.f8002000
> xen_platform_log xen platform: XENVBD|FdoSuspendLateCallback:8.0.0.0 
> (24/9/2014)
> xen_platform_log xen platform: 
> XENVBD|FrontendSuspendLateCallback:Target[0] : ===> from ENABLED
> xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : 
> ENABLED ----> CLOSED
> xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : 
> in state CONNECTED
> xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : 
> in state CLOSING
> xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : 
> in state CLOSED
> xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : 
> CLOSED ----> ENABLED
> xen_platform_log xen platform: XENVBD|FrontendWriteUsage:Target[0] : 
> DUMP NOT_HIBER PAGE
> xen_platform_log xen platform: XENVBD|PdoUpdateInquiryData:Target[0] : 
> VDI-UUID = {00000000-0000-0000-0000-000000000000}
> xen_platform_log xen platform: XENVBD|FrontendPrepare:Target[0] : 
> BackendId 0 (/local/domain/0/backend/qdisk/4/768)
> xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : 
> in state PREPARED
> xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : 
> in state CONNECTED
> xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : 
> in state ENABLED
> xen_platform_log xen platform: XENVBD|PdoPostResume:Target[0] : 0 
> Fresh SRBs
> xen_platform_log xen platform: XENVBD|PdoPostResume:Target[0] : 
> NOT_MISSING ((null))
> xen_platform_log xen platform: 
> XENVBD|FrontendSuspendLateCallback:Target[0] : <=== restored ENABLED
> xen_platform_log xen platform: XENIFACE|FireSuspendEvent: Ready to 
> unsuspend Event
> xen_platform_log xen platform: 
> XENVIF|__TransmitterRingPrepareNeighbourAdvertisement: 
> fe80:0000:0000:0000:9060:135e:65b9:57ba
> xen_platform_log xen platform: XENVIF|__TransmitterRingPrepareArp: 
> 192.168.1.25
> xen_platform_log xen platform: 
> XENVIF|__TransmitterRingPrepareNeighbourAdvertisement: 
> fe80:0000:0000:0000:9060:135e:65b9:57ba
> xen_platform_log xen platform: XENVIF|__TransmitterRingPrepareArp: 
> 192.168.1.25
> xen_platform_log xen platform: 
> XENVIF|__TransmitterRingPrepareNeighbourAdvertisement: 
> fe80:0000:0000:0000:9060:135e:65b9:57ba
> xen_platform_log xen platform: XENVIF|__TransmitterRingPrepareArp: 
> 192.168.1.25
> xen_platform_log xen platform: SUSPEND: <====
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: Fire 
> 00000000003BDA30
> xen_platform_log xen platform: XENNET|AdapterMediaStateChange: LINK: 
> UP: SPEED=1000000000 DUPLEX=FULL
> xen_platform_log xen platform: XENIFACE|WatchCallbackThread: 
> SessionSuspendResumeUnwatch FFFFFA8003594400
> xen_platform_log xen platform: XENIFACE|StartWatch: Start Watch 
> FFFFFA800303D730
> xen_platform_log xen platform: XENIFACE|FdoRegistryThreadHandler: 
> WriteRegistry
> xen_platform_log xen platform: 
> XENIFACE|FdoInitialiseXSRegistryEntries: no such xenstore key
> xen_platform_log xen platform: 
> XENIFACE|FdoInitialiseXSRegistryEntries: Failed to initialise registry 
> (c0000022)
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: fire 
> feature shutdown
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: Check 
> if we need to shutdown
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: No 
> need to shutdown
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: fired 
> feature shutdown
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: win 
> agent going to sleep
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: win 
> agent woke up for 2
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: 
> Suspend event
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: Set 
> time to XenTime
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: 
> hosttimeIsUTC: Open Registry Key
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: Time 
> is now  2014.10.22 12:22:57.771
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: Set 
> time to 2014.10.22 12:26:11.700
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: 
> WmiSessionSetEntry:MethodExec Failed
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: 
> WmiSessionSetEntry:SessionStart Failed
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: 
> WmiSessionSetEntry:SetVValue Failed
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: 
> WmiSessionSetEntry:SetVPath Failed
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: 
> Failed to advertise shutdown
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: 
> Handled suspend event
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: win 
> agent going to sleep
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: win 
> agent woke up for 3
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: Fire 
> 00000000003BDA30
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: fire 
> feature shutdown
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: Check 
> if we need to shutdown
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: No 
> need to shutdown
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: fired 
> feature shutdown
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: win 
> agent going to sleep
> ...skipping...
> xen_platform_log xen platform: XENIFACE|FireSuspendEvent: Ready to 
> unsuspend Event
> xen_platform_log xen platform: 
> XENVIF|__TransmitterRingPrepareNeighbourAdvertisement: 
> fe80:0000:0000:0000:9060:135e:65b9:57ba
> xen_platform_log xen platform: XENVIF|__TransmitterRingPrepareArp: 
> 192.168.1.25
> xen_platform_log xen platform: 
> XENVIF|__TransmitterRingPrepareNeighbourAdvertisement: 
> fe80:0000:0000:0000:9060:135e:65b9:57ba
> xen_platform_log xen platform: XENVIF|__TransmitterRingPrepareArp: 
> 192.168.1.25
> xen_platform_log xen platform: 
> XENVIF|__TransmitterRingPrepareNeighbourAdvertisement: 
> fe80:0000:0000:0000:9060:135e:65b9:57ba
> xen_platform_log xen platform: XENVIF|__TransmitterRingPrepareArp: 
> 192.168.1.25
> xen_platform_log xen platform: SUSPEND: <====
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: Fire 
> 00000000003BDA30
> xen_platform_log xen platform: XENNET|AdapterMediaStateChange: LINK: 
> UP: SPEED=1000000000 DUPLEX=FULL
> xen_platform_log xen platform: XENIFACE|WatchCallbackThread: 
> SessionSuspendResumeUnwatch FFFFFA8003594400
> xen_platform_log xen platform: XENIFACE|StartWatch: Start Watch 
> FFFFFA800303D730
> xen_platform_log xen platform: XENIFACE|FdoRegistryThreadHandler: 
> WriteRegistry
> xen_platform_log xen platform: 
> XENIFACE|FdoInitialiseXSRegistryEntries: no such xenstore key
> xen_platform_log xen platform: 
> XENIFACE|FdoInitialiseXSRegistryEntries: Failed to initialise registry 
> (c0000022)
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: fire 
> feature shutdown
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: Check 
> if we need to shutdown
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: No 
> need to shutdown
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: fired 
> feature shutdown
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: win 
> agent going to sleep
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: win 
> agent woke up for 2
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: 
> Suspend event
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: Set 
> time to XenTime
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: 
> hosttimeIsUTC: Open Registry Key
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: Time 
> is now  2014.10.22 12:22:57.771
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: Set 
> time to 2014.10.22 12:26:11.700
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: 
> WmiSessionSetEntry:MethodExec Failed
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: 
> WmiSessionSetEntry:SessionStart Failed
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: 
> WmiSessionSetEntry:SetVValue Failed
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: 
> WmiSessionSetEntry:SetVPath Failed
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: 
> Failed to advertise shutdown
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: 
> Handled suspend event
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: win 
> agent going to sleep
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: win 
> agent woke up for 3
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: Fire 
> 00000000003BDA30
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: fire 
> feature shutdown
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: Check 
> if we need to shutdown
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: No 
> need to shutdown
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: fired 
> feature shutdown
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: win 
> agent going to sleep
> main_channel_link: add main channel client
> main_channel_handle_parsed: agent start
> main_channel_handle_parsed: net test: latency 2.620000 ms, bitrate 
> 1742978723 bps (1662.234042 Mbps)
> inputs_connect: inputs channel client create
> red_dispatcher_set_cursor_peer:

And xl dmesg about the domU:
> (d3) HVM Loader
> (d3) Detected Xen v4.5-unstable
> (d3) Xenbus rings @0xfeffc000, event channel 1
> (d3) System requested SeaBIOS
> (d3) CPU speed is 2660 MHz
> (d3) Relocating guest memory for lowmem MMIO space disabled
> (XEN) irq.c:270: Dom3 PCI link 0 changed 0 -> 5
> (d3) PCI-ISA link 0 routed to IRQ5
> (XEN) irq.c:270: Dom3 PCI link 1 changed 0 -> 10
> (d3) PCI-ISA link 1 routed to IRQ10
> (XEN) irq.c:270: Dom3 PCI link 2 changed 0 -> 11
> (d3) PCI-ISA link 2 routed to IRQ11
> (XEN) irq.c:270: Dom3 PCI link 3 changed 0 -> 5
> (d3) PCI-ISA link 3 routed to IRQ5
> (d3) pci dev 01:3 INTA->IRQ10
> (d3) pci dev 02:0 INTA->IRQ11
> (d3) pci dev 03:0 INTA->IRQ5
> (d3) pci dev 04:0 INTA->IRQ5
> (d3) pci dev 05:0 INTA->IRQ10
> (d3) pci dev 06:0 INTA->IRQ11
> (d3) pci dev 1d:0 INTA->IRQ10
> (d3) pci dev 1d:1 INTB->IRQ11
> (d3) pci dev 1d:2 INTC->IRQ5
> (d3) pci dev 1d:7 INTD->IRQ5
> (d3) No RAM in high memory; setting high_mem resource base to 100000000
> (d3) pci dev 05:0 bar 10 size 004000000: 0f0000000
> (d3) pci dev 05:0 bar 14 size 004000000: 0f4000000
> (d3) pci dev 02:0 bar 14 size 001000000: 0f8000008
> (d3) pci dev 06:0 bar 30 size 000040000: 0f9000000
> (d3) pci dev 05:0 bar 30 size 000010000: 0f9040000
> (d3) pci dev 03:0 bar 10 size 000004000: 0f9050000
> (d3) pci dev 05:0 bar 18 size 000002000: 0f9054000
> (d3) pci dev 04:0 bar 14 size 000001000: 0f9056000
> (d3) pci dev 1d:7 bar 10 size 000001000: 0f9057000
> (d3) pci dev 02:0 bar 10 size 000000100: 00000c001
> (d3) pci dev 06:0 bar 10 size 000000100: 00000c101
> (d3) pci dev 06:0 bar 14 size 000000100: 0f9058000
> (d3) pci dev 04:0 bar 10 size 000000020: 00000c201
> (d3) pci dev 05:0 bar 1c size 000000020: 00000c221
> (d3) pci dev 1d:0 bar 20 size 000000020: 00000c241
> (d3) pci dev 1d:1 bar 20 size 000000020: 00000c261
> (d3) pci dev 1d:2 bar 20 size 000000020: 00000c281
> (d3) pci dev 01:1 bar 20 size 000000010: 00000c2a1
> (d3) Multiprocessor initialisation:
> (d3)  - CPU0 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8] ... done.
> (d3)  - CPU1 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8] ... done.
> (d3) Testing HVM environment:
> (d3)  - REP INSB across page boundaries ... passed
> (d3)  - GS base MSRs and SWAPGS ... passed
> (d3) Passed 2 of 2 tests
> (d3) Writing SMBIOS tables ...
> (d3) Loading SeaBIOS ...
> (d3) Creating MP tables ...
> (d3) Loading ACPI ...
> (d3) S3 disabled
> (d3) S4 disabled
> (d3) vm86 TSS at fc00a100
> (d3) BIOS map:
> (d3)  10000-100d3: Scratch space
> (d3)  c0000-fffff: Main BIOS
> (d3) E820 table:
> (d3)  [00]: 00000000:00000000 - 00000000:000a0000: RAM
> (d3)  HOLE: 00000000:000a0000 - 00000000:000c0000
> (d3)  [01]: 00000000:000c0000 - 00000000:00100000: RESERVED
> (d3)  [02]: 00000000:00100000 - 00000000:78000000: RAM
> (d3)  HOLE: 00000000:78000000 - 00000000:fc000000
> (d3)  [03]: 00000000:fc000000 - 00000001:00000000: RESERVED
> (d3) Invoking SeaBIOS ...
> (d3) SeaBIOS (version 
> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
> (d3)
> (d3) Found Xen hypervisor signature at 40000100
> (d3) Running on QEMU (i440fx)
> (d3) xen: copy e820...
> (d3) Relocating init from 0x000df619 to 0x77fae600 (size 71995)
> (d3) CPU Mhz=2661
> (d3) Found 13 PCI devices (max PCI bus is 00)
> (d3) Allocated Xen hypercall page at 77fff000
> (d3) Detected Xen v4.5-unstable
> (d3) xen: copy BIOS tables...
> (d3) Copying SMBIOS entry point from 0x00010010 to 0x000f0f40
> (d3) Copying MPTABLE from 0xfc001170/fc001180 to 0x000f0e40
> (d3) Copying PIR from 0x00010030 to 0x000f0dc0
> (d3) Copying ACPI RSDP from 0x000100b0 to 0x000f0d90
> (d3) Using pmtimer, ioport 0xb008
> (d3) Scan for VGA option rom
> (d3) Running option rom at c000:0003
> (XEN) stdvga.c:147:d3v0 entering stdvga and caching modes
> (d3) pmm call arg1=0
> (d3) Turning on vga text mode console
> (d3) SeaBIOS (version 
> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
> (d3) Machine UUID 9c2cc4b2-6dc6-4baf-a708-474699ff6d98
> (d3) EHCI init on dev 00:1d.7 (regs=0xf9057020)
> (d3) Found 0 lpt ports
> (d3) Found 0 serial ports
> (d3) ATA controller 1 at 1f0/3f4/0 (irq 14 dev 9)
> (d3) ATA controller 2 at 170/374/0 (irq 15 dev 9)
> (d3) ata0-0: QEMU HARDDISK ATA-7 Hard-Disk (50000 MiBytes)
> (d3) Searching bootorder for: /pci@i0cf8/*@1,1/drive@0/disk@0
> (d3) DVD/CD [ata0-1: QEMU DVD-ROM ATAPI-4 DVD/CD]
> (d3) Searching bootorder for: /pci@i0cf8/*@1,1/drive@0/disk@1
> (d3) UHCI init on dev 00:1d.0 (io=c240)
> (d3) UHCI init on dev 00:1d.1 (io=c260)
> (d3) UHCI init on dev 00:1d.2 (io=c280)
> (d3) PS2 keyboard initialized
> (d3) All threads complete.
> (d3) Scan for option roms
> (d3) Running option rom at c980:0003
> (d3) pmm call arg1=1
> (d3) pmm call arg1=0
> (d3) pmm call arg1=1
> (d3) pmm call arg1=0
> (d3) Searching bootorder for: /pci@i0cf8/*@6
> (d3)
> (d3) Press F12 for boot menu.
> (d3)
> (d3) Searching bootorder for: HALT
> (d3) drive 0x000f0d40: PCHS=16383/16/63 translation=lba 
> LCHS=1024/255/63 s=102400000
> (d3)
> (d3) Space available for UMB: ca800-ee800, f0000-f0ce0
> (d3) Returned 258048 bytes of ZoneHigh
> (d3) e820 map has 6 items:
> (d3)   0: 0000000000000000 - 000000000009fc00 = 1 RAM
> (d3)   1: 000000000009fc00 - 00000000000a0000 = 2 RESERVED
> (d3)   2: 00000000000f0000 - 0000000000100000 = 2 RESERVED
> (d3)   3: 0000000000100000 - 0000000077fff000 = 1 RAM
> (d3)   4: 0000000077fff000 - 0000000078000000 = 2 RESERVED
> (d3)   5: 00000000fc000000 - 0000000100000000 = 2 RESERVED
> (d3) enter handle_19:
> (d3)   NULL
> (d3) Booting from DVD/CD...
> (d3) Device reports MEDIUM NOT PRESENT
> (d3) scsi_is_ready returned -1
> (d3) Boot failed: Could not read from CDROM (code 0003)
> (d3) enter handle_18:
> (d3)   NULL
> (d3) Booting from Hard Disk...
> (d3) Booting from 0000:7c00
> (XEN) d3: VIRIDIAN GUEST_OS_ID: vendor: 1 os: 4 major: 6 minor: 1 sp: 
> 1 build: 1db1
> (XEN) d3: VIRIDIAN HYPERCALL: enabled: 1 pfn: 3ffff
> (XEN) d3v0: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffe
> (XEN) d3v1: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffd
> (XEN) irq.c:270: Dom3 PCI link 0 changed 5 -> 0
> (XEN) irq.c:270: Dom3 PCI link 1 changed 10 -> 0
> (XEN) irq.c:270: Dom3 PCI link 2 changed 11 -> 0
> (XEN) irq.c:270: Dom3 PCI link 3 changed 5 -> 0
> (XEN) irq.c:380: Dom3 callback via changed to GSI 24
> (XEN) HVM3 save: CPU
> (XEN) HVM3 save: PIC
> (XEN) HVM3 save: IOAPIC
> (XEN) HVM3 save: LAPIC
> (XEN) HVM3 save: LAPIC_REGS
> (XEN) HVM3 save: PCI_IRQ
> (XEN) HVM3 save: ISA_IRQ
> (XEN) HVM3 save: PCI_LINK
> (XEN) HVM3 save: PIT
> (XEN) HVM3 save: RTC
> (XEN) HVM3 save: HPET
> (XEN) HVM3 save: PMTIMER
> (XEN) HVM3 save: MTRR
> (XEN) HVM3 save: VIRIDIAN_DOMAIN
> (XEN) HVM3 save: CPU_XSAVE
> (XEN) HVM3 save: VIRIDIAN_VCPU
> (XEN) HVM3 save: VMCE_VCPU
> (XEN) HVM3 save: TSC_ADJUST
> (XEN) HVM4 restore: CPU 0
> (XEN) HVM4 restore: CPU 1
> (XEN) HVM4 restore: PIC 0
> (XEN) HVM4 restore: PIC 1
> (XEN) HVM4 restore: IOAPIC 0
> (XEN) HVM4 restore: LAPIC 0
> (XEN) HVM4 restore: LAPIC 1
> (XEN) HVM4 restore: LAPIC_REGS 0
> (XEN) HVM4 restore: LAPIC_REGS 1
> (XEN) HVM4 restore: PCI_IRQ 0
> (XEN) HVM4 restore: ISA_IRQ 0
> (XEN) HVM4 restore: PCI_LINK 0
> (XEN) HVM4 restore: PIT 0
> (XEN) HVM4 restore: RTC 0
> (XEN) HVM4 restore: HPET 0
> (XEN) HVM4 restore: PMTIMER 0
> (XEN) HVM4 restore: MTRR 0
> (XEN) HVM4 restore: MTRR 1
> (XEN) HVM4 restore: VIRIDIAN_DOMAIN 0
> (XEN) HVM4 restore: VIRIDIAN_VCPU 0
> (XEN) HVM4 restore: VIRIDIAN_VCPU 1
> (XEN) HVM4 restore: VMCE_VCPU 0
> (XEN) HVM4 restore: VMCE_VCPU 1
> (XEN) HVM4 restore: TSC_ADJUST 0
> (XEN) HVM4 restore: TSC_ADJUST 1
> (XEN) irq.c:380: Dom4 callback via changed to GSI 24



_______________________________________________
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 Oct 22 10:45:14 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 22 Oct 2014 10:45: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 1XgtPm-0002nq-Nj; Wed, 22 Oct 2014 10:45:14 +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 1XgtPl-0002mr-0q
	for win-pv-devel@lists.xenproject.org; Wed, 22 Oct 2014 10:45:13 +0000
Received: from [85.158.139.211] by server-3.bemta-5.messagelabs.com id
	54/CF-02953-8BA87445; Wed, 22 Oct 2014 10:45:12 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-4.tower-206.messagelabs.com!1413974710!11092374!1
X-Originating-IP: [209.85.212.170]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 11419 invoked from network); 22 Oct 2014 10:45:10 -0000
Received: from mail-wi0-f170.google.com (HELO mail-wi0-f170.google.com)
	(209.85.212.170)
	by server-4.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	22 Oct 2014 10:45:10 -0000
Received: by mail-wi0-f170.google.com with SMTP id n3so430872wiv.5
	for <win-pv-devel@lists.xenproject.org>;
	Wed, 22 Oct 2014 03:45:10 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:message-id:date:from:user-agent:mime-version:to
	:cc:subject:content-type:content-transfer-encoding;
	bh=IlJafy8Gu96WDNarztfgG+MDm6boVrpIgf0rU5ThAD0=;
	b=gskrAj4qQdunJfS2AEd55bjiazSz+0G21jE2Kb8Rc1o03gztqhDENmNTG2z1XkSpQZ
	XDJKHpgcgQ6AF8hHFuV9f6UFePP1c7k9QI4Qqtl/SzuB1bLyAmHTd5RBkIWXrm7Jm+qc
	TIdfmZiEznlulAsrwxyDiT57/bwvUeTfmCwSMbHnfPWc7k9XhRk1G16tPyPcX+OXbAmO
	+pxxw4QQ8LfHCB4fJ+CCsMSVLUaU2t7WXoh5n5gD6jAbe3z8FR6Wf95OlXwFmh/zIu34
	hgvXFB8PRrdq6h/G4pH9vhjfN8hssoUKFreDbK0vvPL/MF/IJWO4db8nguAlLl3v8XVN
	EosQ==
X-Gm-Message-State: ALoCoQmeOlhccBeskGttdBP3agyT2TcItVw1HbZ77Kjj7V0jbxtty3PSWGuuQd9RybfMcHrJSxqY
X-Received: by 10.194.5.227 with SMTP id v3mr50058500wjv.63.1413974710149;
	Wed, 22 Oct 2014 03:45:10 -0700 (PDT)
Received: from [192.168.1.15] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by mx.google.com with ESMTPSA id hh13sm1463701wib.1.2014.10.22.03.45.08
	for <multiple recipients>
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Wed, 22 Oct 2014 03:45:09 -0700 (PDT)
Message-ID: <54478AB9.8080508@m2r.biz>
Date: Wed, 22 Oct 2014 12:45:13 +0200
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64;
	rv:24.0) Gecko/20100101 Thunderbird/24.6.0
MIME-Version: 1.0
To: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Cc: Anthony PERARD <anthony.perard@citrix.com>,
	xen-devel <xen-devel@lists.xensource.com>,
	Paul Durrant <paul.durrant@citrix.com>,
	Stefano Stabellini <Stefano.Stabellini@eu.citrix.com>
Subject: [win-pv-devel] Question about strange things in windows 7 domUs
	save/restore
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

Trying new windows pv drivers I found in qemu log with xen platform 
trace enabled a strange thing:
> xen_platform_log xen platform: XENIFACE|FdoRegistryThreadHandler: 
> WriteRegistry
> xen_platform_log xen platform: 
> XENIFACE|FdoInitialiseXSRegistryEntries: no such xenstore key
> xen_platform_log xen platform: 
> XENIFACE|FdoInitialiseXSRegistryEntries: Failed to initialise registry 
> (c0000022)

Is there something to remove or add? (probably about xen hypervisor-only 
systems)

---

I'm also trying for a long time to solve one stringe problem of 2-3 
minutes "windows freeze" with qxl after restore and using spice.
These memory areas that seems not restored can be the cause of this problem?
> xen_ram_alloc: do not alloc 78000000 bytes of ram at 0 when runstate 
> is INMIGRATE
> xen_ram_alloc: do not alloc 4000000 bytes of ram at 78000000 when 
> runstate is INMIGRATE
> xen_ram_alloc: do not alloc 2000 bytes of ram at 7c000000 when 
> runstate is INMIGRATE
> xen_ram_alloc: do not alloc 4000000 bytes of ram at 7c002000 when 
> runstate is INMIGRATE
> xen_ram_alloc: do not alloc 10000 bytes of ram at 80002000 when 
> runstate is INMIGRATE
> xen_ram_alloc: do not alloc 40000 bytes of ram at 80012000 when 
> runstate is INMIGRATE

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

Thanks for any reply and sorry for my bad english.


Here the full qemu log after restore:
> less /var/log/xen/qemu-dm-W7-02.log
> xen_ram_alloc: do not alloc 78000000 bytes of ram at 0 when runstate 
> is INMIGRATE
> xen_ram_alloc: do not alloc 4000000 bytes of ram at 78000000 when 
> runstate is INMIGRATE
> xen_ram_alloc: do not alloc 2000 bytes of ram at 7c000000 when 
> runstate is INMIGRATE
> xen_ram_alloc: do not alloc 4000000 bytes of ram at 7c002000 when 
> runstate is INMIGRATE
> xen_ram_alloc: do not alloc 10000 bytes of ram at 80002000 when 
> runstate is INMIGRATE
> xen_ram_alloc: do not alloc 40000 bytes of ram at 80012000 when 
> runstate is INMIGRATE
> red_dispatcher_loadvm_commands:
> xen_platform_log xen platform: SUSPEND: 
> SCHEDOP_shutdown:SHUTDOWN_suspend <==== (00000000)
> xen_platform_log xen platform: SHARED_INFO: MAP 
> XENMAPSPACE_shared_info @ 00000000.f8000000
> xen_platform_log xen platform: STORE: PAGE @ 00000000.feffc000
> xen_platform_log xen platform: GNTTAB: MAP XENMAPSPACE_grant_table[0] 
> @ 00000000.f8001000
> xen_platform_log xen platform: GNTTAB: MAP XENMAPSPACE_grant_table[1] 
> @ 00000000.f8002000
> xen_platform_log xen platform: XENVBD|FdoSuspendLateCallback:8.0.0.0 
> (24/9/2014)
> xen_platform_log xen platform: 
> XENVBD|FrontendSuspendLateCallback:Target[0] : ===> from ENABLED
> xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : 
> ENABLED ----> CLOSED
> xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : 
> in state CONNECTED
> xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : 
> in state CLOSING
> xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : 
> in state CLOSED
> xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : 
> CLOSED ----> ENABLED
> xen_platform_log xen platform: XENVBD|FrontendWriteUsage:Target[0] : 
> DUMP NOT_HIBER PAGE
> xen_platform_log xen platform: XENVBD|PdoUpdateInquiryData:Target[0] : 
> VDI-UUID = {00000000-0000-0000-0000-000000000000}
> xen_ram_alloc: do not alloc 78000000 bytes of ram at 0 when runstate 
> is INMIGRATE
> xen_ram_alloc: do not alloc 4000000 bytes of ram at 78000000 when 
> runstate is INMIGRATE
> xen_ram_alloc: do not alloc 2000 bytes of ram at 7c000000 when 
> runstate is INMIGRATE
> xen_ram_alloc: do not alloc 4000000 bytes of ram at 7c002000 when 
> runstate is INMIGRATE
> xen_ram_alloc: do not alloc 10000 bytes of ram at 80002000 when 
> runstate is INMIGRATE
> xen_ram_alloc: do not alloc 40000 bytes of ram at 80012000 when 
> runstate is INMIGRATE
> red_dispatcher_loadvm_commands:
> xen_platform_log xen platform: SUSPEND: 
> SCHEDOP_shutdown:SHUTDOWN_suspend <==== (00000000)
> xen_platform_log xen platform: SHARED_INFO: MAP 
> XENMAPSPACE_shared_info @ 00000000.f8000000
> xen_ram_alloc: do not alloc 40000 bytes of ram at 80012000 when 
> runstate is INMIGRATE
> red_dispatcher_loadvm_commands:
> xen_platform_log xen platform: SUSPEND: 
> SCHEDOP_shutdown:SHUTDOWN_suspend <==== (00000000)
> xen_platform_log xen platform: SHARED_INFO: MAP 
> XENMAPSPACE_shared_info @ 00000000.f8000000
> xen_platform_log xen platform: STORE: PAGE @ 00000000.feffc000
> xen_platform_log xen platform: GNTTAB: MAP XENMAPSPACE_grant_table[0] 
> @ 00000000.f8001000
> xen_platform_log xen platform: GNTTAB: MAP XENMAPSPACE_grant_table[1] 
> @ 00000000.f8002000
> xen_platform_log xen platform: XENVBD|FdoSuspendLateCallback:8.0.0.0 
> (24/9/2014)
> xen_platform_log xen platform: 
> XENVBD|FrontendSuspendLateCallback:Target[0] : ===> from ENABLED
> xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : 
> ENABLED ----> CLOSED
> xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : 
> in state CONNECTED
> xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : 
> in state CLOSING
> xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : 
> in state CLOSED
> xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : 
> CLOSED ----> ENABLED
> xen_platform_log xen platform: XENVBD|FrontendWriteUsage:Target[0] : 
> DUMP NOT_HIBER PAGE
> xen_platform_log xen platform: XENVBD|PdoUpdateInquiryData:Target[0] : 
> VDI-UUID = {00000000-0000-0000-0000-000000000000}
> xen_platform_log xen platform: XENVBD|FrontendPrepare:Target[0] : 
> BackendId 0 (/local/domain/0/backend/qdisk/4/768)
> xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : 
> in state PREPARED
> xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : 
> in state CONNECTED
> xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] : 
> in state ENABLED
> xen_platform_log xen platform: XENVBD|PdoPostResume:Target[0] : 0 
> Fresh SRBs
> xen_platform_log xen platform: XENVBD|PdoPostResume:Target[0] : 
> NOT_MISSING ((null))
> xen_platform_log xen platform: 
> XENVBD|FrontendSuspendLateCallback:Target[0] : <=== restored ENABLED
> xen_platform_log xen platform: XENIFACE|FireSuspendEvent: Ready to 
> unsuspend Event
> xen_platform_log xen platform: 
> XENVIF|__TransmitterRingPrepareNeighbourAdvertisement: 
> fe80:0000:0000:0000:9060:135e:65b9:57ba
> xen_platform_log xen platform: XENVIF|__TransmitterRingPrepareArp: 
> 192.168.1.25
> xen_platform_log xen platform: 
> XENVIF|__TransmitterRingPrepareNeighbourAdvertisement: 
> fe80:0000:0000:0000:9060:135e:65b9:57ba
> xen_platform_log xen platform: XENVIF|__TransmitterRingPrepareArp: 
> 192.168.1.25
> xen_platform_log xen platform: 
> XENVIF|__TransmitterRingPrepareNeighbourAdvertisement: 
> fe80:0000:0000:0000:9060:135e:65b9:57ba
> xen_platform_log xen platform: XENVIF|__TransmitterRingPrepareArp: 
> 192.168.1.25
> xen_platform_log xen platform: SUSPEND: <====
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: Fire 
> 00000000003BDA30
> xen_platform_log xen platform: XENNET|AdapterMediaStateChange: LINK: 
> UP: SPEED=1000000000 DUPLEX=FULL
> xen_platform_log xen platform: XENIFACE|WatchCallbackThread: 
> SessionSuspendResumeUnwatch FFFFFA8003594400
> xen_platform_log xen platform: XENIFACE|StartWatch: Start Watch 
> FFFFFA800303D730
> xen_platform_log xen platform: XENIFACE|FdoRegistryThreadHandler: 
> WriteRegistry
> xen_platform_log xen platform: 
> XENIFACE|FdoInitialiseXSRegistryEntries: no such xenstore key
> xen_platform_log xen platform: 
> XENIFACE|FdoInitialiseXSRegistryEntries: Failed to initialise registry 
> (c0000022)
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: fire 
> feature shutdown
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: Check 
> if we need to shutdown
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: No 
> need to shutdown
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: fired 
> feature shutdown
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: win 
> agent going to sleep
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: win 
> agent woke up for 2
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: 
> Suspend event
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: Set 
> time to XenTime
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: 
> hosttimeIsUTC: Open Registry Key
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: Time 
> is now  2014.10.22 12:22:57.771
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: Set 
> time to 2014.10.22 12:26:11.700
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: 
> WmiSessionSetEntry:MethodExec Failed
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: 
> WmiSessionSetEntry:SessionStart Failed
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: 
> WmiSessionSetEntry:SetVValue Failed
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: 
> WmiSessionSetEntry:SetVPath Failed
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: 
> Failed to advertise shutdown
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: 
> Handled suspend event
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: win 
> agent going to sleep
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: win 
> agent woke up for 3
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: Fire 
> 00000000003BDA30
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: fire 
> feature shutdown
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: Check 
> if we need to shutdown
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: No 
> need to shutdown
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: fired 
> feature shutdown
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: win 
> agent going to sleep
> ...skipping...
> xen_platform_log xen platform: XENIFACE|FireSuspendEvent: Ready to 
> unsuspend Event
> xen_platform_log xen platform: 
> XENVIF|__TransmitterRingPrepareNeighbourAdvertisement: 
> fe80:0000:0000:0000:9060:135e:65b9:57ba
> xen_platform_log xen platform: XENVIF|__TransmitterRingPrepareArp: 
> 192.168.1.25
> xen_platform_log xen platform: 
> XENVIF|__TransmitterRingPrepareNeighbourAdvertisement: 
> fe80:0000:0000:0000:9060:135e:65b9:57ba
> xen_platform_log xen platform: XENVIF|__TransmitterRingPrepareArp: 
> 192.168.1.25
> xen_platform_log xen platform: 
> XENVIF|__TransmitterRingPrepareNeighbourAdvertisement: 
> fe80:0000:0000:0000:9060:135e:65b9:57ba
> xen_platform_log xen platform: XENVIF|__TransmitterRingPrepareArp: 
> 192.168.1.25
> xen_platform_log xen platform: SUSPEND: <====
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: Fire 
> 00000000003BDA30
> xen_platform_log xen platform: XENNET|AdapterMediaStateChange: LINK: 
> UP: SPEED=1000000000 DUPLEX=FULL
> xen_platform_log xen platform: XENIFACE|WatchCallbackThread: 
> SessionSuspendResumeUnwatch FFFFFA8003594400
> xen_platform_log xen platform: XENIFACE|StartWatch: Start Watch 
> FFFFFA800303D730
> xen_platform_log xen platform: XENIFACE|FdoRegistryThreadHandler: 
> WriteRegistry
> xen_platform_log xen platform: 
> XENIFACE|FdoInitialiseXSRegistryEntries: no such xenstore key
> xen_platform_log xen platform: 
> XENIFACE|FdoInitialiseXSRegistryEntries: Failed to initialise registry 
> (c0000022)
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: fire 
> feature shutdown
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: Check 
> if we need to shutdown
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: No 
> need to shutdown
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: fired 
> feature shutdown
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: win 
> agent going to sleep
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: win 
> agent woke up for 2
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: 
> Suspend event
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: Set 
> time to XenTime
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: 
> hosttimeIsUTC: Open Registry Key
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: Time 
> is now  2014.10.22 12:22:57.771
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: Set 
> time to 2014.10.22 12:26:11.700
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: 
> WmiSessionSetEntry:MethodExec Failed
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: 
> WmiSessionSetEntry:SessionStart Failed
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: 
> WmiSessionSetEntry:SetVValue Failed
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: 
> WmiSessionSetEntry:SetVPath Failed
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: 
> Failed to advertise shutdown
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: 
> Handled suspend event
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: win 
> agent going to sleep
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: win 
> agent woke up for 3
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: Fire 
> 00000000003BDA30
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: fire 
> feature shutdown
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: Check 
> if we need to shutdown
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: No 
> need to shutdown
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: fired 
> feature shutdown
> xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: win 
> agent going to sleep
> main_channel_link: add main channel client
> main_channel_handle_parsed: agent start
> main_channel_handle_parsed: net test: latency 2.620000 ms, bitrate 
> 1742978723 bps (1662.234042 Mbps)
> inputs_connect: inputs channel client create
> red_dispatcher_set_cursor_peer:

And xl dmesg about the domU:
> (d3) HVM Loader
> (d3) Detected Xen v4.5-unstable
> (d3) Xenbus rings @0xfeffc000, event channel 1
> (d3) System requested SeaBIOS
> (d3) CPU speed is 2660 MHz
> (d3) Relocating guest memory for lowmem MMIO space disabled
> (XEN) irq.c:270: Dom3 PCI link 0 changed 0 -> 5
> (d3) PCI-ISA link 0 routed to IRQ5
> (XEN) irq.c:270: Dom3 PCI link 1 changed 0 -> 10
> (d3) PCI-ISA link 1 routed to IRQ10
> (XEN) irq.c:270: Dom3 PCI link 2 changed 0 -> 11
> (d3) PCI-ISA link 2 routed to IRQ11
> (XEN) irq.c:270: Dom3 PCI link 3 changed 0 -> 5
> (d3) PCI-ISA link 3 routed to IRQ5
> (d3) pci dev 01:3 INTA->IRQ10
> (d3) pci dev 02:0 INTA->IRQ11
> (d3) pci dev 03:0 INTA->IRQ5
> (d3) pci dev 04:0 INTA->IRQ5
> (d3) pci dev 05:0 INTA->IRQ10
> (d3) pci dev 06:0 INTA->IRQ11
> (d3) pci dev 1d:0 INTA->IRQ10
> (d3) pci dev 1d:1 INTB->IRQ11
> (d3) pci dev 1d:2 INTC->IRQ5
> (d3) pci dev 1d:7 INTD->IRQ5
> (d3) No RAM in high memory; setting high_mem resource base to 100000000
> (d3) pci dev 05:0 bar 10 size 004000000: 0f0000000
> (d3) pci dev 05:0 bar 14 size 004000000: 0f4000000
> (d3) pci dev 02:0 bar 14 size 001000000: 0f8000008
> (d3) pci dev 06:0 bar 30 size 000040000: 0f9000000
> (d3) pci dev 05:0 bar 30 size 000010000: 0f9040000
> (d3) pci dev 03:0 bar 10 size 000004000: 0f9050000
> (d3) pci dev 05:0 bar 18 size 000002000: 0f9054000
> (d3) pci dev 04:0 bar 14 size 000001000: 0f9056000
> (d3) pci dev 1d:7 bar 10 size 000001000: 0f9057000
> (d3) pci dev 02:0 bar 10 size 000000100: 00000c001
> (d3) pci dev 06:0 bar 10 size 000000100: 00000c101
> (d3) pci dev 06:0 bar 14 size 000000100: 0f9058000
> (d3) pci dev 04:0 bar 10 size 000000020: 00000c201
> (d3) pci dev 05:0 bar 1c size 000000020: 00000c221
> (d3) pci dev 1d:0 bar 20 size 000000020: 00000c241
> (d3) pci dev 1d:1 bar 20 size 000000020: 00000c261
> (d3) pci dev 1d:2 bar 20 size 000000020: 00000c281
> (d3) pci dev 01:1 bar 20 size 000000010: 00000c2a1
> (d3) Multiprocessor initialisation:
> (d3)  - CPU0 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8] ... done.
> (d3)  - CPU1 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8] ... done.
> (d3) Testing HVM environment:
> (d3)  - REP INSB across page boundaries ... passed
> (d3)  - GS base MSRs and SWAPGS ... passed
> (d3) Passed 2 of 2 tests
> (d3) Writing SMBIOS tables ...
> (d3) Loading SeaBIOS ...
> (d3) Creating MP tables ...
> (d3) Loading ACPI ...
> (d3) S3 disabled
> (d3) S4 disabled
> (d3) vm86 TSS at fc00a100
> (d3) BIOS map:
> (d3)  10000-100d3: Scratch space
> (d3)  c0000-fffff: Main BIOS
> (d3) E820 table:
> (d3)  [00]: 00000000:00000000 - 00000000:000a0000: RAM
> (d3)  HOLE: 00000000:000a0000 - 00000000:000c0000
> (d3)  [01]: 00000000:000c0000 - 00000000:00100000: RESERVED
> (d3)  [02]: 00000000:00100000 - 00000000:78000000: RAM
> (d3)  HOLE: 00000000:78000000 - 00000000:fc000000
> (d3)  [03]: 00000000:fc000000 - 00000001:00000000: RESERVED
> (d3) Invoking SeaBIOS ...
> (d3) SeaBIOS (version 
> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
> (d3)
> (d3) Found Xen hypervisor signature at 40000100
> (d3) Running on QEMU (i440fx)
> (d3) xen: copy e820...
> (d3) Relocating init from 0x000df619 to 0x77fae600 (size 71995)
> (d3) CPU Mhz=2661
> (d3) Found 13 PCI devices (max PCI bus is 00)
> (d3) Allocated Xen hypercall page at 77fff000
> (d3) Detected Xen v4.5-unstable
> (d3) xen: copy BIOS tables...
> (d3) Copying SMBIOS entry point from 0x00010010 to 0x000f0f40
> (d3) Copying MPTABLE from 0xfc001170/fc001180 to 0x000f0e40
> (d3) Copying PIR from 0x00010030 to 0x000f0dc0
> (d3) Copying ACPI RSDP from 0x000100b0 to 0x000f0d90
> (d3) Using pmtimer, ioport 0xb008
> (d3) Scan for VGA option rom
> (d3) Running option rom at c000:0003
> (XEN) stdvga.c:147:d3v0 entering stdvga and caching modes
> (d3) pmm call arg1=0
> (d3) Turning on vga text mode console
> (d3) SeaBIOS (version 
> debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
> (d3) Machine UUID 9c2cc4b2-6dc6-4baf-a708-474699ff6d98
> (d3) EHCI init on dev 00:1d.7 (regs=0xf9057020)
> (d3) Found 0 lpt ports
> (d3) Found 0 serial ports
> (d3) ATA controller 1 at 1f0/3f4/0 (irq 14 dev 9)
> (d3) ATA controller 2 at 170/374/0 (irq 15 dev 9)
> (d3) ata0-0: QEMU HARDDISK ATA-7 Hard-Disk (50000 MiBytes)
> (d3) Searching bootorder for: /pci@i0cf8/*@1,1/drive@0/disk@0
> (d3) DVD/CD [ata0-1: QEMU DVD-ROM ATAPI-4 DVD/CD]
> (d3) Searching bootorder for: /pci@i0cf8/*@1,1/drive@0/disk@1
> (d3) UHCI init on dev 00:1d.0 (io=c240)
> (d3) UHCI init on dev 00:1d.1 (io=c260)
> (d3) UHCI init on dev 00:1d.2 (io=c280)
> (d3) PS2 keyboard initialized
> (d3) All threads complete.
> (d3) Scan for option roms
> (d3) Running option rom at c980:0003
> (d3) pmm call arg1=1
> (d3) pmm call arg1=0
> (d3) pmm call arg1=1
> (d3) pmm call arg1=0
> (d3) Searching bootorder for: /pci@i0cf8/*@6
> (d3)
> (d3) Press F12 for boot menu.
> (d3)
> (d3) Searching bootorder for: HALT
> (d3) drive 0x000f0d40: PCHS=16383/16/63 translation=lba 
> LCHS=1024/255/63 s=102400000
> (d3)
> (d3) Space available for UMB: ca800-ee800, f0000-f0ce0
> (d3) Returned 258048 bytes of ZoneHigh
> (d3) e820 map has 6 items:
> (d3)   0: 0000000000000000 - 000000000009fc00 = 1 RAM
> (d3)   1: 000000000009fc00 - 00000000000a0000 = 2 RESERVED
> (d3)   2: 00000000000f0000 - 0000000000100000 = 2 RESERVED
> (d3)   3: 0000000000100000 - 0000000077fff000 = 1 RAM
> (d3)   4: 0000000077fff000 - 0000000078000000 = 2 RESERVED
> (d3)   5: 00000000fc000000 - 0000000100000000 = 2 RESERVED
> (d3) enter handle_19:
> (d3)   NULL
> (d3) Booting from DVD/CD...
> (d3) Device reports MEDIUM NOT PRESENT
> (d3) scsi_is_ready returned -1
> (d3) Boot failed: Could not read from CDROM (code 0003)
> (d3) enter handle_18:
> (d3)   NULL
> (d3) Booting from Hard Disk...
> (d3) Booting from 0000:7c00
> (XEN) d3: VIRIDIAN GUEST_OS_ID: vendor: 1 os: 4 major: 6 minor: 1 sp: 
> 1 build: 1db1
> (XEN) d3: VIRIDIAN HYPERCALL: enabled: 1 pfn: 3ffff
> (XEN) d3v0: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffe
> (XEN) d3v1: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffd
> (XEN) irq.c:270: Dom3 PCI link 0 changed 5 -> 0
> (XEN) irq.c:270: Dom3 PCI link 1 changed 10 -> 0
> (XEN) irq.c:270: Dom3 PCI link 2 changed 11 -> 0
> (XEN) irq.c:270: Dom3 PCI link 3 changed 5 -> 0
> (XEN) irq.c:380: Dom3 callback via changed to GSI 24
> (XEN) HVM3 save: CPU
> (XEN) HVM3 save: PIC
> (XEN) HVM3 save: IOAPIC
> (XEN) HVM3 save: LAPIC
> (XEN) HVM3 save: LAPIC_REGS
> (XEN) HVM3 save: PCI_IRQ
> (XEN) HVM3 save: ISA_IRQ
> (XEN) HVM3 save: PCI_LINK
> (XEN) HVM3 save: PIT
> (XEN) HVM3 save: RTC
> (XEN) HVM3 save: HPET
> (XEN) HVM3 save: PMTIMER
> (XEN) HVM3 save: MTRR
> (XEN) HVM3 save: VIRIDIAN_DOMAIN
> (XEN) HVM3 save: CPU_XSAVE
> (XEN) HVM3 save: VIRIDIAN_VCPU
> (XEN) HVM3 save: VMCE_VCPU
> (XEN) HVM3 save: TSC_ADJUST
> (XEN) HVM4 restore: CPU 0
> (XEN) HVM4 restore: CPU 1
> (XEN) HVM4 restore: PIC 0
> (XEN) HVM4 restore: PIC 1
> (XEN) HVM4 restore: IOAPIC 0
> (XEN) HVM4 restore: LAPIC 0
> (XEN) HVM4 restore: LAPIC 1
> (XEN) HVM4 restore: LAPIC_REGS 0
> (XEN) HVM4 restore: LAPIC_REGS 1
> (XEN) HVM4 restore: PCI_IRQ 0
> (XEN) HVM4 restore: ISA_IRQ 0
> (XEN) HVM4 restore: PCI_LINK 0
> (XEN) HVM4 restore: PIT 0
> (XEN) HVM4 restore: RTC 0
> (XEN) HVM4 restore: HPET 0
> (XEN) HVM4 restore: PMTIMER 0
> (XEN) HVM4 restore: MTRR 0
> (XEN) HVM4 restore: MTRR 1
> (XEN) HVM4 restore: VIRIDIAN_DOMAIN 0
> (XEN) HVM4 restore: VIRIDIAN_VCPU 0
> (XEN) HVM4 restore: VIRIDIAN_VCPU 1
> (XEN) HVM4 restore: VMCE_VCPU 0
> (XEN) HVM4 restore: VMCE_VCPU 1
> (XEN) HVM4 restore: TSC_ADJUST 0
> (XEN) HVM4 restore: TSC_ADJUST 1
> (XEN) irq.c:380: Dom4 callback via changed to GSI 24



_______________________________________________
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 Oct 22 12:17:27 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 22 Oct 2014 12:17:27 +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 1Xgur0-0000Pj-Sv; Wed, 22 Oct 2014 12:17:26 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <Paul.Durrant@citrix.com>) id 1Xgur0-0000PQ-09
	for win-pv-devel@lists.xenproject.org; Wed, 22 Oct 2014 12:17:26 +0000
Received: from [193.109.254.147:19037] by server-4.bemta-14.messagelabs.com id
	6A/9B-01677-550A7445; Wed, 22 Oct 2014 12:17:25 +0000
X-Env-Sender: Paul.Durrant@citrix.com
X-Msg-Ref: server-10.tower-27.messagelabs.com!1413980243!11822100!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: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 31336 invoked from network); 22 Oct 2014 12:17:23 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-10.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	22 Oct 2014 12:17:23 -0000
X-IronPort-AV: E=Sophos;i="5.04,768,1406592000"; d="scan'208";a="26160532"
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: Question about strange things in windows 7 domUs save/restore
Thread-Index: AQHP7eVDjWoUQ/c0lUOnKEh5Kfq9m5w8B4oQ
Date: Wed, 22 Oct 2014 12:17:21 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD011130D03@AMSPEX01CL01.citrite.net>
References: <54478AB9.8080508@m2r.biz>
In-Reply-To: <54478AB9.8080508@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: Anthony Perard <anthony.perard@citrix.com>,
	xen-devel <xen-devel@lists.xensource.com>,
	Stefano Stabellini <Stefano.Stabellini@citrix.com>
Subject: Re: [win-pv-devel] Question about strange things in windows 7 domUs
	save/restore
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: 22 October 2014 11:45
> To: win-pv-devel@lists.xenproject.org
> Cc: xen-devel; Paul Durrant; Stefano Stabellini; Anthony Perard
> Subject: Question about strange things in windows 7 domUs save/restore
> 
> Trying new windows pv drivers I found in qemu log with xen platform
> trace enabled a strange thing:
> > xen_platform_log xen platform: XENIFACE|FdoRegistryThreadHandler:
> > WriteRegistry
> > xen_platform_log xen platform:
> > XENIFACE|FdoInitialiseXSRegistryEntries: no such xenstore key
> > xen_platform_log xen platform:
> > XENIFACE|FdoInitialiseXSRegistryEntries: Failed to initialise registry
> > (c0000022)
> 
> Is there something to remove or add? (probably about xen hypervisor-only
> systems)
>

I think those warnings are harmless. The layout of xenstore is slightly different with a XAPI toolstack (i.e. on XenServer) than with a libxl toolstack. XenIface was originally designed for use with XenServer and so you'll see this sort of warning on upstream. Everything should still function though.
 
> ---
> 
> I'm also trying for a long time to solve one stringe problem of 2-3
> minutes "windows freeze" with qxl after restore and using spice.
> These memory areas that seems not restored can be the cause of this
> problem?
> > xen_ram_alloc: do not alloc 78000000 bytes of ram at 0 when runstate
> > is INMIGRATE
> > xen_ram_alloc: do not alloc 4000000 bytes of ram at 78000000 when
> > runstate is INMIGRATE
> > xen_ram_alloc: do not alloc 2000 bytes of ram at 7c000000 when
> > runstate is INMIGRATE
> > xen_ram_alloc: do not alloc 4000000 bytes of ram at 7c002000 when
> > runstate is INMIGRATE
> > xen_ram_alloc: do not alloc 10000 bytes of ram at 80002000 when
> > runstate is INMIGRATE
> > xen_ram_alloc: do not alloc 40000 bytes of ram at 80012000 when
> > runstate is INMIGRATE
> 
> If you need more informations and/or tests tell me and I'll post them.
> 

Not my area really. I suggest you ask on xen-devel/qemu-devel.

  Paul

> Thanks for any reply and sorry for my bad english.
> 
> 
> Here the full qemu log after restore:
> > less /var/log/xen/qemu-dm-W7-02.log
> > xen_ram_alloc: do not alloc 78000000 bytes of ram at 0 when runstate
> > is INMIGRATE
> > xen_ram_alloc: do not alloc 4000000 bytes of ram at 78000000 when
> > runstate is INMIGRATE
> > xen_ram_alloc: do not alloc 2000 bytes of ram at 7c000000 when
> > runstate is INMIGRATE
> > xen_ram_alloc: do not alloc 4000000 bytes of ram at 7c002000 when
> > runstate is INMIGRATE
> > xen_ram_alloc: do not alloc 10000 bytes of ram at 80002000 when
> > runstate is INMIGRATE
> > xen_ram_alloc: do not alloc 40000 bytes of ram at 80012000 when
> > runstate is INMIGRATE
> > red_dispatcher_loadvm_commands:
> > xen_platform_log xen platform: SUSPEND:
> > SCHEDOP_shutdown:SHUTDOWN_suspend <==== (00000000)
> > xen_platform_log xen platform: SHARED_INFO: MAP
> > XENMAPSPACE_shared_info @ 00000000.f8000000
> > xen_platform_log xen platform: STORE: PAGE @ 00000000.feffc000
> > xen_platform_log xen platform: GNTTAB: MAP
> XENMAPSPACE_grant_table[0]
> > @ 00000000.f8001000
> > xen_platform_log xen platform: GNTTAB: MAP
> XENMAPSPACE_grant_table[1]
> > @ 00000000.f8002000
> > xen_platform_log xen platform: XENVBD|FdoSuspendLateCallback:8.0.0.0
> > (24/9/2014)
> > xen_platform_log xen platform:
> > XENVBD|FrontendSuspendLateCallback:Target[0] : ===> from ENABLED
> > xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] :
> > ENABLED ----> CLOSED
> > xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] :
> > in state CONNECTED
> > xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] :
> > in state CLOSING
> > xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] :
> > in state CLOSED
> > xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] :
> > CLOSED ----> ENABLED
> > xen_platform_log xen platform: XENVBD|FrontendWriteUsage:Target[0] :
> > DUMP NOT_HIBER PAGE
> > xen_platform_log xen platform: XENVBD|PdoUpdateInquiryData:Target[0]
> :
> > VDI-UUID = {00000000-0000-0000-0000-000000000000}
> > xen_ram_alloc: do not alloc 78000000 bytes of ram at 0 when runstate
> > is INMIGRATE
> > xen_ram_alloc: do not alloc 4000000 bytes of ram at 78000000 when
> > runstate is INMIGRATE
> > xen_ram_alloc: do not alloc 2000 bytes of ram at 7c000000 when
> > runstate is INMIGRATE
> > xen_ram_alloc: do not alloc 4000000 bytes of ram at 7c002000 when
> > runstate is INMIGRATE
> > xen_ram_alloc: do not alloc 10000 bytes of ram at 80002000 when
> > runstate is INMIGRATE
> > xen_ram_alloc: do not alloc 40000 bytes of ram at 80012000 when
> > runstate is INMIGRATE
> > red_dispatcher_loadvm_commands:
> > xen_platform_log xen platform: SUSPEND:
> > SCHEDOP_shutdown:SHUTDOWN_suspend <==== (00000000)
> > xen_platform_log xen platform: SHARED_INFO: MAP
> > XENMAPSPACE_shared_info @ 00000000.f8000000
> > xen_ram_alloc: do not alloc 40000 bytes of ram at 80012000 when
> > runstate is INMIGRATE
> > red_dispatcher_loadvm_commands:
> > xen_platform_log xen platform: SUSPEND:
> > SCHEDOP_shutdown:SHUTDOWN_suspend <==== (00000000)
> > xen_platform_log xen platform: SHARED_INFO: MAP
> > XENMAPSPACE_shared_info @ 00000000.f8000000
> > xen_platform_log xen platform: STORE: PAGE @ 00000000.feffc000
> > xen_platform_log xen platform: GNTTAB: MAP
> XENMAPSPACE_grant_table[0]
> > @ 00000000.f8001000
> > xen_platform_log xen platform: GNTTAB: MAP
> XENMAPSPACE_grant_table[1]
> > @ 00000000.f8002000
> > xen_platform_log xen platform: XENVBD|FdoSuspendLateCallback:8.0.0.0
> > (24/9/2014)
> > xen_platform_log xen platform:
> > XENVBD|FrontendSuspendLateCallback:Target[0] : ===> from ENABLED
> > xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] :
> > ENABLED ----> CLOSED
> > xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] :
> > in state CONNECTED
> > xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] :
> > in state CLOSING
> > xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] :
> > in state CLOSED
> > xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] :
> > CLOSED ----> ENABLED
> > xen_platform_log xen platform: XENVBD|FrontendWriteUsage:Target[0] :
> > DUMP NOT_HIBER PAGE
> > xen_platform_log xen platform: XENVBD|PdoUpdateInquiryData:Target[0]
> :
> > VDI-UUID = {00000000-0000-0000-0000-000000000000}
> > xen_platform_log xen platform: XENVBD|FrontendPrepare:Target[0] :
> > BackendId 0 (/local/domain/0/backend/qdisk/4/768)
> > xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] :
> > in state PREPARED
> > xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] :
> > in state CONNECTED
> > xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] :
> > in state ENABLED
> > xen_platform_log xen platform: XENVBD|PdoPostResume:Target[0] : 0
> > Fresh SRBs
> > xen_platform_log xen platform: XENVBD|PdoPostResume:Target[0] :
> > NOT_MISSING ((null))
> > xen_platform_log xen platform:
> > XENVBD|FrontendSuspendLateCallback:Target[0] : <=== restored
> ENABLED
> > xen_platform_log xen platform: XENIFACE|FireSuspendEvent: Ready to
> > unsuspend Event
> > xen_platform_log xen platform:
> > XENVIF|__TransmitterRingPrepareNeighbourAdvertisement:
> > fe80:0000:0000:0000:9060:135e:65b9:57ba
> > xen_platform_log xen platform: XENVIF|__TransmitterRingPrepareArp:
> > 192.168.1.25
> > xen_platform_log xen platform:
> > XENVIF|__TransmitterRingPrepareNeighbourAdvertisement:
> > fe80:0000:0000:0000:9060:135e:65b9:57ba
> > xen_platform_log xen platform: XENVIF|__TransmitterRingPrepareArp:
> > 192.168.1.25
> > xen_platform_log xen platform:
> > XENVIF|__TransmitterRingPrepareNeighbourAdvertisement:
> > fe80:0000:0000:0000:9060:135e:65b9:57ba
> > xen_platform_log xen platform: XENVIF|__TransmitterRingPrepareArp:
> > 192.168.1.25
> > xen_platform_log xen platform: SUSPEND: <====
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: Fire
> > 00000000003BDA30
> > xen_platform_log xen platform: XENNET|AdapterMediaStateChange:
> LINK:
> > UP: SPEED=1000000000 DUPLEX=FULL
> > xen_platform_log xen platform: XENIFACE|WatchCallbackThread:
> > SessionSuspendResumeUnwatch FFFFFA8003594400
> > xen_platform_log xen platform: XENIFACE|StartWatch: Start Watch
> > FFFFFA800303D730
> > xen_platform_log xen platform: XENIFACE|FdoRegistryThreadHandler:
> > WriteRegistry
> > xen_platform_log xen platform:
> > XENIFACE|FdoInitialiseXSRegistryEntries: no such xenstore key
> > xen_platform_log xen platform:
> > XENIFACE|FdoInitialiseXSRegistryEntries: Failed to initialise registry
> > (c0000022)
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: fire
> > feature shutdown
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER:
> Check
> > if we need to shutdown
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: No
> > need to shutdown
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: fired
> > feature shutdown
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: win
> > agent going to sleep
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: win
> > agent woke up for 2
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER:
> > Suspend event
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: Set
> > time to XenTime
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER:
> > hosttimeIsUTC: Open Registry Key
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: Time
> > is now  2014.10.22 12:22:57.771
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: Set
> > time to 2014.10.22 12:26:11.700
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER:
> > WmiSessionSetEntry:MethodExec Failed
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER:
> > WmiSessionSetEntry:SessionStart Failed
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER:
> > WmiSessionSetEntry:SetVValue Failed
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER:
> > WmiSessionSetEntry:SetVPath Failed
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER:
> > Failed to advertise shutdown
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER:
> > Handled suspend event
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: win
> > agent going to sleep
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: win
> > agent woke up for 3
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: Fire
> > 00000000003BDA30
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: fire
> > feature shutdown
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER:
> Check
> > if we need to shutdown
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: No
> > need to shutdown
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: fired
> > feature shutdown
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: win
> > agent going to sleep
> > ...skipping...
> > xen_platform_log xen platform: XENIFACE|FireSuspendEvent: Ready to
> > unsuspend Event
> > xen_platform_log xen platform:
> > XENVIF|__TransmitterRingPrepareNeighbourAdvertisement:
> > fe80:0000:0000:0000:9060:135e:65b9:57ba
> > xen_platform_log xen platform: XENVIF|__TransmitterRingPrepareArp:
> > 192.168.1.25
> > xen_platform_log xen platform:
> > XENVIF|__TransmitterRingPrepareNeighbourAdvertisement:
> > fe80:0000:0000:0000:9060:135e:65b9:57ba
> > xen_platform_log xen platform: XENVIF|__TransmitterRingPrepareArp:
> > 192.168.1.25
> > xen_platform_log xen platform:
> > XENVIF|__TransmitterRingPrepareNeighbourAdvertisement:
> > fe80:0000:0000:0000:9060:135e:65b9:57ba
> > xen_platform_log xen platform: XENVIF|__TransmitterRingPrepareArp:
> > 192.168.1.25
> > xen_platform_log xen platform: SUSPEND: <====
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: Fire
> > 00000000003BDA30
> > xen_platform_log xen platform: XENNET|AdapterMediaStateChange:
> LINK:
> > UP: SPEED=1000000000 DUPLEX=FULL
> > xen_platform_log xen platform: XENIFACE|WatchCallbackThread:
> > SessionSuspendResumeUnwatch FFFFFA8003594400
> > xen_platform_log xen platform: XENIFACE|StartWatch: Start Watch
> > FFFFFA800303D730
> > xen_platform_log xen platform: XENIFACE|FdoRegistryThreadHandler:
> > WriteRegistry
> > xen_platform_log xen platform:
> > XENIFACE|FdoInitialiseXSRegistryEntries: no such xenstore key
> > xen_platform_log xen platform:
> > XENIFACE|FdoInitialiseXSRegistryEntries: Failed to initialise registry
> > (c0000022)
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: fire
> > feature shutdown
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER:
> Check
> > if we need to shutdown
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: No
> > need to shutdown
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: fired
> > feature shutdown
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: win
> > agent going to sleep
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: win
> > agent woke up for 2
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER:
> > Suspend event
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: Set
> > time to XenTime
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER:
> > hosttimeIsUTC: Open Registry Key
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: Time
> > is now  2014.10.22 12:22:57.771
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: Set
> > time to 2014.10.22 12:26:11.700
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER:
> > WmiSessionSetEntry:MethodExec Failed
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER:
> > WmiSessionSetEntry:SessionStart Failed
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER:
> > WmiSessionSetEntry:SetVValue Failed
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER:
> > WmiSessionSetEntry:SetVPath Failed
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER:
> > Failed to advertise shutdown
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER:
> > Handled suspend event
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: win
> > agent going to sleep
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: win
> > agent woke up for 3
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: Fire
> > 00000000003BDA30
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: fire
> > feature shutdown
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER:
> Check
> > if we need to shutdown
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: No
> > need to shutdown
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: fired
> > feature shutdown
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: win
> > agent going to sleep
> > main_channel_link: add main channel client
> > main_channel_handle_parsed: agent start
> > main_channel_handle_parsed: net test: latency 2.620000 ms, bitrate
> > 1742978723 bps (1662.234042 Mbps)
> > inputs_connect: inputs channel client create
> > red_dispatcher_set_cursor_peer:
> 
> And xl dmesg about the domU:
> > (d3) HVM Loader
> > (d3) Detected Xen v4.5-unstable
> > (d3) Xenbus rings @0xfeffc000, event channel 1
> > (d3) System requested SeaBIOS
> > (d3) CPU speed is 2660 MHz
> > (d3) Relocating guest memory for lowmem MMIO space disabled
> > (XEN) irq.c:270: Dom3 PCI link 0 changed 0 -> 5
> > (d3) PCI-ISA link 0 routed to IRQ5
> > (XEN) irq.c:270: Dom3 PCI link 1 changed 0 -> 10
> > (d3) PCI-ISA link 1 routed to IRQ10
> > (XEN) irq.c:270: Dom3 PCI link 2 changed 0 -> 11
> > (d3) PCI-ISA link 2 routed to IRQ11
> > (XEN) irq.c:270: Dom3 PCI link 3 changed 0 -> 5
> > (d3) PCI-ISA link 3 routed to IRQ5
> > (d3) pci dev 01:3 INTA->IRQ10
> > (d3) pci dev 02:0 INTA->IRQ11
> > (d3) pci dev 03:0 INTA->IRQ5
> > (d3) pci dev 04:0 INTA->IRQ5
> > (d3) pci dev 05:0 INTA->IRQ10
> > (d3) pci dev 06:0 INTA->IRQ11
> > (d3) pci dev 1d:0 INTA->IRQ10
> > (d3) pci dev 1d:1 INTB->IRQ11
> > (d3) pci dev 1d:2 INTC->IRQ5
> > (d3) pci dev 1d:7 INTD->IRQ5
> > (d3) No RAM in high memory; setting high_mem resource base to
> 100000000
> > (d3) pci dev 05:0 bar 10 size 004000000: 0f0000000
> > (d3) pci dev 05:0 bar 14 size 004000000: 0f4000000
> > (d3) pci dev 02:0 bar 14 size 001000000: 0f8000008
> > (d3) pci dev 06:0 bar 30 size 000040000: 0f9000000
> > (d3) pci dev 05:0 bar 30 size 000010000: 0f9040000
> > (d3) pci dev 03:0 bar 10 size 000004000: 0f9050000
> > (d3) pci dev 05:0 bar 18 size 000002000: 0f9054000
> > (d3) pci dev 04:0 bar 14 size 000001000: 0f9056000
> > (d3) pci dev 1d:7 bar 10 size 000001000: 0f9057000
> > (d3) pci dev 02:0 bar 10 size 000000100: 00000c001
> > (d3) pci dev 06:0 bar 10 size 000000100: 00000c101
> > (d3) pci dev 06:0 bar 14 size 000000100: 0f9058000
> > (d3) pci dev 04:0 bar 10 size 000000020: 00000c201
> > (d3) pci dev 05:0 bar 1c size 000000020: 00000c221
> > (d3) pci dev 1d:0 bar 20 size 000000020: 00000c241
> > (d3) pci dev 1d:1 bar 20 size 000000020: 00000c261
> > (d3) pci dev 1d:2 bar 20 size 000000020: 00000c281
> > (d3) pci dev 01:1 bar 20 size 000000010: 00000c2a1
> > (d3) Multiprocessor initialisation:
> > (d3)  - CPU0 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8] ... done.
> > (d3)  - CPU1 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8] ... done.
> > (d3) Testing HVM environment:
> > (d3)  - REP INSB across page boundaries ... passed
> > (d3)  - GS base MSRs and SWAPGS ... passed
> > (d3) Passed 2 of 2 tests
> > (d3) Writing SMBIOS tables ...
> > (d3) Loading SeaBIOS ...
> > (d3) Creating MP tables ...
> > (d3) Loading ACPI ...
> > (d3) S3 disabled
> > (d3) S4 disabled
> > (d3) vm86 TSS at fc00a100
> > (d3) BIOS map:
> > (d3)  10000-100d3: Scratch space
> > (d3)  c0000-fffff: Main BIOS
> > (d3) E820 table:
> > (d3)  [00]: 00000000:00000000 - 00000000:000a0000: RAM
> > (d3)  HOLE: 00000000:000a0000 - 00000000:000c0000
> > (d3)  [01]: 00000000:000c0000 - 00000000:00100000: RESERVED
> > (d3)  [02]: 00000000:00100000 - 00000000:78000000: RAM
> > (d3)  HOLE: 00000000:78000000 - 00000000:fc000000
> > (d3)  [03]: 00000000:fc000000 - 00000001:00000000: RESERVED
> > (d3) Invoking SeaBIOS ...
> > (d3) SeaBIOS (version
> > debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
> > (d3)
> > (d3) Found Xen hypervisor signature at 40000100
> > (d3) Running on QEMU (i440fx)
> > (d3) xen: copy e820...
> > (d3) Relocating init from 0x000df619 to 0x77fae600 (size 71995)
> > (d3) CPU Mhz=2661
> > (d3) Found 13 PCI devices (max PCI bus is 00)
> > (d3) Allocated Xen hypercall page at 77fff000
> > (d3) Detected Xen v4.5-unstable
> > (d3) xen: copy BIOS tables...
> > (d3) Copying SMBIOS entry point from 0x00010010 to 0x000f0f40
> > (d3) Copying MPTABLE from 0xfc001170/fc001180 to 0x000f0e40
> > (d3) Copying PIR from 0x00010030 to 0x000f0dc0
> > (d3) Copying ACPI RSDP from 0x000100b0 to 0x000f0d90
> > (d3) Using pmtimer, ioport 0xb008
> > (d3) Scan for VGA option rom
> > (d3) Running option rom at c000:0003
> > (XEN) stdvga.c:147:d3v0 entering stdvga and caching modes
> > (d3) pmm call arg1=0
> > (d3) Turning on vga text mode console
> > (d3) SeaBIOS (version
> > debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
> > (d3) Machine UUID 9c2cc4b2-6dc6-4baf-a708-474699ff6d98
> > (d3) EHCI init on dev 00:1d.7 (regs=0xf9057020)
> > (d3) Found 0 lpt ports
> > (d3) Found 0 serial ports
> > (d3) ATA controller 1 at 1f0/3f4/0 (irq 14 dev 9)
> > (d3) ATA controller 2 at 170/374/0 (irq 15 dev 9)
> > (d3) ata0-0: QEMU HARDDISK ATA-7 Hard-Disk (50000 MiBytes)
> > (d3) Searching bootorder for: /pci@i0cf8/*@1,1/drive@0/disk@0
> > (d3) DVD/CD [ata0-1: QEMU DVD-ROM ATAPI-4 DVD/CD]
> > (d3) Searching bootorder for: /pci@i0cf8/*@1,1/drive@0/disk@1
> > (d3) UHCI init on dev 00:1d.0 (io=c240)
> > (d3) UHCI init on dev 00:1d.1 (io=c260)
> > (d3) UHCI init on dev 00:1d.2 (io=c280)
> > (d3) PS2 keyboard initialized
> > (d3) All threads complete.
> > (d3) Scan for option roms
> > (d3) Running option rom at c980:0003
> > (d3) pmm call arg1=1
> > (d3) pmm call arg1=0
> > (d3) pmm call arg1=1
> > (d3) pmm call arg1=0
> > (d3) Searching bootorder for: /pci@i0cf8/*@6
> > (d3)
> > (d3) Press F12 for boot menu.
> > (d3)
> > (d3) Searching bootorder for: HALT
> > (d3) drive 0x000f0d40: PCHS=16383/16/63 translation=lba
> > LCHS=1024/255/63 s=102400000
> > (d3)
> > (d3) Space available for UMB: ca800-ee800, f0000-f0ce0
> > (d3) Returned 258048 bytes of ZoneHigh
> > (d3) e820 map has 6 items:
> > (d3)   0: 0000000000000000 - 000000000009fc00 = 1 RAM
> > (d3)   1: 000000000009fc00 - 00000000000a0000 = 2 RESERVED
> > (d3)   2: 00000000000f0000 - 0000000000100000 = 2 RESERVED
> > (d3)   3: 0000000000100000 - 0000000077fff000 = 1 RAM
> > (d3)   4: 0000000077fff000 - 0000000078000000 = 2 RESERVED
> > (d3)   5: 00000000fc000000 - 0000000100000000 = 2 RESERVED
> > (d3) enter handle_19:
> > (d3)   NULL
> > (d3) Booting from DVD/CD...
> > (d3) Device reports MEDIUM NOT PRESENT
> > (d3) scsi_is_ready returned -1
> > (d3) Boot failed: Could not read from CDROM (code 0003)
> > (d3) enter handle_18:
> > (d3)   NULL
> > (d3) Booting from Hard Disk...
> > (d3) Booting from 0000:7c00
> > (XEN) d3: VIRIDIAN GUEST_OS_ID: vendor: 1 os: 4 major: 6 minor: 1 sp:
> > 1 build: 1db1
> > (XEN) d3: VIRIDIAN HYPERCALL: enabled: 1 pfn: 3ffff
> > (XEN) d3v0: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffe
> > (XEN) d3v1: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffd
> > (XEN) irq.c:270: Dom3 PCI link 0 changed 5 -> 0
> > (XEN) irq.c:270: Dom3 PCI link 1 changed 10 -> 0
> > (XEN) irq.c:270: Dom3 PCI link 2 changed 11 -> 0
> > (XEN) irq.c:270: Dom3 PCI link 3 changed 5 -> 0
> > (XEN) irq.c:380: Dom3 callback via changed to GSI 24
> > (XEN) HVM3 save: CPU
> > (XEN) HVM3 save: PIC
> > (XEN) HVM3 save: IOAPIC
> > (XEN) HVM3 save: LAPIC
> > (XEN) HVM3 save: LAPIC_REGS
> > (XEN) HVM3 save: PCI_IRQ
> > (XEN) HVM3 save: ISA_IRQ
> > (XEN) HVM3 save: PCI_LINK
> > (XEN) HVM3 save: PIT
> > (XEN) HVM3 save: RTC
> > (XEN) HVM3 save: HPET
> > (XEN) HVM3 save: PMTIMER
> > (XEN) HVM3 save: MTRR
> > (XEN) HVM3 save: VIRIDIAN_DOMAIN
> > (XEN) HVM3 save: CPU_XSAVE
> > (XEN) HVM3 save: VIRIDIAN_VCPU
> > (XEN) HVM3 save: VMCE_VCPU
> > (XEN) HVM3 save: TSC_ADJUST
> > (XEN) HVM4 restore: CPU 0
> > (XEN) HVM4 restore: CPU 1
> > (XEN) HVM4 restore: PIC 0
> > (XEN) HVM4 restore: PIC 1
> > (XEN) HVM4 restore: IOAPIC 0
> > (XEN) HVM4 restore: LAPIC 0
> > (XEN) HVM4 restore: LAPIC 1
> > (XEN) HVM4 restore: LAPIC_REGS 0
> > (XEN) HVM4 restore: LAPIC_REGS 1
> > (XEN) HVM4 restore: PCI_IRQ 0
> > (XEN) HVM4 restore: ISA_IRQ 0
> > (XEN) HVM4 restore: PCI_LINK 0
> > (XEN) HVM4 restore: PIT 0
> > (XEN) HVM4 restore: RTC 0
> > (XEN) HVM4 restore: HPET 0
> > (XEN) HVM4 restore: PMTIMER 0
> > (XEN) HVM4 restore: MTRR 0
> > (XEN) HVM4 restore: MTRR 1
> > (XEN) HVM4 restore: VIRIDIAN_DOMAIN 0
> > (XEN) HVM4 restore: VIRIDIAN_VCPU 0
> > (XEN) HVM4 restore: VIRIDIAN_VCPU 1
> > (XEN) HVM4 restore: VMCE_VCPU 0
> > (XEN) HVM4 restore: VMCE_VCPU 1
> > (XEN) HVM4 restore: TSC_ADJUST 0
> > (XEN) HVM4 restore: TSC_ADJUST 1
> > (XEN) irq.c:380: Dom4 callback via changed to GSI 24
> 


_______________________________________________
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 Oct 22 12:17:27 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 22 Oct 2014 12:17:27 +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 1Xgur0-0000Pj-Sv; Wed, 22 Oct 2014 12:17:26 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <Paul.Durrant@citrix.com>) id 1Xgur0-0000PQ-09
	for win-pv-devel@lists.xenproject.org; Wed, 22 Oct 2014 12:17:26 +0000
Received: from [193.109.254.147:19037] by server-4.bemta-14.messagelabs.com id
	6A/9B-01677-550A7445; Wed, 22 Oct 2014 12:17:25 +0000
X-Env-Sender: Paul.Durrant@citrix.com
X-Msg-Ref: server-10.tower-27.messagelabs.com!1413980243!11822100!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: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 31336 invoked from network); 22 Oct 2014 12:17:23 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-10.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	22 Oct 2014 12:17:23 -0000
X-IronPort-AV: E=Sophos;i="5.04,768,1406592000"; d="scan'208";a="26160532"
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: Question about strange things in windows 7 domUs save/restore
Thread-Index: AQHP7eVDjWoUQ/c0lUOnKEh5Kfq9m5w8B4oQ
Date: Wed, 22 Oct 2014 12:17:21 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD011130D03@AMSPEX01CL01.citrite.net>
References: <54478AB9.8080508@m2r.biz>
In-Reply-To: <54478AB9.8080508@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: Anthony Perard <anthony.perard@citrix.com>,
	xen-devel <xen-devel@lists.xensource.com>,
	Stefano Stabellini <Stefano.Stabellini@citrix.com>
Subject: Re: [win-pv-devel] Question about strange things in windows 7 domUs
	save/restore
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: 22 October 2014 11:45
> To: win-pv-devel@lists.xenproject.org
> Cc: xen-devel; Paul Durrant; Stefano Stabellini; Anthony Perard
> Subject: Question about strange things in windows 7 domUs save/restore
> 
> Trying new windows pv drivers I found in qemu log with xen platform
> trace enabled a strange thing:
> > xen_platform_log xen platform: XENIFACE|FdoRegistryThreadHandler:
> > WriteRegistry
> > xen_platform_log xen platform:
> > XENIFACE|FdoInitialiseXSRegistryEntries: no such xenstore key
> > xen_platform_log xen platform:
> > XENIFACE|FdoInitialiseXSRegistryEntries: Failed to initialise registry
> > (c0000022)
> 
> Is there something to remove or add? (probably about xen hypervisor-only
> systems)
>

I think those warnings are harmless. The layout of xenstore is slightly different with a XAPI toolstack (i.e. on XenServer) than with a libxl toolstack. XenIface was originally designed for use with XenServer and so you'll see this sort of warning on upstream. Everything should still function though.
 
> ---
> 
> I'm also trying for a long time to solve one stringe problem of 2-3
> minutes "windows freeze" with qxl after restore and using spice.
> These memory areas that seems not restored can be the cause of this
> problem?
> > xen_ram_alloc: do not alloc 78000000 bytes of ram at 0 when runstate
> > is INMIGRATE
> > xen_ram_alloc: do not alloc 4000000 bytes of ram at 78000000 when
> > runstate is INMIGRATE
> > xen_ram_alloc: do not alloc 2000 bytes of ram at 7c000000 when
> > runstate is INMIGRATE
> > xen_ram_alloc: do not alloc 4000000 bytes of ram at 7c002000 when
> > runstate is INMIGRATE
> > xen_ram_alloc: do not alloc 10000 bytes of ram at 80002000 when
> > runstate is INMIGRATE
> > xen_ram_alloc: do not alloc 40000 bytes of ram at 80012000 when
> > runstate is INMIGRATE
> 
> If you need more informations and/or tests tell me and I'll post them.
> 

Not my area really. I suggest you ask on xen-devel/qemu-devel.

  Paul

> Thanks for any reply and sorry for my bad english.
> 
> 
> Here the full qemu log after restore:
> > less /var/log/xen/qemu-dm-W7-02.log
> > xen_ram_alloc: do not alloc 78000000 bytes of ram at 0 when runstate
> > is INMIGRATE
> > xen_ram_alloc: do not alloc 4000000 bytes of ram at 78000000 when
> > runstate is INMIGRATE
> > xen_ram_alloc: do not alloc 2000 bytes of ram at 7c000000 when
> > runstate is INMIGRATE
> > xen_ram_alloc: do not alloc 4000000 bytes of ram at 7c002000 when
> > runstate is INMIGRATE
> > xen_ram_alloc: do not alloc 10000 bytes of ram at 80002000 when
> > runstate is INMIGRATE
> > xen_ram_alloc: do not alloc 40000 bytes of ram at 80012000 when
> > runstate is INMIGRATE
> > red_dispatcher_loadvm_commands:
> > xen_platform_log xen platform: SUSPEND:
> > SCHEDOP_shutdown:SHUTDOWN_suspend <==== (00000000)
> > xen_platform_log xen platform: SHARED_INFO: MAP
> > XENMAPSPACE_shared_info @ 00000000.f8000000
> > xen_platform_log xen platform: STORE: PAGE @ 00000000.feffc000
> > xen_platform_log xen platform: GNTTAB: MAP
> XENMAPSPACE_grant_table[0]
> > @ 00000000.f8001000
> > xen_platform_log xen platform: GNTTAB: MAP
> XENMAPSPACE_grant_table[1]
> > @ 00000000.f8002000
> > xen_platform_log xen platform: XENVBD|FdoSuspendLateCallback:8.0.0.0
> > (24/9/2014)
> > xen_platform_log xen platform:
> > XENVBD|FrontendSuspendLateCallback:Target[0] : ===> from ENABLED
> > xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] :
> > ENABLED ----> CLOSED
> > xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] :
> > in state CONNECTED
> > xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] :
> > in state CLOSING
> > xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] :
> > in state CLOSED
> > xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] :
> > CLOSED ----> ENABLED
> > xen_platform_log xen platform: XENVBD|FrontendWriteUsage:Target[0] :
> > DUMP NOT_HIBER PAGE
> > xen_platform_log xen platform: XENVBD|PdoUpdateInquiryData:Target[0]
> :
> > VDI-UUID = {00000000-0000-0000-0000-000000000000}
> > xen_ram_alloc: do not alloc 78000000 bytes of ram at 0 when runstate
> > is INMIGRATE
> > xen_ram_alloc: do not alloc 4000000 bytes of ram at 78000000 when
> > runstate is INMIGRATE
> > xen_ram_alloc: do not alloc 2000 bytes of ram at 7c000000 when
> > runstate is INMIGRATE
> > xen_ram_alloc: do not alloc 4000000 bytes of ram at 7c002000 when
> > runstate is INMIGRATE
> > xen_ram_alloc: do not alloc 10000 bytes of ram at 80002000 when
> > runstate is INMIGRATE
> > xen_ram_alloc: do not alloc 40000 bytes of ram at 80012000 when
> > runstate is INMIGRATE
> > red_dispatcher_loadvm_commands:
> > xen_platform_log xen platform: SUSPEND:
> > SCHEDOP_shutdown:SHUTDOWN_suspend <==== (00000000)
> > xen_platform_log xen platform: SHARED_INFO: MAP
> > XENMAPSPACE_shared_info @ 00000000.f8000000
> > xen_ram_alloc: do not alloc 40000 bytes of ram at 80012000 when
> > runstate is INMIGRATE
> > red_dispatcher_loadvm_commands:
> > xen_platform_log xen platform: SUSPEND:
> > SCHEDOP_shutdown:SHUTDOWN_suspend <==== (00000000)
> > xen_platform_log xen platform: SHARED_INFO: MAP
> > XENMAPSPACE_shared_info @ 00000000.f8000000
> > xen_platform_log xen platform: STORE: PAGE @ 00000000.feffc000
> > xen_platform_log xen platform: GNTTAB: MAP
> XENMAPSPACE_grant_table[0]
> > @ 00000000.f8001000
> > xen_platform_log xen platform: GNTTAB: MAP
> XENMAPSPACE_grant_table[1]
> > @ 00000000.f8002000
> > xen_platform_log xen platform: XENVBD|FdoSuspendLateCallback:8.0.0.0
> > (24/9/2014)
> > xen_platform_log xen platform:
> > XENVBD|FrontendSuspendLateCallback:Target[0] : ===> from ENABLED
> > xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] :
> > ENABLED ----> CLOSED
> > xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] :
> > in state CONNECTED
> > xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] :
> > in state CLOSING
> > xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] :
> > in state CLOSED
> > xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] :
> > CLOSED ----> ENABLED
> > xen_platform_log xen platform: XENVBD|FrontendWriteUsage:Target[0] :
> > DUMP NOT_HIBER PAGE
> > xen_platform_log xen platform: XENVBD|PdoUpdateInquiryData:Target[0]
> :
> > VDI-UUID = {00000000-0000-0000-0000-000000000000}
> > xen_platform_log xen platform: XENVBD|FrontendPrepare:Target[0] :
> > BackendId 0 (/local/domain/0/backend/qdisk/4/768)
> > xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] :
> > in state PREPARED
> > xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] :
> > in state CONNECTED
> > xen_platform_log xen platform: XENVBD|__FrontendSetState:Target[0] :
> > in state ENABLED
> > xen_platform_log xen platform: XENVBD|PdoPostResume:Target[0] : 0
> > Fresh SRBs
> > xen_platform_log xen platform: XENVBD|PdoPostResume:Target[0] :
> > NOT_MISSING ((null))
> > xen_platform_log xen platform:
> > XENVBD|FrontendSuspendLateCallback:Target[0] : <=== restored
> ENABLED
> > xen_platform_log xen platform: XENIFACE|FireSuspendEvent: Ready to
> > unsuspend Event
> > xen_platform_log xen platform:
> > XENVIF|__TransmitterRingPrepareNeighbourAdvertisement:
> > fe80:0000:0000:0000:9060:135e:65b9:57ba
> > xen_platform_log xen platform: XENVIF|__TransmitterRingPrepareArp:
> > 192.168.1.25
> > xen_platform_log xen platform:
> > XENVIF|__TransmitterRingPrepareNeighbourAdvertisement:
> > fe80:0000:0000:0000:9060:135e:65b9:57ba
> > xen_platform_log xen platform: XENVIF|__TransmitterRingPrepareArp:
> > 192.168.1.25
> > xen_platform_log xen platform:
> > XENVIF|__TransmitterRingPrepareNeighbourAdvertisement:
> > fe80:0000:0000:0000:9060:135e:65b9:57ba
> > xen_platform_log xen platform: XENVIF|__TransmitterRingPrepareArp:
> > 192.168.1.25
> > xen_platform_log xen platform: SUSPEND: <====
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: Fire
> > 00000000003BDA30
> > xen_platform_log xen platform: XENNET|AdapterMediaStateChange:
> LINK:
> > UP: SPEED=1000000000 DUPLEX=FULL
> > xen_platform_log xen platform: XENIFACE|WatchCallbackThread:
> > SessionSuspendResumeUnwatch FFFFFA8003594400
> > xen_platform_log xen platform: XENIFACE|StartWatch: Start Watch
> > FFFFFA800303D730
> > xen_platform_log xen platform: XENIFACE|FdoRegistryThreadHandler:
> > WriteRegistry
> > xen_platform_log xen platform:
> > XENIFACE|FdoInitialiseXSRegistryEntries: no such xenstore key
> > xen_platform_log xen platform:
> > XENIFACE|FdoInitialiseXSRegistryEntries: Failed to initialise registry
> > (c0000022)
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: fire
> > feature shutdown
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER:
> Check
> > if we need to shutdown
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: No
> > need to shutdown
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: fired
> > feature shutdown
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: win
> > agent going to sleep
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: win
> > agent woke up for 2
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER:
> > Suspend event
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: Set
> > time to XenTime
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER:
> > hosttimeIsUTC: Open Registry Key
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: Time
> > is now  2014.10.22 12:22:57.771
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: Set
> > time to 2014.10.22 12:26:11.700
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER:
> > WmiSessionSetEntry:MethodExec Failed
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER:
> > WmiSessionSetEntry:SessionStart Failed
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER:
> > WmiSessionSetEntry:SetVValue Failed
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER:
> > WmiSessionSetEntry:SetVPath Failed
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER:
> > Failed to advertise shutdown
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER:
> > Handled suspend event
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: win
> > agent going to sleep
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: win
> > agent woke up for 3
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: Fire
> > 00000000003BDA30
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: fire
> > feature shutdown
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER:
> Check
> > if we need to shutdown
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: No
> > need to shutdown
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: fired
> > feature shutdown
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: win
> > agent going to sleep
> > ...skipping...
> > xen_platform_log xen platform: XENIFACE|FireSuspendEvent: Ready to
> > unsuspend Event
> > xen_platform_log xen platform:
> > XENVIF|__TransmitterRingPrepareNeighbourAdvertisement:
> > fe80:0000:0000:0000:9060:135e:65b9:57ba
> > xen_platform_log xen platform: XENVIF|__TransmitterRingPrepareArp:
> > 192.168.1.25
> > xen_platform_log xen platform:
> > XENVIF|__TransmitterRingPrepareNeighbourAdvertisement:
> > fe80:0000:0000:0000:9060:135e:65b9:57ba
> > xen_platform_log xen platform: XENVIF|__TransmitterRingPrepareArp:
> > 192.168.1.25
> > xen_platform_log xen platform:
> > XENVIF|__TransmitterRingPrepareNeighbourAdvertisement:
> > fe80:0000:0000:0000:9060:135e:65b9:57ba
> > xen_platform_log xen platform: XENVIF|__TransmitterRingPrepareArp:
> > 192.168.1.25
> > xen_platform_log xen platform: SUSPEND: <====
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: Fire
> > 00000000003BDA30
> > xen_platform_log xen platform: XENNET|AdapterMediaStateChange:
> LINK:
> > UP: SPEED=1000000000 DUPLEX=FULL
> > xen_platform_log xen platform: XENIFACE|WatchCallbackThread:
> > SessionSuspendResumeUnwatch FFFFFA8003594400
> > xen_platform_log xen platform: XENIFACE|StartWatch: Start Watch
> > FFFFFA800303D730
> > xen_platform_log xen platform: XENIFACE|FdoRegistryThreadHandler:
> > WriteRegistry
> > xen_platform_log xen platform:
> > XENIFACE|FdoInitialiseXSRegistryEntries: no such xenstore key
> > xen_platform_log xen platform:
> > XENIFACE|FdoInitialiseXSRegistryEntries: Failed to initialise registry
> > (c0000022)
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: fire
> > feature shutdown
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER:
> Check
> > if we need to shutdown
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: No
> > need to shutdown
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: fired
> > feature shutdown
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: win
> > agent going to sleep
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: win
> > agent woke up for 2
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER:
> > Suspend event
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: Set
> > time to XenTime
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER:
> > hosttimeIsUTC: Open Registry Key
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: Time
> > is now  2014.10.22 12:22:57.771
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: Set
> > time to 2014.10.22 12:26:11.700
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER:
> > WmiSessionSetEntry:MethodExec Failed
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER:
> > WmiSessionSetEntry:SessionStart Failed
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER:
> > WmiSessionSetEntry:SetVValue Failed
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER:
> > WmiSessionSetEntry:SetVPath Failed
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER:
> > Failed to advertise shutdown
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER:
> > Handled suspend event
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: win
> > agent going to sleep
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: win
> > agent woke up for 3
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: Fire
> > 00000000003BDA30
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: fire
> > feature shutdown
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER:
> Check
> > if we need to shutdown
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: No
> > need to shutdown
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: fired
> > feature shutdown
> > xen_platform_log xen platform: XENIFACE|SessionExecuteLog: USER: win
> > agent going to sleep
> > main_channel_link: add main channel client
> > main_channel_handle_parsed: agent start
> > main_channel_handle_parsed: net test: latency 2.620000 ms, bitrate
> > 1742978723 bps (1662.234042 Mbps)
> > inputs_connect: inputs channel client create
> > red_dispatcher_set_cursor_peer:
> 
> And xl dmesg about the domU:
> > (d3) HVM Loader
> > (d3) Detected Xen v4.5-unstable
> > (d3) Xenbus rings @0xfeffc000, event channel 1
> > (d3) System requested SeaBIOS
> > (d3) CPU speed is 2660 MHz
> > (d3) Relocating guest memory for lowmem MMIO space disabled
> > (XEN) irq.c:270: Dom3 PCI link 0 changed 0 -> 5
> > (d3) PCI-ISA link 0 routed to IRQ5
> > (XEN) irq.c:270: Dom3 PCI link 1 changed 0 -> 10
> > (d3) PCI-ISA link 1 routed to IRQ10
> > (XEN) irq.c:270: Dom3 PCI link 2 changed 0 -> 11
> > (d3) PCI-ISA link 2 routed to IRQ11
> > (XEN) irq.c:270: Dom3 PCI link 3 changed 0 -> 5
> > (d3) PCI-ISA link 3 routed to IRQ5
> > (d3) pci dev 01:3 INTA->IRQ10
> > (d3) pci dev 02:0 INTA->IRQ11
> > (d3) pci dev 03:0 INTA->IRQ5
> > (d3) pci dev 04:0 INTA->IRQ5
> > (d3) pci dev 05:0 INTA->IRQ10
> > (d3) pci dev 06:0 INTA->IRQ11
> > (d3) pci dev 1d:0 INTA->IRQ10
> > (d3) pci dev 1d:1 INTB->IRQ11
> > (d3) pci dev 1d:2 INTC->IRQ5
> > (d3) pci dev 1d:7 INTD->IRQ5
> > (d3) No RAM in high memory; setting high_mem resource base to
> 100000000
> > (d3) pci dev 05:0 bar 10 size 004000000: 0f0000000
> > (d3) pci dev 05:0 bar 14 size 004000000: 0f4000000
> > (d3) pci dev 02:0 bar 14 size 001000000: 0f8000008
> > (d3) pci dev 06:0 bar 30 size 000040000: 0f9000000
> > (d3) pci dev 05:0 bar 30 size 000010000: 0f9040000
> > (d3) pci dev 03:0 bar 10 size 000004000: 0f9050000
> > (d3) pci dev 05:0 bar 18 size 000002000: 0f9054000
> > (d3) pci dev 04:0 bar 14 size 000001000: 0f9056000
> > (d3) pci dev 1d:7 bar 10 size 000001000: 0f9057000
> > (d3) pci dev 02:0 bar 10 size 000000100: 00000c001
> > (d3) pci dev 06:0 bar 10 size 000000100: 00000c101
> > (d3) pci dev 06:0 bar 14 size 000000100: 0f9058000
> > (d3) pci dev 04:0 bar 10 size 000000020: 00000c201
> > (d3) pci dev 05:0 bar 1c size 000000020: 00000c221
> > (d3) pci dev 1d:0 bar 20 size 000000020: 00000c241
> > (d3) pci dev 1d:1 bar 20 size 000000020: 00000c261
> > (d3) pci dev 1d:2 bar 20 size 000000020: 00000c281
> > (d3) pci dev 01:1 bar 20 size 000000010: 00000c2a1
> > (d3) Multiprocessor initialisation:
> > (d3)  - CPU0 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8] ... done.
> > (d3)  - CPU1 ... 36-bit phys ... fixed MTRRs ... var MTRRs [1/8] ... done.
> > (d3) Testing HVM environment:
> > (d3)  - REP INSB across page boundaries ... passed
> > (d3)  - GS base MSRs and SWAPGS ... passed
> > (d3) Passed 2 of 2 tests
> > (d3) Writing SMBIOS tables ...
> > (d3) Loading SeaBIOS ...
> > (d3) Creating MP tables ...
> > (d3) Loading ACPI ...
> > (d3) S3 disabled
> > (d3) S4 disabled
> > (d3) vm86 TSS at fc00a100
> > (d3) BIOS map:
> > (d3)  10000-100d3: Scratch space
> > (d3)  c0000-fffff: Main BIOS
> > (d3) E820 table:
> > (d3)  [00]: 00000000:00000000 - 00000000:000a0000: RAM
> > (d3)  HOLE: 00000000:000a0000 - 00000000:000c0000
> > (d3)  [01]: 00000000:000c0000 - 00000000:00100000: RESERVED
> > (d3)  [02]: 00000000:00100000 - 00000000:78000000: RAM
> > (d3)  HOLE: 00000000:78000000 - 00000000:fc000000
> > (d3)  [03]: 00000000:fc000000 - 00000001:00000000: RESERVED
> > (d3) Invoking SeaBIOS ...
> > (d3) SeaBIOS (version
> > debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
> > (d3)
> > (d3) Found Xen hypervisor signature at 40000100
> > (d3) Running on QEMU (i440fx)
> > (d3) xen: copy e820...
> > (d3) Relocating init from 0x000df619 to 0x77fae600 (size 71995)
> > (d3) CPU Mhz=2661
> > (d3) Found 13 PCI devices (max PCI bus is 00)
> > (d3) Allocated Xen hypercall page at 77fff000
> > (d3) Detected Xen v4.5-unstable
> > (d3) xen: copy BIOS tables...
> > (d3) Copying SMBIOS entry point from 0x00010010 to 0x000f0f40
> > (d3) Copying MPTABLE from 0xfc001170/fc001180 to 0x000f0e40
> > (d3) Copying PIR from 0x00010030 to 0x000f0dc0
> > (d3) Copying ACPI RSDP from 0x000100b0 to 0x000f0d90
> > (d3) Using pmtimer, ioport 0xb008
> > (d3) Scan for VGA option rom
> > (d3) Running option rom at c000:0003
> > (XEN) stdvga.c:147:d3v0 entering stdvga and caching modes
> > (d3) pmm call arg1=0
> > (d3) Turning on vga text mode console
> > (d3) SeaBIOS (version
> > debian/1.7.5-1-0-g506b58d-20140603_102943-testVS01OU)
> > (d3) Machine UUID 9c2cc4b2-6dc6-4baf-a708-474699ff6d98
> > (d3) EHCI init on dev 00:1d.7 (regs=0xf9057020)
> > (d3) Found 0 lpt ports
> > (d3) Found 0 serial ports
> > (d3) ATA controller 1 at 1f0/3f4/0 (irq 14 dev 9)
> > (d3) ATA controller 2 at 170/374/0 (irq 15 dev 9)
> > (d3) ata0-0: QEMU HARDDISK ATA-7 Hard-Disk (50000 MiBytes)
> > (d3) Searching bootorder for: /pci@i0cf8/*@1,1/drive@0/disk@0
> > (d3) DVD/CD [ata0-1: QEMU DVD-ROM ATAPI-4 DVD/CD]
> > (d3) Searching bootorder for: /pci@i0cf8/*@1,1/drive@0/disk@1
> > (d3) UHCI init on dev 00:1d.0 (io=c240)
> > (d3) UHCI init on dev 00:1d.1 (io=c260)
> > (d3) UHCI init on dev 00:1d.2 (io=c280)
> > (d3) PS2 keyboard initialized
> > (d3) All threads complete.
> > (d3) Scan for option roms
> > (d3) Running option rom at c980:0003
> > (d3) pmm call arg1=1
> > (d3) pmm call arg1=0
> > (d3) pmm call arg1=1
> > (d3) pmm call arg1=0
> > (d3) Searching bootorder for: /pci@i0cf8/*@6
> > (d3)
> > (d3) Press F12 for boot menu.
> > (d3)
> > (d3) Searching bootorder for: HALT
> > (d3) drive 0x000f0d40: PCHS=16383/16/63 translation=lba
> > LCHS=1024/255/63 s=102400000
> > (d3)
> > (d3) Space available for UMB: ca800-ee800, f0000-f0ce0
> > (d3) Returned 258048 bytes of ZoneHigh
> > (d3) e820 map has 6 items:
> > (d3)   0: 0000000000000000 - 000000000009fc00 = 1 RAM
> > (d3)   1: 000000000009fc00 - 00000000000a0000 = 2 RESERVED
> > (d3)   2: 00000000000f0000 - 0000000000100000 = 2 RESERVED
> > (d3)   3: 0000000000100000 - 0000000077fff000 = 1 RAM
> > (d3)   4: 0000000077fff000 - 0000000078000000 = 2 RESERVED
> > (d3)   5: 00000000fc000000 - 0000000100000000 = 2 RESERVED
> > (d3) enter handle_19:
> > (d3)   NULL
> > (d3) Booting from DVD/CD...
> > (d3) Device reports MEDIUM NOT PRESENT
> > (d3) scsi_is_ready returned -1
> > (d3) Boot failed: Could not read from CDROM (code 0003)
> > (d3) enter handle_18:
> > (d3)   NULL
> > (d3) Booting from Hard Disk...
> > (d3) Booting from 0000:7c00
> > (XEN) d3: VIRIDIAN GUEST_OS_ID: vendor: 1 os: 4 major: 6 minor: 1 sp:
> > 1 build: 1db1
> > (XEN) d3: VIRIDIAN HYPERCALL: enabled: 1 pfn: 3ffff
> > (XEN) d3v0: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffe
> > (XEN) d3v1: VIRIDIAN APIC_ASSIST: enabled: 1 pfn: 3fffd
> > (XEN) irq.c:270: Dom3 PCI link 0 changed 5 -> 0
> > (XEN) irq.c:270: Dom3 PCI link 1 changed 10 -> 0
> > (XEN) irq.c:270: Dom3 PCI link 2 changed 11 -> 0
> > (XEN) irq.c:270: Dom3 PCI link 3 changed 5 -> 0
> > (XEN) irq.c:380: Dom3 callback via changed to GSI 24
> > (XEN) HVM3 save: CPU
> > (XEN) HVM3 save: PIC
> > (XEN) HVM3 save: IOAPIC
> > (XEN) HVM3 save: LAPIC
> > (XEN) HVM3 save: LAPIC_REGS
> > (XEN) HVM3 save: PCI_IRQ
> > (XEN) HVM3 save: ISA_IRQ
> > (XEN) HVM3 save: PCI_LINK
> > (XEN) HVM3 save: PIT
> > (XEN) HVM3 save: RTC
> > (XEN) HVM3 save: HPET
> > (XEN) HVM3 save: PMTIMER
> > (XEN) HVM3 save: MTRR
> > (XEN) HVM3 save: VIRIDIAN_DOMAIN
> > (XEN) HVM3 save: CPU_XSAVE
> > (XEN) HVM3 save: VIRIDIAN_VCPU
> > (XEN) HVM3 save: VMCE_VCPU
> > (XEN) HVM3 save: TSC_ADJUST
> > (XEN) HVM4 restore: CPU 0
> > (XEN) HVM4 restore: CPU 1
> > (XEN) HVM4 restore: PIC 0
> > (XEN) HVM4 restore: PIC 1
> > (XEN) HVM4 restore: IOAPIC 0
> > (XEN) HVM4 restore: LAPIC 0
> > (XEN) HVM4 restore: LAPIC 1
> > (XEN) HVM4 restore: LAPIC_REGS 0
> > (XEN) HVM4 restore: LAPIC_REGS 1
> > (XEN) HVM4 restore: PCI_IRQ 0
> > (XEN) HVM4 restore: ISA_IRQ 0
> > (XEN) HVM4 restore: PCI_LINK 0
> > (XEN) HVM4 restore: PIT 0
> > (XEN) HVM4 restore: RTC 0
> > (XEN) HVM4 restore: HPET 0
> > (XEN) HVM4 restore: PMTIMER 0
> > (XEN) HVM4 restore: MTRR 0
> > (XEN) HVM4 restore: MTRR 1
> > (XEN) HVM4 restore: VIRIDIAN_DOMAIN 0
> > (XEN) HVM4 restore: VIRIDIAN_VCPU 0
> > (XEN) HVM4 restore: VIRIDIAN_VCPU 1
> > (XEN) HVM4 restore: VMCE_VCPU 0
> > (XEN) HVM4 restore: VMCE_VCPU 1
> > (XEN) HVM4 restore: TSC_ADJUST 0
> > (XEN) HVM4 restore: TSC_ADJUST 1
> > (XEN) irq.c:380: Dom4 callback via changed to GSI 24
> 


_______________________________________________
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 Oct 28 11:27:44 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 28 Oct 2014 11:27:44 +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 1Xj4wC-00044p-PF; Tue, 28 Oct 2014 11:27:44 +0000
Received: from mail6.bemta4.messagelabs.com ([85.158.143.247])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <owen.smith@citrix.com>) id 1Xj4wC-00044d-9O
	for win-pv-devel@lists.xenproject.org; Tue, 28 Oct 2014 11:27:44 +0000
Received: from [85.158.143.35] by server-1.bemta-4.messagelabs.com id
	A7/FA-02952-FAD7F445; Tue, 28 Oct 2014 11:27:43 +0000
X-Env-Sender: owen.smith@citrix.com
X-Msg-Ref: server-12.tower-21.messagelabs.com!1414495661!13035835!2
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: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 11565 invoked from network); 28 Oct 2014 11:27:43 -0000
Received: from smtp02.citrix.com (HELO SMTP02.CITRIX.COM) (66.165.176.63)
	by server-12.tower-21.messagelabs.com with RC4-SHA encrypted SMTP;
	28 Oct 2014 11:27:43 -0000
X-IronPort-AV: E=Sophos;i="5.04,802,1406592000"; d="scan'208";a="186814008"
From: Owen Smith <owen.smith@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
Date: Tue, 28 Oct 2014 11:27:22 +0000
Message-ID: <1414495644-5948-2-git-send-email-owen.smith@citrix.com>
X-Mailer: git-send-email 1.9.4.msysgit.1
In-Reply-To: <1414495644-5948-1-git-send-email-owen.smith@citrix.com>
References: <1414495644-5948-1-git-send-email-owen.smith@citrix.com>
MIME-Version: 1.0
X-DLP: MIA2
Cc: paul.durrant@citrix.com, Owen Smith <owen.smith@citrix.com>
Subject: [win-pv-devel] [PATCH 1/3] Prepare SCSIOP_UNMAP correctly
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

SCSIOP_UNMAP requests contain a list of extents to discard
and each BLKIF_OP_DISCARD only handles a single extent.
Break a SRB doen into multiple ring requests as neccessary.

Signed-off-by: Owen Smith <owen.smith@citrix.com>
---
 src/xenvbd/pdo.c | 69 ++++++++++++++++++++++++++++++++++++++++++++------------
 1 file changed, 54 insertions(+), 15 deletions(-)

diff --git a/src/xenvbd/pdo.c b/src/xenvbd/pdo.c
index 9762944..3f18621 100644
--- a/src/xenvbd/pdo.c
+++ b/src/xenvbd/pdo.c
@@ -1452,26 +1452,65 @@ PrepareUnmap(
     __in PSCSI_REQUEST_BLOCK     Srb
     )
 {
-    PXENVBD_SRBEXT  SrbExt = GetSrbExt(Srb);
-    PXENVBD_REQUEST Request = __LookasideAlloc(&Pdo->RequestList);
-    if (Request == NULL)
-        return STATUS_UNSUCCESSFUL;
+    PXENVBD_SRBEXT      SrbExt = GetSrbExt(Srb);
+    PUNMAP_LIST_HEADER  Unmap = Srb->DataBuffer;
+    ULONG               Count = _byteswap_ushort(*(PUSHORT)Unmap->DataLength) /
+                                _byteswap_ushort(*(PUSHORT)Unmap->BlockDescrDataLength);
+    ULONG               Index;
+    LIST_ENTRY          List;
 
-    SrbExt->Count = 1;
-    // mark the SRB as pending, completion will check for pending to detect failures
+    InitializeListHead(&List);
+    SrbExt->Count = 0;
     Srb->SrbStatus = SRB_STATUS_PENDING;
 
-    Request->Srb        = Srb;
-    Request->Id         = PdoGetTag(Pdo);
-    Request->Operation  = BLKIF_OP_DISCARD;
-    Request->FirstSector = Cdb_LogicalBlock(Srb);
-    Request->NrSectors   = Cdb_TransferBlock(Srb);
-    Request->Flags       = 0;
-    InitializeListHead(&Request->Segments);
+    for (Index = 0; Index < Count; ++Index) {
+        PUNMAP_BLOCK_DESCRIPTOR Descr = &Unmap->Descriptors[Index];
+        PXENVBD_REQUEST         Request = __LookasideAlloc(&Pdo->RequestList);
+        if (Request == NULL)
+            goto fail1;
+
+        ++SrbExt->Count;
+        InsertTailList(&List, &Request->Entry);
+
+        Request->Srb            = Srb;
+        Request->Id             = PdoGetTag(Pdo);
+        Request->Operation      = BLKIF_OP_DISCARD;
+        Request->FirstSector    = _byteswap_uint64(*(PULONG64)Descr->StartingLba);
+        Request->NrSectors      = _byteswap_ulong(*(PULONG)Descr->LbaCount);
+        Request->Flags          = 0;
+        InitializeListHead(&Request->Segments);
+    }
+
+    for (;;) {
+        PXENVBD_REQUEST Request;
+        PLIST_ENTRY     Entry;
+
+        Entry = RemoveHeadList(&List);
+        if (Entry == &List)
+            break;
+
+        Request = CONTAINING_RECORD(Entry, XENVBD_REQUEST, Entry);
+        __PdoIncBlkifOpCount(Pdo, Request);
+        QueueAppend(&Pdo->PreparedReqs, &Request->Entry);
+    }
 
-    __PdoIncBlkifOpCount(Pdo, Request);
-    QueueAppend(&Pdo->PreparedReqs, &Request->Entry);
     return STATUS_SUCCESS;
+
+
+fail1:
+    for (;;) {
+        PXENVBD_REQUEST Request;
+        PLIST_ENTRY     Entry;
+
+        Entry = RemoveHeadList(&List);
+        if (Entry == &List)
+            break;
+
+        Request = CONTAINING_RECORD(Entry, XENVBD_REQUEST, Entry);
+        __LookasideFree(&Pdo->RequestList, Request);
+        --SrbExt->Count;
+    }
+    return STATUS_NO_MEMORY;
 }
 
 //=============================================================================
-- 
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 Oct 28 11:27:44 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 28 Oct 2014 11:27:44 +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 1Xj4wC-00044k-OK; Tue, 28 Oct 2014 11:27:44 +0000
Received: from mail6.bemta4.messagelabs.com ([85.158.143.247])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <owen.smith@citrix.com>) id 1Xj4wB-00044W-JP
	for win-pv-devel@lists.xenproject.org; Tue, 28 Oct 2014 11:27:43 +0000
Received: from [85.158.143.35] by server-2.bemta-4.messagelabs.com id
	35/EA-10419-FAD7F445; Tue, 28 Oct 2014 11:27:43 +0000
X-Env-Sender: owen.smith@citrix.com
X-Msg-Ref: server-12.tower-21.messagelabs.com!1414495661!13035835!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: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 11447 invoked from network); 28 Oct 2014 11:27:42 -0000
Received: from smtp02.citrix.com (HELO SMTP02.CITRIX.COM) (66.165.176.63)
	by server-12.tower-21.messagelabs.com with RC4-SHA encrypted SMTP;
	28 Oct 2014 11:27:42 -0000
X-IronPort-AV: E=Sophos;i="5.04,802,1406592000"; d="scan'208";a="186814007"
From: Owen Smith <owen.smith@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
Date: Tue, 28 Oct 2014 11:27:21 +0000
Message-ID: <1414495644-5948-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: paul.durrant@citrix.com, Owen Smith <owen.smith@citrix.com>
Subject: [win-pv-devel] [PATCH 0/3] Support discard/trim/unmap
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

Add an upper filter to intercept discard/trim/unmap operations, translate to
SCSIOP_UNMAP commands and pass through storport to xenvbd. Xenvbd will then 
issue the correct BLKIF_OP_DISCARD operation to the backend (if supported).

Owen Smith (3):
  Prepare SCSIOP_UNMAP correctly
  Run XenVbd SDV after XenCrsh SDV
  Add XenDisk device upper filter.

 build.py                            |    3 +-
 src/xendisk/assert.h                |  220 ++++
 src/xendisk/debug.h                 |   94 ++
 src/xendisk/driver.c                |  203 ++++
 src/xendisk/driver.h                |   68 ++
 src/xendisk/fdo.c                   | 1862 +++++++++++++++++++++++++++++++
 src/xendisk/fdo.h                   |   78 ++
 src/xendisk/mutex.h                 |  113 ++
 src/xendisk/pdo.c                   | 2079 +++++++++++++++++++++++++++++++++++
 src/xendisk/pdo.h                   |   90 ++
 src/xendisk/thread.c                |  225 ++++
 src/xendisk/thread.h                |   73 ++
 src/xendisk/types.h                 |   53 +
 src/xendisk/util.h                  |  222 ++++
 src/xendisk/xendisk.rc              |   56 +
 src/xenvbd.inf                      |   18 +
 src/xenvbd/pdo.c                    |   69 +-
 vs2012/package/package.vcxproj      |    3 +
 vs2012/xendisk/xendisk.vcxproj      |   84 ++
 vs2012/xendisk/xendisk.vcxproj.user |    8 +
 vs2012/xenvbd.sln                   |   28 +
 vs2013/package/package.vcxproj      |    3 +
 vs2013/xendisk/xendisk.vcxproj      |  112 ++
 vs2013/xendisk/xendisk.vcxproj.user |    8 +
 vs2013/xenvbd.sln                   |   28 +
 25 files changed, 5784 insertions(+), 16 deletions(-)
 create mode 100644 src/xendisk/assert.h
 create mode 100644 src/xendisk/debug.h
 create mode 100644 src/xendisk/driver.c
 create mode 100644 src/xendisk/driver.h
 create mode 100644 src/xendisk/fdo.c
 create mode 100644 src/xendisk/fdo.h
 create mode 100644 src/xendisk/mutex.h
 create mode 100644 src/xendisk/pdo.c
 create mode 100644 src/xendisk/pdo.h
 create mode 100644 src/xendisk/thread.c
 create mode 100644 src/xendisk/thread.h
 create mode 100644 src/xendisk/types.h
 create mode 100644 src/xendisk/util.h
 create mode 100644 src/xendisk/xendisk.rc
 create mode 100644 vs2012/xendisk/xendisk.vcxproj
 create mode 100644 vs2012/xendisk/xendisk.vcxproj.user
 create mode 100644 vs2013/xendisk/xendisk.vcxproj
 create mode 100644 vs2013/xendisk/xendisk.vcxproj.user

-- 
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 Oct 28 11:27:44 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 28 Oct 2014 11:27:44 +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 1Xj4wC-00044p-PF; Tue, 28 Oct 2014 11:27:44 +0000
Received: from mail6.bemta4.messagelabs.com ([85.158.143.247])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <owen.smith@citrix.com>) id 1Xj4wC-00044d-9O
	for win-pv-devel@lists.xenproject.org; Tue, 28 Oct 2014 11:27:44 +0000
Received: from [85.158.143.35] by server-1.bemta-4.messagelabs.com id
	A7/FA-02952-FAD7F445; Tue, 28 Oct 2014 11:27:43 +0000
X-Env-Sender: owen.smith@citrix.com
X-Msg-Ref: server-12.tower-21.messagelabs.com!1414495661!13035835!2
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: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 11565 invoked from network); 28 Oct 2014 11:27:43 -0000
Received: from smtp02.citrix.com (HELO SMTP02.CITRIX.COM) (66.165.176.63)
	by server-12.tower-21.messagelabs.com with RC4-SHA encrypted SMTP;
	28 Oct 2014 11:27:43 -0000
X-IronPort-AV: E=Sophos;i="5.04,802,1406592000"; d="scan'208";a="186814008"
From: Owen Smith <owen.smith@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
Date: Tue, 28 Oct 2014 11:27:22 +0000
Message-ID: <1414495644-5948-2-git-send-email-owen.smith@citrix.com>
X-Mailer: git-send-email 1.9.4.msysgit.1
In-Reply-To: <1414495644-5948-1-git-send-email-owen.smith@citrix.com>
References: <1414495644-5948-1-git-send-email-owen.smith@citrix.com>
MIME-Version: 1.0
X-DLP: MIA2
Cc: paul.durrant@citrix.com, Owen Smith <owen.smith@citrix.com>
Subject: [win-pv-devel] [PATCH 1/3] Prepare SCSIOP_UNMAP correctly
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

SCSIOP_UNMAP requests contain a list of extents to discard
and each BLKIF_OP_DISCARD only handles a single extent.
Break a SRB doen into multiple ring requests as neccessary.

Signed-off-by: Owen Smith <owen.smith@citrix.com>
---
 src/xenvbd/pdo.c | 69 ++++++++++++++++++++++++++++++++++++++++++++------------
 1 file changed, 54 insertions(+), 15 deletions(-)

diff --git a/src/xenvbd/pdo.c b/src/xenvbd/pdo.c
index 9762944..3f18621 100644
--- a/src/xenvbd/pdo.c
+++ b/src/xenvbd/pdo.c
@@ -1452,26 +1452,65 @@ PrepareUnmap(
     __in PSCSI_REQUEST_BLOCK     Srb
     )
 {
-    PXENVBD_SRBEXT  SrbExt = GetSrbExt(Srb);
-    PXENVBD_REQUEST Request = __LookasideAlloc(&Pdo->RequestList);
-    if (Request == NULL)
-        return STATUS_UNSUCCESSFUL;
+    PXENVBD_SRBEXT      SrbExt = GetSrbExt(Srb);
+    PUNMAP_LIST_HEADER  Unmap = Srb->DataBuffer;
+    ULONG               Count = _byteswap_ushort(*(PUSHORT)Unmap->DataLength) /
+                                _byteswap_ushort(*(PUSHORT)Unmap->BlockDescrDataLength);
+    ULONG               Index;
+    LIST_ENTRY          List;
 
-    SrbExt->Count = 1;
-    // mark the SRB as pending, completion will check for pending to detect failures
+    InitializeListHead(&List);
+    SrbExt->Count = 0;
     Srb->SrbStatus = SRB_STATUS_PENDING;
 
-    Request->Srb        = Srb;
-    Request->Id         = PdoGetTag(Pdo);
-    Request->Operation  = BLKIF_OP_DISCARD;
-    Request->FirstSector = Cdb_LogicalBlock(Srb);
-    Request->NrSectors   = Cdb_TransferBlock(Srb);
-    Request->Flags       = 0;
-    InitializeListHead(&Request->Segments);
+    for (Index = 0; Index < Count; ++Index) {
+        PUNMAP_BLOCK_DESCRIPTOR Descr = &Unmap->Descriptors[Index];
+        PXENVBD_REQUEST         Request = __LookasideAlloc(&Pdo->RequestList);
+        if (Request == NULL)
+            goto fail1;
+
+        ++SrbExt->Count;
+        InsertTailList(&List, &Request->Entry);
+
+        Request->Srb            = Srb;
+        Request->Id             = PdoGetTag(Pdo);
+        Request->Operation      = BLKIF_OP_DISCARD;
+        Request->FirstSector    = _byteswap_uint64(*(PULONG64)Descr->StartingLba);
+        Request->NrSectors      = _byteswap_ulong(*(PULONG)Descr->LbaCount);
+        Request->Flags          = 0;
+        InitializeListHead(&Request->Segments);
+    }
+
+    for (;;) {
+        PXENVBD_REQUEST Request;
+        PLIST_ENTRY     Entry;
+
+        Entry = RemoveHeadList(&List);
+        if (Entry == &List)
+            break;
+
+        Request = CONTAINING_RECORD(Entry, XENVBD_REQUEST, Entry);
+        __PdoIncBlkifOpCount(Pdo, Request);
+        QueueAppend(&Pdo->PreparedReqs, &Request->Entry);
+    }
 
-    __PdoIncBlkifOpCount(Pdo, Request);
-    QueueAppend(&Pdo->PreparedReqs, &Request->Entry);
     return STATUS_SUCCESS;
+
+
+fail1:
+    for (;;) {
+        PXENVBD_REQUEST Request;
+        PLIST_ENTRY     Entry;
+
+        Entry = RemoveHeadList(&List);
+        if (Entry == &List)
+            break;
+
+        Request = CONTAINING_RECORD(Entry, XENVBD_REQUEST, Entry);
+        __LookasideFree(&Pdo->RequestList, Request);
+        --SrbExt->Count;
+    }
+    return STATUS_NO_MEMORY;
 }
 
 //=============================================================================
-- 
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 Oct 28 11:27:44 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 28 Oct 2014 11:27:44 +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 1Xj4wC-00044k-OK; Tue, 28 Oct 2014 11:27:44 +0000
Received: from mail6.bemta4.messagelabs.com ([85.158.143.247])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <owen.smith@citrix.com>) id 1Xj4wB-00044W-JP
	for win-pv-devel@lists.xenproject.org; Tue, 28 Oct 2014 11:27:43 +0000
Received: from [85.158.143.35] by server-2.bemta-4.messagelabs.com id
	35/EA-10419-FAD7F445; Tue, 28 Oct 2014 11:27:43 +0000
X-Env-Sender: owen.smith@citrix.com
X-Msg-Ref: server-12.tower-21.messagelabs.com!1414495661!13035835!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: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 11447 invoked from network); 28 Oct 2014 11:27:42 -0000
Received: from smtp02.citrix.com (HELO SMTP02.CITRIX.COM) (66.165.176.63)
	by server-12.tower-21.messagelabs.com with RC4-SHA encrypted SMTP;
	28 Oct 2014 11:27:42 -0000
X-IronPort-AV: E=Sophos;i="5.04,802,1406592000"; d="scan'208";a="186814007"
From: Owen Smith <owen.smith@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
Date: Tue, 28 Oct 2014 11:27:21 +0000
Message-ID: <1414495644-5948-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: paul.durrant@citrix.com, Owen Smith <owen.smith@citrix.com>
Subject: [win-pv-devel] [PATCH 0/3] Support discard/trim/unmap
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

Add an upper filter to intercept discard/trim/unmap operations, translate to
SCSIOP_UNMAP commands and pass through storport to xenvbd. Xenvbd will then 
issue the correct BLKIF_OP_DISCARD operation to the backend (if supported).

Owen Smith (3):
  Prepare SCSIOP_UNMAP correctly
  Run XenVbd SDV after XenCrsh SDV
  Add XenDisk device upper filter.

 build.py                            |    3 +-
 src/xendisk/assert.h                |  220 ++++
 src/xendisk/debug.h                 |   94 ++
 src/xendisk/driver.c                |  203 ++++
 src/xendisk/driver.h                |   68 ++
 src/xendisk/fdo.c                   | 1862 +++++++++++++++++++++++++++++++
 src/xendisk/fdo.h                   |   78 ++
 src/xendisk/mutex.h                 |  113 ++
 src/xendisk/pdo.c                   | 2079 +++++++++++++++++++++++++++++++++++
 src/xendisk/pdo.h                   |   90 ++
 src/xendisk/thread.c                |  225 ++++
 src/xendisk/thread.h                |   73 ++
 src/xendisk/types.h                 |   53 +
 src/xendisk/util.h                  |  222 ++++
 src/xendisk/xendisk.rc              |   56 +
 src/xenvbd.inf                      |   18 +
 src/xenvbd/pdo.c                    |   69 +-
 vs2012/package/package.vcxproj      |    3 +
 vs2012/xendisk/xendisk.vcxproj      |   84 ++
 vs2012/xendisk/xendisk.vcxproj.user |    8 +
 vs2012/xenvbd.sln                   |   28 +
 vs2013/package/package.vcxproj      |    3 +
 vs2013/xendisk/xendisk.vcxproj      |  112 ++
 vs2013/xendisk/xendisk.vcxproj.user |    8 +
 vs2013/xenvbd.sln                   |   28 +
 25 files changed, 5784 insertions(+), 16 deletions(-)
 create mode 100644 src/xendisk/assert.h
 create mode 100644 src/xendisk/debug.h
 create mode 100644 src/xendisk/driver.c
 create mode 100644 src/xendisk/driver.h
 create mode 100644 src/xendisk/fdo.c
 create mode 100644 src/xendisk/fdo.h
 create mode 100644 src/xendisk/mutex.h
 create mode 100644 src/xendisk/pdo.c
 create mode 100644 src/xendisk/pdo.h
 create mode 100644 src/xendisk/thread.c
 create mode 100644 src/xendisk/thread.h
 create mode 100644 src/xendisk/types.h
 create mode 100644 src/xendisk/util.h
 create mode 100644 src/xendisk/xendisk.rc
 create mode 100644 vs2012/xendisk/xendisk.vcxproj
 create mode 100644 vs2012/xendisk/xendisk.vcxproj.user
 create mode 100644 vs2013/xendisk/xendisk.vcxproj
 create mode 100644 vs2013/xendisk/xendisk.vcxproj.user

-- 
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 Oct 28 11:27:45 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 28 Oct 2014 11:27: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 1Xj4wD-00045a-Qv; Tue, 28 Oct 2014 11:27:45 +0000
Received: from mail6.bemta4.messagelabs.com ([85.158.143.247])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <owen.smith@citrix.com>) id 1Xj4wD-00044l-7r
	for win-pv-devel@lists.xenproject.org; Tue, 28 Oct 2014 11:27:45 +0000
Received: from [85.158.143.35] by server-3.bemta-4.messagelabs.com id
	B1/48-02699-0BD7F445; Tue, 28 Oct 2014 11:27:44 +0000
X-Env-Sender: owen.smith@citrix.com
X-Msg-Ref: server-12.tower-21.messagelabs.com!1414495661!13035835!3
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: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 11642 invoked from network); 28 Oct 2014 11:27:43 -0000
Received: from smtp02.citrix.com (HELO SMTP02.CITRIX.COM) (66.165.176.63)
	by server-12.tower-21.messagelabs.com with RC4-SHA encrypted SMTP;
	28 Oct 2014 11:27:43 -0000
X-IronPort-AV: E=Sophos;i="5.04,802,1406592000"; d="scan'208";a="186814009"
From: Owen Smith <owen.smith@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
Date: Tue, 28 Oct 2014 11:27:23 +0000
Message-ID: <1414495644-5948-3-git-send-email-owen.smith@citrix.com>
X-Mailer: git-send-email 1.9.4.msysgit.1
In-Reply-To: <1414495644-5948-1-git-send-email-owen.smith@citrix.com>
References: <1414495644-5948-1-git-send-email-owen.smith@citrix.com>
MIME-Version: 1.0
X-DLP: MIA2
Cc: paul.durrant@citrix.com, Owen Smith <owen.smith@citrix.com>
Subject: [win-pv-devel] [PATCH 2/3] Run XenVbd SDV after XenCrsh SDV
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's SDV build requires output from XenCrsh's SDV build.

Signed-off-by: Owen Smith <owen.smith@citrix.com>
---
 build.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/build.py b/build.py
index d681fb3..26261ad 100644
--- a/build.py
+++ b/build.py
@@ -367,8 +367,8 @@ if __name__ == '__main__':
     symstore_add(driver, release, 'x64', debug[sys.argv[1]], vs)
 
     if len(sys.argv) <= 2 or sdv[sys.argv[2]]:
-        run_sdv('xenvbd', driver, vs)
         run_sdv('xencrsh', driver, vs)
+        run_sdv('xenvbd', driver, vs)
 
     archive(driver + '\\source.tgz', manifest().splitlines(), tgz=True)
     archive(driver + '.tar', [driver,'revision'])
-- 
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 Oct 28 11:27:45 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 28 Oct 2014 11:27: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 1Xj4wD-00045a-Qv; Tue, 28 Oct 2014 11:27:45 +0000
Received: from mail6.bemta4.messagelabs.com ([85.158.143.247])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <owen.smith@citrix.com>) id 1Xj4wD-00044l-7r
	for win-pv-devel@lists.xenproject.org; Tue, 28 Oct 2014 11:27:45 +0000
Received: from [85.158.143.35] by server-3.bemta-4.messagelabs.com id
	B1/48-02699-0BD7F445; Tue, 28 Oct 2014 11:27:44 +0000
X-Env-Sender: owen.smith@citrix.com
X-Msg-Ref: server-12.tower-21.messagelabs.com!1414495661!13035835!3
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: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 11642 invoked from network); 28 Oct 2014 11:27:43 -0000
Received: from smtp02.citrix.com (HELO SMTP02.CITRIX.COM) (66.165.176.63)
	by server-12.tower-21.messagelabs.com with RC4-SHA encrypted SMTP;
	28 Oct 2014 11:27:43 -0000
X-IronPort-AV: E=Sophos;i="5.04,802,1406592000"; d="scan'208";a="186814009"
From: Owen Smith <owen.smith@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
Date: Tue, 28 Oct 2014 11:27:23 +0000
Message-ID: <1414495644-5948-3-git-send-email-owen.smith@citrix.com>
X-Mailer: git-send-email 1.9.4.msysgit.1
In-Reply-To: <1414495644-5948-1-git-send-email-owen.smith@citrix.com>
References: <1414495644-5948-1-git-send-email-owen.smith@citrix.com>
MIME-Version: 1.0
X-DLP: MIA2
Cc: paul.durrant@citrix.com, Owen Smith <owen.smith@citrix.com>
Subject: [win-pv-devel] [PATCH 2/3] Run XenVbd SDV after XenCrsh SDV
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's SDV build requires output from XenCrsh's SDV build.

Signed-off-by: Owen Smith <owen.smith@citrix.com>
---
 build.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/build.py b/build.py
index d681fb3..26261ad 100644
--- a/build.py
+++ b/build.py
@@ -367,8 +367,8 @@ if __name__ == '__main__':
     symstore_add(driver, release, 'x64', debug[sys.argv[1]], vs)
 
     if len(sys.argv) <= 2 or sdv[sys.argv[2]]:
-        run_sdv('xenvbd', driver, vs)
         run_sdv('xencrsh', driver, vs)
+        run_sdv('xenvbd', driver, vs)
 
     archive(driver + '\\source.tgz', manifest().splitlines(), tgz=True)
     archive(driver + '.tar', [driver,'revision'])
-- 
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 Oct 28 11:27:51 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 28 Oct 2014 11:27: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 1Xj4wJ-000468-S8; Tue, 28 Oct 2014 11:27:51 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <owen.smith@citrix.com>) id 1Xj4wI-000463-2s
	for win-pv-devel@lists.xenproject.org; Tue, 28 Oct 2014 11:27:50 +0000
Received: from [85.158.139.211] by server-11.bemta-5.messagelabs.com id
	4A/B2-02696-5BD7F445; Tue, 28 Oct 2014 11:27:49 +0000
X-Env-Sender: owen.smith@citrix.com
X-Msg-Ref: server-8.tower-206.messagelabs.com!1414495663!12165844!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: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 20931 invoked from network); 28 Oct 2014 11:27:44 -0000
Received: from smtp.citrix.com (HELO SMTP.CITRIX.COM) (66.165.176.89)
	by server-8.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	28 Oct 2014 11:27:44 -0000
X-IronPort-AV: E=Sophos;i="5.04,802,1406592000"; d="scan'208";a="185515564"
From: Owen Smith <owen.smith@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
Date: Tue, 28 Oct 2014 11:27:24 +0000
Message-ID: <1414495644-5948-4-git-send-email-owen.smith@citrix.com>
X-Mailer: git-send-email 1.9.4.msysgit.1
In-Reply-To: <1414495644-5948-1-git-send-email-owen.smith@citrix.com>
References: <1414495644-5948-1-git-send-email-owen.smith@citrix.com>
MIME-Version: 1.0
X-DLP: MIA2
Cc: paul.durrant@citrix.com, Owen Smith <owen.smith@citrix.com>
Subject: [win-pv-devel] [PATCH 3/3] Add XenDisk device upper filter.
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

XenDisk intercepts and translates IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES
into SCSIOP_UNMAP SRBs. Storport will pass on these SCSIOP_UNMAP requests
to XenVbd, which will create the appropriate BLKIF_OP_DISCARD requests.
XenDisk is only neccessary because Storport does not do the translation
to SCSIOP_UNMAPs.

Signed-off-by: Owen Smith <owen.smith@citrix.com>
---
 build.py                            |    1 +
 src/xendisk/assert.h                |  220 ++++
 src/xendisk/debug.h                 |   94 ++
 src/xendisk/driver.c                |  203 ++++
 src/xendisk/driver.h                |   68 ++
 src/xendisk/fdo.c                   | 1862 +++++++++++++++++++++++++++++++
 src/xendisk/fdo.h                   |   78 ++
 src/xendisk/mutex.h                 |  113 ++
 src/xendisk/pdo.c                   | 2079 +++++++++++++++++++++++++++++++++++
 src/xendisk/pdo.h                   |   90 ++
 src/xendisk/thread.c                |  225 ++++
 src/xendisk/thread.h                |   73 ++
 src/xendisk/types.h                 |   53 +
 src/xendisk/util.h                  |  222 ++++
 src/xendisk/xendisk.rc              |   56 +
 src/xenvbd.inf                      |   18 +
 vs2012/package/package.vcxproj      |    3 +
 vs2012/xendisk/xendisk.vcxproj      |   84 ++
 vs2012/xendisk/xendisk.vcxproj.user |    8 +
 vs2012/xenvbd.sln                   |   28 +
 vs2013/package/package.vcxproj      |    3 +
 vs2013/xendisk/xendisk.vcxproj      |  112 ++
 vs2013/xendisk/xendisk.vcxproj.user |    8 +
 vs2013/xenvbd.sln                   |   28 +
 24 files changed, 5729 insertions(+)
 create mode 100644 src/xendisk/assert.h
 create mode 100644 src/xendisk/debug.h
 create mode 100644 src/xendisk/driver.c
 create mode 100644 src/xendisk/driver.h
 create mode 100644 src/xendisk/fdo.c
 create mode 100644 src/xendisk/fdo.h
 create mode 100644 src/xendisk/mutex.h
 create mode 100644 src/xendisk/pdo.c
 create mode 100644 src/xendisk/pdo.h
 create mode 100644 src/xendisk/thread.c
 create mode 100644 src/xendisk/thread.h
 create mode 100644 src/xendisk/types.h
 create mode 100644 src/xendisk/util.h
 create mode 100644 src/xendisk/xendisk.rc
 create mode 100644 vs2012/xendisk/xendisk.vcxproj
 create mode 100644 vs2012/xendisk/xendisk.vcxproj.user
 create mode 100644 vs2013/xendisk/xendisk.vcxproj
 create mode 100644 vs2013/xendisk/xendisk.vcxproj.user

diff --git a/build.py b/build.py
index 26261ad..3a71d0c 100644
--- a/build.py
+++ b/build.py
@@ -368,6 +368,7 @@ if __name__ == '__main__':
 
     if len(sys.argv) <= 2 or sdv[sys.argv[2]]:
         run_sdv('xencrsh', driver, vs)
+        run_sdv('xendisk', driver, vs)
         run_sdv('xenvbd', driver, vs)
 
     archive(driver + '\\source.tgz', manifest().splitlines(), tgz=True)
diff --git a/src/xendisk/assert.h b/src/xendisk/assert.h
new file mode 100644
index 0000000..cd571bd
--- /dev/null
+++ b/src/xendisk/assert.h
@@ -0,0 +1,220 @@
+/* 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 _XENDISK_ASSERT_H
+#define _XENDISK_ASSERT_H
+
+#include <ntddk.h>
+
+#include "debug.h"
+
+static FORCEINLINE VOID
+__BugCheck(
+    __in  ULONG       Code,
+    __in_opt ULONG_PTR   Parameter1,
+    __in_opt ULONG_PTR   Parameter2,
+    __in_opt ULONG_PTR   Parameter3,
+    __in_opt ULONG_PTR   Parameter4
+    )
+{
+#pragma prefast(suppress:28159)
+    KeBugCheckEx(Code,
+                 Parameter1,
+                 Parameter2,
+                 Parameter3,
+                 Parameter4);
+}
+
+#define ASSERTION_FAILURE   0x0000DEAD
+
+
+#define BUG(_TEXT)                                              \
+        do {                                                    \
+            const CHAR  *_Text = (_TEXT);                       \
+            const CHAR  *_File = __FILE__;                      \
+            ULONG       _Line = __LINE__;                       \
+                                                                \
+            Error("BUG: " _TEXT "\n");                          \
+            __BugCheck(ASSERTION_FAILURE,                       \
+                       (ULONG_PTR)_Text,                        \
+                       (ULONG_PTR)_File,                        \
+                       (ULONG_PTR)_Line,                        \
+                       0);                                      \
+        } while (FALSE)
+
+#define BUG_MSG(_TEXT1, _TEXT2)                                 \
+        do {                                                    \
+            const CHAR  *_Text1 = (_TEXT1);                     \
+            const CHAR  *_Text2 = (_TEXT2);                     \
+            const CHAR  *_File = __FILE__;                      \
+            ULONG       _Line = __LINE__;                       \
+                                                                \
+            Error("BUG: " _TEXT1 " %s\n", _Text2);              \
+            __BugCheck(ASSERTION_FAILURE,                       \
+                       (ULONG_PTR)_Text1,                       \
+                       (ULONG_PTR)_File,                        \
+                       (ULONG_PTR)_Line,                        \
+                       (ULONG_PTR)_Text2);                      \
+        } while (FALSE)
+
+#define BUG_ON(_EXP)                           \
+        if (_EXP) BUG(#_EXP)
+
+#define BUG_ON_MSG(_EXP, _TEXT)                \
+        if (_EXP) BUG_MSG(#_EXP, _TEXT)
+
+#if DBG
+
+#define __NT_ASSERT(_EXP)                                       \
+        ((!(_EXP)) ?                                            \
+        (Error("ASSERTION FAILED: " #_EXP "\n"),                \
+         __annotation(L"Debug", L"AssertFail", L#_EXP),         \
+         DbgRaiseAssertionFailure(), FALSE) :                   \
+        TRUE)
+
+#define __NT_ASSERT_MSG(_EXP, _TEXT)                            \
+        ((!(_EXP)) ?                                            \
+        (Error("ASSERTION FAILED: " #_EXP " " #_TEXT "\n"),     \
+         __annotation(L"Debug", L"AssertFail", L#_EXP),         \
+         DbgRaiseAssertionFailure(), FALSE) :                   \
+        TRUE)
+
+#define __ASSERT(_EXP)              __NT_ASSERT(_EXP)
+#define __ASSERT_MSG(_EXP, _TEXT)   __NT_ASSERT_MSG(_EXP, _TEXT)
+
+#else   // DBG
+
+#define __ASSERT(_EXP)              BUG_ON(!(_EXP))
+#define __ASSERT_MSG(_EXP, _TEXT)   BUG_ON_MSG(!(_EXP), _TEXT)
+
+#endif  // DBG
+
+#undef  ASSERT
+
+#define ASSERT(_EXP)                    \
+        do {                            \
+            __ASSERT(_EXP);             \
+            __analysis_assume(_EXP);    \
+        } while (FALSE)
+
+#define ASSERT_MSG(_EXP, _TEXT)         \
+        do {                            \
+            __ASSERT_MSG(_EXP, _TEXT);  \
+            __analysis_assume(_EXP);    \
+        } while (FALSE)
+
+#define ASSERT3U(_X, _OP, _Y)                       \
+        do {                                        \
+            ULONGLONG   _Lval = (ULONGLONG)(_X);    \
+            ULONGLONG   _Rval = (ULONGLONG)(_Y);    \
+            if (!(_Lval _OP _Rval)) {               \
+                Error("%s = %llu\n", #_X, _Lval);   \
+                Error("%s = %llu\n", #_Y, _Rval);   \
+                ASSERT(_X _OP _Y);                  \
+            }                                       \
+        } while (FALSE)
+
+#define ASSERT3S(_X, _OP, _Y)                       \
+        do {                                        \
+            LONGLONG    _Lval = (LONGLONG)(_X);     \
+            LONGLONG    _Rval = (LONGLONG)(_Y);     \
+            if (!(_Lval _OP _Rval)) {               \
+                Error("%s = %lld\n", #_X, _Lval);   \
+                Error("%s = %lld\n", #_Y, _Rval);   \
+                ASSERT(_X _OP _Y);                  \
+            }                                       \
+        } while (FALSE)
+
+#define ASSERT3P(_X, _OP, _Y)                       \
+        do {                                        \
+            PVOID   _Lval = (PVOID)(_X);            \
+            PVOID   _Rval = (PVOID)(_Y);            \
+            if (!(_Lval _OP _Rval)) {               \
+                Error("%s = %p\n", #_X, _Lval);     \
+                Error("%s = %p\n", #_Y, _Rval);     \
+                ASSERT(_X _OP _Y);                  \
+            }                                       \
+        } while (FALSE)
+
+#define ASSERTREFCOUNT(_X, _OP, _Y, _Z)             \
+        do {                                        \
+            LONG    _L = (LONG)(_X);                \
+            LONG    _R = (LONG)(_Y);                \
+            if (!(_L _OP _R)) {                     \
+                Error("%s:%s = %d\n", (_Z), #_X, _L); \
+                Error("%s:%s = %d\n", (_Z), #_Y, _R); \
+                ASSERT_MSG(_X _OP _Y, (_Z));        \
+            }                                       \
+        } while (FALSE)
+
+#ifndef TEST_MEMORY
+#define TEST_MEMORY DBG
+#endif
+
+#if TEST_MEMORY
+
+__checkReturn
+static __inline BOOLEAN
+_IsZeroMemory(
+    __in const PCHAR Caller,
+    __in const PCHAR Name,
+    __in PVOID       Buffer,
+    __in ULONG       Length
+    )
+{
+    ULONG           Offset;
+
+    Offset = 0;
+    while (Offset < Length) {
+        if (*((PUCHAR)Buffer + Offset) != 0) {
+            Error("%s: non-zero byte in %s (0x%p+0x%x)\n", Caller, Name, Buffer, Offset);
+            return FALSE;
+        }
+        Offset++;
+    }
+
+    return TRUE;
+}
+
+#define IsZeroMemory(_Buffer, _Length) \
+        _IsZeroMemory(__FUNCTION__, #_Buffer, (_Buffer), (_Length))
+
+#else   // TEST_MEMORY
+
+#define IsZeroMemory(_Buffer, _Length)  TRUE
+
+#endif  // TEST_MEMORY
+
+#define IMPLY(_X, _Y)   (!(_X) || (_Y))
+#define EQUIV(_X, _Y)   (IMPLY((_X), (_Y)) && IMPLY((_Y), (_X)))
+
+#endif  // _XENDISK_ASSERT_H
+
diff --git a/src/xendisk/debug.h b/src/xendisk/debug.h
new file mode 100644
index 0000000..f592f86
--- /dev/null
+++ b/src/xendisk/debug.h
@@ -0,0 +1,94 @@
+/* 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 _DEBUG_H
+#define _DEBUG_H
+
+#include <ntddk.h>
+#include <stdarg.h>
+
+#ifdef  _SDV_
+#define __MODULE__ ""
+#endif
+
+// DEBUG_FILTER_MASKs
+// Set these to see relevant output
+// ERROR        0x00000001
+// WARNING      0x00000002
+// TRACE        0x00000004
+// INFO         0x00000008
+
+#pragma warning(disable:4127)   // conditional expression is constant
+
+//
+// Debug Output and Logging
+//
+static __inline VOID
+__DebugMessage(
+    __in    ULONG       Level,
+    __in __nullterminated const CHAR  *Prefix,
+    __in __nullterminated const CHAR  *Format,
+    ...
+    )
+{
+    va_list         Arguments;
+
+    va_start(Arguments, Format);
+
+#pragma prefast(suppress:6001) // Using uninitialized memory
+    vDbgPrintExWithPrefix(Prefix,
+                          DPFLTR_IHVDRIVER_ID,
+                          Level,
+                          Format,
+                          Arguments);
+    va_end(Arguments);
+}
+
+#define Error(...)  \
+        __DebugMessage(DPFLTR_ERROR_LEVEL, __MODULE__ "|" __FUNCTION__ ":", __VA_ARGS__)
+
+#define Warning(...)  \
+        __DebugMessage(DPFLTR_WARNING_LEVEL, __MODULE__ "|" __FUNCTION__ ":", __VA_ARGS__)
+
+#if DBG
+#define Trace(...)  \
+        __DebugMessage(DPFLTR_TRACE_LEVEL, __MODULE__ "|" __FUNCTION__ ":", __VA_ARGS__)
+#else   // DBG
+#define Trace(...) \
+        (VOID)(__VA_ARGS__)
+#endif  // DBG
+
+#define Verbose(...) \
+        __DebugMessage(DPFLTR_INFO_LEVEL, __MODULE__ "|" __FUNCTION__ ":", __VA_ARGS__)
+
+#include "assert.h"
+
+#endif  // _DEBUG_H
diff --git a/src/xendisk/driver.c b/src/xendisk/driver.c
new file mode 100644
index 0000000..743fc61
--- /dev/null
+++ b/src/xendisk/driver.c
@@ -0,0 +1,203 @@
+/* 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 "driver.h"
+#include "util.h"
+#include "debug.h"
+#include "assert.h"
+#include <version.h>
+
+extern PULONG       InitSafeBootMode;
+
+typedef struct _XENDISK_DRIVER {
+    PDRIVER_OBJECT              DriverObject;
+} XENDISK_DRIVER, *PXENDISK_DRIVER;
+
+static XENDISK_DRIVER   Driver;
+
+static FORCEINLINE VOID
+__DriverSetDriverObject(
+    IN  PDRIVER_OBJECT  DriverObject
+    )
+{
+    Driver.DriverObject = DriverObject;
+}
+
+static FORCEINLINE PDRIVER_OBJECT
+__DriverGetDriverObject(
+    VOID
+    )
+{
+    return Driver.DriverObject;
+}
+
+PDRIVER_OBJECT
+DriverGetDriverObject(
+    VOID
+    )
+{
+    return __DriverGetDriverObject();
+}
+
+DRIVER_UNLOAD   DriverUnload;
+
+VOID
+DriverUnload(
+    IN  PDRIVER_OBJECT  DriverObject
+    )
+{
+    ASSERT3P(DriverObject, ==, __DriverGetDriverObject());
+
+    Trace("====>\n");
+
+    __DriverSetDriverObject(NULL);
+
+    ASSERT(IsZeroMemory(&Driver, sizeof (XENDISK_DRIVER)));
+
+    Trace("<====\n");
+}
+
+DRIVER_ADD_DEVICE   AddDevice;
+
+NTSTATUS
+#pragma prefast(suppress:28152) // Does not clear DO_DEVICE_INITIALIZING
+AddDevice(
+    IN  PDRIVER_OBJECT  DriverObject,
+    IN  PDEVICE_OBJECT  PhysicalDeviceObject
+    )
+{
+    NTSTATUS            status;
+
+    ASSERT3P(DriverObject, ==, __DriverGetDriverObject());
+
+    status = FdoCreate(PhysicalDeviceObject);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    return STATUS_SUCCESS;
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return status;
+}
+
+DRIVER_DISPATCH Dispatch;
+
+NTSTATUS 
+Dispatch(
+    IN PDEVICE_OBJECT   DeviceObject,
+    IN PIRP             Irp
+    )
+{
+    PXENDISK_DX         Dx;
+    NTSTATUS            status;
+
+    Dx = (PXENDISK_DX)DeviceObject->DeviceExtension;
+    ASSERT3P(Dx->DeviceObject, ==, DeviceObject);
+
+    if (Dx->DevicePnpState == Deleted) {
+        status = STATUS_NO_SUCH_DEVICE;
+
+        Irp->IoStatus.Status = status;
+        IoCompleteRequest(Irp, IO_NO_INCREMENT);
+        goto done;
+    }
+
+    status = STATUS_NOT_SUPPORTED;
+    switch (Dx->Type) {
+    case PHYSICAL_DEVICE_OBJECT: {
+        PXENDISK_PDO    Pdo = Dx->Pdo;
+
+        status = PdoDispatch(Pdo, Irp);
+        break;
+    }
+    case FUNCTION_DEVICE_OBJECT: {
+        PXENDISK_FDO    Fdo = Dx->Fdo;
+
+        status = FdoDispatch(Fdo, Irp);
+        break;
+    }
+    default:
+        ASSERT(FALSE);
+        break;
+    }
+
+done:
+    return status;
+}
+
+DRIVER_INITIALIZE   DriverEntry;
+
+NTSTATUS
+DriverEntry(
+    IN  PDRIVER_OBJECT  DriverObject,
+    IN  PUNICODE_STRING RegistryPath
+    )
+{
+    ULONG               Index;
+
+    ASSERT3P(__DriverGetDriverObject(), ==, NULL);
+    UNREFERENCED_PARAMETER(RegistryPath);
+
+    ExInitializeDriverRuntime(DrvRtPoolNxOptIn);
+
+    Trace("====>\n");
+
+    __DriverSetDriverObject(DriverObject);
+
+    DriverObject->DriverUnload = DriverUnload;
+
+    if (*InitSafeBootMode > 0)
+        goto done;
+
+    Verbose("XENDISK %d.%d.%d (%d) (%02d.%02d.%04d)\n",
+            MAJOR_VERSION,
+            MINOR_VERSION,
+            MICRO_VERSION,
+            BUILD_NUMBER,
+            DAY,
+            MONTH,
+            YEAR);
+
+    DriverObject->DriverExtension->AddDevice = AddDevice;
+
+    for (Index = 0; Index <= IRP_MJ_MAXIMUM_FUNCTION; Index++) {
+#pragma prefast(suppress:28169) // No __drv_dispatchType annotation
+#pragma prefast(suppress:28168) // No matching __drv_dispatchType annotation for IRP_MJ_CREATE
+        DriverObject->MajorFunction[Index] = Dispatch;
+    }
+
+done:
+    Trace("<====\n");
+    return STATUS_SUCCESS;
+}
diff --git a/src/xendisk/driver.h b/src/xendisk/driver.h
new file mode 100644
index 0000000..b47e21b
--- /dev/null
+++ b/src/xendisk/driver.h
@@ -0,0 +1,68 @@
+/* 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 _XENDISK_DRIVER_H
+#define _XENDISK_DRIVER_H
+
+#include "fdo.h"
+#include "pdo.h"
+
+extern PDRIVER_OBJECT
+DriverGetDriverObject(
+    VOID
+    );
+
+#pragma warning(push)
+#pragma warning(disable:4201) // nonstandard extension used : nameless struct/union
+
+typedef struct _XENDISK_DX {
+    PDEVICE_OBJECT      DeviceObject;
+    DEVICE_OBJECT_TYPE  Type;
+
+    DEVICE_PNP_STATE    DevicePnpState;
+    DEVICE_PNP_STATE    PreviousDevicePnpState;
+
+    SYSTEM_POWER_STATE  SystemPowerState;
+    DEVICE_POWER_STATE  DevicePowerState;
+
+    IO_REMOVE_LOCK      RemoveLock;
+
+    LIST_ENTRY          ListEntry;
+
+    union {
+        PXENDISK_FDO    Fdo;
+        PXENDISK_PDO    Pdo;
+    };
+} XENDISK_DX, *PXENDISK_DX;
+
+#pragma warning(pop)
+
+#endif // _XENDISK_DRIVER_H
diff --git a/src/xendisk/fdo.c b/src/xendisk/fdo.c
new file mode 100644
index 0000000..771c82e
--- /dev/null
+++ b/src/xendisk/fdo.c
@@ -0,0 +1,1862 @@
+/* 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.
+ */ 
+
+#define INITGUID 1
+
+#include <ntddk.h>
+#include <wdmguid.h>
+#include <ntstrsafe.h>
+#include <stdlib.h>
+#include <names.h>
+
+#include "driver.h"
+#include "fdo.h"
+#include "pdo.h"
+#include "thread.h"
+#include "mutex.h"
+#include "debug.h"
+#include "assert.h"
+#include "util.h"
+
+#define FDO_TAG 'ODF'
+
+struct _XENDISK_FDO {
+    PXENDISK_DX                     Dx;
+    PDEVICE_OBJECT                  LowerDeviceObject;
+    PDEVICE_OBJECT                  PhysicalDeviceObject;
+
+    PXENDISK_THREAD                 SystemPowerThread;
+    PIRP                            SystemPowerIrp;
+    PXENDISK_THREAD                 DevicePowerThread;
+    PIRP                            DevicePowerIrp;
+
+    MUTEX                           Mutex;
+    ULONG                           References;
+};
+
+static FORCEINLINE PVOID
+__FdoAllocate(
+    IN  ULONG   Length
+    )
+{
+    return __AllocateNonPagedPoolWithTag(__FUNCTION__, __LINE__, Length, FDO_TAG);
+}
+
+static FORCEINLINE VOID
+__FdoFree(
+    IN  PVOID   Buffer
+    )
+{
+    __FreePoolWithTag(Buffer, FDO_TAG);
+}
+
+static FORCEINLINE VOID
+__FdoSetDevicePnpState(
+    IN  PXENDISK_FDO        Fdo,
+    IN  DEVICE_PNP_STATE    State
+    )
+{
+    PXENDISK_DX             Dx = Fdo->Dx;
+
+    // We can never transition out of the deleted state
+    ASSERT(Dx->DevicePnpState != Deleted || State == Deleted);
+
+    Dx->PreviousDevicePnpState = Dx->DevicePnpState;
+    Dx->DevicePnpState = State;
+}
+
+static FORCEINLINE VOID
+__FdoRestoreDevicePnpState(
+    IN  PXENDISK_FDO        Fdo,
+    IN  DEVICE_PNP_STATE    State
+    )
+{
+    PXENDISK_DX             Dx = Fdo->Dx;
+
+    if (Dx->DevicePnpState == State)
+        Dx->DevicePnpState = Dx->PreviousDevicePnpState;
+}
+
+static FORCEINLINE DEVICE_PNP_STATE
+__FdoGetDevicePnpState(
+    IN  PXENDISK_FDO    Fdo
+    )
+{
+    PXENDISK_DX         Dx = Fdo->Dx;
+
+    return Dx->DevicePnpState;
+}
+
+static FORCEINLINE VOID
+__FdoSetDevicePowerState(
+    IN  PXENDISK_FDO        Fdo,
+    IN  DEVICE_POWER_STATE  State
+    )
+{
+    PXENDISK_DX             Dx = Fdo->Dx;
+
+    Dx->DevicePowerState = State;
+}
+
+static FORCEINLINE DEVICE_POWER_STATE
+__FdoGetDevicePowerState(
+    IN  PXENDISK_FDO    Fdo
+    )
+{
+    PXENDISK_DX         Dx = Fdo->Dx;
+
+    return Dx->DevicePowerState;
+}
+
+static FORCEINLINE VOID
+__FdoSetSystemPowerState(
+    IN  PXENDISK_FDO        Fdo,
+    IN  SYSTEM_POWER_STATE  State
+    )
+{
+    PXENDISK_DX              Dx = Fdo->Dx;
+
+    Dx->SystemPowerState = State;
+}
+
+static FORCEINLINE SYSTEM_POWER_STATE
+__FdoGetSystemPowerState(
+    IN  PXENDISK_FDO    Fdo
+    )
+{
+    PXENDISK_DX         Dx = Fdo->Dx;
+
+    return Dx->SystemPowerState;
+}
+
+static FORCEINLINE PDEVICE_OBJECT
+__FdoGetPhysicalDeviceObject(
+    IN  PXENDISK_FDO    Fdo
+    )
+{
+    return Fdo->PhysicalDeviceObject;
+}
+
+VOID
+FdoAddPhysicalDeviceObject(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PDEVICE_OBJECT  DeviceObject
+    )
+{
+    PXENDISK_DX         Dx;
+
+    Dx = (PXENDISK_DX)DeviceObject->DeviceExtension;
+    ASSERT3U(Dx->Type, ==, PHYSICAL_DEVICE_OBJECT);
+
+    InsertTailList(&Fdo->Dx->ListEntry, &Dx->ListEntry);
+    ASSERT3U(Fdo->References, !=, 0);
+    Fdo->References++;
+}
+
+VOID
+FdoRemovePhysicalDeviceObject(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PDEVICE_OBJECT  DeviceObject
+    )
+{
+    PXENDISK_DX         Dx;
+
+    Dx = (PXENDISK_DX)DeviceObject->DeviceExtension;
+    ASSERT3U(Dx->Type, ==, PHYSICAL_DEVICE_OBJECT);
+
+    RemoveEntryList(&Dx->ListEntry);
+    ASSERT3U(Fdo->References, !=, 0);
+    --Fdo->References;
+}
+
+static FORCEINLINE VOID
+__FdoAcquireMutex(
+    IN  PXENDISK_FDO     Fdo
+    )
+{
+    AcquireMutex(&Fdo->Mutex);
+}
+
+VOID
+FdoAcquireMutex(
+    IN  PXENDISK_FDO     Fdo
+    )
+{
+    __FdoAcquireMutex(Fdo);
+}
+
+static FORCEINLINE VOID
+__FdoReleaseMutex(
+    IN  PXENDISK_FDO     Fdo
+    )
+{
+    ReleaseMutex(&Fdo->Mutex);
+}
+
+VOID
+FdoReleaseMutex(
+    IN  PXENDISK_FDO     Fdo
+    )
+{
+    __FdoReleaseMutex(Fdo);
+
+    if (Fdo->References == 0)
+        FdoDestroy(Fdo);
+}
+
+static FORCEINLINE VOID
+__FdoEnumerate(
+    IN  PXENDISK_FDO        Fdo,
+    IN  PDEVICE_RELATIONS   Relations
+    )
+{
+    PDEVICE_OBJECT          *PhysicalDeviceObject;
+    ULONG                   Count;
+    PLIST_ENTRY             ListEntry;
+    ULONG                   Index;
+    NTSTATUS                status;
+
+    Count = Relations->Count;
+    ASSERT(Count != 0);
+
+    PhysicalDeviceObject = __FdoAllocate(sizeof (PDEVICE_OBJECT) * Count);
+
+    status = STATUS_NO_MEMORY;
+    if (PhysicalDeviceObject == NULL)
+        goto fail1;
+
+    RtlCopyMemory(PhysicalDeviceObject,
+                  Relations->Objects,
+                  sizeof (PDEVICE_OBJECT) * Count);
+
+    AcquireMutex(&Fdo->Mutex);
+
+    // Remove any PDOs that do not appear in the device list
+    ListEntry = Fdo->Dx->ListEntry.Flink;
+    while (ListEntry != &Fdo->Dx->ListEntry) {
+        PLIST_ENTRY     Next = ListEntry->Flink;
+        PXENDISK_DX     Dx = CONTAINING_RECORD(ListEntry, XENDISK_DX, ListEntry);
+        PXENDISK_PDO    Pdo = Dx->Pdo;
+        BOOLEAN         Missing;
+
+        Missing = TRUE;
+        for (Index = 0; Index < Count; Index++) {
+            if (PdoGetPhysicalDeviceObject(Pdo) == PhysicalDeviceObject[Index]) {
+                Missing = FALSE;
+#pragma prefast(suppress:6387)  // PhysicalDeviceObject[Index] could be NULL
+                ObDereferenceObject(PhysicalDeviceObject[Index]);
+                PhysicalDeviceObject[Index] = NULL; // avoid duplication
+                break;
+            }
+        }
+
+        if (Missing && !PdoIsMissing(Pdo)) {
+            if (PdoGetDevicePnpState(Pdo) == Present) {
+                PdoSetDevicePnpState(Pdo, Deleted);
+                PdoDestroy(Pdo);
+            } else {
+                PdoSetMissing(Pdo, "device disappeared");
+            }
+        }
+
+        ListEntry = Next;
+    }
+
+    // Walk the list and create PDO filters for any new devices
+    for (Index = 0; Index < Count; Index++) {
+#pragma warning(suppress:6385)  // Reading invalid data from 'PhysicalDeviceObject'
+        if (PhysicalDeviceObject[Index] != NULL) {
+            (VOID) PdoCreate(Fdo,
+                             PhysicalDeviceObject[Index]);
+            ObDereferenceObject(PhysicalDeviceObject[Index]);
+        }
+    }
+    
+    ReleaseMutex(&Fdo->Mutex);
+
+    __FdoFree(PhysicalDeviceObject);
+    return;
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+}
+
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
+static NTSTATUS
+__FdoForwardIrpSynchronously(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
+    )
+{
+    PKEVENT             Event = Context;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
+    UNREFERENCED_PARAMETER(Irp);
+
+    KeSetEvent(Event, IO_NO_INCREMENT, FALSE);
+
+    return STATUS_MORE_PROCESSING_REQUIRED;
+}
+
+static NTSTATUS
+FdoForwardIrpSynchronously(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PIRP            Irp
+    )
+{
+    KEVENT              Event;
+    NTSTATUS            status;
+
+    ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
+
+    KeInitializeEvent(&Event, NotificationEvent, FALSE);
+
+    IoCopyCurrentIrpStackLocationToNext(Irp);
+    IoSetCompletionRoutine(Irp,
+                           __FdoForwardIrpSynchronously,
+                           &Event,
+                           TRUE,
+                           TRUE,
+                           TRUE);
+
+    status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
+    if (status == STATUS_PENDING) {
+        (VOID) KeWaitForSingleObject(&Event,
+                                     Executive,
+                                     KernelMode,
+                                     FALSE,
+                                     NULL);
+        status = Irp->IoStatus.Status;
+    } else {
+        ASSERT3U(status, ==, Irp->IoStatus.Status);
+    }
+
+    return status;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+FdoStartDevice(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PIRP            Irp
+    )
+{
+    POWER_STATE         PowerState;
+    NTSTATUS            status;
+
+    status = IoAcquireRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    status = FdoForwardIrpSynchronously(Fdo, Irp);
+    if (!NT_SUCCESS(status))
+        goto fail2;
+
+    __FdoSetSystemPowerState(Fdo, PowerSystemWorking);
+    __FdoSetDevicePowerState(Fdo, PowerDeviceD0);
+
+    PowerState.DeviceState = PowerDeviceD0;
+    PoSetPowerState(Fdo->Dx->DeviceObject,
+                    DevicePowerState,
+                    PowerState);
+
+    __FdoSetDevicePnpState(Fdo, Started);
+
+    IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+
+fail2:
+    Error("fail2\n");
+
+    IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
+static NTSTATUS
+__FdoQueryStopDevice(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
+    )
+{
+    PXENDISK_FDO        Fdo = Context;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
+
+    if (Irp->PendingReturned)
+        IoMarkIrpPending(Irp);
+
+    IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+
+    return STATUS_SUCCESS;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+FdoQueryStopDevice(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PIRP            Irp
+    )
+{
+    NTSTATUS            status;
+
+    status = IoAcquireRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    __FdoSetDevicePnpState(Fdo, StopPending);
+    Irp->IoStatus.Status = STATUS_SUCCESS;
+
+    IoCopyCurrentIrpStackLocationToNext(Irp);
+    IoSetCompletionRoutine(Irp,
+                           __FdoQueryStopDevice,
+                           Fdo,
+                           TRUE,
+                           TRUE,
+                           TRUE);
+
+    status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
+
+    return status;
+
+fail1:
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
+static NTSTATUS
+__FdoCancelStopDevice(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
+    )
+{
+    PXENDISK_FDO        Fdo = Context;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
+
+    if (Irp->PendingReturned)
+        IoMarkIrpPending(Irp);
+
+    IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+
+    return STATUS_SUCCESS;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+FdoCancelStopDevice(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PIRP            Irp
+    )
+{
+    NTSTATUS            status;
+
+    status = IoAcquireRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    Irp->IoStatus.Status = STATUS_SUCCESS;
+
+    __FdoRestoreDevicePnpState(Fdo, StopPending);
+
+    IoCopyCurrentIrpStackLocationToNext(Irp);
+    IoSetCompletionRoutine(Irp,
+                           __FdoCancelStopDevice,
+                           Fdo,
+                           TRUE,
+                           TRUE,
+                           TRUE);
+
+    status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
+
+    return status;
+
+fail1:
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
+static NTSTATUS
+__FdoStopDevice(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
+    )
+{
+    PXENDISK_FDO        Fdo = Context;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
+
+    if (Irp->PendingReturned)
+        IoMarkIrpPending(Irp);
+
+    IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+
+    return STATUS_SUCCESS;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+FdoStopDevice(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PIRP            Irp
+    )
+{
+    POWER_STATE         PowerState;
+    NTSTATUS            status;
+
+    status = IoAcquireRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    if (__FdoGetDevicePowerState(Fdo) != PowerDeviceD0)
+        goto done;
+
+    PowerState.DeviceState = PowerDeviceD3;
+    PoSetPowerState(Fdo->Dx->DeviceObject,
+                    DevicePowerState,
+                    PowerState);
+
+    __FdoSetDevicePowerState(Fdo, PowerDeviceD3);
+    __FdoSetSystemPowerState(Fdo, PowerSystemShutdown);
+
+done:
+    __FdoSetDevicePnpState(Fdo, Stopped);
+    Irp->IoStatus.Status = STATUS_SUCCESS;
+
+    IoCopyCurrentIrpStackLocationToNext(Irp);
+    IoSetCompletionRoutine(Irp,
+                           __FdoStopDevice,
+                           Fdo,
+                           TRUE,
+                           TRUE,
+                           TRUE);
+
+    status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
+
+    return status;
+
+fail1:
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
+static NTSTATUS
+__FdoQueryRemoveDevice(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
+    )
+{
+    PXENDISK_FDO        Fdo = Context;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
+
+    if (Irp->PendingReturned)
+        IoMarkIrpPending(Irp);
+
+    IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+
+    return STATUS_SUCCESS;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+FdoQueryRemoveDevice(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PIRP            Irp
+    )
+{
+    NTSTATUS            status;
+
+    status = IoAcquireRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    __FdoSetDevicePnpState(Fdo, RemovePending);
+    Irp->IoStatus.Status = STATUS_SUCCESS;
+
+    IoCopyCurrentIrpStackLocationToNext(Irp);
+    IoSetCompletionRoutine(Irp,
+                           __FdoQueryRemoveDevice,
+                           Fdo,
+                           TRUE,
+                           TRUE,
+                           TRUE);
+
+    status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
+
+    return status;
+
+fail1:
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
+static NTSTATUS
+__FdoCancelRemoveDevice(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
+    )
+{
+    PXENDISK_FDO        Fdo = Context;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
+
+    if (Irp->PendingReturned)
+        IoMarkIrpPending(Irp);
+
+    IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+
+    return STATUS_SUCCESS;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+FdoCancelRemoveDevice(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PIRP            Irp
+    )
+{
+    NTSTATUS            status;
+
+    status = IoAcquireRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    __FdoRestoreDevicePnpState(Fdo, RemovePending);
+    Irp->IoStatus.Status = STATUS_SUCCESS;
+
+    IoCopyCurrentIrpStackLocationToNext(Irp);
+    IoSetCompletionRoutine(Irp,
+                           __FdoCancelRemoveDevice,
+                           Fdo,
+                           TRUE,
+                           TRUE,
+                           TRUE);
+
+    status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
+
+    return status;
+
+fail1:
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
+static NTSTATUS
+__FdoSurpriseRemoval(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
+    )
+{
+    PXENDISK_FDO        Fdo = Context;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
+
+    if (Irp->PendingReturned)
+        IoMarkIrpPending(Irp);
+
+    IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+
+    return STATUS_SUCCESS;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+FdoSurpriseRemoval(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PIRP            Irp
+    )
+{
+    NTSTATUS            status;
+
+    status = IoAcquireRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    __FdoSetDevicePnpState(Fdo, SurpriseRemovePending);
+    Irp->IoStatus.Status = STATUS_SUCCESS;
+
+    IoCopyCurrentIrpStackLocationToNext(Irp);
+    IoSetCompletionRoutine(Irp,
+                           __FdoSurpriseRemoval,
+                           Fdo,
+                           TRUE,
+                           TRUE,
+                           TRUE);
+
+    status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
+
+    return status;
+
+fail1:
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+FdoRemoveDevice(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PIRP            Irp
+    )
+{
+    POWER_STATE         PowerState;
+    NTSTATUS            status;
+
+    status = IoAcquireRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    if (__FdoGetDevicePowerState(Fdo) != PowerDeviceD0)
+        goto done;
+
+    PowerState.DeviceState = PowerDeviceD3;
+    PoSetPowerState(Fdo->Dx->DeviceObject,
+                    DevicePowerState,
+                    PowerState);
+
+    __FdoSetDevicePowerState(Fdo, PowerDeviceD3);
+    __FdoSetSystemPowerState(Fdo, PowerSystemShutdown);
+
+done:
+    __FdoSetDevicePnpState(Fdo, Deleted);
+
+    IoReleaseRemoveLockAndWait(&Fdo->Dx->RemoveLock, Irp);
+
+    status = FdoForwardIrpSynchronously(Fdo, Irp);
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    AcquireMutex(&Fdo->Mutex);
+    ASSERT3U(Fdo->References, !=, 0);
+    --Fdo->References;
+    ReleaseMutex(&Fdo->Mutex);
+
+    if (Fdo->References == 0)
+        FdoDestroy(Fdo);
+
+    return status;
+
+fail1:
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
+static NTSTATUS
+__FdoQueryDeviceRelations(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
+    )
+{
+    PKEVENT             Event = Context;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
+    UNREFERENCED_PARAMETER(Irp);
+
+    KeSetEvent(Event, IO_NO_INCREMENT, FALSE);
+
+    return STATUS_MORE_PROCESSING_REQUIRED;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+FdoQueryDeviceRelations(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PIRP            Irp
+    )
+{
+    KEVENT              Event;
+    PIO_STACK_LOCATION  StackLocation;
+    ULONG               Size;
+    PDEVICE_RELATIONS   Relations;
+    PLIST_ENTRY         ListEntry;
+    ULONG               Count;
+    NTSTATUS            status;
+
+    status = IoAcquireRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    KeInitializeEvent(&Event, NotificationEvent, FALSE);
+
+    IoCopyCurrentIrpStackLocationToNext(Irp);
+    IoSetCompletionRoutine(Irp,
+                           __FdoQueryDeviceRelations,
+                           &Event,
+                           TRUE,
+                           TRUE,
+                           TRUE);
+
+    status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
+    if (status == STATUS_PENDING) {
+        (VOID) KeWaitForSingleObject(&Event,
+                                     Executive,
+                                     KernelMode,
+                                     FALSE,
+                                     NULL);
+        status = Irp->IoStatus.Status;
+    } else {
+        ASSERT3U(status, ==, Irp->IoStatus.Status);
+    }
+
+    if (!NT_SUCCESS(status))
+        goto fail2;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    if (StackLocation->Parameters.QueryDeviceRelations.Type != BusRelations)
+        goto done;
+
+    Relations = (PDEVICE_RELATIONS)Irp->IoStatus.Information;
+
+    if (Relations->Count != 0)
+        __FdoEnumerate(Fdo, Relations);
+
+    ExFreePool(Relations);
+
+    AcquireMutex(&Fdo->Mutex);
+
+    Count = 0;
+    for (ListEntry = Fdo->Dx->ListEntry.Flink;
+         ListEntry != &Fdo->Dx->ListEntry;
+         ListEntry = ListEntry->Flink)
+        Count++;
+
+    Size = FIELD_OFFSET(DEVICE_RELATIONS, Objects) + (sizeof (DEVICE_OBJECT) * __min(Count, 1));
+
+    Relations = ExAllocatePoolWithTag(PagedPool, Size, 'TLIF');
+
+    status = STATUS_NO_MEMORY;
+    if (Relations == NULL)
+        goto fail3;
+
+    RtlZeroMemory(Relations, Size);
+
+    for (ListEntry = Fdo->Dx->ListEntry.Flink;
+         ListEntry != &Fdo->Dx->ListEntry;
+         ListEntry = ListEntry->Flink) {
+        PXENDISK_DX     Dx = CONTAINING_RECORD(ListEntry, XENDISK_DX, ListEntry);
+        PXENDISK_PDO    Pdo = Dx->Pdo;
+
+        ASSERT3U(Dx->Type, ==, PHYSICAL_DEVICE_OBJECT);
+
+        if (PdoGetDevicePnpState(Pdo) == Present)
+            PdoSetDevicePnpState(Pdo, Enumerated);
+
+        ObReferenceObject(PdoGetPhysicalDeviceObject(Pdo));
+        Relations->Objects[Relations->Count++] = PdoGetPhysicalDeviceObject(Pdo);
+    }
+
+    ASSERT3U(Relations->Count, ==, Count);
+
+    Trace("%d PDO(s)\n", Relations->Count);
+
+    ReleaseMutex(&Fdo->Mutex);
+
+    Irp->IoStatus.Information = (ULONG_PTR)Relations;
+    status = STATUS_SUCCESS;
+
+done:
+    IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+
+fail3:
+    ReleaseMutex(&Fdo->Mutex);
+
+fail2:
+    IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+
+fail1:
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
+static NTSTATUS
+__FdoDispatchPnp(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
+    )
+{
+    PXENDISK_FDO        Fdo = Context;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
+
+    if (Irp->PendingReturned)
+        IoMarkIrpPending(Irp);
+
+    IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+    return STATUS_SUCCESS;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+FdoDispatchPnp(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    UCHAR               MinorFunction;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    MinorFunction = StackLocation->MinorFunction;
+
+    switch (StackLocation->MinorFunction) {
+    case IRP_MN_START_DEVICE:
+        status = FdoStartDevice(Fdo, Irp);
+        break;
+
+    case IRP_MN_QUERY_STOP_DEVICE:
+        status = FdoQueryStopDevice(Fdo, Irp);
+        break;
+
+    case IRP_MN_CANCEL_STOP_DEVICE:
+        status = FdoCancelStopDevice(Fdo, Irp);
+        break;
+
+    case IRP_MN_STOP_DEVICE:
+        status = FdoStopDevice(Fdo, Irp);
+        break;
+
+    case IRP_MN_QUERY_REMOVE_DEVICE:
+        status = FdoQueryRemoveDevice(Fdo, Irp);
+        break;
+
+    case IRP_MN_SURPRISE_REMOVAL:
+        status = FdoSurpriseRemoval(Fdo, Irp);
+        break;
+
+    case IRP_MN_REMOVE_DEVICE:
+        status = FdoRemoveDevice(Fdo, Irp);
+        break;
+
+    case IRP_MN_CANCEL_REMOVE_DEVICE:
+        status = FdoCancelRemoveDevice(Fdo, Irp);
+        break;
+
+    case IRP_MN_QUERY_DEVICE_RELATIONS:
+        status = FdoQueryDeviceRelations(Fdo, Irp);
+        break;
+
+    default:
+        status = IoAcquireRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+        if (!NT_SUCCESS(status))
+            goto fail1;
+
+        IoCopyCurrentIrpStackLocationToNext(Irp);
+        IoSetCompletionRoutine(Irp,
+                               __FdoDispatchPnp,
+                               Fdo,
+                               TRUE,
+                               TRUE,
+                               TRUE);
+
+        status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
+        break;
+    }
+
+    return status;
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__FdoSetDevicePowerUp(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    DEVICE_POWER_STATE  DeviceState;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
+
+    ASSERT3U(DeviceState, <,  __FdoGetDevicePowerState(Fdo));
+
+    status = FdoForwardIrpSynchronously(Fdo, Irp);
+    if (!NT_SUCCESS(status))
+        goto done;
+
+    Verbose("%p: %s -> %s\n",
+         Fdo->Dx->DeviceObject,
+         PowerDeviceStateName(__FdoGetDevicePowerState(Fdo)),
+         PowerDeviceStateName(DeviceState));
+
+    __FdoSetDevicePowerState(Fdo, DeviceState);
+
+done:
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__FdoSetDevicePowerDown(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    DEVICE_POWER_STATE  DeviceState;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
+
+    ASSERT3U(DeviceState, >,  __FdoGetDevicePowerState(Fdo));
+
+    Verbose("%p: %s -> %s\n",
+         Fdo->Dx->DeviceObject,
+         PowerDeviceStateName(__FdoGetDevicePowerState(Fdo)),
+         PowerDeviceStateName(DeviceState));
+
+    __FdoSetDevicePowerState(Fdo, DeviceState);
+
+    status = FdoForwardIrpSynchronously(Fdo, Irp);
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__FdoSetDevicePower(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    DEVICE_POWER_STATE  DeviceState;
+    POWER_ACTION        PowerAction;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
+    PowerAction = StackLocation->Parameters.Power.ShutdownType;
+
+    Trace("====> (%s:%s)\n",
+          PowerDeviceStateName(DeviceState), 
+          PowerActionName(PowerAction));
+
+    if (DeviceState == __FdoGetDevicePowerState(Fdo)) {
+        status = FdoForwardIrpSynchronously(Fdo, Irp);
+        IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+        goto done;
+    }
+
+    status = (DeviceState < __FdoGetDevicePowerState(Fdo)) ?
+             __FdoSetDevicePowerUp(Fdo, Irp) :
+             __FdoSetDevicePowerDown(Fdo, Irp);
+
+done:
+    Trace("<==== (%s:%s)(%08x)\n",
+          PowerDeviceStateName(DeviceState), 
+          PowerActionName(PowerAction),
+          status);
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__FdoSetSystemPowerUp(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    SYSTEM_POWER_STATE  SystemState;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    SystemState = StackLocation->Parameters.Power.State.SystemState;
+
+    ASSERT3U(SystemState, <,  __FdoGetSystemPowerState(Fdo));
+
+    status = FdoForwardIrpSynchronously(Fdo, Irp);
+    if (!NT_SUCCESS(status))
+        goto done;
+
+    Verbose("%p: %s -> %s\n",
+         Fdo->Dx->DeviceObject,
+         PowerSystemStateName(__FdoGetSystemPowerState(Fdo)),
+         PowerSystemStateName(SystemState));
+
+    __FdoSetSystemPowerState(Fdo, SystemState);
+
+done:
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__FdoSetSystemPowerDown(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    SYSTEM_POWER_STATE  SystemState;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    SystemState = StackLocation->Parameters.Power.State.SystemState;
+
+    ASSERT3U(SystemState, >,  __FdoGetSystemPowerState(Fdo));
+
+    Verbose("%p: %s -> %s\n",
+         Fdo->Dx->DeviceObject,
+         PowerSystemStateName(__FdoGetSystemPowerState(Fdo)),
+         PowerSystemStateName(SystemState));
+
+    __FdoSetSystemPowerState(Fdo, SystemState);
+
+    status = FdoForwardIrpSynchronously(Fdo, Irp);
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__FdoSetSystemPower(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    SYSTEM_POWER_STATE  SystemState;
+    POWER_ACTION        PowerAction;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    SystemState = StackLocation->Parameters.Power.State.SystemState;
+    PowerAction = StackLocation->Parameters.Power.ShutdownType;
+
+    Trace("====> (%s:%s)\n",
+          PowerSystemStateName(SystemState), 
+          PowerActionName(PowerAction));
+
+    if (SystemState == __FdoGetSystemPowerState(Fdo)) {
+        status = FdoForwardIrpSynchronously(Fdo, Irp);
+        IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+        goto done;
+    }
+
+    status = (SystemState < __FdoGetSystemPowerState(Fdo)) ?
+             __FdoSetSystemPowerUp(Fdo, Irp) :
+             __FdoSetSystemPowerDown(Fdo, Irp);
+
+done:
+    Trace("<==== (%s:%s)(%08x)\n",
+          PowerSystemStateName(SystemState), 
+          PowerActionName(PowerAction),
+          status);
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__FdoQueryDevicePowerUp(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    DEVICE_POWER_STATE  DeviceState;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
+
+    ASSERT3U(DeviceState, <,  __FdoGetDevicePowerState(Fdo));
+
+    status = FdoForwardIrpSynchronously(Fdo, Irp);
+
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__FdoQueryDevicePowerDown(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    DEVICE_POWER_STATE  DeviceState;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
+
+    ASSERT3U(DeviceState, >,  __FdoGetDevicePowerState(Fdo));
+
+    status = FdoForwardIrpSynchronously(Fdo, Irp);
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__FdoQueryDevicePower(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    DEVICE_POWER_STATE  DeviceState;
+    POWER_ACTION        PowerAction;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
+    PowerAction = StackLocation->Parameters.Power.ShutdownType;
+
+    Trace("====> (%s:%s)\n",
+          PowerDeviceStateName(DeviceState), 
+          PowerActionName(PowerAction));
+
+    if (DeviceState == __FdoGetDevicePowerState(Fdo)) {
+        status = FdoForwardIrpSynchronously(Fdo, Irp);
+        IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+        goto done;
+    }
+
+    status = (DeviceState < __FdoGetDevicePowerState(Fdo)) ?
+             __FdoQueryDevicePowerUp(Fdo, Irp) :
+             __FdoQueryDevicePowerDown(Fdo, Irp);
+
+done:
+    Trace("<==== (%s:%s)(%08x)\n",
+          PowerDeviceStateName(DeviceState), 
+          PowerActionName(PowerAction),
+          status);
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__FdoQuerySystemPowerUp(
+    IN  PXENDISK_FDO     Fdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    SYSTEM_POWER_STATE  SystemState;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    SystemState = StackLocation->Parameters.Power.State.SystemState;
+
+    ASSERT3U(SystemState, <,  __FdoGetSystemPowerState(Fdo));
+
+    status = FdoForwardIrpSynchronously(Fdo, Irp);
+
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__FdoQuerySystemPowerDown(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    SYSTEM_POWER_STATE  SystemState;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    SystemState = StackLocation->Parameters.Power.State.SystemState;
+
+    ASSERT3U(SystemState, >,  __FdoGetSystemPowerState(Fdo));
+
+    status = FdoForwardIrpSynchronously(Fdo, Irp);
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__FdoQuerySystemPower(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    SYSTEM_POWER_STATE  SystemState;
+    POWER_ACTION        PowerAction;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    SystemState = StackLocation->Parameters.Power.State.SystemState;
+    PowerAction = StackLocation->Parameters.Power.ShutdownType;
+
+    Trace("====> (%s:%s)\n",
+          PowerSystemStateName(SystemState), 
+          PowerActionName(PowerAction));
+
+    if (SystemState == __FdoGetSystemPowerState(Fdo)) {
+        status = FdoForwardIrpSynchronously(Fdo, Irp);
+        IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+        goto done;
+    }
+
+    status = (SystemState < __FdoGetSystemPowerState(Fdo)) ?
+             __FdoQuerySystemPowerUp(Fdo, Irp) :
+             __FdoQuerySystemPowerDown(Fdo, Irp);
+
+done:
+    Trace("<==== (%s:%s)(%08x)\n",
+          PowerSystemStateName(SystemState), 
+          PowerActionName(PowerAction),
+          status);
+
+    return status;
+}
+
+static NTSTATUS
+FdoDevicePower(
+    IN  PXENDISK_THREAD Self,
+    IN  PVOID           Context
+    )
+{
+    PXENDISK_FDO        Fdo = Context;
+    PKEVENT             Event;
+
+    Event = ThreadGetEvent(Self);
+
+    for (;;) {
+        PIRP                Irp;
+        PIO_STACK_LOCATION  StackLocation;
+        UCHAR               MinorFunction;
+
+        if (Fdo->DevicePowerIrp == NULL) {
+            (VOID) KeWaitForSingleObject(Event,
+                                         Executive,
+                                         KernelMode,
+                                         FALSE,
+                                         NULL);
+            KeClearEvent(Event);
+        }
+
+        if (ThreadIsAlerted(Self))
+            break;
+
+        Irp = Fdo->DevicePowerIrp;
+
+        if (Irp == NULL)
+            continue;
+
+        Fdo->DevicePowerIrp = NULL;
+        KeMemoryBarrier();
+
+        StackLocation = IoGetCurrentIrpStackLocation(Irp);
+        MinorFunction = StackLocation->MinorFunction;
+
+        switch (StackLocation->MinorFunction) {
+        case IRP_MN_SET_POWER:
+            (VOID) __FdoSetDevicePower(Fdo, Irp);
+            break;
+
+        case IRP_MN_QUERY_POWER:
+            (VOID) __FdoQueryDevicePower(Fdo, Irp);
+            break;
+
+        default:
+            ASSERT(FALSE);
+            break;
+        }
+
+        IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+    }
+
+    return STATUS_SUCCESS;
+}
+
+static NTSTATUS
+FdoSystemPower(
+    IN  PXENDISK_THREAD Self,
+    IN  PVOID           Context
+    )
+{
+    PXENDISK_FDO        Fdo = Context;
+    PKEVENT             Event;
+
+    Event = ThreadGetEvent(Self);
+
+    for (;;) {
+        PIRP                Irp;
+        PIO_STACK_LOCATION  StackLocation;
+        UCHAR               MinorFunction;
+
+        if (Fdo->SystemPowerIrp == NULL) {
+            (VOID) KeWaitForSingleObject(Event,
+                                         Executive,
+                                         KernelMode,
+                                         FALSE,
+                                         NULL);
+            KeClearEvent(Event);
+        }
+
+        if (ThreadIsAlerted(Self))
+            break;
+
+        Irp = Fdo->SystemPowerIrp;
+
+        if (Irp == NULL)
+            continue;
+
+        Fdo->SystemPowerIrp = NULL;
+        KeMemoryBarrier();
+
+        StackLocation = IoGetCurrentIrpStackLocation(Irp);
+        MinorFunction = StackLocation->MinorFunction;
+
+        switch (StackLocation->MinorFunction) {
+        case IRP_MN_SET_POWER:
+            (VOID) __FdoSetSystemPower(Fdo, Irp);
+            break;
+
+        case IRP_MN_QUERY_POWER:
+            (VOID) __FdoQuerySystemPower(Fdo, Irp);
+            break;
+
+        default:
+            ASSERT(FALSE);
+            break;
+        }
+
+        IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+    }
+
+    return STATUS_SUCCESS;
+}
+
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
+static NTSTATUS
+__FdoDispatchPower(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
+    )
+{
+    PXENDISK_FDO        Fdo = Context;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
+
+    if (Irp->PendingReturned)
+        IoMarkIrpPending(Irp);
+
+    IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+    return STATUS_SUCCESS;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+FdoDispatchPower(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    UCHAR               MinorFunction;
+    POWER_STATE_TYPE    PowerType;
+    NTSTATUS            status;
+
+    status = IoAcquireRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    MinorFunction = StackLocation->MinorFunction;
+
+    if (MinorFunction != IRP_MN_QUERY_POWER &&
+        MinorFunction != IRP_MN_SET_POWER) {
+        IoCopyCurrentIrpStackLocationToNext(Irp);
+        IoSetCompletionRoutine(Irp,
+                               __FdoDispatchPower,
+                               Fdo,
+                               TRUE,
+                               TRUE,
+                               TRUE);
+
+        status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
+
+        goto done;
+    }
+
+    PowerType = StackLocation->Parameters.Power.Type;
+
+    Trace("====> (%02x:%s)\n",
+          MinorFunction, 
+          PowerMinorFunctionName(MinorFunction)); 
+
+    switch (PowerType) {
+    case DevicePowerState:
+        IoMarkIrpPending(Irp);
+
+        ASSERT3P(Fdo->DevicePowerIrp, ==, NULL);
+        Fdo->DevicePowerIrp = Irp;
+        KeMemoryBarrier();
+
+        ThreadWake(Fdo->DevicePowerThread);
+
+        status = STATUS_PENDING;
+        break;
+
+    case SystemPowerState:
+        IoMarkIrpPending(Irp);
+
+        ASSERT3P(Fdo->SystemPowerIrp, ==, NULL);
+        Fdo->SystemPowerIrp = Irp;
+        KeMemoryBarrier();
+
+        ThreadWake(Fdo->SystemPowerThread);
+
+        status = STATUS_PENDING;
+        break;
+
+    default:
+        IoCopyCurrentIrpStackLocationToNext(Irp);
+        IoSetCompletionRoutine(Irp,
+                               __FdoDispatchPower,
+                               Fdo,
+                               TRUE,
+                               TRUE,
+                               TRUE);
+
+        status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
+        break;
+    }
+
+    Trace("<==== (%02x:%s) (%08x)\n",
+          MinorFunction, 
+          PowerMinorFunctionName(MinorFunction),
+          status);
+
+done:
+    return status;
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
+static NTSTATUS
+__FdoDispatchDefault(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
+    )
+{
+    PXENDISK_FDO        Fdo = Context;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
+
+    if (Irp->PendingReturned)
+        IoMarkIrpPending(Irp);
+
+    IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+
+    return STATUS_SUCCESS;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+FdoDispatchDefault(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PIRP            Irp
+    )
+{
+    NTSTATUS            status;
+
+    status = IoAcquireRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    IoCopyCurrentIrpStackLocationToNext(Irp);
+    IoSetCompletionRoutine(Irp,
+                           __FdoDispatchDefault,
+                           Fdo,
+                           TRUE,
+                           TRUE,
+                           TRUE);
+
+    status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
+
+    return status;
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+NTSTATUS
+FdoDispatch(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+
+    switch (StackLocation->MajorFunction) {
+    case IRP_MJ_PNP:
+        status = FdoDispatchPnp(Fdo, Irp);
+        break;
+
+    case IRP_MJ_POWER:
+        status = FdoDispatchPower(Fdo, Irp);
+        break;
+
+    default:
+        status = FdoDispatchDefault(Fdo, Irp);
+        break;
+    }
+
+    return status;
+}
+
+NTSTATUS
+FdoCreate(
+    IN  PDEVICE_OBJECT  PhysicalDeviceObject
+    )
+{
+    PDEVICE_OBJECT      LowerDeviceObject;
+    ULONG               DeviceType;
+    PDEVICE_OBJECT      FilterDeviceObject;
+    PXENDISK_DX         Dx;
+    PXENDISK_FDO        Fdo;
+    NTSTATUS            status;
+
+    LowerDeviceObject = IoGetAttachedDeviceReference(PhysicalDeviceObject);
+    DeviceType = LowerDeviceObject->DeviceType;
+    ObDereferenceObject(LowerDeviceObject);
+
+#pragma prefast(suppress:28197) // Possibly leaking memory 'FilterDeviceObject'
+    status = IoCreateDevice(DriverGetDriverObject(),
+                            sizeof (XENDISK_DX),
+                            NULL,
+                            DeviceType,
+                            FILE_DEVICE_SECURE_OPEN,
+                            FALSE,
+                            &FilterDeviceObject);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    Dx = (PXENDISK_DX)FilterDeviceObject->DeviceExtension;
+    RtlZeroMemory(Dx, sizeof (XENDISK_DX));
+
+    Dx->Type = FUNCTION_DEVICE_OBJECT;
+    Dx->DeviceObject = FilterDeviceObject;
+    Dx->DevicePnpState = Added;
+    Dx->SystemPowerState = PowerSystemShutdown;
+    Dx->DevicePowerState = PowerDeviceD3;
+
+    IoInitializeRemoveLock(&Dx->RemoveLock, FDO_TAG, 0, 0);
+
+    Fdo = __FdoAllocate(sizeof (XENDISK_FDO));
+
+    status = STATUS_NO_MEMORY;
+    if (Fdo == NULL)
+        goto fail2;
+
+    LowerDeviceObject = IoAttachDeviceToDeviceStack(FilterDeviceObject,
+                                                    PhysicalDeviceObject);
+
+    status = STATUS_UNSUCCESSFUL;
+    if (LowerDeviceObject == NULL)
+        goto fail3;
+
+    Fdo->Dx = Dx;
+    Fdo->PhysicalDeviceObject = PhysicalDeviceObject;
+    Fdo->LowerDeviceObject = LowerDeviceObject;
+
+    status = ThreadCreate(FdoSystemPower, Fdo, &Fdo->SystemPowerThread);
+    if (!NT_SUCCESS(status))
+        goto fail4;
+
+    status = ThreadCreate(FdoDevicePower, Fdo, &Fdo->DevicePowerThread);
+    if (!NT_SUCCESS(status))
+        goto fail5;
+
+    InitializeMutex(&Fdo->Mutex);
+    InitializeListHead(&Dx->ListEntry);
+    Fdo->References = 1;
+
+    Verbose("%p\n", FilterDeviceObject);
+
+    Dx->Fdo = Fdo;
+
+#pragma prefast(suppress:28182)  // Dereferencing NULL pointer
+    FilterDeviceObject->DeviceType = LowerDeviceObject->DeviceType;
+    FilterDeviceObject->Characteristics = LowerDeviceObject->Characteristics;
+
+    FilterDeviceObject->Flags |= LowerDeviceObject->Flags;
+    FilterDeviceObject->Flags &= ~DO_DEVICE_INITIALIZING;
+
+    return STATUS_SUCCESS;
+
+fail5:
+    Error("fail5\n");
+
+    ThreadAlert(Fdo->SystemPowerThread);
+    ThreadJoin(Fdo->SystemPowerThread);
+    Fdo->SystemPowerThread = NULL;
+
+fail4:
+    Error("fail4\n");
+
+    Fdo->PhysicalDeviceObject = NULL;
+    Fdo->LowerDeviceObject = NULL;
+    Fdo->Dx = NULL;
+
+    IoDetachDevice(LowerDeviceObject);
+
+fail3:
+    Error("fail3\n");
+
+    ASSERT(IsZeroMemory(Fdo, sizeof (XENDISK_FDO)));
+    __FdoFree(Fdo);
+
+fail2:
+    Error("fail2\n");
+
+    IoDeleteDevice(FilterDeviceObject);
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return status;
+}
+
+VOID
+FdoDestroy(
+    IN  PXENDISK_FDO    Fdo
+    )
+{
+    PDEVICE_OBJECT      LowerDeviceObject = Fdo->LowerDeviceObject;
+    PXENDISK_DX         Dx = Fdo->Dx;
+    PDEVICE_OBJECT      FilterDeviceObject = Dx->DeviceObject;
+
+    ASSERT(IsListEmpty(&Dx->ListEntry));
+    ASSERT3U(Fdo->References, ==, 0);
+    ASSERT3U(__FdoGetDevicePnpState(Fdo), ==, Deleted);
+
+    Dx->Fdo = NULL;
+
+    RtlZeroMemory(&Fdo->Mutex, sizeof (MUTEX));
+
+    ThreadAlert(Fdo->DevicePowerThread);
+    ThreadJoin(Fdo->DevicePowerThread);
+    Fdo->DevicePowerThread = NULL;
+
+    ThreadAlert(Fdo->SystemPowerThread);
+    ThreadJoin(Fdo->SystemPowerThread);
+    Fdo->SystemPowerThread = NULL;
+
+    Fdo->LowerDeviceObject = NULL;
+    Fdo->PhysicalDeviceObject = NULL;
+    Fdo->Dx = NULL;
+
+    IoDetachDevice(LowerDeviceObject);
+
+    ASSERT(IsZeroMemory(Fdo, sizeof (XENDISK_FDO)));
+    __FdoFree(Fdo);
+
+    IoDeleteDevice(FilterDeviceObject);
+}
diff --git a/src/xendisk/fdo.h b/src/xendisk/fdo.h
new file mode 100644
index 0000000..8aa0529
--- /dev/null
+++ b/src/xendisk/fdo.h
@@ -0,0 +1,78 @@
+/* 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 _XENDISK_FDO_H
+#define _XENDISK_FDO_H
+
+#include <ntddk.h>
+#include "types.h"
+
+typedef struct _XENDISK_FDO XENDISK_FDO, *PXENDISK_FDO;
+
+extern VOID
+FdoAddPhysicalDeviceObject(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PDEVICE_OBJECT  DeviceObject
+    );
+
+extern VOID
+FdoRemovePhysicalDeviceObject(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PDEVICE_OBJECT  DeviceObject
+    );
+
+extern VOID
+FdoAcquireMutex(
+    IN  PXENDISK_FDO     Fdo
+    );
+
+extern VOID
+FdoReleaseMutex(
+    IN  PXENDISK_FDO     Fdo
+    );
+
+extern NTSTATUS
+FdoDispatch(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PIRP            Irp
+    );
+
+extern NTSTATUS
+FdoCreate(
+    IN  PDEVICE_OBJECT  PhysicalDeviceObject
+    );
+
+extern VOID
+FdoDestroy(
+    IN  PXENDISK_FDO    Fdo
+    );
+
+#endif // _XENDISK_FDO_H
diff --git a/src/xendisk/mutex.h b/src/xendisk/mutex.h
new file mode 100644
index 0000000..bcc2414
--- /dev/null
+++ b/src/xendisk/mutex.h
@@ -0,0 +1,113 @@
+/* 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 _XENDISK_MUTEX_H
+#define _XENDISK_MUTEX_H
+
+#include <ntddk.h>
+
+#include "assert.h"
+
+typedef struct _MUTEX {
+    PKTHREAD    Owner;
+    KEVENT      Event;
+} MUTEX, *PMUTEX;
+
+static FORCEINLINE VOID
+InitializeMutex(
+    IN  PMUTEX  Mutex
+    )
+{
+    RtlZeroMemory(Mutex, sizeof (MUTEX));
+
+    KeInitializeEvent(&Mutex->Event, SynchronizationEvent, TRUE);
+}
+
+static FORCEINLINE BOOLEAN
+__drv_maxIRQL(PASSIVE_LEVEL)
+TryAcquireMutex(
+    IN  PMUTEX      Mutex
+    )
+{
+    LARGE_INTEGER   Timeout;
+    NTSTATUS        status;
+
+    Timeout.QuadPart = 0;
+
+    status = KeWaitForSingleObject(&Mutex->Event,
+                                   Executive,
+                                   KernelMode,
+                                   FALSE,
+                                   &Timeout);
+    if (status == STATUS_TIMEOUT)
+        return FALSE;
+
+    ASSERT(NT_SUCCESS(status));
+
+    ASSERT3P(Mutex->Owner, ==, NULL);
+    Mutex->Owner = KeGetCurrentThread();
+
+    return TRUE;
+}
+
+static FORCEINLINE VOID
+__drv_maxIRQL(PASSIVE_LEVEL)
+AcquireMutex(
+    IN  PMUTEX  Mutex
+    )
+{
+    NTSTATUS    status;
+
+    status = KeWaitForSingleObject(&Mutex->Event,
+                                   Executive,
+                                   KernelMode,
+                                   FALSE,
+                                   NULL);
+
+    ASSERT(NT_SUCCESS(status));
+
+    ASSERT3P(Mutex->Owner, ==, NULL);
+    Mutex->Owner = KeGetCurrentThread();
+}
+
+static FORCEINLINE VOID
+__drv_maxIRQL(PASSIVE_LEVEL)
+ReleaseMutex(
+    IN  PMUTEX  Mutex
+    )
+{
+    ASSERT3P(Mutex->Owner, ==, KeGetCurrentThread());
+    Mutex->Owner = NULL;
+
+    KeSetEvent(&Mutex->Event, IO_NO_INCREMENT, FALSE);
+}
+
+#endif  // _XENDISK_MUTEX_H
diff --git a/src/xendisk/pdo.c b/src/xendisk/pdo.c
new file mode 100644
index 0000000..3de958a
--- /dev/null
+++ b/src/xendisk/pdo.c
@@ -0,0 +1,2079 @@
+/* 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.
+ */ 
+
+#define INITGUID 1
+
+#include <ntddk.h>
+#include <wdmguid.h>
+#include <ntstrsafe.h>
+#include <stdlib.h>
+#include <storport.h>
+#include <Ntddstor.h>
+#include <Ntddscsi.h>
+#include <names.h>
+
+#include "fdo.h"
+#include "pdo.h"
+#include "driver.h"
+#include "thread.h"
+#include "debug.h"
+#include "assert.h"
+#include "util.h"
+
+#define PDO_TAG 'ODP'
+
+struct _XENDISK_PDO {
+    PXENDISK_DX                 Dx;
+    PDEVICE_OBJECT              LowerDeviceObject;
+    PDEVICE_OBJECT              PhysicalDeviceObject;
+
+    PXENDISK_THREAD             SystemPowerThread;
+    PIRP                        SystemPowerIrp;
+    PXENDISK_THREAD             DevicePowerThread;
+    PIRP                        DevicePowerIrp;
+
+    PXENDISK_FDO                Fdo;
+    BOOLEAN                     Missing;
+    const CHAR                  *Reason;
+
+    ULONG                       SectorSize;
+};
+
+static FORCEINLINE PVOID
+__PdoAllocate(
+    IN  ULONG   Length
+    )
+{
+    return __AllocateNonPagedPoolWithTag(__FUNCTION__, __LINE__, Length, PDO_TAG);
+}
+
+static FORCEINLINE VOID
+__PdoFree(
+    IN  PVOID   Buffer
+    )
+{
+    __FreePoolWithTag(Buffer, PDO_TAG);
+}
+
+static FORCEINLINE VOID
+__PdoSetDevicePnpState(
+    IN  PXENDISK_PDO        Pdo,
+    IN  DEVICE_PNP_STATE    State
+    )
+{
+    PXENDISK_DX             Dx = Pdo->Dx;
+
+    // We can never transition out of the deleted state
+    ASSERT(Dx->DevicePnpState != Deleted || State == Deleted);
+
+    Dx->PreviousDevicePnpState = Dx->DevicePnpState;
+    Dx->DevicePnpState = State;
+}
+
+VOID
+PdoSetDevicePnpState(
+    IN  PXENDISK_PDO        Pdo,
+    IN  DEVICE_PNP_STATE    State
+    )
+{
+    __PdoSetDevicePnpState(Pdo, State);
+}
+
+static FORCEINLINE VOID
+__PdoRestoreDevicePnpState(
+    IN  PXENDISK_PDO        Pdo,
+    IN  DEVICE_PNP_STATE    State
+    )
+{
+    PXENDISK_DX             Dx = Pdo->Dx;
+
+    if (Dx->DevicePnpState == State)
+        Dx->DevicePnpState = Dx->PreviousDevicePnpState;
+}
+
+static FORCEINLINE DEVICE_PNP_STATE
+__PdoGetDevicePnpState(
+    IN  PXENDISK_PDO    Pdo
+    )
+{
+    PXENDISK_DX         Dx = Pdo->Dx;
+
+    return Dx->DevicePnpState;
+}
+
+DEVICE_PNP_STATE
+PdoGetDevicePnpState(
+    IN  PXENDISK_PDO    Pdo
+    )
+{
+    return __PdoGetDevicePnpState(Pdo);
+}
+
+static FORCEINLINE VOID
+__PdoSetDevicePowerState(
+    IN  PXENDISK_PDO        Pdo,
+    IN  DEVICE_POWER_STATE  State
+    )
+{
+    PXENDISK_DX             Dx = Pdo->Dx;
+
+    Dx->DevicePowerState = State;
+}
+
+static FORCEINLINE DEVICE_POWER_STATE
+__PdoGetDevicePowerState(
+    IN  PXENDISK_PDO    Pdo
+    )
+{
+    PXENDISK_DX         Dx = Pdo->Dx;
+
+    return Dx->DevicePowerState;
+}
+
+static FORCEINLINE VOID
+__PdoSetSystemPowerState(
+    IN  PXENDISK_PDO        Pdo,
+    IN  SYSTEM_POWER_STATE  State
+    )
+{
+    PXENDISK_DX             Dx = Pdo->Dx;
+
+    Dx->SystemPowerState = State;
+}
+
+static FORCEINLINE SYSTEM_POWER_STATE
+__PdoGetSystemPowerState(
+    IN  PXENDISK_PDO    Pdo
+    )
+{
+    PXENDISK_DX         Dx = Pdo->Dx;
+
+    return Dx->SystemPowerState;
+}
+
+PDEVICE_OBJECT
+PdoGetPhysicalDeviceObject(
+    IN  PXENDISK_PDO    Pdo
+    )
+{
+    return Pdo->PhysicalDeviceObject;
+}
+
+static FORCEINLINE VOID
+__PdoSetMissing(
+    IN  PXENDISK_PDO    Pdo,
+    IN  const CHAR      *Reason
+    )
+{
+    Pdo->Reason = Reason;
+    Pdo->Missing = TRUE;
+}
+
+VOID
+PdoSetMissing(
+    IN  PXENDISK_PDO    Pdo,
+    IN  const CHAR      *Reason
+    )
+{
+    __PdoSetMissing(Pdo, Reason);
+}
+
+static FORCEINLINE BOOLEAN
+__PdoIsMissing(
+    IN  PXENDISK_PDO    Pdo
+    )
+{
+    return Pdo->Missing;
+}
+
+BOOLEAN
+PdoIsMissing(
+    IN  PXENDISK_PDO    Pdo
+    )
+{
+    return __PdoIsMissing(Pdo);
+}
+
+static FORCEINLINE VOID
+__PdoLink(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PXENDISK_FDO    Fdo
+    )
+{
+    Pdo->Fdo = Fdo;
+    FdoAddPhysicalDeviceObject(Fdo, Pdo->Dx->DeviceObject);
+}
+
+static FORCEINLINE VOID
+__PdoUnlink(
+    IN  PXENDISK_PDO    Pdo
+    )
+{
+    PXENDISK_FDO        Fdo = Pdo->Fdo;
+
+    ASSERT(Fdo != NULL);
+
+    FdoRemovePhysicalDeviceObject(Fdo, Pdo->Dx->DeviceObject);
+
+    Pdo->Fdo = NULL;
+}
+
+static FORCEINLINE PXENDISK_FDO
+__PdoGetFdo(
+    IN  PXENDISK_PDO Pdo
+    )
+{
+    return Pdo->Fdo;
+}
+
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
+static NTSTATUS
+__PdoForwardIrpSynchronously(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
+    )
+{
+    PKEVENT             Event = Context;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
+    UNREFERENCED_PARAMETER(Irp);
+
+    KeSetEvent(Event, IO_NO_INCREMENT, FALSE);
+
+    return STATUS_MORE_PROCESSING_REQUIRED;
+}
+
+static NTSTATUS
+PdoForwardIrpSynchronously(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    KEVENT              Event;
+    NTSTATUS            status;
+
+    ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
+
+    KeInitializeEvent(&Event, NotificationEvent, FALSE);
+
+    IoCopyCurrentIrpStackLocationToNext(Irp);
+    IoSetCompletionRoutine(Irp,
+                           __PdoForwardIrpSynchronously,
+                           &Event,
+                           TRUE,
+                           TRUE,
+                           TRUE);
+
+    status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
+    if (status == STATUS_PENDING) {
+        (VOID) KeWaitForSingleObject(&Event,
+                                     Executive,
+                                     KernelMode,
+                                     FALSE,
+                                     NULL);
+        status = Irp->IoStatus.Status;
+    } else {
+        ASSERT3U(status, ==, Irp->IoStatus.Status);
+    }
+
+    return status;
+}
+
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
+static NTSTATUS
+__PdoForwardIrpAndForget(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
+    )
+{
+    PXENDISK_PDO        Pdo = Context;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
+
+    if (Irp->PendingReturned)
+        IoMarkIrpPending(Irp);
+
+    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+
+    return STATUS_SUCCESS;
+}
+
+static NTSTATUS
+PdoForwardIrpAndForget(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    IoCopyCurrentIrpStackLocationToNext(Irp);
+    IoSetCompletionRoutine(Irp,
+                            __PdoForwardIrpAndForget,
+                            Pdo,
+                            TRUE,
+                            TRUE,
+                            TRUE);
+
+    return IoCallDriver(Pdo->LowerDeviceObject, Irp);
+}
+
+static NTSTATUS
+PdoCompleteIrp(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp,
+    IN  NTSTATUS        Status
+    )
+{
+    Irp->IoStatus.Status = Status;
+    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+    return Status;
+}
+
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
+static NTSTATUS
+__PdoQueryProperty(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
+    )
+{
+    PXENDISK_PDO        Pdo = Context;
+    PSTORAGE_ACCESS_ALIGNMENT_DESCRIPTOR    Descriptor = Irp->UserBuffer;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
+
+    if (Irp->PendingReturned)
+        IoMarkIrpPending(Irp);
+
+    if (!NT_SUCCESS(Irp->IoStatus.Status))
+        goto done;
+
+    Descriptor = Irp->UserBuffer;
+    Pdo->SectorSize = Descriptor->BytesPerLogicalSector;
+    Verbose("%p : %u bytes per sector\n", Pdo->Dx->DeviceObject, Pdo->SectorSize);
+
+done:
+    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+
+    return STATUS_SUCCESS;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+PdoQueryProperty(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    PSTORAGE_PROPERTY_QUERY Query;
+    PDEVICE_TRIM_DESCRIPTOR Trim;
+    NTSTATUS                status;
+
+    Query = Irp->AssociatedIrp.SystemBuffer;
+
+    switch (Query->PropertyId) {
+    case StorageAccessAlignmentProperty:
+        IoCopyCurrentIrpStackLocationToNext(Irp);
+        IoSetCompletionRoutine(Irp,
+                                __PdoQueryProperty,
+                                Pdo,
+                                TRUE,
+                                TRUE,
+                                TRUE);
+
+        status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
+        break;
+
+    case StorageDeviceTrimProperty:
+        Trim = Irp->AssociatedIrp.SystemBuffer;
+
+        Trim->Version = 0;
+        Trim->Size = sizeof(DEVICE_TRIM_DESCRIPTOR);
+        Trim->TrimEnabled = TRUE;
+
+        Irp->IoStatus.Information = (ULONG_PTR)sizeof(DEVICE_TRIM_DESCRIPTOR);
+        status = PdoCompleteIrp(Pdo, Irp, STATUS_SUCCESS);
+        break;
+
+    default:
+        status = PdoForwardIrpAndForget(Pdo, Irp);
+        break;
+    }
+
+    return status;
+}
+
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
+static NTSTATUS
+__PdoSendAwaitSrb(
+    IN  PDEVICE_OBJECT          DeviceObject,
+    IN  PIRP                    Irp,
+    IN  PVOID                   Context
+    )
+{
+    UNREFERENCED_PARAMETER(DeviceObject);
+    UNREFERENCED_PARAMETER(Context);
+
+    *(Irp->UserIosb) = Irp->IoStatus;
+
+    if (Irp->MdlAddress) {
+        MmUnlockPages(Irp->MdlAddress);
+        IoFreeMdl(Irp->MdlAddress);
+    }
+
+    KeSetEvent(Irp->UserEvent, IO_NO_INCREMENT, FALSE);
+
+    IoFreeIrp(Irp);
+    return STATUS_MORE_PROCESSING_REQUIRED;
+}
+
+static NTSTATUS
+PdoSendAwaitSrb(
+    IN  PXENDISK_PDO            Pdo,
+    IN  PSCSI_REQUEST_BLOCK     Srb
+    )
+{
+    PIRP                        Irp;
+    IO_STATUS_BLOCK             IoStatus;
+    KEVENT                      Event;
+    PIO_STACK_LOCATION          Stack;
+    NTSTATUS                    status;
+
+    KeInitializeEvent(&Event, NotificationEvent, FALSE);
+
+    status = STATUS_NO_MEMORY;
+    Irp = IoAllocateIrp((CCHAR)(Pdo->LowerDeviceObject->StackSize + 1), FALSE);
+    if (Irp == NULL)
+        goto fail1;
+
+    Stack = IoGetNextIrpStackLocation(Irp);
+    Stack->MajorFunction = IRP_MJ_SCSI;
+    Stack->Parameters.Scsi.Srb = Srb;
+
+    IoSetCompletionRoutine(Irp,
+                            __PdoSendAwaitSrb,
+                            Srb,
+                            TRUE,
+                            TRUE,
+                            TRUE);
+    Irp->UserIosb = &IoStatus;
+    Irp->UserEvent = &Event;
+
+    Irp->MdlAddress = IoAllocateMdl(Srb->DataBuffer,
+                                    Srb->DataTransferLength,
+                                    FALSE,
+                                    FALSE,
+                                    Irp);
+    if (Irp->MdlAddress == NULL)
+        goto fail2;
+
+#pragma warning(disable:6320)
+    try {
+        MmProbeAndLockPages(Irp->MdlAddress, KernelMode, IoReadAccess);
+    } except (EXCEPTION_EXECUTE_HANDLER) {
+        status = GetExceptionCode();
+
+        goto fail3;
+    }
+#pragma warning(default:6320)
+    
+    Srb->OriginalRequest = Irp;
+
+    status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
+    if (status == STATUS_PENDING) {
+        (VOID) KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, NULL);
+        status = IoStatus.Status;
+    }
+
+    return status;
+
+fail3:
+    Error("fail3\n");
+
+    IoFreeMdl(Irp->MdlAddress);
+
+fail2:
+    Error("fail2\n");
+
+    IoFreeIrp(Irp);
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return status;
+}
+
+static NTSTATUS
+PdoSendTrimSynchronous(
+    IN  PXENDISK_PDO            Pdo,
+    IN  PDEVICE_DATA_SET_RANGE  Ranges,
+    IN  ULONG                   Count
+    )
+{
+    SCSI_REQUEST_BLOCK          Srb;
+    PCDB                        Cdb;
+    PUNMAP_LIST_HEADER          Unmap;
+    ULONG                       Length;
+    ULONG                       Index;
+    NTSTATUS                    status;
+
+    Length = sizeof(UNMAP_LIST_HEADER) + 
+             (Count * sizeof(UNMAP_BLOCK_DESCRIPTOR));
+
+    status = STATUS_NO_MEMORY;
+    Unmap = __PdoAllocate(Length);
+    if (Unmap == NULL)
+        goto fail1;
+
+    RtlZeroMemory(&Srb, sizeof(SCSI_REQUEST_BLOCK));
+    Srb.Length = sizeof(SCSI_REQUEST_BLOCK);
+    Srb.SrbFlags = 0;
+    Srb.Function = SRB_FUNCTION_EXECUTE_SCSI;
+    Srb.DataBuffer = Unmap;
+    Srb.DataTransferLength = Length;
+    Srb.TimeOutValue = (ULONG)-1;
+    Srb.CdbLength = 10;
+
+    Cdb = (PCDB)&Srb.Cdb[0];
+    Cdb->UNMAP.OperationCode = SCSIOP_UNMAP;
+    *(PUSHORT)Cdb->UNMAP.AllocationLength = _byteswap_ushort((USHORT)Length);
+
+    *(PUSHORT)Unmap->DataLength = _byteswap_ushort((USHORT)Length);
+    *(PUSHORT)Unmap->BlockDescrDataLength = _byteswap_ushort((USHORT)sizeof(UNMAP_BLOCK_DESCRIPTOR));
+
+    for (Index = 0; Index < Count; ++Index) {
+        PUNMAP_BLOCK_DESCRIPTOR Block = &Unmap->Descriptors[Index];
+        PDEVICE_DATA_SET_RANGE  Range = &Ranges[Index];
+        
+        ULONG   LengthInSectors = (ULONG)(Range->LengthInBytes / Pdo->SectorSize);
+        ULONG64 OffsetInSectors = (ULONG64)(Range->StartingOffset / Pdo->SectorSize);
+
+        Trace("TRIM[%x] %x @ %llx\n",
+                        Index,
+                        LengthInSectors,
+                        OffsetInSectors);
+
+        *(PULONG64)Block->StartingLba = _byteswap_uint64(OffsetInSectors);
+        *(PULONG)Block->LbaCount = _byteswap_ulong(LengthInSectors);
+    }
+
+    status = PdoSendAwaitSrb(Pdo, &Srb);
+    if (!NT_SUCCESS(status))
+        goto fail2;
+
+    __PdoFree(Unmap);
+    return status;
+
+fail2:
+    Error("fail2\n");
+
+    __PdoFree(Unmap);
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return status;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+PdoManageDataSetAttributes(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    PDEVICE_MANAGE_DATA_SET_ATTRIBUTES  Attributes;
+    PDEVICE_DATA_SET_RANGE              Ranges;
+    ULONG                               NumRanges;
+    NTSTATUS                            status;
+
+    Attributes = Irp->AssociatedIrp.SystemBuffer;
+
+    switch (Attributes->Action) {
+    case DeviceDsmAction_Trim:
+        Ranges = (PDEVICE_DATA_SET_RANGE)((PUCHAR)Attributes + Attributes->DataSetRangesOffset);
+        NumRanges = Attributes->DataSetRangesLength / sizeof(DEVICE_DATA_SET_RANGE);
+
+        status = PdoSendTrimSynchronous(Pdo, Ranges, NumRanges);
+
+        status = PdoCompleteIrp(Pdo, Irp, status);
+        break;
+
+    default:
+        status = PdoForwardIrpAndForget(Pdo, Irp);
+        break;
+    }
+
+    return status;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+PdoDispatchControl(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    ULONG               ControlCode;
+    NTSTATUS            status;
+
+    status = IoAcquireRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    ControlCode = StackLocation->Parameters.DeviceIoControl.IoControlCode;
+
+    switch (ControlCode) {
+    case IOCTL_STORAGE_QUERY_PROPERTY:
+        status = PdoQueryProperty(Pdo, Irp);
+        break;
+
+    case IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES:
+        status = PdoManageDataSetAttributes(Pdo, Irp);
+        break;
+
+    default:
+        status = PdoForwardIrpAndForget(Pdo, Irp);
+        break;
+    }
+
+    return status;
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+PdoStartDevice(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    POWER_STATE         PowerState;
+    NTSTATUS            status;
+
+    status = IoAcquireRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    status = PdoForwardIrpSynchronously(Pdo, Irp);
+    if (!NT_SUCCESS(status))
+        goto fail2;
+
+    __PdoSetSystemPowerState(Pdo, PowerSystemWorking);
+    __PdoSetDevicePowerState(Pdo, PowerDeviceD0);
+
+    PowerState.DeviceState = PowerDeviceD0;
+    PoSetPowerState(Pdo->Dx->DeviceObject,
+                    DevicePowerState,
+                    PowerState);
+
+    __PdoSetDevicePnpState(Pdo, Started);
+
+    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+
+    Irp->IoStatus.Status = STATUS_SUCCESS;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return STATUS_SUCCESS;
+
+fail2:
+    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+
+fail1:
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
+static NTSTATUS
+__PdoQueryStopDevice(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
+    )
+{
+    PXENDISK_PDO        Pdo = Context;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
+
+    if (Irp->PendingReturned)
+        IoMarkIrpPending(Irp);
+
+    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+
+    return STATUS_SUCCESS;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+PdoQueryStopDevice(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    NTSTATUS            status;
+
+    status = IoAcquireRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    __PdoSetDevicePnpState(Pdo, StopPending);
+    Irp->IoStatus.Status = STATUS_SUCCESS;
+
+    IoCopyCurrentIrpStackLocationToNext(Irp);
+    IoSetCompletionRoutine(Irp,
+                           __PdoQueryStopDevice,
+                           Pdo,
+                           TRUE,
+                           TRUE,
+                           TRUE);
+
+    status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
+
+    return status;
+
+fail1:
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
+static NTSTATUS
+__PdoCancelStopDevice(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
+    )
+{
+    PXENDISK_PDO        Pdo = Context;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
+
+    if (Irp->PendingReturned)
+        IoMarkIrpPending(Irp);
+
+    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+
+    return STATUS_SUCCESS;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+PdoCancelStopDevice(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    NTSTATUS            status;
+
+    status = IoAcquireRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    Irp->IoStatus.Status = STATUS_SUCCESS;
+
+    __PdoRestoreDevicePnpState(Pdo, StopPending);
+
+    IoCopyCurrentIrpStackLocationToNext(Irp);
+    IoSetCompletionRoutine(Irp,
+                           __PdoCancelStopDevice,
+                           Pdo,
+                           TRUE,
+                           TRUE,
+                           TRUE);
+
+    status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
+
+    return status;
+
+fail1:
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
+static NTSTATUS
+__PdoStopDevice(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
+    )
+{
+    PXENDISK_PDO        Pdo = Context;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
+
+    if (Irp->PendingReturned)
+        IoMarkIrpPending(Irp);
+
+    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+
+    return STATUS_SUCCESS;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+PdoStopDevice(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    POWER_STATE         PowerState;
+    NTSTATUS            status;
+
+    status = IoAcquireRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    if (__PdoGetDevicePowerState(Pdo) != PowerDeviceD0)
+        goto done;
+
+    __PdoSetDevicePowerState(Pdo, PowerDeviceD3);
+    __PdoSetSystemPowerState(Pdo, PowerSystemShutdown);
+
+    PowerState.DeviceState = PowerDeviceD3;
+    PoSetPowerState(Pdo->Dx->DeviceObject,
+                    DevicePowerState,
+                    PowerState);
+
+done:
+    __PdoSetDevicePnpState(Pdo, Stopped);
+    Irp->IoStatus.Status = STATUS_SUCCESS;
+
+    IoCopyCurrentIrpStackLocationToNext(Irp);
+    IoSetCompletionRoutine(Irp,
+                           __PdoStopDevice,
+                           Pdo,
+                           TRUE,
+                           TRUE,
+                           TRUE);
+
+    status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
+
+    return status;
+
+fail1:
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
+static NTSTATUS
+__PdoQueryRemoveDevice(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
+    )
+{
+    PXENDISK_PDO        Pdo = Context;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
+
+    if (Irp->PendingReturned)
+        IoMarkIrpPending(Irp);
+
+    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+
+    return STATUS_SUCCESS;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+PdoQueryRemoveDevice(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    NTSTATUS            status;
+
+    status = IoAcquireRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    __PdoSetDevicePnpState(Pdo, RemovePending);
+    Irp->IoStatus.Status = STATUS_SUCCESS;
+
+    IoCopyCurrentIrpStackLocationToNext(Irp);
+    IoSetCompletionRoutine(Irp,
+                           __PdoQueryRemoveDevice,
+                           Pdo,
+                           TRUE,
+                           TRUE,
+                           TRUE);
+
+    status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
+
+    return status;
+
+fail1:
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
+static NTSTATUS
+__PdoCancelRemoveDevice(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
+    )
+{
+    PXENDISK_PDO        Pdo = Context;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
+
+    if (Irp->PendingReturned)
+        IoMarkIrpPending(Irp);
+
+    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+
+    return STATUS_SUCCESS;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+PdoCancelRemoveDevice(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    NTSTATUS            status;
+
+    status = IoAcquireRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    __PdoRestoreDevicePnpState(Pdo, RemovePending);
+    Irp->IoStatus.Status = STATUS_SUCCESS;
+
+    IoCopyCurrentIrpStackLocationToNext(Irp);
+    IoSetCompletionRoutine(Irp,
+                           __PdoCancelRemoveDevice,
+                           Pdo,
+                           TRUE,
+                           TRUE,
+                           TRUE);
+
+    status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
+
+    return status;
+
+fail1:
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
+static NTSTATUS
+__PdoSurpriseRemoval(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
+    )
+{
+    PXENDISK_PDO        Pdo = Context;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
+
+    if (Irp->PendingReturned)
+        IoMarkIrpPending(Irp);
+
+    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+
+    return STATUS_SUCCESS;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+PdoSurpriseRemoval(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    NTSTATUS            status;
+
+    status = IoAcquireRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    __PdoSetDevicePnpState(Pdo, SurpriseRemovePending);
+    Irp->IoStatus.Status = STATUS_SUCCESS;
+
+    IoCopyCurrentIrpStackLocationToNext(Irp);
+    IoSetCompletionRoutine(Irp,
+                           __PdoSurpriseRemoval,
+                           Pdo,
+                           TRUE,
+                           TRUE,
+                           TRUE);
+
+    status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
+
+    return status;
+
+fail1:
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+PdoRemoveDevice(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    PXENDISK_FDO        Fdo = __PdoGetFdo(Pdo);
+    POWER_STATE         PowerState;
+    NTSTATUS            status;
+
+    status = IoAcquireRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    if (__PdoGetDevicePowerState(Pdo) != PowerDeviceD0)
+        goto done;
+
+    __PdoSetDevicePowerState(Pdo, PowerDeviceD3);
+    __PdoSetSystemPowerState(Pdo, PowerSystemShutdown);
+
+    PowerState.DeviceState = PowerDeviceD3;
+    PoSetPowerState(Pdo->Dx->DeviceObject,
+                    DevicePowerState,
+                    PowerState);
+
+done:
+    if (__PdoIsMissing(Pdo)) {
+        __PdoSetDevicePnpState(Pdo, Deleted);
+        IoReleaseRemoveLockAndWait(&Pdo->Dx->RemoveLock, Irp);
+    } else {
+        __PdoSetDevicePnpState(Pdo, Enumerated);
+        IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+    }
+
+    status = PdoForwardIrpSynchronously(Pdo, Irp);
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    if (__PdoIsMissing(Pdo)) {
+        FdoAcquireMutex(Fdo);
+        PdoDestroy(Pdo);
+        FdoReleaseMutex(Fdo);
+    }
+
+    return status;
+
+fail1:
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+PdoEject(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    PXENDISK_FDO        Fdo = __PdoGetFdo(Pdo);
+    NTSTATUS            status;
+
+    __PdoSetMissing(Pdo, "Ejected");
+    __PdoSetDevicePnpState(Pdo, Deleted);
+
+    status = PdoForwardIrpSynchronously(Pdo, Irp);
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    FdoAcquireMutex(Fdo);
+    PdoDestroy(Pdo);
+    FdoReleaseMutex(Fdo);
+
+    return status;
+}
+
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
+static NTSTATUS
+__PdoDispatchPnp(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
+    )
+{
+    PXENDISK_PDO        Pdo = Context;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
+
+    if (Irp->PendingReturned)
+        IoMarkIrpPending(Irp);
+
+    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+    return STATUS_SUCCESS;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+PdoDispatchPnp(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    UCHAR               MinorFunction;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    MinorFunction = StackLocation->MinorFunction;
+
+    switch (StackLocation->MinorFunction) {
+    case IRP_MN_START_DEVICE:
+        status = PdoStartDevice(Pdo, Irp);
+        break;
+
+    case IRP_MN_QUERY_STOP_DEVICE:
+        status = PdoQueryStopDevice(Pdo, Irp);
+        break;
+
+    case IRP_MN_CANCEL_STOP_DEVICE:
+        status = PdoCancelStopDevice(Pdo, Irp);
+        break;
+
+    case IRP_MN_STOP_DEVICE:
+        status = PdoStopDevice(Pdo, Irp);
+        break;
+
+    case IRP_MN_QUERY_REMOVE_DEVICE:
+        status = PdoQueryRemoveDevice(Pdo, Irp);
+        break;
+
+    case IRP_MN_SURPRISE_REMOVAL:
+        status = PdoSurpriseRemoval(Pdo, Irp);
+        break;
+
+    case IRP_MN_REMOVE_DEVICE:
+        status = PdoRemoveDevice(Pdo, Irp);
+        break;
+
+    case IRP_MN_CANCEL_REMOVE_DEVICE:
+        status = PdoCancelRemoveDevice(Pdo, Irp);
+        break;
+
+    case IRP_MN_EJECT:
+        status = PdoEject(Pdo, Irp);
+        break;
+
+    default:
+        status = IoAcquireRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+        if (!NT_SUCCESS(status))
+            goto fail1;
+
+        IoCopyCurrentIrpStackLocationToNext(Irp);
+        IoSetCompletionRoutine(Irp,
+                               __PdoDispatchPnp,
+                               Pdo,
+                               TRUE,
+                               TRUE,
+                               TRUE);
+
+        status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
+        break;
+    }
+
+    return status;
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__PdoSetDevicePowerUp(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    DEVICE_POWER_STATE  DeviceState;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
+
+    ASSERT3U(DeviceState, <,  __PdoGetDevicePowerState(Pdo));
+
+    status = PdoForwardIrpSynchronously(Pdo, Irp);
+    if (!NT_SUCCESS(status))
+        goto done;
+
+    Verbose("%p: %s -> %s\n",
+         Pdo->Dx->DeviceObject,
+         PowerDeviceStateName(__PdoGetDevicePowerState(Pdo)),
+         PowerDeviceStateName(DeviceState));
+
+    __PdoSetDevicePowerState(Pdo, DeviceState);
+
+done:
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__PdoSetDevicePowerDown(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    DEVICE_POWER_STATE  DeviceState;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
+
+    ASSERT3U(DeviceState, >,  __PdoGetDevicePowerState(Pdo));
+
+    Verbose("%p: %s -> %s\n",
+         Pdo->Dx->DeviceObject,
+         PowerDeviceStateName(__PdoGetDevicePowerState(Pdo)),
+         PowerDeviceStateName(DeviceState));
+
+    __PdoSetDevicePowerState(Pdo, DeviceState);
+
+    status = PdoForwardIrpSynchronously(Pdo, Irp);
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__PdoSetDevicePower(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    DEVICE_POWER_STATE  DeviceState;
+    POWER_ACTION        PowerAction;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
+    PowerAction = StackLocation->Parameters.Power.ShutdownType;
+
+    Trace("====> (%s:%s)\n",
+          PowerDeviceStateName(DeviceState), 
+          PowerActionName(PowerAction));
+
+    if (DeviceState == __PdoGetDevicePowerState(Pdo)) {
+        status = PdoForwardIrpSynchronously(Pdo, Irp);
+        IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+        goto done;
+    }
+
+    status = (DeviceState < __PdoGetDevicePowerState(Pdo)) ?
+             __PdoSetDevicePowerUp(Pdo, Irp) :
+             __PdoSetDevicePowerDown(Pdo, Irp);
+
+done:
+    Trace("<==== (%s:%s)(%08x)\n",
+          PowerDeviceStateName(DeviceState), 
+          PowerActionName(PowerAction),
+          status);
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__PdoSetSystemPowerUp(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    SYSTEM_POWER_STATE  SystemState;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    SystemState = StackLocation->Parameters.Power.State.SystemState;
+
+    ASSERT3U(SystemState, <,  __PdoGetSystemPowerState(Pdo));
+
+    status = PdoForwardIrpSynchronously(Pdo, Irp);
+    if (!NT_SUCCESS(status))
+        goto done;
+
+    Verbose("%p: %s -> %s\n",
+         Pdo->Dx->DeviceObject,
+         PowerSystemStateName(__PdoGetSystemPowerState(Pdo)),
+         PowerSystemStateName(SystemState));
+
+    __PdoSetSystemPowerState(Pdo, SystemState);
+
+done:
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__PdoSetSystemPowerDown(
+    IN  PXENDISK_PDO     Pdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    SYSTEM_POWER_STATE  SystemState;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    SystemState = StackLocation->Parameters.Power.State.SystemState;
+
+    ASSERT3U(SystemState, >,  __PdoGetSystemPowerState(Pdo));
+
+    Verbose("%p: %s -> %s\n",
+         Pdo->Dx->DeviceObject,
+         PowerSystemStateName(__PdoGetSystemPowerState(Pdo)),
+         PowerSystemStateName(SystemState));
+
+    __PdoSetSystemPowerState(Pdo, SystemState);
+
+    status = PdoForwardIrpSynchronously(Pdo, Irp);
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__PdoSetSystemPower(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    SYSTEM_POWER_STATE  SystemState;
+    POWER_ACTION        PowerAction;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    SystemState = StackLocation->Parameters.Power.State.SystemState;
+    PowerAction = StackLocation->Parameters.Power.ShutdownType;
+
+    Trace("====> (%s:%s)\n",
+          PowerSystemStateName(SystemState), 
+          PowerActionName(PowerAction));
+
+    if (SystemState == __PdoGetSystemPowerState(Pdo)) {
+        status = PdoForwardIrpSynchronously(Pdo, Irp);
+        IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+        goto done;
+    }
+
+    status = (SystemState < __PdoGetSystemPowerState(Pdo)) ?
+             __PdoSetSystemPowerUp(Pdo, Irp) :
+             __PdoSetSystemPowerDown(Pdo, Irp);
+
+done:
+    Trace("<==== (%s:%s)(%08x)\n",
+          PowerSystemStateName(SystemState), 
+          PowerActionName(PowerAction),
+          status);
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__PdoQueryDevicePowerUp(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    DEVICE_POWER_STATE  DeviceState;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
+
+    ASSERT3U(DeviceState, <,  __PdoGetDevicePowerState(Pdo));
+
+    status = PdoForwardIrpSynchronously(Pdo, Irp);
+
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__PdoQueryDevicePowerDown(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    DEVICE_POWER_STATE  DeviceState;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
+
+    ASSERT3U(DeviceState, >,  __PdoGetDevicePowerState(Pdo));
+
+    status = PdoForwardIrpSynchronously(Pdo, Irp);
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__PdoQueryDevicePower(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    DEVICE_POWER_STATE  DeviceState;
+    POWER_ACTION        PowerAction;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
+    PowerAction = StackLocation->Parameters.Power.ShutdownType;
+
+    Trace("====> (%s:%s)\n",
+          PowerDeviceStateName(DeviceState), 
+          PowerActionName(PowerAction));
+
+    if (DeviceState == __PdoGetDevicePowerState(Pdo)) {
+        status = PdoForwardIrpSynchronously(Pdo, Irp);
+        IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+        goto done;
+    }
+
+    status = (DeviceState < __PdoGetDevicePowerState(Pdo)) ?
+             __PdoQueryDevicePowerUp(Pdo, Irp) :
+             __PdoQueryDevicePowerDown(Pdo, Irp);
+
+done:
+    Trace("<==== (%s:%s)(%08x)\n",
+          PowerDeviceStateName(DeviceState), 
+          PowerActionName(PowerAction),
+          status);
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__PdoQuerySystemPowerUp(
+    IN  PXENDISK_PDO     Pdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    SYSTEM_POWER_STATE  SystemState;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    SystemState = StackLocation->Parameters.Power.State.SystemState;
+
+    ASSERT3U(SystemState, <,  __PdoGetSystemPowerState(Pdo));
+
+    status = PdoForwardIrpSynchronously(Pdo, Irp);
+
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__PdoQuerySystemPowerDown(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    SYSTEM_POWER_STATE  SystemState;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    SystemState = StackLocation->Parameters.Power.State.SystemState;
+
+    ASSERT3U(SystemState, >,  __PdoGetSystemPowerState(Pdo));
+
+    status = PdoForwardIrpSynchronously(Pdo, Irp);
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__PdoQuerySystemPower(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    SYSTEM_POWER_STATE  SystemState;
+    POWER_ACTION        PowerAction;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    SystemState = StackLocation->Parameters.Power.State.SystemState;
+    PowerAction = StackLocation->Parameters.Power.ShutdownType;
+
+    Trace("====> (%s:%s)\n",
+          PowerSystemStateName(SystemState), 
+          PowerActionName(PowerAction));
+
+    if (SystemState == __PdoGetSystemPowerState(Pdo)) {
+        status = PdoForwardIrpSynchronously(Pdo, Irp);
+        IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+        goto done;
+    }
+
+    status = (SystemState < __PdoGetSystemPowerState(Pdo)) ?
+             __PdoQuerySystemPowerUp(Pdo, Irp) :
+             __PdoQuerySystemPowerDown(Pdo, Irp);
+
+done:
+    Trace("<==== (%s:%s)(%08x)\n",
+          PowerSystemStateName(SystemState), 
+          PowerActionName(PowerAction),
+          status);
+
+    return status;
+}
+
+static NTSTATUS
+PdoDevicePower(
+    IN  PXENDISK_THREAD Self,
+    IN  PVOID           Context
+    )
+{
+    PXENDISK_PDO        Pdo = Context;
+    PKEVENT             Event;
+
+    Event = ThreadGetEvent(Self);
+
+    for (;;) {
+        PIRP                Irp;
+        PIO_STACK_LOCATION  StackLocation;
+        UCHAR               MinorFunction;
+
+        if (Pdo->DevicePowerIrp == NULL) {
+            (VOID) KeWaitForSingleObject(Event,
+                                         Executive,
+                                         KernelMode,
+                                         FALSE,
+                                         NULL);
+            KeClearEvent(Event);
+        }
+
+        if (ThreadIsAlerted(Self))
+            break;
+
+        Irp = Pdo->DevicePowerIrp;
+
+        if (Irp == NULL)
+            continue;
+
+        Pdo->DevicePowerIrp = NULL;
+        KeMemoryBarrier();
+
+        StackLocation = IoGetCurrentIrpStackLocation(Irp);
+        MinorFunction = StackLocation->MinorFunction;
+
+        switch (StackLocation->MinorFunction) {
+        case IRP_MN_SET_POWER:
+            (VOID) __PdoSetDevicePower(Pdo, Irp);
+            break;
+
+        case IRP_MN_QUERY_POWER:
+            (VOID) __PdoQueryDevicePower(Pdo, Irp);
+            break;
+
+        default:
+            ASSERT(FALSE);
+            break;
+        }
+
+        IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+    }
+
+    return STATUS_SUCCESS;
+}
+
+static NTSTATUS
+PdoSystemPower(
+    IN  PXENDISK_THREAD Self,
+    IN  PVOID           Context
+    )
+{
+    PXENDISK_PDO        Pdo = Context;
+    PKEVENT             Event;
+
+    Event = ThreadGetEvent(Self);
+
+    for (;;) {
+        PIRP                Irp;
+        PIO_STACK_LOCATION  StackLocation;
+        UCHAR               MinorFunction;
+
+        if (Pdo->SystemPowerIrp == NULL) {
+            (VOID) KeWaitForSingleObject(Event,
+                                         Executive,
+                                         KernelMode,
+                                         FALSE,
+                                         NULL);
+            KeClearEvent(Event);
+        }
+
+        if (ThreadIsAlerted(Self))
+            break;
+
+        Irp = Pdo->SystemPowerIrp;
+
+        if (Irp == NULL)
+            continue;
+
+        Pdo->SystemPowerIrp = NULL;
+        KeMemoryBarrier();
+
+        StackLocation = IoGetCurrentIrpStackLocation(Irp);
+        MinorFunction = StackLocation->MinorFunction;
+
+        switch (StackLocation->MinorFunction) {
+        case IRP_MN_SET_POWER:
+            (VOID) __PdoSetSystemPower(Pdo, Irp);
+            break;
+
+        case IRP_MN_QUERY_POWER:
+            (VOID) __PdoQuerySystemPower(Pdo, Irp);
+            break;
+
+        default:
+            ASSERT(FALSE);
+            break;
+        }
+
+        IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+    }
+
+    return STATUS_SUCCESS;
+}
+
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
+static NTSTATUS
+__PdoDispatchPower(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
+    )
+{
+    PXENDISK_PDO        Pdo = Context;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
+
+    if (Irp->PendingReturned)
+        IoMarkIrpPending(Irp);
+
+    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+    return STATUS_SUCCESS;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+PdoDispatchPower(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    UCHAR               MinorFunction;
+    POWER_STATE_TYPE    PowerType;
+    NTSTATUS            status;
+
+    status = IoAcquireRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    MinorFunction = StackLocation->MinorFunction;
+
+    if (MinorFunction != IRP_MN_QUERY_POWER &&
+        MinorFunction != IRP_MN_SET_POWER) {
+        IoCopyCurrentIrpStackLocationToNext(Irp);
+        IoSetCompletionRoutine(Irp,
+                               __PdoDispatchPower,
+                               Pdo,
+                               TRUE,
+                               TRUE,
+                               TRUE);
+
+        status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
+
+        goto done;
+    }
+
+    PowerType = StackLocation->Parameters.Power.Type;
+
+    Trace("====> (%02x:%s)\n",
+          MinorFunction, 
+          PowerMinorFunctionName(MinorFunction)); 
+
+    switch (PowerType) {
+    case DevicePowerState:
+        IoMarkIrpPending(Irp);
+
+        ASSERT3P(Pdo->DevicePowerIrp, ==, NULL);
+        Pdo->DevicePowerIrp = Irp;
+        KeMemoryBarrier();
+
+        ThreadWake(Pdo->DevicePowerThread);
+
+        status = STATUS_PENDING;
+        break;
+
+    case SystemPowerState:
+        IoMarkIrpPending(Irp);
+
+        ASSERT3P(Pdo->SystemPowerIrp, ==, NULL);
+        Pdo->SystemPowerIrp = Irp;
+        KeMemoryBarrier();
+
+        ThreadWake(Pdo->SystemPowerThread);
+
+        status = STATUS_PENDING;
+        break;
+
+    default:
+        IoCopyCurrentIrpStackLocationToNext(Irp);
+        IoSetCompletionRoutine(Irp,
+                               __PdoDispatchPower,
+                               Pdo,
+                               TRUE,
+                               TRUE,
+                               TRUE);
+
+        status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
+        break;
+    }
+
+    Trace("<==== (%02x:%s) (%08x)\n",
+          MinorFunction, 
+          PowerMinorFunctionName(MinorFunction),
+          status);
+
+done:
+    return status;
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
+static NTSTATUS
+__PdoDispatchDefault(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
+    )
+{
+    PXENDISK_PDO        Pdo = Context;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
+
+    if (Irp->PendingReturned)
+        IoMarkIrpPending(Irp);
+
+    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+
+    return STATUS_SUCCESS;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+PdoDispatchDefault(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    NTSTATUS            status;
+
+    status = IoAcquireRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    IoCopyCurrentIrpStackLocationToNext(Irp);
+    IoSetCompletionRoutine(Irp,
+                           __PdoDispatchDefault,
+                           Pdo,
+                           TRUE,
+                           TRUE,
+                           TRUE);
+
+    status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
+
+    return status;
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+NTSTATUS
+PdoDispatch(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+
+    switch (StackLocation->MajorFunction) {
+    case IRP_MJ_DEVICE_CONTROL:
+        status = PdoDispatchControl(Pdo, Irp);
+        break;
+
+    case IRP_MJ_PNP:
+        status = PdoDispatchPnp(Pdo, Irp);
+        break;
+
+    case IRP_MJ_POWER:
+        status = PdoDispatchPower(Pdo, Irp);
+        break;
+
+    default:
+        status = PdoDispatchDefault(Pdo, Irp);
+        break;
+    }
+
+    return status;
+}
+
+NTSTATUS
+PdoCreate(
+    PXENDISK_FDO                    Fdo,
+    PDEVICE_OBJECT                  PhysicalDeviceObject
+    )
+{
+    PDEVICE_OBJECT                  LowerDeviceObject;
+    ULONG                           DeviceType;
+    PDEVICE_OBJECT                  FilterDeviceObject;
+    PXENDISK_DX                     Dx;
+    PXENDISK_PDO                    Pdo;
+    NTSTATUS                        status;
+
+    LowerDeviceObject = IoGetAttachedDeviceReference(PhysicalDeviceObject);
+    DeviceType = LowerDeviceObject->DeviceType;
+    ObDereferenceObject(LowerDeviceObject);
+
+#pragma prefast(suppress:28197) // Possibly leaking memory 'PhysicalDeviceObject'
+    status = IoCreateDevice(DriverGetDriverObject(),
+                            sizeof(XENDISK_DX),
+                            NULL,
+                            DeviceType,
+                            FILE_DEVICE_SECURE_OPEN,
+                            FALSE,
+                            &FilterDeviceObject);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    Dx = (PXENDISK_DX)FilterDeviceObject->DeviceExtension;
+    RtlZeroMemory(Dx, sizeof (XENDISK_DX));
+
+    Dx->Type = PHYSICAL_DEVICE_OBJECT;
+    Dx->DeviceObject = FilterDeviceObject;
+    Dx->DevicePnpState = Present;
+    Dx->SystemPowerState = PowerSystemShutdown;
+    Dx->DevicePowerState = PowerDeviceD3;
+
+    IoInitializeRemoveLock(&Dx->RemoveLock, PDO_TAG, 0, 0);
+
+    Pdo = __PdoAllocate(sizeof (XENDISK_PDO));
+
+    status = STATUS_NO_MEMORY;
+    if (Pdo == NULL)
+        goto fail2;
+
+    LowerDeviceObject = IoAttachDeviceToDeviceStack(FilterDeviceObject,
+                                                    PhysicalDeviceObject);
+
+    status = STATUS_UNSUCCESSFUL;
+    if (LowerDeviceObject == NULL)
+        goto fail3;
+
+    Pdo->Dx = Dx;
+    Pdo->PhysicalDeviceObject = PhysicalDeviceObject;
+    Pdo->LowerDeviceObject = LowerDeviceObject;
+    Pdo->SectorSize = 512;
+
+    status = ThreadCreate(PdoSystemPower, Pdo, &Pdo->SystemPowerThread);
+    if (!NT_SUCCESS(status))
+        goto fail4;
+
+    status = ThreadCreate(PdoDevicePower, Pdo, &Pdo->DevicePowerThread);
+    if (!NT_SUCCESS(status))
+        goto fail5;
+
+    Verbose("%p\n", FilterDeviceObject);
+
+    Dx->Pdo = Pdo;
+
+#pragma prefast(suppress:28182) // Dereferencing NULL pointer
+    FilterDeviceObject->DeviceType = LowerDeviceObject->DeviceType;
+    FilterDeviceObject->Characteristics = LowerDeviceObject->Characteristics;
+
+    FilterDeviceObject->Flags |= LowerDeviceObject->Flags;
+    FilterDeviceObject->Flags &= ~DO_DEVICE_INITIALIZING;
+
+    __PdoLink(Pdo, Fdo);
+
+    return STATUS_SUCCESS;
+
+fail5:
+    Error("fail5\n");
+
+    ThreadAlert(Pdo->SystemPowerThread);
+    ThreadJoin(Pdo->SystemPowerThread);
+    Pdo->SystemPowerThread = NULL;
+
+fail4:
+    Error("fail4\n");
+
+    Pdo->PhysicalDeviceObject = NULL;
+    Pdo->LowerDeviceObject = NULL;
+    Pdo->Dx = NULL;
+
+    IoDetachDevice(LowerDeviceObject);
+
+fail3:
+    Error("fail3\n");
+
+    ASSERT(IsZeroMemory(Pdo, sizeof (XENDISK_PDO)));
+    __PdoFree(Pdo);
+
+fail2:
+    Error("fail2\n");
+
+    IoDeleteDevice(FilterDeviceObject);
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return status;
+}
+
+VOID
+PdoDestroy(
+    IN  PXENDISK_PDO    Pdo
+    )
+{
+    PDEVICE_OBJECT      LowerDeviceObject = Pdo->LowerDeviceObject;
+    PXENDISK_DX         Dx = Pdo->Dx;
+    PDEVICE_OBJECT      FilterDeviceObject = Dx->DeviceObject;
+
+    ASSERT3U(__PdoGetDevicePnpState(Pdo), ==, Deleted);
+
+    ASSERT(__PdoIsMissing(Pdo));
+    Pdo->Missing = FALSE;
+
+    __PdoUnlink(Pdo);
+
+    Verbose("%p (%s)\n",
+         FilterDeviceObject,
+         Pdo->Reason);
+    Pdo->Reason = NULL;
+
+    Dx->Pdo = NULL;
+
+    ThreadAlert(Pdo->DevicePowerThread);
+    ThreadJoin(Pdo->DevicePowerThread);
+    Pdo->DevicePowerThread = NULL;
+
+    ThreadAlert(Pdo->SystemPowerThread);
+    ThreadJoin(Pdo->SystemPowerThread);
+    Pdo->SystemPowerThread = NULL;
+
+    Pdo->SectorSize = 0;
+    Pdo->PhysicalDeviceObject = NULL;
+    Pdo->LowerDeviceObject = NULL;
+    Pdo->Dx = NULL;
+
+    IoDetachDevice(LowerDeviceObject);
+
+    ASSERT(IsZeroMemory(Pdo, sizeof (XENDISK_PDO)));
+    __PdoFree(Pdo);
+
+    IoDeleteDevice(FilterDeviceObject);
+}
diff --git a/src/xendisk/pdo.h b/src/xendisk/pdo.h
new file mode 100644
index 0000000..5e2e5d6
--- /dev/null
+++ b/src/xendisk/pdo.h
@@ -0,0 +1,90 @@
+/* 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 _XENDISK_PDO_H
+#define _XENDISK_PDO_H
+
+#include <ntddk.h>
+#include "types.h"
+#include "fdo.h"
+
+typedef struct _XENDISK_PDO XENDISK_PDO, *PXENDISK_PDO;
+
+extern VOID
+PdoSetDevicePnpState(
+    IN  PXENDISK_PDO        Pdo,
+    IN  DEVICE_PNP_STATE    State
+    );
+
+extern DEVICE_PNP_STATE
+PdoGetDevicePnpState(
+    IN  PXENDISK_PDO    Pdo
+    );
+
+extern PDEVICE_OBJECT
+PdoGetPhysicalDeviceObject(
+    IN  PXENDISK_PDO    Pdo
+    );
+
+extern BOOLEAN
+PdoIsMissing(
+    IN  PXENDISK_PDO    Pdo
+    );
+
+extern VOID
+PdoSetMissing(
+    IN  PXENDISK_PDO    Pdo,
+    IN  const CHAR      *Reason
+    );
+
+extern BOOLEAN
+PdoIsMasked(
+    IN  PXENDISK_PDO    Pdo
+    );
+
+extern NTSTATUS
+PdoCreate(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PDEVICE_OBJECT  PhysicalDeviceObject
+    );
+
+extern VOID
+PdoDestroy(
+    IN  PXENDISK_PDO    Pdo
+    );
+
+extern NTSTATUS
+PdoDispatch(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    );
+
+#endif // _XENDISK_PDO_H
diff --git a/src/xendisk/thread.c b/src/xendisk/thread.c
new file mode 100644
index 0000000..92e2b94
--- /dev/null
+++ b/src/xendisk/thread.c
@@ -0,0 +1,225 @@
+/* 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 "thread.h"
+#include "debug.h"
+#include "assert.h"
+#include "util.h"
+
+#define THREAD_POOL 'ERHT'
+
+struct _XENDISK_THREAD {
+    XENDISK_THREAD_FUNCTION Function;
+    PVOID                   Context;
+    KEVENT                  Event;
+    BOOLEAN                 Alerted;
+    LONG                    References;
+    PKTHREAD                Thread;
+};
+
+static FORCEINLINE PVOID
+__ThreadAllocate(
+    IN  ULONG   Length
+    )
+{
+    return __AllocateNonPagedPoolWithTag(__FUNCTION__, __LINE__, Length, THREAD_POOL);
+}
+
+static FORCEINLINE VOID
+__ThreadFree(
+    IN  PVOID   Buffer
+    )
+{
+    __FreePoolWithTag(Buffer, THREAD_POOL);
+}
+
+static FORCEINLINE VOID
+__ThreadWake(
+    IN  PXENDISK_THREAD Thread
+    )
+{
+    KeSetEvent(&Thread->Event, IO_NO_INCREMENT, FALSE);
+}
+
+VOID
+ThreadWake(
+    IN  PXENDISK_THREAD Thread
+    )
+{
+    __ThreadWake(Thread);
+}
+
+static FORCEINLINE VOID
+__ThreadAlert(
+    IN  PXENDISK_THREAD Thread
+    )
+{
+    Thread->Alerted = TRUE;
+    __ThreadWake(Thread);
+}
+
+VOID
+ThreadAlert(
+    IN  PXENDISK_THREAD Thread
+    )
+{
+    __ThreadAlert(Thread);
+}
+
+KSTART_ROUTINE  ThreadFunction;
+
+VOID
+ThreadFunction(
+    IN  PVOID       Argument
+    )
+{
+    PXENDISK_THREAD Self = Argument;
+    NTSTATUS        status;
+
+    status = Self->Function(Self, Self->Context);
+
+    if (InterlockedDecrement(&Self->References) == 0)
+        __ThreadFree(Self);
+
+    PsTerminateSystemThread(status);
+    // NOT REACHED
+}
+
+NTSTATUS
+ThreadCreate(
+    IN  XENDISK_THREAD_FUNCTION Function,
+    IN  PVOID                   Context,
+    OUT PXENDISK_THREAD         *Thread
+    )
+{
+    HANDLE                      Handle;
+    NTSTATUS                    status;
+
+    ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
+
+    (*Thread) = __ThreadAllocate(sizeof (XENDISK_THREAD));
+
+    status = STATUS_NO_MEMORY;
+    if (*Thread == NULL)
+        goto fail1;
+
+    (*Thread)->Function = Function;
+    (*Thread)->Context = Context;
+    (*Thread)->Alerted = FALSE;
+    (*Thread)->References = 2; // One for us, one for the thread function
+
+    KeInitializeEvent(&(*Thread)->Event, NotificationEvent, FALSE);
+
+    status = PsCreateSystemThread(&Handle,
+                                  STANDARD_RIGHTS_ALL | SPECIFIC_RIGHTS_ALL,
+                                  NULL,
+                                  NULL,
+                                  NULL,
+                                  ThreadFunction,
+                                  *Thread);
+    if (!NT_SUCCESS(status)) {
+        --(*Thread)->References;    // Fake thread function termination
+        goto fail2;
+    }
+
+    status = ObReferenceObjectByHandle(Handle,
+                                       SYNCHRONIZE,
+                                       *PsThreadType,
+                                       KernelMode,
+                                       &(*Thread)->Thread,
+                                       NULL);
+    if (!NT_SUCCESS(status))
+        goto fail3;
+
+    ZwClose(Handle);
+
+    return STATUS_SUCCESS;
+
+fail3:
+    Error("fail3\n");
+
+    __ThreadAlert(*Thread);
+    ZwClose(Handle);
+
+fail2:
+    Error("fail2\n");
+
+    if (InterlockedDecrement(&(*Thread)->References) == 0)
+        __ThreadFree(*Thread);
+
+    *Thread = NULL;
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return status;
+}
+
+PKEVENT
+ThreadGetEvent(
+    IN  PXENDISK_THREAD Thread
+    )
+{
+    return &Thread->Event;
+}
+
+BOOLEAN
+ThreadIsAlerted(
+    IN  PXENDISK_THREAD Thread
+    )
+{
+    return Thread->Alerted;
+}
+
+VOID
+ThreadJoin(
+    IN  PXENDISK_THREAD Thread
+    )
+{
+    LONG                References;
+
+    ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
+    ASSERT3P(KeGetCurrentThread(), !=, Thread->Thread);
+
+    (VOID) KeWaitForSingleObject(Thread->Thread,
+                                 Executive,
+                                 KernelMode,
+                                 FALSE,
+                                 NULL);
+
+    References = InterlockedDecrement(&Thread->References);
+    ASSERT3U(References, ==, 0);
+
+    __ThreadFree(Thread);
+}
+
diff --git a/src/xendisk/thread.h b/src/xendisk/thread.h
new file mode 100644
index 0000000..c197337
--- /dev/null
+++ b/src/xendisk/thread.h
@@ -0,0 +1,73 @@
+/* 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 _XENDISK_THREAD_H
+#define _XENDISK_THREAD_H
+
+#include <ntddk.h>
+
+typedef struct _XENDISK_THREAD XENDISK_THREAD, *PXENDISK_THREAD;
+
+typedef NTSTATUS (*XENDISK_THREAD_FUNCTION)(PXENDISK_THREAD, PVOID);
+
+extern NTSTATUS
+ThreadCreate(
+    IN  XENDISK_THREAD_FUNCTION Function,
+    IN  PVOID                   Context,
+    OUT PXENDISK_THREAD         *Thread
+    );
+
+extern PKEVENT
+ThreadGetEvent(
+    IN  PXENDISK_THREAD Self
+    );
+
+extern BOOLEAN
+ThreadIsAlerted(
+    IN  PXENDISK_THREAD Self
+    );
+
+extern VOID
+ThreadWake(
+    IN  PXENDISK_THREAD Thread
+    );
+
+extern VOID
+ThreadAlert(
+    IN  PXENDISK_THREAD Thread
+    );
+
+extern VOID
+ThreadJoin(
+    IN  PXENDISK_THREAD Thread
+    );
+
+#endif  // _XENDISK_THREAD_H
diff --git a/src/xendisk/types.h b/src/xendisk/types.h
new file mode 100644
index 0000000..b2b4218
--- /dev/null
+++ b/src/xendisk/types.h
@@ -0,0 +1,53 @@
+/* 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 _XENDISK_TYPES_H
+#define _XENDISK_TYPES_H
+
+typedef enum _DEVICE_OBJECT_TYPE {
+    PHYSICAL_DEVICE_OBJECT = 'ODP',
+    FUNCTION_DEVICE_OBJECT = 'ODF'
+} DEVICE_OBJECT_TYPE, *PDEVICE_OBJECT_TYPE;
+
+typedef enum _DEVICE_PNP_STATE {
+    Invalid = 0,
+    Present,        // PDO only
+    Enumerated,     // PDO only
+    Added,          // FDO only
+    Started,
+    StopPending,
+    Stopped,
+    RemovePending,
+    SurpriseRemovePending,
+    Deleted
+} DEVICE_PNP_STATE, *PDEVICE_PNP_STATE;
+
+#endif  // _XENDISK_TYPES_H
diff --git a/src/xendisk/util.h b/src/xendisk/util.h
new file mode 100644
index 0000000..e7adc22
--- /dev/null
+++ b/src/xendisk/util.h
@@ -0,0 +1,222 @@
+/* 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 _UTIL_H
+#define _UTIL_H
+
+#include <ntddk.h>
+
+#include "assert.h"
+
+typedef struct _NON_PAGED_BUFFER_HEADER {
+    SIZE_T  Length;
+    ULONG   Tag;
+} NON_PAGED_BUFFER_HEADER, *PNON_PAGED_BUFFER_HEADER;
+
+typedef struct _NON_PAGED_BUFFER_TRAILER {
+    ULONG   Tag;
+} NON_PAGED_BUFFER_TRAILER, *PNON_PAGED_BUFFER_TRAILER;
+
+static FORCEINLINE PVOID
+__AllocateNonPagedPoolWithTag(
+    IN  PCHAR                   Caller,
+    IN  ULONG                   Line,
+    IN  SIZE_T                  Length,
+    IN  ULONG                   Tag
+    )
+{
+    PUCHAR                      Buffer;
+    PNON_PAGED_BUFFER_HEADER    Header;
+    PNON_PAGED_BUFFER_TRAILER   Trailer;
+
+    ASSERT3S(Length, !=, 0);
+
+    Buffer = (PUCHAR)ExAllocatePoolWithTag(NonPagedPool,
+                                   sizeof (NON_PAGED_BUFFER_HEADER) +
+                                   Length +
+                                   sizeof (NON_PAGED_BUFFER_TRAILER),
+                                   Tag);
+    if (Buffer == NULL) {
+        Warning("%s:%u : AllocFailed %d bytes, %08x tag\n", Caller, Line, Length, Tag);
+        goto done;
+    }
+
+    RtlZeroMemory(Buffer, 
+                  sizeof (NON_PAGED_BUFFER_HEADER) +
+                  Length +
+                  sizeof (NON_PAGED_BUFFER_TRAILER));
+
+    Header = (PNON_PAGED_BUFFER_HEADER)Buffer;
+    Header->Length = Length;
+    Header->Tag = Tag;
+
+    Buffer += sizeof (NON_PAGED_BUFFER_HEADER);
+
+    Trailer = (PNON_PAGED_BUFFER_TRAILER)(Buffer + Length);
+    Trailer->Tag = Tag;
+
+done:
+    return Buffer;
+}
+
+static FORCEINLINE VOID
+__FreePoolWithTag(
+    IN  PVOID                   _Buffer,
+    IN  ULONG                   Tag
+    )
+{
+    PUCHAR                      Buffer = (PUCHAR)_Buffer;
+    SIZE_T                      Length;
+    PNON_PAGED_BUFFER_HEADER    Header;
+    PNON_PAGED_BUFFER_TRAILER   Trailer;
+
+    ASSERT3P(Buffer, !=, NULL);
+
+    Buffer -= sizeof (NON_PAGED_BUFFER_HEADER);
+
+    Header = (PNON_PAGED_BUFFER_HEADER)Buffer;
+    ASSERT3U(Tag, ==, Header->Tag);
+    Length = Header->Length;
+
+    Buffer += sizeof (NON_PAGED_BUFFER_HEADER);
+
+    Trailer = (PNON_PAGED_BUFFER_TRAILER)(Buffer + Length);
+    ASSERT3U(Tag, ==, Trailer->Tag);
+
+    Buffer -= sizeof (NON_PAGED_BUFFER_HEADER);
+
+    RtlFillMemory(Buffer, 
+                  sizeof (NON_PAGED_BUFFER_HEADER) +
+                  Length +
+                  sizeof (NON_PAGED_BUFFER_TRAILER),
+                  0xAA);
+
+    ExFreePoolWithTag(Buffer, Tag);
+}
+
+static FORCEINLINE PMDL
+__AllocPagesForMdl(
+    IN  SIZE_T          Size
+    )
+{
+    PMDL                Mdl;
+    PHYSICAL_ADDRESS    LowAddr;
+    PHYSICAL_ADDRESS    HighAddr;
+    PHYSICAL_ADDRESS    SkipBytes;
+
+    SkipBytes.QuadPart = 0ull;
+    HighAddr.QuadPart = ~0ull;
+
+    // try > 4GB
+    LowAddr.QuadPart = 0x100000000ull;
+    Mdl = MmAllocatePagesForMdlEx(LowAddr, HighAddr, SkipBytes, Size, MmCached, 0);
+    if (Mdl) {
+        if (MmGetMdlByteCount(Mdl) == Size) {
+            goto done;
+        }
+        MmFreePagesFromMdl(Mdl);
+        ExFreePool(Mdl);
+        Mdl = NULL;
+    }
+
+    // try > 2GB
+    LowAddr.QuadPart = 0x80000000ull;
+    Mdl = MmAllocatePagesForMdlEx(LowAddr, HighAddr, SkipBytes, Size, MmCached, 0);
+    if (Mdl) {
+        if (MmGetMdlByteCount(Mdl) == Size) {
+            goto done;
+        }
+        MmFreePagesFromMdl(Mdl);
+        ExFreePool(Mdl);
+        Mdl = NULL;
+    }
+
+    // try anywhere
+    LowAddr.QuadPart = 0ull;
+    Mdl = MmAllocatePagesForMdlEx(LowAddr, HighAddr, SkipBytes, Size, MmCached, 0);
+    // Mdl byte count gets checked again after this returns
+
+done:
+    return Mdl;
+}
+static FORCEINLINE PVOID
+___AllocPages(
+    IN  PCHAR           Caller, 
+    IN  ULONG           Line,
+    IN  SIZE_T          Size,
+    OUT PMDL*           Mdl
+    )
+{
+    PVOID               Buffer;
+
+    *Mdl = __AllocPagesForMdl(Size);
+    if (*Mdl == NULL) {
+        Warning("%s:%u : MmAllocatePagesForMdlEx Failed %d bytes\n", Caller, Line, Size);
+        goto fail1;
+    }
+
+    if (MmGetMdlByteCount(*Mdl) != Size) {
+        Warning("%s:%u : %d bytes != %d bytes requested\n", Caller, Line, MmGetMdlByteCount(*Mdl), Size);
+        goto fail2;
+    }
+
+    Buffer = MmMapLockedPagesSpecifyCache(*Mdl, KernelMode, MmCached, NULL, FALSE, NormalPagePriority);
+    if (Buffer == NULL) {
+        Warning("%s:%u : MmMapLockedPagesSpecifyCache Failed %d bytes\n", Caller, Line, Size);
+        goto fail3;
+    }
+
+    return Buffer;
+
+fail3:
+fail2:
+    MmFreePagesFromMdl(*Mdl);
+    ExFreePool(*Mdl);
+fail1:
+    *Mdl = NULL;
+    return NULL;
+}
+#define __AllocPages(Size, Mdl) ___AllocPages(__FUNCTION__, __LINE__, Size, Mdl)
+
+static FORCEINLINE VOID
+__FreePages(
+    IN  PVOID           Buffer,
+    IN  PMDL            Mdl
+    )
+{
+    if (Buffer && Mdl) {
+        MmUnmapLockedPages(Buffer, Mdl);
+        MmFreePagesFromMdl(Mdl);
+        ExFreePool(Mdl);
+    }
+}
+
+#endif  // _UTIL_H
diff --git a/src/xendisk/xendisk.rc b/src/xendisk/xendisk.rc
new file mode 100644
index 0000000..df2e5b6
--- /dev/null
+++ b/src/xendisk/xendisk.rc
@@ -0,0 +1,56 @@
+/* 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 <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         COMPANY_NAME_STR
+#define VER_LEGALCOPYRIGHT_STR      "Copyright (c) Citrix Systems Inc."
+
+#define VER_PRODUCTNAME_STR         "XENDISK"
+#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        "XENDISK.SYS"
+#define VER_FILEDESCRIPTION_STR     "XENDISK"
+
+#define VER_FILETYPE                VFT_DRV
+#define VER_FILESUBTYPE             VFT2_DRV_SYSTEM
+
+#include <common.ver>
diff --git a/src/xenvbd.inf b/src/xenvbd.inf
index bc8627b..0d58453 100644
--- a/src/xenvbd.inf
+++ b/src/xenvbd.inf
@@ -46,6 +46,7 @@ CoInst_CopyFiles=11
 [SourceDisksFiles]
 xenvbd.sys=0,,
 xencrsh.sys=0,,
+xendisk.sys=0,,
 xenvbd_coinst.dll=0,,
 
 [Manufacturer] 
@@ -62,9 +63,25 @@ CopyFiles=XenVbd_Copyfiles
 [XenVbd_Copyfiles]
 xenvbd.sys
 xencrsh.sys
+xendisk.sys
+
+[XenVbd_Inst.HW] 
+AddReg=XenVbd_AddReg
+
+[XenVbd_AddReg]
+HKR,,"UpperFilters",0x00010000,"xendisk"
 
 [XenVbd_Inst.Services] 
 AddService=xenvbd,2,XenVbd_Service,
+AddService=xendisk,,XenDisk_Service,
+
+[XenDisk_Service] 
+DisplayName=%XenDiskDesc%
+ServiceType=%SERVICE_KERNEL_DRIVER% 
+StartType=%SERVICE_BOOT_START% 
+ErrorControl=%SERVICE_ERROR_NORMAL% 
+ServiceBinary=%12%\xendisk.sys 
+LoadOrderGroup="Scsi Miniport"
 
 [XenVbd_Service] 
 DisplayName=%XenVbdDesc%
@@ -95,6 +112,7 @@ HKR,,CoInstallers32,0x00010000,"xenvbd_coinst_@MAJOR_VERSION@_@MINOR_VERSION@_@M
 Company = "@COMPANY_NAME@"
 DiskDesc = "@PRODUCT_NAME@ PV Storage Host Adapter Package" 
 XenVbdDesc= "@PRODUCT_NAME@ PV Storage Host Adapter"
+XenDiskDesc= "@PRODUCT_NAME@ PV Storage Filter"
 
 SERVICE_BOOT_START = 0x0 
 SERVICE_SYSTEM_START = 0x1 
diff --git a/vs2012/package/package.vcxproj b/vs2012/package/package.vcxproj
index 5e5fcbc..9782f19 100644
--- a/vs2012/package/package.vcxproj
+++ b/vs2012/package/package.vcxproj
@@ -51,6 +51,9 @@
 		<ProjectReference Include="..\xenvbd\xenvbd.vcxproj">
 			<Project>{ef236371-3145-41b1-99c9-82b33e353f17}</Project>
 		</ProjectReference>
+		<ProjectReference Include="..\xendisk\xendisk.vcxproj">
+			<Project>{d7411b2c-2c43-434d-9f56-e10a3d2f5bad}</Project>
+		</ProjectReference>
 	</ItemGroup>
 	<ItemGroup>
 		<FilesToPackage Include="$(KIT)\Redist\DIFx\dpinst\EngMui\x86\dpinst.exe" Condition="'$(Platform)'=='Win32'" />
diff --git a/vs2012/xendisk/xendisk.vcxproj b/vs2012/xendisk/xendisk.vcxproj
new file mode 100644
index 0000000..333bc40
--- /dev/null
+++ b/vs2012/xendisk/xendisk.vcxproj
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+	<Import Project="..\configs.props" />
+
+	<PropertyGroup Label="Globals">
+		<Configuration>Windows Vista Debug</Configuration>
+		<Platform Condition="'$(Platform)' == ''">Win32</Platform> 
+		<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor> 
+	</PropertyGroup>
+	<PropertyGroup Label="ProeprtySheets">
+		<PlatformToolset>WindowsKernelModeDriver8.0</PlatformToolset>
+		<ConfigurationType>Driver</ConfigurationType>
+		<DriverType>WDM</DriverType>
+	</PropertyGroup>
+
+	<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+	
+	<PropertyGroup Label="Globals">
+		<ProjectGuid>{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}</ProjectGuid>
+	</PropertyGroup>
+	
+	<Import Project="..\targets.props" />
+	<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> 
+	
+	<PropertyGroup>
+		<IncludePath>$(ProjectDir)..\..\include;$(IncludePath)</IncludePath>
+		<RunCodeAnalysis>true</RunCodeAnalysis>
+		<EnableInf2cat>false</EnableInf2cat>
+		<IntDir>..\$(ProjectName)\$(ConfigurationName)\$(Platform)\</IntDir>
+		<OutDir>..\$(ConfigurationName)\$(Platform)\</OutDir>
+	</PropertyGroup>
+
+	<ItemDefinitionGroup>
+		<ClCompile>
+			<BufferSecurityCheck>false</BufferSecurityCheck>
+			<PreprocessorDefinitions>__MODULE__="XENDISK";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+			<WarningLevel>EnableAllWarnings</WarningLevel>
+			<DisableSpecificWarnings>4548;4711;4820;4668;4255;6001;6054;28196;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+			<MultiProcessorCompilation>true</MultiProcessorCompilation>
+			<EnablePREfast>true</EnablePREfast>
+		</ClCompile>
+		<Link>
+			<AdditionalDependencies>$(DDK_LIB_PATH)/libcntpr.lib;%(AdditionalDependencies)</AdditionalDependencies>
+		</Link>
+		<Inf>
+			<SpecifyArchitecture>true</SpecifyArchitecture>
+			<SpecifyDriverVerDirectiveVersion>true</SpecifyDriverVerDirectiveVersion>
+			<TimeStamp>$(MAJOR_VERSION).$(MINOR_VERSION).$(MICRO_VERSION).$(BUILD_NUMBER)</TimeStamp>
+			<EnableVerbose>true</EnableVerbose>
+		</Inf>
+	</ItemDefinitionGroup>
+	<ItemDefinitionGroup Condition="'$(Platform)'=='Win32'">
+		<ClCompile>
+			<PreprocessorDefinitions>__i386__;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+		</ClCompile>
+		<Inf>
+			<Architecture>x86</Architecture>
+		</Inf>
+	</ItemDefinitionGroup>
+	<ItemDefinitionGroup Condition="'$(Platform)'=='x64'">
+		<ClCompile>
+			<PreprocessorDefinitions>__x86_64__;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+		</ClCompile>
+		<Inf>
+			<Architecture>amd64</Architecture>
+		</Inf>
+	</ItemDefinitionGroup>
+
+	<ItemGroup>
+		<FilesToPackage Include="$(TargetPath)" />
+		<FilesToPackage Include="$(OutDir)$(TargetName).pdb" />
+		<FilesToPackage Include="@(Inf->'%(CopyOutput)')" Condition="'@(Inf)'!=''" />
+	</ItemGroup>
+	<ItemGroup>
+		<ClCompile Include="../../src/xendisk/driver.c" />
+		<ClCompile Include="../../src/xendisk/fdo.c" />
+		<ClCompile Include="../../src/xendisk/pdo.c" />
+		<ClCompile Include="../../src/xendisk/thread.c" />
+	</ItemGroup>
+	<ItemGroup>
+		<ResourceCompile Include="..\..\src\xendisk\xendisk.rc" />
+	</ItemGroup>
+	<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+</Project>
diff --git a/vs2012/xendisk/xendisk.vcxproj.user b/vs2012/xendisk/xendisk.vcxproj.user
new file mode 100644
index 0000000..0b2b210
--- /dev/null
+++ b/vs2012/xendisk/xendisk.vcxproj.user
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+	<PropertyGroup>
+		<SignMode>TestSign</SignMode>
+		<TestCertificate>..\..\src\xenvbd.pfx</TestCertificate>
+		<TimeStampServer>http://timestamp.verisign.com/scripts/timstamp.dll</TimeStampServer>
+	</PropertyGroup>
+</Project>
diff --git a/vs2012/xenvbd.sln b/vs2012/xenvbd.sln
index 86fb1a5..15113cf 100644
--- a/vs2012/xenvbd.sln
+++ b/vs2012/xenvbd.sln
@@ -4,10 +4,13 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xenvbd", "xenvbd\xenvbd.vcx
 	ProjectSection(ProjectDependencies) = postProject
 		{50C08437-C1F3-4349-BF6A-7B55A06BF999} = {50C08437-C1F3-4349-BF6A-7B55A06BF999}
 		{58F5BC43-B92E-4A2B-975D-0066EAB29092} = {58F5BC43-B92E-4A2B-975D-0066EAB29092}
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD} = {D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}
 	EndProjectSection
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xencrsh", "xencrsh\xencrsh.vcxproj", "{58F5BC43-B92E-4A2B-975D-0066EAB29092}"
 EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xendisk", "xendisk\xendisk.vcxproj", "{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}"
+EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xenvbd_coinst", "coinst\xenvbd_coinst.vcxproj", "{50C08437-C1F3-4349-BF6A-7B55A06BF999}"
 	ProjectSection(ProjectDependencies) = postProject
 		{58F5BC43-B92E-4A2B-975D-0066EAB29092} = {58F5BC43-B92E-4A2B-975D-0066EAB29092}
@@ -18,6 +21,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "package", "package\package.
 		{50C08437-C1F3-4349-BF6A-7B55A06BF999} = {50C08437-C1F3-4349-BF6A-7B55A06BF999}
 		{58F5BC43-B92E-4A2B-975D-0066EAB29092} = {58F5BC43-B92E-4A2B-975D-0066EAB29092}
         {EF236371-3145-41B1-99C9-82B33E353F17} = {EF236371-3145-41B1-99C9-82B33E353F17}
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD} = {D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}
 	EndProjectSection
 EndProject
 Global
@@ -36,6 +40,30 @@ Global
 		Windows Vista Release|x64 = Windows Vista Release|x64
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7 Debug|Win32.ActiveCfg = Windows 7 Debug|Win32
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7 Debug|Win32.Build.0 = Windows 7 Debug|Win32
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7 Debug|x64.ActiveCfg = Windows 7 Debug|x64
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7 Debug|x64.Build.0 = Windows 7 Debug|x64
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7 Release|Win32.ActiveCfg = Windows 7 Release|Win32
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7 Release|Win32.Build.0 = Windows 7 Release|Win32
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7 Release|x64.ActiveCfg = Windows 7 Release|x64
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7 Release|x64.Build.0 = Windows 7 Release|x64
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8 Debug|Win32.ActiveCfg = Windows 8 Debug|Win32
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8 Debug|Win32.Build.0 = Windows 8 Debug|Win32
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8 Debug|x64.ActiveCfg = Windows 8 Debug|x64
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8 Debug|x64.Build.0 = Windows 8 Debug|x64
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8 Release|Win32.ActiveCfg = Windows 8 Release|Win32
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8 Release|Win32.Build.0 = Windows 8 Release|Win32
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8 Release|x64.ActiveCfg = Windows 8 Release|x64
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8 Release|x64.Build.0 = Windows 8 Release|x64
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista Debug|Win32.ActiveCfg = Windows Vista Debug|Win32
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista Debug|Win32.Build.0 = Windows Vista Debug|Win32
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista Debug|x64.ActiveCfg = Windows Vista Debug|x64
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista Debug|x64.Build.0 = Windows Vista Debug|x64
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista Release|Win32.ActiveCfg = Windows Vista Release|Win32
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista Release|Win32.Build.0 = Windows Vista Release|Win32
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista Release|x64.ActiveCfg = Windows Vista Release|x64
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista Release|x64.Build.0 = Windows Vista Release|x64
 		{EF236371-3145-41B1-99C9-82B33E353F17}.Windows 7 Debug|Win32.ActiveCfg = Windows 7 Debug|Win32
 		{EF236371-3145-41B1-99C9-82B33E353F17}.Windows 7 Debug|Win32.Build.0 = Windows 7 Debug|Win32
 		{EF236371-3145-41B1-99C9-82B33E353F17}.Windows 7 Debug|x64.ActiveCfg = Windows 7 Debug|x64
diff --git a/vs2013/package/package.vcxproj b/vs2013/package/package.vcxproj
index 5d0de4d..8b2fa4f 100644
--- a/vs2013/package/package.vcxproj
+++ b/vs2013/package/package.vcxproj
@@ -80,6 +80,9 @@
     <ProjectReference Include="..\xenvbd\xenvbd.vcxproj">
       <Project>{ef236371-3145-41b1-99c9-82b33e353f17}</Project>
     </ProjectReference>
+    <ProjectReference Include="..\xendisk\xendisk.vcxproj">
+      <Project>{d7411b2c-2c43-434d-9f56-e10a3d2f5bad}</Project>
+    </ProjectReference>
   </ItemGroup>
   <ItemGroup>
     <FilesToPackage Include="$(KIT)\Redist\DIFx\dpinst\EngMui\x86\dpinst.exe" Condition="'$(Platform)'=='Win32'" />
diff --git a/vs2013/xendisk/xendisk.vcxproj b/vs2013/xendisk/xendisk.vcxproj
new file mode 100644
index 0000000..39b9163
--- /dev/null
+++ b/vs2013/xendisk/xendisk.vcxproj
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="..\configs.props" />
+  <PropertyGroup Label="Globals">
+    <Configuration>Windows Vista Debug</Configuration>
+    <Platform Condition="'$(Platform)' == ''">Win32</Platform>
+    <DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
+  </PropertyGroup>
+  <PropertyGroup Label="ProeprtySheets">
+    <ConfigurationType>Driver</ConfigurationType>
+    <DriverType>WDM</DriverType>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Windows 8 Release|Win32'">
+    <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|Win32'">
+    <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)'=='Windows 7 Debug|Win32'">
+    <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 Release|x64'">
+    <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 Release|x64'">
+    <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 Debug|x64'">
+    <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Windows 8 Debug|x64'">
+    <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}</ProjectGuid>
+  </PropertyGroup>
+  <Import Project="..\targets.props" />
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <PropertyGroup>
+    <IncludePath>$(ProjectDir)..\..\include;$(IncludePath)</IncludePath>
+    <RunCodeAnalysis>true</RunCodeAnalysis>
+    <EnableInf2cat>false</EnableInf2cat>
+    <IntDir>..\$(ProjectName)\$(ConfigurationName)\$(Platform)\</IntDir>
+    <OutDir>..\$(ConfigurationName)\$(Platform)\</OutDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup>
+    <ClCompile>
+      <BufferSecurityCheck>false</BufferSecurityCheck>
+      <PreprocessorDefinitions>__MODULE__="XENDISK";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <WarningLevel>EnableAllWarnings</WarningLevel>
+      <DisableSpecificWarnings>4548;4711;4820;4668;4255;6001;6054;28196;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <EnablePREfast>true</EnablePREfast>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>$(DDK_LIB_PATH)/libcntpr.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+    <Inf>
+      <SpecifyArchitecture>true</SpecifyArchitecture>
+      <SpecifyDriverVerDirectiveVersion>true</SpecifyDriverVerDirectiveVersion>
+      <TimeStamp>$(MAJOR_VERSION).$(MINOR_VERSION).$(MICRO_VERSION).$(BUILD_NUMBER)</TimeStamp>
+      <EnableVerbose>true</EnableVerbose>
+    </Inf>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Platform)'=='Win32'">
+    <ClCompile>
+      <PreprocessorDefinitions>__i386__;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Inf>
+      <Architecture>x86</Architecture>
+    </Inf>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Platform)'=='x64'">
+    <ClCompile>
+      <PreprocessorDefinitions>__x86_64__;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Inf>
+      <Architecture>amd64</Architecture>
+    </Inf>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <FilesToPackage Include="$(TargetPath)" />
+    <FilesToPackage Include="$(OutDir)$(TargetName).pdb" />
+    <FilesToPackage Include="@(Inf->'%(CopyOutput)')" Condition="'@(Inf)'!=''" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="../../src/xendisk/driver.c" />
+    <ClCompile Include="../../src/xendisk/fdo.c" />
+    <ClCompile Include="../../src/xendisk/pdo.c" />
+    <ClCompile Include="../../src/xendisk/thread.c" />
+  </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="..\..\src\xendisk\xendisk.rc" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+</Project>
diff --git a/vs2013/xendisk/xendisk.vcxproj.user b/vs2013/xendisk/xendisk.vcxproj.user
new file mode 100644
index 0000000..1f1f3c0
--- /dev/null
+++ b/vs2013/xendisk/xendisk.vcxproj.user
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <SignMode>TestSign</SignMode>
+    <TestCertificate>..\..\src\xenvbd.pfx</TestCertificate>
+    <TimeStampServer>http://timestamp.verisign.com/scripts/timstamp.dll</TimeStampServer>
+  </PropertyGroup>
+</Project>
diff --git a/vs2013/xenvbd.sln b/vs2013/xenvbd.sln
index 13128c5..da798d2 100644
--- a/vs2013/xenvbd.sln
+++ b/vs2013/xenvbd.sln
@@ -4,10 +4,13 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xenvbd", "xenvbd\xenvbd.vcx
 	ProjectSection(ProjectDependencies) = postProject
 		{50C08437-C1F3-4349-BF6A-7B55A06BF999} = {50C08437-C1F3-4349-BF6A-7B55A06BF999}
 		{58F5BC43-B92E-4A2B-975D-0066EAB29092} = {58F5BC43-B92E-4A2B-975D-0066EAB29092}
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD} = {D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}
 	EndProjectSection
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xencrsh", "xencrsh\xencrsh.vcxproj", "{58F5BC43-B92E-4A2B-975D-0066EAB29092}"
 EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xendisk", "xendisk\xendisk.vcxproj", "{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}"
+EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xenvbd_coinst", "coinst\xenvbd_coinst.vcxproj", "{50C08437-C1F3-4349-BF6A-7B55A06BF999}"
     ProjectSection(ProjectDependencies) = postProject
 		{58F5BC43-B92E-4A2B-975D-0066EAB29092} = {58F5BC43-B92E-4A2B-975D-0066EAB29092}
@@ -18,6 +21,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "package", "package\package.
 		{50C08437-C1F3-4349-BF6A-7B55A06BF999} = {50C08437-C1F3-4349-BF6A-7B55A06BF999}
 		{58F5BC43-B92E-4A2B-975D-0066EAB29092} = {58F5BC43-B92E-4A2B-975D-0066EAB29092}
         {EF236371-3145-41B1-99C9-82B33E353F17} = {EF236371-3145-41B1-99C9-82B33E353F17}
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD} = {D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}		
 	EndProjectSection
 EndProject
 Global
@@ -36,6 +40,30 @@ Global
 		Windows Vista Release|x64 = Windows Vista Release|x64
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7 Debug|Win32.ActiveCfg = Windows 7 Debug|Win32
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7 Debug|Win32.Build.0 = Windows 7 Debug|Win32
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7 Debug|x64.ActiveCfg = Windows 7 Debug|x64
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7 Debug|x64.Build.0 = Windows 7 Debug|x64
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7 Release|Win32.ActiveCfg = Windows 7 Release|Win32
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7 Release|Win32.Build.0 = Windows 7 Release|Win32
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7 Release|x64.ActiveCfg = Windows 7 Release|x64
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7 Release|x64.Build.0 = Windows 7 Release|x64
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8 Debug|Win32.ActiveCfg = Windows 8 Debug|Win32
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8 Debug|Win32.Build.0 = Windows 8 Debug|Win32
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8 Debug|x64.ActiveCfg = Windows 8 Debug|x64
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8 Debug|x64.Build.0 = Windows 8 Debug|x64
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8 Release|Win32.ActiveCfg = Windows 8 Release|Win32
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8 Release|Win32.Build.0 = Windows 8 Release|Win32
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8 Release|x64.ActiveCfg = Windows 8 Release|x64
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8 Release|x64.Build.0 = Windows 8 Release|x64
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista Debug|Win32.ActiveCfg = Windows Vista Debug|Win32
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista Debug|Win32.Build.0 = Windows Vista Debug|Win32
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista Debug|x64.ActiveCfg = Windows Vista Debug|x64
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista Debug|x64.Build.0 = Windows Vista Debug|x64
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista Release|Win32.ActiveCfg = Windows Vista Release|Win32
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista Release|Win32.Build.0 = Windows Vista Release|Win32
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista Release|x64.ActiveCfg = Windows Vista Release|x64
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista Release|x64.Build.0 = Windows Vista Release|x64
 		{EF236371-3145-41B1-99C9-82B33E353F17}.Windows 7 Debug|Win32.ActiveCfg = Windows 7 Debug|Win32
 		{EF236371-3145-41B1-99C9-82B33E353F17}.Windows 7 Debug|Win32.Build.0 = Windows 7 Debug|Win32
 		{EF236371-3145-41B1-99C9-82B33E353F17}.Windows 7 Debug|x64.ActiveCfg = Windows 7 Debug|x64
-- 
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 Oct 28 11:27:51 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 28 Oct 2014 11:27: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 1Xj4wJ-000468-S8; Tue, 28 Oct 2014 11:27:51 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <owen.smith@citrix.com>) id 1Xj4wI-000463-2s
	for win-pv-devel@lists.xenproject.org; Tue, 28 Oct 2014 11:27:50 +0000
Received: from [85.158.139.211] by server-11.bemta-5.messagelabs.com id
	4A/B2-02696-5BD7F445; Tue, 28 Oct 2014 11:27:49 +0000
X-Env-Sender: owen.smith@citrix.com
X-Msg-Ref: server-8.tower-206.messagelabs.com!1414495663!12165844!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: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 20931 invoked from network); 28 Oct 2014 11:27:44 -0000
Received: from smtp.citrix.com (HELO SMTP.CITRIX.COM) (66.165.176.89)
	by server-8.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	28 Oct 2014 11:27:44 -0000
X-IronPort-AV: E=Sophos;i="5.04,802,1406592000"; d="scan'208";a="185515564"
From: Owen Smith <owen.smith@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
Date: Tue, 28 Oct 2014 11:27:24 +0000
Message-ID: <1414495644-5948-4-git-send-email-owen.smith@citrix.com>
X-Mailer: git-send-email 1.9.4.msysgit.1
In-Reply-To: <1414495644-5948-1-git-send-email-owen.smith@citrix.com>
References: <1414495644-5948-1-git-send-email-owen.smith@citrix.com>
MIME-Version: 1.0
X-DLP: MIA2
Cc: paul.durrant@citrix.com, Owen Smith <owen.smith@citrix.com>
Subject: [win-pv-devel] [PATCH 3/3] Add XenDisk device upper filter.
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

XenDisk intercepts and translates IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES
into SCSIOP_UNMAP SRBs. Storport will pass on these SCSIOP_UNMAP requests
to XenVbd, which will create the appropriate BLKIF_OP_DISCARD requests.
XenDisk is only neccessary because Storport does not do the translation
to SCSIOP_UNMAPs.

Signed-off-by: Owen Smith <owen.smith@citrix.com>
---
 build.py                            |    1 +
 src/xendisk/assert.h                |  220 ++++
 src/xendisk/debug.h                 |   94 ++
 src/xendisk/driver.c                |  203 ++++
 src/xendisk/driver.h                |   68 ++
 src/xendisk/fdo.c                   | 1862 +++++++++++++++++++++++++++++++
 src/xendisk/fdo.h                   |   78 ++
 src/xendisk/mutex.h                 |  113 ++
 src/xendisk/pdo.c                   | 2079 +++++++++++++++++++++++++++++++++++
 src/xendisk/pdo.h                   |   90 ++
 src/xendisk/thread.c                |  225 ++++
 src/xendisk/thread.h                |   73 ++
 src/xendisk/types.h                 |   53 +
 src/xendisk/util.h                  |  222 ++++
 src/xendisk/xendisk.rc              |   56 +
 src/xenvbd.inf                      |   18 +
 vs2012/package/package.vcxproj      |    3 +
 vs2012/xendisk/xendisk.vcxproj      |   84 ++
 vs2012/xendisk/xendisk.vcxproj.user |    8 +
 vs2012/xenvbd.sln                   |   28 +
 vs2013/package/package.vcxproj      |    3 +
 vs2013/xendisk/xendisk.vcxproj      |  112 ++
 vs2013/xendisk/xendisk.vcxproj.user |    8 +
 vs2013/xenvbd.sln                   |   28 +
 24 files changed, 5729 insertions(+)
 create mode 100644 src/xendisk/assert.h
 create mode 100644 src/xendisk/debug.h
 create mode 100644 src/xendisk/driver.c
 create mode 100644 src/xendisk/driver.h
 create mode 100644 src/xendisk/fdo.c
 create mode 100644 src/xendisk/fdo.h
 create mode 100644 src/xendisk/mutex.h
 create mode 100644 src/xendisk/pdo.c
 create mode 100644 src/xendisk/pdo.h
 create mode 100644 src/xendisk/thread.c
 create mode 100644 src/xendisk/thread.h
 create mode 100644 src/xendisk/types.h
 create mode 100644 src/xendisk/util.h
 create mode 100644 src/xendisk/xendisk.rc
 create mode 100644 vs2012/xendisk/xendisk.vcxproj
 create mode 100644 vs2012/xendisk/xendisk.vcxproj.user
 create mode 100644 vs2013/xendisk/xendisk.vcxproj
 create mode 100644 vs2013/xendisk/xendisk.vcxproj.user

diff --git a/build.py b/build.py
index 26261ad..3a71d0c 100644
--- a/build.py
+++ b/build.py
@@ -368,6 +368,7 @@ if __name__ == '__main__':
 
     if len(sys.argv) <= 2 or sdv[sys.argv[2]]:
         run_sdv('xencrsh', driver, vs)
+        run_sdv('xendisk', driver, vs)
         run_sdv('xenvbd', driver, vs)
 
     archive(driver + '\\source.tgz', manifest().splitlines(), tgz=True)
diff --git a/src/xendisk/assert.h b/src/xendisk/assert.h
new file mode 100644
index 0000000..cd571bd
--- /dev/null
+++ b/src/xendisk/assert.h
@@ -0,0 +1,220 @@
+/* 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 _XENDISK_ASSERT_H
+#define _XENDISK_ASSERT_H
+
+#include <ntddk.h>
+
+#include "debug.h"
+
+static FORCEINLINE VOID
+__BugCheck(
+    __in  ULONG       Code,
+    __in_opt ULONG_PTR   Parameter1,
+    __in_opt ULONG_PTR   Parameter2,
+    __in_opt ULONG_PTR   Parameter3,
+    __in_opt ULONG_PTR   Parameter4
+    )
+{
+#pragma prefast(suppress:28159)
+    KeBugCheckEx(Code,
+                 Parameter1,
+                 Parameter2,
+                 Parameter3,
+                 Parameter4);
+}
+
+#define ASSERTION_FAILURE   0x0000DEAD
+
+
+#define BUG(_TEXT)                                              \
+        do {                                                    \
+            const CHAR  *_Text = (_TEXT);                       \
+            const CHAR  *_File = __FILE__;                      \
+            ULONG       _Line = __LINE__;                       \
+                                                                \
+            Error("BUG: " _TEXT "\n");                          \
+            __BugCheck(ASSERTION_FAILURE,                       \
+                       (ULONG_PTR)_Text,                        \
+                       (ULONG_PTR)_File,                        \
+                       (ULONG_PTR)_Line,                        \
+                       0);                                      \
+        } while (FALSE)
+
+#define BUG_MSG(_TEXT1, _TEXT2)                                 \
+        do {                                                    \
+            const CHAR  *_Text1 = (_TEXT1);                     \
+            const CHAR  *_Text2 = (_TEXT2);                     \
+            const CHAR  *_File = __FILE__;                      \
+            ULONG       _Line = __LINE__;                       \
+                                                                \
+            Error("BUG: " _TEXT1 " %s\n", _Text2);              \
+            __BugCheck(ASSERTION_FAILURE,                       \
+                       (ULONG_PTR)_Text1,                       \
+                       (ULONG_PTR)_File,                        \
+                       (ULONG_PTR)_Line,                        \
+                       (ULONG_PTR)_Text2);                      \
+        } while (FALSE)
+
+#define BUG_ON(_EXP)                           \
+        if (_EXP) BUG(#_EXP)
+
+#define BUG_ON_MSG(_EXP, _TEXT)                \
+        if (_EXP) BUG_MSG(#_EXP, _TEXT)
+
+#if DBG
+
+#define __NT_ASSERT(_EXP)                                       \
+        ((!(_EXP)) ?                                            \
+        (Error("ASSERTION FAILED: " #_EXP "\n"),                \
+         __annotation(L"Debug", L"AssertFail", L#_EXP),         \
+         DbgRaiseAssertionFailure(), FALSE) :                   \
+        TRUE)
+
+#define __NT_ASSERT_MSG(_EXP, _TEXT)                            \
+        ((!(_EXP)) ?                                            \
+        (Error("ASSERTION FAILED: " #_EXP " " #_TEXT "\n"),     \
+         __annotation(L"Debug", L"AssertFail", L#_EXP),         \
+         DbgRaiseAssertionFailure(), FALSE) :                   \
+        TRUE)
+
+#define __ASSERT(_EXP)              __NT_ASSERT(_EXP)
+#define __ASSERT_MSG(_EXP, _TEXT)   __NT_ASSERT_MSG(_EXP, _TEXT)
+
+#else   // DBG
+
+#define __ASSERT(_EXP)              BUG_ON(!(_EXP))
+#define __ASSERT_MSG(_EXP, _TEXT)   BUG_ON_MSG(!(_EXP), _TEXT)
+
+#endif  // DBG
+
+#undef  ASSERT
+
+#define ASSERT(_EXP)                    \
+        do {                            \
+            __ASSERT(_EXP);             \
+            __analysis_assume(_EXP);    \
+        } while (FALSE)
+
+#define ASSERT_MSG(_EXP, _TEXT)         \
+        do {                            \
+            __ASSERT_MSG(_EXP, _TEXT);  \
+            __analysis_assume(_EXP);    \
+        } while (FALSE)
+
+#define ASSERT3U(_X, _OP, _Y)                       \
+        do {                                        \
+            ULONGLONG   _Lval = (ULONGLONG)(_X);    \
+            ULONGLONG   _Rval = (ULONGLONG)(_Y);    \
+            if (!(_Lval _OP _Rval)) {               \
+                Error("%s = %llu\n", #_X, _Lval);   \
+                Error("%s = %llu\n", #_Y, _Rval);   \
+                ASSERT(_X _OP _Y);                  \
+            }                                       \
+        } while (FALSE)
+
+#define ASSERT3S(_X, _OP, _Y)                       \
+        do {                                        \
+            LONGLONG    _Lval = (LONGLONG)(_X);     \
+            LONGLONG    _Rval = (LONGLONG)(_Y);     \
+            if (!(_Lval _OP _Rval)) {               \
+                Error("%s = %lld\n", #_X, _Lval);   \
+                Error("%s = %lld\n", #_Y, _Rval);   \
+                ASSERT(_X _OP _Y);                  \
+            }                                       \
+        } while (FALSE)
+
+#define ASSERT3P(_X, _OP, _Y)                       \
+        do {                                        \
+            PVOID   _Lval = (PVOID)(_X);            \
+            PVOID   _Rval = (PVOID)(_Y);            \
+            if (!(_Lval _OP _Rval)) {               \
+                Error("%s = %p\n", #_X, _Lval);     \
+                Error("%s = %p\n", #_Y, _Rval);     \
+                ASSERT(_X _OP _Y);                  \
+            }                                       \
+        } while (FALSE)
+
+#define ASSERTREFCOUNT(_X, _OP, _Y, _Z)             \
+        do {                                        \
+            LONG    _L = (LONG)(_X);                \
+            LONG    _R = (LONG)(_Y);                \
+            if (!(_L _OP _R)) {                     \
+                Error("%s:%s = %d\n", (_Z), #_X, _L); \
+                Error("%s:%s = %d\n", (_Z), #_Y, _R); \
+                ASSERT_MSG(_X _OP _Y, (_Z));        \
+            }                                       \
+        } while (FALSE)
+
+#ifndef TEST_MEMORY
+#define TEST_MEMORY DBG
+#endif
+
+#if TEST_MEMORY
+
+__checkReturn
+static __inline BOOLEAN
+_IsZeroMemory(
+    __in const PCHAR Caller,
+    __in const PCHAR Name,
+    __in PVOID       Buffer,
+    __in ULONG       Length
+    )
+{
+    ULONG           Offset;
+
+    Offset = 0;
+    while (Offset < Length) {
+        if (*((PUCHAR)Buffer + Offset) != 0) {
+            Error("%s: non-zero byte in %s (0x%p+0x%x)\n", Caller, Name, Buffer, Offset);
+            return FALSE;
+        }
+        Offset++;
+    }
+
+    return TRUE;
+}
+
+#define IsZeroMemory(_Buffer, _Length) \
+        _IsZeroMemory(__FUNCTION__, #_Buffer, (_Buffer), (_Length))
+
+#else   // TEST_MEMORY
+
+#define IsZeroMemory(_Buffer, _Length)  TRUE
+
+#endif  // TEST_MEMORY
+
+#define IMPLY(_X, _Y)   (!(_X) || (_Y))
+#define EQUIV(_X, _Y)   (IMPLY((_X), (_Y)) && IMPLY((_Y), (_X)))
+
+#endif  // _XENDISK_ASSERT_H
+
diff --git a/src/xendisk/debug.h b/src/xendisk/debug.h
new file mode 100644
index 0000000..f592f86
--- /dev/null
+++ b/src/xendisk/debug.h
@@ -0,0 +1,94 @@
+/* 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 _DEBUG_H
+#define _DEBUG_H
+
+#include <ntddk.h>
+#include <stdarg.h>
+
+#ifdef  _SDV_
+#define __MODULE__ ""
+#endif
+
+// DEBUG_FILTER_MASKs
+// Set these to see relevant output
+// ERROR        0x00000001
+// WARNING      0x00000002
+// TRACE        0x00000004
+// INFO         0x00000008
+
+#pragma warning(disable:4127)   // conditional expression is constant
+
+//
+// Debug Output and Logging
+//
+static __inline VOID
+__DebugMessage(
+    __in    ULONG       Level,
+    __in __nullterminated const CHAR  *Prefix,
+    __in __nullterminated const CHAR  *Format,
+    ...
+    )
+{
+    va_list         Arguments;
+
+    va_start(Arguments, Format);
+
+#pragma prefast(suppress:6001) // Using uninitialized memory
+    vDbgPrintExWithPrefix(Prefix,
+                          DPFLTR_IHVDRIVER_ID,
+                          Level,
+                          Format,
+                          Arguments);
+    va_end(Arguments);
+}
+
+#define Error(...)  \
+        __DebugMessage(DPFLTR_ERROR_LEVEL, __MODULE__ "|" __FUNCTION__ ":", __VA_ARGS__)
+
+#define Warning(...)  \
+        __DebugMessage(DPFLTR_WARNING_LEVEL, __MODULE__ "|" __FUNCTION__ ":", __VA_ARGS__)
+
+#if DBG
+#define Trace(...)  \
+        __DebugMessage(DPFLTR_TRACE_LEVEL, __MODULE__ "|" __FUNCTION__ ":", __VA_ARGS__)
+#else   // DBG
+#define Trace(...) \
+        (VOID)(__VA_ARGS__)
+#endif  // DBG
+
+#define Verbose(...) \
+        __DebugMessage(DPFLTR_INFO_LEVEL, __MODULE__ "|" __FUNCTION__ ":", __VA_ARGS__)
+
+#include "assert.h"
+
+#endif  // _DEBUG_H
diff --git a/src/xendisk/driver.c b/src/xendisk/driver.c
new file mode 100644
index 0000000..743fc61
--- /dev/null
+++ b/src/xendisk/driver.c
@@ -0,0 +1,203 @@
+/* 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 "driver.h"
+#include "util.h"
+#include "debug.h"
+#include "assert.h"
+#include <version.h>
+
+extern PULONG       InitSafeBootMode;
+
+typedef struct _XENDISK_DRIVER {
+    PDRIVER_OBJECT              DriverObject;
+} XENDISK_DRIVER, *PXENDISK_DRIVER;
+
+static XENDISK_DRIVER   Driver;
+
+static FORCEINLINE VOID
+__DriverSetDriverObject(
+    IN  PDRIVER_OBJECT  DriverObject
+    )
+{
+    Driver.DriverObject = DriverObject;
+}
+
+static FORCEINLINE PDRIVER_OBJECT
+__DriverGetDriverObject(
+    VOID
+    )
+{
+    return Driver.DriverObject;
+}
+
+PDRIVER_OBJECT
+DriverGetDriverObject(
+    VOID
+    )
+{
+    return __DriverGetDriverObject();
+}
+
+DRIVER_UNLOAD   DriverUnload;
+
+VOID
+DriverUnload(
+    IN  PDRIVER_OBJECT  DriverObject
+    )
+{
+    ASSERT3P(DriverObject, ==, __DriverGetDriverObject());
+
+    Trace("====>\n");
+
+    __DriverSetDriverObject(NULL);
+
+    ASSERT(IsZeroMemory(&Driver, sizeof (XENDISK_DRIVER)));
+
+    Trace("<====\n");
+}
+
+DRIVER_ADD_DEVICE   AddDevice;
+
+NTSTATUS
+#pragma prefast(suppress:28152) // Does not clear DO_DEVICE_INITIALIZING
+AddDevice(
+    IN  PDRIVER_OBJECT  DriverObject,
+    IN  PDEVICE_OBJECT  PhysicalDeviceObject
+    )
+{
+    NTSTATUS            status;
+
+    ASSERT3P(DriverObject, ==, __DriverGetDriverObject());
+
+    status = FdoCreate(PhysicalDeviceObject);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    return STATUS_SUCCESS;
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return status;
+}
+
+DRIVER_DISPATCH Dispatch;
+
+NTSTATUS 
+Dispatch(
+    IN PDEVICE_OBJECT   DeviceObject,
+    IN PIRP             Irp
+    )
+{
+    PXENDISK_DX         Dx;
+    NTSTATUS            status;
+
+    Dx = (PXENDISK_DX)DeviceObject->DeviceExtension;
+    ASSERT3P(Dx->DeviceObject, ==, DeviceObject);
+
+    if (Dx->DevicePnpState == Deleted) {
+        status = STATUS_NO_SUCH_DEVICE;
+
+        Irp->IoStatus.Status = status;
+        IoCompleteRequest(Irp, IO_NO_INCREMENT);
+        goto done;
+    }
+
+    status = STATUS_NOT_SUPPORTED;
+    switch (Dx->Type) {
+    case PHYSICAL_DEVICE_OBJECT: {
+        PXENDISK_PDO    Pdo = Dx->Pdo;
+
+        status = PdoDispatch(Pdo, Irp);
+        break;
+    }
+    case FUNCTION_DEVICE_OBJECT: {
+        PXENDISK_FDO    Fdo = Dx->Fdo;
+
+        status = FdoDispatch(Fdo, Irp);
+        break;
+    }
+    default:
+        ASSERT(FALSE);
+        break;
+    }
+
+done:
+    return status;
+}
+
+DRIVER_INITIALIZE   DriverEntry;
+
+NTSTATUS
+DriverEntry(
+    IN  PDRIVER_OBJECT  DriverObject,
+    IN  PUNICODE_STRING RegistryPath
+    )
+{
+    ULONG               Index;
+
+    ASSERT3P(__DriverGetDriverObject(), ==, NULL);
+    UNREFERENCED_PARAMETER(RegistryPath);
+
+    ExInitializeDriverRuntime(DrvRtPoolNxOptIn);
+
+    Trace("====>\n");
+
+    __DriverSetDriverObject(DriverObject);
+
+    DriverObject->DriverUnload = DriverUnload;
+
+    if (*InitSafeBootMode > 0)
+        goto done;
+
+    Verbose("XENDISK %d.%d.%d (%d) (%02d.%02d.%04d)\n",
+            MAJOR_VERSION,
+            MINOR_VERSION,
+            MICRO_VERSION,
+            BUILD_NUMBER,
+            DAY,
+            MONTH,
+            YEAR);
+
+    DriverObject->DriverExtension->AddDevice = AddDevice;
+
+    for (Index = 0; Index <= IRP_MJ_MAXIMUM_FUNCTION; Index++) {
+#pragma prefast(suppress:28169) // No __drv_dispatchType annotation
+#pragma prefast(suppress:28168) // No matching __drv_dispatchType annotation for IRP_MJ_CREATE
+        DriverObject->MajorFunction[Index] = Dispatch;
+    }
+
+done:
+    Trace("<====\n");
+    return STATUS_SUCCESS;
+}
diff --git a/src/xendisk/driver.h b/src/xendisk/driver.h
new file mode 100644
index 0000000..b47e21b
--- /dev/null
+++ b/src/xendisk/driver.h
@@ -0,0 +1,68 @@
+/* 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 _XENDISK_DRIVER_H
+#define _XENDISK_DRIVER_H
+
+#include "fdo.h"
+#include "pdo.h"
+
+extern PDRIVER_OBJECT
+DriverGetDriverObject(
+    VOID
+    );
+
+#pragma warning(push)
+#pragma warning(disable:4201) // nonstandard extension used : nameless struct/union
+
+typedef struct _XENDISK_DX {
+    PDEVICE_OBJECT      DeviceObject;
+    DEVICE_OBJECT_TYPE  Type;
+
+    DEVICE_PNP_STATE    DevicePnpState;
+    DEVICE_PNP_STATE    PreviousDevicePnpState;
+
+    SYSTEM_POWER_STATE  SystemPowerState;
+    DEVICE_POWER_STATE  DevicePowerState;
+
+    IO_REMOVE_LOCK      RemoveLock;
+
+    LIST_ENTRY          ListEntry;
+
+    union {
+        PXENDISK_FDO    Fdo;
+        PXENDISK_PDO    Pdo;
+    };
+} XENDISK_DX, *PXENDISK_DX;
+
+#pragma warning(pop)
+
+#endif // _XENDISK_DRIVER_H
diff --git a/src/xendisk/fdo.c b/src/xendisk/fdo.c
new file mode 100644
index 0000000..771c82e
--- /dev/null
+++ b/src/xendisk/fdo.c
@@ -0,0 +1,1862 @@
+/* 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.
+ */ 
+
+#define INITGUID 1
+
+#include <ntddk.h>
+#include <wdmguid.h>
+#include <ntstrsafe.h>
+#include <stdlib.h>
+#include <names.h>
+
+#include "driver.h"
+#include "fdo.h"
+#include "pdo.h"
+#include "thread.h"
+#include "mutex.h"
+#include "debug.h"
+#include "assert.h"
+#include "util.h"
+
+#define FDO_TAG 'ODF'
+
+struct _XENDISK_FDO {
+    PXENDISK_DX                     Dx;
+    PDEVICE_OBJECT                  LowerDeviceObject;
+    PDEVICE_OBJECT                  PhysicalDeviceObject;
+
+    PXENDISK_THREAD                 SystemPowerThread;
+    PIRP                            SystemPowerIrp;
+    PXENDISK_THREAD                 DevicePowerThread;
+    PIRP                            DevicePowerIrp;
+
+    MUTEX                           Mutex;
+    ULONG                           References;
+};
+
+static FORCEINLINE PVOID
+__FdoAllocate(
+    IN  ULONG   Length
+    )
+{
+    return __AllocateNonPagedPoolWithTag(__FUNCTION__, __LINE__, Length, FDO_TAG);
+}
+
+static FORCEINLINE VOID
+__FdoFree(
+    IN  PVOID   Buffer
+    )
+{
+    __FreePoolWithTag(Buffer, FDO_TAG);
+}
+
+static FORCEINLINE VOID
+__FdoSetDevicePnpState(
+    IN  PXENDISK_FDO        Fdo,
+    IN  DEVICE_PNP_STATE    State
+    )
+{
+    PXENDISK_DX             Dx = Fdo->Dx;
+
+    // We can never transition out of the deleted state
+    ASSERT(Dx->DevicePnpState != Deleted || State == Deleted);
+
+    Dx->PreviousDevicePnpState = Dx->DevicePnpState;
+    Dx->DevicePnpState = State;
+}
+
+static FORCEINLINE VOID
+__FdoRestoreDevicePnpState(
+    IN  PXENDISK_FDO        Fdo,
+    IN  DEVICE_PNP_STATE    State
+    )
+{
+    PXENDISK_DX             Dx = Fdo->Dx;
+
+    if (Dx->DevicePnpState == State)
+        Dx->DevicePnpState = Dx->PreviousDevicePnpState;
+}
+
+static FORCEINLINE DEVICE_PNP_STATE
+__FdoGetDevicePnpState(
+    IN  PXENDISK_FDO    Fdo
+    )
+{
+    PXENDISK_DX         Dx = Fdo->Dx;
+
+    return Dx->DevicePnpState;
+}
+
+static FORCEINLINE VOID
+__FdoSetDevicePowerState(
+    IN  PXENDISK_FDO        Fdo,
+    IN  DEVICE_POWER_STATE  State
+    )
+{
+    PXENDISK_DX             Dx = Fdo->Dx;
+
+    Dx->DevicePowerState = State;
+}
+
+static FORCEINLINE DEVICE_POWER_STATE
+__FdoGetDevicePowerState(
+    IN  PXENDISK_FDO    Fdo
+    )
+{
+    PXENDISK_DX         Dx = Fdo->Dx;
+
+    return Dx->DevicePowerState;
+}
+
+static FORCEINLINE VOID
+__FdoSetSystemPowerState(
+    IN  PXENDISK_FDO        Fdo,
+    IN  SYSTEM_POWER_STATE  State
+    )
+{
+    PXENDISK_DX              Dx = Fdo->Dx;
+
+    Dx->SystemPowerState = State;
+}
+
+static FORCEINLINE SYSTEM_POWER_STATE
+__FdoGetSystemPowerState(
+    IN  PXENDISK_FDO    Fdo
+    )
+{
+    PXENDISK_DX         Dx = Fdo->Dx;
+
+    return Dx->SystemPowerState;
+}
+
+static FORCEINLINE PDEVICE_OBJECT
+__FdoGetPhysicalDeviceObject(
+    IN  PXENDISK_FDO    Fdo
+    )
+{
+    return Fdo->PhysicalDeviceObject;
+}
+
+VOID
+FdoAddPhysicalDeviceObject(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PDEVICE_OBJECT  DeviceObject
+    )
+{
+    PXENDISK_DX         Dx;
+
+    Dx = (PXENDISK_DX)DeviceObject->DeviceExtension;
+    ASSERT3U(Dx->Type, ==, PHYSICAL_DEVICE_OBJECT);
+
+    InsertTailList(&Fdo->Dx->ListEntry, &Dx->ListEntry);
+    ASSERT3U(Fdo->References, !=, 0);
+    Fdo->References++;
+}
+
+VOID
+FdoRemovePhysicalDeviceObject(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PDEVICE_OBJECT  DeviceObject
+    )
+{
+    PXENDISK_DX         Dx;
+
+    Dx = (PXENDISK_DX)DeviceObject->DeviceExtension;
+    ASSERT3U(Dx->Type, ==, PHYSICAL_DEVICE_OBJECT);
+
+    RemoveEntryList(&Dx->ListEntry);
+    ASSERT3U(Fdo->References, !=, 0);
+    --Fdo->References;
+}
+
+static FORCEINLINE VOID
+__FdoAcquireMutex(
+    IN  PXENDISK_FDO     Fdo
+    )
+{
+    AcquireMutex(&Fdo->Mutex);
+}
+
+VOID
+FdoAcquireMutex(
+    IN  PXENDISK_FDO     Fdo
+    )
+{
+    __FdoAcquireMutex(Fdo);
+}
+
+static FORCEINLINE VOID
+__FdoReleaseMutex(
+    IN  PXENDISK_FDO     Fdo
+    )
+{
+    ReleaseMutex(&Fdo->Mutex);
+}
+
+VOID
+FdoReleaseMutex(
+    IN  PXENDISK_FDO     Fdo
+    )
+{
+    __FdoReleaseMutex(Fdo);
+
+    if (Fdo->References == 0)
+        FdoDestroy(Fdo);
+}
+
+static FORCEINLINE VOID
+__FdoEnumerate(
+    IN  PXENDISK_FDO        Fdo,
+    IN  PDEVICE_RELATIONS   Relations
+    )
+{
+    PDEVICE_OBJECT          *PhysicalDeviceObject;
+    ULONG                   Count;
+    PLIST_ENTRY             ListEntry;
+    ULONG                   Index;
+    NTSTATUS                status;
+
+    Count = Relations->Count;
+    ASSERT(Count != 0);
+
+    PhysicalDeviceObject = __FdoAllocate(sizeof (PDEVICE_OBJECT) * Count);
+
+    status = STATUS_NO_MEMORY;
+    if (PhysicalDeviceObject == NULL)
+        goto fail1;
+
+    RtlCopyMemory(PhysicalDeviceObject,
+                  Relations->Objects,
+                  sizeof (PDEVICE_OBJECT) * Count);
+
+    AcquireMutex(&Fdo->Mutex);
+
+    // Remove any PDOs that do not appear in the device list
+    ListEntry = Fdo->Dx->ListEntry.Flink;
+    while (ListEntry != &Fdo->Dx->ListEntry) {
+        PLIST_ENTRY     Next = ListEntry->Flink;
+        PXENDISK_DX     Dx = CONTAINING_RECORD(ListEntry, XENDISK_DX, ListEntry);
+        PXENDISK_PDO    Pdo = Dx->Pdo;
+        BOOLEAN         Missing;
+
+        Missing = TRUE;
+        for (Index = 0; Index < Count; Index++) {
+            if (PdoGetPhysicalDeviceObject(Pdo) == PhysicalDeviceObject[Index]) {
+                Missing = FALSE;
+#pragma prefast(suppress:6387)  // PhysicalDeviceObject[Index] could be NULL
+                ObDereferenceObject(PhysicalDeviceObject[Index]);
+                PhysicalDeviceObject[Index] = NULL; // avoid duplication
+                break;
+            }
+        }
+
+        if (Missing && !PdoIsMissing(Pdo)) {
+            if (PdoGetDevicePnpState(Pdo) == Present) {
+                PdoSetDevicePnpState(Pdo, Deleted);
+                PdoDestroy(Pdo);
+            } else {
+                PdoSetMissing(Pdo, "device disappeared");
+            }
+        }
+
+        ListEntry = Next;
+    }
+
+    // Walk the list and create PDO filters for any new devices
+    for (Index = 0; Index < Count; Index++) {
+#pragma warning(suppress:6385)  // Reading invalid data from 'PhysicalDeviceObject'
+        if (PhysicalDeviceObject[Index] != NULL) {
+            (VOID) PdoCreate(Fdo,
+                             PhysicalDeviceObject[Index]);
+            ObDereferenceObject(PhysicalDeviceObject[Index]);
+        }
+    }
+    
+    ReleaseMutex(&Fdo->Mutex);
+
+    __FdoFree(PhysicalDeviceObject);
+    return;
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+}
+
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
+static NTSTATUS
+__FdoForwardIrpSynchronously(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
+    )
+{
+    PKEVENT             Event = Context;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
+    UNREFERENCED_PARAMETER(Irp);
+
+    KeSetEvent(Event, IO_NO_INCREMENT, FALSE);
+
+    return STATUS_MORE_PROCESSING_REQUIRED;
+}
+
+static NTSTATUS
+FdoForwardIrpSynchronously(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PIRP            Irp
+    )
+{
+    KEVENT              Event;
+    NTSTATUS            status;
+
+    ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
+
+    KeInitializeEvent(&Event, NotificationEvent, FALSE);
+
+    IoCopyCurrentIrpStackLocationToNext(Irp);
+    IoSetCompletionRoutine(Irp,
+                           __FdoForwardIrpSynchronously,
+                           &Event,
+                           TRUE,
+                           TRUE,
+                           TRUE);
+
+    status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
+    if (status == STATUS_PENDING) {
+        (VOID) KeWaitForSingleObject(&Event,
+                                     Executive,
+                                     KernelMode,
+                                     FALSE,
+                                     NULL);
+        status = Irp->IoStatus.Status;
+    } else {
+        ASSERT3U(status, ==, Irp->IoStatus.Status);
+    }
+
+    return status;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+FdoStartDevice(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PIRP            Irp
+    )
+{
+    POWER_STATE         PowerState;
+    NTSTATUS            status;
+
+    status = IoAcquireRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    status = FdoForwardIrpSynchronously(Fdo, Irp);
+    if (!NT_SUCCESS(status))
+        goto fail2;
+
+    __FdoSetSystemPowerState(Fdo, PowerSystemWorking);
+    __FdoSetDevicePowerState(Fdo, PowerDeviceD0);
+
+    PowerState.DeviceState = PowerDeviceD0;
+    PoSetPowerState(Fdo->Dx->DeviceObject,
+                    DevicePowerState,
+                    PowerState);
+
+    __FdoSetDevicePnpState(Fdo, Started);
+
+    IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+
+fail2:
+    Error("fail2\n");
+
+    IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
+static NTSTATUS
+__FdoQueryStopDevice(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
+    )
+{
+    PXENDISK_FDO        Fdo = Context;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
+
+    if (Irp->PendingReturned)
+        IoMarkIrpPending(Irp);
+
+    IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+
+    return STATUS_SUCCESS;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+FdoQueryStopDevice(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PIRP            Irp
+    )
+{
+    NTSTATUS            status;
+
+    status = IoAcquireRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    __FdoSetDevicePnpState(Fdo, StopPending);
+    Irp->IoStatus.Status = STATUS_SUCCESS;
+
+    IoCopyCurrentIrpStackLocationToNext(Irp);
+    IoSetCompletionRoutine(Irp,
+                           __FdoQueryStopDevice,
+                           Fdo,
+                           TRUE,
+                           TRUE,
+                           TRUE);
+
+    status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
+
+    return status;
+
+fail1:
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
+static NTSTATUS
+__FdoCancelStopDevice(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
+    )
+{
+    PXENDISK_FDO        Fdo = Context;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
+
+    if (Irp->PendingReturned)
+        IoMarkIrpPending(Irp);
+
+    IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+
+    return STATUS_SUCCESS;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+FdoCancelStopDevice(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PIRP            Irp
+    )
+{
+    NTSTATUS            status;
+
+    status = IoAcquireRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    Irp->IoStatus.Status = STATUS_SUCCESS;
+
+    __FdoRestoreDevicePnpState(Fdo, StopPending);
+
+    IoCopyCurrentIrpStackLocationToNext(Irp);
+    IoSetCompletionRoutine(Irp,
+                           __FdoCancelStopDevice,
+                           Fdo,
+                           TRUE,
+                           TRUE,
+                           TRUE);
+
+    status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
+
+    return status;
+
+fail1:
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
+static NTSTATUS
+__FdoStopDevice(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
+    )
+{
+    PXENDISK_FDO        Fdo = Context;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
+
+    if (Irp->PendingReturned)
+        IoMarkIrpPending(Irp);
+
+    IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+
+    return STATUS_SUCCESS;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+FdoStopDevice(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PIRP            Irp
+    )
+{
+    POWER_STATE         PowerState;
+    NTSTATUS            status;
+
+    status = IoAcquireRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    if (__FdoGetDevicePowerState(Fdo) != PowerDeviceD0)
+        goto done;
+
+    PowerState.DeviceState = PowerDeviceD3;
+    PoSetPowerState(Fdo->Dx->DeviceObject,
+                    DevicePowerState,
+                    PowerState);
+
+    __FdoSetDevicePowerState(Fdo, PowerDeviceD3);
+    __FdoSetSystemPowerState(Fdo, PowerSystemShutdown);
+
+done:
+    __FdoSetDevicePnpState(Fdo, Stopped);
+    Irp->IoStatus.Status = STATUS_SUCCESS;
+
+    IoCopyCurrentIrpStackLocationToNext(Irp);
+    IoSetCompletionRoutine(Irp,
+                           __FdoStopDevice,
+                           Fdo,
+                           TRUE,
+                           TRUE,
+                           TRUE);
+
+    status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
+
+    return status;
+
+fail1:
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
+static NTSTATUS
+__FdoQueryRemoveDevice(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
+    )
+{
+    PXENDISK_FDO        Fdo = Context;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
+
+    if (Irp->PendingReturned)
+        IoMarkIrpPending(Irp);
+
+    IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+
+    return STATUS_SUCCESS;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+FdoQueryRemoveDevice(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PIRP            Irp
+    )
+{
+    NTSTATUS            status;
+
+    status = IoAcquireRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    __FdoSetDevicePnpState(Fdo, RemovePending);
+    Irp->IoStatus.Status = STATUS_SUCCESS;
+
+    IoCopyCurrentIrpStackLocationToNext(Irp);
+    IoSetCompletionRoutine(Irp,
+                           __FdoQueryRemoveDevice,
+                           Fdo,
+                           TRUE,
+                           TRUE,
+                           TRUE);
+
+    status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
+
+    return status;
+
+fail1:
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
+static NTSTATUS
+__FdoCancelRemoveDevice(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
+    )
+{
+    PXENDISK_FDO        Fdo = Context;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
+
+    if (Irp->PendingReturned)
+        IoMarkIrpPending(Irp);
+
+    IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+
+    return STATUS_SUCCESS;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+FdoCancelRemoveDevice(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PIRP            Irp
+    )
+{
+    NTSTATUS            status;
+
+    status = IoAcquireRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    __FdoRestoreDevicePnpState(Fdo, RemovePending);
+    Irp->IoStatus.Status = STATUS_SUCCESS;
+
+    IoCopyCurrentIrpStackLocationToNext(Irp);
+    IoSetCompletionRoutine(Irp,
+                           __FdoCancelRemoveDevice,
+                           Fdo,
+                           TRUE,
+                           TRUE,
+                           TRUE);
+
+    status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
+
+    return status;
+
+fail1:
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
+static NTSTATUS
+__FdoSurpriseRemoval(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
+    )
+{
+    PXENDISK_FDO        Fdo = Context;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
+
+    if (Irp->PendingReturned)
+        IoMarkIrpPending(Irp);
+
+    IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+
+    return STATUS_SUCCESS;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+FdoSurpriseRemoval(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PIRP            Irp
+    )
+{
+    NTSTATUS            status;
+
+    status = IoAcquireRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    __FdoSetDevicePnpState(Fdo, SurpriseRemovePending);
+    Irp->IoStatus.Status = STATUS_SUCCESS;
+
+    IoCopyCurrentIrpStackLocationToNext(Irp);
+    IoSetCompletionRoutine(Irp,
+                           __FdoSurpriseRemoval,
+                           Fdo,
+                           TRUE,
+                           TRUE,
+                           TRUE);
+
+    status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
+
+    return status;
+
+fail1:
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+FdoRemoveDevice(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PIRP            Irp
+    )
+{
+    POWER_STATE         PowerState;
+    NTSTATUS            status;
+
+    status = IoAcquireRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    if (__FdoGetDevicePowerState(Fdo) != PowerDeviceD0)
+        goto done;
+
+    PowerState.DeviceState = PowerDeviceD3;
+    PoSetPowerState(Fdo->Dx->DeviceObject,
+                    DevicePowerState,
+                    PowerState);
+
+    __FdoSetDevicePowerState(Fdo, PowerDeviceD3);
+    __FdoSetSystemPowerState(Fdo, PowerSystemShutdown);
+
+done:
+    __FdoSetDevicePnpState(Fdo, Deleted);
+
+    IoReleaseRemoveLockAndWait(&Fdo->Dx->RemoveLock, Irp);
+
+    status = FdoForwardIrpSynchronously(Fdo, Irp);
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    AcquireMutex(&Fdo->Mutex);
+    ASSERT3U(Fdo->References, !=, 0);
+    --Fdo->References;
+    ReleaseMutex(&Fdo->Mutex);
+
+    if (Fdo->References == 0)
+        FdoDestroy(Fdo);
+
+    return status;
+
+fail1:
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
+static NTSTATUS
+__FdoQueryDeviceRelations(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
+    )
+{
+    PKEVENT             Event = Context;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
+    UNREFERENCED_PARAMETER(Irp);
+
+    KeSetEvent(Event, IO_NO_INCREMENT, FALSE);
+
+    return STATUS_MORE_PROCESSING_REQUIRED;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+FdoQueryDeviceRelations(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PIRP            Irp
+    )
+{
+    KEVENT              Event;
+    PIO_STACK_LOCATION  StackLocation;
+    ULONG               Size;
+    PDEVICE_RELATIONS   Relations;
+    PLIST_ENTRY         ListEntry;
+    ULONG               Count;
+    NTSTATUS            status;
+
+    status = IoAcquireRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    KeInitializeEvent(&Event, NotificationEvent, FALSE);
+
+    IoCopyCurrentIrpStackLocationToNext(Irp);
+    IoSetCompletionRoutine(Irp,
+                           __FdoQueryDeviceRelations,
+                           &Event,
+                           TRUE,
+                           TRUE,
+                           TRUE);
+
+    status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
+    if (status == STATUS_PENDING) {
+        (VOID) KeWaitForSingleObject(&Event,
+                                     Executive,
+                                     KernelMode,
+                                     FALSE,
+                                     NULL);
+        status = Irp->IoStatus.Status;
+    } else {
+        ASSERT3U(status, ==, Irp->IoStatus.Status);
+    }
+
+    if (!NT_SUCCESS(status))
+        goto fail2;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    if (StackLocation->Parameters.QueryDeviceRelations.Type != BusRelations)
+        goto done;
+
+    Relations = (PDEVICE_RELATIONS)Irp->IoStatus.Information;
+
+    if (Relations->Count != 0)
+        __FdoEnumerate(Fdo, Relations);
+
+    ExFreePool(Relations);
+
+    AcquireMutex(&Fdo->Mutex);
+
+    Count = 0;
+    for (ListEntry = Fdo->Dx->ListEntry.Flink;
+         ListEntry != &Fdo->Dx->ListEntry;
+         ListEntry = ListEntry->Flink)
+        Count++;
+
+    Size = FIELD_OFFSET(DEVICE_RELATIONS, Objects) + (sizeof (DEVICE_OBJECT) * __min(Count, 1));
+
+    Relations = ExAllocatePoolWithTag(PagedPool, Size, 'TLIF');
+
+    status = STATUS_NO_MEMORY;
+    if (Relations == NULL)
+        goto fail3;
+
+    RtlZeroMemory(Relations, Size);
+
+    for (ListEntry = Fdo->Dx->ListEntry.Flink;
+         ListEntry != &Fdo->Dx->ListEntry;
+         ListEntry = ListEntry->Flink) {
+        PXENDISK_DX     Dx = CONTAINING_RECORD(ListEntry, XENDISK_DX, ListEntry);
+        PXENDISK_PDO    Pdo = Dx->Pdo;
+
+        ASSERT3U(Dx->Type, ==, PHYSICAL_DEVICE_OBJECT);
+
+        if (PdoGetDevicePnpState(Pdo) == Present)
+            PdoSetDevicePnpState(Pdo, Enumerated);
+
+        ObReferenceObject(PdoGetPhysicalDeviceObject(Pdo));
+        Relations->Objects[Relations->Count++] = PdoGetPhysicalDeviceObject(Pdo);
+    }
+
+    ASSERT3U(Relations->Count, ==, Count);
+
+    Trace("%d PDO(s)\n", Relations->Count);
+
+    ReleaseMutex(&Fdo->Mutex);
+
+    Irp->IoStatus.Information = (ULONG_PTR)Relations;
+    status = STATUS_SUCCESS;
+
+done:
+    IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+
+fail3:
+    ReleaseMutex(&Fdo->Mutex);
+
+fail2:
+    IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+
+fail1:
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
+static NTSTATUS
+__FdoDispatchPnp(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
+    )
+{
+    PXENDISK_FDO        Fdo = Context;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
+
+    if (Irp->PendingReturned)
+        IoMarkIrpPending(Irp);
+
+    IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+    return STATUS_SUCCESS;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+FdoDispatchPnp(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    UCHAR               MinorFunction;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    MinorFunction = StackLocation->MinorFunction;
+
+    switch (StackLocation->MinorFunction) {
+    case IRP_MN_START_DEVICE:
+        status = FdoStartDevice(Fdo, Irp);
+        break;
+
+    case IRP_MN_QUERY_STOP_DEVICE:
+        status = FdoQueryStopDevice(Fdo, Irp);
+        break;
+
+    case IRP_MN_CANCEL_STOP_DEVICE:
+        status = FdoCancelStopDevice(Fdo, Irp);
+        break;
+
+    case IRP_MN_STOP_DEVICE:
+        status = FdoStopDevice(Fdo, Irp);
+        break;
+
+    case IRP_MN_QUERY_REMOVE_DEVICE:
+        status = FdoQueryRemoveDevice(Fdo, Irp);
+        break;
+
+    case IRP_MN_SURPRISE_REMOVAL:
+        status = FdoSurpriseRemoval(Fdo, Irp);
+        break;
+
+    case IRP_MN_REMOVE_DEVICE:
+        status = FdoRemoveDevice(Fdo, Irp);
+        break;
+
+    case IRP_MN_CANCEL_REMOVE_DEVICE:
+        status = FdoCancelRemoveDevice(Fdo, Irp);
+        break;
+
+    case IRP_MN_QUERY_DEVICE_RELATIONS:
+        status = FdoQueryDeviceRelations(Fdo, Irp);
+        break;
+
+    default:
+        status = IoAcquireRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+        if (!NT_SUCCESS(status))
+            goto fail1;
+
+        IoCopyCurrentIrpStackLocationToNext(Irp);
+        IoSetCompletionRoutine(Irp,
+                               __FdoDispatchPnp,
+                               Fdo,
+                               TRUE,
+                               TRUE,
+                               TRUE);
+
+        status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
+        break;
+    }
+
+    return status;
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__FdoSetDevicePowerUp(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    DEVICE_POWER_STATE  DeviceState;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
+
+    ASSERT3U(DeviceState, <,  __FdoGetDevicePowerState(Fdo));
+
+    status = FdoForwardIrpSynchronously(Fdo, Irp);
+    if (!NT_SUCCESS(status))
+        goto done;
+
+    Verbose("%p: %s -> %s\n",
+         Fdo->Dx->DeviceObject,
+         PowerDeviceStateName(__FdoGetDevicePowerState(Fdo)),
+         PowerDeviceStateName(DeviceState));
+
+    __FdoSetDevicePowerState(Fdo, DeviceState);
+
+done:
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__FdoSetDevicePowerDown(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    DEVICE_POWER_STATE  DeviceState;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
+
+    ASSERT3U(DeviceState, >,  __FdoGetDevicePowerState(Fdo));
+
+    Verbose("%p: %s -> %s\n",
+         Fdo->Dx->DeviceObject,
+         PowerDeviceStateName(__FdoGetDevicePowerState(Fdo)),
+         PowerDeviceStateName(DeviceState));
+
+    __FdoSetDevicePowerState(Fdo, DeviceState);
+
+    status = FdoForwardIrpSynchronously(Fdo, Irp);
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__FdoSetDevicePower(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    DEVICE_POWER_STATE  DeviceState;
+    POWER_ACTION        PowerAction;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
+    PowerAction = StackLocation->Parameters.Power.ShutdownType;
+
+    Trace("====> (%s:%s)\n",
+          PowerDeviceStateName(DeviceState), 
+          PowerActionName(PowerAction));
+
+    if (DeviceState == __FdoGetDevicePowerState(Fdo)) {
+        status = FdoForwardIrpSynchronously(Fdo, Irp);
+        IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+        goto done;
+    }
+
+    status = (DeviceState < __FdoGetDevicePowerState(Fdo)) ?
+             __FdoSetDevicePowerUp(Fdo, Irp) :
+             __FdoSetDevicePowerDown(Fdo, Irp);
+
+done:
+    Trace("<==== (%s:%s)(%08x)\n",
+          PowerDeviceStateName(DeviceState), 
+          PowerActionName(PowerAction),
+          status);
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__FdoSetSystemPowerUp(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    SYSTEM_POWER_STATE  SystemState;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    SystemState = StackLocation->Parameters.Power.State.SystemState;
+
+    ASSERT3U(SystemState, <,  __FdoGetSystemPowerState(Fdo));
+
+    status = FdoForwardIrpSynchronously(Fdo, Irp);
+    if (!NT_SUCCESS(status))
+        goto done;
+
+    Verbose("%p: %s -> %s\n",
+         Fdo->Dx->DeviceObject,
+         PowerSystemStateName(__FdoGetSystemPowerState(Fdo)),
+         PowerSystemStateName(SystemState));
+
+    __FdoSetSystemPowerState(Fdo, SystemState);
+
+done:
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__FdoSetSystemPowerDown(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    SYSTEM_POWER_STATE  SystemState;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    SystemState = StackLocation->Parameters.Power.State.SystemState;
+
+    ASSERT3U(SystemState, >,  __FdoGetSystemPowerState(Fdo));
+
+    Verbose("%p: %s -> %s\n",
+         Fdo->Dx->DeviceObject,
+         PowerSystemStateName(__FdoGetSystemPowerState(Fdo)),
+         PowerSystemStateName(SystemState));
+
+    __FdoSetSystemPowerState(Fdo, SystemState);
+
+    status = FdoForwardIrpSynchronously(Fdo, Irp);
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__FdoSetSystemPower(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    SYSTEM_POWER_STATE  SystemState;
+    POWER_ACTION        PowerAction;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    SystemState = StackLocation->Parameters.Power.State.SystemState;
+    PowerAction = StackLocation->Parameters.Power.ShutdownType;
+
+    Trace("====> (%s:%s)\n",
+          PowerSystemStateName(SystemState), 
+          PowerActionName(PowerAction));
+
+    if (SystemState == __FdoGetSystemPowerState(Fdo)) {
+        status = FdoForwardIrpSynchronously(Fdo, Irp);
+        IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+        goto done;
+    }
+
+    status = (SystemState < __FdoGetSystemPowerState(Fdo)) ?
+             __FdoSetSystemPowerUp(Fdo, Irp) :
+             __FdoSetSystemPowerDown(Fdo, Irp);
+
+done:
+    Trace("<==== (%s:%s)(%08x)\n",
+          PowerSystemStateName(SystemState), 
+          PowerActionName(PowerAction),
+          status);
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__FdoQueryDevicePowerUp(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    DEVICE_POWER_STATE  DeviceState;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
+
+    ASSERT3U(DeviceState, <,  __FdoGetDevicePowerState(Fdo));
+
+    status = FdoForwardIrpSynchronously(Fdo, Irp);
+
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__FdoQueryDevicePowerDown(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    DEVICE_POWER_STATE  DeviceState;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
+
+    ASSERT3U(DeviceState, >,  __FdoGetDevicePowerState(Fdo));
+
+    status = FdoForwardIrpSynchronously(Fdo, Irp);
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__FdoQueryDevicePower(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    DEVICE_POWER_STATE  DeviceState;
+    POWER_ACTION        PowerAction;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
+    PowerAction = StackLocation->Parameters.Power.ShutdownType;
+
+    Trace("====> (%s:%s)\n",
+          PowerDeviceStateName(DeviceState), 
+          PowerActionName(PowerAction));
+
+    if (DeviceState == __FdoGetDevicePowerState(Fdo)) {
+        status = FdoForwardIrpSynchronously(Fdo, Irp);
+        IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+        goto done;
+    }
+
+    status = (DeviceState < __FdoGetDevicePowerState(Fdo)) ?
+             __FdoQueryDevicePowerUp(Fdo, Irp) :
+             __FdoQueryDevicePowerDown(Fdo, Irp);
+
+done:
+    Trace("<==== (%s:%s)(%08x)\n",
+          PowerDeviceStateName(DeviceState), 
+          PowerActionName(PowerAction),
+          status);
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__FdoQuerySystemPowerUp(
+    IN  PXENDISK_FDO     Fdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    SYSTEM_POWER_STATE  SystemState;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    SystemState = StackLocation->Parameters.Power.State.SystemState;
+
+    ASSERT3U(SystemState, <,  __FdoGetSystemPowerState(Fdo));
+
+    status = FdoForwardIrpSynchronously(Fdo, Irp);
+
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__FdoQuerySystemPowerDown(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    SYSTEM_POWER_STATE  SystemState;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    SystemState = StackLocation->Parameters.Power.State.SystemState;
+
+    ASSERT3U(SystemState, >,  __FdoGetSystemPowerState(Fdo));
+
+    status = FdoForwardIrpSynchronously(Fdo, Irp);
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__FdoQuerySystemPower(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    SYSTEM_POWER_STATE  SystemState;
+    POWER_ACTION        PowerAction;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    SystemState = StackLocation->Parameters.Power.State.SystemState;
+    PowerAction = StackLocation->Parameters.Power.ShutdownType;
+
+    Trace("====> (%s:%s)\n",
+          PowerSystemStateName(SystemState), 
+          PowerActionName(PowerAction));
+
+    if (SystemState == __FdoGetSystemPowerState(Fdo)) {
+        status = FdoForwardIrpSynchronously(Fdo, Irp);
+        IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+        goto done;
+    }
+
+    status = (SystemState < __FdoGetSystemPowerState(Fdo)) ?
+             __FdoQuerySystemPowerUp(Fdo, Irp) :
+             __FdoQuerySystemPowerDown(Fdo, Irp);
+
+done:
+    Trace("<==== (%s:%s)(%08x)\n",
+          PowerSystemStateName(SystemState), 
+          PowerActionName(PowerAction),
+          status);
+
+    return status;
+}
+
+static NTSTATUS
+FdoDevicePower(
+    IN  PXENDISK_THREAD Self,
+    IN  PVOID           Context
+    )
+{
+    PXENDISK_FDO        Fdo = Context;
+    PKEVENT             Event;
+
+    Event = ThreadGetEvent(Self);
+
+    for (;;) {
+        PIRP                Irp;
+        PIO_STACK_LOCATION  StackLocation;
+        UCHAR               MinorFunction;
+
+        if (Fdo->DevicePowerIrp == NULL) {
+            (VOID) KeWaitForSingleObject(Event,
+                                         Executive,
+                                         KernelMode,
+                                         FALSE,
+                                         NULL);
+            KeClearEvent(Event);
+        }
+
+        if (ThreadIsAlerted(Self))
+            break;
+
+        Irp = Fdo->DevicePowerIrp;
+
+        if (Irp == NULL)
+            continue;
+
+        Fdo->DevicePowerIrp = NULL;
+        KeMemoryBarrier();
+
+        StackLocation = IoGetCurrentIrpStackLocation(Irp);
+        MinorFunction = StackLocation->MinorFunction;
+
+        switch (StackLocation->MinorFunction) {
+        case IRP_MN_SET_POWER:
+            (VOID) __FdoSetDevicePower(Fdo, Irp);
+            break;
+
+        case IRP_MN_QUERY_POWER:
+            (VOID) __FdoQueryDevicePower(Fdo, Irp);
+            break;
+
+        default:
+            ASSERT(FALSE);
+            break;
+        }
+
+        IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+    }
+
+    return STATUS_SUCCESS;
+}
+
+static NTSTATUS
+FdoSystemPower(
+    IN  PXENDISK_THREAD Self,
+    IN  PVOID           Context
+    )
+{
+    PXENDISK_FDO        Fdo = Context;
+    PKEVENT             Event;
+
+    Event = ThreadGetEvent(Self);
+
+    for (;;) {
+        PIRP                Irp;
+        PIO_STACK_LOCATION  StackLocation;
+        UCHAR               MinorFunction;
+
+        if (Fdo->SystemPowerIrp == NULL) {
+            (VOID) KeWaitForSingleObject(Event,
+                                         Executive,
+                                         KernelMode,
+                                         FALSE,
+                                         NULL);
+            KeClearEvent(Event);
+        }
+
+        if (ThreadIsAlerted(Self))
+            break;
+
+        Irp = Fdo->SystemPowerIrp;
+
+        if (Irp == NULL)
+            continue;
+
+        Fdo->SystemPowerIrp = NULL;
+        KeMemoryBarrier();
+
+        StackLocation = IoGetCurrentIrpStackLocation(Irp);
+        MinorFunction = StackLocation->MinorFunction;
+
+        switch (StackLocation->MinorFunction) {
+        case IRP_MN_SET_POWER:
+            (VOID) __FdoSetSystemPower(Fdo, Irp);
+            break;
+
+        case IRP_MN_QUERY_POWER:
+            (VOID) __FdoQuerySystemPower(Fdo, Irp);
+            break;
+
+        default:
+            ASSERT(FALSE);
+            break;
+        }
+
+        IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+    }
+
+    return STATUS_SUCCESS;
+}
+
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
+static NTSTATUS
+__FdoDispatchPower(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
+    )
+{
+    PXENDISK_FDO        Fdo = Context;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
+
+    if (Irp->PendingReturned)
+        IoMarkIrpPending(Irp);
+
+    IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+    return STATUS_SUCCESS;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+FdoDispatchPower(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    UCHAR               MinorFunction;
+    POWER_STATE_TYPE    PowerType;
+    NTSTATUS            status;
+
+    status = IoAcquireRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    MinorFunction = StackLocation->MinorFunction;
+
+    if (MinorFunction != IRP_MN_QUERY_POWER &&
+        MinorFunction != IRP_MN_SET_POWER) {
+        IoCopyCurrentIrpStackLocationToNext(Irp);
+        IoSetCompletionRoutine(Irp,
+                               __FdoDispatchPower,
+                               Fdo,
+                               TRUE,
+                               TRUE,
+                               TRUE);
+
+        status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
+
+        goto done;
+    }
+
+    PowerType = StackLocation->Parameters.Power.Type;
+
+    Trace("====> (%02x:%s)\n",
+          MinorFunction, 
+          PowerMinorFunctionName(MinorFunction)); 
+
+    switch (PowerType) {
+    case DevicePowerState:
+        IoMarkIrpPending(Irp);
+
+        ASSERT3P(Fdo->DevicePowerIrp, ==, NULL);
+        Fdo->DevicePowerIrp = Irp;
+        KeMemoryBarrier();
+
+        ThreadWake(Fdo->DevicePowerThread);
+
+        status = STATUS_PENDING;
+        break;
+
+    case SystemPowerState:
+        IoMarkIrpPending(Irp);
+
+        ASSERT3P(Fdo->SystemPowerIrp, ==, NULL);
+        Fdo->SystemPowerIrp = Irp;
+        KeMemoryBarrier();
+
+        ThreadWake(Fdo->SystemPowerThread);
+
+        status = STATUS_PENDING;
+        break;
+
+    default:
+        IoCopyCurrentIrpStackLocationToNext(Irp);
+        IoSetCompletionRoutine(Irp,
+                               __FdoDispatchPower,
+                               Fdo,
+                               TRUE,
+                               TRUE,
+                               TRUE);
+
+        status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
+        break;
+    }
+
+    Trace("<==== (%02x:%s) (%08x)\n",
+          MinorFunction, 
+          PowerMinorFunctionName(MinorFunction),
+          status);
+
+done:
+    return status;
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
+static NTSTATUS
+__FdoDispatchDefault(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
+    )
+{
+    PXENDISK_FDO        Fdo = Context;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
+
+    if (Irp->PendingReturned)
+        IoMarkIrpPending(Irp);
+
+    IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+
+    return STATUS_SUCCESS;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+FdoDispatchDefault(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PIRP            Irp
+    )
+{
+    NTSTATUS            status;
+
+    status = IoAcquireRemoveLock(&Fdo->Dx->RemoveLock, Irp);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    IoCopyCurrentIrpStackLocationToNext(Irp);
+    IoSetCompletionRoutine(Irp,
+                           __FdoDispatchDefault,
+                           Fdo,
+                           TRUE,
+                           TRUE,
+                           TRUE);
+
+    status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
+
+    return status;
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+NTSTATUS
+FdoDispatch(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+
+    switch (StackLocation->MajorFunction) {
+    case IRP_MJ_PNP:
+        status = FdoDispatchPnp(Fdo, Irp);
+        break;
+
+    case IRP_MJ_POWER:
+        status = FdoDispatchPower(Fdo, Irp);
+        break;
+
+    default:
+        status = FdoDispatchDefault(Fdo, Irp);
+        break;
+    }
+
+    return status;
+}
+
+NTSTATUS
+FdoCreate(
+    IN  PDEVICE_OBJECT  PhysicalDeviceObject
+    )
+{
+    PDEVICE_OBJECT      LowerDeviceObject;
+    ULONG               DeviceType;
+    PDEVICE_OBJECT      FilterDeviceObject;
+    PXENDISK_DX         Dx;
+    PXENDISK_FDO        Fdo;
+    NTSTATUS            status;
+
+    LowerDeviceObject = IoGetAttachedDeviceReference(PhysicalDeviceObject);
+    DeviceType = LowerDeviceObject->DeviceType;
+    ObDereferenceObject(LowerDeviceObject);
+
+#pragma prefast(suppress:28197) // Possibly leaking memory 'FilterDeviceObject'
+    status = IoCreateDevice(DriverGetDriverObject(),
+                            sizeof (XENDISK_DX),
+                            NULL,
+                            DeviceType,
+                            FILE_DEVICE_SECURE_OPEN,
+                            FALSE,
+                            &FilterDeviceObject);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    Dx = (PXENDISK_DX)FilterDeviceObject->DeviceExtension;
+    RtlZeroMemory(Dx, sizeof (XENDISK_DX));
+
+    Dx->Type = FUNCTION_DEVICE_OBJECT;
+    Dx->DeviceObject = FilterDeviceObject;
+    Dx->DevicePnpState = Added;
+    Dx->SystemPowerState = PowerSystemShutdown;
+    Dx->DevicePowerState = PowerDeviceD3;
+
+    IoInitializeRemoveLock(&Dx->RemoveLock, FDO_TAG, 0, 0);
+
+    Fdo = __FdoAllocate(sizeof (XENDISK_FDO));
+
+    status = STATUS_NO_MEMORY;
+    if (Fdo == NULL)
+        goto fail2;
+
+    LowerDeviceObject = IoAttachDeviceToDeviceStack(FilterDeviceObject,
+                                                    PhysicalDeviceObject);
+
+    status = STATUS_UNSUCCESSFUL;
+    if (LowerDeviceObject == NULL)
+        goto fail3;
+
+    Fdo->Dx = Dx;
+    Fdo->PhysicalDeviceObject = PhysicalDeviceObject;
+    Fdo->LowerDeviceObject = LowerDeviceObject;
+
+    status = ThreadCreate(FdoSystemPower, Fdo, &Fdo->SystemPowerThread);
+    if (!NT_SUCCESS(status))
+        goto fail4;
+
+    status = ThreadCreate(FdoDevicePower, Fdo, &Fdo->DevicePowerThread);
+    if (!NT_SUCCESS(status))
+        goto fail5;
+
+    InitializeMutex(&Fdo->Mutex);
+    InitializeListHead(&Dx->ListEntry);
+    Fdo->References = 1;
+
+    Verbose("%p\n", FilterDeviceObject);
+
+    Dx->Fdo = Fdo;
+
+#pragma prefast(suppress:28182)  // Dereferencing NULL pointer
+    FilterDeviceObject->DeviceType = LowerDeviceObject->DeviceType;
+    FilterDeviceObject->Characteristics = LowerDeviceObject->Characteristics;
+
+    FilterDeviceObject->Flags |= LowerDeviceObject->Flags;
+    FilterDeviceObject->Flags &= ~DO_DEVICE_INITIALIZING;
+
+    return STATUS_SUCCESS;
+
+fail5:
+    Error("fail5\n");
+
+    ThreadAlert(Fdo->SystemPowerThread);
+    ThreadJoin(Fdo->SystemPowerThread);
+    Fdo->SystemPowerThread = NULL;
+
+fail4:
+    Error("fail4\n");
+
+    Fdo->PhysicalDeviceObject = NULL;
+    Fdo->LowerDeviceObject = NULL;
+    Fdo->Dx = NULL;
+
+    IoDetachDevice(LowerDeviceObject);
+
+fail3:
+    Error("fail3\n");
+
+    ASSERT(IsZeroMemory(Fdo, sizeof (XENDISK_FDO)));
+    __FdoFree(Fdo);
+
+fail2:
+    Error("fail2\n");
+
+    IoDeleteDevice(FilterDeviceObject);
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return status;
+}
+
+VOID
+FdoDestroy(
+    IN  PXENDISK_FDO    Fdo
+    )
+{
+    PDEVICE_OBJECT      LowerDeviceObject = Fdo->LowerDeviceObject;
+    PXENDISK_DX         Dx = Fdo->Dx;
+    PDEVICE_OBJECT      FilterDeviceObject = Dx->DeviceObject;
+
+    ASSERT(IsListEmpty(&Dx->ListEntry));
+    ASSERT3U(Fdo->References, ==, 0);
+    ASSERT3U(__FdoGetDevicePnpState(Fdo), ==, Deleted);
+
+    Dx->Fdo = NULL;
+
+    RtlZeroMemory(&Fdo->Mutex, sizeof (MUTEX));
+
+    ThreadAlert(Fdo->DevicePowerThread);
+    ThreadJoin(Fdo->DevicePowerThread);
+    Fdo->DevicePowerThread = NULL;
+
+    ThreadAlert(Fdo->SystemPowerThread);
+    ThreadJoin(Fdo->SystemPowerThread);
+    Fdo->SystemPowerThread = NULL;
+
+    Fdo->LowerDeviceObject = NULL;
+    Fdo->PhysicalDeviceObject = NULL;
+    Fdo->Dx = NULL;
+
+    IoDetachDevice(LowerDeviceObject);
+
+    ASSERT(IsZeroMemory(Fdo, sizeof (XENDISK_FDO)));
+    __FdoFree(Fdo);
+
+    IoDeleteDevice(FilterDeviceObject);
+}
diff --git a/src/xendisk/fdo.h b/src/xendisk/fdo.h
new file mode 100644
index 0000000..8aa0529
--- /dev/null
+++ b/src/xendisk/fdo.h
@@ -0,0 +1,78 @@
+/* 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 _XENDISK_FDO_H
+#define _XENDISK_FDO_H
+
+#include <ntddk.h>
+#include "types.h"
+
+typedef struct _XENDISK_FDO XENDISK_FDO, *PXENDISK_FDO;
+
+extern VOID
+FdoAddPhysicalDeviceObject(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PDEVICE_OBJECT  DeviceObject
+    );
+
+extern VOID
+FdoRemovePhysicalDeviceObject(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PDEVICE_OBJECT  DeviceObject
+    );
+
+extern VOID
+FdoAcquireMutex(
+    IN  PXENDISK_FDO     Fdo
+    );
+
+extern VOID
+FdoReleaseMutex(
+    IN  PXENDISK_FDO     Fdo
+    );
+
+extern NTSTATUS
+FdoDispatch(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PIRP            Irp
+    );
+
+extern NTSTATUS
+FdoCreate(
+    IN  PDEVICE_OBJECT  PhysicalDeviceObject
+    );
+
+extern VOID
+FdoDestroy(
+    IN  PXENDISK_FDO    Fdo
+    );
+
+#endif // _XENDISK_FDO_H
diff --git a/src/xendisk/mutex.h b/src/xendisk/mutex.h
new file mode 100644
index 0000000..bcc2414
--- /dev/null
+++ b/src/xendisk/mutex.h
@@ -0,0 +1,113 @@
+/* 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 _XENDISK_MUTEX_H
+#define _XENDISK_MUTEX_H
+
+#include <ntddk.h>
+
+#include "assert.h"
+
+typedef struct _MUTEX {
+    PKTHREAD    Owner;
+    KEVENT      Event;
+} MUTEX, *PMUTEX;
+
+static FORCEINLINE VOID
+InitializeMutex(
+    IN  PMUTEX  Mutex
+    )
+{
+    RtlZeroMemory(Mutex, sizeof (MUTEX));
+
+    KeInitializeEvent(&Mutex->Event, SynchronizationEvent, TRUE);
+}
+
+static FORCEINLINE BOOLEAN
+__drv_maxIRQL(PASSIVE_LEVEL)
+TryAcquireMutex(
+    IN  PMUTEX      Mutex
+    )
+{
+    LARGE_INTEGER   Timeout;
+    NTSTATUS        status;
+
+    Timeout.QuadPart = 0;
+
+    status = KeWaitForSingleObject(&Mutex->Event,
+                                   Executive,
+                                   KernelMode,
+                                   FALSE,
+                                   &Timeout);
+    if (status == STATUS_TIMEOUT)
+        return FALSE;
+
+    ASSERT(NT_SUCCESS(status));
+
+    ASSERT3P(Mutex->Owner, ==, NULL);
+    Mutex->Owner = KeGetCurrentThread();
+
+    return TRUE;
+}
+
+static FORCEINLINE VOID
+__drv_maxIRQL(PASSIVE_LEVEL)
+AcquireMutex(
+    IN  PMUTEX  Mutex
+    )
+{
+    NTSTATUS    status;
+
+    status = KeWaitForSingleObject(&Mutex->Event,
+                                   Executive,
+                                   KernelMode,
+                                   FALSE,
+                                   NULL);
+
+    ASSERT(NT_SUCCESS(status));
+
+    ASSERT3P(Mutex->Owner, ==, NULL);
+    Mutex->Owner = KeGetCurrentThread();
+}
+
+static FORCEINLINE VOID
+__drv_maxIRQL(PASSIVE_LEVEL)
+ReleaseMutex(
+    IN  PMUTEX  Mutex
+    )
+{
+    ASSERT3P(Mutex->Owner, ==, KeGetCurrentThread());
+    Mutex->Owner = NULL;
+
+    KeSetEvent(&Mutex->Event, IO_NO_INCREMENT, FALSE);
+}
+
+#endif  // _XENDISK_MUTEX_H
diff --git a/src/xendisk/pdo.c b/src/xendisk/pdo.c
new file mode 100644
index 0000000..3de958a
--- /dev/null
+++ b/src/xendisk/pdo.c
@@ -0,0 +1,2079 @@
+/* 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.
+ */ 
+
+#define INITGUID 1
+
+#include <ntddk.h>
+#include <wdmguid.h>
+#include <ntstrsafe.h>
+#include <stdlib.h>
+#include <storport.h>
+#include <Ntddstor.h>
+#include <Ntddscsi.h>
+#include <names.h>
+
+#include "fdo.h"
+#include "pdo.h"
+#include "driver.h"
+#include "thread.h"
+#include "debug.h"
+#include "assert.h"
+#include "util.h"
+
+#define PDO_TAG 'ODP'
+
+struct _XENDISK_PDO {
+    PXENDISK_DX                 Dx;
+    PDEVICE_OBJECT              LowerDeviceObject;
+    PDEVICE_OBJECT              PhysicalDeviceObject;
+
+    PXENDISK_THREAD             SystemPowerThread;
+    PIRP                        SystemPowerIrp;
+    PXENDISK_THREAD             DevicePowerThread;
+    PIRP                        DevicePowerIrp;
+
+    PXENDISK_FDO                Fdo;
+    BOOLEAN                     Missing;
+    const CHAR                  *Reason;
+
+    ULONG                       SectorSize;
+};
+
+static FORCEINLINE PVOID
+__PdoAllocate(
+    IN  ULONG   Length
+    )
+{
+    return __AllocateNonPagedPoolWithTag(__FUNCTION__, __LINE__, Length, PDO_TAG);
+}
+
+static FORCEINLINE VOID
+__PdoFree(
+    IN  PVOID   Buffer
+    )
+{
+    __FreePoolWithTag(Buffer, PDO_TAG);
+}
+
+static FORCEINLINE VOID
+__PdoSetDevicePnpState(
+    IN  PXENDISK_PDO        Pdo,
+    IN  DEVICE_PNP_STATE    State
+    )
+{
+    PXENDISK_DX             Dx = Pdo->Dx;
+
+    // We can never transition out of the deleted state
+    ASSERT(Dx->DevicePnpState != Deleted || State == Deleted);
+
+    Dx->PreviousDevicePnpState = Dx->DevicePnpState;
+    Dx->DevicePnpState = State;
+}
+
+VOID
+PdoSetDevicePnpState(
+    IN  PXENDISK_PDO        Pdo,
+    IN  DEVICE_PNP_STATE    State
+    )
+{
+    __PdoSetDevicePnpState(Pdo, State);
+}
+
+static FORCEINLINE VOID
+__PdoRestoreDevicePnpState(
+    IN  PXENDISK_PDO        Pdo,
+    IN  DEVICE_PNP_STATE    State
+    )
+{
+    PXENDISK_DX             Dx = Pdo->Dx;
+
+    if (Dx->DevicePnpState == State)
+        Dx->DevicePnpState = Dx->PreviousDevicePnpState;
+}
+
+static FORCEINLINE DEVICE_PNP_STATE
+__PdoGetDevicePnpState(
+    IN  PXENDISK_PDO    Pdo
+    )
+{
+    PXENDISK_DX         Dx = Pdo->Dx;
+
+    return Dx->DevicePnpState;
+}
+
+DEVICE_PNP_STATE
+PdoGetDevicePnpState(
+    IN  PXENDISK_PDO    Pdo
+    )
+{
+    return __PdoGetDevicePnpState(Pdo);
+}
+
+static FORCEINLINE VOID
+__PdoSetDevicePowerState(
+    IN  PXENDISK_PDO        Pdo,
+    IN  DEVICE_POWER_STATE  State
+    )
+{
+    PXENDISK_DX             Dx = Pdo->Dx;
+
+    Dx->DevicePowerState = State;
+}
+
+static FORCEINLINE DEVICE_POWER_STATE
+__PdoGetDevicePowerState(
+    IN  PXENDISK_PDO    Pdo
+    )
+{
+    PXENDISK_DX         Dx = Pdo->Dx;
+
+    return Dx->DevicePowerState;
+}
+
+static FORCEINLINE VOID
+__PdoSetSystemPowerState(
+    IN  PXENDISK_PDO        Pdo,
+    IN  SYSTEM_POWER_STATE  State
+    )
+{
+    PXENDISK_DX             Dx = Pdo->Dx;
+
+    Dx->SystemPowerState = State;
+}
+
+static FORCEINLINE SYSTEM_POWER_STATE
+__PdoGetSystemPowerState(
+    IN  PXENDISK_PDO    Pdo
+    )
+{
+    PXENDISK_DX         Dx = Pdo->Dx;
+
+    return Dx->SystemPowerState;
+}
+
+PDEVICE_OBJECT
+PdoGetPhysicalDeviceObject(
+    IN  PXENDISK_PDO    Pdo
+    )
+{
+    return Pdo->PhysicalDeviceObject;
+}
+
+static FORCEINLINE VOID
+__PdoSetMissing(
+    IN  PXENDISK_PDO    Pdo,
+    IN  const CHAR      *Reason
+    )
+{
+    Pdo->Reason = Reason;
+    Pdo->Missing = TRUE;
+}
+
+VOID
+PdoSetMissing(
+    IN  PXENDISK_PDO    Pdo,
+    IN  const CHAR      *Reason
+    )
+{
+    __PdoSetMissing(Pdo, Reason);
+}
+
+static FORCEINLINE BOOLEAN
+__PdoIsMissing(
+    IN  PXENDISK_PDO    Pdo
+    )
+{
+    return Pdo->Missing;
+}
+
+BOOLEAN
+PdoIsMissing(
+    IN  PXENDISK_PDO    Pdo
+    )
+{
+    return __PdoIsMissing(Pdo);
+}
+
+static FORCEINLINE VOID
+__PdoLink(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PXENDISK_FDO    Fdo
+    )
+{
+    Pdo->Fdo = Fdo;
+    FdoAddPhysicalDeviceObject(Fdo, Pdo->Dx->DeviceObject);
+}
+
+static FORCEINLINE VOID
+__PdoUnlink(
+    IN  PXENDISK_PDO    Pdo
+    )
+{
+    PXENDISK_FDO        Fdo = Pdo->Fdo;
+
+    ASSERT(Fdo != NULL);
+
+    FdoRemovePhysicalDeviceObject(Fdo, Pdo->Dx->DeviceObject);
+
+    Pdo->Fdo = NULL;
+}
+
+static FORCEINLINE PXENDISK_FDO
+__PdoGetFdo(
+    IN  PXENDISK_PDO Pdo
+    )
+{
+    return Pdo->Fdo;
+}
+
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
+static NTSTATUS
+__PdoForwardIrpSynchronously(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
+    )
+{
+    PKEVENT             Event = Context;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
+    UNREFERENCED_PARAMETER(Irp);
+
+    KeSetEvent(Event, IO_NO_INCREMENT, FALSE);
+
+    return STATUS_MORE_PROCESSING_REQUIRED;
+}
+
+static NTSTATUS
+PdoForwardIrpSynchronously(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    KEVENT              Event;
+    NTSTATUS            status;
+
+    ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
+
+    KeInitializeEvent(&Event, NotificationEvent, FALSE);
+
+    IoCopyCurrentIrpStackLocationToNext(Irp);
+    IoSetCompletionRoutine(Irp,
+                           __PdoForwardIrpSynchronously,
+                           &Event,
+                           TRUE,
+                           TRUE,
+                           TRUE);
+
+    status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
+    if (status == STATUS_PENDING) {
+        (VOID) KeWaitForSingleObject(&Event,
+                                     Executive,
+                                     KernelMode,
+                                     FALSE,
+                                     NULL);
+        status = Irp->IoStatus.Status;
+    } else {
+        ASSERT3U(status, ==, Irp->IoStatus.Status);
+    }
+
+    return status;
+}
+
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
+static NTSTATUS
+__PdoForwardIrpAndForget(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
+    )
+{
+    PXENDISK_PDO        Pdo = Context;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
+
+    if (Irp->PendingReturned)
+        IoMarkIrpPending(Irp);
+
+    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+
+    return STATUS_SUCCESS;
+}
+
+static NTSTATUS
+PdoForwardIrpAndForget(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    IoCopyCurrentIrpStackLocationToNext(Irp);
+    IoSetCompletionRoutine(Irp,
+                            __PdoForwardIrpAndForget,
+                            Pdo,
+                            TRUE,
+                            TRUE,
+                            TRUE);
+
+    return IoCallDriver(Pdo->LowerDeviceObject, Irp);
+}
+
+static NTSTATUS
+PdoCompleteIrp(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp,
+    IN  NTSTATUS        Status
+    )
+{
+    Irp->IoStatus.Status = Status;
+    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+    return Status;
+}
+
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
+static NTSTATUS
+__PdoQueryProperty(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
+    )
+{
+    PXENDISK_PDO        Pdo = Context;
+    PSTORAGE_ACCESS_ALIGNMENT_DESCRIPTOR    Descriptor = Irp->UserBuffer;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
+
+    if (Irp->PendingReturned)
+        IoMarkIrpPending(Irp);
+
+    if (!NT_SUCCESS(Irp->IoStatus.Status))
+        goto done;
+
+    Descriptor = Irp->UserBuffer;
+    Pdo->SectorSize = Descriptor->BytesPerLogicalSector;
+    Verbose("%p : %u bytes per sector\n", Pdo->Dx->DeviceObject, Pdo->SectorSize);
+
+done:
+    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+
+    return STATUS_SUCCESS;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+PdoQueryProperty(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    PSTORAGE_PROPERTY_QUERY Query;
+    PDEVICE_TRIM_DESCRIPTOR Trim;
+    NTSTATUS                status;
+
+    Query = Irp->AssociatedIrp.SystemBuffer;
+
+    switch (Query->PropertyId) {
+    case StorageAccessAlignmentProperty:
+        IoCopyCurrentIrpStackLocationToNext(Irp);
+        IoSetCompletionRoutine(Irp,
+                                __PdoQueryProperty,
+                                Pdo,
+                                TRUE,
+                                TRUE,
+                                TRUE);
+
+        status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
+        break;
+
+    case StorageDeviceTrimProperty:
+        Trim = Irp->AssociatedIrp.SystemBuffer;
+
+        Trim->Version = 0;
+        Trim->Size = sizeof(DEVICE_TRIM_DESCRIPTOR);
+        Trim->TrimEnabled = TRUE;
+
+        Irp->IoStatus.Information = (ULONG_PTR)sizeof(DEVICE_TRIM_DESCRIPTOR);
+        status = PdoCompleteIrp(Pdo, Irp, STATUS_SUCCESS);
+        break;
+
+    default:
+        status = PdoForwardIrpAndForget(Pdo, Irp);
+        break;
+    }
+
+    return status;
+}
+
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
+static NTSTATUS
+__PdoSendAwaitSrb(
+    IN  PDEVICE_OBJECT          DeviceObject,
+    IN  PIRP                    Irp,
+    IN  PVOID                   Context
+    )
+{
+    UNREFERENCED_PARAMETER(DeviceObject);
+    UNREFERENCED_PARAMETER(Context);
+
+    *(Irp->UserIosb) = Irp->IoStatus;
+
+    if (Irp->MdlAddress) {
+        MmUnlockPages(Irp->MdlAddress);
+        IoFreeMdl(Irp->MdlAddress);
+    }
+
+    KeSetEvent(Irp->UserEvent, IO_NO_INCREMENT, FALSE);
+
+    IoFreeIrp(Irp);
+    return STATUS_MORE_PROCESSING_REQUIRED;
+}
+
+static NTSTATUS
+PdoSendAwaitSrb(
+    IN  PXENDISK_PDO            Pdo,
+    IN  PSCSI_REQUEST_BLOCK     Srb
+    )
+{
+    PIRP                        Irp;
+    IO_STATUS_BLOCK             IoStatus;
+    KEVENT                      Event;
+    PIO_STACK_LOCATION          Stack;
+    NTSTATUS                    status;
+
+    KeInitializeEvent(&Event, NotificationEvent, FALSE);
+
+    status = STATUS_NO_MEMORY;
+    Irp = IoAllocateIrp((CCHAR)(Pdo->LowerDeviceObject->StackSize + 1), FALSE);
+    if (Irp == NULL)
+        goto fail1;
+
+    Stack = IoGetNextIrpStackLocation(Irp);
+    Stack->MajorFunction = IRP_MJ_SCSI;
+    Stack->Parameters.Scsi.Srb = Srb;
+
+    IoSetCompletionRoutine(Irp,
+                            __PdoSendAwaitSrb,
+                            Srb,
+                            TRUE,
+                            TRUE,
+                            TRUE);
+    Irp->UserIosb = &IoStatus;
+    Irp->UserEvent = &Event;
+
+    Irp->MdlAddress = IoAllocateMdl(Srb->DataBuffer,
+                                    Srb->DataTransferLength,
+                                    FALSE,
+                                    FALSE,
+                                    Irp);
+    if (Irp->MdlAddress == NULL)
+        goto fail2;
+
+#pragma warning(disable:6320)
+    try {
+        MmProbeAndLockPages(Irp->MdlAddress, KernelMode, IoReadAccess);
+    } except (EXCEPTION_EXECUTE_HANDLER) {
+        status = GetExceptionCode();
+
+        goto fail3;
+    }
+#pragma warning(default:6320)
+    
+    Srb->OriginalRequest = Irp;
+
+    status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
+    if (status == STATUS_PENDING) {
+        (VOID) KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, NULL);
+        status = IoStatus.Status;
+    }
+
+    return status;
+
+fail3:
+    Error("fail3\n");
+
+    IoFreeMdl(Irp->MdlAddress);
+
+fail2:
+    Error("fail2\n");
+
+    IoFreeIrp(Irp);
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return status;
+}
+
+static NTSTATUS
+PdoSendTrimSynchronous(
+    IN  PXENDISK_PDO            Pdo,
+    IN  PDEVICE_DATA_SET_RANGE  Ranges,
+    IN  ULONG                   Count
+    )
+{
+    SCSI_REQUEST_BLOCK          Srb;
+    PCDB                        Cdb;
+    PUNMAP_LIST_HEADER          Unmap;
+    ULONG                       Length;
+    ULONG                       Index;
+    NTSTATUS                    status;
+
+    Length = sizeof(UNMAP_LIST_HEADER) + 
+             (Count * sizeof(UNMAP_BLOCK_DESCRIPTOR));
+
+    status = STATUS_NO_MEMORY;
+    Unmap = __PdoAllocate(Length);
+    if (Unmap == NULL)
+        goto fail1;
+
+    RtlZeroMemory(&Srb, sizeof(SCSI_REQUEST_BLOCK));
+    Srb.Length = sizeof(SCSI_REQUEST_BLOCK);
+    Srb.SrbFlags = 0;
+    Srb.Function = SRB_FUNCTION_EXECUTE_SCSI;
+    Srb.DataBuffer = Unmap;
+    Srb.DataTransferLength = Length;
+    Srb.TimeOutValue = (ULONG)-1;
+    Srb.CdbLength = 10;
+
+    Cdb = (PCDB)&Srb.Cdb[0];
+    Cdb->UNMAP.OperationCode = SCSIOP_UNMAP;
+    *(PUSHORT)Cdb->UNMAP.AllocationLength = _byteswap_ushort((USHORT)Length);
+
+    *(PUSHORT)Unmap->DataLength = _byteswap_ushort((USHORT)Length);
+    *(PUSHORT)Unmap->BlockDescrDataLength = _byteswap_ushort((USHORT)sizeof(UNMAP_BLOCK_DESCRIPTOR));
+
+    for (Index = 0; Index < Count; ++Index) {
+        PUNMAP_BLOCK_DESCRIPTOR Block = &Unmap->Descriptors[Index];
+        PDEVICE_DATA_SET_RANGE  Range = &Ranges[Index];
+        
+        ULONG   LengthInSectors = (ULONG)(Range->LengthInBytes / Pdo->SectorSize);
+        ULONG64 OffsetInSectors = (ULONG64)(Range->StartingOffset / Pdo->SectorSize);
+
+        Trace("TRIM[%x] %x @ %llx\n",
+                        Index,
+                        LengthInSectors,
+                        OffsetInSectors);
+
+        *(PULONG64)Block->StartingLba = _byteswap_uint64(OffsetInSectors);
+        *(PULONG)Block->LbaCount = _byteswap_ulong(LengthInSectors);
+    }
+
+    status = PdoSendAwaitSrb(Pdo, &Srb);
+    if (!NT_SUCCESS(status))
+        goto fail2;
+
+    __PdoFree(Unmap);
+    return status;
+
+fail2:
+    Error("fail2\n");
+
+    __PdoFree(Unmap);
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return status;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+PdoManageDataSetAttributes(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    PDEVICE_MANAGE_DATA_SET_ATTRIBUTES  Attributes;
+    PDEVICE_DATA_SET_RANGE              Ranges;
+    ULONG                               NumRanges;
+    NTSTATUS                            status;
+
+    Attributes = Irp->AssociatedIrp.SystemBuffer;
+
+    switch (Attributes->Action) {
+    case DeviceDsmAction_Trim:
+        Ranges = (PDEVICE_DATA_SET_RANGE)((PUCHAR)Attributes + Attributes->DataSetRangesOffset);
+        NumRanges = Attributes->DataSetRangesLength / sizeof(DEVICE_DATA_SET_RANGE);
+
+        status = PdoSendTrimSynchronous(Pdo, Ranges, NumRanges);
+
+        status = PdoCompleteIrp(Pdo, Irp, status);
+        break;
+
+    default:
+        status = PdoForwardIrpAndForget(Pdo, Irp);
+        break;
+    }
+
+    return status;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+PdoDispatchControl(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    ULONG               ControlCode;
+    NTSTATUS            status;
+
+    status = IoAcquireRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    ControlCode = StackLocation->Parameters.DeviceIoControl.IoControlCode;
+
+    switch (ControlCode) {
+    case IOCTL_STORAGE_QUERY_PROPERTY:
+        status = PdoQueryProperty(Pdo, Irp);
+        break;
+
+    case IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES:
+        status = PdoManageDataSetAttributes(Pdo, Irp);
+        break;
+
+    default:
+        status = PdoForwardIrpAndForget(Pdo, Irp);
+        break;
+    }
+
+    return status;
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+PdoStartDevice(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    POWER_STATE         PowerState;
+    NTSTATUS            status;
+
+    status = IoAcquireRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    status = PdoForwardIrpSynchronously(Pdo, Irp);
+    if (!NT_SUCCESS(status))
+        goto fail2;
+
+    __PdoSetSystemPowerState(Pdo, PowerSystemWorking);
+    __PdoSetDevicePowerState(Pdo, PowerDeviceD0);
+
+    PowerState.DeviceState = PowerDeviceD0;
+    PoSetPowerState(Pdo->Dx->DeviceObject,
+                    DevicePowerState,
+                    PowerState);
+
+    __PdoSetDevicePnpState(Pdo, Started);
+
+    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+
+    Irp->IoStatus.Status = STATUS_SUCCESS;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return STATUS_SUCCESS;
+
+fail2:
+    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+
+fail1:
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
+static NTSTATUS
+__PdoQueryStopDevice(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
+    )
+{
+    PXENDISK_PDO        Pdo = Context;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
+
+    if (Irp->PendingReturned)
+        IoMarkIrpPending(Irp);
+
+    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+
+    return STATUS_SUCCESS;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+PdoQueryStopDevice(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    NTSTATUS            status;
+
+    status = IoAcquireRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    __PdoSetDevicePnpState(Pdo, StopPending);
+    Irp->IoStatus.Status = STATUS_SUCCESS;
+
+    IoCopyCurrentIrpStackLocationToNext(Irp);
+    IoSetCompletionRoutine(Irp,
+                           __PdoQueryStopDevice,
+                           Pdo,
+                           TRUE,
+                           TRUE,
+                           TRUE);
+
+    status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
+
+    return status;
+
+fail1:
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
+static NTSTATUS
+__PdoCancelStopDevice(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
+    )
+{
+    PXENDISK_PDO        Pdo = Context;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
+
+    if (Irp->PendingReturned)
+        IoMarkIrpPending(Irp);
+
+    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+
+    return STATUS_SUCCESS;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+PdoCancelStopDevice(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    NTSTATUS            status;
+
+    status = IoAcquireRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    Irp->IoStatus.Status = STATUS_SUCCESS;
+
+    __PdoRestoreDevicePnpState(Pdo, StopPending);
+
+    IoCopyCurrentIrpStackLocationToNext(Irp);
+    IoSetCompletionRoutine(Irp,
+                           __PdoCancelStopDevice,
+                           Pdo,
+                           TRUE,
+                           TRUE,
+                           TRUE);
+
+    status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
+
+    return status;
+
+fail1:
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
+static NTSTATUS
+__PdoStopDevice(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
+    )
+{
+    PXENDISK_PDO        Pdo = Context;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
+
+    if (Irp->PendingReturned)
+        IoMarkIrpPending(Irp);
+
+    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+
+    return STATUS_SUCCESS;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+PdoStopDevice(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    POWER_STATE         PowerState;
+    NTSTATUS            status;
+
+    status = IoAcquireRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    if (__PdoGetDevicePowerState(Pdo) != PowerDeviceD0)
+        goto done;
+
+    __PdoSetDevicePowerState(Pdo, PowerDeviceD3);
+    __PdoSetSystemPowerState(Pdo, PowerSystemShutdown);
+
+    PowerState.DeviceState = PowerDeviceD3;
+    PoSetPowerState(Pdo->Dx->DeviceObject,
+                    DevicePowerState,
+                    PowerState);
+
+done:
+    __PdoSetDevicePnpState(Pdo, Stopped);
+    Irp->IoStatus.Status = STATUS_SUCCESS;
+
+    IoCopyCurrentIrpStackLocationToNext(Irp);
+    IoSetCompletionRoutine(Irp,
+                           __PdoStopDevice,
+                           Pdo,
+                           TRUE,
+                           TRUE,
+                           TRUE);
+
+    status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
+
+    return status;
+
+fail1:
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
+static NTSTATUS
+__PdoQueryRemoveDevice(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
+    )
+{
+    PXENDISK_PDO        Pdo = Context;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
+
+    if (Irp->PendingReturned)
+        IoMarkIrpPending(Irp);
+
+    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+
+    return STATUS_SUCCESS;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+PdoQueryRemoveDevice(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    NTSTATUS            status;
+
+    status = IoAcquireRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    __PdoSetDevicePnpState(Pdo, RemovePending);
+    Irp->IoStatus.Status = STATUS_SUCCESS;
+
+    IoCopyCurrentIrpStackLocationToNext(Irp);
+    IoSetCompletionRoutine(Irp,
+                           __PdoQueryRemoveDevice,
+                           Pdo,
+                           TRUE,
+                           TRUE,
+                           TRUE);
+
+    status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
+
+    return status;
+
+fail1:
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
+static NTSTATUS
+__PdoCancelRemoveDevice(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
+    )
+{
+    PXENDISK_PDO        Pdo = Context;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
+
+    if (Irp->PendingReturned)
+        IoMarkIrpPending(Irp);
+
+    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+
+    return STATUS_SUCCESS;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+PdoCancelRemoveDevice(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    NTSTATUS            status;
+
+    status = IoAcquireRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    __PdoRestoreDevicePnpState(Pdo, RemovePending);
+    Irp->IoStatus.Status = STATUS_SUCCESS;
+
+    IoCopyCurrentIrpStackLocationToNext(Irp);
+    IoSetCompletionRoutine(Irp,
+                           __PdoCancelRemoveDevice,
+                           Pdo,
+                           TRUE,
+                           TRUE,
+                           TRUE);
+
+    status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
+
+    return status;
+
+fail1:
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
+static NTSTATUS
+__PdoSurpriseRemoval(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
+    )
+{
+    PXENDISK_PDO        Pdo = Context;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
+
+    if (Irp->PendingReturned)
+        IoMarkIrpPending(Irp);
+
+    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+
+    return STATUS_SUCCESS;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+PdoSurpriseRemoval(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    NTSTATUS            status;
+
+    status = IoAcquireRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    __PdoSetDevicePnpState(Pdo, SurpriseRemovePending);
+    Irp->IoStatus.Status = STATUS_SUCCESS;
+
+    IoCopyCurrentIrpStackLocationToNext(Irp);
+    IoSetCompletionRoutine(Irp,
+                           __PdoSurpriseRemoval,
+                           Pdo,
+                           TRUE,
+                           TRUE,
+                           TRUE);
+
+    status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
+
+    return status;
+
+fail1:
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+PdoRemoveDevice(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    PXENDISK_FDO        Fdo = __PdoGetFdo(Pdo);
+    POWER_STATE         PowerState;
+    NTSTATUS            status;
+
+    status = IoAcquireRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    if (__PdoGetDevicePowerState(Pdo) != PowerDeviceD0)
+        goto done;
+
+    __PdoSetDevicePowerState(Pdo, PowerDeviceD3);
+    __PdoSetSystemPowerState(Pdo, PowerSystemShutdown);
+
+    PowerState.DeviceState = PowerDeviceD3;
+    PoSetPowerState(Pdo->Dx->DeviceObject,
+                    DevicePowerState,
+                    PowerState);
+
+done:
+    if (__PdoIsMissing(Pdo)) {
+        __PdoSetDevicePnpState(Pdo, Deleted);
+        IoReleaseRemoveLockAndWait(&Pdo->Dx->RemoveLock, Irp);
+    } else {
+        __PdoSetDevicePnpState(Pdo, Enumerated);
+        IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+    }
+
+    status = PdoForwardIrpSynchronously(Pdo, Irp);
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    if (__PdoIsMissing(Pdo)) {
+        FdoAcquireMutex(Fdo);
+        PdoDestroy(Pdo);
+        FdoReleaseMutex(Fdo);
+    }
+
+    return status;
+
+fail1:
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+PdoEject(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    PXENDISK_FDO        Fdo = __PdoGetFdo(Pdo);
+    NTSTATUS            status;
+
+    __PdoSetMissing(Pdo, "Ejected");
+    __PdoSetDevicePnpState(Pdo, Deleted);
+
+    status = PdoForwardIrpSynchronously(Pdo, Irp);
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    FdoAcquireMutex(Fdo);
+    PdoDestroy(Pdo);
+    FdoReleaseMutex(Fdo);
+
+    return status;
+}
+
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
+static NTSTATUS
+__PdoDispatchPnp(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
+    )
+{
+    PXENDISK_PDO        Pdo = Context;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
+
+    if (Irp->PendingReturned)
+        IoMarkIrpPending(Irp);
+
+    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+    return STATUS_SUCCESS;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+PdoDispatchPnp(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    UCHAR               MinorFunction;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    MinorFunction = StackLocation->MinorFunction;
+
+    switch (StackLocation->MinorFunction) {
+    case IRP_MN_START_DEVICE:
+        status = PdoStartDevice(Pdo, Irp);
+        break;
+
+    case IRP_MN_QUERY_STOP_DEVICE:
+        status = PdoQueryStopDevice(Pdo, Irp);
+        break;
+
+    case IRP_MN_CANCEL_STOP_DEVICE:
+        status = PdoCancelStopDevice(Pdo, Irp);
+        break;
+
+    case IRP_MN_STOP_DEVICE:
+        status = PdoStopDevice(Pdo, Irp);
+        break;
+
+    case IRP_MN_QUERY_REMOVE_DEVICE:
+        status = PdoQueryRemoveDevice(Pdo, Irp);
+        break;
+
+    case IRP_MN_SURPRISE_REMOVAL:
+        status = PdoSurpriseRemoval(Pdo, Irp);
+        break;
+
+    case IRP_MN_REMOVE_DEVICE:
+        status = PdoRemoveDevice(Pdo, Irp);
+        break;
+
+    case IRP_MN_CANCEL_REMOVE_DEVICE:
+        status = PdoCancelRemoveDevice(Pdo, Irp);
+        break;
+
+    case IRP_MN_EJECT:
+        status = PdoEject(Pdo, Irp);
+        break;
+
+    default:
+        status = IoAcquireRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+        if (!NT_SUCCESS(status))
+            goto fail1;
+
+        IoCopyCurrentIrpStackLocationToNext(Irp);
+        IoSetCompletionRoutine(Irp,
+                               __PdoDispatchPnp,
+                               Pdo,
+                               TRUE,
+                               TRUE,
+                               TRUE);
+
+        status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
+        break;
+    }
+
+    return status;
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__PdoSetDevicePowerUp(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    DEVICE_POWER_STATE  DeviceState;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
+
+    ASSERT3U(DeviceState, <,  __PdoGetDevicePowerState(Pdo));
+
+    status = PdoForwardIrpSynchronously(Pdo, Irp);
+    if (!NT_SUCCESS(status))
+        goto done;
+
+    Verbose("%p: %s -> %s\n",
+         Pdo->Dx->DeviceObject,
+         PowerDeviceStateName(__PdoGetDevicePowerState(Pdo)),
+         PowerDeviceStateName(DeviceState));
+
+    __PdoSetDevicePowerState(Pdo, DeviceState);
+
+done:
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__PdoSetDevicePowerDown(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    DEVICE_POWER_STATE  DeviceState;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
+
+    ASSERT3U(DeviceState, >,  __PdoGetDevicePowerState(Pdo));
+
+    Verbose("%p: %s -> %s\n",
+         Pdo->Dx->DeviceObject,
+         PowerDeviceStateName(__PdoGetDevicePowerState(Pdo)),
+         PowerDeviceStateName(DeviceState));
+
+    __PdoSetDevicePowerState(Pdo, DeviceState);
+
+    status = PdoForwardIrpSynchronously(Pdo, Irp);
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__PdoSetDevicePower(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    DEVICE_POWER_STATE  DeviceState;
+    POWER_ACTION        PowerAction;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
+    PowerAction = StackLocation->Parameters.Power.ShutdownType;
+
+    Trace("====> (%s:%s)\n",
+          PowerDeviceStateName(DeviceState), 
+          PowerActionName(PowerAction));
+
+    if (DeviceState == __PdoGetDevicePowerState(Pdo)) {
+        status = PdoForwardIrpSynchronously(Pdo, Irp);
+        IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+        goto done;
+    }
+
+    status = (DeviceState < __PdoGetDevicePowerState(Pdo)) ?
+             __PdoSetDevicePowerUp(Pdo, Irp) :
+             __PdoSetDevicePowerDown(Pdo, Irp);
+
+done:
+    Trace("<==== (%s:%s)(%08x)\n",
+          PowerDeviceStateName(DeviceState), 
+          PowerActionName(PowerAction),
+          status);
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__PdoSetSystemPowerUp(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    SYSTEM_POWER_STATE  SystemState;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    SystemState = StackLocation->Parameters.Power.State.SystemState;
+
+    ASSERT3U(SystemState, <,  __PdoGetSystemPowerState(Pdo));
+
+    status = PdoForwardIrpSynchronously(Pdo, Irp);
+    if (!NT_SUCCESS(status))
+        goto done;
+
+    Verbose("%p: %s -> %s\n",
+         Pdo->Dx->DeviceObject,
+         PowerSystemStateName(__PdoGetSystemPowerState(Pdo)),
+         PowerSystemStateName(SystemState));
+
+    __PdoSetSystemPowerState(Pdo, SystemState);
+
+done:
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__PdoSetSystemPowerDown(
+    IN  PXENDISK_PDO     Pdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    SYSTEM_POWER_STATE  SystemState;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    SystemState = StackLocation->Parameters.Power.State.SystemState;
+
+    ASSERT3U(SystemState, >,  __PdoGetSystemPowerState(Pdo));
+
+    Verbose("%p: %s -> %s\n",
+         Pdo->Dx->DeviceObject,
+         PowerSystemStateName(__PdoGetSystemPowerState(Pdo)),
+         PowerSystemStateName(SystemState));
+
+    __PdoSetSystemPowerState(Pdo, SystemState);
+
+    status = PdoForwardIrpSynchronously(Pdo, Irp);
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__PdoSetSystemPower(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    SYSTEM_POWER_STATE  SystemState;
+    POWER_ACTION        PowerAction;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    SystemState = StackLocation->Parameters.Power.State.SystemState;
+    PowerAction = StackLocation->Parameters.Power.ShutdownType;
+
+    Trace("====> (%s:%s)\n",
+          PowerSystemStateName(SystemState), 
+          PowerActionName(PowerAction));
+
+    if (SystemState == __PdoGetSystemPowerState(Pdo)) {
+        status = PdoForwardIrpSynchronously(Pdo, Irp);
+        IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+        goto done;
+    }
+
+    status = (SystemState < __PdoGetSystemPowerState(Pdo)) ?
+             __PdoSetSystemPowerUp(Pdo, Irp) :
+             __PdoSetSystemPowerDown(Pdo, Irp);
+
+done:
+    Trace("<==== (%s:%s)(%08x)\n",
+          PowerSystemStateName(SystemState), 
+          PowerActionName(PowerAction),
+          status);
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__PdoQueryDevicePowerUp(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    DEVICE_POWER_STATE  DeviceState;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
+
+    ASSERT3U(DeviceState, <,  __PdoGetDevicePowerState(Pdo));
+
+    status = PdoForwardIrpSynchronously(Pdo, Irp);
+
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__PdoQueryDevicePowerDown(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    DEVICE_POWER_STATE  DeviceState;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
+
+    ASSERT3U(DeviceState, >,  __PdoGetDevicePowerState(Pdo));
+
+    status = PdoForwardIrpSynchronously(Pdo, Irp);
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__PdoQueryDevicePower(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    DEVICE_POWER_STATE  DeviceState;
+    POWER_ACTION        PowerAction;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
+    PowerAction = StackLocation->Parameters.Power.ShutdownType;
+
+    Trace("====> (%s:%s)\n",
+          PowerDeviceStateName(DeviceState), 
+          PowerActionName(PowerAction));
+
+    if (DeviceState == __PdoGetDevicePowerState(Pdo)) {
+        status = PdoForwardIrpSynchronously(Pdo, Irp);
+        IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+        goto done;
+    }
+
+    status = (DeviceState < __PdoGetDevicePowerState(Pdo)) ?
+             __PdoQueryDevicePowerUp(Pdo, Irp) :
+             __PdoQueryDevicePowerDown(Pdo, Irp);
+
+done:
+    Trace("<==== (%s:%s)(%08x)\n",
+          PowerDeviceStateName(DeviceState), 
+          PowerActionName(PowerAction),
+          status);
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__PdoQuerySystemPowerUp(
+    IN  PXENDISK_PDO     Pdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    SYSTEM_POWER_STATE  SystemState;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    SystemState = StackLocation->Parameters.Power.State.SystemState;
+
+    ASSERT3U(SystemState, <,  __PdoGetSystemPowerState(Pdo));
+
+    status = PdoForwardIrpSynchronously(Pdo, Irp);
+
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__PdoQuerySystemPowerDown(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    SYSTEM_POWER_STATE  SystemState;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    SystemState = StackLocation->Parameters.Power.State.SystemState;
+
+    ASSERT3U(SystemState, >,  __PdoGetSystemPowerState(Pdo));
+
+    status = PdoForwardIrpSynchronously(Pdo, Irp);
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__PdoQuerySystemPower(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    SYSTEM_POWER_STATE  SystemState;
+    POWER_ACTION        PowerAction;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    SystemState = StackLocation->Parameters.Power.State.SystemState;
+    PowerAction = StackLocation->Parameters.Power.ShutdownType;
+
+    Trace("====> (%s:%s)\n",
+          PowerSystemStateName(SystemState), 
+          PowerActionName(PowerAction));
+
+    if (SystemState == __PdoGetSystemPowerState(Pdo)) {
+        status = PdoForwardIrpSynchronously(Pdo, Irp);
+        IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+        goto done;
+    }
+
+    status = (SystemState < __PdoGetSystemPowerState(Pdo)) ?
+             __PdoQuerySystemPowerUp(Pdo, Irp) :
+             __PdoQuerySystemPowerDown(Pdo, Irp);
+
+done:
+    Trace("<==== (%s:%s)(%08x)\n",
+          PowerSystemStateName(SystemState), 
+          PowerActionName(PowerAction),
+          status);
+
+    return status;
+}
+
+static NTSTATUS
+PdoDevicePower(
+    IN  PXENDISK_THREAD Self,
+    IN  PVOID           Context
+    )
+{
+    PXENDISK_PDO        Pdo = Context;
+    PKEVENT             Event;
+
+    Event = ThreadGetEvent(Self);
+
+    for (;;) {
+        PIRP                Irp;
+        PIO_STACK_LOCATION  StackLocation;
+        UCHAR               MinorFunction;
+
+        if (Pdo->DevicePowerIrp == NULL) {
+            (VOID) KeWaitForSingleObject(Event,
+                                         Executive,
+                                         KernelMode,
+                                         FALSE,
+                                         NULL);
+            KeClearEvent(Event);
+        }
+
+        if (ThreadIsAlerted(Self))
+            break;
+
+        Irp = Pdo->DevicePowerIrp;
+
+        if (Irp == NULL)
+            continue;
+
+        Pdo->DevicePowerIrp = NULL;
+        KeMemoryBarrier();
+
+        StackLocation = IoGetCurrentIrpStackLocation(Irp);
+        MinorFunction = StackLocation->MinorFunction;
+
+        switch (StackLocation->MinorFunction) {
+        case IRP_MN_SET_POWER:
+            (VOID) __PdoSetDevicePower(Pdo, Irp);
+            break;
+
+        case IRP_MN_QUERY_POWER:
+            (VOID) __PdoQueryDevicePower(Pdo, Irp);
+            break;
+
+        default:
+            ASSERT(FALSE);
+            break;
+        }
+
+        IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+    }
+
+    return STATUS_SUCCESS;
+}
+
+static NTSTATUS
+PdoSystemPower(
+    IN  PXENDISK_THREAD Self,
+    IN  PVOID           Context
+    )
+{
+    PXENDISK_PDO        Pdo = Context;
+    PKEVENT             Event;
+
+    Event = ThreadGetEvent(Self);
+
+    for (;;) {
+        PIRP                Irp;
+        PIO_STACK_LOCATION  StackLocation;
+        UCHAR               MinorFunction;
+
+        if (Pdo->SystemPowerIrp == NULL) {
+            (VOID) KeWaitForSingleObject(Event,
+                                         Executive,
+                                         KernelMode,
+                                         FALSE,
+                                         NULL);
+            KeClearEvent(Event);
+        }
+
+        if (ThreadIsAlerted(Self))
+            break;
+
+        Irp = Pdo->SystemPowerIrp;
+
+        if (Irp == NULL)
+            continue;
+
+        Pdo->SystemPowerIrp = NULL;
+        KeMemoryBarrier();
+
+        StackLocation = IoGetCurrentIrpStackLocation(Irp);
+        MinorFunction = StackLocation->MinorFunction;
+
+        switch (StackLocation->MinorFunction) {
+        case IRP_MN_SET_POWER:
+            (VOID) __PdoSetSystemPower(Pdo, Irp);
+            break;
+
+        case IRP_MN_QUERY_POWER:
+            (VOID) __PdoQuerySystemPower(Pdo, Irp);
+            break;
+
+        default:
+            ASSERT(FALSE);
+            break;
+        }
+
+        IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+    }
+
+    return STATUS_SUCCESS;
+}
+
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
+static NTSTATUS
+__PdoDispatchPower(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
+    )
+{
+    PXENDISK_PDO        Pdo = Context;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
+
+    if (Irp->PendingReturned)
+        IoMarkIrpPending(Irp);
+
+    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+    return STATUS_SUCCESS;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+PdoDispatchPower(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    UCHAR               MinorFunction;
+    POWER_STATE_TYPE    PowerType;
+    NTSTATUS            status;
+
+    status = IoAcquireRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    MinorFunction = StackLocation->MinorFunction;
+
+    if (MinorFunction != IRP_MN_QUERY_POWER &&
+        MinorFunction != IRP_MN_SET_POWER) {
+        IoCopyCurrentIrpStackLocationToNext(Irp);
+        IoSetCompletionRoutine(Irp,
+                               __PdoDispatchPower,
+                               Pdo,
+                               TRUE,
+                               TRUE,
+                               TRUE);
+
+        status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
+
+        goto done;
+    }
+
+    PowerType = StackLocation->Parameters.Power.Type;
+
+    Trace("====> (%02x:%s)\n",
+          MinorFunction, 
+          PowerMinorFunctionName(MinorFunction)); 
+
+    switch (PowerType) {
+    case DevicePowerState:
+        IoMarkIrpPending(Irp);
+
+        ASSERT3P(Pdo->DevicePowerIrp, ==, NULL);
+        Pdo->DevicePowerIrp = Irp;
+        KeMemoryBarrier();
+
+        ThreadWake(Pdo->DevicePowerThread);
+
+        status = STATUS_PENDING;
+        break;
+
+    case SystemPowerState:
+        IoMarkIrpPending(Irp);
+
+        ASSERT3P(Pdo->SystemPowerIrp, ==, NULL);
+        Pdo->SystemPowerIrp = Irp;
+        KeMemoryBarrier();
+
+        ThreadWake(Pdo->SystemPowerThread);
+
+        status = STATUS_PENDING;
+        break;
+
+    default:
+        IoCopyCurrentIrpStackLocationToNext(Irp);
+        IoSetCompletionRoutine(Irp,
+                               __PdoDispatchPower,
+                               Pdo,
+                               TRUE,
+                               TRUE,
+                               TRUE);
+
+        status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
+        break;
+    }
+
+    Trace("<==== (%02x:%s) (%08x)\n",
+          MinorFunction, 
+          PowerMinorFunctionName(MinorFunction),
+          status);
+
+done:
+    return status;
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
+static NTSTATUS
+__PdoDispatchDefault(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
+    )
+{
+    PXENDISK_PDO        Pdo = Context;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
+
+    if (Irp->PendingReturned)
+        IoMarkIrpPending(Irp);
+
+    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+
+    return STATUS_SUCCESS;
+}
+
+static DECLSPEC_NOINLINE NTSTATUS
+PdoDispatchDefault(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    NTSTATUS            status;
+
+    status = IoAcquireRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    IoCopyCurrentIrpStackLocationToNext(Irp);
+    IoSetCompletionRoutine(Irp,
+                           __PdoDispatchDefault,
+                           Pdo,
+                           TRUE,
+                           TRUE,
+                           TRUE);
+
+    status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
+
+    return status;
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    Irp->IoStatus.Status = status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+    return status;
+}
+
+NTSTATUS
+PdoDispatch(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    NTSTATUS            status;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+
+    switch (StackLocation->MajorFunction) {
+    case IRP_MJ_DEVICE_CONTROL:
+        status = PdoDispatchControl(Pdo, Irp);
+        break;
+
+    case IRP_MJ_PNP:
+        status = PdoDispatchPnp(Pdo, Irp);
+        break;
+
+    case IRP_MJ_POWER:
+        status = PdoDispatchPower(Pdo, Irp);
+        break;
+
+    default:
+        status = PdoDispatchDefault(Pdo, Irp);
+        break;
+    }
+
+    return status;
+}
+
+NTSTATUS
+PdoCreate(
+    PXENDISK_FDO                    Fdo,
+    PDEVICE_OBJECT                  PhysicalDeviceObject
+    )
+{
+    PDEVICE_OBJECT                  LowerDeviceObject;
+    ULONG                           DeviceType;
+    PDEVICE_OBJECT                  FilterDeviceObject;
+    PXENDISK_DX                     Dx;
+    PXENDISK_PDO                    Pdo;
+    NTSTATUS                        status;
+
+    LowerDeviceObject = IoGetAttachedDeviceReference(PhysicalDeviceObject);
+    DeviceType = LowerDeviceObject->DeviceType;
+    ObDereferenceObject(LowerDeviceObject);
+
+#pragma prefast(suppress:28197) // Possibly leaking memory 'PhysicalDeviceObject'
+    status = IoCreateDevice(DriverGetDriverObject(),
+                            sizeof(XENDISK_DX),
+                            NULL,
+                            DeviceType,
+                            FILE_DEVICE_SECURE_OPEN,
+                            FALSE,
+                            &FilterDeviceObject);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    Dx = (PXENDISK_DX)FilterDeviceObject->DeviceExtension;
+    RtlZeroMemory(Dx, sizeof (XENDISK_DX));
+
+    Dx->Type = PHYSICAL_DEVICE_OBJECT;
+    Dx->DeviceObject = FilterDeviceObject;
+    Dx->DevicePnpState = Present;
+    Dx->SystemPowerState = PowerSystemShutdown;
+    Dx->DevicePowerState = PowerDeviceD3;
+
+    IoInitializeRemoveLock(&Dx->RemoveLock, PDO_TAG, 0, 0);
+
+    Pdo = __PdoAllocate(sizeof (XENDISK_PDO));
+
+    status = STATUS_NO_MEMORY;
+    if (Pdo == NULL)
+        goto fail2;
+
+    LowerDeviceObject = IoAttachDeviceToDeviceStack(FilterDeviceObject,
+                                                    PhysicalDeviceObject);
+
+    status = STATUS_UNSUCCESSFUL;
+    if (LowerDeviceObject == NULL)
+        goto fail3;
+
+    Pdo->Dx = Dx;
+    Pdo->PhysicalDeviceObject = PhysicalDeviceObject;
+    Pdo->LowerDeviceObject = LowerDeviceObject;
+    Pdo->SectorSize = 512;
+
+    status = ThreadCreate(PdoSystemPower, Pdo, &Pdo->SystemPowerThread);
+    if (!NT_SUCCESS(status))
+        goto fail4;
+
+    status = ThreadCreate(PdoDevicePower, Pdo, &Pdo->DevicePowerThread);
+    if (!NT_SUCCESS(status))
+        goto fail5;
+
+    Verbose("%p\n", FilterDeviceObject);
+
+    Dx->Pdo = Pdo;
+
+#pragma prefast(suppress:28182) // Dereferencing NULL pointer
+    FilterDeviceObject->DeviceType = LowerDeviceObject->DeviceType;
+    FilterDeviceObject->Characteristics = LowerDeviceObject->Characteristics;
+
+    FilterDeviceObject->Flags |= LowerDeviceObject->Flags;
+    FilterDeviceObject->Flags &= ~DO_DEVICE_INITIALIZING;
+
+    __PdoLink(Pdo, Fdo);
+
+    return STATUS_SUCCESS;
+
+fail5:
+    Error("fail5\n");
+
+    ThreadAlert(Pdo->SystemPowerThread);
+    ThreadJoin(Pdo->SystemPowerThread);
+    Pdo->SystemPowerThread = NULL;
+
+fail4:
+    Error("fail4\n");
+
+    Pdo->PhysicalDeviceObject = NULL;
+    Pdo->LowerDeviceObject = NULL;
+    Pdo->Dx = NULL;
+
+    IoDetachDevice(LowerDeviceObject);
+
+fail3:
+    Error("fail3\n");
+
+    ASSERT(IsZeroMemory(Pdo, sizeof (XENDISK_PDO)));
+    __PdoFree(Pdo);
+
+fail2:
+    Error("fail2\n");
+
+    IoDeleteDevice(FilterDeviceObject);
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return status;
+}
+
+VOID
+PdoDestroy(
+    IN  PXENDISK_PDO    Pdo
+    )
+{
+    PDEVICE_OBJECT      LowerDeviceObject = Pdo->LowerDeviceObject;
+    PXENDISK_DX         Dx = Pdo->Dx;
+    PDEVICE_OBJECT      FilterDeviceObject = Dx->DeviceObject;
+
+    ASSERT3U(__PdoGetDevicePnpState(Pdo), ==, Deleted);
+
+    ASSERT(__PdoIsMissing(Pdo));
+    Pdo->Missing = FALSE;
+
+    __PdoUnlink(Pdo);
+
+    Verbose("%p (%s)\n",
+         FilterDeviceObject,
+         Pdo->Reason);
+    Pdo->Reason = NULL;
+
+    Dx->Pdo = NULL;
+
+    ThreadAlert(Pdo->DevicePowerThread);
+    ThreadJoin(Pdo->DevicePowerThread);
+    Pdo->DevicePowerThread = NULL;
+
+    ThreadAlert(Pdo->SystemPowerThread);
+    ThreadJoin(Pdo->SystemPowerThread);
+    Pdo->SystemPowerThread = NULL;
+
+    Pdo->SectorSize = 0;
+    Pdo->PhysicalDeviceObject = NULL;
+    Pdo->LowerDeviceObject = NULL;
+    Pdo->Dx = NULL;
+
+    IoDetachDevice(LowerDeviceObject);
+
+    ASSERT(IsZeroMemory(Pdo, sizeof (XENDISK_PDO)));
+    __PdoFree(Pdo);
+
+    IoDeleteDevice(FilterDeviceObject);
+}
diff --git a/src/xendisk/pdo.h b/src/xendisk/pdo.h
new file mode 100644
index 0000000..5e2e5d6
--- /dev/null
+++ b/src/xendisk/pdo.h
@@ -0,0 +1,90 @@
+/* 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 _XENDISK_PDO_H
+#define _XENDISK_PDO_H
+
+#include <ntddk.h>
+#include "types.h"
+#include "fdo.h"
+
+typedef struct _XENDISK_PDO XENDISK_PDO, *PXENDISK_PDO;
+
+extern VOID
+PdoSetDevicePnpState(
+    IN  PXENDISK_PDO        Pdo,
+    IN  DEVICE_PNP_STATE    State
+    );
+
+extern DEVICE_PNP_STATE
+PdoGetDevicePnpState(
+    IN  PXENDISK_PDO    Pdo
+    );
+
+extern PDEVICE_OBJECT
+PdoGetPhysicalDeviceObject(
+    IN  PXENDISK_PDO    Pdo
+    );
+
+extern BOOLEAN
+PdoIsMissing(
+    IN  PXENDISK_PDO    Pdo
+    );
+
+extern VOID
+PdoSetMissing(
+    IN  PXENDISK_PDO    Pdo,
+    IN  const CHAR      *Reason
+    );
+
+extern BOOLEAN
+PdoIsMasked(
+    IN  PXENDISK_PDO    Pdo
+    );
+
+extern NTSTATUS
+PdoCreate(
+    IN  PXENDISK_FDO    Fdo,
+    IN  PDEVICE_OBJECT  PhysicalDeviceObject
+    );
+
+extern VOID
+PdoDestroy(
+    IN  PXENDISK_PDO    Pdo
+    );
+
+extern NTSTATUS
+PdoDispatch(
+    IN  PXENDISK_PDO    Pdo,
+    IN  PIRP            Irp
+    );
+
+#endif // _XENDISK_PDO_H
diff --git a/src/xendisk/thread.c b/src/xendisk/thread.c
new file mode 100644
index 0000000..92e2b94
--- /dev/null
+++ b/src/xendisk/thread.c
@@ -0,0 +1,225 @@
+/* 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 "thread.h"
+#include "debug.h"
+#include "assert.h"
+#include "util.h"
+
+#define THREAD_POOL 'ERHT'
+
+struct _XENDISK_THREAD {
+    XENDISK_THREAD_FUNCTION Function;
+    PVOID                   Context;
+    KEVENT                  Event;
+    BOOLEAN                 Alerted;
+    LONG                    References;
+    PKTHREAD                Thread;
+};
+
+static FORCEINLINE PVOID
+__ThreadAllocate(
+    IN  ULONG   Length
+    )
+{
+    return __AllocateNonPagedPoolWithTag(__FUNCTION__, __LINE__, Length, THREAD_POOL);
+}
+
+static FORCEINLINE VOID
+__ThreadFree(
+    IN  PVOID   Buffer
+    )
+{
+    __FreePoolWithTag(Buffer, THREAD_POOL);
+}
+
+static FORCEINLINE VOID
+__ThreadWake(
+    IN  PXENDISK_THREAD Thread
+    )
+{
+    KeSetEvent(&Thread->Event, IO_NO_INCREMENT, FALSE);
+}
+
+VOID
+ThreadWake(
+    IN  PXENDISK_THREAD Thread
+    )
+{
+    __ThreadWake(Thread);
+}
+
+static FORCEINLINE VOID
+__ThreadAlert(
+    IN  PXENDISK_THREAD Thread
+    )
+{
+    Thread->Alerted = TRUE;
+    __ThreadWake(Thread);
+}
+
+VOID
+ThreadAlert(
+    IN  PXENDISK_THREAD Thread
+    )
+{
+    __ThreadAlert(Thread);
+}
+
+KSTART_ROUTINE  ThreadFunction;
+
+VOID
+ThreadFunction(
+    IN  PVOID       Argument
+    )
+{
+    PXENDISK_THREAD Self = Argument;
+    NTSTATUS        status;
+
+    status = Self->Function(Self, Self->Context);
+
+    if (InterlockedDecrement(&Self->References) == 0)
+        __ThreadFree(Self);
+
+    PsTerminateSystemThread(status);
+    // NOT REACHED
+}
+
+NTSTATUS
+ThreadCreate(
+    IN  XENDISK_THREAD_FUNCTION Function,
+    IN  PVOID                   Context,
+    OUT PXENDISK_THREAD         *Thread
+    )
+{
+    HANDLE                      Handle;
+    NTSTATUS                    status;
+
+    ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
+
+    (*Thread) = __ThreadAllocate(sizeof (XENDISK_THREAD));
+
+    status = STATUS_NO_MEMORY;
+    if (*Thread == NULL)
+        goto fail1;
+
+    (*Thread)->Function = Function;
+    (*Thread)->Context = Context;
+    (*Thread)->Alerted = FALSE;
+    (*Thread)->References = 2; // One for us, one for the thread function
+
+    KeInitializeEvent(&(*Thread)->Event, NotificationEvent, FALSE);
+
+    status = PsCreateSystemThread(&Handle,
+                                  STANDARD_RIGHTS_ALL | SPECIFIC_RIGHTS_ALL,
+                                  NULL,
+                                  NULL,
+                                  NULL,
+                                  ThreadFunction,
+                                  *Thread);
+    if (!NT_SUCCESS(status)) {
+        --(*Thread)->References;    // Fake thread function termination
+        goto fail2;
+    }
+
+    status = ObReferenceObjectByHandle(Handle,
+                                       SYNCHRONIZE,
+                                       *PsThreadType,
+                                       KernelMode,
+                                       &(*Thread)->Thread,
+                                       NULL);
+    if (!NT_SUCCESS(status))
+        goto fail3;
+
+    ZwClose(Handle);
+
+    return STATUS_SUCCESS;
+
+fail3:
+    Error("fail3\n");
+
+    __ThreadAlert(*Thread);
+    ZwClose(Handle);
+
+fail2:
+    Error("fail2\n");
+
+    if (InterlockedDecrement(&(*Thread)->References) == 0)
+        __ThreadFree(*Thread);
+
+    *Thread = NULL;
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return status;
+}
+
+PKEVENT
+ThreadGetEvent(
+    IN  PXENDISK_THREAD Thread
+    )
+{
+    return &Thread->Event;
+}
+
+BOOLEAN
+ThreadIsAlerted(
+    IN  PXENDISK_THREAD Thread
+    )
+{
+    return Thread->Alerted;
+}
+
+VOID
+ThreadJoin(
+    IN  PXENDISK_THREAD Thread
+    )
+{
+    LONG                References;
+
+    ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
+    ASSERT3P(KeGetCurrentThread(), !=, Thread->Thread);
+
+    (VOID) KeWaitForSingleObject(Thread->Thread,
+                                 Executive,
+                                 KernelMode,
+                                 FALSE,
+                                 NULL);
+
+    References = InterlockedDecrement(&Thread->References);
+    ASSERT3U(References, ==, 0);
+
+    __ThreadFree(Thread);
+}
+
diff --git a/src/xendisk/thread.h b/src/xendisk/thread.h
new file mode 100644
index 0000000..c197337
--- /dev/null
+++ b/src/xendisk/thread.h
@@ -0,0 +1,73 @@
+/* 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 _XENDISK_THREAD_H
+#define _XENDISK_THREAD_H
+
+#include <ntddk.h>
+
+typedef struct _XENDISK_THREAD XENDISK_THREAD, *PXENDISK_THREAD;
+
+typedef NTSTATUS (*XENDISK_THREAD_FUNCTION)(PXENDISK_THREAD, PVOID);
+
+extern NTSTATUS
+ThreadCreate(
+    IN  XENDISK_THREAD_FUNCTION Function,
+    IN  PVOID                   Context,
+    OUT PXENDISK_THREAD         *Thread
+    );
+
+extern PKEVENT
+ThreadGetEvent(
+    IN  PXENDISK_THREAD Self
+    );
+
+extern BOOLEAN
+ThreadIsAlerted(
+    IN  PXENDISK_THREAD Self
+    );
+
+extern VOID
+ThreadWake(
+    IN  PXENDISK_THREAD Thread
+    );
+
+extern VOID
+ThreadAlert(
+    IN  PXENDISK_THREAD Thread
+    );
+
+extern VOID
+ThreadJoin(
+    IN  PXENDISK_THREAD Thread
+    );
+
+#endif  // _XENDISK_THREAD_H
diff --git a/src/xendisk/types.h b/src/xendisk/types.h
new file mode 100644
index 0000000..b2b4218
--- /dev/null
+++ b/src/xendisk/types.h
@@ -0,0 +1,53 @@
+/* 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 _XENDISK_TYPES_H
+#define _XENDISK_TYPES_H
+
+typedef enum _DEVICE_OBJECT_TYPE {
+    PHYSICAL_DEVICE_OBJECT = 'ODP',
+    FUNCTION_DEVICE_OBJECT = 'ODF'
+} DEVICE_OBJECT_TYPE, *PDEVICE_OBJECT_TYPE;
+
+typedef enum _DEVICE_PNP_STATE {
+    Invalid = 0,
+    Present,        // PDO only
+    Enumerated,     // PDO only
+    Added,          // FDO only
+    Started,
+    StopPending,
+    Stopped,
+    RemovePending,
+    SurpriseRemovePending,
+    Deleted
+} DEVICE_PNP_STATE, *PDEVICE_PNP_STATE;
+
+#endif  // _XENDISK_TYPES_H
diff --git a/src/xendisk/util.h b/src/xendisk/util.h
new file mode 100644
index 0000000..e7adc22
--- /dev/null
+++ b/src/xendisk/util.h
@@ -0,0 +1,222 @@
+/* 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 _UTIL_H
+#define _UTIL_H
+
+#include <ntddk.h>
+
+#include "assert.h"
+
+typedef struct _NON_PAGED_BUFFER_HEADER {
+    SIZE_T  Length;
+    ULONG   Tag;
+} NON_PAGED_BUFFER_HEADER, *PNON_PAGED_BUFFER_HEADER;
+
+typedef struct _NON_PAGED_BUFFER_TRAILER {
+    ULONG   Tag;
+} NON_PAGED_BUFFER_TRAILER, *PNON_PAGED_BUFFER_TRAILER;
+
+static FORCEINLINE PVOID
+__AllocateNonPagedPoolWithTag(
+    IN  PCHAR                   Caller,
+    IN  ULONG                   Line,
+    IN  SIZE_T                  Length,
+    IN  ULONG                   Tag
+    )
+{
+    PUCHAR                      Buffer;
+    PNON_PAGED_BUFFER_HEADER    Header;
+    PNON_PAGED_BUFFER_TRAILER   Trailer;
+
+    ASSERT3S(Length, !=, 0);
+
+    Buffer = (PUCHAR)ExAllocatePoolWithTag(NonPagedPool,
+                                   sizeof (NON_PAGED_BUFFER_HEADER) +
+                                   Length +
+                                   sizeof (NON_PAGED_BUFFER_TRAILER),
+                                   Tag);
+    if (Buffer == NULL) {
+        Warning("%s:%u : AllocFailed %d bytes, %08x tag\n", Caller, Line, Length, Tag);
+        goto done;
+    }
+
+    RtlZeroMemory(Buffer, 
+                  sizeof (NON_PAGED_BUFFER_HEADER) +
+                  Length +
+                  sizeof (NON_PAGED_BUFFER_TRAILER));
+
+    Header = (PNON_PAGED_BUFFER_HEADER)Buffer;
+    Header->Length = Length;
+    Header->Tag = Tag;
+
+    Buffer += sizeof (NON_PAGED_BUFFER_HEADER);
+
+    Trailer = (PNON_PAGED_BUFFER_TRAILER)(Buffer + Length);
+    Trailer->Tag = Tag;
+
+done:
+    return Buffer;
+}
+
+static FORCEINLINE VOID
+__FreePoolWithTag(
+    IN  PVOID                   _Buffer,
+    IN  ULONG                   Tag
+    )
+{
+    PUCHAR                      Buffer = (PUCHAR)_Buffer;
+    SIZE_T                      Length;
+    PNON_PAGED_BUFFER_HEADER    Header;
+    PNON_PAGED_BUFFER_TRAILER   Trailer;
+
+    ASSERT3P(Buffer, !=, NULL);
+
+    Buffer -= sizeof (NON_PAGED_BUFFER_HEADER);
+
+    Header = (PNON_PAGED_BUFFER_HEADER)Buffer;
+    ASSERT3U(Tag, ==, Header->Tag);
+    Length = Header->Length;
+
+    Buffer += sizeof (NON_PAGED_BUFFER_HEADER);
+
+    Trailer = (PNON_PAGED_BUFFER_TRAILER)(Buffer + Length);
+    ASSERT3U(Tag, ==, Trailer->Tag);
+
+    Buffer -= sizeof (NON_PAGED_BUFFER_HEADER);
+
+    RtlFillMemory(Buffer, 
+                  sizeof (NON_PAGED_BUFFER_HEADER) +
+                  Length +
+                  sizeof (NON_PAGED_BUFFER_TRAILER),
+                  0xAA);
+
+    ExFreePoolWithTag(Buffer, Tag);
+}
+
+static FORCEINLINE PMDL
+__AllocPagesForMdl(
+    IN  SIZE_T          Size
+    )
+{
+    PMDL                Mdl;
+    PHYSICAL_ADDRESS    LowAddr;
+    PHYSICAL_ADDRESS    HighAddr;
+    PHYSICAL_ADDRESS    SkipBytes;
+
+    SkipBytes.QuadPart = 0ull;
+    HighAddr.QuadPart = ~0ull;
+
+    // try > 4GB
+    LowAddr.QuadPart = 0x100000000ull;
+    Mdl = MmAllocatePagesForMdlEx(LowAddr, HighAddr, SkipBytes, Size, MmCached, 0);
+    if (Mdl) {
+        if (MmGetMdlByteCount(Mdl) == Size) {
+            goto done;
+        }
+        MmFreePagesFromMdl(Mdl);
+        ExFreePool(Mdl);
+        Mdl = NULL;
+    }
+
+    // try > 2GB
+    LowAddr.QuadPart = 0x80000000ull;
+    Mdl = MmAllocatePagesForMdlEx(LowAddr, HighAddr, SkipBytes, Size, MmCached, 0);
+    if (Mdl) {
+        if (MmGetMdlByteCount(Mdl) == Size) {
+            goto done;
+        }
+        MmFreePagesFromMdl(Mdl);
+        ExFreePool(Mdl);
+        Mdl = NULL;
+    }
+
+    // try anywhere
+    LowAddr.QuadPart = 0ull;
+    Mdl = MmAllocatePagesForMdlEx(LowAddr, HighAddr, SkipBytes, Size, MmCached, 0);
+    // Mdl byte count gets checked again after this returns
+
+done:
+    return Mdl;
+}
+static FORCEINLINE PVOID
+___AllocPages(
+    IN  PCHAR           Caller, 
+    IN  ULONG           Line,
+    IN  SIZE_T          Size,
+    OUT PMDL*           Mdl
+    )
+{
+    PVOID               Buffer;
+
+    *Mdl = __AllocPagesForMdl(Size);
+    if (*Mdl == NULL) {
+        Warning("%s:%u : MmAllocatePagesForMdlEx Failed %d bytes\n", Caller, Line, Size);
+        goto fail1;
+    }
+
+    if (MmGetMdlByteCount(*Mdl) != Size) {
+        Warning("%s:%u : %d bytes != %d bytes requested\n", Caller, Line, MmGetMdlByteCount(*Mdl), Size);
+        goto fail2;
+    }
+
+    Buffer = MmMapLockedPagesSpecifyCache(*Mdl, KernelMode, MmCached, NULL, FALSE, NormalPagePriority);
+    if (Buffer == NULL) {
+        Warning("%s:%u : MmMapLockedPagesSpecifyCache Failed %d bytes\n", Caller, Line, Size);
+        goto fail3;
+    }
+
+    return Buffer;
+
+fail3:
+fail2:
+    MmFreePagesFromMdl(*Mdl);
+    ExFreePool(*Mdl);
+fail1:
+    *Mdl = NULL;
+    return NULL;
+}
+#define __AllocPages(Size, Mdl) ___AllocPages(__FUNCTION__, __LINE__, Size, Mdl)
+
+static FORCEINLINE VOID
+__FreePages(
+    IN  PVOID           Buffer,
+    IN  PMDL            Mdl
+    )
+{
+    if (Buffer && Mdl) {
+        MmUnmapLockedPages(Buffer, Mdl);
+        MmFreePagesFromMdl(Mdl);
+        ExFreePool(Mdl);
+    }
+}
+
+#endif  // _UTIL_H
diff --git a/src/xendisk/xendisk.rc b/src/xendisk/xendisk.rc
new file mode 100644
index 0000000..df2e5b6
--- /dev/null
+++ b/src/xendisk/xendisk.rc
@@ -0,0 +1,56 @@
+/* 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 <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         COMPANY_NAME_STR
+#define VER_LEGALCOPYRIGHT_STR      "Copyright (c) Citrix Systems Inc."
+
+#define VER_PRODUCTNAME_STR         "XENDISK"
+#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        "XENDISK.SYS"
+#define VER_FILEDESCRIPTION_STR     "XENDISK"
+
+#define VER_FILETYPE                VFT_DRV
+#define VER_FILESUBTYPE             VFT2_DRV_SYSTEM
+
+#include <common.ver>
diff --git a/src/xenvbd.inf b/src/xenvbd.inf
index bc8627b..0d58453 100644
--- a/src/xenvbd.inf
+++ b/src/xenvbd.inf
@@ -46,6 +46,7 @@ CoInst_CopyFiles=11
 [SourceDisksFiles]
 xenvbd.sys=0,,
 xencrsh.sys=0,,
+xendisk.sys=0,,
 xenvbd_coinst.dll=0,,
 
 [Manufacturer] 
@@ -62,9 +63,25 @@ CopyFiles=XenVbd_Copyfiles
 [XenVbd_Copyfiles]
 xenvbd.sys
 xencrsh.sys
+xendisk.sys
+
+[XenVbd_Inst.HW] 
+AddReg=XenVbd_AddReg
+
+[XenVbd_AddReg]
+HKR,,"UpperFilters",0x00010000,"xendisk"
 
 [XenVbd_Inst.Services] 
 AddService=xenvbd,2,XenVbd_Service,
+AddService=xendisk,,XenDisk_Service,
+
+[XenDisk_Service] 
+DisplayName=%XenDiskDesc%
+ServiceType=%SERVICE_KERNEL_DRIVER% 
+StartType=%SERVICE_BOOT_START% 
+ErrorControl=%SERVICE_ERROR_NORMAL% 
+ServiceBinary=%12%\xendisk.sys 
+LoadOrderGroup="Scsi Miniport"
 
 [XenVbd_Service] 
 DisplayName=%XenVbdDesc%
@@ -95,6 +112,7 @@ HKR,,CoInstallers32,0x00010000,"xenvbd_coinst_@MAJOR_VERSION@_@MINOR_VERSION@_@M
 Company = "@COMPANY_NAME@"
 DiskDesc = "@PRODUCT_NAME@ PV Storage Host Adapter Package" 
 XenVbdDesc= "@PRODUCT_NAME@ PV Storage Host Adapter"
+XenDiskDesc= "@PRODUCT_NAME@ PV Storage Filter"
 
 SERVICE_BOOT_START = 0x0 
 SERVICE_SYSTEM_START = 0x1 
diff --git a/vs2012/package/package.vcxproj b/vs2012/package/package.vcxproj
index 5e5fcbc..9782f19 100644
--- a/vs2012/package/package.vcxproj
+++ b/vs2012/package/package.vcxproj
@@ -51,6 +51,9 @@
 		<ProjectReference Include="..\xenvbd\xenvbd.vcxproj">
 			<Project>{ef236371-3145-41b1-99c9-82b33e353f17}</Project>
 		</ProjectReference>
+		<ProjectReference Include="..\xendisk\xendisk.vcxproj">
+			<Project>{d7411b2c-2c43-434d-9f56-e10a3d2f5bad}</Project>
+		</ProjectReference>
 	</ItemGroup>
 	<ItemGroup>
 		<FilesToPackage Include="$(KIT)\Redist\DIFx\dpinst\EngMui\x86\dpinst.exe" Condition="'$(Platform)'=='Win32'" />
diff --git a/vs2012/xendisk/xendisk.vcxproj b/vs2012/xendisk/xendisk.vcxproj
new file mode 100644
index 0000000..333bc40
--- /dev/null
+++ b/vs2012/xendisk/xendisk.vcxproj
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+	<Import Project="..\configs.props" />
+
+	<PropertyGroup Label="Globals">
+		<Configuration>Windows Vista Debug</Configuration>
+		<Platform Condition="'$(Platform)' == ''">Win32</Platform> 
+		<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor> 
+	</PropertyGroup>
+	<PropertyGroup Label="ProeprtySheets">
+		<PlatformToolset>WindowsKernelModeDriver8.0</PlatformToolset>
+		<ConfigurationType>Driver</ConfigurationType>
+		<DriverType>WDM</DriverType>
+	</PropertyGroup>
+
+	<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+	
+	<PropertyGroup Label="Globals">
+		<ProjectGuid>{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}</ProjectGuid>
+	</PropertyGroup>
+	
+	<Import Project="..\targets.props" />
+	<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> 
+	
+	<PropertyGroup>
+		<IncludePath>$(ProjectDir)..\..\include;$(IncludePath)</IncludePath>
+		<RunCodeAnalysis>true</RunCodeAnalysis>
+		<EnableInf2cat>false</EnableInf2cat>
+		<IntDir>..\$(ProjectName)\$(ConfigurationName)\$(Platform)\</IntDir>
+		<OutDir>..\$(ConfigurationName)\$(Platform)\</OutDir>
+	</PropertyGroup>
+
+	<ItemDefinitionGroup>
+		<ClCompile>
+			<BufferSecurityCheck>false</BufferSecurityCheck>
+			<PreprocessorDefinitions>__MODULE__="XENDISK";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+			<WarningLevel>EnableAllWarnings</WarningLevel>
+			<DisableSpecificWarnings>4548;4711;4820;4668;4255;6001;6054;28196;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+			<MultiProcessorCompilation>true</MultiProcessorCompilation>
+			<EnablePREfast>true</EnablePREfast>
+		</ClCompile>
+		<Link>
+			<AdditionalDependencies>$(DDK_LIB_PATH)/libcntpr.lib;%(AdditionalDependencies)</AdditionalDependencies>
+		</Link>
+		<Inf>
+			<SpecifyArchitecture>true</SpecifyArchitecture>
+			<SpecifyDriverVerDirectiveVersion>true</SpecifyDriverVerDirectiveVersion>
+			<TimeStamp>$(MAJOR_VERSION).$(MINOR_VERSION).$(MICRO_VERSION).$(BUILD_NUMBER)</TimeStamp>
+			<EnableVerbose>true</EnableVerbose>
+		</Inf>
+	</ItemDefinitionGroup>
+	<ItemDefinitionGroup Condition="'$(Platform)'=='Win32'">
+		<ClCompile>
+			<PreprocessorDefinitions>__i386__;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+		</ClCompile>
+		<Inf>
+			<Architecture>x86</Architecture>
+		</Inf>
+	</ItemDefinitionGroup>
+	<ItemDefinitionGroup Condition="'$(Platform)'=='x64'">
+		<ClCompile>
+			<PreprocessorDefinitions>__x86_64__;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+		</ClCompile>
+		<Inf>
+			<Architecture>amd64</Architecture>
+		</Inf>
+	</ItemDefinitionGroup>
+
+	<ItemGroup>
+		<FilesToPackage Include="$(TargetPath)" />
+		<FilesToPackage Include="$(OutDir)$(TargetName).pdb" />
+		<FilesToPackage Include="@(Inf->'%(CopyOutput)')" Condition="'@(Inf)'!=''" />
+	</ItemGroup>
+	<ItemGroup>
+		<ClCompile Include="../../src/xendisk/driver.c" />
+		<ClCompile Include="../../src/xendisk/fdo.c" />
+		<ClCompile Include="../../src/xendisk/pdo.c" />
+		<ClCompile Include="../../src/xendisk/thread.c" />
+	</ItemGroup>
+	<ItemGroup>
+		<ResourceCompile Include="..\..\src\xendisk\xendisk.rc" />
+	</ItemGroup>
+	<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+</Project>
diff --git a/vs2012/xendisk/xendisk.vcxproj.user b/vs2012/xendisk/xendisk.vcxproj.user
new file mode 100644
index 0000000..0b2b210
--- /dev/null
+++ b/vs2012/xendisk/xendisk.vcxproj.user
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+	<PropertyGroup>
+		<SignMode>TestSign</SignMode>
+		<TestCertificate>..\..\src\xenvbd.pfx</TestCertificate>
+		<TimeStampServer>http://timestamp.verisign.com/scripts/timstamp.dll</TimeStampServer>
+	</PropertyGroup>
+</Project>
diff --git a/vs2012/xenvbd.sln b/vs2012/xenvbd.sln
index 86fb1a5..15113cf 100644
--- a/vs2012/xenvbd.sln
+++ b/vs2012/xenvbd.sln
@@ -4,10 +4,13 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xenvbd", "xenvbd\xenvbd.vcx
 	ProjectSection(ProjectDependencies) = postProject
 		{50C08437-C1F3-4349-BF6A-7B55A06BF999} = {50C08437-C1F3-4349-BF6A-7B55A06BF999}
 		{58F5BC43-B92E-4A2B-975D-0066EAB29092} = {58F5BC43-B92E-4A2B-975D-0066EAB29092}
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD} = {D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}
 	EndProjectSection
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xencrsh", "xencrsh\xencrsh.vcxproj", "{58F5BC43-B92E-4A2B-975D-0066EAB29092}"
 EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xendisk", "xendisk\xendisk.vcxproj", "{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}"
+EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xenvbd_coinst", "coinst\xenvbd_coinst.vcxproj", "{50C08437-C1F3-4349-BF6A-7B55A06BF999}"
 	ProjectSection(ProjectDependencies) = postProject
 		{58F5BC43-B92E-4A2B-975D-0066EAB29092} = {58F5BC43-B92E-4A2B-975D-0066EAB29092}
@@ -18,6 +21,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "package", "package\package.
 		{50C08437-C1F3-4349-BF6A-7B55A06BF999} = {50C08437-C1F3-4349-BF6A-7B55A06BF999}
 		{58F5BC43-B92E-4A2B-975D-0066EAB29092} = {58F5BC43-B92E-4A2B-975D-0066EAB29092}
         {EF236371-3145-41B1-99C9-82B33E353F17} = {EF236371-3145-41B1-99C9-82B33E353F17}
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD} = {D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}
 	EndProjectSection
 EndProject
 Global
@@ -36,6 +40,30 @@ Global
 		Windows Vista Release|x64 = Windows Vista Release|x64
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7 Debug|Win32.ActiveCfg = Windows 7 Debug|Win32
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7 Debug|Win32.Build.0 = Windows 7 Debug|Win32
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7 Debug|x64.ActiveCfg = Windows 7 Debug|x64
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7 Debug|x64.Build.0 = Windows 7 Debug|x64
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7 Release|Win32.ActiveCfg = Windows 7 Release|Win32
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7 Release|Win32.Build.0 = Windows 7 Release|Win32
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7 Release|x64.ActiveCfg = Windows 7 Release|x64
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7 Release|x64.Build.0 = Windows 7 Release|x64
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8 Debug|Win32.ActiveCfg = Windows 8 Debug|Win32
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8 Debug|Win32.Build.0 = Windows 8 Debug|Win32
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8 Debug|x64.ActiveCfg = Windows 8 Debug|x64
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8 Debug|x64.Build.0 = Windows 8 Debug|x64
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8 Release|Win32.ActiveCfg = Windows 8 Release|Win32
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8 Release|Win32.Build.0 = Windows 8 Release|Win32
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8 Release|x64.ActiveCfg = Windows 8 Release|x64
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8 Release|x64.Build.0 = Windows 8 Release|x64
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista Debug|Win32.ActiveCfg = Windows Vista Debug|Win32
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista Debug|Win32.Build.0 = Windows Vista Debug|Win32
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista Debug|x64.ActiveCfg = Windows Vista Debug|x64
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista Debug|x64.Build.0 = Windows Vista Debug|x64
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista Release|Win32.ActiveCfg = Windows Vista Release|Win32
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista Release|Win32.Build.0 = Windows Vista Release|Win32
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista Release|x64.ActiveCfg = Windows Vista Release|x64
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista Release|x64.Build.0 = Windows Vista Release|x64
 		{EF236371-3145-41B1-99C9-82B33E353F17}.Windows 7 Debug|Win32.ActiveCfg = Windows 7 Debug|Win32
 		{EF236371-3145-41B1-99C9-82B33E353F17}.Windows 7 Debug|Win32.Build.0 = Windows 7 Debug|Win32
 		{EF236371-3145-41B1-99C9-82B33E353F17}.Windows 7 Debug|x64.ActiveCfg = Windows 7 Debug|x64
diff --git a/vs2013/package/package.vcxproj b/vs2013/package/package.vcxproj
index 5d0de4d..8b2fa4f 100644
--- a/vs2013/package/package.vcxproj
+++ b/vs2013/package/package.vcxproj
@@ -80,6 +80,9 @@
     <ProjectReference Include="..\xenvbd\xenvbd.vcxproj">
       <Project>{ef236371-3145-41b1-99c9-82b33e353f17}</Project>
     </ProjectReference>
+    <ProjectReference Include="..\xendisk\xendisk.vcxproj">
+      <Project>{d7411b2c-2c43-434d-9f56-e10a3d2f5bad}</Project>
+    </ProjectReference>
   </ItemGroup>
   <ItemGroup>
     <FilesToPackage Include="$(KIT)\Redist\DIFx\dpinst\EngMui\x86\dpinst.exe" Condition="'$(Platform)'=='Win32'" />
diff --git a/vs2013/xendisk/xendisk.vcxproj b/vs2013/xendisk/xendisk.vcxproj
new file mode 100644
index 0000000..39b9163
--- /dev/null
+++ b/vs2013/xendisk/xendisk.vcxproj
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="..\configs.props" />
+  <PropertyGroup Label="Globals">
+    <Configuration>Windows Vista Debug</Configuration>
+    <Platform Condition="'$(Platform)' == ''">Win32</Platform>
+    <DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
+  </PropertyGroup>
+  <PropertyGroup Label="ProeprtySheets">
+    <ConfigurationType>Driver</ConfigurationType>
+    <DriverType>WDM</DriverType>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Windows 8 Release|Win32'">
+    <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|Win32'">
+    <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)'=='Windows 7 Debug|Win32'">
+    <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 Release|x64'">
+    <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 Release|x64'">
+    <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 Debug|x64'">
+    <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Windows 8 Debug|x64'">
+    <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}</ProjectGuid>
+  </PropertyGroup>
+  <Import Project="..\targets.props" />
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <PropertyGroup>
+    <IncludePath>$(ProjectDir)..\..\include;$(IncludePath)</IncludePath>
+    <RunCodeAnalysis>true</RunCodeAnalysis>
+    <EnableInf2cat>false</EnableInf2cat>
+    <IntDir>..\$(ProjectName)\$(ConfigurationName)\$(Platform)\</IntDir>
+    <OutDir>..\$(ConfigurationName)\$(Platform)\</OutDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup>
+    <ClCompile>
+      <BufferSecurityCheck>false</BufferSecurityCheck>
+      <PreprocessorDefinitions>__MODULE__="XENDISK";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <WarningLevel>EnableAllWarnings</WarningLevel>
+      <DisableSpecificWarnings>4548;4711;4820;4668;4255;6001;6054;28196;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <EnablePREfast>true</EnablePREfast>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>$(DDK_LIB_PATH)/libcntpr.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+    <Inf>
+      <SpecifyArchitecture>true</SpecifyArchitecture>
+      <SpecifyDriverVerDirectiveVersion>true</SpecifyDriverVerDirectiveVersion>
+      <TimeStamp>$(MAJOR_VERSION).$(MINOR_VERSION).$(MICRO_VERSION).$(BUILD_NUMBER)</TimeStamp>
+      <EnableVerbose>true</EnableVerbose>
+    </Inf>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Platform)'=='Win32'">
+    <ClCompile>
+      <PreprocessorDefinitions>__i386__;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Inf>
+      <Architecture>x86</Architecture>
+    </Inf>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Platform)'=='x64'">
+    <ClCompile>
+      <PreprocessorDefinitions>__x86_64__;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Inf>
+      <Architecture>amd64</Architecture>
+    </Inf>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <FilesToPackage Include="$(TargetPath)" />
+    <FilesToPackage Include="$(OutDir)$(TargetName).pdb" />
+    <FilesToPackage Include="@(Inf->'%(CopyOutput)')" Condition="'@(Inf)'!=''" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="../../src/xendisk/driver.c" />
+    <ClCompile Include="../../src/xendisk/fdo.c" />
+    <ClCompile Include="../../src/xendisk/pdo.c" />
+    <ClCompile Include="../../src/xendisk/thread.c" />
+  </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="..\..\src\xendisk\xendisk.rc" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+</Project>
diff --git a/vs2013/xendisk/xendisk.vcxproj.user b/vs2013/xendisk/xendisk.vcxproj.user
new file mode 100644
index 0000000..1f1f3c0
--- /dev/null
+++ b/vs2013/xendisk/xendisk.vcxproj.user
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <SignMode>TestSign</SignMode>
+    <TestCertificate>..\..\src\xenvbd.pfx</TestCertificate>
+    <TimeStampServer>http://timestamp.verisign.com/scripts/timstamp.dll</TimeStampServer>
+  </PropertyGroup>
+</Project>
diff --git a/vs2013/xenvbd.sln b/vs2013/xenvbd.sln
index 13128c5..da798d2 100644
--- a/vs2013/xenvbd.sln
+++ b/vs2013/xenvbd.sln
@@ -4,10 +4,13 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xenvbd", "xenvbd\xenvbd.vcx
 	ProjectSection(ProjectDependencies) = postProject
 		{50C08437-C1F3-4349-BF6A-7B55A06BF999} = {50C08437-C1F3-4349-BF6A-7B55A06BF999}
 		{58F5BC43-B92E-4A2B-975D-0066EAB29092} = {58F5BC43-B92E-4A2B-975D-0066EAB29092}
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD} = {D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}
 	EndProjectSection
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xencrsh", "xencrsh\xencrsh.vcxproj", "{58F5BC43-B92E-4A2B-975D-0066EAB29092}"
 EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xendisk", "xendisk\xendisk.vcxproj", "{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}"
+EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xenvbd_coinst", "coinst\xenvbd_coinst.vcxproj", "{50C08437-C1F3-4349-BF6A-7B55A06BF999}"
     ProjectSection(ProjectDependencies) = postProject
 		{58F5BC43-B92E-4A2B-975D-0066EAB29092} = {58F5BC43-B92E-4A2B-975D-0066EAB29092}
@@ -18,6 +21,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "package", "package\package.
 		{50C08437-C1F3-4349-BF6A-7B55A06BF999} = {50C08437-C1F3-4349-BF6A-7B55A06BF999}
 		{58F5BC43-B92E-4A2B-975D-0066EAB29092} = {58F5BC43-B92E-4A2B-975D-0066EAB29092}
         {EF236371-3145-41B1-99C9-82B33E353F17} = {EF236371-3145-41B1-99C9-82B33E353F17}
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD} = {D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}		
 	EndProjectSection
 EndProject
 Global
@@ -36,6 +40,30 @@ Global
 		Windows Vista Release|x64 = Windows Vista Release|x64
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7 Debug|Win32.ActiveCfg = Windows 7 Debug|Win32
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7 Debug|Win32.Build.0 = Windows 7 Debug|Win32
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7 Debug|x64.ActiveCfg = Windows 7 Debug|x64
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7 Debug|x64.Build.0 = Windows 7 Debug|x64
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7 Release|Win32.ActiveCfg = Windows 7 Release|Win32
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7 Release|Win32.Build.0 = Windows 7 Release|Win32
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7 Release|x64.ActiveCfg = Windows 7 Release|x64
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7 Release|x64.Build.0 = Windows 7 Release|x64
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8 Debug|Win32.ActiveCfg = Windows 8 Debug|Win32
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8 Debug|Win32.Build.0 = Windows 8 Debug|Win32
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8 Debug|x64.ActiveCfg = Windows 8 Debug|x64
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8 Debug|x64.Build.0 = Windows 8 Debug|x64
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8 Release|Win32.ActiveCfg = Windows 8 Release|Win32
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8 Release|Win32.Build.0 = Windows 8 Release|Win32
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8 Release|x64.ActiveCfg = Windows 8 Release|x64
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8 Release|x64.Build.0 = Windows 8 Release|x64
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista Debug|Win32.ActiveCfg = Windows Vista Debug|Win32
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista Debug|Win32.Build.0 = Windows Vista Debug|Win32
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista Debug|x64.ActiveCfg = Windows Vista Debug|x64
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista Debug|x64.Build.0 = Windows Vista Debug|x64
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista Release|Win32.ActiveCfg = Windows Vista Release|Win32
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista Release|Win32.Build.0 = Windows Vista Release|Win32
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista Release|x64.ActiveCfg = Windows Vista Release|x64
+		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista Release|x64.Build.0 = Windows Vista Release|x64
 		{EF236371-3145-41B1-99C9-82B33E353F17}.Windows 7 Debug|Win32.ActiveCfg = Windows 7 Debug|Win32
 		{EF236371-3145-41B1-99C9-82B33E353F17}.Windows 7 Debug|Win32.Build.0 = Windows 7 Debug|Win32
 		{EF236371-3145-41B1-99C9-82B33E353F17}.Windows 7 Debug|x64.ActiveCfg = Windows 7 Debug|x64
-- 
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 Thu Oct 30 10:24:07 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 30 Oct 2014 10:24: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 1Xjmtj-0001t8-Ir; Thu, 30 Oct 2014 10:24:07 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <Paul.Durrant@citrix.com>) id 1Xjmth-0001sz-RG
	for win-pv-devel@lists.xenproject.org; Thu, 30 Oct 2014 10:24:06 +0000
Received: from [193.109.254.147] by server-15.bemta-14.messagelabs.com id
	EE/24-02699-5C112545; Thu, 30 Oct 2014 10:24:05 +0000
X-Env-Sender: Paul.Durrant@citrix.com
X-Msg-Ref: server-12.tower-27.messagelabs.com!1414664644!13389516!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.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 25806 invoked from network); 30 Oct 2014 10:24:04 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-12.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	30 Oct 2014 10:24:04 -0000
X-IronPort-AV: E=Sophos;i="5.07,284,1413244800"; d="scan'208";a="26370573"
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: [PATCH 1/3] Prepare SCSIOP_UNMAP correctly
Thread-Index: AQHP8qIwyxoZaT4n/0+tKI4YbAqh0pxIcdqw
Date: Thu, 30 Oct 2014 10:24:02 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD01113A968@AMSPEX01CL01.citrite.net>
References: <1414495644-5948-1-git-send-email-owen.smith@citrix.com>
	<1414495644-5948-2-git-send-email-owen.smith@citrix.com>
In-Reply-To: <1414495644-5948-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/3] Prepare SCSIOP_UNMAP correctly
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 [mailto:owen.smith@citrix.com]
> Sent: 28 October 2014 11:27
> To: win-pv-devel@lists.xenproject.org
> Cc: Paul Durrant; Owen Smith
> Subject: [PATCH 1/3] Prepare SCSIOP_UNMAP correctly
> 
> SCSIOP_UNMAP requests contain a list of extents to discard
> and each BLKIF_OP_DISCARD only handles a single extent.
> Break a SRB doen into multiple ring requests as neccessary.
> 
> Signed-off-by: Owen Smith <owen.smith@citrix.com>

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

> ---
>  src/xenvbd/pdo.c | 69
> ++++++++++++++++++++++++++++++++++++++++++++------------
>  1 file changed, 54 insertions(+), 15 deletions(-)
> 
> diff --git a/src/xenvbd/pdo.c b/src/xenvbd/pdo.c
> index 9762944..3f18621 100644
> --- a/src/xenvbd/pdo.c
> +++ b/src/xenvbd/pdo.c
> @@ -1452,26 +1452,65 @@ PrepareUnmap(
>      __in PSCSI_REQUEST_BLOCK     Srb
>      )
>  {
> -    PXENVBD_SRBEXT  SrbExt = GetSrbExt(Srb);
> -    PXENVBD_REQUEST Request = __LookasideAlloc(&Pdo->RequestList);
> -    if (Request == NULL)
> -        return STATUS_UNSUCCESSFUL;
> +    PXENVBD_SRBEXT      SrbExt = GetSrbExt(Srb);
> +    PUNMAP_LIST_HEADER  Unmap = Srb->DataBuffer;
> +    ULONG               Count = _byteswap_ushort(*(PUSHORT)Unmap-
> >DataLength) /
> +                                _byteswap_ushort(*(PUSHORT)Unmap-
> >BlockDescrDataLength);
> +    ULONG               Index;
> +    LIST_ENTRY          List;
> 
> -    SrbExt->Count = 1;
> -    // mark the SRB as pending, completion will check for pending to detect
> failures
> +    InitializeListHead(&List);
> +    SrbExt->Count = 0;
>      Srb->SrbStatus = SRB_STATUS_PENDING;
> 
> -    Request->Srb        = Srb;
> -    Request->Id         = PdoGetTag(Pdo);
> -    Request->Operation  = BLKIF_OP_DISCARD;
> -    Request->FirstSector = Cdb_LogicalBlock(Srb);
> -    Request->NrSectors   = Cdb_TransferBlock(Srb);
> -    Request->Flags       = 0;
> -    InitializeListHead(&Request->Segments);
> +    for (Index = 0; Index < Count; ++Index) {
> +        PUNMAP_BLOCK_DESCRIPTOR Descr = &Unmap->Descriptors[Index];
> +        PXENVBD_REQUEST         Request = __LookasideAlloc(&Pdo-
> >RequestList);
> +        if (Request == NULL)
> +            goto fail1;
> +
> +        ++SrbExt->Count;
> +        InsertTailList(&List, &Request->Entry);
> +
> +        Request->Srb            = Srb;
> +        Request->Id             = PdoGetTag(Pdo);
> +        Request->Operation      = BLKIF_OP_DISCARD;
> +        Request->FirstSector    = _byteswap_uint64(*(PULONG64)Descr-
> >StartingLba);
> +        Request->NrSectors      = _byteswap_ulong(*(PULONG)Descr-
> >LbaCount);
> +        Request->Flags          = 0;
> +        InitializeListHead(&Request->Segments);
> +    }
> +
> +    for (;;) {
> +        PXENVBD_REQUEST Request;
> +        PLIST_ENTRY     Entry;
> +
> +        Entry = RemoveHeadList(&List);
> +        if (Entry == &List)
> +            break;
> +
> +        Request = CONTAINING_RECORD(Entry, XENVBD_REQUEST, Entry);
> +        __PdoIncBlkifOpCount(Pdo, Request);
> +        QueueAppend(&Pdo->PreparedReqs, &Request->Entry);
> +    }
> 
> -    __PdoIncBlkifOpCount(Pdo, Request);
> -    QueueAppend(&Pdo->PreparedReqs, &Request->Entry);
>      return STATUS_SUCCESS;
> +
> +
> +fail1:
> +    for (;;) {
> +        PXENVBD_REQUEST Request;
> +        PLIST_ENTRY     Entry;
> +
> +        Entry = RemoveHeadList(&List);
> +        if (Entry == &List)
> +            break;
> +
> +        Request = CONTAINING_RECORD(Entry, XENVBD_REQUEST, Entry);
> +        __LookasideFree(&Pdo->RequestList, Request);
> +        --SrbExt->Count;
> +    }
> +    return STATUS_NO_MEMORY;
>  }
> 
> 
> //=========================================================
> ====================
> --
> 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 Thu Oct 30 10:24:07 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 30 Oct 2014 10:24: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 1Xjmtj-0001t8-Ir; Thu, 30 Oct 2014 10:24:07 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <Paul.Durrant@citrix.com>) id 1Xjmth-0001sz-RG
	for win-pv-devel@lists.xenproject.org; Thu, 30 Oct 2014 10:24:06 +0000
Received: from [193.109.254.147] by server-15.bemta-14.messagelabs.com id
	EE/24-02699-5C112545; Thu, 30 Oct 2014 10:24:05 +0000
X-Env-Sender: Paul.Durrant@citrix.com
X-Msg-Ref: server-12.tower-27.messagelabs.com!1414664644!13389516!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.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 25806 invoked from network); 30 Oct 2014 10:24:04 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-12.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	30 Oct 2014 10:24:04 -0000
X-IronPort-AV: E=Sophos;i="5.07,284,1413244800"; d="scan'208";a="26370573"
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: [PATCH 1/3] Prepare SCSIOP_UNMAP correctly
Thread-Index: AQHP8qIwyxoZaT4n/0+tKI4YbAqh0pxIcdqw
Date: Thu, 30 Oct 2014 10:24:02 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD01113A968@AMSPEX01CL01.citrite.net>
References: <1414495644-5948-1-git-send-email-owen.smith@citrix.com>
	<1414495644-5948-2-git-send-email-owen.smith@citrix.com>
In-Reply-To: <1414495644-5948-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/3] Prepare SCSIOP_UNMAP correctly
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 [mailto:owen.smith@citrix.com]
> Sent: 28 October 2014 11:27
> To: win-pv-devel@lists.xenproject.org
> Cc: Paul Durrant; Owen Smith
> Subject: [PATCH 1/3] Prepare SCSIOP_UNMAP correctly
> 
> SCSIOP_UNMAP requests contain a list of extents to discard
> and each BLKIF_OP_DISCARD only handles a single extent.
> Break a SRB doen into multiple ring requests as neccessary.
> 
> Signed-off-by: Owen Smith <owen.smith@citrix.com>

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

> ---
>  src/xenvbd/pdo.c | 69
> ++++++++++++++++++++++++++++++++++++++++++++------------
>  1 file changed, 54 insertions(+), 15 deletions(-)
> 
> diff --git a/src/xenvbd/pdo.c b/src/xenvbd/pdo.c
> index 9762944..3f18621 100644
> --- a/src/xenvbd/pdo.c
> +++ b/src/xenvbd/pdo.c
> @@ -1452,26 +1452,65 @@ PrepareUnmap(
>      __in PSCSI_REQUEST_BLOCK     Srb
>      )
>  {
> -    PXENVBD_SRBEXT  SrbExt = GetSrbExt(Srb);
> -    PXENVBD_REQUEST Request = __LookasideAlloc(&Pdo->RequestList);
> -    if (Request == NULL)
> -        return STATUS_UNSUCCESSFUL;
> +    PXENVBD_SRBEXT      SrbExt = GetSrbExt(Srb);
> +    PUNMAP_LIST_HEADER  Unmap = Srb->DataBuffer;
> +    ULONG               Count = _byteswap_ushort(*(PUSHORT)Unmap-
> >DataLength) /
> +                                _byteswap_ushort(*(PUSHORT)Unmap-
> >BlockDescrDataLength);
> +    ULONG               Index;
> +    LIST_ENTRY          List;
> 
> -    SrbExt->Count = 1;
> -    // mark the SRB as pending, completion will check for pending to detect
> failures
> +    InitializeListHead(&List);
> +    SrbExt->Count = 0;
>      Srb->SrbStatus = SRB_STATUS_PENDING;
> 
> -    Request->Srb        = Srb;
> -    Request->Id         = PdoGetTag(Pdo);
> -    Request->Operation  = BLKIF_OP_DISCARD;
> -    Request->FirstSector = Cdb_LogicalBlock(Srb);
> -    Request->NrSectors   = Cdb_TransferBlock(Srb);
> -    Request->Flags       = 0;
> -    InitializeListHead(&Request->Segments);
> +    for (Index = 0; Index < Count; ++Index) {
> +        PUNMAP_BLOCK_DESCRIPTOR Descr = &Unmap->Descriptors[Index];
> +        PXENVBD_REQUEST         Request = __LookasideAlloc(&Pdo-
> >RequestList);
> +        if (Request == NULL)
> +            goto fail1;
> +
> +        ++SrbExt->Count;
> +        InsertTailList(&List, &Request->Entry);
> +
> +        Request->Srb            = Srb;
> +        Request->Id             = PdoGetTag(Pdo);
> +        Request->Operation      = BLKIF_OP_DISCARD;
> +        Request->FirstSector    = _byteswap_uint64(*(PULONG64)Descr-
> >StartingLba);
> +        Request->NrSectors      = _byteswap_ulong(*(PULONG)Descr-
> >LbaCount);
> +        Request->Flags          = 0;
> +        InitializeListHead(&Request->Segments);
> +    }
> +
> +    for (;;) {
> +        PXENVBD_REQUEST Request;
> +        PLIST_ENTRY     Entry;
> +
> +        Entry = RemoveHeadList(&List);
> +        if (Entry == &List)
> +            break;
> +
> +        Request = CONTAINING_RECORD(Entry, XENVBD_REQUEST, Entry);
> +        __PdoIncBlkifOpCount(Pdo, Request);
> +        QueueAppend(&Pdo->PreparedReqs, &Request->Entry);
> +    }
> 
> -    __PdoIncBlkifOpCount(Pdo, Request);
> -    QueueAppend(&Pdo->PreparedReqs, &Request->Entry);
>      return STATUS_SUCCESS;
> +
> +
> +fail1:
> +    for (;;) {
> +        PXENVBD_REQUEST Request;
> +        PLIST_ENTRY     Entry;
> +
> +        Entry = RemoveHeadList(&List);
> +        if (Entry == &List)
> +            break;
> +
> +        Request = CONTAINING_RECORD(Entry, XENVBD_REQUEST, Entry);
> +        __LookasideFree(&Pdo->RequestList, Request);
> +        --SrbExt->Count;
> +    }
> +    return STATUS_NO_MEMORY;
>  }
> 
> 
> //=========================================================
> ====================
> --
> 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 Thu Oct 30 10:24:31 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 30 Oct 2014 10:24: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 1Xjmu7-0001wV-1A; Thu, 30 Oct 2014 10:24:31 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <Paul.Durrant@citrix.com>) id 1Xjmu5-0001wG-JZ
	for win-pv-devel@lists.xenproject.org; Thu, 30 Oct 2014 10:24:29 +0000
Received: from [193.109.254.147] by server-12.bemta-14.messagelabs.com id
	55/9A-02702-CD112545; Thu, 30 Oct 2014 10:24:28 +0000
X-Env-Sender: Paul.Durrant@citrix.com
X-Msg-Ref: server-9.tower-27.messagelabs.com!1414664668!13384399!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: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 14025 invoked from network); 30 Oct 2014 10:24:28 -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;
	30 Oct 2014 10:24:28 -0000
X-IronPort-AV: E=Sophos;i="5.07,284,1413244800"; d="scan'208";a="26370589"
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: [PATCH 2/3] Run XenVbd SDV after XenCrsh SDV
Thread-Index: AQHP8qIxo6BbXFlsMkWM6D3GOqHO/pxIcf6A
Date: Thu, 30 Oct 2014 10:24:27 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD01113A98C@AMSPEX01CL01.citrite.net>
References: <1414495644-5948-1-git-send-email-owen.smith@citrix.com>
	<1414495644-5948-3-git-send-email-owen.smith@citrix.com>
In-Reply-To: <1414495644-5948-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/3] Run XenVbd SDV after XenCrsh SDV
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 [mailto:owen.smith@citrix.com]
> Sent: 28 October 2014 11:27
> To: win-pv-devel@lists.xenproject.org
> Cc: Paul Durrant; Owen Smith
> Subject: [PATCH 2/3] Run XenVbd SDV after XenCrsh SDV
> 
> XenVbd's SDV build requires output from XenCrsh's SDV build.
> 
> Signed-off-by: Owen Smith <owen.smith@citrix.com>

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

> ---
>  build.py | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/build.py b/build.py
> index d681fb3..26261ad 100644
> --- a/build.py
> +++ b/build.py
> @@ -367,8 +367,8 @@ if __name__ == '__main__':
>      symstore_add(driver, release, 'x64', debug[sys.argv[1]], vs)
> 
>      if len(sys.argv) <= 2 or sdv[sys.argv[2]]:
> -        run_sdv('xenvbd', driver, vs)
>          run_sdv('xencrsh', driver, vs)
> +        run_sdv('xenvbd', driver, vs)
> 
>      archive(driver + '\\source.tgz', manifest().splitlines(), tgz=True)
>      archive(driver + '.tar', [driver,'revision'])
> --
> 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 Thu Oct 30 10:24:31 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 30 Oct 2014 10:24: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 1Xjmu7-0001wV-1A; Thu, 30 Oct 2014 10:24:31 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <Paul.Durrant@citrix.com>) id 1Xjmu5-0001wG-JZ
	for win-pv-devel@lists.xenproject.org; Thu, 30 Oct 2014 10:24:29 +0000
Received: from [193.109.254.147] by server-12.bemta-14.messagelabs.com id
	55/9A-02702-CD112545; Thu, 30 Oct 2014 10:24:28 +0000
X-Env-Sender: Paul.Durrant@citrix.com
X-Msg-Ref: server-9.tower-27.messagelabs.com!1414664668!13384399!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: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 14025 invoked from network); 30 Oct 2014 10:24:28 -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;
	30 Oct 2014 10:24:28 -0000
X-IronPort-AV: E=Sophos;i="5.07,284,1413244800"; d="scan'208";a="26370589"
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: [PATCH 2/3] Run XenVbd SDV after XenCrsh SDV
Thread-Index: AQHP8qIxo6BbXFlsMkWM6D3GOqHO/pxIcf6A
Date: Thu, 30 Oct 2014 10:24:27 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD01113A98C@AMSPEX01CL01.citrite.net>
References: <1414495644-5948-1-git-send-email-owen.smith@citrix.com>
	<1414495644-5948-3-git-send-email-owen.smith@citrix.com>
In-Reply-To: <1414495644-5948-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/3] Run XenVbd SDV after XenCrsh SDV
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 [mailto:owen.smith@citrix.com]
> Sent: 28 October 2014 11:27
> To: win-pv-devel@lists.xenproject.org
> Cc: Paul Durrant; Owen Smith
> Subject: [PATCH 2/3] Run XenVbd SDV after XenCrsh SDV
> 
> XenVbd's SDV build requires output from XenCrsh's SDV build.
> 
> Signed-off-by: Owen Smith <owen.smith@citrix.com>

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

> ---
>  build.py | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/build.py b/build.py
> index d681fb3..26261ad 100644
> --- a/build.py
> +++ b/build.py
> @@ -367,8 +367,8 @@ if __name__ == '__main__':
>      symstore_add(driver, release, 'x64', debug[sys.argv[1]], vs)
> 
>      if len(sys.argv) <= 2 or sdv[sys.argv[2]]:
> -        run_sdv('xenvbd', driver, vs)
>          run_sdv('xencrsh', driver, vs)
> +        run_sdv('xenvbd', driver, vs)
> 
>      archive(driver + '\\source.tgz', manifest().splitlines(), tgz=True)
>      archive(driver + '.tar', [driver,'revision'])
> --
> 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 Thu Oct 30 10:25:24 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 30 Oct 2014 10:25: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 1Xjmuy-00020t-4a; Thu, 30 Oct 2014 10:25:24 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <Paul.Durrant@citrix.com>) id 1Xjmuv-00020a-Ad
	for win-pv-devel@lists.xenproject.org; Thu, 30 Oct 2014 10:25:22 +0000
Received: from [85.158.139.211] by server-14.bemta-5.messagelabs.com id
	19/95-02746-01212545; Thu, 30 Oct 2014 10:25:20 +0000
X-Env-Sender: Paul.Durrant@citrix.com
X-Msg-Ref: server-16.tower-206.messagelabs.com!1414664704!8435577!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.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 5445 invoked from network); 30 Oct 2014 10:25:04 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-16.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	30 Oct 2014 10:25:04 -0000
X-IronPort-AV: E=Sophos;i="5.07,284,1413244800"; d="scan'208";a="26370603"
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: [PATCH 3/3] Add XenDisk device upper filter.
Thread-Index: AQHP8qIx01q8dzI3+02hNUazaT0YzpxIchtg
Date: Thu, 30 Oct 2014 10:25:01 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD01113A9A4@AMSPEX01CL01.citrite.net>
References: <1414495644-5948-1-git-send-email-owen.smith@citrix.com>
	<1414495644-5948-4-git-send-email-owen.smith@citrix.com>
In-Reply-To: <1414495644-5948-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/3] Add XenDisk device upper filter.
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 [mailto:owen.smith@citrix.com]
> Sent: 28 October 2014 11:27
> To: win-pv-devel@lists.xenproject.org
> Cc: Paul Durrant; Owen Smith
> Subject: [PATCH 3/3] Add XenDisk device upper filter.
> 
> XenDisk intercepts and translates
> IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES
> into SCSIOP_UNMAP SRBs. Storport will pass on these SCSIOP_UNMAP
> requests
> to XenVbd, which will create the appropriate BLKIF_OP_DISCARD requests.
> XenDisk is only neccessary because Storport does not do the translation
> to SCSIOP_UNMAPs.
> 
> Signed-off-by: Owen Smith <owen.smith@citrix.com>

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

> ---
>  build.py                            |    1 +
>  src/xendisk/assert.h                |  220 ++++
>  src/xendisk/debug.h                 |   94 ++
>  src/xendisk/driver.c                |  203 ++++
>  src/xendisk/driver.h                |   68 ++
>  src/xendisk/fdo.c                   | 1862 +++++++++++++++++++++++++++++++
>  src/xendisk/fdo.h                   |   78 ++
>  src/xendisk/mutex.h                 |  113 ++
>  src/xendisk/pdo.c                   | 2079
> +++++++++++++++++++++++++++++++++++
>  src/xendisk/pdo.h                   |   90 ++
>  src/xendisk/thread.c                |  225 ++++
>  src/xendisk/thread.h                |   73 ++
>  src/xendisk/types.h                 |   53 +
>  src/xendisk/util.h                  |  222 ++++
>  src/xendisk/xendisk.rc              |   56 +
>  src/xenvbd.inf                      |   18 +
>  vs2012/package/package.vcxproj      |    3 +
>  vs2012/xendisk/xendisk.vcxproj      |   84 ++
>  vs2012/xendisk/xendisk.vcxproj.user |    8 +
>  vs2012/xenvbd.sln                   |   28 +
>  vs2013/package/package.vcxproj      |    3 +
>  vs2013/xendisk/xendisk.vcxproj      |  112 ++
>  vs2013/xendisk/xendisk.vcxproj.user |    8 +
>  vs2013/xenvbd.sln                   |   28 +
>  24 files changed, 5729 insertions(+)
>  create mode 100644 src/xendisk/assert.h
>  create mode 100644 src/xendisk/debug.h
>  create mode 100644 src/xendisk/driver.c
>  create mode 100644 src/xendisk/driver.h
>  create mode 100644 src/xendisk/fdo.c
>  create mode 100644 src/xendisk/fdo.h
>  create mode 100644 src/xendisk/mutex.h
>  create mode 100644 src/xendisk/pdo.c
>  create mode 100644 src/xendisk/pdo.h
>  create mode 100644 src/xendisk/thread.c
>  create mode 100644 src/xendisk/thread.h
>  create mode 100644 src/xendisk/types.h
>  create mode 100644 src/xendisk/util.h
>  create mode 100644 src/xendisk/xendisk.rc
>  create mode 100644 vs2012/xendisk/xendisk.vcxproj
>  create mode 100644 vs2012/xendisk/xendisk.vcxproj.user
>  create mode 100644 vs2013/xendisk/xendisk.vcxproj
>  create mode 100644 vs2013/xendisk/xendisk.vcxproj.user
> 
> diff --git a/build.py b/build.py
> index 26261ad..3a71d0c 100644
> --- a/build.py
> +++ b/build.py
> @@ -368,6 +368,7 @@ if __name__ == '__main__':
> 
>      if len(sys.argv) <= 2 or sdv[sys.argv[2]]:
>          run_sdv('xencrsh', driver, vs)
> +        run_sdv('xendisk', driver, vs)
>          run_sdv('xenvbd', driver, vs)
> 
>      archive(driver + '\\source.tgz', manifest().splitlines(), tgz=True)
> diff --git a/src/xendisk/assert.h b/src/xendisk/assert.h
> new file mode 100644
> index 0000000..cd571bd
> --- /dev/null
> +++ b/src/xendisk/assert.h
> @@ -0,0 +1,220 @@
> +/* 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 _XENDISK_ASSERT_H
> +#define _XENDISK_ASSERT_H
> +
> +#include <ntddk.h>
> +
> +#include "debug.h"
> +
> +static FORCEINLINE VOID
> +__BugCheck(
> +    __in  ULONG       Code,
> +    __in_opt ULONG_PTR   Parameter1,
> +    __in_opt ULONG_PTR   Parameter2,
> +    __in_opt ULONG_PTR   Parameter3,
> +    __in_opt ULONG_PTR   Parameter4
> +    )
> +{
> +#pragma prefast(suppress:28159)
> +    KeBugCheckEx(Code,
> +                 Parameter1,
> +                 Parameter2,
> +                 Parameter3,
> +                 Parameter4);
> +}
> +
> +#define ASSERTION_FAILURE   0x0000DEAD
> +
> +
> +#define BUG(_TEXT)                                              \
> +        do {                                                    \
> +            const CHAR  *_Text = (_TEXT);                       \
> +            const CHAR  *_File = __FILE__;                      \
> +            ULONG       _Line = __LINE__;                       \
> +                                                                \
> +            Error("BUG: " _TEXT "\n");                          \
> +            __BugCheck(ASSERTION_FAILURE,                       \
> +                       (ULONG_PTR)_Text,                        \
> +                       (ULONG_PTR)_File,                        \
> +                       (ULONG_PTR)_Line,                        \
> +                       0);                                      \
> +        } while (FALSE)
> +
> +#define BUG_MSG(_TEXT1, _TEXT2)                                 \
> +        do {                                                    \
> +            const CHAR  *_Text1 = (_TEXT1);                     \
> +            const CHAR  *_Text2 = (_TEXT2);                     \
> +            const CHAR  *_File = __FILE__;                      \
> +            ULONG       _Line = __LINE__;                       \
> +                                                                \
> +            Error("BUG: " _TEXT1 " %s\n", _Text2);              \
> +            __BugCheck(ASSERTION_FAILURE,                       \
> +                       (ULONG_PTR)_Text1,                       \
> +                       (ULONG_PTR)_File,                        \
> +                       (ULONG_PTR)_Line,                        \
> +                       (ULONG_PTR)_Text2);                      \
> +        } while (FALSE)
> +
> +#define BUG_ON(_EXP)                           \
> +        if (_EXP) BUG(#_EXP)
> +
> +#define BUG_ON_MSG(_EXP, _TEXT)                \
> +        if (_EXP) BUG_MSG(#_EXP, _TEXT)
> +
> +#if DBG
> +
> +#define __NT_ASSERT(_EXP)                                       \
> +        ((!(_EXP)) ?                                            \
> +        (Error("ASSERTION FAILED: " #_EXP "\n"),                \
> +         __annotation(L"Debug", L"AssertFail", L#_EXP),         \
> +         DbgRaiseAssertionFailure(), FALSE) :                   \
> +        TRUE)
> +
> +#define __NT_ASSERT_MSG(_EXP, _TEXT)                            \
> +        ((!(_EXP)) ?                                            \
> +        (Error("ASSERTION FAILED: " #_EXP " " #_TEXT "\n"),     \
> +         __annotation(L"Debug", L"AssertFail", L#_EXP),         \
> +         DbgRaiseAssertionFailure(), FALSE) :                   \
> +        TRUE)
> +
> +#define __ASSERT(_EXP)              __NT_ASSERT(_EXP)
> +#define __ASSERT_MSG(_EXP, _TEXT)   __NT_ASSERT_MSG(_EXP, _TEXT)
> +
> +#else   // DBG
> +
> +#define __ASSERT(_EXP)              BUG_ON(!(_EXP))
> +#define __ASSERT_MSG(_EXP, _TEXT)   BUG_ON_MSG(!(_EXP), _TEXT)
> +
> +#endif  // DBG
> +
> +#undef  ASSERT
> +
> +#define ASSERT(_EXP)                    \
> +        do {                            \
> +            __ASSERT(_EXP);             \
> +            __analysis_assume(_EXP);    \
> +        } while (FALSE)
> +
> +#define ASSERT_MSG(_EXP, _TEXT)         \
> +        do {                            \
> +            __ASSERT_MSG(_EXP, _TEXT);  \
> +            __analysis_assume(_EXP);    \
> +        } while (FALSE)
> +
> +#define ASSERT3U(_X, _OP, _Y)                       \
> +        do {                                        \
> +            ULONGLONG   _Lval = (ULONGLONG)(_X);    \
> +            ULONGLONG   _Rval = (ULONGLONG)(_Y);    \
> +            if (!(_Lval _OP _Rval)) {               \
> +                Error("%s = %llu\n", #_X, _Lval);   \
> +                Error("%s = %llu\n", #_Y, _Rval);   \
> +                ASSERT(_X _OP _Y);                  \
> +            }                                       \
> +        } while (FALSE)
> +
> +#define ASSERT3S(_X, _OP, _Y)                       \
> +        do {                                        \
> +            LONGLONG    _Lval = (LONGLONG)(_X);     \
> +            LONGLONG    _Rval = (LONGLONG)(_Y);     \
> +            if (!(_Lval _OP _Rval)) {               \
> +                Error("%s = %lld\n", #_X, _Lval);   \
> +                Error("%s = %lld\n", #_Y, _Rval);   \
> +                ASSERT(_X _OP _Y);                  \
> +            }                                       \
> +        } while (FALSE)
> +
> +#define ASSERT3P(_X, _OP, _Y)                       \
> +        do {                                        \
> +            PVOID   _Lval = (PVOID)(_X);            \
> +            PVOID   _Rval = (PVOID)(_Y);            \
> +            if (!(_Lval _OP _Rval)) {               \
> +                Error("%s = %p\n", #_X, _Lval);     \
> +                Error("%s = %p\n", #_Y, _Rval);     \
> +                ASSERT(_X _OP _Y);                  \
> +            }                                       \
> +        } while (FALSE)
> +
> +#define ASSERTREFCOUNT(_X, _OP, _Y, _Z)             \
> +        do {                                        \
> +            LONG    _L = (LONG)(_X);                \
> +            LONG    _R = (LONG)(_Y);                \
> +            if (!(_L _OP _R)) {                     \
> +                Error("%s:%s = %d\n", (_Z), #_X, _L); \
> +                Error("%s:%s = %d\n", (_Z), #_Y, _R); \
> +                ASSERT_MSG(_X _OP _Y, (_Z));        \
> +            }                                       \
> +        } while (FALSE)
> +
> +#ifndef TEST_MEMORY
> +#define TEST_MEMORY DBG
> +#endif
> +
> +#if TEST_MEMORY
> +
> +__checkReturn
> +static __inline BOOLEAN
> +_IsZeroMemory(
> +    __in const PCHAR Caller,
> +    __in const PCHAR Name,
> +    __in PVOID       Buffer,
> +    __in ULONG       Length
> +    )
> +{
> +    ULONG           Offset;
> +
> +    Offset = 0;
> +    while (Offset < Length) {
> +        if (*((PUCHAR)Buffer + Offset) != 0) {
> +            Error("%s: non-zero byte in %s (0x%p+0x%x)\n", Caller, Name,
> Buffer, Offset);
> +            return FALSE;
> +        }
> +        Offset++;
> +    }
> +
> +    return TRUE;
> +}
> +
> +#define IsZeroMemory(_Buffer, _Length) \
> +        _IsZeroMemory(__FUNCTION__, #_Buffer, (_Buffer), (_Length))
> +
> +#else   // TEST_MEMORY
> +
> +#define IsZeroMemory(_Buffer, _Length)  TRUE
> +
> +#endif  // TEST_MEMORY
> +
> +#define IMPLY(_X, _Y)   (!(_X) || (_Y))
> +#define EQUIV(_X, _Y)   (IMPLY((_X), (_Y)) && IMPLY((_Y), (_X)))
> +
> +#endif  // _XENDISK_ASSERT_H
> +
> diff --git a/src/xendisk/debug.h b/src/xendisk/debug.h
> new file mode 100644
> index 0000000..f592f86
> --- /dev/null
> +++ b/src/xendisk/debug.h
> @@ -0,0 +1,94 @@
> +/* 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 _DEBUG_H
> +#define _DEBUG_H
> +
> +#include <ntddk.h>
> +#include <stdarg.h>
> +
> +#ifdef  _SDV_
> +#define __MODULE__ ""
> +#endif
> +
> +// DEBUG_FILTER_MASKs
> +// Set these to see relevant output
> +// ERROR        0x00000001
> +// WARNING      0x00000002
> +// TRACE        0x00000004
> +// INFO         0x00000008
> +
> +#pragma warning(disable:4127)   // conditional expression is constant
> +
> +//
> +// Debug Output and Logging
> +//
> +static __inline VOID
> +__DebugMessage(
> +    __in    ULONG       Level,
> +    __in __nullterminated const CHAR  *Prefix,
> +    __in __nullterminated const CHAR  *Format,
> +    ...
> +    )
> +{
> +    va_list         Arguments;
> +
> +    va_start(Arguments, Format);
> +
> +#pragma prefast(suppress:6001) // Using uninitialized memory
> +    vDbgPrintExWithPrefix(Prefix,
> +                          DPFLTR_IHVDRIVER_ID,
> +                          Level,
> +                          Format,
> +                          Arguments);
> +    va_end(Arguments);
> +}
> +
> +#define Error(...)  \
> +        __DebugMessage(DPFLTR_ERROR_LEVEL, __MODULE__ "|"
> __FUNCTION__ ":", __VA_ARGS__)
> +
> +#define Warning(...)  \
> +        __DebugMessage(DPFLTR_WARNING_LEVEL, __MODULE__ "|"
> __FUNCTION__ ":", __VA_ARGS__)
> +
> +#if DBG
> +#define Trace(...)  \
> +        __DebugMessage(DPFLTR_TRACE_LEVEL, __MODULE__ "|"
> __FUNCTION__ ":", __VA_ARGS__)
> +#else   // DBG
> +#define Trace(...) \
> +        (VOID)(__VA_ARGS__)
> +#endif  // DBG
> +
> +#define Verbose(...) \
> +        __DebugMessage(DPFLTR_INFO_LEVEL, __MODULE__ "|"
> __FUNCTION__ ":", __VA_ARGS__)
> +
> +#include "assert.h"
> +
> +#endif  // _DEBUG_H
> diff --git a/src/xendisk/driver.c b/src/xendisk/driver.c
> new file mode 100644
> index 0000000..743fc61
> --- /dev/null
> +++ b/src/xendisk/driver.c
> @@ -0,0 +1,203 @@
> +/* 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 "driver.h"
> +#include "util.h"
> +#include "debug.h"
> +#include "assert.h"
> +#include <version.h>
> +
> +extern PULONG       InitSafeBootMode;
> +
> +typedef struct _XENDISK_DRIVER {
> +    PDRIVER_OBJECT              DriverObject;
> +} XENDISK_DRIVER, *PXENDISK_DRIVER;
> +
> +static XENDISK_DRIVER   Driver;
> +
> +static FORCEINLINE VOID
> +__DriverSetDriverObject(
> +    IN  PDRIVER_OBJECT  DriverObject
> +    )
> +{
> +    Driver.DriverObject = DriverObject;
> +}
> +
> +static FORCEINLINE PDRIVER_OBJECT
> +__DriverGetDriverObject(
> +    VOID
> +    )
> +{
> +    return Driver.DriverObject;
> +}
> +
> +PDRIVER_OBJECT
> +DriverGetDriverObject(
> +    VOID
> +    )
> +{
> +    return __DriverGetDriverObject();
> +}
> +
> +DRIVER_UNLOAD   DriverUnload;
> +
> +VOID
> +DriverUnload(
> +    IN  PDRIVER_OBJECT  DriverObject
> +    )
> +{
> +    ASSERT3P(DriverObject, ==, __DriverGetDriverObject());
> +
> +    Trace("====>\n");
> +
> +    __DriverSetDriverObject(NULL);
> +
> +    ASSERT(IsZeroMemory(&Driver, sizeof (XENDISK_DRIVER)));
> +
> +    Trace("<====\n");
> +}
> +
> +DRIVER_ADD_DEVICE   AddDevice;
> +
> +NTSTATUS
> +#pragma prefast(suppress:28152) // Does not clear
> DO_DEVICE_INITIALIZING
> +AddDevice(
> +    IN  PDRIVER_OBJECT  DriverObject,
> +    IN  PDEVICE_OBJECT  PhysicalDeviceObject
> +    )
> +{
> +    NTSTATUS            status;
> +
> +    ASSERT3P(DriverObject, ==, __DriverGetDriverObject());
> +
> +    status = FdoCreate(PhysicalDeviceObject);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    return STATUS_SUCCESS;
> +
> +fail1:
> +    Error("fail1 (%08x)\n", status);
> +
> +    return status;
> +}
> +
> +DRIVER_DISPATCH Dispatch;
> +
> +NTSTATUS
> +Dispatch(
> +    IN PDEVICE_OBJECT   DeviceObject,
> +    IN PIRP             Irp
> +    )
> +{
> +    PXENDISK_DX         Dx;
> +    NTSTATUS            status;
> +
> +    Dx = (PXENDISK_DX)DeviceObject->DeviceExtension;
> +    ASSERT3P(Dx->DeviceObject, ==, DeviceObject);
> +
> +    if (Dx->DevicePnpState == Deleted) {
> +        status = STATUS_NO_SUCH_DEVICE;
> +
> +        Irp->IoStatus.Status = status;
> +        IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +        goto done;
> +    }
> +
> +    status = STATUS_NOT_SUPPORTED;
> +    switch (Dx->Type) {
> +    case PHYSICAL_DEVICE_OBJECT: {
> +        PXENDISK_PDO    Pdo = Dx->Pdo;
> +
> +        status = PdoDispatch(Pdo, Irp);
> +        break;
> +    }
> +    case FUNCTION_DEVICE_OBJECT: {
> +        PXENDISK_FDO    Fdo = Dx->Fdo;
> +
> +        status = FdoDispatch(Fdo, Irp);
> +        break;
> +    }
> +    default:
> +        ASSERT(FALSE);
> +        break;
> +    }
> +
> +done:
> +    return status;
> +}
> +
> +DRIVER_INITIALIZE   DriverEntry;
> +
> +NTSTATUS
> +DriverEntry(
> +    IN  PDRIVER_OBJECT  DriverObject,
> +    IN  PUNICODE_STRING RegistryPath
> +    )
> +{
> +    ULONG               Index;
> +
> +    ASSERT3P(__DriverGetDriverObject(), ==, NULL);
> +    UNREFERENCED_PARAMETER(RegistryPath);
> +
> +    ExInitializeDriverRuntime(DrvRtPoolNxOptIn);
> +
> +    Trace("====>\n");
> +
> +    __DriverSetDriverObject(DriverObject);
> +
> +    DriverObject->DriverUnload = DriverUnload;
> +
> +    if (*InitSafeBootMode > 0)
> +        goto done;
> +
> +    Verbose("XENDISK %d.%d.%d (%d) (%02d.%02d.%04d)\n",
> +            MAJOR_VERSION,
> +            MINOR_VERSION,
> +            MICRO_VERSION,
> +            BUILD_NUMBER,
> +            DAY,
> +            MONTH,
> +            YEAR);
> +
> +    DriverObject->DriverExtension->AddDevice = AddDevice;
> +
> +    for (Index = 0; Index <= IRP_MJ_MAXIMUM_FUNCTION; Index++) {
> +#pragma prefast(suppress:28169) // No __drv_dispatchType annotation
> +#pragma prefast(suppress:28168) // No matching __drv_dispatchType
> annotation for IRP_MJ_CREATE
> +        DriverObject->MajorFunction[Index] = Dispatch;
> +    }
> +
> +done:
> +    Trace("<====\n");
> +    return STATUS_SUCCESS;
> +}
> diff --git a/src/xendisk/driver.h b/src/xendisk/driver.h
> new file mode 100644
> index 0000000..b47e21b
> --- /dev/null
> +++ b/src/xendisk/driver.h
> @@ -0,0 +1,68 @@
> +/* 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 _XENDISK_DRIVER_H
> +#define _XENDISK_DRIVER_H
> +
> +#include "fdo.h"
> +#include "pdo.h"
> +
> +extern PDRIVER_OBJECT
> +DriverGetDriverObject(
> +    VOID
> +    );
> +
> +#pragma warning(push)
> +#pragma warning(disable:4201) // nonstandard extension used : nameless
> struct/union
> +
> +typedef struct _XENDISK_DX {
> +    PDEVICE_OBJECT      DeviceObject;
> +    DEVICE_OBJECT_TYPE  Type;
> +
> +    DEVICE_PNP_STATE    DevicePnpState;
> +    DEVICE_PNP_STATE    PreviousDevicePnpState;
> +
> +    SYSTEM_POWER_STATE  SystemPowerState;
> +    DEVICE_POWER_STATE  DevicePowerState;
> +
> +    IO_REMOVE_LOCK      RemoveLock;
> +
> +    LIST_ENTRY          ListEntry;
> +
> +    union {
> +        PXENDISK_FDO    Fdo;
> +        PXENDISK_PDO    Pdo;
> +    };
> +} XENDISK_DX, *PXENDISK_DX;
> +
> +#pragma warning(pop)
> +
> +#endif // _XENDISK_DRIVER_H
> diff --git a/src/xendisk/fdo.c b/src/xendisk/fdo.c
> new file mode 100644
> index 0000000..771c82e
> --- /dev/null
> +++ b/src/xendisk/fdo.c
> @@ -0,0 +1,1862 @@
> +/* 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.
> + */
> +
> +#define INITGUID 1
> +
> +#include <ntddk.h>
> +#include <wdmguid.h>
> +#include <ntstrsafe.h>
> +#include <stdlib.h>
> +#include <names.h>
> +
> +#include "driver.h"
> +#include "fdo.h"
> +#include "pdo.h"
> +#include "thread.h"
> +#include "mutex.h"
> +#include "debug.h"
> +#include "assert.h"
> +#include "util.h"
> +
> +#define FDO_TAG 'ODF'
> +
> +struct _XENDISK_FDO {
> +    PXENDISK_DX                     Dx;
> +    PDEVICE_OBJECT                  LowerDeviceObject;
> +    PDEVICE_OBJECT                  PhysicalDeviceObject;
> +
> +    PXENDISK_THREAD                 SystemPowerThread;
> +    PIRP                            SystemPowerIrp;
> +    PXENDISK_THREAD                 DevicePowerThread;
> +    PIRP                            DevicePowerIrp;
> +
> +    MUTEX                           Mutex;
> +    ULONG                           References;
> +};
> +
> +static FORCEINLINE PVOID
> +__FdoAllocate(
> +    IN  ULONG   Length
> +    )
> +{
> +    return __AllocateNonPagedPoolWithTag(__FUNCTION__, __LINE__,
> Length, FDO_TAG);
> +}
> +
> +static FORCEINLINE VOID
> +__FdoFree(
> +    IN  PVOID   Buffer
> +    )
> +{
> +    __FreePoolWithTag(Buffer, FDO_TAG);
> +}
> +
> +static FORCEINLINE VOID
> +__FdoSetDevicePnpState(
> +    IN  PXENDISK_FDO        Fdo,
> +    IN  DEVICE_PNP_STATE    State
> +    )
> +{
> +    PXENDISK_DX             Dx = Fdo->Dx;
> +
> +    // We can never transition out of the deleted state
> +    ASSERT(Dx->DevicePnpState != Deleted || State == Deleted);
> +
> +    Dx->PreviousDevicePnpState = Dx->DevicePnpState;
> +    Dx->DevicePnpState = State;
> +}
> +
> +static FORCEINLINE VOID
> +__FdoRestoreDevicePnpState(
> +    IN  PXENDISK_FDO        Fdo,
> +    IN  DEVICE_PNP_STATE    State
> +    )
> +{
> +    PXENDISK_DX             Dx = Fdo->Dx;
> +
> +    if (Dx->DevicePnpState == State)
> +        Dx->DevicePnpState = Dx->PreviousDevicePnpState;
> +}
> +
> +static FORCEINLINE DEVICE_PNP_STATE
> +__FdoGetDevicePnpState(
> +    IN  PXENDISK_FDO    Fdo
> +    )
> +{
> +    PXENDISK_DX         Dx = Fdo->Dx;
> +
> +    return Dx->DevicePnpState;
> +}
> +
> +static FORCEINLINE VOID
> +__FdoSetDevicePowerState(
> +    IN  PXENDISK_FDO        Fdo,
> +    IN  DEVICE_POWER_STATE  State
> +    )
> +{
> +    PXENDISK_DX             Dx = Fdo->Dx;
> +
> +    Dx->DevicePowerState = State;
> +}
> +
> +static FORCEINLINE DEVICE_POWER_STATE
> +__FdoGetDevicePowerState(
> +    IN  PXENDISK_FDO    Fdo
> +    )
> +{
> +    PXENDISK_DX         Dx = Fdo->Dx;
> +
> +    return Dx->DevicePowerState;
> +}
> +
> +static FORCEINLINE VOID
> +__FdoSetSystemPowerState(
> +    IN  PXENDISK_FDO        Fdo,
> +    IN  SYSTEM_POWER_STATE  State
> +    )
> +{
> +    PXENDISK_DX              Dx = Fdo->Dx;
> +
> +    Dx->SystemPowerState = State;
> +}
> +
> +static FORCEINLINE SYSTEM_POWER_STATE
> +__FdoGetSystemPowerState(
> +    IN  PXENDISK_FDO    Fdo
> +    )
> +{
> +    PXENDISK_DX         Dx = Fdo->Dx;
> +
> +    return Dx->SystemPowerState;
> +}
> +
> +static FORCEINLINE PDEVICE_OBJECT
> +__FdoGetPhysicalDeviceObject(
> +    IN  PXENDISK_FDO    Fdo
> +    )
> +{
> +    return Fdo->PhysicalDeviceObject;
> +}
> +
> +VOID
> +FdoAddPhysicalDeviceObject(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PDEVICE_OBJECT  DeviceObject
> +    )
> +{
> +    PXENDISK_DX         Dx;
> +
> +    Dx = (PXENDISK_DX)DeviceObject->DeviceExtension;
> +    ASSERT3U(Dx->Type, ==, PHYSICAL_DEVICE_OBJECT);
> +
> +    InsertTailList(&Fdo->Dx->ListEntry, &Dx->ListEntry);
> +    ASSERT3U(Fdo->References, !=, 0);
> +    Fdo->References++;
> +}
> +
> +VOID
> +FdoRemovePhysicalDeviceObject(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PDEVICE_OBJECT  DeviceObject
> +    )
> +{
> +    PXENDISK_DX         Dx;
> +
> +    Dx = (PXENDISK_DX)DeviceObject->DeviceExtension;
> +    ASSERT3U(Dx->Type, ==, PHYSICAL_DEVICE_OBJECT);
> +
> +    RemoveEntryList(&Dx->ListEntry);
> +    ASSERT3U(Fdo->References, !=, 0);
> +    --Fdo->References;
> +}
> +
> +static FORCEINLINE VOID
> +__FdoAcquireMutex(
> +    IN  PXENDISK_FDO     Fdo
> +    )
> +{
> +    AcquireMutex(&Fdo->Mutex);
> +}
> +
> +VOID
> +FdoAcquireMutex(
> +    IN  PXENDISK_FDO     Fdo
> +    )
> +{
> +    __FdoAcquireMutex(Fdo);
> +}
> +
> +static FORCEINLINE VOID
> +__FdoReleaseMutex(
> +    IN  PXENDISK_FDO     Fdo
> +    )
> +{
> +    ReleaseMutex(&Fdo->Mutex);
> +}
> +
> +VOID
> +FdoReleaseMutex(
> +    IN  PXENDISK_FDO     Fdo
> +    )
> +{
> +    __FdoReleaseMutex(Fdo);
> +
> +    if (Fdo->References == 0)
> +        FdoDestroy(Fdo);
> +}
> +
> +static FORCEINLINE VOID
> +__FdoEnumerate(
> +    IN  PXENDISK_FDO        Fdo,
> +    IN  PDEVICE_RELATIONS   Relations
> +    )
> +{
> +    PDEVICE_OBJECT          *PhysicalDeviceObject;
> +    ULONG                   Count;
> +    PLIST_ENTRY             ListEntry;
> +    ULONG                   Index;
> +    NTSTATUS                status;
> +
> +    Count = Relations->Count;
> +    ASSERT(Count != 0);
> +
> +    PhysicalDeviceObject = __FdoAllocate(sizeof (PDEVICE_OBJECT) *
> Count);
> +
> +    status = STATUS_NO_MEMORY;
> +    if (PhysicalDeviceObject == NULL)
> +        goto fail1;
> +
> +    RtlCopyMemory(PhysicalDeviceObject,
> +                  Relations->Objects,
> +                  sizeof (PDEVICE_OBJECT) * Count);
> +
> +    AcquireMutex(&Fdo->Mutex);
> +
> +    // Remove any PDOs that do not appear in the device list
> +    ListEntry = Fdo->Dx->ListEntry.Flink;
> +    while (ListEntry != &Fdo->Dx->ListEntry) {
> +        PLIST_ENTRY     Next = ListEntry->Flink;
> +        PXENDISK_DX     Dx = CONTAINING_RECORD(ListEntry, XENDISK_DX,
> ListEntry);
> +        PXENDISK_PDO    Pdo = Dx->Pdo;
> +        BOOLEAN         Missing;
> +
> +        Missing = TRUE;
> +        for (Index = 0; Index < Count; Index++) {
> +            if (PdoGetPhysicalDeviceObject(Pdo) ==
> PhysicalDeviceObject[Index]) {
> +                Missing = FALSE;
> +#pragma prefast(suppress:6387)  // PhysicalDeviceObject[Index] could be
> NULL
> +                ObDereferenceObject(PhysicalDeviceObject[Index]);
> +                PhysicalDeviceObject[Index] = NULL; // avoid duplication
> +                break;
> +            }
> +        }
> +
> +        if (Missing && !PdoIsMissing(Pdo)) {
> +            if (PdoGetDevicePnpState(Pdo) == Present) {
> +                PdoSetDevicePnpState(Pdo, Deleted);
> +                PdoDestroy(Pdo);
> +            } else {
> +                PdoSetMissing(Pdo, "device disappeared");
> +            }
> +        }
> +
> +        ListEntry = Next;
> +    }
> +
> +    // Walk the list and create PDO filters for any new devices
> +    for (Index = 0; Index < Count; Index++) {
> +#pragma warning(suppress:6385)  // Reading invalid data from
> 'PhysicalDeviceObject'
> +        if (PhysicalDeviceObject[Index] != NULL) {
> +            (VOID) PdoCreate(Fdo,
> +                             PhysicalDeviceObject[Index]);
> +            ObDereferenceObject(PhysicalDeviceObject[Index]);
> +        }
> +    }
> +
> +    ReleaseMutex(&Fdo->Mutex);
> +
> +    __FdoFree(PhysicalDeviceObject);
> +    return;
> +
> +fail1:
> +    Error("fail1 (%08x)\n", status);
> +}
> +
> +__drv_functionClass(IO_COMPLETION_ROUTINE)
> +__drv_sameIRQL
> +static NTSTATUS
> +__FdoForwardIrpSynchronously(
> +    IN  PDEVICE_OBJECT  DeviceObject,
> +    IN  PIRP            Irp,
> +    IN  PVOID           Context
> +    )
> +{
> +    PKEVENT             Event = Context;
> +
> +    UNREFERENCED_PARAMETER(DeviceObject);
> +    UNREFERENCED_PARAMETER(Irp);
> +
> +    KeSetEvent(Event, IO_NO_INCREMENT, FALSE);
> +
> +    return STATUS_MORE_PROCESSING_REQUIRED;
> +}
> +
> +static NTSTATUS
> +FdoForwardIrpSynchronously(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    KEVENT              Event;
> +    NTSTATUS            status;
> +
> +    ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
> +
> +    KeInitializeEvent(&Event, NotificationEvent, FALSE);
> +
> +    IoCopyCurrentIrpStackLocationToNext(Irp);
> +    IoSetCompletionRoutine(Irp,
> +                           __FdoForwardIrpSynchronously,
> +                           &Event,
> +                           TRUE,
> +                           TRUE,
> +                           TRUE);
> +
> +    status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
> +    if (status == STATUS_PENDING) {
> +        (VOID) KeWaitForSingleObject(&Event,
> +                                     Executive,
> +                                     KernelMode,
> +                                     FALSE,
> +                                     NULL);
> +        status = Irp->IoStatus.Status;
> +    } else {
> +        ASSERT3U(status, ==, Irp->IoStatus.Status);
> +    }
> +
> +    return status;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +FdoStartDevice(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    POWER_STATE         PowerState;
> +    NTSTATUS            status;
> +
> +    status = IoAcquireRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    status = FdoForwardIrpSynchronously(Fdo, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto fail2;
> +
> +    __FdoSetSystemPowerState(Fdo, PowerSystemWorking);
> +    __FdoSetDevicePowerState(Fdo, PowerDeviceD0);
> +
> +    PowerState.DeviceState = PowerDeviceD0;
> +    PoSetPowerState(Fdo->Dx->DeviceObject,
> +                    DevicePowerState,
> +                    PowerState);
> +
> +    __FdoSetDevicePnpState(Fdo, Started);
> +
> +    IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +
> +fail2:
> +    Error("fail2\n");
> +
> +    IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +
> +fail1:
> +    Error("fail1 (%08x)\n", status);
> +
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +__drv_functionClass(IO_COMPLETION_ROUTINE)
> +__drv_sameIRQL
> +static NTSTATUS
> +__FdoQueryStopDevice(
> +    IN  PDEVICE_OBJECT  DeviceObject,
> +    IN  PIRP            Irp,
> +    IN  PVOID           Context
> +    )
> +{
> +    PXENDISK_FDO        Fdo = Context;
> +
> +    UNREFERENCED_PARAMETER(DeviceObject);
> +
> +    if (Irp->PendingReturned)
> +        IoMarkIrpPending(Irp);
> +
> +    IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +
> +    return STATUS_SUCCESS;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +FdoQueryStopDevice(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    NTSTATUS            status;
> +
> +    status = IoAcquireRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    __FdoSetDevicePnpState(Fdo, StopPending);
> +    Irp->IoStatus.Status = STATUS_SUCCESS;
> +
> +    IoCopyCurrentIrpStackLocationToNext(Irp);
> +    IoSetCompletionRoutine(Irp,
> +                           __FdoQueryStopDevice,
> +                           Fdo,
> +                           TRUE,
> +                           TRUE,
> +                           TRUE);
> +
> +    status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
> +
> +    return status;
> +
> +fail1:
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +__drv_functionClass(IO_COMPLETION_ROUTINE)
> +__drv_sameIRQL
> +static NTSTATUS
> +__FdoCancelStopDevice(
> +    IN  PDEVICE_OBJECT  DeviceObject,
> +    IN  PIRP            Irp,
> +    IN  PVOID           Context
> +    )
> +{
> +    PXENDISK_FDO        Fdo = Context;
> +
> +    UNREFERENCED_PARAMETER(DeviceObject);
> +
> +    if (Irp->PendingReturned)
> +        IoMarkIrpPending(Irp);
> +
> +    IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +
> +    return STATUS_SUCCESS;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +FdoCancelStopDevice(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    NTSTATUS            status;
> +
> +    status = IoAcquireRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    Irp->IoStatus.Status = STATUS_SUCCESS;
> +
> +    __FdoRestoreDevicePnpState(Fdo, StopPending);
> +
> +    IoCopyCurrentIrpStackLocationToNext(Irp);
> +    IoSetCompletionRoutine(Irp,
> +                           __FdoCancelStopDevice,
> +                           Fdo,
> +                           TRUE,
> +                           TRUE,
> +                           TRUE);
> +
> +    status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
> +
> +    return status;
> +
> +fail1:
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +__drv_functionClass(IO_COMPLETION_ROUTINE)
> +__drv_sameIRQL
> +static NTSTATUS
> +__FdoStopDevice(
> +    IN  PDEVICE_OBJECT  DeviceObject,
> +    IN  PIRP            Irp,
> +    IN  PVOID           Context
> +    )
> +{
> +    PXENDISK_FDO        Fdo = Context;
> +
> +    UNREFERENCED_PARAMETER(DeviceObject);
> +
> +    if (Irp->PendingReturned)
> +        IoMarkIrpPending(Irp);
> +
> +    IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +
> +    return STATUS_SUCCESS;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +FdoStopDevice(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    POWER_STATE         PowerState;
> +    NTSTATUS            status;
> +
> +    status = IoAcquireRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    if (__FdoGetDevicePowerState(Fdo) != PowerDeviceD0)
> +        goto done;
> +
> +    PowerState.DeviceState = PowerDeviceD3;
> +    PoSetPowerState(Fdo->Dx->DeviceObject,
> +                    DevicePowerState,
> +                    PowerState);
> +
> +    __FdoSetDevicePowerState(Fdo, PowerDeviceD3);
> +    __FdoSetSystemPowerState(Fdo, PowerSystemShutdown);
> +
> +done:
> +    __FdoSetDevicePnpState(Fdo, Stopped);
> +    Irp->IoStatus.Status = STATUS_SUCCESS;
> +
> +    IoCopyCurrentIrpStackLocationToNext(Irp);
> +    IoSetCompletionRoutine(Irp,
> +                           __FdoStopDevice,
> +                           Fdo,
> +                           TRUE,
> +                           TRUE,
> +                           TRUE);
> +
> +    status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
> +
> +    return status;
> +
> +fail1:
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +__drv_functionClass(IO_COMPLETION_ROUTINE)
> +__drv_sameIRQL
> +static NTSTATUS
> +__FdoQueryRemoveDevice(
> +    IN  PDEVICE_OBJECT  DeviceObject,
> +    IN  PIRP            Irp,
> +    IN  PVOID           Context
> +    )
> +{
> +    PXENDISK_FDO        Fdo = Context;
> +
> +    UNREFERENCED_PARAMETER(DeviceObject);
> +
> +    if (Irp->PendingReturned)
> +        IoMarkIrpPending(Irp);
> +
> +    IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +
> +    return STATUS_SUCCESS;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +FdoQueryRemoveDevice(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    NTSTATUS            status;
> +
> +    status = IoAcquireRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    __FdoSetDevicePnpState(Fdo, RemovePending);
> +    Irp->IoStatus.Status = STATUS_SUCCESS;
> +
> +    IoCopyCurrentIrpStackLocationToNext(Irp);
> +    IoSetCompletionRoutine(Irp,
> +                           __FdoQueryRemoveDevice,
> +                           Fdo,
> +                           TRUE,
> +                           TRUE,
> +                           TRUE);
> +
> +    status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
> +
> +    return status;
> +
> +fail1:
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +__drv_functionClass(IO_COMPLETION_ROUTINE)
> +__drv_sameIRQL
> +static NTSTATUS
> +__FdoCancelRemoveDevice(
> +    IN  PDEVICE_OBJECT  DeviceObject,
> +    IN  PIRP            Irp,
> +    IN  PVOID           Context
> +    )
> +{
> +    PXENDISK_FDO        Fdo = Context;
> +
> +    UNREFERENCED_PARAMETER(DeviceObject);
> +
> +    if (Irp->PendingReturned)
> +        IoMarkIrpPending(Irp);
> +
> +    IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +
> +    return STATUS_SUCCESS;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +FdoCancelRemoveDevice(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    NTSTATUS            status;
> +
> +    status = IoAcquireRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    __FdoRestoreDevicePnpState(Fdo, RemovePending);
> +    Irp->IoStatus.Status = STATUS_SUCCESS;
> +
> +    IoCopyCurrentIrpStackLocationToNext(Irp);
> +    IoSetCompletionRoutine(Irp,
> +                           __FdoCancelRemoveDevice,
> +                           Fdo,
> +                           TRUE,
> +                           TRUE,
> +                           TRUE);
> +
> +    status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
> +
> +    return status;
> +
> +fail1:
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +__drv_functionClass(IO_COMPLETION_ROUTINE)
> +__drv_sameIRQL
> +static NTSTATUS
> +__FdoSurpriseRemoval(
> +    IN  PDEVICE_OBJECT  DeviceObject,
> +    IN  PIRP            Irp,
> +    IN  PVOID           Context
> +    )
> +{
> +    PXENDISK_FDO        Fdo = Context;
> +
> +    UNREFERENCED_PARAMETER(DeviceObject);
> +
> +    if (Irp->PendingReturned)
> +        IoMarkIrpPending(Irp);
> +
> +    IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +
> +    return STATUS_SUCCESS;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +FdoSurpriseRemoval(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    NTSTATUS            status;
> +
> +    status = IoAcquireRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    __FdoSetDevicePnpState(Fdo, SurpriseRemovePending);
> +    Irp->IoStatus.Status = STATUS_SUCCESS;
> +
> +    IoCopyCurrentIrpStackLocationToNext(Irp);
> +    IoSetCompletionRoutine(Irp,
> +                           __FdoSurpriseRemoval,
> +                           Fdo,
> +                           TRUE,
> +                           TRUE,
> +                           TRUE);
> +
> +    status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
> +
> +    return status;
> +
> +fail1:
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +FdoRemoveDevice(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    POWER_STATE         PowerState;
> +    NTSTATUS            status;
> +
> +    status = IoAcquireRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    if (__FdoGetDevicePowerState(Fdo) != PowerDeviceD0)
> +        goto done;
> +
> +    PowerState.DeviceState = PowerDeviceD3;
> +    PoSetPowerState(Fdo->Dx->DeviceObject,
> +                    DevicePowerState,
> +                    PowerState);
> +
> +    __FdoSetDevicePowerState(Fdo, PowerDeviceD3);
> +    __FdoSetSystemPowerState(Fdo, PowerSystemShutdown);
> +
> +done:
> +    __FdoSetDevicePnpState(Fdo, Deleted);
> +
> +    IoReleaseRemoveLockAndWait(&Fdo->Dx->RemoveLock, Irp);
> +
> +    status = FdoForwardIrpSynchronously(Fdo, Irp);
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    AcquireMutex(&Fdo->Mutex);
> +    ASSERT3U(Fdo->References, !=, 0);
> +    --Fdo->References;
> +    ReleaseMutex(&Fdo->Mutex);
> +
> +    if (Fdo->References == 0)
> +        FdoDestroy(Fdo);
> +
> +    return status;
> +
> +fail1:
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +__drv_functionClass(IO_COMPLETION_ROUTINE)
> +__drv_sameIRQL
> +static NTSTATUS
> +__FdoQueryDeviceRelations(
> +    IN  PDEVICE_OBJECT  DeviceObject,
> +    IN  PIRP            Irp,
> +    IN  PVOID           Context
> +    )
> +{
> +    PKEVENT             Event = Context;
> +
> +    UNREFERENCED_PARAMETER(DeviceObject);
> +    UNREFERENCED_PARAMETER(Irp);
> +
> +    KeSetEvent(Event, IO_NO_INCREMENT, FALSE);
> +
> +    return STATUS_MORE_PROCESSING_REQUIRED;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +FdoQueryDeviceRelations(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    KEVENT              Event;
> +    PIO_STACK_LOCATION  StackLocation;
> +    ULONG               Size;
> +    PDEVICE_RELATIONS   Relations;
> +    PLIST_ENTRY         ListEntry;
> +    ULONG               Count;
> +    NTSTATUS            status;
> +
> +    status = IoAcquireRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    KeInitializeEvent(&Event, NotificationEvent, FALSE);
> +
> +    IoCopyCurrentIrpStackLocationToNext(Irp);
> +    IoSetCompletionRoutine(Irp,
> +                           __FdoQueryDeviceRelations,
> +                           &Event,
> +                           TRUE,
> +                           TRUE,
> +                           TRUE);
> +
> +    status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
> +    if (status == STATUS_PENDING) {
> +        (VOID) KeWaitForSingleObject(&Event,
> +                                     Executive,
> +                                     KernelMode,
> +                                     FALSE,
> +                                     NULL);
> +        status = Irp->IoStatus.Status;
> +    } else {
> +        ASSERT3U(status, ==, Irp->IoStatus.Status);
> +    }
> +
> +    if (!NT_SUCCESS(status))
> +        goto fail2;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    if (StackLocation->Parameters.QueryDeviceRelations.Type !=
> BusRelations)
> +        goto done;
> +
> +    Relations = (PDEVICE_RELATIONS)Irp->IoStatus.Information;
> +
> +    if (Relations->Count != 0)
> +        __FdoEnumerate(Fdo, Relations);
> +
> +    ExFreePool(Relations);
> +
> +    AcquireMutex(&Fdo->Mutex);
> +
> +    Count = 0;
> +    for (ListEntry = Fdo->Dx->ListEntry.Flink;
> +         ListEntry != &Fdo->Dx->ListEntry;
> +         ListEntry = ListEntry->Flink)
> +        Count++;
> +
> +    Size = FIELD_OFFSET(DEVICE_RELATIONS, Objects) + (sizeof
> (DEVICE_OBJECT) * __min(Count, 1));
> +
> +    Relations = ExAllocatePoolWithTag(PagedPool, Size, 'TLIF');
> +
> +    status = STATUS_NO_MEMORY;
> +    if (Relations == NULL)
> +        goto fail3;
> +
> +    RtlZeroMemory(Relations, Size);
> +
> +    for (ListEntry = Fdo->Dx->ListEntry.Flink;
> +         ListEntry != &Fdo->Dx->ListEntry;
> +         ListEntry = ListEntry->Flink) {
> +        PXENDISK_DX     Dx = CONTAINING_RECORD(ListEntry, XENDISK_DX,
> ListEntry);
> +        PXENDISK_PDO    Pdo = Dx->Pdo;
> +
> +        ASSERT3U(Dx->Type, ==, PHYSICAL_DEVICE_OBJECT);
> +
> +        if (PdoGetDevicePnpState(Pdo) == Present)
> +            PdoSetDevicePnpState(Pdo, Enumerated);
> +
> +        ObReferenceObject(PdoGetPhysicalDeviceObject(Pdo));
> +        Relations->Objects[Relations->Count++] =
> PdoGetPhysicalDeviceObject(Pdo);
> +    }
> +
> +    ASSERT3U(Relations->Count, ==, Count);
> +
> +    Trace("%d PDO(s)\n", Relations->Count);
> +
> +    ReleaseMutex(&Fdo->Mutex);
> +
> +    Irp->IoStatus.Information = (ULONG_PTR)Relations;
> +    status = STATUS_SUCCESS;
> +
> +done:
> +    IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +
> +fail3:
> +    ReleaseMutex(&Fdo->Mutex);
> +
> +fail2:
> +    IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +
> +fail1:
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +__drv_functionClass(IO_COMPLETION_ROUTINE)
> +__drv_sameIRQL
> +static NTSTATUS
> +__FdoDispatchPnp(
> +    IN  PDEVICE_OBJECT  DeviceObject,
> +    IN  PIRP            Irp,
> +    IN  PVOID           Context
> +    )
> +{
> +    PXENDISK_FDO        Fdo = Context;
> +
> +    UNREFERENCED_PARAMETER(DeviceObject);
> +
> +    if (Irp->PendingReturned)
> +        IoMarkIrpPending(Irp);
> +
> +    IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +    return STATUS_SUCCESS;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +FdoDispatchPnp(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    UCHAR               MinorFunction;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    MinorFunction = StackLocation->MinorFunction;
> +
> +    switch (StackLocation->MinorFunction) {
> +    case IRP_MN_START_DEVICE:
> +        status = FdoStartDevice(Fdo, Irp);
> +        break;
> +
> +    case IRP_MN_QUERY_STOP_DEVICE:
> +        status = FdoQueryStopDevice(Fdo, Irp);
> +        break;
> +
> +    case IRP_MN_CANCEL_STOP_DEVICE:
> +        status = FdoCancelStopDevice(Fdo, Irp);
> +        break;
> +
> +    case IRP_MN_STOP_DEVICE:
> +        status = FdoStopDevice(Fdo, Irp);
> +        break;
> +
> +    case IRP_MN_QUERY_REMOVE_DEVICE:
> +        status = FdoQueryRemoveDevice(Fdo, Irp);
> +        break;
> +
> +    case IRP_MN_SURPRISE_REMOVAL:
> +        status = FdoSurpriseRemoval(Fdo, Irp);
> +        break;
> +
> +    case IRP_MN_REMOVE_DEVICE:
> +        status = FdoRemoveDevice(Fdo, Irp);
> +        break;
> +
> +    case IRP_MN_CANCEL_REMOVE_DEVICE:
> +        status = FdoCancelRemoveDevice(Fdo, Irp);
> +        break;
> +
> +    case IRP_MN_QUERY_DEVICE_RELATIONS:
> +        status = FdoQueryDeviceRelations(Fdo, Irp);
> +        break;
> +
> +    default:
> +        status = IoAcquireRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +        if (!NT_SUCCESS(status))
> +            goto fail1;
> +
> +        IoCopyCurrentIrpStackLocationToNext(Irp);
> +        IoSetCompletionRoutine(Irp,
> +                               __FdoDispatchPnp,
> +                               Fdo,
> +                               TRUE,
> +                               TRUE,
> +                               TRUE);
> +
> +        status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
> +        break;
> +    }
> +
> +    return status;
> +
> +fail1:
> +    Error("fail1 (%08x)\n", status);
> +
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +static FORCEINLINE NTSTATUS
> +__FdoSetDevicePowerUp(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    DEVICE_POWER_STATE  DeviceState;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
> +
> +    ASSERT3U(DeviceState, <,  __FdoGetDevicePowerState(Fdo));
> +
> +    status = FdoForwardIrpSynchronously(Fdo, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto done;
> +
> +    Verbose("%p: %s -> %s\n",
> +         Fdo->Dx->DeviceObject,
> +         PowerDeviceStateName(__FdoGetDevicePowerState(Fdo)),
> +         PowerDeviceStateName(DeviceState));
> +
> +    __FdoSetDevicePowerState(Fdo, DeviceState);
> +
> +done:
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +static FORCEINLINE NTSTATUS
> +__FdoSetDevicePowerDown(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    DEVICE_POWER_STATE  DeviceState;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
> +
> +    ASSERT3U(DeviceState, >,  __FdoGetDevicePowerState(Fdo));
> +
> +    Verbose("%p: %s -> %s\n",
> +         Fdo->Dx->DeviceObject,
> +         PowerDeviceStateName(__FdoGetDevicePowerState(Fdo)),
> +         PowerDeviceStateName(DeviceState));
> +
> +    __FdoSetDevicePowerState(Fdo, DeviceState);
> +
> +    status = FdoForwardIrpSynchronously(Fdo, Irp);
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +static FORCEINLINE NTSTATUS
> +__FdoSetDevicePower(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    DEVICE_POWER_STATE  DeviceState;
> +    POWER_ACTION        PowerAction;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
> +    PowerAction = StackLocation->Parameters.Power.ShutdownType;
> +
> +    Trace("====> (%s:%s)\n",
> +          PowerDeviceStateName(DeviceState),
> +          PowerActionName(PowerAction));
> +
> +    if (DeviceState == __FdoGetDevicePowerState(Fdo)) {
> +        status = FdoForwardIrpSynchronously(Fdo, Irp);
> +        IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +        goto done;
> +    }
> +
> +    status = (DeviceState < __FdoGetDevicePowerState(Fdo)) ?
> +             __FdoSetDevicePowerUp(Fdo, Irp) :
> +             __FdoSetDevicePowerDown(Fdo, Irp);
> +
> +done:
> +    Trace("<==== (%s:%s)(%08x)\n",
> +          PowerDeviceStateName(DeviceState),
> +          PowerActionName(PowerAction),
> +          status);
> +    return status;
> +}
> +
> +static FORCEINLINE NTSTATUS
> +__FdoSetSystemPowerUp(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    SYSTEM_POWER_STATE  SystemState;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    SystemState = StackLocation->Parameters.Power.State.SystemState;
> +
> +    ASSERT3U(SystemState, <,  __FdoGetSystemPowerState(Fdo));
> +
> +    status = FdoForwardIrpSynchronously(Fdo, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto done;
> +
> +    Verbose("%p: %s -> %s\n",
> +         Fdo->Dx->DeviceObject,
> +         PowerSystemStateName(__FdoGetSystemPowerState(Fdo)),
> +         PowerSystemStateName(SystemState));
> +
> +    __FdoSetSystemPowerState(Fdo, SystemState);
> +
> +done:
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +static FORCEINLINE NTSTATUS
> +__FdoSetSystemPowerDown(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    SYSTEM_POWER_STATE  SystemState;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    SystemState = StackLocation->Parameters.Power.State.SystemState;
> +
> +    ASSERT3U(SystemState, >,  __FdoGetSystemPowerState(Fdo));
> +
> +    Verbose("%p: %s -> %s\n",
> +         Fdo->Dx->DeviceObject,
> +         PowerSystemStateName(__FdoGetSystemPowerState(Fdo)),
> +         PowerSystemStateName(SystemState));
> +
> +    __FdoSetSystemPowerState(Fdo, SystemState);
> +
> +    status = FdoForwardIrpSynchronously(Fdo, Irp);
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +static FORCEINLINE NTSTATUS
> +__FdoSetSystemPower(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    SYSTEM_POWER_STATE  SystemState;
> +    POWER_ACTION        PowerAction;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    SystemState = StackLocation->Parameters.Power.State.SystemState;
> +    PowerAction = StackLocation->Parameters.Power.ShutdownType;
> +
> +    Trace("====> (%s:%s)\n",
> +          PowerSystemStateName(SystemState),
> +          PowerActionName(PowerAction));
> +
> +    if (SystemState == __FdoGetSystemPowerState(Fdo)) {
> +        status = FdoForwardIrpSynchronously(Fdo, Irp);
> +        IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +        goto done;
> +    }
> +
> +    status = (SystemState < __FdoGetSystemPowerState(Fdo)) ?
> +             __FdoSetSystemPowerUp(Fdo, Irp) :
> +             __FdoSetSystemPowerDown(Fdo, Irp);
> +
> +done:
> +    Trace("<==== (%s:%s)(%08x)\n",
> +          PowerSystemStateName(SystemState),
> +          PowerActionName(PowerAction),
> +          status);
> +    return status;
> +}
> +
> +static FORCEINLINE NTSTATUS
> +__FdoQueryDevicePowerUp(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    DEVICE_POWER_STATE  DeviceState;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
> +
> +    ASSERT3U(DeviceState, <,  __FdoGetDevicePowerState(Fdo));
> +
> +    status = FdoForwardIrpSynchronously(Fdo, Irp);
> +
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +static FORCEINLINE NTSTATUS
> +__FdoQueryDevicePowerDown(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    DEVICE_POWER_STATE  DeviceState;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
> +
> +    ASSERT3U(DeviceState, >,  __FdoGetDevicePowerState(Fdo));
> +
> +    status = FdoForwardIrpSynchronously(Fdo, Irp);
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +static FORCEINLINE NTSTATUS
> +__FdoQueryDevicePower(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    DEVICE_POWER_STATE  DeviceState;
> +    POWER_ACTION        PowerAction;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
> +    PowerAction = StackLocation->Parameters.Power.ShutdownType;
> +
> +    Trace("====> (%s:%s)\n",
> +          PowerDeviceStateName(DeviceState),
> +          PowerActionName(PowerAction));
> +
> +    if (DeviceState == __FdoGetDevicePowerState(Fdo)) {
> +        status = FdoForwardIrpSynchronously(Fdo, Irp);
> +        IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +        goto done;
> +    }
> +
> +    status = (DeviceState < __FdoGetDevicePowerState(Fdo)) ?
> +             __FdoQueryDevicePowerUp(Fdo, Irp) :
> +             __FdoQueryDevicePowerDown(Fdo, Irp);
> +
> +done:
> +    Trace("<==== (%s:%s)(%08x)\n",
> +          PowerDeviceStateName(DeviceState),
> +          PowerActionName(PowerAction),
> +          status);
> +    return status;
> +}
> +
> +static FORCEINLINE NTSTATUS
> +__FdoQuerySystemPowerUp(
> +    IN  PXENDISK_FDO     Fdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    SYSTEM_POWER_STATE  SystemState;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    SystemState = StackLocation->Parameters.Power.State.SystemState;
> +
> +    ASSERT3U(SystemState, <,  __FdoGetSystemPowerState(Fdo));
> +
> +    status = FdoForwardIrpSynchronously(Fdo, Irp);
> +
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +static FORCEINLINE NTSTATUS
> +__FdoQuerySystemPowerDown(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    SYSTEM_POWER_STATE  SystemState;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    SystemState = StackLocation->Parameters.Power.State.SystemState;
> +
> +    ASSERT3U(SystemState, >,  __FdoGetSystemPowerState(Fdo));
> +
> +    status = FdoForwardIrpSynchronously(Fdo, Irp);
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +static FORCEINLINE NTSTATUS
> +__FdoQuerySystemPower(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    SYSTEM_POWER_STATE  SystemState;
> +    POWER_ACTION        PowerAction;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    SystemState = StackLocation->Parameters.Power.State.SystemState;
> +    PowerAction = StackLocation->Parameters.Power.ShutdownType;
> +
> +    Trace("====> (%s:%s)\n",
> +          PowerSystemStateName(SystemState),
> +          PowerActionName(PowerAction));
> +
> +    if (SystemState == __FdoGetSystemPowerState(Fdo)) {
> +        status = FdoForwardIrpSynchronously(Fdo, Irp);
> +        IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +        goto done;
> +    }
> +
> +    status = (SystemState < __FdoGetSystemPowerState(Fdo)) ?
> +             __FdoQuerySystemPowerUp(Fdo, Irp) :
> +             __FdoQuerySystemPowerDown(Fdo, Irp);
> +
> +done:
> +    Trace("<==== (%s:%s)(%08x)\n",
> +          PowerSystemStateName(SystemState),
> +          PowerActionName(PowerAction),
> +          status);
> +
> +    return status;
> +}
> +
> +static NTSTATUS
> +FdoDevicePower(
> +    IN  PXENDISK_THREAD Self,
> +    IN  PVOID           Context
> +    )
> +{
> +    PXENDISK_FDO        Fdo = Context;
> +    PKEVENT             Event;
> +
> +    Event = ThreadGetEvent(Self);
> +
> +    for (;;) {
> +        PIRP                Irp;
> +        PIO_STACK_LOCATION  StackLocation;
> +        UCHAR               MinorFunction;
> +
> +        if (Fdo->DevicePowerIrp == NULL) {
> +            (VOID) KeWaitForSingleObject(Event,
> +                                         Executive,
> +                                         KernelMode,
> +                                         FALSE,
> +                                         NULL);
> +            KeClearEvent(Event);
> +        }
> +
> +        if (ThreadIsAlerted(Self))
> +            break;
> +
> +        Irp = Fdo->DevicePowerIrp;
> +
> +        if (Irp == NULL)
> +            continue;
> +
> +        Fdo->DevicePowerIrp = NULL;
> +        KeMemoryBarrier();
> +
> +        StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +        MinorFunction = StackLocation->MinorFunction;
> +
> +        switch (StackLocation->MinorFunction) {
> +        case IRP_MN_SET_POWER:
> +            (VOID) __FdoSetDevicePower(Fdo, Irp);
> +            break;
> +
> +        case IRP_MN_QUERY_POWER:
> +            (VOID) __FdoQueryDevicePower(Fdo, Irp);
> +            break;
> +
> +        default:
> +            ASSERT(FALSE);
> +            break;
> +        }
> +
> +        IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +    }
> +
> +    return STATUS_SUCCESS;
> +}
> +
> +static NTSTATUS
> +FdoSystemPower(
> +    IN  PXENDISK_THREAD Self,
> +    IN  PVOID           Context
> +    )
> +{
> +    PXENDISK_FDO        Fdo = Context;
> +    PKEVENT             Event;
> +
> +    Event = ThreadGetEvent(Self);
> +
> +    for (;;) {
> +        PIRP                Irp;
> +        PIO_STACK_LOCATION  StackLocation;
> +        UCHAR               MinorFunction;
> +
> +        if (Fdo->SystemPowerIrp == NULL) {
> +            (VOID) KeWaitForSingleObject(Event,
> +                                         Executive,
> +                                         KernelMode,
> +                                         FALSE,
> +                                         NULL);
> +            KeClearEvent(Event);
> +        }
> +
> +        if (ThreadIsAlerted(Self))
> +            break;
> +
> +        Irp = Fdo->SystemPowerIrp;
> +
> +        if (Irp == NULL)
> +            continue;
> +
> +        Fdo->SystemPowerIrp = NULL;
> +        KeMemoryBarrier();
> +
> +        StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +        MinorFunction = StackLocation->MinorFunction;
> +
> +        switch (StackLocation->MinorFunction) {
> +        case IRP_MN_SET_POWER:
> +            (VOID) __FdoSetSystemPower(Fdo, Irp);
> +            break;
> +
> +        case IRP_MN_QUERY_POWER:
> +            (VOID) __FdoQuerySystemPower(Fdo, Irp);
> +            break;
> +
> +        default:
> +            ASSERT(FALSE);
> +            break;
> +        }
> +
> +        IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +    }
> +
> +    return STATUS_SUCCESS;
> +}
> +
> +__drv_functionClass(IO_COMPLETION_ROUTINE)
> +__drv_sameIRQL
> +static NTSTATUS
> +__FdoDispatchPower(
> +    IN  PDEVICE_OBJECT  DeviceObject,
> +    IN  PIRP            Irp,
> +    IN  PVOID           Context
> +    )
> +{
> +    PXENDISK_FDO        Fdo = Context;
> +
> +    UNREFERENCED_PARAMETER(DeviceObject);
> +
> +    if (Irp->PendingReturned)
> +        IoMarkIrpPending(Irp);
> +
> +    IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +    return STATUS_SUCCESS;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +FdoDispatchPower(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    UCHAR               MinorFunction;
> +    POWER_STATE_TYPE    PowerType;
> +    NTSTATUS            status;
> +
> +    status = IoAcquireRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    MinorFunction = StackLocation->MinorFunction;
> +
> +    if (MinorFunction != IRP_MN_QUERY_POWER &&
> +        MinorFunction != IRP_MN_SET_POWER) {
> +        IoCopyCurrentIrpStackLocationToNext(Irp);
> +        IoSetCompletionRoutine(Irp,
> +                               __FdoDispatchPower,
> +                               Fdo,
> +                               TRUE,
> +                               TRUE,
> +                               TRUE);
> +
> +        status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
> +
> +        goto done;
> +    }
> +
> +    PowerType = StackLocation->Parameters.Power.Type;
> +
> +    Trace("====> (%02x:%s)\n",
> +          MinorFunction,
> +          PowerMinorFunctionName(MinorFunction));
> +
> +    switch (PowerType) {
> +    case DevicePowerState:
> +        IoMarkIrpPending(Irp);
> +
> +        ASSERT3P(Fdo->DevicePowerIrp, ==, NULL);
> +        Fdo->DevicePowerIrp = Irp;
> +        KeMemoryBarrier();
> +
> +        ThreadWake(Fdo->DevicePowerThread);
> +
> +        status = STATUS_PENDING;
> +        break;
> +
> +    case SystemPowerState:
> +        IoMarkIrpPending(Irp);
> +
> +        ASSERT3P(Fdo->SystemPowerIrp, ==, NULL);
> +        Fdo->SystemPowerIrp = Irp;
> +        KeMemoryBarrier();
> +
> +        ThreadWake(Fdo->SystemPowerThread);
> +
> +        status = STATUS_PENDING;
> +        break;
> +
> +    default:
> +        IoCopyCurrentIrpStackLocationToNext(Irp);
> +        IoSetCompletionRoutine(Irp,
> +                               __FdoDispatchPower,
> +                               Fdo,
> +                               TRUE,
> +                               TRUE,
> +                               TRUE);
> +
> +        status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
> +        break;
> +    }
> +
> +    Trace("<==== (%02x:%s) (%08x)\n",
> +          MinorFunction,
> +          PowerMinorFunctionName(MinorFunction),
> +          status);
> +
> +done:
> +    return status;
> +
> +fail1:
> +    Error("fail1 (%08x)\n", status);
> +
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +__drv_functionClass(IO_COMPLETION_ROUTINE)
> +__drv_sameIRQL
> +static NTSTATUS
> +__FdoDispatchDefault(
> +    IN  PDEVICE_OBJECT  DeviceObject,
> +    IN  PIRP            Irp,
> +    IN  PVOID           Context
> +    )
> +{
> +    PXENDISK_FDO        Fdo = Context;
> +
> +    UNREFERENCED_PARAMETER(DeviceObject);
> +
> +    if (Irp->PendingReturned)
> +        IoMarkIrpPending(Irp);
> +
> +    IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +
> +    return STATUS_SUCCESS;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +FdoDispatchDefault(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    NTSTATUS            status;
> +
> +    status = IoAcquireRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    IoCopyCurrentIrpStackLocationToNext(Irp);
> +    IoSetCompletionRoutine(Irp,
> +                           __FdoDispatchDefault,
> +                           Fdo,
> +                           TRUE,
> +                           TRUE,
> +                           TRUE);
> +
> +    status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
> +
> +    return status;
> +
> +fail1:
> +    Error("fail1 (%08x)\n", status);
> +
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +NTSTATUS
> +FdoDispatch(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +
> +    switch (StackLocation->MajorFunction) {
> +    case IRP_MJ_PNP:
> +        status = FdoDispatchPnp(Fdo, Irp);
> +        break;
> +
> +    case IRP_MJ_POWER:
> +        status = FdoDispatchPower(Fdo, Irp);
> +        break;
> +
> +    default:
> +        status = FdoDispatchDefault(Fdo, Irp);
> +        break;
> +    }
> +
> +    return status;
> +}
> +
> +NTSTATUS
> +FdoCreate(
> +    IN  PDEVICE_OBJECT  PhysicalDeviceObject
> +    )
> +{
> +    PDEVICE_OBJECT      LowerDeviceObject;
> +    ULONG               DeviceType;
> +    PDEVICE_OBJECT      FilterDeviceObject;
> +    PXENDISK_DX         Dx;
> +    PXENDISK_FDO        Fdo;
> +    NTSTATUS            status;
> +
> +    LowerDeviceObject =
> IoGetAttachedDeviceReference(PhysicalDeviceObject);
> +    DeviceType = LowerDeviceObject->DeviceType;
> +    ObDereferenceObject(LowerDeviceObject);
> +
> +#pragma prefast(suppress:28197) // Possibly leaking memory
> 'FilterDeviceObject'
> +    status = IoCreateDevice(DriverGetDriverObject(),
> +                            sizeof (XENDISK_DX),
> +                            NULL,
> +                            DeviceType,
> +                            FILE_DEVICE_SECURE_OPEN,
> +                            FALSE,
> +                            &FilterDeviceObject);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    Dx = (PXENDISK_DX)FilterDeviceObject->DeviceExtension;
> +    RtlZeroMemory(Dx, sizeof (XENDISK_DX));
> +
> +    Dx->Type = FUNCTION_DEVICE_OBJECT;
> +    Dx->DeviceObject = FilterDeviceObject;
> +    Dx->DevicePnpState = Added;
> +    Dx->SystemPowerState = PowerSystemShutdown;
> +    Dx->DevicePowerState = PowerDeviceD3;
> +
> +    IoInitializeRemoveLock(&Dx->RemoveLock, FDO_TAG, 0, 0);
> +
> +    Fdo = __FdoAllocate(sizeof (XENDISK_FDO));
> +
> +    status = STATUS_NO_MEMORY;
> +    if (Fdo == NULL)
> +        goto fail2;
> +
> +    LowerDeviceObject = IoAttachDeviceToDeviceStack(FilterDeviceObject,
> +                                                    PhysicalDeviceObject);
> +
> +    status = STATUS_UNSUCCESSFUL;
> +    if (LowerDeviceObject == NULL)
> +        goto fail3;
> +
> +    Fdo->Dx = Dx;
> +    Fdo->PhysicalDeviceObject = PhysicalDeviceObject;
> +    Fdo->LowerDeviceObject = LowerDeviceObject;
> +
> +    status = ThreadCreate(FdoSystemPower, Fdo, &Fdo-
> >SystemPowerThread);
> +    if (!NT_SUCCESS(status))
> +        goto fail4;
> +
> +    status = ThreadCreate(FdoDevicePower, Fdo, &Fdo-
> >DevicePowerThread);
> +    if (!NT_SUCCESS(status))
> +        goto fail5;
> +
> +    InitializeMutex(&Fdo->Mutex);
> +    InitializeListHead(&Dx->ListEntry);
> +    Fdo->References = 1;
> +
> +    Verbose("%p\n", FilterDeviceObject);
> +
> +    Dx->Fdo = Fdo;
> +
> +#pragma prefast(suppress:28182)  // Dereferencing NULL pointer
> +    FilterDeviceObject->DeviceType = LowerDeviceObject->DeviceType;
> +    FilterDeviceObject->Characteristics = LowerDeviceObject-
> >Characteristics;
> +
> +    FilterDeviceObject->Flags |= LowerDeviceObject->Flags;
> +    FilterDeviceObject->Flags &= ~DO_DEVICE_INITIALIZING;
> +
> +    return STATUS_SUCCESS;
> +
> +fail5:
> +    Error("fail5\n");
> +
> +    ThreadAlert(Fdo->SystemPowerThread);
> +    ThreadJoin(Fdo->SystemPowerThread);
> +    Fdo->SystemPowerThread = NULL;
> +
> +fail4:
> +    Error("fail4\n");
> +
> +    Fdo->PhysicalDeviceObject = NULL;
> +    Fdo->LowerDeviceObject = NULL;
> +    Fdo->Dx = NULL;
> +
> +    IoDetachDevice(LowerDeviceObject);
> +
> +fail3:
> +    Error("fail3\n");
> +
> +    ASSERT(IsZeroMemory(Fdo, sizeof (XENDISK_FDO)));
> +    __FdoFree(Fdo);
> +
> +fail2:
> +    Error("fail2\n");
> +
> +    IoDeleteDevice(FilterDeviceObject);
> +
> +fail1:
> +    Error("fail1 (%08x)\n", status);
> +
> +    return status;
> +}
> +
> +VOID
> +FdoDestroy(
> +    IN  PXENDISK_FDO    Fdo
> +    )
> +{
> +    PDEVICE_OBJECT      LowerDeviceObject = Fdo->LowerDeviceObject;
> +    PXENDISK_DX         Dx = Fdo->Dx;
> +    PDEVICE_OBJECT      FilterDeviceObject = Dx->DeviceObject;
> +
> +    ASSERT(IsListEmpty(&Dx->ListEntry));
> +    ASSERT3U(Fdo->References, ==, 0);
> +    ASSERT3U(__FdoGetDevicePnpState(Fdo), ==, Deleted);
> +
> +    Dx->Fdo = NULL;
> +
> +    RtlZeroMemory(&Fdo->Mutex, sizeof (MUTEX));
> +
> +    ThreadAlert(Fdo->DevicePowerThread);
> +    ThreadJoin(Fdo->DevicePowerThread);
> +    Fdo->DevicePowerThread = NULL;
> +
> +    ThreadAlert(Fdo->SystemPowerThread);
> +    ThreadJoin(Fdo->SystemPowerThread);
> +    Fdo->SystemPowerThread = NULL;
> +
> +    Fdo->LowerDeviceObject = NULL;
> +    Fdo->PhysicalDeviceObject = NULL;
> +    Fdo->Dx = NULL;
> +
> +    IoDetachDevice(LowerDeviceObject);
> +
> +    ASSERT(IsZeroMemory(Fdo, sizeof (XENDISK_FDO)));
> +    __FdoFree(Fdo);
> +
> +    IoDeleteDevice(FilterDeviceObject);
> +}
> diff --git a/src/xendisk/fdo.h b/src/xendisk/fdo.h
> new file mode 100644
> index 0000000..8aa0529
> --- /dev/null
> +++ b/src/xendisk/fdo.h
> @@ -0,0 +1,78 @@
> +/* 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 _XENDISK_FDO_H
> +#define _XENDISK_FDO_H
> +
> +#include <ntddk.h>
> +#include "types.h"
> +
> +typedef struct _XENDISK_FDO XENDISK_FDO, *PXENDISK_FDO;
> +
> +extern VOID
> +FdoAddPhysicalDeviceObject(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PDEVICE_OBJECT  DeviceObject
> +    );
> +
> +extern VOID
> +FdoRemovePhysicalDeviceObject(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PDEVICE_OBJECT  DeviceObject
> +    );
> +
> +extern VOID
> +FdoAcquireMutex(
> +    IN  PXENDISK_FDO     Fdo
> +    );
> +
> +extern VOID
> +FdoReleaseMutex(
> +    IN  PXENDISK_FDO     Fdo
> +    );
> +
> +extern NTSTATUS
> +FdoDispatch(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PIRP            Irp
> +    );
> +
> +extern NTSTATUS
> +FdoCreate(
> +    IN  PDEVICE_OBJECT  PhysicalDeviceObject
> +    );
> +
> +extern VOID
> +FdoDestroy(
> +    IN  PXENDISK_FDO    Fdo
> +    );
> +
> +#endif // _XENDISK_FDO_H
> diff --git a/src/xendisk/mutex.h b/src/xendisk/mutex.h
> new file mode 100644
> index 0000000..bcc2414
> --- /dev/null
> +++ b/src/xendisk/mutex.h
> @@ -0,0 +1,113 @@
> +/* 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 _XENDISK_MUTEX_H
> +#define _XENDISK_MUTEX_H
> +
> +#include <ntddk.h>
> +
> +#include "assert.h"
> +
> +typedef struct _MUTEX {
> +    PKTHREAD    Owner;
> +    KEVENT      Event;
> +} MUTEX, *PMUTEX;
> +
> +static FORCEINLINE VOID
> +InitializeMutex(
> +    IN  PMUTEX  Mutex
> +    )
> +{
> +    RtlZeroMemory(Mutex, sizeof (MUTEX));
> +
> +    KeInitializeEvent(&Mutex->Event, SynchronizationEvent, TRUE);
> +}
> +
> +static FORCEINLINE BOOLEAN
> +__drv_maxIRQL(PASSIVE_LEVEL)
> +TryAcquireMutex(
> +    IN  PMUTEX      Mutex
> +    )
> +{
> +    LARGE_INTEGER   Timeout;
> +    NTSTATUS        status;
> +
> +    Timeout.QuadPart = 0;
> +
> +    status = KeWaitForSingleObject(&Mutex->Event,
> +                                   Executive,
> +                                   KernelMode,
> +                                   FALSE,
> +                                   &Timeout);
> +    if (status == STATUS_TIMEOUT)
> +        return FALSE;
> +
> +    ASSERT(NT_SUCCESS(status));
> +
> +    ASSERT3P(Mutex->Owner, ==, NULL);
> +    Mutex->Owner = KeGetCurrentThread();
> +
> +    return TRUE;
> +}
> +
> +static FORCEINLINE VOID
> +__drv_maxIRQL(PASSIVE_LEVEL)
> +AcquireMutex(
> +    IN  PMUTEX  Mutex
> +    )
> +{
> +    NTSTATUS    status;
> +
> +    status = KeWaitForSingleObject(&Mutex->Event,
> +                                   Executive,
> +                                   KernelMode,
> +                                   FALSE,
> +                                   NULL);
> +
> +    ASSERT(NT_SUCCESS(status));
> +
> +    ASSERT3P(Mutex->Owner, ==, NULL);
> +    Mutex->Owner = KeGetCurrentThread();
> +}
> +
> +static FORCEINLINE VOID
> +__drv_maxIRQL(PASSIVE_LEVEL)
> +ReleaseMutex(
> +    IN  PMUTEX  Mutex
> +    )
> +{
> +    ASSERT3P(Mutex->Owner, ==, KeGetCurrentThread());
> +    Mutex->Owner = NULL;
> +
> +    KeSetEvent(&Mutex->Event, IO_NO_INCREMENT, FALSE);
> +}
> +
> +#endif  // _XENDISK_MUTEX_H
> diff --git a/src/xendisk/pdo.c b/src/xendisk/pdo.c
> new file mode 100644
> index 0000000..3de958a
> --- /dev/null
> +++ b/src/xendisk/pdo.c
> @@ -0,0 +1,2079 @@
> +/* 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.
> + */
> +
> +#define INITGUID 1
> +
> +#include <ntddk.h>
> +#include <wdmguid.h>
> +#include <ntstrsafe.h>
> +#include <stdlib.h>
> +#include <storport.h>
> +#include <Ntddstor.h>
> +#include <Ntddscsi.h>
> +#include <names.h>
> +
> +#include "fdo.h"
> +#include "pdo.h"
> +#include "driver.h"
> +#include "thread.h"
> +#include "debug.h"
> +#include "assert.h"
> +#include "util.h"
> +
> +#define PDO_TAG 'ODP'
> +
> +struct _XENDISK_PDO {
> +    PXENDISK_DX                 Dx;
> +    PDEVICE_OBJECT              LowerDeviceObject;
> +    PDEVICE_OBJECT              PhysicalDeviceObject;
> +
> +    PXENDISK_THREAD             SystemPowerThread;
> +    PIRP                        SystemPowerIrp;
> +    PXENDISK_THREAD             DevicePowerThread;
> +    PIRP                        DevicePowerIrp;
> +
> +    PXENDISK_FDO                Fdo;
> +    BOOLEAN                     Missing;
> +    const CHAR                  *Reason;
> +
> +    ULONG                       SectorSize;
> +};
> +
> +static FORCEINLINE PVOID
> +__PdoAllocate(
> +    IN  ULONG   Length
> +    )
> +{
> +    return __AllocateNonPagedPoolWithTag(__FUNCTION__, __LINE__,
> Length, PDO_TAG);
> +}
> +
> +static FORCEINLINE VOID
> +__PdoFree(
> +    IN  PVOID   Buffer
> +    )
> +{
> +    __FreePoolWithTag(Buffer, PDO_TAG);
> +}
> +
> +static FORCEINLINE VOID
> +__PdoSetDevicePnpState(
> +    IN  PXENDISK_PDO        Pdo,
> +    IN  DEVICE_PNP_STATE    State
> +    )
> +{
> +    PXENDISK_DX             Dx = Pdo->Dx;
> +
> +    // We can never transition out of the deleted state
> +    ASSERT(Dx->DevicePnpState != Deleted || State == Deleted);
> +
> +    Dx->PreviousDevicePnpState = Dx->DevicePnpState;
> +    Dx->DevicePnpState = State;
> +}
> +
> +VOID
> +PdoSetDevicePnpState(
> +    IN  PXENDISK_PDO        Pdo,
> +    IN  DEVICE_PNP_STATE    State
> +    )
> +{
> +    __PdoSetDevicePnpState(Pdo, State);
> +}
> +
> +static FORCEINLINE VOID
> +__PdoRestoreDevicePnpState(
> +    IN  PXENDISK_PDO        Pdo,
> +    IN  DEVICE_PNP_STATE    State
> +    )
> +{
> +    PXENDISK_DX             Dx = Pdo->Dx;
> +
> +    if (Dx->DevicePnpState == State)
> +        Dx->DevicePnpState = Dx->PreviousDevicePnpState;
> +}
> +
> +static FORCEINLINE DEVICE_PNP_STATE
> +__PdoGetDevicePnpState(
> +    IN  PXENDISK_PDO    Pdo
> +    )
> +{
> +    PXENDISK_DX         Dx = Pdo->Dx;
> +
> +    return Dx->DevicePnpState;
> +}
> +
> +DEVICE_PNP_STATE
> +PdoGetDevicePnpState(
> +    IN  PXENDISK_PDO    Pdo
> +    )
> +{
> +    return __PdoGetDevicePnpState(Pdo);
> +}
> +
> +static FORCEINLINE VOID
> +__PdoSetDevicePowerState(
> +    IN  PXENDISK_PDO        Pdo,
> +    IN  DEVICE_POWER_STATE  State
> +    )
> +{
> +    PXENDISK_DX             Dx = Pdo->Dx;
> +
> +    Dx->DevicePowerState = State;
> +}
> +
> +static FORCEINLINE DEVICE_POWER_STATE
> +__PdoGetDevicePowerState(
> +    IN  PXENDISK_PDO    Pdo
> +    )
> +{
> +    PXENDISK_DX         Dx = Pdo->Dx;
> +
> +    return Dx->DevicePowerState;
> +}
> +
> +static FORCEINLINE VOID
> +__PdoSetSystemPowerState(
> +    IN  PXENDISK_PDO        Pdo,
> +    IN  SYSTEM_POWER_STATE  State
> +    )
> +{
> +    PXENDISK_DX             Dx = Pdo->Dx;
> +
> +    Dx->SystemPowerState = State;
> +}
> +
> +static FORCEINLINE SYSTEM_POWER_STATE
> +__PdoGetSystemPowerState(
> +    IN  PXENDISK_PDO    Pdo
> +    )
> +{
> +    PXENDISK_DX         Dx = Pdo->Dx;
> +
> +    return Dx->SystemPowerState;
> +}
> +
> +PDEVICE_OBJECT
> +PdoGetPhysicalDeviceObject(
> +    IN  PXENDISK_PDO    Pdo
> +    )
> +{
> +    return Pdo->PhysicalDeviceObject;
> +}
> +
> +static FORCEINLINE VOID
> +__PdoSetMissing(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  const CHAR      *Reason
> +    )
> +{
> +    Pdo->Reason = Reason;
> +    Pdo->Missing = TRUE;
> +}
> +
> +VOID
> +PdoSetMissing(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  const CHAR      *Reason
> +    )
> +{
> +    __PdoSetMissing(Pdo, Reason);
> +}
> +
> +static FORCEINLINE BOOLEAN
> +__PdoIsMissing(
> +    IN  PXENDISK_PDO    Pdo
> +    )
> +{
> +    return Pdo->Missing;
> +}
> +
> +BOOLEAN
> +PdoIsMissing(
> +    IN  PXENDISK_PDO    Pdo
> +    )
> +{
> +    return __PdoIsMissing(Pdo);
> +}
> +
> +static FORCEINLINE VOID
> +__PdoLink(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PXENDISK_FDO    Fdo
> +    )
> +{
> +    Pdo->Fdo = Fdo;
> +    FdoAddPhysicalDeviceObject(Fdo, Pdo->Dx->DeviceObject);
> +}
> +
> +static FORCEINLINE VOID
> +__PdoUnlink(
> +    IN  PXENDISK_PDO    Pdo
> +    )
> +{
> +    PXENDISK_FDO        Fdo = Pdo->Fdo;
> +
> +    ASSERT(Fdo != NULL);
> +
> +    FdoRemovePhysicalDeviceObject(Fdo, Pdo->Dx->DeviceObject);
> +
> +    Pdo->Fdo = NULL;
> +}
> +
> +static FORCEINLINE PXENDISK_FDO
> +__PdoGetFdo(
> +    IN  PXENDISK_PDO Pdo
> +    )
> +{
> +    return Pdo->Fdo;
> +}
> +
> +__drv_functionClass(IO_COMPLETION_ROUTINE)
> +__drv_sameIRQL
> +static NTSTATUS
> +__PdoForwardIrpSynchronously(
> +    IN  PDEVICE_OBJECT  DeviceObject,
> +    IN  PIRP            Irp,
> +    IN  PVOID           Context
> +    )
> +{
> +    PKEVENT             Event = Context;
> +
> +    UNREFERENCED_PARAMETER(DeviceObject);
> +    UNREFERENCED_PARAMETER(Irp);
> +
> +    KeSetEvent(Event, IO_NO_INCREMENT, FALSE);
> +
> +    return STATUS_MORE_PROCESSING_REQUIRED;
> +}
> +
> +static NTSTATUS
> +PdoForwardIrpSynchronously(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    KEVENT              Event;
> +    NTSTATUS            status;
> +
> +    ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
> +
> +    KeInitializeEvent(&Event, NotificationEvent, FALSE);
> +
> +    IoCopyCurrentIrpStackLocationToNext(Irp);
> +    IoSetCompletionRoutine(Irp,
> +                           __PdoForwardIrpSynchronously,
> +                           &Event,
> +                           TRUE,
> +                           TRUE,
> +                           TRUE);
> +
> +    status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
> +    if (status == STATUS_PENDING) {
> +        (VOID) KeWaitForSingleObject(&Event,
> +                                     Executive,
> +                                     KernelMode,
> +                                     FALSE,
> +                                     NULL);
> +        status = Irp->IoStatus.Status;
> +    } else {
> +        ASSERT3U(status, ==, Irp->IoStatus.Status);
> +    }
> +
> +    return status;
> +}
> +
> +__drv_functionClass(IO_COMPLETION_ROUTINE)
> +__drv_sameIRQL
> +static NTSTATUS
> +__PdoForwardIrpAndForget(
> +    IN  PDEVICE_OBJECT  DeviceObject,
> +    IN  PIRP            Irp,
> +    IN  PVOID           Context
> +    )
> +{
> +    PXENDISK_PDO        Pdo = Context;
> +
> +    UNREFERENCED_PARAMETER(DeviceObject);
> +
> +    if (Irp->PendingReturned)
> +        IoMarkIrpPending(Irp);
> +
> +    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +
> +    return STATUS_SUCCESS;
> +}
> +
> +static NTSTATUS
> +PdoForwardIrpAndForget(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    IoCopyCurrentIrpStackLocationToNext(Irp);
> +    IoSetCompletionRoutine(Irp,
> +                            __PdoForwardIrpAndForget,
> +                            Pdo,
> +                            TRUE,
> +                            TRUE,
> +                            TRUE);
> +
> +    return IoCallDriver(Pdo->LowerDeviceObject, Irp);
> +}
> +
> +static NTSTATUS
> +PdoCompleteIrp(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp,
> +    IN  NTSTATUS        Status
> +    )
> +{
> +    Irp->IoStatus.Status = Status;
> +    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +    return Status;
> +}
> +
> +__drv_functionClass(IO_COMPLETION_ROUTINE)
> +__drv_sameIRQL
> +static NTSTATUS
> +__PdoQueryProperty(
> +    IN  PDEVICE_OBJECT  DeviceObject,
> +    IN  PIRP            Irp,
> +    IN  PVOID           Context
> +    )
> +{
> +    PXENDISK_PDO        Pdo = Context;
> +    PSTORAGE_ACCESS_ALIGNMENT_DESCRIPTOR    Descriptor = Irp-
> >UserBuffer;
> +
> +    UNREFERENCED_PARAMETER(DeviceObject);
> +
> +    if (Irp->PendingReturned)
> +        IoMarkIrpPending(Irp);
> +
> +    if (!NT_SUCCESS(Irp->IoStatus.Status))
> +        goto done;
> +
> +    Descriptor = Irp->UserBuffer;
> +    Pdo->SectorSize = Descriptor->BytesPerLogicalSector;
> +    Verbose("%p : %u bytes per sector\n", Pdo->Dx->DeviceObject, Pdo-
> >SectorSize);
> +
> +done:
> +    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +
> +    return STATUS_SUCCESS;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +PdoQueryProperty(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PSTORAGE_PROPERTY_QUERY Query;
> +    PDEVICE_TRIM_DESCRIPTOR Trim;
> +    NTSTATUS                status;
> +
> +    Query = Irp->AssociatedIrp.SystemBuffer;
> +
> +    switch (Query->PropertyId) {
> +    case StorageAccessAlignmentProperty:
> +        IoCopyCurrentIrpStackLocationToNext(Irp);
> +        IoSetCompletionRoutine(Irp,
> +                                __PdoQueryProperty,
> +                                Pdo,
> +                                TRUE,
> +                                TRUE,
> +                                TRUE);
> +
> +        status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
> +        break;
> +
> +    case StorageDeviceTrimProperty:
> +        Trim = Irp->AssociatedIrp.SystemBuffer;
> +
> +        Trim->Version = 0;
> +        Trim->Size = sizeof(DEVICE_TRIM_DESCRIPTOR);
> +        Trim->TrimEnabled = TRUE;
> +
> +        Irp->IoStatus.Information =
> (ULONG_PTR)sizeof(DEVICE_TRIM_DESCRIPTOR);
> +        status = PdoCompleteIrp(Pdo, Irp, STATUS_SUCCESS);
> +        break;
> +
> +    default:
> +        status = PdoForwardIrpAndForget(Pdo, Irp);
> +        break;
> +    }
> +
> +    return status;
> +}
> +
> +__drv_functionClass(IO_COMPLETION_ROUTINE)
> +__drv_sameIRQL
> +static NTSTATUS
> +__PdoSendAwaitSrb(
> +    IN  PDEVICE_OBJECT          DeviceObject,
> +    IN  PIRP                    Irp,
> +    IN  PVOID                   Context
> +    )
> +{
> +    UNREFERENCED_PARAMETER(DeviceObject);
> +    UNREFERENCED_PARAMETER(Context);
> +
> +    *(Irp->UserIosb) = Irp->IoStatus;
> +
> +    if (Irp->MdlAddress) {
> +        MmUnlockPages(Irp->MdlAddress);
> +        IoFreeMdl(Irp->MdlAddress);
> +    }
> +
> +    KeSetEvent(Irp->UserEvent, IO_NO_INCREMENT, FALSE);
> +
> +    IoFreeIrp(Irp);
> +    return STATUS_MORE_PROCESSING_REQUIRED;
> +}
> +
> +static NTSTATUS
> +PdoSendAwaitSrb(
> +    IN  PXENDISK_PDO            Pdo,
> +    IN  PSCSI_REQUEST_BLOCK     Srb
> +    )
> +{
> +    PIRP                        Irp;
> +    IO_STATUS_BLOCK             IoStatus;
> +    KEVENT                      Event;
> +    PIO_STACK_LOCATION          Stack;
> +    NTSTATUS                    status;
> +
> +    KeInitializeEvent(&Event, NotificationEvent, FALSE);
> +
> +    status = STATUS_NO_MEMORY;
> +    Irp = IoAllocateIrp((CCHAR)(Pdo->LowerDeviceObject->StackSize + 1),
> FALSE);
> +    if (Irp == NULL)
> +        goto fail1;
> +
> +    Stack = IoGetNextIrpStackLocation(Irp);
> +    Stack->MajorFunction = IRP_MJ_SCSI;
> +    Stack->Parameters.Scsi.Srb = Srb;
> +
> +    IoSetCompletionRoutine(Irp,
> +                            __PdoSendAwaitSrb,
> +                            Srb,
> +                            TRUE,
> +                            TRUE,
> +                            TRUE);
> +    Irp->UserIosb = &IoStatus;
> +    Irp->UserEvent = &Event;
> +
> +    Irp->MdlAddress = IoAllocateMdl(Srb->DataBuffer,
> +                                    Srb->DataTransferLength,
> +                                    FALSE,
> +                                    FALSE,
> +                                    Irp);
> +    if (Irp->MdlAddress == NULL)
> +        goto fail2;
> +
> +#pragma warning(disable:6320)
> +    try {
> +        MmProbeAndLockPages(Irp->MdlAddress, KernelMode,
> IoReadAccess);
> +    } except (EXCEPTION_EXECUTE_HANDLER) {
> +        status = GetExceptionCode();
> +
> +        goto fail3;
> +    }
> +#pragma warning(default:6320)
> +
> +    Srb->OriginalRequest = Irp;
> +
> +    status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
> +    if (status == STATUS_PENDING) {
> +        (VOID) KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE,
> NULL);
> +        status = IoStatus.Status;
> +    }
> +
> +    return status;
> +
> +fail3:
> +    Error("fail3\n");
> +
> +    IoFreeMdl(Irp->MdlAddress);
> +
> +fail2:
> +    Error("fail2\n");
> +
> +    IoFreeIrp(Irp);
> +
> +fail1:
> +    Error("fail1 (%08x)\n", status);
> +
> +    return status;
> +}
> +
> +static NTSTATUS
> +PdoSendTrimSynchronous(
> +    IN  PXENDISK_PDO            Pdo,
> +    IN  PDEVICE_DATA_SET_RANGE  Ranges,
> +    IN  ULONG                   Count
> +    )
> +{
> +    SCSI_REQUEST_BLOCK          Srb;
> +    PCDB                        Cdb;
> +    PUNMAP_LIST_HEADER          Unmap;
> +    ULONG                       Length;
> +    ULONG                       Index;
> +    NTSTATUS                    status;
> +
> +    Length = sizeof(UNMAP_LIST_HEADER) +
> +             (Count * sizeof(UNMAP_BLOCK_DESCRIPTOR));
> +
> +    status = STATUS_NO_MEMORY;
> +    Unmap = __PdoAllocate(Length);
> +    if (Unmap == NULL)
> +        goto fail1;
> +
> +    RtlZeroMemory(&Srb, sizeof(SCSI_REQUEST_BLOCK));
> +    Srb.Length = sizeof(SCSI_REQUEST_BLOCK);
> +    Srb.SrbFlags = 0;
> +    Srb.Function = SRB_FUNCTION_EXECUTE_SCSI;
> +    Srb.DataBuffer = Unmap;
> +    Srb.DataTransferLength = Length;
> +    Srb.TimeOutValue = (ULONG)-1;
> +    Srb.CdbLength = 10;
> +
> +    Cdb = (PCDB)&Srb.Cdb[0];
> +    Cdb->UNMAP.OperationCode = SCSIOP_UNMAP;
> +    *(PUSHORT)Cdb->UNMAP.AllocationLength =
> _byteswap_ushort((USHORT)Length);
> +
> +    *(PUSHORT)Unmap->DataLength =
> _byteswap_ushort((USHORT)Length);
> +    *(PUSHORT)Unmap->BlockDescrDataLength =
> _byteswap_ushort((USHORT)sizeof(UNMAP_BLOCK_DESCRIPTOR));
> +
> +    for (Index = 0; Index < Count; ++Index) {
> +        PUNMAP_BLOCK_DESCRIPTOR Block = &Unmap->Descriptors[Index];
> +        PDEVICE_DATA_SET_RANGE  Range = &Ranges[Index];
> +
> +        ULONG   LengthInSectors = (ULONG)(Range->LengthInBytes / Pdo-
> >SectorSize);
> +        ULONG64 OffsetInSectors = (ULONG64)(Range->StartingOffset / Pdo-
> >SectorSize);
> +
> +        Trace("TRIM[%x] %x @ %llx\n",
> +                        Index,
> +                        LengthInSectors,
> +                        OffsetInSectors);
> +
> +        *(PULONG64)Block->StartingLba = _byteswap_uint64(OffsetInSectors);
> +        *(PULONG)Block->LbaCount = _byteswap_ulong(LengthInSectors);
> +    }
> +
> +    status = PdoSendAwaitSrb(Pdo, &Srb);
> +    if (!NT_SUCCESS(status))
> +        goto fail2;
> +
> +    __PdoFree(Unmap);
> +    return status;
> +
> +fail2:
> +    Error("fail2\n");
> +
> +    __PdoFree(Unmap);
> +
> +fail1:
> +    Error("fail1 (%08x)\n", status);
> +
> +    return status;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +PdoManageDataSetAttributes(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PDEVICE_MANAGE_DATA_SET_ATTRIBUTES  Attributes;
> +    PDEVICE_DATA_SET_RANGE              Ranges;
> +    ULONG                               NumRanges;
> +    NTSTATUS                            status;
> +
> +    Attributes = Irp->AssociatedIrp.SystemBuffer;
> +
> +    switch (Attributes->Action) {
> +    case DeviceDsmAction_Trim:
> +        Ranges = (PDEVICE_DATA_SET_RANGE)((PUCHAR)Attributes +
> Attributes->DataSetRangesOffset);
> +        NumRanges = Attributes->DataSetRangesLength /
> sizeof(DEVICE_DATA_SET_RANGE);
> +
> +        status = PdoSendTrimSynchronous(Pdo, Ranges, NumRanges);
> +
> +        status = PdoCompleteIrp(Pdo, Irp, status);
> +        break;
> +
> +    default:
> +        status = PdoForwardIrpAndForget(Pdo, Irp);
> +        break;
> +    }
> +
> +    return status;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +PdoDispatchControl(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    ULONG               ControlCode;
> +    NTSTATUS            status;
> +
> +    status = IoAcquireRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    ControlCode = StackLocation-
> >Parameters.DeviceIoControl.IoControlCode;
> +
> +    switch (ControlCode) {
> +    case IOCTL_STORAGE_QUERY_PROPERTY:
> +        status = PdoQueryProperty(Pdo, Irp);
> +        break;
> +
> +    case IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES:
> +        status = PdoManageDataSetAttributes(Pdo, Irp);
> +        break;
> +
> +    default:
> +        status = PdoForwardIrpAndForget(Pdo, Irp);
> +        break;
> +    }
> +
> +    return status;
> +
> +fail1:
> +    Error("fail1 (%08x)\n", status);
> +
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +PdoStartDevice(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    POWER_STATE         PowerState;
> +    NTSTATUS            status;
> +
> +    status = IoAcquireRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    status = PdoForwardIrpSynchronously(Pdo, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto fail2;
> +
> +    __PdoSetSystemPowerState(Pdo, PowerSystemWorking);
> +    __PdoSetDevicePowerState(Pdo, PowerDeviceD0);
> +
> +    PowerState.DeviceState = PowerDeviceD0;
> +    PoSetPowerState(Pdo->Dx->DeviceObject,
> +                    DevicePowerState,
> +                    PowerState);
> +
> +    __PdoSetDevicePnpState(Pdo, Started);
> +
> +    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +
> +    Irp->IoStatus.Status = STATUS_SUCCESS;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return STATUS_SUCCESS;
> +
> +fail2:
> +    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +
> +fail1:
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +__drv_functionClass(IO_COMPLETION_ROUTINE)
> +__drv_sameIRQL
> +static NTSTATUS
> +__PdoQueryStopDevice(
> +    IN  PDEVICE_OBJECT  DeviceObject,
> +    IN  PIRP            Irp,
> +    IN  PVOID           Context
> +    )
> +{
> +    PXENDISK_PDO        Pdo = Context;
> +
> +    UNREFERENCED_PARAMETER(DeviceObject);
> +
> +    if (Irp->PendingReturned)
> +        IoMarkIrpPending(Irp);
> +
> +    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +
> +    return STATUS_SUCCESS;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +PdoQueryStopDevice(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    NTSTATUS            status;
> +
> +    status = IoAcquireRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    __PdoSetDevicePnpState(Pdo, StopPending);
> +    Irp->IoStatus.Status = STATUS_SUCCESS;
> +
> +    IoCopyCurrentIrpStackLocationToNext(Irp);
> +    IoSetCompletionRoutine(Irp,
> +                           __PdoQueryStopDevice,
> +                           Pdo,
> +                           TRUE,
> +                           TRUE,
> +                           TRUE);
> +
> +    status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
> +
> +    return status;
> +
> +fail1:
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +__drv_functionClass(IO_COMPLETION_ROUTINE)
> +__drv_sameIRQL
> +static NTSTATUS
> +__PdoCancelStopDevice(
> +    IN  PDEVICE_OBJECT  DeviceObject,
> +    IN  PIRP            Irp,
> +    IN  PVOID           Context
> +    )
> +{
> +    PXENDISK_PDO        Pdo = Context;
> +
> +    UNREFERENCED_PARAMETER(DeviceObject);
> +
> +    if (Irp->PendingReturned)
> +        IoMarkIrpPending(Irp);
> +
> +    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +
> +    return STATUS_SUCCESS;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +PdoCancelStopDevice(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    NTSTATUS            status;
> +
> +    status = IoAcquireRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    Irp->IoStatus.Status = STATUS_SUCCESS;
> +
> +    __PdoRestoreDevicePnpState(Pdo, StopPending);
> +
> +    IoCopyCurrentIrpStackLocationToNext(Irp);
> +    IoSetCompletionRoutine(Irp,
> +                           __PdoCancelStopDevice,
> +                           Pdo,
> +                           TRUE,
> +                           TRUE,
> +                           TRUE);
> +
> +    status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
> +
> +    return status;
> +
> +fail1:
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +__drv_functionClass(IO_COMPLETION_ROUTINE)
> +__drv_sameIRQL
> +static NTSTATUS
> +__PdoStopDevice(
> +    IN  PDEVICE_OBJECT  DeviceObject,
> +    IN  PIRP            Irp,
> +    IN  PVOID           Context
> +    )
> +{
> +    PXENDISK_PDO        Pdo = Context;
> +
> +    UNREFERENCED_PARAMETER(DeviceObject);
> +
> +    if (Irp->PendingReturned)
> +        IoMarkIrpPending(Irp);
> +
> +    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +
> +    return STATUS_SUCCESS;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +PdoStopDevice(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    POWER_STATE         PowerState;
> +    NTSTATUS            status;
> +
> +    status = IoAcquireRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    if (__PdoGetDevicePowerState(Pdo) != PowerDeviceD0)
> +        goto done;
> +
> +    __PdoSetDevicePowerState(Pdo, PowerDeviceD3);
> +    __PdoSetSystemPowerState(Pdo, PowerSystemShutdown);
> +
> +    PowerState.DeviceState = PowerDeviceD3;
> +    PoSetPowerState(Pdo->Dx->DeviceObject,
> +                    DevicePowerState,
> +                    PowerState);
> +
> +done:
> +    __PdoSetDevicePnpState(Pdo, Stopped);
> +    Irp->IoStatus.Status = STATUS_SUCCESS;
> +
> +    IoCopyCurrentIrpStackLocationToNext(Irp);
> +    IoSetCompletionRoutine(Irp,
> +                           __PdoStopDevice,
> +                           Pdo,
> +                           TRUE,
> +                           TRUE,
> +                           TRUE);
> +
> +    status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
> +
> +    return status;
> +
> +fail1:
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +__drv_functionClass(IO_COMPLETION_ROUTINE)
> +__drv_sameIRQL
> +static NTSTATUS
> +__PdoQueryRemoveDevice(
> +    IN  PDEVICE_OBJECT  DeviceObject,
> +    IN  PIRP            Irp,
> +    IN  PVOID           Context
> +    )
> +{
> +    PXENDISK_PDO        Pdo = Context;
> +
> +    UNREFERENCED_PARAMETER(DeviceObject);
> +
> +    if (Irp->PendingReturned)
> +        IoMarkIrpPending(Irp);
> +
> +    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +
> +    return STATUS_SUCCESS;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +PdoQueryRemoveDevice(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    NTSTATUS            status;
> +
> +    status = IoAcquireRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    __PdoSetDevicePnpState(Pdo, RemovePending);
> +    Irp->IoStatus.Status = STATUS_SUCCESS;
> +
> +    IoCopyCurrentIrpStackLocationToNext(Irp);
> +    IoSetCompletionRoutine(Irp,
> +                           __PdoQueryRemoveDevice,
> +                           Pdo,
> +                           TRUE,
> +                           TRUE,
> +                           TRUE);
> +
> +    status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
> +
> +    return status;
> +
> +fail1:
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +__drv_functionClass(IO_COMPLETION_ROUTINE)
> +__drv_sameIRQL
> +static NTSTATUS
> +__PdoCancelRemoveDevice(
> +    IN  PDEVICE_OBJECT  DeviceObject,
> +    IN  PIRP            Irp,
> +    IN  PVOID           Context
> +    )
> +{
> +    PXENDISK_PDO        Pdo = Context;
> +
> +    UNREFERENCED_PARAMETER(DeviceObject);
> +
> +    if (Irp->PendingReturned)
> +        IoMarkIrpPending(Irp);
> +
> +    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +
> +    return STATUS_SUCCESS;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +PdoCancelRemoveDevice(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    NTSTATUS            status;
> +
> +    status = IoAcquireRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    __PdoRestoreDevicePnpState(Pdo, RemovePending);
> +    Irp->IoStatus.Status = STATUS_SUCCESS;
> +
> +    IoCopyCurrentIrpStackLocationToNext(Irp);
> +    IoSetCompletionRoutine(Irp,
> +                           __PdoCancelRemoveDevice,
> +                           Pdo,
> +                           TRUE,
> +                           TRUE,
> +                           TRUE);
> +
> +    status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
> +
> +    return status;
> +
> +fail1:
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +__drv_functionClass(IO_COMPLETION_ROUTINE)
> +__drv_sameIRQL
> +static NTSTATUS
> +__PdoSurpriseRemoval(
> +    IN  PDEVICE_OBJECT  DeviceObject,
> +    IN  PIRP            Irp,
> +    IN  PVOID           Context
> +    )
> +{
> +    PXENDISK_PDO        Pdo = Context;
> +
> +    UNREFERENCED_PARAMETER(DeviceObject);
> +
> +    if (Irp->PendingReturned)
> +        IoMarkIrpPending(Irp);
> +
> +    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +
> +    return STATUS_SUCCESS;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +PdoSurpriseRemoval(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    NTSTATUS            status;
> +
> +    status = IoAcquireRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    __PdoSetDevicePnpState(Pdo, SurpriseRemovePending);
> +    Irp->IoStatus.Status = STATUS_SUCCESS;
> +
> +    IoCopyCurrentIrpStackLocationToNext(Irp);
> +    IoSetCompletionRoutine(Irp,
> +                           __PdoSurpriseRemoval,
> +                           Pdo,
> +                           TRUE,
> +                           TRUE,
> +                           TRUE);
> +
> +    status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
> +
> +    return status;
> +
> +fail1:
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +PdoRemoveDevice(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PXENDISK_FDO        Fdo = __PdoGetFdo(Pdo);
> +    POWER_STATE         PowerState;
> +    NTSTATUS            status;
> +
> +    status = IoAcquireRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    if (__PdoGetDevicePowerState(Pdo) != PowerDeviceD0)
> +        goto done;
> +
> +    __PdoSetDevicePowerState(Pdo, PowerDeviceD3);
> +    __PdoSetSystemPowerState(Pdo, PowerSystemShutdown);
> +
> +    PowerState.DeviceState = PowerDeviceD3;
> +    PoSetPowerState(Pdo->Dx->DeviceObject,
> +                    DevicePowerState,
> +                    PowerState);
> +
> +done:
> +    if (__PdoIsMissing(Pdo)) {
> +        __PdoSetDevicePnpState(Pdo, Deleted);
> +        IoReleaseRemoveLockAndWait(&Pdo->Dx->RemoveLock, Irp);
> +    } else {
> +        __PdoSetDevicePnpState(Pdo, Enumerated);
> +        IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +    }
> +
> +    status = PdoForwardIrpSynchronously(Pdo, Irp);
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    if (__PdoIsMissing(Pdo)) {
> +        FdoAcquireMutex(Fdo);
> +        PdoDestroy(Pdo);
> +        FdoReleaseMutex(Fdo);
> +    }
> +
> +    return status;
> +
> +fail1:
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +PdoEject(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PXENDISK_FDO        Fdo = __PdoGetFdo(Pdo);
> +    NTSTATUS            status;
> +
> +    __PdoSetMissing(Pdo, "Ejected");
> +    __PdoSetDevicePnpState(Pdo, Deleted);
> +
> +    status = PdoForwardIrpSynchronously(Pdo, Irp);
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    FdoAcquireMutex(Fdo);
> +    PdoDestroy(Pdo);
> +    FdoReleaseMutex(Fdo);
> +
> +    return status;
> +}
> +
> +__drv_functionClass(IO_COMPLETION_ROUTINE)
> +__drv_sameIRQL
> +static NTSTATUS
> +__PdoDispatchPnp(
> +    IN  PDEVICE_OBJECT  DeviceObject,
> +    IN  PIRP            Irp,
> +    IN  PVOID           Context
> +    )
> +{
> +    PXENDISK_PDO        Pdo = Context;
> +
> +    UNREFERENCED_PARAMETER(DeviceObject);
> +
> +    if (Irp->PendingReturned)
> +        IoMarkIrpPending(Irp);
> +
> +    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +    return STATUS_SUCCESS;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +PdoDispatchPnp(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    UCHAR               MinorFunction;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    MinorFunction = StackLocation->MinorFunction;
> +
> +    switch (StackLocation->MinorFunction) {
> +    case IRP_MN_START_DEVICE:
> +        status = PdoStartDevice(Pdo, Irp);
> +        break;
> +
> +    case IRP_MN_QUERY_STOP_DEVICE:
> +        status = PdoQueryStopDevice(Pdo, Irp);
> +        break;
> +
> +    case IRP_MN_CANCEL_STOP_DEVICE:
> +        status = PdoCancelStopDevice(Pdo, Irp);
> +        break;
> +
> +    case IRP_MN_STOP_DEVICE:
> +        status = PdoStopDevice(Pdo, Irp);
> +        break;
> +
> +    case IRP_MN_QUERY_REMOVE_DEVICE:
> +        status = PdoQueryRemoveDevice(Pdo, Irp);
> +        break;
> +
> +    case IRP_MN_SURPRISE_REMOVAL:
> +        status = PdoSurpriseRemoval(Pdo, Irp);
> +        break;
> +
> +    case IRP_MN_REMOVE_DEVICE:
> +        status = PdoRemoveDevice(Pdo, Irp);
> +        break;
> +
> +    case IRP_MN_CANCEL_REMOVE_DEVICE:
> +        status = PdoCancelRemoveDevice(Pdo, Irp);
> +        break;
> +
> +    case IRP_MN_EJECT:
> +        status = PdoEject(Pdo, Irp);
> +        break;
> +
> +    default:
> +        status = IoAcquireRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +        if (!NT_SUCCESS(status))
> +            goto fail1;
> +
> +        IoCopyCurrentIrpStackLocationToNext(Irp);
> +        IoSetCompletionRoutine(Irp,
> +                               __PdoDispatchPnp,
> +                               Pdo,
> +                               TRUE,
> +                               TRUE,
> +                               TRUE);
> +
> +        status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
> +        break;
> +    }
> +
> +    return status;
> +
> +fail1:
> +    Error("fail1 (%08x)\n", status);
> +
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +static FORCEINLINE NTSTATUS
> +__PdoSetDevicePowerUp(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    DEVICE_POWER_STATE  DeviceState;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
> +
> +    ASSERT3U(DeviceState, <,  __PdoGetDevicePowerState(Pdo));
> +
> +    status = PdoForwardIrpSynchronously(Pdo, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto done;
> +
> +    Verbose("%p: %s -> %s\n",
> +         Pdo->Dx->DeviceObject,
> +         PowerDeviceStateName(__PdoGetDevicePowerState(Pdo)),
> +         PowerDeviceStateName(DeviceState));
> +
> +    __PdoSetDevicePowerState(Pdo, DeviceState);
> +
> +done:
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +static FORCEINLINE NTSTATUS
> +__PdoSetDevicePowerDown(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    DEVICE_POWER_STATE  DeviceState;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
> +
> +    ASSERT3U(DeviceState, >,  __PdoGetDevicePowerState(Pdo));
> +
> +    Verbose("%p: %s -> %s\n",
> +         Pdo->Dx->DeviceObject,
> +         PowerDeviceStateName(__PdoGetDevicePowerState(Pdo)),
> +         PowerDeviceStateName(DeviceState));
> +
> +    __PdoSetDevicePowerState(Pdo, DeviceState);
> +
> +    status = PdoForwardIrpSynchronously(Pdo, Irp);
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +static FORCEINLINE NTSTATUS
> +__PdoSetDevicePower(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    DEVICE_POWER_STATE  DeviceState;
> +    POWER_ACTION        PowerAction;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
> +    PowerAction = StackLocation->Parameters.Power.ShutdownType;
> +
> +    Trace("====> (%s:%s)\n",
> +          PowerDeviceStateName(DeviceState),
> +          PowerActionName(PowerAction));
> +
> +    if (DeviceState == __PdoGetDevicePowerState(Pdo)) {
> +        status = PdoForwardIrpSynchronously(Pdo, Irp);
> +        IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +        goto done;
> +    }
> +
> +    status = (DeviceState < __PdoGetDevicePowerState(Pdo)) ?
> +             __PdoSetDevicePowerUp(Pdo, Irp) :
> +             __PdoSetDevicePowerDown(Pdo, Irp);
> +
> +done:
> +    Trace("<==== (%s:%s)(%08x)\n",
> +          PowerDeviceStateName(DeviceState),
> +          PowerActionName(PowerAction),
> +          status);
> +    return status;
> +}
> +
> +static FORCEINLINE NTSTATUS
> +__PdoSetSystemPowerUp(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    SYSTEM_POWER_STATE  SystemState;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    SystemState = StackLocation->Parameters.Power.State.SystemState;
> +
> +    ASSERT3U(SystemState, <,  __PdoGetSystemPowerState(Pdo));
> +
> +    status = PdoForwardIrpSynchronously(Pdo, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto done;
> +
> +    Verbose("%p: %s -> %s\n",
> +         Pdo->Dx->DeviceObject,
> +         PowerSystemStateName(__PdoGetSystemPowerState(Pdo)),
> +         PowerSystemStateName(SystemState));
> +
> +    __PdoSetSystemPowerState(Pdo, SystemState);
> +
> +done:
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +static FORCEINLINE NTSTATUS
> +__PdoSetSystemPowerDown(
> +    IN  PXENDISK_PDO     Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    SYSTEM_POWER_STATE  SystemState;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    SystemState = StackLocation->Parameters.Power.State.SystemState;
> +
> +    ASSERT3U(SystemState, >,  __PdoGetSystemPowerState(Pdo));
> +
> +    Verbose("%p: %s -> %s\n",
> +         Pdo->Dx->DeviceObject,
> +         PowerSystemStateName(__PdoGetSystemPowerState(Pdo)),
> +         PowerSystemStateName(SystemState));
> +
> +    __PdoSetSystemPowerState(Pdo, SystemState);
> +
> +    status = PdoForwardIrpSynchronously(Pdo, Irp);
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +static FORCEINLINE NTSTATUS
> +__PdoSetSystemPower(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    SYSTEM_POWER_STATE  SystemState;
> +    POWER_ACTION        PowerAction;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    SystemState = StackLocation->Parameters.Power.State.SystemState;
> +    PowerAction = StackLocation->Parameters.Power.ShutdownType;
> +
> +    Trace("====> (%s:%s)\n",
> +          PowerSystemStateName(SystemState),
> +          PowerActionName(PowerAction));
> +
> +    if (SystemState == __PdoGetSystemPowerState(Pdo)) {
> +        status = PdoForwardIrpSynchronously(Pdo, Irp);
> +        IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +        goto done;
> +    }
> +
> +    status = (SystemState < __PdoGetSystemPowerState(Pdo)) ?
> +             __PdoSetSystemPowerUp(Pdo, Irp) :
> +             __PdoSetSystemPowerDown(Pdo, Irp);
> +
> +done:
> +    Trace("<==== (%s:%s)(%08x)\n",
> +          PowerSystemStateName(SystemState),
> +          PowerActionName(PowerAction),
> +          status);
> +    return status;
> +}
> +
> +static FORCEINLINE NTSTATUS
> +__PdoQueryDevicePowerUp(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    DEVICE_POWER_STATE  DeviceState;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
> +
> +    ASSERT3U(DeviceState, <,  __PdoGetDevicePowerState(Pdo));
> +
> +    status = PdoForwardIrpSynchronously(Pdo, Irp);
> +
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +static FORCEINLINE NTSTATUS
> +__PdoQueryDevicePowerDown(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    DEVICE_POWER_STATE  DeviceState;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
> +
> +    ASSERT3U(DeviceState, >,  __PdoGetDevicePowerState(Pdo));
> +
> +    status = PdoForwardIrpSynchronously(Pdo, Irp);
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +static FORCEINLINE NTSTATUS
> +__PdoQueryDevicePower(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    DEVICE_POWER_STATE  DeviceState;
> +    POWER_ACTION        PowerAction;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
> +    PowerAction = StackLocation->Parameters.Power.ShutdownType;
> +
> +    Trace("====> (%s:%s)\n",
> +          PowerDeviceStateName(DeviceState),
> +          PowerActionName(PowerAction));
> +
> +    if (DeviceState == __PdoGetDevicePowerState(Pdo)) {
> +        status = PdoForwardIrpSynchronously(Pdo, Irp);
> +        IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +        goto done;
> +    }
> +
> +    status = (DeviceState < __PdoGetDevicePowerState(Pdo)) ?
> +             __PdoQueryDevicePowerUp(Pdo, Irp) :
> +             __PdoQueryDevicePowerDown(Pdo, Irp);
> +
> +done:
> +    Trace("<==== (%s:%s)(%08x)\n",
> +          PowerDeviceStateName(DeviceState),
> +          PowerActionName(PowerAction),
> +          status);
> +    return status;
> +}
> +
> +static FORCEINLINE NTSTATUS
> +__PdoQuerySystemPowerUp(
> +    IN  PXENDISK_PDO     Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    SYSTEM_POWER_STATE  SystemState;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    SystemState = StackLocation->Parameters.Power.State.SystemState;
> +
> +    ASSERT3U(SystemState, <,  __PdoGetSystemPowerState(Pdo));
> +
> +    status = PdoForwardIrpSynchronously(Pdo, Irp);
> +
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +static FORCEINLINE NTSTATUS
> +__PdoQuerySystemPowerDown(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    SYSTEM_POWER_STATE  SystemState;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    SystemState = StackLocation->Parameters.Power.State.SystemState;
> +
> +    ASSERT3U(SystemState, >,  __PdoGetSystemPowerState(Pdo));
> +
> +    status = PdoForwardIrpSynchronously(Pdo, Irp);
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +static FORCEINLINE NTSTATUS
> +__PdoQuerySystemPower(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    SYSTEM_POWER_STATE  SystemState;
> +    POWER_ACTION        PowerAction;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    SystemState = StackLocation->Parameters.Power.State.SystemState;
> +    PowerAction = StackLocation->Parameters.Power.ShutdownType;
> +
> +    Trace("====> (%s:%s)\n",
> +          PowerSystemStateName(SystemState),
> +          PowerActionName(PowerAction));
> +
> +    if (SystemState == __PdoGetSystemPowerState(Pdo)) {
> +        status = PdoForwardIrpSynchronously(Pdo, Irp);
> +        IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +        goto done;
> +    }
> +
> +    status = (SystemState < __PdoGetSystemPowerState(Pdo)) ?
> +             __PdoQuerySystemPowerUp(Pdo, Irp) :
> +             __PdoQuerySystemPowerDown(Pdo, Irp);
> +
> +done:
> +    Trace("<==== (%s:%s)(%08x)\n",
> +          PowerSystemStateName(SystemState),
> +          PowerActionName(PowerAction),
> +          status);
> +
> +    return status;
> +}
> +
> +static NTSTATUS
> +PdoDevicePower(
> +    IN  PXENDISK_THREAD Self,
> +    IN  PVOID           Context
> +    )
> +{
> +    PXENDISK_PDO        Pdo = Context;
> +    PKEVENT             Event;
> +
> +    Event = ThreadGetEvent(Self);
> +
> +    for (;;) {
> +        PIRP                Irp;
> +        PIO_STACK_LOCATION  StackLocation;
> +        UCHAR               MinorFunction;
> +
> +        if (Pdo->DevicePowerIrp == NULL) {
> +            (VOID) KeWaitForSingleObject(Event,
> +                                         Executive,
> +                                         KernelMode,
> +                                         FALSE,
> +                                         NULL);
> +            KeClearEvent(Event);
> +        }
> +
> +        if (ThreadIsAlerted(Self))
> +            break;
> +
> +        Irp = Pdo->DevicePowerIrp;
> +
> +        if (Irp == NULL)
> +            continue;
> +
> +        Pdo->DevicePowerIrp = NULL;
> +        KeMemoryBarrier();
> +
> +        StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +        MinorFunction = StackLocation->MinorFunction;
> +
> +        switch (StackLocation->MinorFunction) {
> +        case IRP_MN_SET_POWER:
> +            (VOID) __PdoSetDevicePower(Pdo, Irp);
> +            break;
> +
> +        case IRP_MN_QUERY_POWER:
> +            (VOID) __PdoQueryDevicePower(Pdo, Irp);
> +            break;
> +
> +        default:
> +            ASSERT(FALSE);
> +            break;
> +        }
> +
> +        IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +    }
> +
> +    return STATUS_SUCCESS;
> +}
> +
> +static NTSTATUS
> +PdoSystemPower(
> +    IN  PXENDISK_THREAD Self,
> +    IN  PVOID           Context
> +    )
> +{
> +    PXENDISK_PDO        Pdo = Context;
> +    PKEVENT             Event;
> +
> +    Event = ThreadGetEvent(Self);
> +
> +    for (;;) {
> +        PIRP                Irp;
> +        PIO_STACK_LOCATION  StackLocation;
> +        UCHAR               MinorFunction;
> +
> +        if (Pdo->SystemPowerIrp == NULL) {
> +            (VOID) KeWaitForSingleObject(Event,
> +                                         Executive,
> +                                         KernelMode,
> +                                         FALSE,
> +                                         NULL);
> +            KeClearEvent(Event);
> +        }
> +
> +        if (ThreadIsAlerted(Self))
> +            break;
> +
> +        Irp = Pdo->SystemPowerIrp;
> +
> +        if (Irp == NULL)
> +            continue;
> +
> +        Pdo->SystemPowerIrp = NULL;
> +        KeMemoryBarrier();
> +
> +        StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +        MinorFunction = StackLocation->MinorFunction;
> +
> +        switch (StackLocation->MinorFunction) {
> +        case IRP_MN_SET_POWER:
> +            (VOID) __PdoSetSystemPower(Pdo, Irp);
> +            break;
> +
> +        case IRP_MN_QUERY_POWER:
> +            (VOID) __PdoQuerySystemPower(Pdo, Irp);
> +            break;
> +
> +        default:
> +            ASSERT(FALSE);
> +            break;
> +        }
> +
> +        IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +    }
> +
> +    return STATUS_SUCCESS;
> +}
> +
> +__drv_functionClass(IO_COMPLETION_ROUTINE)
> +__drv_sameIRQL
> +static NTSTATUS
> +__PdoDispatchPower(
> +    IN  PDEVICE_OBJECT  DeviceObject,
> +    IN  PIRP            Irp,
> +    IN  PVOID           Context
> +    )
> +{
> +    PXENDISK_PDO        Pdo = Context;
> +
> +    UNREFERENCED_PARAMETER(DeviceObject);
> +
> +    if (Irp->PendingReturned)
> +        IoMarkIrpPending(Irp);
> +
> +    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +    return STATUS_SUCCESS;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +PdoDispatchPower(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    UCHAR               MinorFunction;
> +    POWER_STATE_TYPE    PowerType;
> +    NTSTATUS            status;
> +
> +    status = IoAcquireRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    MinorFunction = StackLocation->MinorFunction;
> +
> +    if (MinorFunction != IRP_MN_QUERY_POWER &&
> +        MinorFunction != IRP_MN_SET_POWER) {
> +        IoCopyCurrentIrpStackLocationToNext(Irp);
> +        IoSetCompletionRoutine(Irp,
> +                               __PdoDispatchPower,
> +                               Pdo,
> +                               TRUE,
> +                               TRUE,
> +                               TRUE);
> +
> +        status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
> +
> +        goto done;
> +    }
> +
> +    PowerType = StackLocation->Parameters.Power.Type;
> +
> +    Trace("====> (%02x:%s)\n",
> +          MinorFunction,
> +          PowerMinorFunctionName(MinorFunction));
> +
> +    switch (PowerType) {
> +    case DevicePowerState:
> +        IoMarkIrpPending(Irp);
> +
> +        ASSERT3P(Pdo->DevicePowerIrp, ==, NULL);
> +        Pdo->DevicePowerIrp = Irp;
> +        KeMemoryBarrier();
> +
> +        ThreadWake(Pdo->DevicePowerThread);
> +
> +        status = STATUS_PENDING;
> +        break;
> +
> +    case SystemPowerState:
> +        IoMarkIrpPending(Irp);
> +
> +        ASSERT3P(Pdo->SystemPowerIrp, ==, NULL);
> +        Pdo->SystemPowerIrp = Irp;
> +        KeMemoryBarrier();
> +
> +        ThreadWake(Pdo->SystemPowerThread);
> +
> +        status = STATUS_PENDING;
> +        break;
> +
> +    default:
> +        IoCopyCurrentIrpStackLocationToNext(Irp);
> +        IoSetCompletionRoutine(Irp,
> +                               __PdoDispatchPower,
> +                               Pdo,
> +                               TRUE,
> +                               TRUE,
> +                               TRUE);
> +
> +        status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
> +        break;
> +    }
> +
> +    Trace("<==== (%02x:%s) (%08x)\n",
> +          MinorFunction,
> +          PowerMinorFunctionName(MinorFunction),
> +          status);
> +
> +done:
> +    return status;
> +
> +fail1:
> +    Error("fail1 (%08x)\n", status);
> +
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +__drv_functionClass(IO_COMPLETION_ROUTINE)
> +__drv_sameIRQL
> +static NTSTATUS
> +__PdoDispatchDefault(
> +    IN  PDEVICE_OBJECT  DeviceObject,
> +    IN  PIRP            Irp,
> +    IN  PVOID           Context
> +    )
> +{
> +    PXENDISK_PDO        Pdo = Context;
> +
> +    UNREFERENCED_PARAMETER(DeviceObject);
> +
> +    if (Irp->PendingReturned)
> +        IoMarkIrpPending(Irp);
> +
> +    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +
> +    return STATUS_SUCCESS;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +PdoDispatchDefault(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    NTSTATUS            status;
> +
> +    status = IoAcquireRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    IoCopyCurrentIrpStackLocationToNext(Irp);
> +    IoSetCompletionRoutine(Irp,
> +                           __PdoDispatchDefault,
> +                           Pdo,
> +                           TRUE,
> +                           TRUE,
> +                           TRUE);
> +
> +    status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
> +
> +    return status;
> +
> +fail1:
> +    Error("fail1 (%08x)\n", status);
> +
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +NTSTATUS
> +PdoDispatch(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +
> +    switch (StackLocation->MajorFunction) {
> +    case IRP_MJ_DEVICE_CONTROL:
> +        status = PdoDispatchControl(Pdo, Irp);
> +        break;
> +
> +    case IRP_MJ_PNP:
> +        status = PdoDispatchPnp(Pdo, Irp);
> +        break;
> +
> +    case IRP_MJ_POWER:
> +        status = PdoDispatchPower(Pdo, Irp);
> +        break;
> +
> +    default:
> +        status = PdoDispatchDefault(Pdo, Irp);
> +        break;
> +    }
> +
> +    return status;
> +}
> +
> +NTSTATUS
> +PdoCreate(
> +    PXENDISK_FDO                    Fdo,
> +    PDEVICE_OBJECT                  PhysicalDeviceObject
> +    )
> +{
> +    PDEVICE_OBJECT                  LowerDeviceObject;
> +    ULONG                           DeviceType;
> +    PDEVICE_OBJECT                  FilterDeviceObject;
> +    PXENDISK_DX                     Dx;
> +    PXENDISK_PDO                    Pdo;
> +    NTSTATUS                        status;
> +
> +    LowerDeviceObject =
> IoGetAttachedDeviceReference(PhysicalDeviceObject);
> +    DeviceType = LowerDeviceObject->DeviceType;
> +    ObDereferenceObject(LowerDeviceObject);
> +
> +#pragma prefast(suppress:28197) // Possibly leaking memory
> 'PhysicalDeviceObject'
> +    status = IoCreateDevice(DriverGetDriverObject(),
> +                            sizeof(XENDISK_DX),
> +                            NULL,
> +                            DeviceType,
> +                            FILE_DEVICE_SECURE_OPEN,
> +                            FALSE,
> +                            &FilterDeviceObject);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    Dx = (PXENDISK_DX)FilterDeviceObject->DeviceExtension;
> +    RtlZeroMemory(Dx, sizeof (XENDISK_DX));
> +
> +    Dx->Type = PHYSICAL_DEVICE_OBJECT;
> +    Dx->DeviceObject = FilterDeviceObject;
> +    Dx->DevicePnpState = Present;
> +    Dx->SystemPowerState = PowerSystemShutdown;
> +    Dx->DevicePowerState = PowerDeviceD3;
> +
> +    IoInitializeRemoveLock(&Dx->RemoveLock, PDO_TAG, 0, 0);
> +
> +    Pdo = __PdoAllocate(sizeof (XENDISK_PDO));
> +
> +    status = STATUS_NO_MEMORY;
> +    if (Pdo == NULL)
> +        goto fail2;
> +
> +    LowerDeviceObject = IoAttachDeviceToDeviceStack(FilterDeviceObject,
> +                                                    PhysicalDeviceObject);
> +
> +    status = STATUS_UNSUCCESSFUL;
> +    if (LowerDeviceObject == NULL)
> +        goto fail3;
> +
> +    Pdo->Dx = Dx;
> +    Pdo->PhysicalDeviceObject = PhysicalDeviceObject;
> +    Pdo->LowerDeviceObject = LowerDeviceObject;
> +    Pdo->SectorSize = 512;
> +
> +    status = ThreadCreate(PdoSystemPower, Pdo, &Pdo-
> >SystemPowerThread);
> +    if (!NT_SUCCESS(status))
> +        goto fail4;
> +
> +    status = ThreadCreate(PdoDevicePower, Pdo, &Pdo-
> >DevicePowerThread);
> +    if (!NT_SUCCESS(status))
> +        goto fail5;
> +
> +    Verbose("%p\n", FilterDeviceObject);
> +
> +    Dx->Pdo = Pdo;
> +
> +#pragma prefast(suppress:28182) // Dereferencing NULL pointer
> +    FilterDeviceObject->DeviceType = LowerDeviceObject->DeviceType;
> +    FilterDeviceObject->Characteristics = LowerDeviceObject-
> >Characteristics;
> +
> +    FilterDeviceObject->Flags |= LowerDeviceObject->Flags;
> +    FilterDeviceObject->Flags &= ~DO_DEVICE_INITIALIZING;
> +
> +    __PdoLink(Pdo, Fdo);
> +
> +    return STATUS_SUCCESS;
> +
> +fail5:
> +    Error("fail5\n");
> +
> +    ThreadAlert(Pdo->SystemPowerThread);
> +    ThreadJoin(Pdo->SystemPowerThread);
> +    Pdo->SystemPowerThread = NULL;
> +
> +fail4:
> +    Error("fail4\n");
> +
> +    Pdo->PhysicalDeviceObject = NULL;
> +    Pdo->LowerDeviceObject = NULL;
> +    Pdo->Dx = NULL;
> +
> +    IoDetachDevice(LowerDeviceObject);
> +
> +fail3:
> +    Error("fail3\n");
> +
> +    ASSERT(IsZeroMemory(Pdo, sizeof (XENDISK_PDO)));
> +    __PdoFree(Pdo);
> +
> +fail2:
> +    Error("fail2\n");
> +
> +    IoDeleteDevice(FilterDeviceObject);
> +
> +fail1:
> +    Error("fail1 (%08x)\n", status);
> +
> +    return status;
> +}
> +
> +VOID
> +PdoDestroy(
> +    IN  PXENDISK_PDO    Pdo
> +    )
> +{
> +    PDEVICE_OBJECT      LowerDeviceObject = Pdo->LowerDeviceObject;
> +    PXENDISK_DX         Dx = Pdo->Dx;
> +    PDEVICE_OBJECT      FilterDeviceObject = Dx->DeviceObject;
> +
> +    ASSERT3U(__PdoGetDevicePnpState(Pdo), ==, Deleted);
> +
> +    ASSERT(__PdoIsMissing(Pdo));
> +    Pdo->Missing = FALSE;
> +
> +    __PdoUnlink(Pdo);
> +
> +    Verbose("%p (%s)\n",
> +         FilterDeviceObject,
> +         Pdo->Reason);
> +    Pdo->Reason = NULL;
> +
> +    Dx->Pdo = NULL;
> +
> +    ThreadAlert(Pdo->DevicePowerThread);
> +    ThreadJoin(Pdo->DevicePowerThread);
> +    Pdo->DevicePowerThread = NULL;
> +
> +    ThreadAlert(Pdo->SystemPowerThread);
> +    ThreadJoin(Pdo->SystemPowerThread);
> +    Pdo->SystemPowerThread = NULL;
> +
> +    Pdo->SectorSize = 0;
> +    Pdo->PhysicalDeviceObject = NULL;
> +    Pdo->LowerDeviceObject = NULL;
> +    Pdo->Dx = NULL;
> +
> +    IoDetachDevice(LowerDeviceObject);
> +
> +    ASSERT(IsZeroMemory(Pdo, sizeof (XENDISK_PDO)));
> +    __PdoFree(Pdo);
> +
> +    IoDeleteDevice(FilterDeviceObject);
> +}
> diff --git a/src/xendisk/pdo.h b/src/xendisk/pdo.h
> new file mode 100644
> index 0000000..5e2e5d6
> --- /dev/null
> +++ b/src/xendisk/pdo.h
> @@ -0,0 +1,90 @@
> +/* 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 _XENDISK_PDO_H
> +#define _XENDISK_PDO_H
> +
> +#include <ntddk.h>
> +#include "types.h"
> +#include "fdo.h"
> +
> +typedef struct _XENDISK_PDO XENDISK_PDO, *PXENDISK_PDO;
> +
> +extern VOID
> +PdoSetDevicePnpState(
> +    IN  PXENDISK_PDO        Pdo,
> +    IN  DEVICE_PNP_STATE    State
> +    );
> +
> +extern DEVICE_PNP_STATE
> +PdoGetDevicePnpState(
> +    IN  PXENDISK_PDO    Pdo
> +    );
> +
> +extern PDEVICE_OBJECT
> +PdoGetPhysicalDeviceObject(
> +    IN  PXENDISK_PDO    Pdo
> +    );
> +
> +extern BOOLEAN
> +PdoIsMissing(
> +    IN  PXENDISK_PDO    Pdo
> +    );
> +
> +extern VOID
> +PdoSetMissing(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  const CHAR      *Reason
> +    );
> +
> +extern BOOLEAN
> +PdoIsMasked(
> +    IN  PXENDISK_PDO    Pdo
> +    );
> +
> +extern NTSTATUS
> +PdoCreate(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PDEVICE_OBJECT  PhysicalDeviceObject
> +    );
> +
> +extern VOID
> +PdoDestroy(
> +    IN  PXENDISK_PDO    Pdo
> +    );
> +
> +extern NTSTATUS
> +PdoDispatch(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    );
> +
> +#endif // _XENDISK_PDO_H
> diff --git a/src/xendisk/thread.c b/src/xendisk/thread.c
> new file mode 100644
> index 0000000..92e2b94
> --- /dev/null
> +++ b/src/xendisk/thread.c
> @@ -0,0 +1,225 @@
> +/* 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 "thread.h"
> +#include "debug.h"
> +#include "assert.h"
> +#include "util.h"
> +
> +#define THREAD_POOL 'ERHT'
> +
> +struct _XENDISK_THREAD {
> +    XENDISK_THREAD_FUNCTION Function;
> +    PVOID                   Context;
> +    KEVENT                  Event;
> +    BOOLEAN                 Alerted;
> +    LONG                    References;
> +    PKTHREAD                Thread;
> +};
> +
> +static FORCEINLINE PVOID
> +__ThreadAllocate(
> +    IN  ULONG   Length
> +    )
> +{
> +    return __AllocateNonPagedPoolWithTag(__FUNCTION__, __LINE__,
> Length, THREAD_POOL);
> +}
> +
> +static FORCEINLINE VOID
> +__ThreadFree(
> +    IN  PVOID   Buffer
> +    )
> +{
> +    __FreePoolWithTag(Buffer, THREAD_POOL);
> +}
> +
> +static FORCEINLINE VOID
> +__ThreadWake(
> +    IN  PXENDISK_THREAD Thread
> +    )
> +{
> +    KeSetEvent(&Thread->Event, IO_NO_INCREMENT, FALSE);
> +}
> +
> +VOID
> +ThreadWake(
> +    IN  PXENDISK_THREAD Thread
> +    )
> +{
> +    __ThreadWake(Thread);
> +}
> +
> +static FORCEINLINE VOID
> +__ThreadAlert(
> +    IN  PXENDISK_THREAD Thread
> +    )
> +{
> +    Thread->Alerted = TRUE;
> +    __ThreadWake(Thread);
> +}
> +
> +VOID
> +ThreadAlert(
> +    IN  PXENDISK_THREAD Thread
> +    )
> +{
> +    __ThreadAlert(Thread);
> +}
> +
> +KSTART_ROUTINE  ThreadFunction;
> +
> +VOID
> +ThreadFunction(
> +    IN  PVOID       Argument
> +    )
> +{
> +    PXENDISK_THREAD Self = Argument;
> +    NTSTATUS        status;
> +
> +    status = Self->Function(Self, Self->Context);
> +
> +    if (InterlockedDecrement(&Self->References) == 0)
> +        __ThreadFree(Self);
> +
> +    PsTerminateSystemThread(status);
> +    // NOT REACHED
> +}
> +
> +NTSTATUS
> +ThreadCreate(
> +    IN  XENDISK_THREAD_FUNCTION Function,
> +    IN  PVOID                   Context,
> +    OUT PXENDISK_THREAD         *Thread
> +    )
> +{
> +    HANDLE                      Handle;
> +    NTSTATUS                    status;
> +
> +    ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
> +
> +    (*Thread) = __ThreadAllocate(sizeof (XENDISK_THREAD));
> +
> +    status = STATUS_NO_MEMORY;
> +    if (*Thread == NULL)
> +        goto fail1;
> +
> +    (*Thread)->Function = Function;
> +    (*Thread)->Context = Context;
> +    (*Thread)->Alerted = FALSE;
> +    (*Thread)->References = 2; // One for us, one for the thread function
> +
> +    KeInitializeEvent(&(*Thread)->Event, NotificationEvent, FALSE);
> +
> +    status = PsCreateSystemThread(&Handle,
> +                                  STANDARD_RIGHTS_ALL | SPECIFIC_RIGHTS_ALL,
> +                                  NULL,
> +                                  NULL,
> +                                  NULL,
> +                                  ThreadFunction,
> +                                  *Thread);
> +    if (!NT_SUCCESS(status)) {
> +        --(*Thread)->References;    // Fake thread function termination
> +        goto fail2;
> +    }
> +
> +    status = ObReferenceObjectByHandle(Handle,
> +                                       SYNCHRONIZE,
> +                                       *PsThreadType,
> +                                       KernelMode,
> +                                       &(*Thread)->Thread,
> +                                       NULL);
> +    if (!NT_SUCCESS(status))
> +        goto fail3;
> +
> +    ZwClose(Handle);
> +
> +    return STATUS_SUCCESS;
> +
> +fail3:
> +    Error("fail3\n");
> +
> +    __ThreadAlert(*Thread);
> +    ZwClose(Handle);
> +
> +fail2:
> +    Error("fail2\n");
> +
> +    if (InterlockedDecrement(&(*Thread)->References) == 0)
> +        __ThreadFree(*Thread);
> +
> +    *Thread = NULL;
> +
> +fail1:
> +    Error("fail1 (%08x)\n", status);
> +
> +    return status;
> +}
> +
> +PKEVENT
> +ThreadGetEvent(
> +    IN  PXENDISK_THREAD Thread
> +    )
> +{
> +    return &Thread->Event;
> +}
> +
> +BOOLEAN
> +ThreadIsAlerted(
> +    IN  PXENDISK_THREAD Thread
> +    )
> +{
> +    return Thread->Alerted;
> +}
> +
> +VOID
> +ThreadJoin(
> +    IN  PXENDISK_THREAD Thread
> +    )
> +{
> +    LONG                References;
> +
> +    ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
> +    ASSERT3P(KeGetCurrentThread(), !=, Thread->Thread);
> +
> +    (VOID) KeWaitForSingleObject(Thread->Thread,
> +                                 Executive,
> +                                 KernelMode,
> +                                 FALSE,
> +                                 NULL);
> +
> +    References = InterlockedDecrement(&Thread->References);
> +    ASSERT3U(References, ==, 0);
> +
> +    __ThreadFree(Thread);
> +}
> +
> diff --git a/src/xendisk/thread.h b/src/xendisk/thread.h
> new file mode 100644
> index 0000000..c197337
> --- /dev/null
> +++ b/src/xendisk/thread.h
> @@ -0,0 +1,73 @@
> +/* 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 _XENDISK_THREAD_H
> +#define _XENDISK_THREAD_H
> +
> +#include <ntddk.h>
> +
> +typedef struct _XENDISK_THREAD XENDISK_THREAD, *PXENDISK_THREAD;
> +
> +typedef NTSTATUS (*XENDISK_THREAD_FUNCTION)(PXENDISK_THREAD,
> PVOID);
> +
> +extern NTSTATUS
> +ThreadCreate(
> +    IN  XENDISK_THREAD_FUNCTION Function,
> +    IN  PVOID                   Context,
> +    OUT PXENDISK_THREAD         *Thread
> +    );
> +
> +extern PKEVENT
> +ThreadGetEvent(
> +    IN  PXENDISK_THREAD Self
> +    );
> +
> +extern BOOLEAN
> +ThreadIsAlerted(
> +    IN  PXENDISK_THREAD Self
> +    );
> +
> +extern VOID
> +ThreadWake(
> +    IN  PXENDISK_THREAD Thread
> +    );
> +
> +extern VOID
> +ThreadAlert(
> +    IN  PXENDISK_THREAD Thread
> +    );
> +
> +extern VOID
> +ThreadJoin(
> +    IN  PXENDISK_THREAD Thread
> +    );
> +
> +#endif  // _XENDISK_THREAD_H
> diff --git a/src/xendisk/types.h b/src/xendisk/types.h
> new file mode 100644
> index 0000000..b2b4218
> --- /dev/null
> +++ b/src/xendisk/types.h
> @@ -0,0 +1,53 @@
> +/* 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 _XENDISK_TYPES_H
> +#define _XENDISK_TYPES_H
> +
> +typedef enum _DEVICE_OBJECT_TYPE {
> +    PHYSICAL_DEVICE_OBJECT = 'ODP',
> +    FUNCTION_DEVICE_OBJECT = 'ODF'
> +} DEVICE_OBJECT_TYPE, *PDEVICE_OBJECT_TYPE;
> +
> +typedef enum _DEVICE_PNP_STATE {
> +    Invalid = 0,
> +    Present,        // PDO only
> +    Enumerated,     // PDO only
> +    Added,          // FDO only
> +    Started,
> +    StopPending,
> +    Stopped,
> +    RemovePending,
> +    SurpriseRemovePending,
> +    Deleted
> +} DEVICE_PNP_STATE, *PDEVICE_PNP_STATE;
> +
> +#endif  // _XENDISK_TYPES_H
> diff --git a/src/xendisk/util.h b/src/xendisk/util.h
> new file mode 100644
> index 0000000..e7adc22
> --- /dev/null
> +++ b/src/xendisk/util.h
> @@ -0,0 +1,222 @@
> +/* 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 _UTIL_H
> +#define _UTIL_H
> +
> +#include <ntddk.h>
> +
> +#include "assert.h"
> +
> +typedef struct _NON_PAGED_BUFFER_HEADER {
> +    SIZE_T  Length;
> +    ULONG   Tag;
> +} NON_PAGED_BUFFER_HEADER, *PNON_PAGED_BUFFER_HEADER;
> +
> +typedef struct _NON_PAGED_BUFFER_TRAILER {
> +    ULONG   Tag;
> +} NON_PAGED_BUFFER_TRAILER, *PNON_PAGED_BUFFER_TRAILER;
> +
> +static FORCEINLINE PVOID
> +__AllocateNonPagedPoolWithTag(
> +    IN  PCHAR                   Caller,
> +    IN  ULONG                   Line,
> +    IN  SIZE_T                  Length,
> +    IN  ULONG                   Tag
> +    )
> +{
> +    PUCHAR                      Buffer;
> +    PNON_PAGED_BUFFER_HEADER    Header;
> +    PNON_PAGED_BUFFER_TRAILER   Trailer;
> +
> +    ASSERT3S(Length, !=, 0);
> +
> +    Buffer = (PUCHAR)ExAllocatePoolWithTag(NonPagedPool,
> +                                   sizeof (NON_PAGED_BUFFER_HEADER) +
> +                                   Length +
> +                                   sizeof (NON_PAGED_BUFFER_TRAILER),
> +                                   Tag);
> +    if (Buffer == NULL) {
> +        Warning("%s:%u : AllocFailed %d bytes, %08x tag\n", Caller, Line,
> Length, Tag);
> +        goto done;
> +    }
> +
> +    RtlZeroMemory(Buffer,
> +                  sizeof (NON_PAGED_BUFFER_HEADER) +
> +                  Length +
> +                  sizeof (NON_PAGED_BUFFER_TRAILER));
> +
> +    Header = (PNON_PAGED_BUFFER_HEADER)Buffer;
> +    Header->Length = Length;
> +    Header->Tag = Tag;
> +
> +    Buffer += sizeof (NON_PAGED_BUFFER_HEADER);
> +
> +    Trailer = (PNON_PAGED_BUFFER_TRAILER)(Buffer + Length);
> +    Trailer->Tag = Tag;
> +
> +done:
> +    return Buffer;
> +}
> +
> +static FORCEINLINE VOID
> +__FreePoolWithTag(
> +    IN  PVOID                   _Buffer,
> +    IN  ULONG                   Tag
> +    )
> +{
> +    PUCHAR                      Buffer = (PUCHAR)_Buffer;
> +    SIZE_T                      Length;
> +    PNON_PAGED_BUFFER_HEADER    Header;
> +    PNON_PAGED_BUFFER_TRAILER   Trailer;
> +
> +    ASSERT3P(Buffer, !=, NULL);
> +
> +    Buffer -= sizeof (NON_PAGED_BUFFER_HEADER);
> +
> +    Header = (PNON_PAGED_BUFFER_HEADER)Buffer;
> +    ASSERT3U(Tag, ==, Header->Tag);
> +    Length = Header->Length;
> +
> +    Buffer += sizeof (NON_PAGED_BUFFER_HEADER);
> +
> +    Trailer = (PNON_PAGED_BUFFER_TRAILER)(Buffer + Length);
> +    ASSERT3U(Tag, ==, Trailer->Tag);
> +
> +    Buffer -= sizeof (NON_PAGED_BUFFER_HEADER);
> +
> +    RtlFillMemory(Buffer,
> +                  sizeof (NON_PAGED_BUFFER_HEADER) +
> +                  Length +
> +                  sizeof (NON_PAGED_BUFFER_TRAILER),
> +                  0xAA);
> +
> +    ExFreePoolWithTag(Buffer, Tag);
> +}
> +
> +static FORCEINLINE PMDL
> +__AllocPagesForMdl(
> +    IN  SIZE_T          Size
> +    )
> +{
> +    PMDL                Mdl;
> +    PHYSICAL_ADDRESS    LowAddr;
> +    PHYSICAL_ADDRESS    HighAddr;
> +    PHYSICAL_ADDRESS    SkipBytes;
> +
> +    SkipBytes.QuadPart = 0ull;
> +    HighAddr.QuadPart = ~0ull;
> +
> +    // try > 4GB
> +    LowAddr.QuadPart = 0x100000000ull;
> +    Mdl = MmAllocatePagesForMdlEx(LowAddr, HighAddr, SkipBytes, Size,
> MmCached, 0);
> +    if (Mdl) {
> +        if (MmGetMdlByteCount(Mdl) == Size) {
> +            goto done;
> +        }
> +        MmFreePagesFromMdl(Mdl);
> +        ExFreePool(Mdl);
> +        Mdl = NULL;
> +    }
> +
> +    // try > 2GB
> +    LowAddr.QuadPart = 0x80000000ull;
> +    Mdl = MmAllocatePagesForMdlEx(LowAddr, HighAddr, SkipBytes, Size,
> MmCached, 0);
> +    if (Mdl) {
> +        if (MmGetMdlByteCount(Mdl) == Size) {
> +            goto done;
> +        }
> +        MmFreePagesFromMdl(Mdl);
> +        ExFreePool(Mdl);
> +        Mdl = NULL;
> +    }
> +
> +    // try anywhere
> +    LowAddr.QuadPart = 0ull;
> +    Mdl = MmAllocatePagesForMdlEx(LowAddr, HighAddr, SkipBytes, Size,
> MmCached, 0);
> +    // Mdl byte count gets checked again after this returns
> +
> +done:
> +    return Mdl;
> +}
> +static FORCEINLINE PVOID
> +___AllocPages(
> +    IN  PCHAR           Caller,
> +    IN  ULONG           Line,
> +    IN  SIZE_T          Size,
> +    OUT PMDL*           Mdl
> +    )
> +{
> +    PVOID               Buffer;
> +
> +    *Mdl = __AllocPagesForMdl(Size);
> +    if (*Mdl == NULL) {
> +        Warning("%s:%u : MmAllocatePagesForMdlEx Failed %d bytes\n",
> Caller, Line, Size);
> +        goto fail1;
> +    }
> +
> +    if (MmGetMdlByteCount(*Mdl) != Size) {
> +        Warning("%s:%u : %d bytes != %d bytes requested\n", Caller, Line,
> MmGetMdlByteCount(*Mdl), Size);
> +        goto fail2;
> +    }
> +
> +    Buffer = MmMapLockedPagesSpecifyCache(*Mdl, KernelMode,
> MmCached, NULL, FALSE, NormalPagePriority);
> +    if (Buffer == NULL) {
> +        Warning("%s:%u : MmMapLockedPagesSpecifyCache Failed %d
> bytes\n", Caller, Line, Size);
> +        goto fail3;
> +    }
> +
> +    return Buffer;
> +
> +fail3:
> +fail2:
> +    MmFreePagesFromMdl(*Mdl);
> +    ExFreePool(*Mdl);
> +fail1:
> +    *Mdl = NULL;
> +    return NULL;
> +}
> +#define __AllocPages(Size, Mdl) ___AllocPages(__FUNCTION__, __LINE__,
> Size, Mdl)
> +
> +static FORCEINLINE VOID
> +__FreePages(
> +    IN  PVOID           Buffer,
> +    IN  PMDL            Mdl
> +    )
> +{
> +    if (Buffer && Mdl) {
> +        MmUnmapLockedPages(Buffer, Mdl);
> +        MmFreePagesFromMdl(Mdl);
> +        ExFreePool(Mdl);
> +    }
> +}
> +
> +#endif  // _UTIL_H
> diff --git a/src/xendisk/xendisk.rc b/src/xendisk/xendisk.rc
> new file mode 100644
> index 0000000..df2e5b6
> --- /dev/null
> +++ b/src/xendisk/xendisk.rc
> @@ -0,0 +1,56 @@
> +/* 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 <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         COMPANY_NAME_STR
> +#define VER_LEGALCOPYRIGHT_STR      "Copyright (c) Citrix Systems Inc."
> +
> +#define VER_PRODUCTNAME_STR         "XENDISK"
> +#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        "XENDISK.SYS"
> +#define VER_FILEDESCRIPTION_STR     "XENDISK"
> +
> +#define VER_FILETYPE                VFT_DRV
> +#define VER_FILESUBTYPE             VFT2_DRV_SYSTEM
> +
> +#include <common.ver>
> diff --git a/src/xenvbd.inf b/src/xenvbd.inf
> index bc8627b..0d58453 100644
> --- a/src/xenvbd.inf
> +++ b/src/xenvbd.inf
> @@ -46,6 +46,7 @@ CoInst_CopyFiles=11
>  [SourceDisksFiles]
>  xenvbd.sys=0,,
>  xencrsh.sys=0,,
> +xendisk.sys=0,,
>  xenvbd_coinst.dll=0,,
> 
>  [Manufacturer]
> @@ -62,9 +63,25 @@ CopyFiles=XenVbd_Copyfiles
>  [XenVbd_Copyfiles]
>  xenvbd.sys
>  xencrsh.sys
> +xendisk.sys
> +
> +[XenVbd_Inst.HW]
> +AddReg=XenVbd_AddReg
> +
> +[XenVbd_AddReg]
> +HKR,,"UpperFilters",0x00010000,"xendisk"
> 
>  [XenVbd_Inst.Services]
>  AddService=xenvbd,2,XenVbd_Service,
> +AddService=xendisk,,XenDisk_Service,
> +
> +[XenDisk_Service]
> +DisplayName=%XenDiskDesc%
> +ServiceType=%SERVICE_KERNEL_DRIVER%
> +StartType=%SERVICE_BOOT_START%
> +ErrorControl=%SERVICE_ERROR_NORMAL%
> +ServiceBinary=%12%\xendisk.sys
> +LoadOrderGroup="Scsi Miniport"
> 
>  [XenVbd_Service]
>  DisplayName=%XenVbdDesc%
> @@ -95,6 +112,7 @@
> HKR,,CoInstallers32,0x00010000,"xenvbd_coinst_@MAJOR_VERSION@_@M
> INOR_VERSION@_@M
>  Company = "@COMPANY_NAME@"
>  DiskDesc = "@PRODUCT_NAME@ PV Storage Host Adapter Package"
>  XenVbdDesc= "@PRODUCT_NAME@ PV Storage Host Adapter"
> +XenDiskDesc= "@PRODUCT_NAME@ PV Storage Filter"
> 
>  SERVICE_BOOT_START = 0x0
>  SERVICE_SYSTEM_START = 0x1
> diff --git a/vs2012/package/package.vcxproj
> b/vs2012/package/package.vcxproj
> index 5e5fcbc..9782f19 100644
> --- a/vs2012/package/package.vcxproj
> +++ b/vs2012/package/package.vcxproj
> @@ -51,6 +51,9 @@
>  		<ProjectReference Include="..\xenvbd\xenvbd.vcxproj">
>  			<Project>{ef236371-3145-41b1-99c9-
> 82b33e353f17}</Project>
>  		</ProjectReference>
> +		<ProjectReference Include="..\xendisk\xendisk.vcxproj">
> +			<Project>{d7411b2c-2c43-434d-9f56-
> e10a3d2f5bad}</Project>
> +		</ProjectReference>
>  	</ItemGroup>
>  	<ItemGroup>
>  		<FilesToPackage
> Include="$(KIT)\Redist\DIFx\dpinst\EngMui\x86\dpinst.exe"
> Condition="'$(Platform)'=='Win32'" />
> diff --git a/vs2012/xendisk/xendisk.vcxproj
> b/vs2012/xendisk/xendisk.vcxproj
> new file mode 100644
> index 0000000..333bc40
> --- /dev/null
> +++ b/vs2012/xendisk/xendisk.vcxproj
> @@ -0,0 +1,84 @@
> +<?xml version="1.0" encoding="utf-8"?>
> +<Project DefaultTargets="Build" ToolsVersion="4.0"
> xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
> +	<Import Project="..\configs.props" />
> +
> +	<PropertyGroup Label="Globals">
> +		<Configuration>Windows Vista Debug</Configuration>
> +		<Platform Condition="'$(Platform)' == ''">Win32</Platform>
> +
> 	<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
> +	</PropertyGroup>
> +	<PropertyGroup Label="ProeprtySheets">
> +
> 	<PlatformToolset>WindowsKernelModeDriver8.0</PlatformToolset
> >
> +		<ConfigurationType>Driver</ConfigurationType>
> +		<DriverType>WDM</DriverType>
> +	</PropertyGroup>
> +
> +	<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
> +
> +	<PropertyGroup Label="Globals">
> +		<ProjectGuid>{D7411B2C-2C43-434D-9F56-
> E10A3D2F5BAD}</ProjectGuid>
> +	</PropertyGroup>
> +
> +	<Import Project="..\targets.props" />
> +	<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
> +
> +	<PropertyGroup>
> +
> 	<IncludePath>$(ProjectDir)..\..\include;$(IncludePath)</IncludePath
> >
> +		<RunCodeAnalysis>true</RunCodeAnalysis>
> +		<EnableInf2cat>false</EnableInf2cat>
> +
> 	<IntDir>..\$(ProjectName)\$(ConfigurationName)\$(Platform)\</Int
> Dir>
> +		<OutDir>..\$(ConfigurationName)\$(Platform)\</OutDir>
> +	</PropertyGroup>
> +
> +	<ItemDefinitionGroup>
> +		<ClCompile>
> +			<BufferSecurityCheck>false</BufferSecurityCheck>
> +
> 	<PreprocessorDefinitions>__MODULE__="XENDISK";%(Preprocesso
> rDefinitions)</PreprocessorDefinitions>
> +			<WarningLevel>EnableAllWarnings</WarningLevel>
> +
> 	<DisableSpecificWarnings>4548;4711;4820;4668;4255;6001;6054;28196
> ;%(DisableSpecificWarnings)</DisableSpecificWarnings>
> +
> 	<MultiProcessorCompilation>true</MultiProcessorCompilation>
> +			<EnablePREfast>true</EnablePREfast>
> +		</ClCompile>
> +		<Link>
> +
> 	<AdditionalDependencies>$(DDK_LIB_PATH)/libcntpr.lib;%(Addition
> alDependencies)</AdditionalDependencies>
> +		</Link>
> +		<Inf>
> +			<SpecifyArchitecture>true</SpecifyArchitecture>
> +
> 	<SpecifyDriverVerDirectiveVersion>true</SpecifyDriverVerDirective
> Version>
> +
> 	<TimeStamp>$(MAJOR_VERSION).$(MINOR_VERSION).$(MICRO_VE
> RSION).$(BUILD_NUMBER)</TimeStamp>
> +			<EnableVerbose>true</EnableVerbose>
> +		</Inf>
> +	</ItemDefinitionGroup>
> +	<ItemDefinitionGroup Condition="'$(Platform)'=='Win32'">
> +		<ClCompile>
> +
> 	<PreprocessorDefinitions>__i386__;%(PreprocessorDefinitions)</Pr
> eprocessorDefinitions>
> +		</ClCompile>
> +		<Inf>
> +			<Architecture>x86</Architecture>
> +		</Inf>
> +	</ItemDefinitionGroup>
> +	<ItemDefinitionGroup Condition="'$(Platform)'=='x64'">
> +		<ClCompile>
> +
> 	<PreprocessorDefinitions>__x86_64__;%(PreprocessorDefinitions)<
> /PreprocessorDefinitions>
> +		</ClCompile>
> +		<Inf>
> +			<Architecture>amd64</Architecture>
> +		</Inf>
> +	</ItemDefinitionGroup>
> +
> +	<ItemGroup>
> +		<FilesToPackage Include="$(TargetPath)" />
> +		<FilesToPackage Include="$(OutDir)$(TargetName).pdb" />
> +		<FilesToPackage Include="@(Inf->'%(CopyOutput)')"
> Condition="'@(Inf)'!=''" />
> +	</ItemGroup>
> +	<ItemGroup>
> +		<ClCompile Include="../../src/xendisk/driver.c" />
> +		<ClCompile Include="../../src/xendisk/fdo.c" />
> +		<ClCompile Include="../../src/xendisk/pdo.c" />
> +		<ClCompile Include="../../src/xendisk/thread.c" />
> +	</ItemGroup>
> +	<ItemGroup>
> +		<ResourceCompile Include="..\..\src\xendisk\xendisk.rc" />
> +	</ItemGroup>
> +	<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
> +</Project>
> diff --git a/vs2012/xendisk/xendisk.vcxproj.user
> b/vs2012/xendisk/xendisk.vcxproj.user
> new file mode 100644
> index 0000000..0b2b210
> --- /dev/null
> +++ b/vs2012/xendisk/xendisk.vcxproj.user
> @@ -0,0 +1,8 @@
> +<?xml version="1.0" encoding="utf-8"?>
> +<Project ToolsVersion="4.0"
> xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
> +	<PropertyGroup>
> +		<SignMode>TestSign</SignMode>
> +		<TestCertificate>..\..\src\xenvbd.pfx</TestCertificate>
> +
> 	<TimeStampServer>http://timestamp.verisign.com/scripts/timstam
> p.dll</TimeStampServer>
> +	</PropertyGroup>
> +</Project>
> diff --git a/vs2012/xenvbd.sln b/vs2012/xenvbd.sln
> index 86fb1a5..15113cf 100644
> --- a/vs2012/xenvbd.sln
> +++ b/vs2012/xenvbd.sln
> @@ -4,10 +4,13 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}")
> = "xenvbd", "xenvbd\xenvbd.vcx
>  	ProjectSection(ProjectDependencies) = postProject
>  		{50C08437-C1F3-4349-BF6A-7B55A06BF999} = {50C08437-
> C1F3-4349-BF6A-7B55A06BF999}
>  		{58F5BC43-B92E-4A2B-975D-0066EAB29092} = {58F5BC43-
> B92E-4A2B-975D-0066EAB29092}
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD} = {D7411B2C-
> 2C43-434D-9F56-E10A3D2F5BAD}
>  	EndProjectSection
>  EndProject
>  Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xencrsh",
> "xencrsh\xencrsh.vcxproj", "{58F5BC43-B92E-4A2B-975D-0066EAB29092}"
>  EndProject
> +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xendisk",
> "xendisk\xendisk.vcxproj", "{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}"
> +EndProject
>  Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xenvbd_coinst",
> "coinst\xenvbd_coinst.vcxproj", "{50C08437-C1F3-4349-BF6A-
> 7B55A06BF999}"
>  	ProjectSection(ProjectDependencies) = postProject
>  		{58F5BC43-B92E-4A2B-975D-0066EAB29092} = {58F5BC43-
> B92E-4A2B-975D-0066EAB29092}
> @@ -18,6 +21,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}")
> = "package", "package\package.
>  		{50C08437-C1F3-4349-BF6A-7B55A06BF999} = {50C08437-
> C1F3-4349-BF6A-7B55A06BF999}
>  		{58F5BC43-B92E-4A2B-975D-0066EAB29092} = {58F5BC43-
> B92E-4A2B-975D-0066EAB29092}
>          {EF236371-3145-41B1-99C9-82B33E353F17} = {EF236371-3145-41B1-99C9-
> 82B33E353F17}
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD} = {D7411B2C-
> 2C43-434D-9F56-E10A3D2F5BAD}
>  	EndProjectSection
>  EndProject
>  Global
> @@ -36,6 +40,30 @@ Global
>  		Windows Vista Release|x64 = Windows Vista Release|x64
>  	EndGlobalSection
>  	GlobalSection(ProjectConfigurationPlatforms) = postSolution
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7
> Debug|Win32.ActiveCfg = Windows 7 Debug|Win32
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7
> Debug|Win32.Build.0 = Windows 7 Debug|Win32
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7
> Debug|x64.ActiveCfg = Windows 7 Debug|x64
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7
> Debug|x64.Build.0 = Windows 7 Debug|x64
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7
> Release|Win32.ActiveCfg = Windows 7 Release|Win32
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7
> Release|Win32.Build.0 = Windows 7 Release|Win32
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7
> Release|x64.ActiveCfg = Windows 7 Release|x64
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7
> Release|x64.Build.0 = Windows 7 Release|x64
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8
> Debug|Win32.ActiveCfg = Windows 8 Debug|Win32
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8
> Debug|Win32.Build.0 = Windows 8 Debug|Win32
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8
> Debug|x64.ActiveCfg = Windows 8 Debug|x64
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8
> Debug|x64.Build.0 = Windows 8 Debug|x64
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8
> Release|Win32.ActiveCfg = Windows 8 Release|Win32
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8
> Release|Win32.Build.0 = Windows 8 Release|Win32
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8
> Release|x64.ActiveCfg = Windows 8 Release|x64
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8
> Release|x64.Build.0 = Windows 8 Release|x64
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista
> Debug|Win32.ActiveCfg = Windows Vista Debug|Win32
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista
> Debug|Win32.Build.0 = Windows Vista Debug|Win32
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista
> Debug|x64.ActiveCfg = Windows Vista Debug|x64
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista
> Debug|x64.Build.0 = Windows Vista Debug|x64
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista
> Release|Win32.ActiveCfg = Windows Vista Release|Win32
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista
> Release|Win32.Build.0 = Windows Vista Release|Win32
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista
> Release|x64.ActiveCfg = Windows Vista Release|x64
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista
> Release|x64.Build.0 = Windows Vista Release|x64
>  		{EF236371-3145-41B1-99C9-82B33E353F17}.Windows 7
> Debug|Win32.ActiveCfg = Windows 7 Debug|Win32
>  		{EF236371-3145-41B1-99C9-82B33E353F17}.Windows 7
> Debug|Win32.Build.0 = Windows 7 Debug|Win32
>  		{EF236371-3145-41B1-99C9-82B33E353F17}.Windows 7
> Debug|x64.ActiveCfg = Windows 7 Debug|x64
> diff --git a/vs2013/package/package.vcxproj
> b/vs2013/package/package.vcxproj
> index 5d0de4d..8b2fa4f 100644
> --- a/vs2013/package/package.vcxproj
> +++ b/vs2013/package/package.vcxproj
> @@ -80,6 +80,9 @@
>      <ProjectReference Include="..\xenvbd\xenvbd.vcxproj">
>        <Project>{ef236371-3145-41b1-99c9-82b33e353f17}</Project>
>      </ProjectReference>
> +    <ProjectReference Include="..\xendisk\xendisk.vcxproj">
> +      <Project>{d7411b2c-2c43-434d-9f56-e10a3d2f5bad}</Project>
> +    </ProjectReference>
>    </ItemGroup>
>    <ItemGroup>
>      <FilesToPackage
> Include="$(KIT)\Redist\DIFx\dpinst\EngMui\x86\dpinst.exe"
> Condition="'$(Platform)'=='Win32'" />
> diff --git a/vs2013/xendisk/xendisk.vcxproj
> b/vs2013/xendisk/xendisk.vcxproj
> new file mode 100644
> index 0000000..39b9163
> --- /dev/null
> +++ b/vs2013/xendisk/xendisk.vcxproj
> @@ -0,0 +1,112 @@
> +<?xml version="1.0" encoding="utf-8"?>
> +<Project DefaultTargets="Build" ToolsVersion="4.0"
> xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
> +  <Import Project="..\configs.props" />
> +  <PropertyGroup Label="Globals">
> +    <Configuration>Windows Vista Debug</Configuration>
> +    <Platform Condition="'$(Platform)' == ''">Win32</Platform>
> +    <DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
> +  </PropertyGroup>
> +  <PropertyGroup Label="ProeprtySheets">
> +    <ConfigurationType>Driver</ConfigurationType>
> +    <DriverType>WDM</DriverType>
> +  </PropertyGroup>
> +  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
> +  <PropertyGroup Label="Configuration"
> Condition="'$(Configuration)|$(Platform)'=='Windows 8 Release|Win32'">
> +    <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|Win32'">
> +    <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)'=='Windows 7 Debug|Win32'">
> +    <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 Release|x64'">
> +    <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 Release|x64'">
> +    <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 Debug|x64'">
> +    <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset>
> +  </PropertyGroup>
> +  <PropertyGroup Label="Configuration"
> Condition="'$(Configuration)|$(Platform)'=='Windows 8 Debug|x64'">
> +    <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset>
> +  </PropertyGroup>
> +  <PropertyGroup Label="Globals">
> +    <ProjectGuid>{D7411B2C-2C43-434D-9F56-
> E10A3D2F5BAD}</ProjectGuid>
> +  </PropertyGroup>
> +  <Import Project="..\targets.props" />
> +  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
> +  <PropertyGroup>
> +    <IncludePath>$(ProjectDir)..\..\include;$(IncludePath)</IncludePath>
> +    <RunCodeAnalysis>true</RunCodeAnalysis>
> +    <EnableInf2cat>false</EnableInf2cat>
> +    <IntDir>..\$(ProjectName)\$(ConfigurationName)\$(Platform)\</IntDir>
> +    <OutDir>..\$(ConfigurationName)\$(Platform)\</OutDir>
> +  </PropertyGroup>
> +  <ItemDefinitionGroup>
> +    <ClCompile>
> +      <BufferSecurityCheck>false</BufferSecurityCheck>
> +
> <PreprocessorDefinitions>__MODULE__="XENDISK";%(PreprocessorDefiniti
> ons)</PreprocessorDefinitions>
> +      <WarningLevel>EnableAllWarnings</WarningLevel>
> +
> <DisableSpecificWarnings>4548;4711;4820;4668;4255;6001;6054;28196;%(Disa
> bleSpecificWarnings)</DisableSpecificWarnings>
> +      <MultiProcessorCompilation>true</MultiProcessorCompilation>
> +      <EnablePREfast>true</EnablePREfast>
> +    </ClCompile>
> +    <Link>
> +
> <AdditionalDependencies>$(DDK_LIB_PATH)/libcntpr.lib;%(AdditionalDepen
> dencies)</AdditionalDependencies>
> +    </Link>
> +    <Inf>
> +      <SpecifyArchitecture>true</SpecifyArchitecture>
> +
> <SpecifyDriverVerDirectiveVersion>true</SpecifyDriverVerDirectiveVersion
> >
> +
> <TimeStamp>$(MAJOR_VERSION).$(MINOR_VERSION).$(MICRO_VERSION).
> $(BUILD_NUMBER)</TimeStamp>
> +      <EnableVerbose>true</EnableVerbose>
> +    </Inf>
> +  </ItemDefinitionGroup>
> +  <ItemDefinitionGroup Condition="'$(Platform)'=='Win32'">
> +    <ClCompile>
> +
> <PreprocessorDefinitions>__i386__;%(PreprocessorDefinitions)</Preproces
> sorDefinitions>
> +    </ClCompile>
> +    <Inf>
> +      <Architecture>x86</Architecture>
> +    </Inf>
> +  </ItemDefinitionGroup>
> +  <ItemDefinitionGroup Condition="'$(Platform)'=='x64'">
> +    <ClCompile>
> +
> <PreprocessorDefinitions>__x86_64__;%(PreprocessorDefinitions)</Prepro
> cessorDefinitions>
> +    </ClCompile>
> +    <Inf>
> +      <Architecture>amd64</Architecture>
> +    </Inf>
> +  </ItemDefinitionGroup>
> +  <ItemGroup>
> +    <FilesToPackage Include="$(TargetPath)" />
> +    <FilesToPackage Include="$(OutDir)$(TargetName).pdb" />
> +    <FilesToPackage Include="@(Inf->'%(CopyOutput)')"
> Condition="'@(Inf)'!=''" />
> +  </ItemGroup>
> +  <ItemGroup>
> +    <ClCompile Include="../../src/xendisk/driver.c" />
> +    <ClCompile Include="../../src/xendisk/fdo.c" />
> +    <ClCompile Include="../../src/xendisk/pdo.c" />
> +    <ClCompile Include="../../src/xendisk/thread.c" />
> +  </ItemGroup>
> +  <ItemGroup>
> +    <ResourceCompile Include="..\..\src\xendisk\xendisk.rc" />
> +  </ItemGroup>
> +  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
> +</Project>
> diff --git a/vs2013/xendisk/xendisk.vcxproj.user
> b/vs2013/xendisk/xendisk.vcxproj.user
> new file mode 100644
> index 0000000..1f1f3c0
> --- /dev/null
> +++ b/vs2013/xendisk/xendisk.vcxproj.user
> @@ -0,0 +1,8 @@
> +<?xml version="1.0" encoding="utf-8"?>
> +<Project ToolsVersion="4.0"
> xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
> +  <PropertyGroup>
> +    <SignMode>TestSign</SignMode>
> +    <TestCertificate>..\..\src\xenvbd.pfx</TestCertificate>
> +
> <TimeStampServer>http://timestamp.verisign.com/scripts/timstamp.dll</Ti
> meStampServer>
> +  </PropertyGroup>
> +</Project>
> diff --git a/vs2013/xenvbd.sln b/vs2013/xenvbd.sln
> index 13128c5..da798d2 100644
> --- a/vs2013/xenvbd.sln
> +++ b/vs2013/xenvbd.sln
> @@ -4,10 +4,13 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}")
> = "xenvbd", "xenvbd\xenvbd.vcx
>  	ProjectSection(ProjectDependencies) = postProject
>  		{50C08437-C1F3-4349-BF6A-7B55A06BF999} = {50C08437-
> C1F3-4349-BF6A-7B55A06BF999}
>  		{58F5BC43-B92E-4A2B-975D-0066EAB29092} = {58F5BC43-
> B92E-4A2B-975D-0066EAB29092}
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD} = {D7411B2C-
> 2C43-434D-9F56-E10A3D2F5BAD}
>  	EndProjectSection
>  EndProject
>  Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xencrsh",
> "xencrsh\xencrsh.vcxproj", "{58F5BC43-B92E-4A2B-975D-0066EAB29092}"
>  EndProject
> +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xendisk",
> "xendisk\xendisk.vcxproj", "{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}"
> +EndProject
>  Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xenvbd_coinst",
> "coinst\xenvbd_coinst.vcxproj", "{50C08437-C1F3-4349-BF6A-
> 7B55A06BF999}"
>      ProjectSection(ProjectDependencies) = postProject
>  		{58F5BC43-B92E-4A2B-975D-0066EAB29092} = {58F5BC43-
> B92E-4A2B-975D-0066EAB29092}
> @@ -18,6 +21,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}")
> = "package", "package\package.
>  		{50C08437-C1F3-4349-BF6A-7B55A06BF999} = {50C08437-
> C1F3-4349-BF6A-7B55A06BF999}
>  		{58F5BC43-B92E-4A2B-975D-0066EAB29092} = {58F5BC43-
> B92E-4A2B-975D-0066EAB29092}
>          {EF236371-3145-41B1-99C9-82B33E353F17} = {EF236371-3145-41B1-99C9-
> 82B33E353F17}
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD} = {D7411B2C-
> 2C43-434D-9F56-E10A3D2F5BAD}
>  	EndProjectSection
>  EndProject
>  Global
> @@ -36,6 +40,30 @@ Global
>  		Windows Vista Release|x64 = Windows Vista Release|x64
>  	EndGlobalSection
>  	GlobalSection(ProjectConfigurationPlatforms) = postSolution
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7
> Debug|Win32.ActiveCfg = Windows 7 Debug|Win32
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7
> Debug|Win32.Build.0 = Windows 7 Debug|Win32
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7
> Debug|x64.ActiveCfg = Windows 7 Debug|x64
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7
> Debug|x64.Build.0 = Windows 7 Debug|x64
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7
> Release|Win32.ActiveCfg = Windows 7 Release|Win32
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7
> Release|Win32.Build.0 = Windows 7 Release|Win32
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7
> Release|x64.ActiveCfg = Windows 7 Release|x64
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7
> Release|x64.Build.0 = Windows 7 Release|x64
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8
> Debug|Win32.ActiveCfg = Windows 8 Debug|Win32
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8
> Debug|Win32.Build.0 = Windows 8 Debug|Win32
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8
> Debug|x64.ActiveCfg = Windows 8 Debug|x64
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8
> Debug|x64.Build.0 = Windows 8 Debug|x64
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8
> Release|Win32.ActiveCfg = Windows 8 Release|Win32
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8
> Release|Win32.Build.0 = Windows 8 Release|Win32
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8
> Release|x64.ActiveCfg = Windows 8 Release|x64
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8
> Release|x64.Build.0 = Windows 8 Release|x64
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista
> Debug|Win32.ActiveCfg = Windows Vista Debug|Win32
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista
> Debug|Win32.Build.0 = Windows Vista Debug|Win32
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista
> Debug|x64.ActiveCfg = Windows Vista Debug|x64
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista
> Debug|x64.Build.0 = Windows Vista Debug|x64
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista
> Release|Win32.ActiveCfg = Windows Vista Release|Win32
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista
> Release|Win32.Build.0 = Windows Vista Release|Win32
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista
> Release|x64.ActiveCfg = Windows Vista Release|x64
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista
> Release|x64.Build.0 = Windows Vista Release|x64
>  		{EF236371-3145-41B1-99C9-82B33E353F17}.Windows 7
> Debug|Win32.ActiveCfg = Windows 7 Debug|Win32
>  		{EF236371-3145-41B1-99C9-82B33E353F17}.Windows 7
> Debug|Win32.Build.0 = Windows 7 Debug|Win32
>  		{EF236371-3145-41B1-99C9-82B33E353F17}.Windows 7
> Debug|x64.ActiveCfg = Windows 7 Debug|x64
> --
> 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 Thu Oct 30 10:25:24 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 30 Oct 2014 10:25: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 1Xjmuy-00020t-4a; Thu, 30 Oct 2014 10:25:24 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <Paul.Durrant@citrix.com>) id 1Xjmuv-00020a-Ad
	for win-pv-devel@lists.xenproject.org; Thu, 30 Oct 2014 10:25:22 +0000
Received: from [85.158.139.211] by server-14.bemta-5.messagelabs.com id
	19/95-02746-01212545; Thu, 30 Oct 2014 10:25:20 +0000
X-Env-Sender: Paul.Durrant@citrix.com
X-Msg-Ref: server-16.tower-206.messagelabs.com!1414664704!8435577!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.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 5445 invoked from network); 30 Oct 2014 10:25:04 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-16.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	30 Oct 2014 10:25:04 -0000
X-IronPort-AV: E=Sophos;i="5.07,284,1413244800"; d="scan'208";a="26370603"
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: [PATCH 3/3] Add XenDisk device upper filter.
Thread-Index: AQHP8qIx01q8dzI3+02hNUazaT0YzpxIchtg
Date: Thu, 30 Oct 2014 10:25:01 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD01113A9A4@AMSPEX01CL01.citrite.net>
References: <1414495644-5948-1-git-send-email-owen.smith@citrix.com>
	<1414495644-5948-4-git-send-email-owen.smith@citrix.com>
In-Reply-To: <1414495644-5948-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/3] Add XenDisk device upper filter.
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 [mailto:owen.smith@citrix.com]
> Sent: 28 October 2014 11:27
> To: win-pv-devel@lists.xenproject.org
> Cc: Paul Durrant; Owen Smith
> Subject: [PATCH 3/3] Add XenDisk device upper filter.
> 
> XenDisk intercepts and translates
> IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES
> into SCSIOP_UNMAP SRBs. Storport will pass on these SCSIOP_UNMAP
> requests
> to XenVbd, which will create the appropriate BLKIF_OP_DISCARD requests.
> XenDisk is only neccessary because Storport does not do the translation
> to SCSIOP_UNMAPs.
> 
> Signed-off-by: Owen Smith <owen.smith@citrix.com>

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

> ---
>  build.py                            |    1 +
>  src/xendisk/assert.h                |  220 ++++
>  src/xendisk/debug.h                 |   94 ++
>  src/xendisk/driver.c                |  203 ++++
>  src/xendisk/driver.h                |   68 ++
>  src/xendisk/fdo.c                   | 1862 +++++++++++++++++++++++++++++++
>  src/xendisk/fdo.h                   |   78 ++
>  src/xendisk/mutex.h                 |  113 ++
>  src/xendisk/pdo.c                   | 2079
> +++++++++++++++++++++++++++++++++++
>  src/xendisk/pdo.h                   |   90 ++
>  src/xendisk/thread.c                |  225 ++++
>  src/xendisk/thread.h                |   73 ++
>  src/xendisk/types.h                 |   53 +
>  src/xendisk/util.h                  |  222 ++++
>  src/xendisk/xendisk.rc              |   56 +
>  src/xenvbd.inf                      |   18 +
>  vs2012/package/package.vcxproj      |    3 +
>  vs2012/xendisk/xendisk.vcxproj      |   84 ++
>  vs2012/xendisk/xendisk.vcxproj.user |    8 +
>  vs2012/xenvbd.sln                   |   28 +
>  vs2013/package/package.vcxproj      |    3 +
>  vs2013/xendisk/xendisk.vcxproj      |  112 ++
>  vs2013/xendisk/xendisk.vcxproj.user |    8 +
>  vs2013/xenvbd.sln                   |   28 +
>  24 files changed, 5729 insertions(+)
>  create mode 100644 src/xendisk/assert.h
>  create mode 100644 src/xendisk/debug.h
>  create mode 100644 src/xendisk/driver.c
>  create mode 100644 src/xendisk/driver.h
>  create mode 100644 src/xendisk/fdo.c
>  create mode 100644 src/xendisk/fdo.h
>  create mode 100644 src/xendisk/mutex.h
>  create mode 100644 src/xendisk/pdo.c
>  create mode 100644 src/xendisk/pdo.h
>  create mode 100644 src/xendisk/thread.c
>  create mode 100644 src/xendisk/thread.h
>  create mode 100644 src/xendisk/types.h
>  create mode 100644 src/xendisk/util.h
>  create mode 100644 src/xendisk/xendisk.rc
>  create mode 100644 vs2012/xendisk/xendisk.vcxproj
>  create mode 100644 vs2012/xendisk/xendisk.vcxproj.user
>  create mode 100644 vs2013/xendisk/xendisk.vcxproj
>  create mode 100644 vs2013/xendisk/xendisk.vcxproj.user
> 
> diff --git a/build.py b/build.py
> index 26261ad..3a71d0c 100644
> --- a/build.py
> +++ b/build.py
> @@ -368,6 +368,7 @@ if __name__ == '__main__':
> 
>      if len(sys.argv) <= 2 or sdv[sys.argv[2]]:
>          run_sdv('xencrsh', driver, vs)
> +        run_sdv('xendisk', driver, vs)
>          run_sdv('xenvbd', driver, vs)
> 
>      archive(driver + '\\source.tgz', manifest().splitlines(), tgz=True)
> diff --git a/src/xendisk/assert.h b/src/xendisk/assert.h
> new file mode 100644
> index 0000000..cd571bd
> --- /dev/null
> +++ b/src/xendisk/assert.h
> @@ -0,0 +1,220 @@
> +/* 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 _XENDISK_ASSERT_H
> +#define _XENDISK_ASSERT_H
> +
> +#include <ntddk.h>
> +
> +#include "debug.h"
> +
> +static FORCEINLINE VOID
> +__BugCheck(
> +    __in  ULONG       Code,
> +    __in_opt ULONG_PTR   Parameter1,
> +    __in_opt ULONG_PTR   Parameter2,
> +    __in_opt ULONG_PTR   Parameter3,
> +    __in_opt ULONG_PTR   Parameter4
> +    )
> +{
> +#pragma prefast(suppress:28159)
> +    KeBugCheckEx(Code,
> +                 Parameter1,
> +                 Parameter2,
> +                 Parameter3,
> +                 Parameter4);
> +}
> +
> +#define ASSERTION_FAILURE   0x0000DEAD
> +
> +
> +#define BUG(_TEXT)                                              \
> +        do {                                                    \
> +            const CHAR  *_Text = (_TEXT);                       \
> +            const CHAR  *_File = __FILE__;                      \
> +            ULONG       _Line = __LINE__;                       \
> +                                                                \
> +            Error("BUG: " _TEXT "\n");                          \
> +            __BugCheck(ASSERTION_FAILURE,                       \
> +                       (ULONG_PTR)_Text,                        \
> +                       (ULONG_PTR)_File,                        \
> +                       (ULONG_PTR)_Line,                        \
> +                       0);                                      \
> +        } while (FALSE)
> +
> +#define BUG_MSG(_TEXT1, _TEXT2)                                 \
> +        do {                                                    \
> +            const CHAR  *_Text1 = (_TEXT1);                     \
> +            const CHAR  *_Text2 = (_TEXT2);                     \
> +            const CHAR  *_File = __FILE__;                      \
> +            ULONG       _Line = __LINE__;                       \
> +                                                                \
> +            Error("BUG: " _TEXT1 " %s\n", _Text2);              \
> +            __BugCheck(ASSERTION_FAILURE,                       \
> +                       (ULONG_PTR)_Text1,                       \
> +                       (ULONG_PTR)_File,                        \
> +                       (ULONG_PTR)_Line,                        \
> +                       (ULONG_PTR)_Text2);                      \
> +        } while (FALSE)
> +
> +#define BUG_ON(_EXP)                           \
> +        if (_EXP) BUG(#_EXP)
> +
> +#define BUG_ON_MSG(_EXP, _TEXT)                \
> +        if (_EXP) BUG_MSG(#_EXP, _TEXT)
> +
> +#if DBG
> +
> +#define __NT_ASSERT(_EXP)                                       \
> +        ((!(_EXP)) ?                                            \
> +        (Error("ASSERTION FAILED: " #_EXP "\n"),                \
> +         __annotation(L"Debug", L"AssertFail", L#_EXP),         \
> +         DbgRaiseAssertionFailure(), FALSE) :                   \
> +        TRUE)
> +
> +#define __NT_ASSERT_MSG(_EXP, _TEXT)                            \
> +        ((!(_EXP)) ?                                            \
> +        (Error("ASSERTION FAILED: " #_EXP " " #_TEXT "\n"),     \
> +         __annotation(L"Debug", L"AssertFail", L#_EXP),         \
> +         DbgRaiseAssertionFailure(), FALSE) :                   \
> +        TRUE)
> +
> +#define __ASSERT(_EXP)              __NT_ASSERT(_EXP)
> +#define __ASSERT_MSG(_EXP, _TEXT)   __NT_ASSERT_MSG(_EXP, _TEXT)
> +
> +#else   // DBG
> +
> +#define __ASSERT(_EXP)              BUG_ON(!(_EXP))
> +#define __ASSERT_MSG(_EXP, _TEXT)   BUG_ON_MSG(!(_EXP), _TEXT)
> +
> +#endif  // DBG
> +
> +#undef  ASSERT
> +
> +#define ASSERT(_EXP)                    \
> +        do {                            \
> +            __ASSERT(_EXP);             \
> +            __analysis_assume(_EXP);    \
> +        } while (FALSE)
> +
> +#define ASSERT_MSG(_EXP, _TEXT)         \
> +        do {                            \
> +            __ASSERT_MSG(_EXP, _TEXT);  \
> +            __analysis_assume(_EXP);    \
> +        } while (FALSE)
> +
> +#define ASSERT3U(_X, _OP, _Y)                       \
> +        do {                                        \
> +            ULONGLONG   _Lval = (ULONGLONG)(_X);    \
> +            ULONGLONG   _Rval = (ULONGLONG)(_Y);    \
> +            if (!(_Lval _OP _Rval)) {               \
> +                Error("%s = %llu\n", #_X, _Lval);   \
> +                Error("%s = %llu\n", #_Y, _Rval);   \
> +                ASSERT(_X _OP _Y);                  \
> +            }                                       \
> +        } while (FALSE)
> +
> +#define ASSERT3S(_X, _OP, _Y)                       \
> +        do {                                        \
> +            LONGLONG    _Lval = (LONGLONG)(_X);     \
> +            LONGLONG    _Rval = (LONGLONG)(_Y);     \
> +            if (!(_Lval _OP _Rval)) {               \
> +                Error("%s = %lld\n", #_X, _Lval);   \
> +                Error("%s = %lld\n", #_Y, _Rval);   \
> +                ASSERT(_X _OP _Y);                  \
> +            }                                       \
> +        } while (FALSE)
> +
> +#define ASSERT3P(_X, _OP, _Y)                       \
> +        do {                                        \
> +            PVOID   _Lval = (PVOID)(_X);            \
> +            PVOID   _Rval = (PVOID)(_Y);            \
> +            if (!(_Lval _OP _Rval)) {               \
> +                Error("%s = %p\n", #_X, _Lval);     \
> +                Error("%s = %p\n", #_Y, _Rval);     \
> +                ASSERT(_X _OP _Y);                  \
> +            }                                       \
> +        } while (FALSE)
> +
> +#define ASSERTREFCOUNT(_X, _OP, _Y, _Z)             \
> +        do {                                        \
> +            LONG    _L = (LONG)(_X);                \
> +            LONG    _R = (LONG)(_Y);                \
> +            if (!(_L _OP _R)) {                     \
> +                Error("%s:%s = %d\n", (_Z), #_X, _L); \
> +                Error("%s:%s = %d\n", (_Z), #_Y, _R); \
> +                ASSERT_MSG(_X _OP _Y, (_Z));        \
> +            }                                       \
> +        } while (FALSE)
> +
> +#ifndef TEST_MEMORY
> +#define TEST_MEMORY DBG
> +#endif
> +
> +#if TEST_MEMORY
> +
> +__checkReturn
> +static __inline BOOLEAN
> +_IsZeroMemory(
> +    __in const PCHAR Caller,
> +    __in const PCHAR Name,
> +    __in PVOID       Buffer,
> +    __in ULONG       Length
> +    )
> +{
> +    ULONG           Offset;
> +
> +    Offset = 0;
> +    while (Offset < Length) {
> +        if (*((PUCHAR)Buffer + Offset) != 0) {
> +            Error("%s: non-zero byte in %s (0x%p+0x%x)\n", Caller, Name,
> Buffer, Offset);
> +            return FALSE;
> +        }
> +        Offset++;
> +    }
> +
> +    return TRUE;
> +}
> +
> +#define IsZeroMemory(_Buffer, _Length) \
> +        _IsZeroMemory(__FUNCTION__, #_Buffer, (_Buffer), (_Length))
> +
> +#else   // TEST_MEMORY
> +
> +#define IsZeroMemory(_Buffer, _Length)  TRUE
> +
> +#endif  // TEST_MEMORY
> +
> +#define IMPLY(_X, _Y)   (!(_X) || (_Y))
> +#define EQUIV(_X, _Y)   (IMPLY((_X), (_Y)) && IMPLY((_Y), (_X)))
> +
> +#endif  // _XENDISK_ASSERT_H
> +
> diff --git a/src/xendisk/debug.h b/src/xendisk/debug.h
> new file mode 100644
> index 0000000..f592f86
> --- /dev/null
> +++ b/src/xendisk/debug.h
> @@ -0,0 +1,94 @@
> +/* 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 _DEBUG_H
> +#define _DEBUG_H
> +
> +#include <ntddk.h>
> +#include <stdarg.h>
> +
> +#ifdef  _SDV_
> +#define __MODULE__ ""
> +#endif
> +
> +// DEBUG_FILTER_MASKs
> +// Set these to see relevant output
> +// ERROR        0x00000001
> +// WARNING      0x00000002
> +// TRACE        0x00000004
> +// INFO         0x00000008
> +
> +#pragma warning(disable:4127)   // conditional expression is constant
> +
> +//
> +// Debug Output and Logging
> +//
> +static __inline VOID
> +__DebugMessage(
> +    __in    ULONG       Level,
> +    __in __nullterminated const CHAR  *Prefix,
> +    __in __nullterminated const CHAR  *Format,
> +    ...
> +    )
> +{
> +    va_list         Arguments;
> +
> +    va_start(Arguments, Format);
> +
> +#pragma prefast(suppress:6001) // Using uninitialized memory
> +    vDbgPrintExWithPrefix(Prefix,
> +                          DPFLTR_IHVDRIVER_ID,
> +                          Level,
> +                          Format,
> +                          Arguments);
> +    va_end(Arguments);
> +}
> +
> +#define Error(...)  \
> +        __DebugMessage(DPFLTR_ERROR_LEVEL, __MODULE__ "|"
> __FUNCTION__ ":", __VA_ARGS__)
> +
> +#define Warning(...)  \
> +        __DebugMessage(DPFLTR_WARNING_LEVEL, __MODULE__ "|"
> __FUNCTION__ ":", __VA_ARGS__)
> +
> +#if DBG
> +#define Trace(...)  \
> +        __DebugMessage(DPFLTR_TRACE_LEVEL, __MODULE__ "|"
> __FUNCTION__ ":", __VA_ARGS__)
> +#else   // DBG
> +#define Trace(...) \
> +        (VOID)(__VA_ARGS__)
> +#endif  // DBG
> +
> +#define Verbose(...) \
> +        __DebugMessage(DPFLTR_INFO_LEVEL, __MODULE__ "|"
> __FUNCTION__ ":", __VA_ARGS__)
> +
> +#include "assert.h"
> +
> +#endif  // _DEBUG_H
> diff --git a/src/xendisk/driver.c b/src/xendisk/driver.c
> new file mode 100644
> index 0000000..743fc61
> --- /dev/null
> +++ b/src/xendisk/driver.c
> @@ -0,0 +1,203 @@
> +/* 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 "driver.h"
> +#include "util.h"
> +#include "debug.h"
> +#include "assert.h"
> +#include <version.h>
> +
> +extern PULONG       InitSafeBootMode;
> +
> +typedef struct _XENDISK_DRIVER {
> +    PDRIVER_OBJECT              DriverObject;
> +} XENDISK_DRIVER, *PXENDISK_DRIVER;
> +
> +static XENDISK_DRIVER   Driver;
> +
> +static FORCEINLINE VOID
> +__DriverSetDriverObject(
> +    IN  PDRIVER_OBJECT  DriverObject
> +    )
> +{
> +    Driver.DriverObject = DriverObject;
> +}
> +
> +static FORCEINLINE PDRIVER_OBJECT
> +__DriverGetDriverObject(
> +    VOID
> +    )
> +{
> +    return Driver.DriverObject;
> +}
> +
> +PDRIVER_OBJECT
> +DriverGetDriverObject(
> +    VOID
> +    )
> +{
> +    return __DriverGetDriverObject();
> +}
> +
> +DRIVER_UNLOAD   DriverUnload;
> +
> +VOID
> +DriverUnload(
> +    IN  PDRIVER_OBJECT  DriverObject
> +    )
> +{
> +    ASSERT3P(DriverObject, ==, __DriverGetDriverObject());
> +
> +    Trace("====>\n");
> +
> +    __DriverSetDriverObject(NULL);
> +
> +    ASSERT(IsZeroMemory(&Driver, sizeof (XENDISK_DRIVER)));
> +
> +    Trace("<====\n");
> +}
> +
> +DRIVER_ADD_DEVICE   AddDevice;
> +
> +NTSTATUS
> +#pragma prefast(suppress:28152) // Does not clear
> DO_DEVICE_INITIALIZING
> +AddDevice(
> +    IN  PDRIVER_OBJECT  DriverObject,
> +    IN  PDEVICE_OBJECT  PhysicalDeviceObject
> +    )
> +{
> +    NTSTATUS            status;
> +
> +    ASSERT3P(DriverObject, ==, __DriverGetDriverObject());
> +
> +    status = FdoCreate(PhysicalDeviceObject);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    return STATUS_SUCCESS;
> +
> +fail1:
> +    Error("fail1 (%08x)\n", status);
> +
> +    return status;
> +}
> +
> +DRIVER_DISPATCH Dispatch;
> +
> +NTSTATUS
> +Dispatch(
> +    IN PDEVICE_OBJECT   DeviceObject,
> +    IN PIRP             Irp
> +    )
> +{
> +    PXENDISK_DX         Dx;
> +    NTSTATUS            status;
> +
> +    Dx = (PXENDISK_DX)DeviceObject->DeviceExtension;
> +    ASSERT3P(Dx->DeviceObject, ==, DeviceObject);
> +
> +    if (Dx->DevicePnpState == Deleted) {
> +        status = STATUS_NO_SUCH_DEVICE;
> +
> +        Irp->IoStatus.Status = status;
> +        IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +        goto done;
> +    }
> +
> +    status = STATUS_NOT_SUPPORTED;
> +    switch (Dx->Type) {
> +    case PHYSICAL_DEVICE_OBJECT: {
> +        PXENDISK_PDO    Pdo = Dx->Pdo;
> +
> +        status = PdoDispatch(Pdo, Irp);
> +        break;
> +    }
> +    case FUNCTION_DEVICE_OBJECT: {
> +        PXENDISK_FDO    Fdo = Dx->Fdo;
> +
> +        status = FdoDispatch(Fdo, Irp);
> +        break;
> +    }
> +    default:
> +        ASSERT(FALSE);
> +        break;
> +    }
> +
> +done:
> +    return status;
> +}
> +
> +DRIVER_INITIALIZE   DriverEntry;
> +
> +NTSTATUS
> +DriverEntry(
> +    IN  PDRIVER_OBJECT  DriverObject,
> +    IN  PUNICODE_STRING RegistryPath
> +    )
> +{
> +    ULONG               Index;
> +
> +    ASSERT3P(__DriverGetDriverObject(), ==, NULL);
> +    UNREFERENCED_PARAMETER(RegistryPath);
> +
> +    ExInitializeDriverRuntime(DrvRtPoolNxOptIn);
> +
> +    Trace("====>\n");
> +
> +    __DriverSetDriverObject(DriverObject);
> +
> +    DriverObject->DriverUnload = DriverUnload;
> +
> +    if (*InitSafeBootMode > 0)
> +        goto done;
> +
> +    Verbose("XENDISK %d.%d.%d (%d) (%02d.%02d.%04d)\n",
> +            MAJOR_VERSION,
> +            MINOR_VERSION,
> +            MICRO_VERSION,
> +            BUILD_NUMBER,
> +            DAY,
> +            MONTH,
> +            YEAR);
> +
> +    DriverObject->DriverExtension->AddDevice = AddDevice;
> +
> +    for (Index = 0; Index <= IRP_MJ_MAXIMUM_FUNCTION; Index++) {
> +#pragma prefast(suppress:28169) // No __drv_dispatchType annotation
> +#pragma prefast(suppress:28168) // No matching __drv_dispatchType
> annotation for IRP_MJ_CREATE
> +        DriverObject->MajorFunction[Index] = Dispatch;
> +    }
> +
> +done:
> +    Trace("<====\n");
> +    return STATUS_SUCCESS;
> +}
> diff --git a/src/xendisk/driver.h b/src/xendisk/driver.h
> new file mode 100644
> index 0000000..b47e21b
> --- /dev/null
> +++ b/src/xendisk/driver.h
> @@ -0,0 +1,68 @@
> +/* 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 _XENDISK_DRIVER_H
> +#define _XENDISK_DRIVER_H
> +
> +#include "fdo.h"
> +#include "pdo.h"
> +
> +extern PDRIVER_OBJECT
> +DriverGetDriverObject(
> +    VOID
> +    );
> +
> +#pragma warning(push)
> +#pragma warning(disable:4201) // nonstandard extension used : nameless
> struct/union
> +
> +typedef struct _XENDISK_DX {
> +    PDEVICE_OBJECT      DeviceObject;
> +    DEVICE_OBJECT_TYPE  Type;
> +
> +    DEVICE_PNP_STATE    DevicePnpState;
> +    DEVICE_PNP_STATE    PreviousDevicePnpState;
> +
> +    SYSTEM_POWER_STATE  SystemPowerState;
> +    DEVICE_POWER_STATE  DevicePowerState;
> +
> +    IO_REMOVE_LOCK      RemoveLock;
> +
> +    LIST_ENTRY          ListEntry;
> +
> +    union {
> +        PXENDISK_FDO    Fdo;
> +        PXENDISK_PDO    Pdo;
> +    };
> +} XENDISK_DX, *PXENDISK_DX;
> +
> +#pragma warning(pop)
> +
> +#endif // _XENDISK_DRIVER_H
> diff --git a/src/xendisk/fdo.c b/src/xendisk/fdo.c
> new file mode 100644
> index 0000000..771c82e
> --- /dev/null
> +++ b/src/xendisk/fdo.c
> @@ -0,0 +1,1862 @@
> +/* 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.
> + */
> +
> +#define INITGUID 1
> +
> +#include <ntddk.h>
> +#include <wdmguid.h>
> +#include <ntstrsafe.h>
> +#include <stdlib.h>
> +#include <names.h>
> +
> +#include "driver.h"
> +#include "fdo.h"
> +#include "pdo.h"
> +#include "thread.h"
> +#include "mutex.h"
> +#include "debug.h"
> +#include "assert.h"
> +#include "util.h"
> +
> +#define FDO_TAG 'ODF'
> +
> +struct _XENDISK_FDO {
> +    PXENDISK_DX                     Dx;
> +    PDEVICE_OBJECT                  LowerDeviceObject;
> +    PDEVICE_OBJECT                  PhysicalDeviceObject;
> +
> +    PXENDISK_THREAD                 SystemPowerThread;
> +    PIRP                            SystemPowerIrp;
> +    PXENDISK_THREAD                 DevicePowerThread;
> +    PIRP                            DevicePowerIrp;
> +
> +    MUTEX                           Mutex;
> +    ULONG                           References;
> +};
> +
> +static FORCEINLINE PVOID
> +__FdoAllocate(
> +    IN  ULONG   Length
> +    )
> +{
> +    return __AllocateNonPagedPoolWithTag(__FUNCTION__, __LINE__,
> Length, FDO_TAG);
> +}
> +
> +static FORCEINLINE VOID
> +__FdoFree(
> +    IN  PVOID   Buffer
> +    )
> +{
> +    __FreePoolWithTag(Buffer, FDO_TAG);
> +}
> +
> +static FORCEINLINE VOID
> +__FdoSetDevicePnpState(
> +    IN  PXENDISK_FDO        Fdo,
> +    IN  DEVICE_PNP_STATE    State
> +    )
> +{
> +    PXENDISK_DX             Dx = Fdo->Dx;
> +
> +    // We can never transition out of the deleted state
> +    ASSERT(Dx->DevicePnpState != Deleted || State == Deleted);
> +
> +    Dx->PreviousDevicePnpState = Dx->DevicePnpState;
> +    Dx->DevicePnpState = State;
> +}
> +
> +static FORCEINLINE VOID
> +__FdoRestoreDevicePnpState(
> +    IN  PXENDISK_FDO        Fdo,
> +    IN  DEVICE_PNP_STATE    State
> +    )
> +{
> +    PXENDISK_DX             Dx = Fdo->Dx;
> +
> +    if (Dx->DevicePnpState == State)
> +        Dx->DevicePnpState = Dx->PreviousDevicePnpState;
> +}
> +
> +static FORCEINLINE DEVICE_PNP_STATE
> +__FdoGetDevicePnpState(
> +    IN  PXENDISK_FDO    Fdo
> +    )
> +{
> +    PXENDISK_DX         Dx = Fdo->Dx;
> +
> +    return Dx->DevicePnpState;
> +}
> +
> +static FORCEINLINE VOID
> +__FdoSetDevicePowerState(
> +    IN  PXENDISK_FDO        Fdo,
> +    IN  DEVICE_POWER_STATE  State
> +    )
> +{
> +    PXENDISK_DX             Dx = Fdo->Dx;
> +
> +    Dx->DevicePowerState = State;
> +}
> +
> +static FORCEINLINE DEVICE_POWER_STATE
> +__FdoGetDevicePowerState(
> +    IN  PXENDISK_FDO    Fdo
> +    )
> +{
> +    PXENDISK_DX         Dx = Fdo->Dx;
> +
> +    return Dx->DevicePowerState;
> +}
> +
> +static FORCEINLINE VOID
> +__FdoSetSystemPowerState(
> +    IN  PXENDISK_FDO        Fdo,
> +    IN  SYSTEM_POWER_STATE  State
> +    )
> +{
> +    PXENDISK_DX              Dx = Fdo->Dx;
> +
> +    Dx->SystemPowerState = State;
> +}
> +
> +static FORCEINLINE SYSTEM_POWER_STATE
> +__FdoGetSystemPowerState(
> +    IN  PXENDISK_FDO    Fdo
> +    )
> +{
> +    PXENDISK_DX         Dx = Fdo->Dx;
> +
> +    return Dx->SystemPowerState;
> +}
> +
> +static FORCEINLINE PDEVICE_OBJECT
> +__FdoGetPhysicalDeviceObject(
> +    IN  PXENDISK_FDO    Fdo
> +    )
> +{
> +    return Fdo->PhysicalDeviceObject;
> +}
> +
> +VOID
> +FdoAddPhysicalDeviceObject(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PDEVICE_OBJECT  DeviceObject
> +    )
> +{
> +    PXENDISK_DX         Dx;
> +
> +    Dx = (PXENDISK_DX)DeviceObject->DeviceExtension;
> +    ASSERT3U(Dx->Type, ==, PHYSICAL_DEVICE_OBJECT);
> +
> +    InsertTailList(&Fdo->Dx->ListEntry, &Dx->ListEntry);
> +    ASSERT3U(Fdo->References, !=, 0);
> +    Fdo->References++;
> +}
> +
> +VOID
> +FdoRemovePhysicalDeviceObject(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PDEVICE_OBJECT  DeviceObject
> +    )
> +{
> +    PXENDISK_DX         Dx;
> +
> +    Dx = (PXENDISK_DX)DeviceObject->DeviceExtension;
> +    ASSERT3U(Dx->Type, ==, PHYSICAL_DEVICE_OBJECT);
> +
> +    RemoveEntryList(&Dx->ListEntry);
> +    ASSERT3U(Fdo->References, !=, 0);
> +    --Fdo->References;
> +}
> +
> +static FORCEINLINE VOID
> +__FdoAcquireMutex(
> +    IN  PXENDISK_FDO     Fdo
> +    )
> +{
> +    AcquireMutex(&Fdo->Mutex);
> +}
> +
> +VOID
> +FdoAcquireMutex(
> +    IN  PXENDISK_FDO     Fdo
> +    )
> +{
> +    __FdoAcquireMutex(Fdo);
> +}
> +
> +static FORCEINLINE VOID
> +__FdoReleaseMutex(
> +    IN  PXENDISK_FDO     Fdo
> +    )
> +{
> +    ReleaseMutex(&Fdo->Mutex);
> +}
> +
> +VOID
> +FdoReleaseMutex(
> +    IN  PXENDISK_FDO     Fdo
> +    )
> +{
> +    __FdoReleaseMutex(Fdo);
> +
> +    if (Fdo->References == 0)
> +        FdoDestroy(Fdo);
> +}
> +
> +static FORCEINLINE VOID
> +__FdoEnumerate(
> +    IN  PXENDISK_FDO        Fdo,
> +    IN  PDEVICE_RELATIONS   Relations
> +    )
> +{
> +    PDEVICE_OBJECT          *PhysicalDeviceObject;
> +    ULONG                   Count;
> +    PLIST_ENTRY             ListEntry;
> +    ULONG                   Index;
> +    NTSTATUS                status;
> +
> +    Count = Relations->Count;
> +    ASSERT(Count != 0);
> +
> +    PhysicalDeviceObject = __FdoAllocate(sizeof (PDEVICE_OBJECT) *
> Count);
> +
> +    status = STATUS_NO_MEMORY;
> +    if (PhysicalDeviceObject == NULL)
> +        goto fail1;
> +
> +    RtlCopyMemory(PhysicalDeviceObject,
> +                  Relations->Objects,
> +                  sizeof (PDEVICE_OBJECT) * Count);
> +
> +    AcquireMutex(&Fdo->Mutex);
> +
> +    // Remove any PDOs that do not appear in the device list
> +    ListEntry = Fdo->Dx->ListEntry.Flink;
> +    while (ListEntry != &Fdo->Dx->ListEntry) {
> +        PLIST_ENTRY     Next = ListEntry->Flink;
> +        PXENDISK_DX     Dx = CONTAINING_RECORD(ListEntry, XENDISK_DX,
> ListEntry);
> +        PXENDISK_PDO    Pdo = Dx->Pdo;
> +        BOOLEAN         Missing;
> +
> +        Missing = TRUE;
> +        for (Index = 0; Index < Count; Index++) {
> +            if (PdoGetPhysicalDeviceObject(Pdo) ==
> PhysicalDeviceObject[Index]) {
> +                Missing = FALSE;
> +#pragma prefast(suppress:6387)  // PhysicalDeviceObject[Index] could be
> NULL
> +                ObDereferenceObject(PhysicalDeviceObject[Index]);
> +                PhysicalDeviceObject[Index] = NULL; // avoid duplication
> +                break;
> +            }
> +        }
> +
> +        if (Missing && !PdoIsMissing(Pdo)) {
> +            if (PdoGetDevicePnpState(Pdo) == Present) {
> +                PdoSetDevicePnpState(Pdo, Deleted);
> +                PdoDestroy(Pdo);
> +            } else {
> +                PdoSetMissing(Pdo, "device disappeared");
> +            }
> +        }
> +
> +        ListEntry = Next;
> +    }
> +
> +    // Walk the list and create PDO filters for any new devices
> +    for (Index = 0; Index < Count; Index++) {
> +#pragma warning(suppress:6385)  // Reading invalid data from
> 'PhysicalDeviceObject'
> +        if (PhysicalDeviceObject[Index] != NULL) {
> +            (VOID) PdoCreate(Fdo,
> +                             PhysicalDeviceObject[Index]);
> +            ObDereferenceObject(PhysicalDeviceObject[Index]);
> +        }
> +    }
> +
> +    ReleaseMutex(&Fdo->Mutex);
> +
> +    __FdoFree(PhysicalDeviceObject);
> +    return;
> +
> +fail1:
> +    Error("fail1 (%08x)\n", status);
> +}
> +
> +__drv_functionClass(IO_COMPLETION_ROUTINE)
> +__drv_sameIRQL
> +static NTSTATUS
> +__FdoForwardIrpSynchronously(
> +    IN  PDEVICE_OBJECT  DeviceObject,
> +    IN  PIRP            Irp,
> +    IN  PVOID           Context
> +    )
> +{
> +    PKEVENT             Event = Context;
> +
> +    UNREFERENCED_PARAMETER(DeviceObject);
> +    UNREFERENCED_PARAMETER(Irp);
> +
> +    KeSetEvent(Event, IO_NO_INCREMENT, FALSE);
> +
> +    return STATUS_MORE_PROCESSING_REQUIRED;
> +}
> +
> +static NTSTATUS
> +FdoForwardIrpSynchronously(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    KEVENT              Event;
> +    NTSTATUS            status;
> +
> +    ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
> +
> +    KeInitializeEvent(&Event, NotificationEvent, FALSE);
> +
> +    IoCopyCurrentIrpStackLocationToNext(Irp);
> +    IoSetCompletionRoutine(Irp,
> +                           __FdoForwardIrpSynchronously,
> +                           &Event,
> +                           TRUE,
> +                           TRUE,
> +                           TRUE);
> +
> +    status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
> +    if (status == STATUS_PENDING) {
> +        (VOID) KeWaitForSingleObject(&Event,
> +                                     Executive,
> +                                     KernelMode,
> +                                     FALSE,
> +                                     NULL);
> +        status = Irp->IoStatus.Status;
> +    } else {
> +        ASSERT3U(status, ==, Irp->IoStatus.Status);
> +    }
> +
> +    return status;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +FdoStartDevice(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    POWER_STATE         PowerState;
> +    NTSTATUS            status;
> +
> +    status = IoAcquireRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    status = FdoForwardIrpSynchronously(Fdo, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto fail2;
> +
> +    __FdoSetSystemPowerState(Fdo, PowerSystemWorking);
> +    __FdoSetDevicePowerState(Fdo, PowerDeviceD0);
> +
> +    PowerState.DeviceState = PowerDeviceD0;
> +    PoSetPowerState(Fdo->Dx->DeviceObject,
> +                    DevicePowerState,
> +                    PowerState);
> +
> +    __FdoSetDevicePnpState(Fdo, Started);
> +
> +    IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +
> +fail2:
> +    Error("fail2\n");
> +
> +    IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +
> +fail1:
> +    Error("fail1 (%08x)\n", status);
> +
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +__drv_functionClass(IO_COMPLETION_ROUTINE)
> +__drv_sameIRQL
> +static NTSTATUS
> +__FdoQueryStopDevice(
> +    IN  PDEVICE_OBJECT  DeviceObject,
> +    IN  PIRP            Irp,
> +    IN  PVOID           Context
> +    )
> +{
> +    PXENDISK_FDO        Fdo = Context;
> +
> +    UNREFERENCED_PARAMETER(DeviceObject);
> +
> +    if (Irp->PendingReturned)
> +        IoMarkIrpPending(Irp);
> +
> +    IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +
> +    return STATUS_SUCCESS;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +FdoQueryStopDevice(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    NTSTATUS            status;
> +
> +    status = IoAcquireRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    __FdoSetDevicePnpState(Fdo, StopPending);
> +    Irp->IoStatus.Status = STATUS_SUCCESS;
> +
> +    IoCopyCurrentIrpStackLocationToNext(Irp);
> +    IoSetCompletionRoutine(Irp,
> +                           __FdoQueryStopDevice,
> +                           Fdo,
> +                           TRUE,
> +                           TRUE,
> +                           TRUE);
> +
> +    status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
> +
> +    return status;
> +
> +fail1:
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +__drv_functionClass(IO_COMPLETION_ROUTINE)
> +__drv_sameIRQL
> +static NTSTATUS
> +__FdoCancelStopDevice(
> +    IN  PDEVICE_OBJECT  DeviceObject,
> +    IN  PIRP            Irp,
> +    IN  PVOID           Context
> +    )
> +{
> +    PXENDISK_FDO        Fdo = Context;
> +
> +    UNREFERENCED_PARAMETER(DeviceObject);
> +
> +    if (Irp->PendingReturned)
> +        IoMarkIrpPending(Irp);
> +
> +    IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +
> +    return STATUS_SUCCESS;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +FdoCancelStopDevice(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    NTSTATUS            status;
> +
> +    status = IoAcquireRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    Irp->IoStatus.Status = STATUS_SUCCESS;
> +
> +    __FdoRestoreDevicePnpState(Fdo, StopPending);
> +
> +    IoCopyCurrentIrpStackLocationToNext(Irp);
> +    IoSetCompletionRoutine(Irp,
> +                           __FdoCancelStopDevice,
> +                           Fdo,
> +                           TRUE,
> +                           TRUE,
> +                           TRUE);
> +
> +    status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
> +
> +    return status;
> +
> +fail1:
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +__drv_functionClass(IO_COMPLETION_ROUTINE)
> +__drv_sameIRQL
> +static NTSTATUS
> +__FdoStopDevice(
> +    IN  PDEVICE_OBJECT  DeviceObject,
> +    IN  PIRP            Irp,
> +    IN  PVOID           Context
> +    )
> +{
> +    PXENDISK_FDO        Fdo = Context;
> +
> +    UNREFERENCED_PARAMETER(DeviceObject);
> +
> +    if (Irp->PendingReturned)
> +        IoMarkIrpPending(Irp);
> +
> +    IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +
> +    return STATUS_SUCCESS;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +FdoStopDevice(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    POWER_STATE         PowerState;
> +    NTSTATUS            status;
> +
> +    status = IoAcquireRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    if (__FdoGetDevicePowerState(Fdo) != PowerDeviceD0)
> +        goto done;
> +
> +    PowerState.DeviceState = PowerDeviceD3;
> +    PoSetPowerState(Fdo->Dx->DeviceObject,
> +                    DevicePowerState,
> +                    PowerState);
> +
> +    __FdoSetDevicePowerState(Fdo, PowerDeviceD3);
> +    __FdoSetSystemPowerState(Fdo, PowerSystemShutdown);
> +
> +done:
> +    __FdoSetDevicePnpState(Fdo, Stopped);
> +    Irp->IoStatus.Status = STATUS_SUCCESS;
> +
> +    IoCopyCurrentIrpStackLocationToNext(Irp);
> +    IoSetCompletionRoutine(Irp,
> +                           __FdoStopDevice,
> +                           Fdo,
> +                           TRUE,
> +                           TRUE,
> +                           TRUE);
> +
> +    status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
> +
> +    return status;
> +
> +fail1:
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +__drv_functionClass(IO_COMPLETION_ROUTINE)
> +__drv_sameIRQL
> +static NTSTATUS
> +__FdoQueryRemoveDevice(
> +    IN  PDEVICE_OBJECT  DeviceObject,
> +    IN  PIRP            Irp,
> +    IN  PVOID           Context
> +    )
> +{
> +    PXENDISK_FDO        Fdo = Context;
> +
> +    UNREFERENCED_PARAMETER(DeviceObject);
> +
> +    if (Irp->PendingReturned)
> +        IoMarkIrpPending(Irp);
> +
> +    IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +
> +    return STATUS_SUCCESS;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +FdoQueryRemoveDevice(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    NTSTATUS            status;
> +
> +    status = IoAcquireRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    __FdoSetDevicePnpState(Fdo, RemovePending);
> +    Irp->IoStatus.Status = STATUS_SUCCESS;
> +
> +    IoCopyCurrentIrpStackLocationToNext(Irp);
> +    IoSetCompletionRoutine(Irp,
> +                           __FdoQueryRemoveDevice,
> +                           Fdo,
> +                           TRUE,
> +                           TRUE,
> +                           TRUE);
> +
> +    status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
> +
> +    return status;
> +
> +fail1:
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +__drv_functionClass(IO_COMPLETION_ROUTINE)
> +__drv_sameIRQL
> +static NTSTATUS
> +__FdoCancelRemoveDevice(
> +    IN  PDEVICE_OBJECT  DeviceObject,
> +    IN  PIRP            Irp,
> +    IN  PVOID           Context
> +    )
> +{
> +    PXENDISK_FDO        Fdo = Context;
> +
> +    UNREFERENCED_PARAMETER(DeviceObject);
> +
> +    if (Irp->PendingReturned)
> +        IoMarkIrpPending(Irp);
> +
> +    IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +
> +    return STATUS_SUCCESS;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +FdoCancelRemoveDevice(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    NTSTATUS            status;
> +
> +    status = IoAcquireRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    __FdoRestoreDevicePnpState(Fdo, RemovePending);
> +    Irp->IoStatus.Status = STATUS_SUCCESS;
> +
> +    IoCopyCurrentIrpStackLocationToNext(Irp);
> +    IoSetCompletionRoutine(Irp,
> +                           __FdoCancelRemoveDevice,
> +                           Fdo,
> +                           TRUE,
> +                           TRUE,
> +                           TRUE);
> +
> +    status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
> +
> +    return status;
> +
> +fail1:
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +__drv_functionClass(IO_COMPLETION_ROUTINE)
> +__drv_sameIRQL
> +static NTSTATUS
> +__FdoSurpriseRemoval(
> +    IN  PDEVICE_OBJECT  DeviceObject,
> +    IN  PIRP            Irp,
> +    IN  PVOID           Context
> +    )
> +{
> +    PXENDISK_FDO        Fdo = Context;
> +
> +    UNREFERENCED_PARAMETER(DeviceObject);
> +
> +    if (Irp->PendingReturned)
> +        IoMarkIrpPending(Irp);
> +
> +    IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +
> +    return STATUS_SUCCESS;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +FdoSurpriseRemoval(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    NTSTATUS            status;
> +
> +    status = IoAcquireRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    __FdoSetDevicePnpState(Fdo, SurpriseRemovePending);
> +    Irp->IoStatus.Status = STATUS_SUCCESS;
> +
> +    IoCopyCurrentIrpStackLocationToNext(Irp);
> +    IoSetCompletionRoutine(Irp,
> +                           __FdoSurpriseRemoval,
> +                           Fdo,
> +                           TRUE,
> +                           TRUE,
> +                           TRUE);
> +
> +    status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
> +
> +    return status;
> +
> +fail1:
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +FdoRemoveDevice(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    POWER_STATE         PowerState;
> +    NTSTATUS            status;
> +
> +    status = IoAcquireRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    if (__FdoGetDevicePowerState(Fdo) != PowerDeviceD0)
> +        goto done;
> +
> +    PowerState.DeviceState = PowerDeviceD3;
> +    PoSetPowerState(Fdo->Dx->DeviceObject,
> +                    DevicePowerState,
> +                    PowerState);
> +
> +    __FdoSetDevicePowerState(Fdo, PowerDeviceD3);
> +    __FdoSetSystemPowerState(Fdo, PowerSystemShutdown);
> +
> +done:
> +    __FdoSetDevicePnpState(Fdo, Deleted);
> +
> +    IoReleaseRemoveLockAndWait(&Fdo->Dx->RemoveLock, Irp);
> +
> +    status = FdoForwardIrpSynchronously(Fdo, Irp);
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    AcquireMutex(&Fdo->Mutex);
> +    ASSERT3U(Fdo->References, !=, 0);
> +    --Fdo->References;
> +    ReleaseMutex(&Fdo->Mutex);
> +
> +    if (Fdo->References == 0)
> +        FdoDestroy(Fdo);
> +
> +    return status;
> +
> +fail1:
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +__drv_functionClass(IO_COMPLETION_ROUTINE)
> +__drv_sameIRQL
> +static NTSTATUS
> +__FdoQueryDeviceRelations(
> +    IN  PDEVICE_OBJECT  DeviceObject,
> +    IN  PIRP            Irp,
> +    IN  PVOID           Context
> +    )
> +{
> +    PKEVENT             Event = Context;
> +
> +    UNREFERENCED_PARAMETER(DeviceObject);
> +    UNREFERENCED_PARAMETER(Irp);
> +
> +    KeSetEvent(Event, IO_NO_INCREMENT, FALSE);
> +
> +    return STATUS_MORE_PROCESSING_REQUIRED;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +FdoQueryDeviceRelations(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    KEVENT              Event;
> +    PIO_STACK_LOCATION  StackLocation;
> +    ULONG               Size;
> +    PDEVICE_RELATIONS   Relations;
> +    PLIST_ENTRY         ListEntry;
> +    ULONG               Count;
> +    NTSTATUS            status;
> +
> +    status = IoAcquireRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    KeInitializeEvent(&Event, NotificationEvent, FALSE);
> +
> +    IoCopyCurrentIrpStackLocationToNext(Irp);
> +    IoSetCompletionRoutine(Irp,
> +                           __FdoQueryDeviceRelations,
> +                           &Event,
> +                           TRUE,
> +                           TRUE,
> +                           TRUE);
> +
> +    status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
> +    if (status == STATUS_PENDING) {
> +        (VOID) KeWaitForSingleObject(&Event,
> +                                     Executive,
> +                                     KernelMode,
> +                                     FALSE,
> +                                     NULL);
> +        status = Irp->IoStatus.Status;
> +    } else {
> +        ASSERT3U(status, ==, Irp->IoStatus.Status);
> +    }
> +
> +    if (!NT_SUCCESS(status))
> +        goto fail2;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    if (StackLocation->Parameters.QueryDeviceRelations.Type !=
> BusRelations)
> +        goto done;
> +
> +    Relations = (PDEVICE_RELATIONS)Irp->IoStatus.Information;
> +
> +    if (Relations->Count != 0)
> +        __FdoEnumerate(Fdo, Relations);
> +
> +    ExFreePool(Relations);
> +
> +    AcquireMutex(&Fdo->Mutex);
> +
> +    Count = 0;
> +    for (ListEntry = Fdo->Dx->ListEntry.Flink;
> +         ListEntry != &Fdo->Dx->ListEntry;
> +         ListEntry = ListEntry->Flink)
> +        Count++;
> +
> +    Size = FIELD_OFFSET(DEVICE_RELATIONS, Objects) + (sizeof
> (DEVICE_OBJECT) * __min(Count, 1));
> +
> +    Relations = ExAllocatePoolWithTag(PagedPool, Size, 'TLIF');
> +
> +    status = STATUS_NO_MEMORY;
> +    if (Relations == NULL)
> +        goto fail3;
> +
> +    RtlZeroMemory(Relations, Size);
> +
> +    for (ListEntry = Fdo->Dx->ListEntry.Flink;
> +         ListEntry != &Fdo->Dx->ListEntry;
> +         ListEntry = ListEntry->Flink) {
> +        PXENDISK_DX     Dx = CONTAINING_RECORD(ListEntry, XENDISK_DX,
> ListEntry);
> +        PXENDISK_PDO    Pdo = Dx->Pdo;
> +
> +        ASSERT3U(Dx->Type, ==, PHYSICAL_DEVICE_OBJECT);
> +
> +        if (PdoGetDevicePnpState(Pdo) == Present)
> +            PdoSetDevicePnpState(Pdo, Enumerated);
> +
> +        ObReferenceObject(PdoGetPhysicalDeviceObject(Pdo));
> +        Relations->Objects[Relations->Count++] =
> PdoGetPhysicalDeviceObject(Pdo);
> +    }
> +
> +    ASSERT3U(Relations->Count, ==, Count);
> +
> +    Trace("%d PDO(s)\n", Relations->Count);
> +
> +    ReleaseMutex(&Fdo->Mutex);
> +
> +    Irp->IoStatus.Information = (ULONG_PTR)Relations;
> +    status = STATUS_SUCCESS;
> +
> +done:
> +    IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +
> +fail3:
> +    ReleaseMutex(&Fdo->Mutex);
> +
> +fail2:
> +    IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +
> +fail1:
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +__drv_functionClass(IO_COMPLETION_ROUTINE)
> +__drv_sameIRQL
> +static NTSTATUS
> +__FdoDispatchPnp(
> +    IN  PDEVICE_OBJECT  DeviceObject,
> +    IN  PIRP            Irp,
> +    IN  PVOID           Context
> +    )
> +{
> +    PXENDISK_FDO        Fdo = Context;
> +
> +    UNREFERENCED_PARAMETER(DeviceObject);
> +
> +    if (Irp->PendingReturned)
> +        IoMarkIrpPending(Irp);
> +
> +    IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +    return STATUS_SUCCESS;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +FdoDispatchPnp(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    UCHAR               MinorFunction;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    MinorFunction = StackLocation->MinorFunction;
> +
> +    switch (StackLocation->MinorFunction) {
> +    case IRP_MN_START_DEVICE:
> +        status = FdoStartDevice(Fdo, Irp);
> +        break;
> +
> +    case IRP_MN_QUERY_STOP_DEVICE:
> +        status = FdoQueryStopDevice(Fdo, Irp);
> +        break;
> +
> +    case IRP_MN_CANCEL_STOP_DEVICE:
> +        status = FdoCancelStopDevice(Fdo, Irp);
> +        break;
> +
> +    case IRP_MN_STOP_DEVICE:
> +        status = FdoStopDevice(Fdo, Irp);
> +        break;
> +
> +    case IRP_MN_QUERY_REMOVE_DEVICE:
> +        status = FdoQueryRemoveDevice(Fdo, Irp);
> +        break;
> +
> +    case IRP_MN_SURPRISE_REMOVAL:
> +        status = FdoSurpriseRemoval(Fdo, Irp);
> +        break;
> +
> +    case IRP_MN_REMOVE_DEVICE:
> +        status = FdoRemoveDevice(Fdo, Irp);
> +        break;
> +
> +    case IRP_MN_CANCEL_REMOVE_DEVICE:
> +        status = FdoCancelRemoveDevice(Fdo, Irp);
> +        break;
> +
> +    case IRP_MN_QUERY_DEVICE_RELATIONS:
> +        status = FdoQueryDeviceRelations(Fdo, Irp);
> +        break;
> +
> +    default:
> +        status = IoAcquireRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +        if (!NT_SUCCESS(status))
> +            goto fail1;
> +
> +        IoCopyCurrentIrpStackLocationToNext(Irp);
> +        IoSetCompletionRoutine(Irp,
> +                               __FdoDispatchPnp,
> +                               Fdo,
> +                               TRUE,
> +                               TRUE,
> +                               TRUE);
> +
> +        status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
> +        break;
> +    }
> +
> +    return status;
> +
> +fail1:
> +    Error("fail1 (%08x)\n", status);
> +
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +static FORCEINLINE NTSTATUS
> +__FdoSetDevicePowerUp(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    DEVICE_POWER_STATE  DeviceState;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
> +
> +    ASSERT3U(DeviceState, <,  __FdoGetDevicePowerState(Fdo));
> +
> +    status = FdoForwardIrpSynchronously(Fdo, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto done;
> +
> +    Verbose("%p: %s -> %s\n",
> +         Fdo->Dx->DeviceObject,
> +         PowerDeviceStateName(__FdoGetDevicePowerState(Fdo)),
> +         PowerDeviceStateName(DeviceState));
> +
> +    __FdoSetDevicePowerState(Fdo, DeviceState);
> +
> +done:
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +static FORCEINLINE NTSTATUS
> +__FdoSetDevicePowerDown(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    DEVICE_POWER_STATE  DeviceState;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
> +
> +    ASSERT3U(DeviceState, >,  __FdoGetDevicePowerState(Fdo));
> +
> +    Verbose("%p: %s -> %s\n",
> +         Fdo->Dx->DeviceObject,
> +         PowerDeviceStateName(__FdoGetDevicePowerState(Fdo)),
> +         PowerDeviceStateName(DeviceState));
> +
> +    __FdoSetDevicePowerState(Fdo, DeviceState);
> +
> +    status = FdoForwardIrpSynchronously(Fdo, Irp);
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +static FORCEINLINE NTSTATUS
> +__FdoSetDevicePower(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    DEVICE_POWER_STATE  DeviceState;
> +    POWER_ACTION        PowerAction;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
> +    PowerAction = StackLocation->Parameters.Power.ShutdownType;
> +
> +    Trace("====> (%s:%s)\n",
> +          PowerDeviceStateName(DeviceState),
> +          PowerActionName(PowerAction));
> +
> +    if (DeviceState == __FdoGetDevicePowerState(Fdo)) {
> +        status = FdoForwardIrpSynchronously(Fdo, Irp);
> +        IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +        goto done;
> +    }
> +
> +    status = (DeviceState < __FdoGetDevicePowerState(Fdo)) ?
> +             __FdoSetDevicePowerUp(Fdo, Irp) :
> +             __FdoSetDevicePowerDown(Fdo, Irp);
> +
> +done:
> +    Trace("<==== (%s:%s)(%08x)\n",
> +          PowerDeviceStateName(DeviceState),
> +          PowerActionName(PowerAction),
> +          status);
> +    return status;
> +}
> +
> +static FORCEINLINE NTSTATUS
> +__FdoSetSystemPowerUp(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    SYSTEM_POWER_STATE  SystemState;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    SystemState = StackLocation->Parameters.Power.State.SystemState;
> +
> +    ASSERT3U(SystemState, <,  __FdoGetSystemPowerState(Fdo));
> +
> +    status = FdoForwardIrpSynchronously(Fdo, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto done;
> +
> +    Verbose("%p: %s -> %s\n",
> +         Fdo->Dx->DeviceObject,
> +         PowerSystemStateName(__FdoGetSystemPowerState(Fdo)),
> +         PowerSystemStateName(SystemState));
> +
> +    __FdoSetSystemPowerState(Fdo, SystemState);
> +
> +done:
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +static FORCEINLINE NTSTATUS
> +__FdoSetSystemPowerDown(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    SYSTEM_POWER_STATE  SystemState;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    SystemState = StackLocation->Parameters.Power.State.SystemState;
> +
> +    ASSERT3U(SystemState, >,  __FdoGetSystemPowerState(Fdo));
> +
> +    Verbose("%p: %s -> %s\n",
> +         Fdo->Dx->DeviceObject,
> +         PowerSystemStateName(__FdoGetSystemPowerState(Fdo)),
> +         PowerSystemStateName(SystemState));
> +
> +    __FdoSetSystemPowerState(Fdo, SystemState);
> +
> +    status = FdoForwardIrpSynchronously(Fdo, Irp);
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +static FORCEINLINE NTSTATUS
> +__FdoSetSystemPower(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    SYSTEM_POWER_STATE  SystemState;
> +    POWER_ACTION        PowerAction;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    SystemState = StackLocation->Parameters.Power.State.SystemState;
> +    PowerAction = StackLocation->Parameters.Power.ShutdownType;
> +
> +    Trace("====> (%s:%s)\n",
> +          PowerSystemStateName(SystemState),
> +          PowerActionName(PowerAction));
> +
> +    if (SystemState == __FdoGetSystemPowerState(Fdo)) {
> +        status = FdoForwardIrpSynchronously(Fdo, Irp);
> +        IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +        goto done;
> +    }
> +
> +    status = (SystemState < __FdoGetSystemPowerState(Fdo)) ?
> +             __FdoSetSystemPowerUp(Fdo, Irp) :
> +             __FdoSetSystemPowerDown(Fdo, Irp);
> +
> +done:
> +    Trace("<==== (%s:%s)(%08x)\n",
> +          PowerSystemStateName(SystemState),
> +          PowerActionName(PowerAction),
> +          status);
> +    return status;
> +}
> +
> +static FORCEINLINE NTSTATUS
> +__FdoQueryDevicePowerUp(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    DEVICE_POWER_STATE  DeviceState;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
> +
> +    ASSERT3U(DeviceState, <,  __FdoGetDevicePowerState(Fdo));
> +
> +    status = FdoForwardIrpSynchronously(Fdo, Irp);
> +
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +static FORCEINLINE NTSTATUS
> +__FdoQueryDevicePowerDown(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    DEVICE_POWER_STATE  DeviceState;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
> +
> +    ASSERT3U(DeviceState, >,  __FdoGetDevicePowerState(Fdo));
> +
> +    status = FdoForwardIrpSynchronously(Fdo, Irp);
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +static FORCEINLINE NTSTATUS
> +__FdoQueryDevicePower(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    DEVICE_POWER_STATE  DeviceState;
> +    POWER_ACTION        PowerAction;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
> +    PowerAction = StackLocation->Parameters.Power.ShutdownType;
> +
> +    Trace("====> (%s:%s)\n",
> +          PowerDeviceStateName(DeviceState),
> +          PowerActionName(PowerAction));
> +
> +    if (DeviceState == __FdoGetDevicePowerState(Fdo)) {
> +        status = FdoForwardIrpSynchronously(Fdo, Irp);
> +        IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +        goto done;
> +    }
> +
> +    status = (DeviceState < __FdoGetDevicePowerState(Fdo)) ?
> +             __FdoQueryDevicePowerUp(Fdo, Irp) :
> +             __FdoQueryDevicePowerDown(Fdo, Irp);
> +
> +done:
> +    Trace("<==== (%s:%s)(%08x)\n",
> +          PowerDeviceStateName(DeviceState),
> +          PowerActionName(PowerAction),
> +          status);
> +    return status;
> +}
> +
> +static FORCEINLINE NTSTATUS
> +__FdoQuerySystemPowerUp(
> +    IN  PXENDISK_FDO     Fdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    SYSTEM_POWER_STATE  SystemState;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    SystemState = StackLocation->Parameters.Power.State.SystemState;
> +
> +    ASSERT3U(SystemState, <,  __FdoGetSystemPowerState(Fdo));
> +
> +    status = FdoForwardIrpSynchronously(Fdo, Irp);
> +
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +static FORCEINLINE NTSTATUS
> +__FdoQuerySystemPowerDown(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    SYSTEM_POWER_STATE  SystemState;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    SystemState = StackLocation->Parameters.Power.State.SystemState;
> +
> +    ASSERT3U(SystemState, >,  __FdoGetSystemPowerState(Fdo));
> +
> +    status = FdoForwardIrpSynchronously(Fdo, Irp);
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +static FORCEINLINE NTSTATUS
> +__FdoQuerySystemPower(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    SYSTEM_POWER_STATE  SystemState;
> +    POWER_ACTION        PowerAction;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    SystemState = StackLocation->Parameters.Power.State.SystemState;
> +    PowerAction = StackLocation->Parameters.Power.ShutdownType;
> +
> +    Trace("====> (%s:%s)\n",
> +          PowerSystemStateName(SystemState),
> +          PowerActionName(PowerAction));
> +
> +    if (SystemState == __FdoGetSystemPowerState(Fdo)) {
> +        status = FdoForwardIrpSynchronously(Fdo, Irp);
> +        IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +        goto done;
> +    }
> +
> +    status = (SystemState < __FdoGetSystemPowerState(Fdo)) ?
> +             __FdoQuerySystemPowerUp(Fdo, Irp) :
> +             __FdoQuerySystemPowerDown(Fdo, Irp);
> +
> +done:
> +    Trace("<==== (%s:%s)(%08x)\n",
> +          PowerSystemStateName(SystemState),
> +          PowerActionName(PowerAction),
> +          status);
> +
> +    return status;
> +}
> +
> +static NTSTATUS
> +FdoDevicePower(
> +    IN  PXENDISK_THREAD Self,
> +    IN  PVOID           Context
> +    )
> +{
> +    PXENDISK_FDO        Fdo = Context;
> +    PKEVENT             Event;
> +
> +    Event = ThreadGetEvent(Self);
> +
> +    for (;;) {
> +        PIRP                Irp;
> +        PIO_STACK_LOCATION  StackLocation;
> +        UCHAR               MinorFunction;
> +
> +        if (Fdo->DevicePowerIrp == NULL) {
> +            (VOID) KeWaitForSingleObject(Event,
> +                                         Executive,
> +                                         KernelMode,
> +                                         FALSE,
> +                                         NULL);
> +            KeClearEvent(Event);
> +        }
> +
> +        if (ThreadIsAlerted(Self))
> +            break;
> +
> +        Irp = Fdo->DevicePowerIrp;
> +
> +        if (Irp == NULL)
> +            continue;
> +
> +        Fdo->DevicePowerIrp = NULL;
> +        KeMemoryBarrier();
> +
> +        StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +        MinorFunction = StackLocation->MinorFunction;
> +
> +        switch (StackLocation->MinorFunction) {
> +        case IRP_MN_SET_POWER:
> +            (VOID) __FdoSetDevicePower(Fdo, Irp);
> +            break;
> +
> +        case IRP_MN_QUERY_POWER:
> +            (VOID) __FdoQueryDevicePower(Fdo, Irp);
> +            break;
> +
> +        default:
> +            ASSERT(FALSE);
> +            break;
> +        }
> +
> +        IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +    }
> +
> +    return STATUS_SUCCESS;
> +}
> +
> +static NTSTATUS
> +FdoSystemPower(
> +    IN  PXENDISK_THREAD Self,
> +    IN  PVOID           Context
> +    )
> +{
> +    PXENDISK_FDO        Fdo = Context;
> +    PKEVENT             Event;
> +
> +    Event = ThreadGetEvent(Self);
> +
> +    for (;;) {
> +        PIRP                Irp;
> +        PIO_STACK_LOCATION  StackLocation;
> +        UCHAR               MinorFunction;
> +
> +        if (Fdo->SystemPowerIrp == NULL) {
> +            (VOID) KeWaitForSingleObject(Event,
> +                                         Executive,
> +                                         KernelMode,
> +                                         FALSE,
> +                                         NULL);
> +            KeClearEvent(Event);
> +        }
> +
> +        if (ThreadIsAlerted(Self))
> +            break;
> +
> +        Irp = Fdo->SystemPowerIrp;
> +
> +        if (Irp == NULL)
> +            continue;
> +
> +        Fdo->SystemPowerIrp = NULL;
> +        KeMemoryBarrier();
> +
> +        StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +        MinorFunction = StackLocation->MinorFunction;
> +
> +        switch (StackLocation->MinorFunction) {
> +        case IRP_MN_SET_POWER:
> +            (VOID) __FdoSetSystemPower(Fdo, Irp);
> +            break;
> +
> +        case IRP_MN_QUERY_POWER:
> +            (VOID) __FdoQuerySystemPower(Fdo, Irp);
> +            break;
> +
> +        default:
> +            ASSERT(FALSE);
> +            break;
> +        }
> +
> +        IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +    }
> +
> +    return STATUS_SUCCESS;
> +}
> +
> +__drv_functionClass(IO_COMPLETION_ROUTINE)
> +__drv_sameIRQL
> +static NTSTATUS
> +__FdoDispatchPower(
> +    IN  PDEVICE_OBJECT  DeviceObject,
> +    IN  PIRP            Irp,
> +    IN  PVOID           Context
> +    )
> +{
> +    PXENDISK_FDO        Fdo = Context;
> +
> +    UNREFERENCED_PARAMETER(DeviceObject);
> +
> +    if (Irp->PendingReturned)
> +        IoMarkIrpPending(Irp);
> +
> +    IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +    return STATUS_SUCCESS;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +FdoDispatchPower(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    UCHAR               MinorFunction;
> +    POWER_STATE_TYPE    PowerType;
> +    NTSTATUS            status;
> +
> +    status = IoAcquireRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    MinorFunction = StackLocation->MinorFunction;
> +
> +    if (MinorFunction != IRP_MN_QUERY_POWER &&
> +        MinorFunction != IRP_MN_SET_POWER) {
> +        IoCopyCurrentIrpStackLocationToNext(Irp);
> +        IoSetCompletionRoutine(Irp,
> +                               __FdoDispatchPower,
> +                               Fdo,
> +                               TRUE,
> +                               TRUE,
> +                               TRUE);
> +
> +        status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
> +
> +        goto done;
> +    }
> +
> +    PowerType = StackLocation->Parameters.Power.Type;
> +
> +    Trace("====> (%02x:%s)\n",
> +          MinorFunction,
> +          PowerMinorFunctionName(MinorFunction));
> +
> +    switch (PowerType) {
> +    case DevicePowerState:
> +        IoMarkIrpPending(Irp);
> +
> +        ASSERT3P(Fdo->DevicePowerIrp, ==, NULL);
> +        Fdo->DevicePowerIrp = Irp;
> +        KeMemoryBarrier();
> +
> +        ThreadWake(Fdo->DevicePowerThread);
> +
> +        status = STATUS_PENDING;
> +        break;
> +
> +    case SystemPowerState:
> +        IoMarkIrpPending(Irp);
> +
> +        ASSERT3P(Fdo->SystemPowerIrp, ==, NULL);
> +        Fdo->SystemPowerIrp = Irp;
> +        KeMemoryBarrier();
> +
> +        ThreadWake(Fdo->SystemPowerThread);
> +
> +        status = STATUS_PENDING;
> +        break;
> +
> +    default:
> +        IoCopyCurrentIrpStackLocationToNext(Irp);
> +        IoSetCompletionRoutine(Irp,
> +                               __FdoDispatchPower,
> +                               Fdo,
> +                               TRUE,
> +                               TRUE,
> +                               TRUE);
> +
> +        status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
> +        break;
> +    }
> +
> +    Trace("<==== (%02x:%s) (%08x)\n",
> +          MinorFunction,
> +          PowerMinorFunctionName(MinorFunction),
> +          status);
> +
> +done:
> +    return status;
> +
> +fail1:
> +    Error("fail1 (%08x)\n", status);
> +
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +__drv_functionClass(IO_COMPLETION_ROUTINE)
> +__drv_sameIRQL
> +static NTSTATUS
> +__FdoDispatchDefault(
> +    IN  PDEVICE_OBJECT  DeviceObject,
> +    IN  PIRP            Irp,
> +    IN  PVOID           Context
> +    )
> +{
> +    PXENDISK_FDO        Fdo = Context;
> +
> +    UNREFERENCED_PARAMETER(DeviceObject);
> +
> +    if (Irp->PendingReturned)
> +        IoMarkIrpPending(Irp);
> +
> +    IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +
> +    return STATUS_SUCCESS;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +FdoDispatchDefault(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    NTSTATUS            status;
> +
> +    status = IoAcquireRemoveLock(&Fdo->Dx->RemoveLock, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    IoCopyCurrentIrpStackLocationToNext(Irp);
> +    IoSetCompletionRoutine(Irp,
> +                           __FdoDispatchDefault,
> +                           Fdo,
> +                           TRUE,
> +                           TRUE,
> +                           TRUE);
> +
> +    status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
> +
> +    return status;
> +
> +fail1:
> +    Error("fail1 (%08x)\n", status);
> +
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +NTSTATUS
> +FdoDispatch(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +
> +    switch (StackLocation->MajorFunction) {
> +    case IRP_MJ_PNP:
> +        status = FdoDispatchPnp(Fdo, Irp);
> +        break;
> +
> +    case IRP_MJ_POWER:
> +        status = FdoDispatchPower(Fdo, Irp);
> +        break;
> +
> +    default:
> +        status = FdoDispatchDefault(Fdo, Irp);
> +        break;
> +    }
> +
> +    return status;
> +}
> +
> +NTSTATUS
> +FdoCreate(
> +    IN  PDEVICE_OBJECT  PhysicalDeviceObject
> +    )
> +{
> +    PDEVICE_OBJECT      LowerDeviceObject;
> +    ULONG               DeviceType;
> +    PDEVICE_OBJECT      FilterDeviceObject;
> +    PXENDISK_DX         Dx;
> +    PXENDISK_FDO        Fdo;
> +    NTSTATUS            status;
> +
> +    LowerDeviceObject =
> IoGetAttachedDeviceReference(PhysicalDeviceObject);
> +    DeviceType = LowerDeviceObject->DeviceType;
> +    ObDereferenceObject(LowerDeviceObject);
> +
> +#pragma prefast(suppress:28197) // Possibly leaking memory
> 'FilterDeviceObject'
> +    status = IoCreateDevice(DriverGetDriverObject(),
> +                            sizeof (XENDISK_DX),
> +                            NULL,
> +                            DeviceType,
> +                            FILE_DEVICE_SECURE_OPEN,
> +                            FALSE,
> +                            &FilterDeviceObject);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    Dx = (PXENDISK_DX)FilterDeviceObject->DeviceExtension;
> +    RtlZeroMemory(Dx, sizeof (XENDISK_DX));
> +
> +    Dx->Type = FUNCTION_DEVICE_OBJECT;
> +    Dx->DeviceObject = FilterDeviceObject;
> +    Dx->DevicePnpState = Added;
> +    Dx->SystemPowerState = PowerSystemShutdown;
> +    Dx->DevicePowerState = PowerDeviceD3;
> +
> +    IoInitializeRemoveLock(&Dx->RemoveLock, FDO_TAG, 0, 0);
> +
> +    Fdo = __FdoAllocate(sizeof (XENDISK_FDO));
> +
> +    status = STATUS_NO_MEMORY;
> +    if (Fdo == NULL)
> +        goto fail2;
> +
> +    LowerDeviceObject = IoAttachDeviceToDeviceStack(FilterDeviceObject,
> +                                                    PhysicalDeviceObject);
> +
> +    status = STATUS_UNSUCCESSFUL;
> +    if (LowerDeviceObject == NULL)
> +        goto fail3;
> +
> +    Fdo->Dx = Dx;
> +    Fdo->PhysicalDeviceObject = PhysicalDeviceObject;
> +    Fdo->LowerDeviceObject = LowerDeviceObject;
> +
> +    status = ThreadCreate(FdoSystemPower, Fdo, &Fdo-
> >SystemPowerThread);
> +    if (!NT_SUCCESS(status))
> +        goto fail4;
> +
> +    status = ThreadCreate(FdoDevicePower, Fdo, &Fdo-
> >DevicePowerThread);
> +    if (!NT_SUCCESS(status))
> +        goto fail5;
> +
> +    InitializeMutex(&Fdo->Mutex);
> +    InitializeListHead(&Dx->ListEntry);
> +    Fdo->References = 1;
> +
> +    Verbose("%p\n", FilterDeviceObject);
> +
> +    Dx->Fdo = Fdo;
> +
> +#pragma prefast(suppress:28182)  // Dereferencing NULL pointer
> +    FilterDeviceObject->DeviceType = LowerDeviceObject->DeviceType;
> +    FilterDeviceObject->Characteristics = LowerDeviceObject-
> >Characteristics;
> +
> +    FilterDeviceObject->Flags |= LowerDeviceObject->Flags;
> +    FilterDeviceObject->Flags &= ~DO_DEVICE_INITIALIZING;
> +
> +    return STATUS_SUCCESS;
> +
> +fail5:
> +    Error("fail5\n");
> +
> +    ThreadAlert(Fdo->SystemPowerThread);
> +    ThreadJoin(Fdo->SystemPowerThread);
> +    Fdo->SystemPowerThread = NULL;
> +
> +fail4:
> +    Error("fail4\n");
> +
> +    Fdo->PhysicalDeviceObject = NULL;
> +    Fdo->LowerDeviceObject = NULL;
> +    Fdo->Dx = NULL;
> +
> +    IoDetachDevice(LowerDeviceObject);
> +
> +fail3:
> +    Error("fail3\n");
> +
> +    ASSERT(IsZeroMemory(Fdo, sizeof (XENDISK_FDO)));
> +    __FdoFree(Fdo);
> +
> +fail2:
> +    Error("fail2\n");
> +
> +    IoDeleteDevice(FilterDeviceObject);
> +
> +fail1:
> +    Error("fail1 (%08x)\n", status);
> +
> +    return status;
> +}
> +
> +VOID
> +FdoDestroy(
> +    IN  PXENDISK_FDO    Fdo
> +    )
> +{
> +    PDEVICE_OBJECT      LowerDeviceObject = Fdo->LowerDeviceObject;
> +    PXENDISK_DX         Dx = Fdo->Dx;
> +    PDEVICE_OBJECT      FilterDeviceObject = Dx->DeviceObject;
> +
> +    ASSERT(IsListEmpty(&Dx->ListEntry));
> +    ASSERT3U(Fdo->References, ==, 0);
> +    ASSERT3U(__FdoGetDevicePnpState(Fdo), ==, Deleted);
> +
> +    Dx->Fdo = NULL;
> +
> +    RtlZeroMemory(&Fdo->Mutex, sizeof (MUTEX));
> +
> +    ThreadAlert(Fdo->DevicePowerThread);
> +    ThreadJoin(Fdo->DevicePowerThread);
> +    Fdo->DevicePowerThread = NULL;
> +
> +    ThreadAlert(Fdo->SystemPowerThread);
> +    ThreadJoin(Fdo->SystemPowerThread);
> +    Fdo->SystemPowerThread = NULL;
> +
> +    Fdo->LowerDeviceObject = NULL;
> +    Fdo->PhysicalDeviceObject = NULL;
> +    Fdo->Dx = NULL;
> +
> +    IoDetachDevice(LowerDeviceObject);
> +
> +    ASSERT(IsZeroMemory(Fdo, sizeof (XENDISK_FDO)));
> +    __FdoFree(Fdo);
> +
> +    IoDeleteDevice(FilterDeviceObject);
> +}
> diff --git a/src/xendisk/fdo.h b/src/xendisk/fdo.h
> new file mode 100644
> index 0000000..8aa0529
> --- /dev/null
> +++ b/src/xendisk/fdo.h
> @@ -0,0 +1,78 @@
> +/* 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 _XENDISK_FDO_H
> +#define _XENDISK_FDO_H
> +
> +#include <ntddk.h>
> +#include "types.h"
> +
> +typedef struct _XENDISK_FDO XENDISK_FDO, *PXENDISK_FDO;
> +
> +extern VOID
> +FdoAddPhysicalDeviceObject(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PDEVICE_OBJECT  DeviceObject
> +    );
> +
> +extern VOID
> +FdoRemovePhysicalDeviceObject(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PDEVICE_OBJECT  DeviceObject
> +    );
> +
> +extern VOID
> +FdoAcquireMutex(
> +    IN  PXENDISK_FDO     Fdo
> +    );
> +
> +extern VOID
> +FdoReleaseMutex(
> +    IN  PXENDISK_FDO     Fdo
> +    );
> +
> +extern NTSTATUS
> +FdoDispatch(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PIRP            Irp
> +    );
> +
> +extern NTSTATUS
> +FdoCreate(
> +    IN  PDEVICE_OBJECT  PhysicalDeviceObject
> +    );
> +
> +extern VOID
> +FdoDestroy(
> +    IN  PXENDISK_FDO    Fdo
> +    );
> +
> +#endif // _XENDISK_FDO_H
> diff --git a/src/xendisk/mutex.h b/src/xendisk/mutex.h
> new file mode 100644
> index 0000000..bcc2414
> --- /dev/null
> +++ b/src/xendisk/mutex.h
> @@ -0,0 +1,113 @@
> +/* 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 _XENDISK_MUTEX_H
> +#define _XENDISK_MUTEX_H
> +
> +#include <ntddk.h>
> +
> +#include "assert.h"
> +
> +typedef struct _MUTEX {
> +    PKTHREAD    Owner;
> +    KEVENT      Event;
> +} MUTEX, *PMUTEX;
> +
> +static FORCEINLINE VOID
> +InitializeMutex(
> +    IN  PMUTEX  Mutex
> +    )
> +{
> +    RtlZeroMemory(Mutex, sizeof (MUTEX));
> +
> +    KeInitializeEvent(&Mutex->Event, SynchronizationEvent, TRUE);
> +}
> +
> +static FORCEINLINE BOOLEAN
> +__drv_maxIRQL(PASSIVE_LEVEL)
> +TryAcquireMutex(
> +    IN  PMUTEX      Mutex
> +    )
> +{
> +    LARGE_INTEGER   Timeout;
> +    NTSTATUS        status;
> +
> +    Timeout.QuadPart = 0;
> +
> +    status = KeWaitForSingleObject(&Mutex->Event,
> +                                   Executive,
> +                                   KernelMode,
> +                                   FALSE,
> +                                   &Timeout);
> +    if (status == STATUS_TIMEOUT)
> +        return FALSE;
> +
> +    ASSERT(NT_SUCCESS(status));
> +
> +    ASSERT3P(Mutex->Owner, ==, NULL);
> +    Mutex->Owner = KeGetCurrentThread();
> +
> +    return TRUE;
> +}
> +
> +static FORCEINLINE VOID
> +__drv_maxIRQL(PASSIVE_LEVEL)
> +AcquireMutex(
> +    IN  PMUTEX  Mutex
> +    )
> +{
> +    NTSTATUS    status;
> +
> +    status = KeWaitForSingleObject(&Mutex->Event,
> +                                   Executive,
> +                                   KernelMode,
> +                                   FALSE,
> +                                   NULL);
> +
> +    ASSERT(NT_SUCCESS(status));
> +
> +    ASSERT3P(Mutex->Owner, ==, NULL);
> +    Mutex->Owner = KeGetCurrentThread();
> +}
> +
> +static FORCEINLINE VOID
> +__drv_maxIRQL(PASSIVE_LEVEL)
> +ReleaseMutex(
> +    IN  PMUTEX  Mutex
> +    )
> +{
> +    ASSERT3P(Mutex->Owner, ==, KeGetCurrentThread());
> +    Mutex->Owner = NULL;
> +
> +    KeSetEvent(&Mutex->Event, IO_NO_INCREMENT, FALSE);
> +}
> +
> +#endif  // _XENDISK_MUTEX_H
> diff --git a/src/xendisk/pdo.c b/src/xendisk/pdo.c
> new file mode 100644
> index 0000000..3de958a
> --- /dev/null
> +++ b/src/xendisk/pdo.c
> @@ -0,0 +1,2079 @@
> +/* 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.
> + */
> +
> +#define INITGUID 1
> +
> +#include <ntddk.h>
> +#include <wdmguid.h>
> +#include <ntstrsafe.h>
> +#include <stdlib.h>
> +#include <storport.h>
> +#include <Ntddstor.h>
> +#include <Ntddscsi.h>
> +#include <names.h>
> +
> +#include "fdo.h"
> +#include "pdo.h"
> +#include "driver.h"
> +#include "thread.h"
> +#include "debug.h"
> +#include "assert.h"
> +#include "util.h"
> +
> +#define PDO_TAG 'ODP'
> +
> +struct _XENDISK_PDO {
> +    PXENDISK_DX                 Dx;
> +    PDEVICE_OBJECT              LowerDeviceObject;
> +    PDEVICE_OBJECT              PhysicalDeviceObject;
> +
> +    PXENDISK_THREAD             SystemPowerThread;
> +    PIRP                        SystemPowerIrp;
> +    PXENDISK_THREAD             DevicePowerThread;
> +    PIRP                        DevicePowerIrp;
> +
> +    PXENDISK_FDO                Fdo;
> +    BOOLEAN                     Missing;
> +    const CHAR                  *Reason;
> +
> +    ULONG                       SectorSize;
> +};
> +
> +static FORCEINLINE PVOID
> +__PdoAllocate(
> +    IN  ULONG   Length
> +    )
> +{
> +    return __AllocateNonPagedPoolWithTag(__FUNCTION__, __LINE__,
> Length, PDO_TAG);
> +}
> +
> +static FORCEINLINE VOID
> +__PdoFree(
> +    IN  PVOID   Buffer
> +    )
> +{
> +    __FreePoolWithTag(Buffer, PDO_TAG);
> +}
> +
> +static FORCEINLINE VOID
> +__PdoSetDevicePnpState(
> +    IN  PXENDISK_PDO        Pdo,
> +    IN  DEVICE_PNP_STATE    State
> +    )
> +{
> +    PXENDISK_DX             Dx = Pdo->Dx;
> +
> +    // We can never transition out of the deleted state
> +    ASSERT(Dx->DevicePnpState != Deleted || State == Deleted);
> +
> +    Dx->PreviousDevicePnpState = Dx->DevicePnpState;
> +    Dx->DevicePnpState = State;
> +}
> +
> +VOID
> +PdoSetDevicePnpState(
> +    IN  PXENDISK_PDO        Pdo,
> +    IN  DEVICE_PNP_STATE    State
> +    )
> +{
> +    __PdoSetDevicePnpState(Pdo, State);
> +}
> +
> +static FORCEINLINE VOID
> +__PdoRestoreDevicePnpState(
> +    IN  PXENDISK_PDO        Pdo,
> +    IN  DEVICE_PNP_STATE    State
> +    )
> +{
> +    PXENDISK_DX             Dx = Pdo->Dx;
> +
> +    if (Dx->DevicePnpState == State)
> +        Dx->DevicePnpState = Dx->PreviousDevicePnpState;
> +}
> +
> +static FORCEINLINE DEVICE_PNP_STATE
> +__PdoGetDevicePnpState(
> +    IN  PXENDISK_PDO    Pdo
> +    )
> +{
> +    PXENDISK_DX         Dx = Pdo->Dx;
> +
> +    return Dx->DevicePnpState;
> +}
> +
> +DEVICE_PNP_STATE
> +PdoGetDevicePnpState(
> +    IN  PXENDISK_PDO    Pdo
> +    )
> +{
> +    return __PdoGetDevicePnpState(Pdo);
> +}
> +
> +static FORCEINLINE VOID
> +__PdoSetDevicePowerState(
> +    IN  PXENDISK_PDO        Pdo,
> +    IN  DEVICE_POWER_STATE  State
> +    )
> +{
> +    PXENDISK_DX             Dx = Pdo->Dx;
> +
> +    Dx->DevicePowerState = State;
> +}
> +
> +static FORCEINLINE DEVICE_POWER_STATE
> +__PdoGetDevicePowerState(
> +    IN  PXENDISK_PDO    Pdo
> +    )
> +{
> +    PXENDISK_DX         Dx = Pdo->Dx;
> +
> +    return Dx->DevicePowerState;
> +}
> +
> +static FORCEINLINE VOID
> +__PdoSetSystemPowerState(
> +    IN  PXENDISK_PDO        Pdo,
> +    IN  SYSTEM_POWER_STATE  State
> +    )
> +{
> +    PXENDISK_DX             Dx = Pdo->Dx;
> +
> +    Dx->SystemPowerState = State;
> +}
> +
> +static FORCEINLINE SYSTEM_POWER_STATE
> +__PdoGetSystemPowerState(
> +    IN  PXENDISK_PDO    Pdo
> +    )
> +{
> +    PXENDISK_DX         Dx = Pdo->Dx;
> +
> +    return Dx->SystemPowerState;
> +}
> +
> +PDEVICE_OBJECT
> +PdoGetPhysicalDeviceObject(
> +    IN  PXENDISK_PDO    Pdo
> +    )
> +{
> +    return Pdo->PhysicalDeviceObject;
> +}
> +
> +static FORCEINLINE VOID
> +__PdoSetMissing(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  const CHAR      *Reason
> +    )
> +{
> +    Pdo->Reason = Reason;
> +    Pdo->Missing = TRUE;
> +}
> +
> +VOID
> +PdoSetMissing(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  const CHAR      *Reason
> +    )
> +{
> +    __PdoSetMissing(Pdo, Reason);
> +}
> +
> +static FORCEINLINE BOOLEAN
> +__PdoIsMissing(
> +    IN  PXENDISK_PDO    Pdo
> +    )
> +{
> +    return Pdo->Missing;
> +}
> +
> +BOOLEAN
> +PdoIsMissing(
> +    IN  PXENDISK_PDO    Pdo
> +    )
> +{
> +    return __PdoIsMissing(Pdo);
> +}
> +
> +static FORCEINLINE VOID
> +__PdoLink(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PXENDISK_FDO    Fdo
> +    )
> +{
> +    Pdo->Fdo = Fdo;
> +    FdoAddPhysicalDeviceObject(Fdo, Pdo->Dx->DeviceObject);
> +}
> +
> +static FORCEINLINE VOID
> +__PdoUnlink(
> +    IN  PXENDISK_PDO    Pdo
> +    )
> +{
> +    PXENDISK_FDO        Fdo = Pdo->Fdo;
> +
> +    ASSERT(Fdo != NULL);
> +
> +    FdoRemovePhysicalDeviceObject(Fdo, Pdo->Dx->DeviceObject);
> +
> +    Pdo->Fdo = NULL;
> +}
> +
> +static FORCEINLINE PXENDISK_FDO
> +__PdoGetFdo(
> +    IN  PXENDISK_PDO Pdo
> +    )
> +{
> +    return Pdo->Fdo;
> +}
> +
> +__drv_functionClass(IO_COMPLETION_ROUTINE)
> +__drv_sameIRQL
> +static NTSTATUS
> +__PdoForwardIrpSynchronously(
> +    IN  PDEVICE_OBJECT  DeviceObject,
> +    IN  PIRP            Irp,
> +    IN  PVOID           Context
> +    )
> +{
> +    PKEVENT             Event = Context;
> +
> +    UNREFERENCED_PARAMETER(DeviceObject);
> +    UNREFERENCED_PARAMETER(Irp);
> +
> +    KeSetEvent(Event, IO_NO_INCREMENT, FALSE);
> +
> +    return STATUS_MORE_PROCESSING_REQUIRED;
> +}
> +
> +static NTSTATUS
> +PdoForwardIrpSynchronously(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    KEVENT              Event;
> +    NTSTATUS            status;
> +
> +    ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
> +
> +    KeInitializeEvent(&Event, NotificationEvent, FALSE);
> +
> +    IoCopyCurrentIrpStackLocationToNext(Irp);
> +    IoSetCompletionRoutine(Irp,
> +                           __PdoForwardIrpSynchronously,
> +                           &Event,
> +                           TRUE,
> +                           TRUE,
> +                           TRUE);
> +
> +    status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
> +    if (status == STATUS_PENDING) {
> +        (VOID) KeWaitForSingleObject(&Event,
> +                                     Executive,
> +                                     KernelMode,
> +                                     FALSE,
> +                                     NULL);
> +        status = Irp->IoStatus.Status;
> +    } else {
> +        ASSERT3U(status, ==, Irp->IoStatus.Status);
> +    }
> +
> +    return status;
> +}
> +
> +__drv_functionClass(IO_COMPLETION_ROUTINE)
> +__drv_sameIRQL
> +static NTSTATUS
> +__PdoForwardIrpAndForget(
> +    IN  PDEVICE_OBJECT  DeviceObject,
> +    IN  PIRP            Irp,
> +    IN  PVOID           Context
> +    )
> +{
> +    PXENDISK_PDO        Pdo = Context;
> +
> +    UNREFERENCED_PARAMETER(DeviceObject);
> +
> +    if (Irp->PendingReturned)
> +        IoMarkIrpPending(Irp);
> +
> +    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +
> +    return STATUS_SUCCESS;
> +}
> +
> +static NTSTATUS
> +PdoForwardIrpAndForget(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    IoCopyCurrentIrpStackLocationToNext(Irp);
> +    IoSetCompletionRoutine(Irp,
> +                            __PdoForwardIrpAndForget,
> +                            Pdo,
> +                            TRUE,
> +                            TRUE,
> +                            TRUE);
> +
> +    return IoCallDriver(Pdo->LowerDeviceObject, Irp);
> +}
> +
> +static NTSTATUS
> +PdoCompleteIrp(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp,
> +    IN  NTSTATUS        Status
> +    )
> +{
> +    Irp->IoStatus.Status = Status;
> +    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +    return Status;
> +}
> +
> +__drv_functionClass(IO_COMPLETION_ROUTINE)
> +__drv_sameIRQL
> +static NTSTATUS
> +__PdoQueryProperty(
> +    IN  PDEVICE_OBJECT  DeviceObject,
> +    IN  PIRP            Irp,
> +    IN  PVOID           Context
> +    )
> +{
> +    PXENDISK_PDO        Pdo = Context;
> +    PSTORAGE_ACCESS_ALIGNMENT_DESCRIPTOR    Descriptor = Irp-
> >UserBuffer;
> +
> +    UNREFERENCED_PARAMETER(DeviceObject);
> +
> +    if (Irp->PendingReturned)
> +        IoMarkIrpPending(Irp);
> +
> +    if (!NT_SUCCESS(Irp->IoStatus.Status))
> +        goto done;
> +
> +    Descriptor = Irp->UserBuffer;
> +    Pdo->SectorSize = Descriptor->BytesPerLogicalSector;
> +    Verbose("%p : %u bytes per sector\n", Pdo->Dx->DeviceObject, Pdo-
> >SectorSize);
> +
> +done:
> +    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +
> +    return STATUS_SUCCESS;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +PdoQueryProperty(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PSTORAGE_PROPERTY_QUERY Query;
> +    PDEVICE_TRIM_DESCRIPTOR Trim;
> +    NTSTATUS                status;
> +
> +    Query = Irp->AssociatedIrp.SystemBuffer;
> +
> +    switch (Query->PropertyId) {
> +    case StorageAccessAlignmentProperty:
> +        IoCopyCurrentIrpStackLocationToNext(Irp);
> +        IoSetCompletionRoutine(Irp,
> +                                __PdoQueryProperty,
> +                                Pdo,
> +                                TRUE,
> +                                TRUE,
> +                                TRUE);
> +
> +        status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
> +        break;
> +
> +    case StorageDeviceTrimProperty:
> +        Trim = Irp->AssociatedIrp.SystemBuffer;
> +
> +        Trim->Version = 0;
> +        Trim->Size = sizeof(DEVICE_TRIM_DESCRIPTOR);
> +        Trim->TrimEnabled = TRUE;
> +
> +        Irp->IoStatus.Information =
> (ULONG_PTR)sizeof(DEVICE_TRIM_DESCRIPTOR);
> +        status = PdoCompleteIrp(Pdo, Irp, STATUS_SUCCESS);
> +        break;
> +
> +    default:
> +        status = PdoForwardIrpAndForget(Pdo, Irp);
> +        break;
> +    }
> +
> +    return status;
> +}
> +
> +__drv_functionClass(IO_COMPLETION_ROUTINE)
> +__drv_sameIRQL
> +static NTSTATUS
> +__PdoSendAwaitSrb(
> +    IN  PDEVICE_OBJECT          DeviceObject,
> +    IN  PIRP                    Irp,
> +    IN  PVOID                   Context
> +    )
> +{
> +    UNREFERENCED_PARAMETER(DeviceObject);
> +    UNREFERENCED_PARAMETER(Context);
> +
> +    *(Irp->UserIosb) = Irp->IoStatus;
> +
> +    if (Irp->MdlAddress) {
> +        MmUnlockPages(Irp->MdlAddress);
> +        IoFreeMdl(Irp->MdlAddress);
> +    }
> +
> +    KeSetEvent(Irp->UserEvent, IO_NO_INCREMENT, FALSE);
> +
> +    IoFreeIrp(Irp);
> +    return STATUS_MORE_PROCESSING_REQUIRED;
> +}
> +
> +static NTSTATUS
> +PdoSendAwaitSrb(
> +    IN  PXENDISK_PDO            Pdo,
> +    IN  PSCSI_REQUEST_BLOCK     Srb
> +    )
> +{
> +    PIRP                        Irp;
> +    IO_STATUS_BLOCK             IoStatus;
> +    KEVENT                      Event;
> +    PIO_STACK_LOCATION          Stack;
> +    NTSTATUS                    status;
> +
> +    KeInitializeEvent(&Event, NotificationEvent, FALSE);
> +
> +    status = STATUS_NO_MEMORY;
> +    Irp = IoAllocateIrp((CCHAR)(Pdo->LowerDeviceObject->StackSize + 1),
> FALSE);
> +    if (Irp == NULL)
> +        goto fail1;
> +
> +    Stack = IoGetNextIrpStackLocation(Irp);
> +    Stack->MajorFunction = IRP_MJ_SCSI;
> +    Stack->Parameters.Scsi.Srb = Srb;
> +
> +    IoSetCompletionRoutine(Irp,
> +                            __PdoSendAwaitSrb,
> +                            Srb,
> +                            TRUE,
> +                            TRUE,
> +                            TRUE);
> +    Irp->UserIosb = &IoStatus;
> +    Irp->UserEvent = &Event;
> +
> +    Irp->MdlAddress = IoAllocateMdl(Srb->DataBuffer,
> +                                    Srb->DataTransferLength,
> +                                    FALSE,
> +                                    FALSE,
> +                                    Irp);
> +    if (Irp->MdlAddress == NULL)
> +        goto fail2;
> +
> +#pragma warning(disable:6320)
> +    try {
> +        MmProbeAndLockPages(Irp->MdlAddress, KernelMode,
> IoReadAccess);
> +    } except (EXCEPTION_EXECUTE_HANDLER) {
> +        status = GetExceptionCode();
> +
> +        goto fail3;
> +    }
> +#pragma warning(default:6320)
> +
> +    Srb->OriginalRequest = Irp;
> +
> +    status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
> +    if (status == STATUS_PENDING) {
> +        (VOID) KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE,
> NULL);
> +        status = IoStatus.Status;
> +    }
> +
> +    return status;
> +
> +fail3:
> +    Error("fail3\n");
> +
> +    IoFreeMdl(Irp->MdlAddress);
> +
> +fail2:
> +    Error("fail2\n");
> +
> +    IoFreeIrp(Irp);
> +
> +fail1:
> +    Error("fail1 (%08x)\n", status);
> +
> +    return status;
> +}
> +
> +static NTSTATUS
> +PdoSendTrimSynchronous(
> +    IN  PXENDISK_PDO            Pdo,
> +    IN  PDEVICE_DATA_SET_RANGE  Ranges,
> +    IN  ULONG                   Count
> +    )
> +{
> +    SCSI_REQUEST_BLOCK          Srb;
> +    PCDB                        Cdb;
> +    PUNMAP_LIST_HEADER          Unmap;
> +    ULONG                       Length;
> +    ULONG                       Index;
> +    NTSTATUS                    status;
> +
> +    Length = sizeof(UNMAP_LIST_HEADER) +
> +             (Count * sizeof(UNMAP_BLOCK_DESCRIPTOR));
> +
> +    status = STATUS_NO_MEMORY;
> +    Unmap = __PdoAllocate(Length);
> +    if (Unmap == NULL)
> +        goto fail1;
> +
> +    RtlZeroMemory(&Srb, sizeof(SCSI_REQUEST_BLOCK));
> +    Srb.Length = sizeof(SCSI_REQUEST_BLOCK);
> +    Srb.SrbFlags = 0;
> +    Srb.Function = SRB_FUNCTION_EXECUTE_SCSI;
> +    Srb.DataBuffer = Unmap;
> +    Srb.DataTransferLength = Length;
> +    Srb.TimeOutValue = (ULONG)-1;
> +    Srb.CdbLength = 10;
> +
> +    Cdb = (PCDB)&Srb.Cdb[0];
> +    Cdb->UNMAP.OperationCode = SCSIOP_UNMAP;
> +    *(PUSHORT)Cdb->UNMAP.AllocationLength =
> _byteswap_ushort((USHORT)Length);
> +
> +    *(PUSHORT)Unmap->DataLength =
> _byteswap_ushort((USHORT)Length);
> +    *(PUSHORT)Unmap->BlockDescrDataLength =
> _byteswap_ushort((USHORT)sizeof(UNMAP_BLOCK_DESCRIPTOR));
> +
> +    for (Index = 0; Index < Count; ++Index) {
> +        PUNMAP_BLOCK_DESCRIPTOR Block = &Unmap->Descriptors[Index];
> +        PDEVICE_DATA_SET_RANGE  Range = &Ranges[Index];
> +
> +        ULONG   LengthInSectors = (ULONG)(Range->LengthInBytes / Pdo-
> >SectorSize);
> +        ULONG64 OffsetInSectors = (ULONG64)(Range->StartingOffset / Pdo-
> >SectorSize);
> +
> +        Trace("TRIM[%x] %x @ %llx\n",
> +                        Index,
> +                        LengthInSectors,
> +                        OffsetInSectors);
> +
> +        *(PULONG64)Block->StartingLba = _byteswap_uint64(OffsetInSectors);
> +        *(PULONG)Block->LbaCount = _byteswap_ulong(LengthInSectors);
> +    }
> +
> +    status = PdoSendAwaitSrb(Pdo, &Srb);
> +    if (!NT_SUCCESS(status))
> +        goto fail2;
> +
> +    __PdoFree(Unmap);
> +    return status;
> +
> +fail2:
> +    Error("fail2\n");
> +
> +    __PdoFree(Unmap);
> +
> +fail1:
> +    Error("fail1 (%08x)\n", status);
> +
> +    return status;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +PdoManageDataSetAttributes(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PDEVICE_MANAGE_DATA_SET_ATTRIBUTES  Attributes;
> +    PDEVICE_DATA_SET_RANGE              Ranges;
> +    ULONG                               NumRanges;
> +    NTSTATUS                            status;
> +
> +    Attributes = Irp->AssociatedIrp.SystemBuffer;
> +
> +    switch (Attributes->Action) {
> +    case DeviceDsmAction_Trim:
> +        Ranges = (PDEVICE_DATA_SET_RANGE)((PUCHAR)Attributes +
> Attributes->DataSetRangesOffset);
> +        NumRanges = Attributes->DataSetRangesLength /
> sizeof(DEVICE_DATA_SET_RANGE);
> +
> +        status = PdoSendTrimSynchronous(Pdo, Ranges, NumRanges);
> +
> +        status = PdoCompleteIrp(Pdo, Irp, status);
> +        break;
> +
> +    default:
> +        status = PdoForwardIrpAndForget(Pdo, Irp);
> +        break;
> +    }
> +
> +    return status;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +PdoDispatchControl(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    ULONG               ControlCode;
> +    NTSTATUS            status;
> +
> +    status = IoAcquireRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    ControlCode = StackLocation-
> >Parameters.DeviceIoControl.IoControlCode;
> +
> +    switch (ControlCode) {
> +    case IOCTL_STORAGE_QUERY_PROPERTY:
> +        status = PdoQueryProperty(Pdo, Irp);
> +        break;
> +
> +    case IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES:
> +        status = PdoManageDataSetAttributes(Pdo, Irp);
> +        break;
> +
> +    default:
> +        status = PdoForwardIrpAndForget(Pdo, Irp);
> +        break;
> +    }
> +
> +    return status;
> +
> +fail1:
> +    Error("fail1 (%08x)\n", status);
> +
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +PdoStartDevice(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    POWER_STATE         PowerState;
> +    NTSTATUS            status;
> +
> +    status = IoAcquireRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    status = PdoForwardIrpSynchronously(Pdo, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto fail2;
> +
> +    __PdoSetSystemPowerState(Pdo, PowerSystemWorking);
> +    __PdoSetDevicePowerState(Pdo, PowerDeviceD0);
> +
> +    PowerState.DeviceState = PowerDeviceD0;
> +    PoSetPowerState(Pdo->Dx->DeviceObject,
> +                    DevicePowerState,
> +                    PowerState);
> +
> +    __PdoSetDevicePnpState(Pdo, Started);
> +
> +    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +
> +    Irp->IoStatus.Status = STATUS_SUCCESS;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return STATUS_SUCCESS;
> +
> +fail2:
> +    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +
> +fail1:
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +__drv_functionClass(IO_COMPLETION_ROUTINE)
> +__drv_sameIRQL
> +static NTSTATUS
> +__PdoQueryStopDevice(
> +    IN  PDEVICE_OBJECT  DeviceObject,
> +    IN  PIRP            Irp,
> +    IN  PVOID           Context
> +    )
> +{
> +    PXENDISK_PDO        Pdo = Context;
> +
> +    UNREFERENCED_PARAMETER(DeviceObject);
> +
> +    if (Irp->PendingReturned)
> +        IoMarkIrpPending(Irp);
> +
> +    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +
> +    return STATUS_SUCCESS;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +PdoQueryStopDevice(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    NTSTATUS            status;
> +
> +    status = IoAcquireRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    __PdoSetDevicePnpState(Pdo, StopPending);
> +    Irp->IoStatus.Status = STATUS_SUCCESS;
> +
> +    IoCopyCurrentIrpStackLocationToNext(Irp);
> +    IoSetCompletionRoutine(Irp,
> +                           __PdoQueryStopDevice,
> +                           Pdo,
> +                           TRUE,
> +                           TRUE,
> +                           TRUE);
> +
> +    status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
> +
> +    return status;
> +
> +fail1:
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +__drv_functionClass(IO_COMPLETION_ROUTINE)
> +__drv_sameIRQL
> +static NTSTATUS
> +__PdoCancelStopDevice(
> +    IN  PDEVICE_OBJECT  DeviceObject,
> +    IN  PIRP            Irp,
> +    IN  PVOID           Context
> +    )
> +{
> +    PXENDISK_PDO        Pdo = Context;
> +
> +    UNREFERENCED_PARAMETER(DeviceObject);
> +
> +    if (Irp->PendingReturned)
> +        IoMarkIrpPending(Irp);
> +
> +    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +
> +    return STATUS_SUCCESS;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +PdoCancelStopDevice(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    NTSTATUS            status;
> +
> +    status = IoAcquireRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    Irp->IoStatus.Status = STATUS_SUCCESS;
> +
> +    __PdoRestoreDevicePnpState(Pdo, StopPending);
> +
> +    IoCopyCurrentIrpStackLocationToNext(Irp);
> +    IoSetCompletionRoutine(Irp,
> +                           __PdoCancelStopDevice,
> +                           Pdo,
> +                           TRUE,
> +                           TRUE,
> +                           TRUE);
> +
> +    status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
> +
> +    return status;
> +
> +fail1:
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +__drv_functionClass(IO_COMPLETION_ROUTINE)
> +__drv_sameIRQL
> +static NTSTATUS
> +__PdoStopDevice(
> +    IN  PDEVICE_OBJECT  DeviceObject,
> +    IN  PIRP            Irp,
> +    IN  PVOID           Context
> +    )
> +{
> +    PXENDISK_PDO        Pdo = Context;
> +
> +    UNREFERENCED_PARAMETER(DeviceObject);
> +
> +    if (Irp->PendingReturned)
> +        IoMarkIrpPending(Irp);
> +
> +    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +
> +    return STATUS_SUCCESS;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +PdoStopDevice(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    POWER_STATE         PowerState;
> +    NTSTATUS            status;
> +
> +    status = IoAcquireRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    if (__PdoGetDevicePowerState(Pdo) != PowerDeviceD0)
> +        goto done;
> +
> +    __PdoSetDevicePowerState(Pdo, PowerDeviceD3);
> +    __PdoSetSystemPowerState(Pdo, PowerSystemShutdown);
> +
> +    PowerState.DeviceState = PowerDeviceD3;
> +    PoSetPowerState(Pdo->Dx->DeviceObject,
> +                    DevicePowerState,
> +                    PowerState);
> +
> +done:
> +    __PdoSetDevicePnpState(Pdo, Stopped);
> +    Irp->IoStatus.Status = STATUS_SUCCESS;
> +
> +    IoCopyCurrentIrpStackLocationToNext(Irp);
> +    IoSetCompletionRoutine(Irp,
> +                           __PdoStopDevice,
> +                           Pdo,
> +                           TRUE,
> +                           TRUE,
> +                           TRUE);
> +
> +    status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
> +
> +    return status;
> +
> +fail1:
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +__drv_functionClass(IO_COMPLETION_ROUTINE)
> +__drv_sameIRQL
> +static NTSTATUS
> +__PdoQueryRemoveDevice(
> +    IN  PDEVICE_OBJECT  DeviceObject,
> +    IN  PIRP            Irp,
> +    IN  PVOID           Context
> +    )
> +{
> +    PXENDISK_PDO        Pdo = Context;
> +
> +    UNREFERENCED_PARAMETER(DeviceObject);
> +
> +    if (Irp->PendingReturned)
> +        IoMarkIrpPending(Irp);
> +
> +    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +
> +    return STATUS_SUCCESS;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +PdoQueryRemoveDevice(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    NTSTATUS            status;
> +
> +    status = IoAcquireRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    __PdoSetDevicePnpState(Pdo, RemovePending);
> +    Irp->IoStatus.Status = STATUS_SUCCESS;
> +
> +    IoCopyCurrentIrpStackLocationToNext(Irp);
> +    IoSetCompletionRoutine(Irp,
> +                           __PdoQueryRemoveDevice,
> +                           Pdo,
> +                           TRUE,
> +                           TRUE,
> +                           TRUE);
> +
> +    status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
> +
> +    return status;
> +
> +fail1:
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +__drv_functionClass(IO_COMPLETION_ROUTINE)
> +__drv_sameIRQL
> +static NTSTATUS
> +__PdoCancelRemoveDevice(
> +    IN  PDEVICE_OBJECT  DeviceObject,
> +    IN  PIRP            Irp,
> +    IN  PVOID           Context
> +    )
> +{
> +    PXENDISK_PDO        Pdo = Context;
> +
> +    UNREFERENCED_PARAMETER(DeviceObject);
> +
> +    if (Irp->PendingReturned)
> +        IoMarkIrpPending(Irp);
> +
> +    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +
> +    return STATUS_SUCCESS;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +PdoCancelRemoveDevice(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    NTSTATUS            status;
> +
> +    status = IoAcquireRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    __PdoRestoreDevicePnpState(Pdo, RemovePending);
> +    Irp->IoStatus.Status = STATUS_SUCCESS;
> +
> +    IoCopyCurrentIrpStackLocationToNext(Irp);
> +    IoSetCompletionRoutine(Irp,
> +                           __PdoCancelRemoveDevice,
> +                           Pdo,
> +                           TRUE,
> +                           TRUE,
> +                           TRUE);
> +
> +    status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
> +
> +    return status;
> +
> +fail1:
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +__drv_functionClass(IO_COMPLETION_ROUTINE)
> +__drv_sameIRQL
> +static NTSTATUS
> +__PdoSurpriseRemoval(
> +    IN  PDEVICE_OBJECT  DeviceObject,
> +    IN  PIRP            Irp,
> +    IN  PVOID           Context
> +    )
> +{
> +    PXENDISK_PDO        Pdo = Context;
> +
> +    UNREFERENCED_PARAMETER(DeviceObject);
> +
> +    if (Irp->PendingReturned)
> +        IoMarkIrpPending(Irp);
> +
> +    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +
> +    return STATUS_SUCCESS;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +PdoSurpriseRemoval(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    NTSTATUS            status;
> +
> +    status = IoAcquireRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    __PdoSetDevicePnpState(Pdo, SurpriseRemovePending);
> +    Irp->IoStatus.Status = STATUS_SUCCESS;
> +
> +    IoCopyCurrentIrpStackLocationToNext(Irp);
> +    IoSetCompletionRoutine(Irp,
> +                           __PdoSurpriseRemoval,
> +                           Pdo,
> +                           TRUE,
> +                           TRUE,
> +                           TRUE);
> +
> +    status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
> +
> +    return status;
> +
> +fail1:
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +PdoRemoveDevice(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PXENDISK_FDO        Fdo = __PdoGetFdo(Pdo);
> +    POWER_STATE         PowerState;
> +    NTSTATUS            status;
> +
> +    status = IoAcquireRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    if (__PdoGetDevicePowerState(Pdo) != PowerDeviceD0)
> +        goto done;
> +
> +    __PdoSetDevicePowerState(Pdo, PowerDeviceD3);
> +    __PdoSetSystemPowerState(Pdo, PowerSystemShutdown);
> +
> +    PowerState.DeviceState = PowerDeviceD3;
> +    PoSetPowerState(Pdo->Dx->DeviceObject,
> +                    DevicePowerState,
> +                    PowerState);
> +
> +done:
> +    if (__PdoIsMissing(Pdo)) {
> +        __PdoSetDevicePnpState(Pdo, Deleted);
> +        IoReleaseRemoveLockAndWait(&Pdo->Dx->RemoveLock, Irp);
> +    } else {
> +        __PdoSetDevicePnpState(Pdo, Enumerated);
> +        IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +    }
> +
> +    status = PdoForwardIrpSynchronously(Pdo, Irp);
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    if (__PdoIsMissing(Pdo)) {
> +        FdoAcquireMutex(Fdo);
> +        PdoDestroy(Pdo);
> +        FdoReleaseMutex(Fdo);
> +    }
> +
> +    return status;
> +
> +fail1:
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +PdoEject(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PXENDISK_FDO        Fdo = __PdoGetFdo(Pdo);
> +    NTSTATUS            status;
> +
> +    __PdoSetMissing(Pdo, "Ejected");
> +    __PdoSetDevicePnpState(Pdo, Deleted);
> +
> +    status = PdoForwardIrpSynchronously(Pdo, Irp);
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    FdoAcquireMutex(Fdo);
> +    PdoDestroy(Pdo);
> +    FdoReleaseMutex(Fdo);
> +
> +    return status;
> +}
> +
> +__drv_functionClass(IO_COMPLETION_ROUTINE)
> +__drv_sameIRQL
> +static NTSTATUS
> +__PdoDispatchPnp(
> +    IN  PDEVICE_OBJECT  DeviceObject,
> +    IN  PIRP            Irp,
> +    IN  PVOID           Context
> +    )
> +{
> +    PXENDISK_PDO        Pdo = Context;
> +
> +    UNREFERENCED_PARAMETER(DeviceObject);
> +
> +    if (Irp->PendingReturned)
> +        IoMarkIrpPending(Irp);
> +
> +    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +    return STATUS_SUCCESS;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +PdoDispatchPnp(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    UCHAR               MinorFunction;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    MinorFunction = StackLocation->MinorFunction;
> +
> +    switch (StackLocation->MinorFunction) {
> +    case IRP_MN_START_DEVICE:
> +        status = PdoStartDevice(Pdo, Irp);
> +        break;
> +
> +    case IRP_MN_QUERY_STOP_DEVICE:
> +        status = PdoQueryStopDevice(Pdo, Irp);
> +        break;
> +
> +    case IRP_MN_CANCEL_STOP_DEVICE:
> +        status = PdoCancelStopDevice(Pdo, Irp);
> +        break;
> +
> +    case IRP_MN_STOP_DEVICE:
> +        status = PdoStopDevice(Pdo, Irp);
> +        break;
> +
> +    case IRP_MN_QUERY_REMOVE_DEVICE:
> +        status = PdoQueryRemoveDevice(Pdo, Irp);
> +        break;
> +
> +    case IRP_MN_SURPRISE_REMOVAL:
> +        status = PdoSurpriseRemoval(Pdo, Irp);
> +        break;
> +
> +    case IRP_MN_REMOVE_DEVICE:
> +        status = PdoRemoveDevice(Pdo, Irp);
> +        break;
> +
> +    case IRP_MN_CANCEL_REMOVE_DEVICE:
> +        status = PdoCancelRemoveDevice(Pdo, Irp);
> +        break;
> +
> +    case IRP_MN_EJECT:
> +        status = PdoEject(Pdo, Irp);
> +        break;
> +
> +    default:
> +        status = IoAcquireRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +        if (!NT_SUCCESS(status))
> +            goto fail1;
> +
> +        IoCopyCurrentIrpStackLocationToNext(Irp);
> +        IoSetCompletionRoutine(Irp,
> +                               __PdoDispatchPnp,
> +                               Pdo,
> +                               TRUE,
> +                               TRUE,
> +                               TRUE);
> +
> +        status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
> +        break;
> +    }
> +
> +    return status;
> +
> +fail1:
> +    Error("fail1 (%08x)\n", status);
> +
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +static FORCEINLINE NTSTATUS
> +__PdoSetDevicePowerUp(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    DEVICE_POWER_STATE  DeviceState;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
> +
> +    ASSERT3U(DeviceState, <,  __PdoGetDevicePowerState(Pdo));
> +
> +    status = PdoForwardIrpSynchronously(Pdo, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto done;
> +
> +    Verbose("%p: %s -> %s\n",
> +         Pdo->Dx->DeviceObject,
> +         PowerDeviceStateName(__PdoGetDevicePowerState(Pdo)),
> +         PowerDeviceStateName(DeviceState));
> +
> +    __PdoSetDevicePowerState(Pdo, DeviceState);
> +
> +done:
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +static FORCEINLINE NTSTATUS
> +__PdoSetDevicePowerDown(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    DEVICE_POWER_STATE  DeviceState;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
> +
> +    ASSERT3U(DeviceState, >,  __PdoGetDevicePowerState(Pdo));
> +
> +    Verbose("%p: %s -> %s\n",
> +         Pdo->Dx->DeviceObject,
> +         PowerDeviceStateName(__PdoGetDevicePowerState(Pdo)),
> +         PowerDeviceStateName(DeviceState));
> +
> +    __PdoSetDevicePowerState(Pdo, DeviceState);
> +
> +    status = PdoForwardIrpSynchronously(Pdo, Irp);
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +static FORCEINLINE NTSTATUS
> +__PdoSetDevicePower(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    DEVICE_POWER_STATE  DeviceState;
> +    POWER_ACTION        PowerAction;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
> +    PowerAction = StackLocation->Parameters.Power.ShutdownType;
> +
> +    Trace("====> (%s:%s)\n",
> +          PowerDeviceStateName(DeviceState),
> +          PowerActionName(PowerAction));
> +
> +    if (DeviceState == __PdoGetDevicePowerState(Pdo)) {
> +        status = PdoForwardIrpSynchronously(Pdo, Irp);
> +        IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +        goto done;
> +    }
> +
> +    status = (DeviceState < __PdoGetDevicePowerState(Pdo)) ?
> +             __PdoSetDevicePowerUp(Pdo, Irp) :
> +             __PdoSetDevicePowerDown(Pdo, Irp);
> +
> +done:
> +    Trace("<==== (%s:%s)(%08x)\n",
> +          PowerDeviceStateName(DeviceState),
> +          PowerActionName(PowerAction),
> +          status);
> +    return status;
> +}
> +
> +static FORCEINLINE NTSTATUS
> +__PdoSetSystemPowerUp(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    SYSTEM_POWER_STATE  SystemState;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    SystemState = StackLocation->Parameters.Power.State.SystemState;
> +
> +    ASSERT3U(SystemState, <,  __PdoGetSystemPowerState(Pdo));
> +
> +    status = PdoForwardIrpSynchronously(Pdo, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto done;
> +
> +    Verbose("%p: %s -> %s\n",
> +         Pdo->Dx->DeviceObject,
> +         PowerSystemStateName(__PdoGetSystemPowerState(Pdo)),
> +         PowerSystemStateName(SystemState));
> +
> +    __PdoSetSystemPowerState(Pdo, SystemState);
> +
> +done:
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +static FORCEINLINE NTSTATUS
> +__PdoSetSystemPowerDown(
> +    IN  PXENDISK_PDO     Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    SYSTEM_POWER_STATE  SystemState;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    SystemState = StackLocation->Parameters.Power.State.SystemState;
> +
> +    ASSERT3U(SystemState, >,  __PdoGetSystemPowerState(Pdo));
> +
> +    Verbose("%p: %s -> %s\n",
> +         Pdo->Dx->DeviceObject,
> +         PowerSystemStateName(__PdoGetSystemPowerState(Pdo)),
> +         PowerSystemStateName(SystemState));
> +
> +    __PdoSetSystemPowerState(Pdo, SystemState);
> +
> +    status = PdoForwardIrpSynchronously(Pdo, Irp);
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +static FORCEINLINE NTSTATUS
> +__PdoSetSystemPower(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    SYSTEM_POWER_STATE  SystemState;
> +    POWER_ACTION        PowerAction;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    SystemState = StackLocation->Parameters.Power.State.SystemState;
> +    PowerAction = StackLocation->Parameters.Power.ShutdownType;
> +
> +    Trace("====> (%s:%s)\n",
> +          PowerSystemStateName(SystemState),
> +          PowerActionName(PowerAction));
> +
> +    if (SystemState == __PdoGetSystemPowerState(Pdo)) {
> +        status = PdoForwardIrpSynchronously(Pdo, Irp);
> +        IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +        goto done;
> +    }
> +
> +    status = (SystemState < __PdoGetSystemPowerState(Pdo)) ?
> +             __PdoSetSystemPowerUp(Pdo, Irp) :
> +             __PdoSetSystemPowerDown(Pdo, Irp);
> +
> +done:
> +    Trace("<==== (%s:%s)(%08x)\n",
> +          PowerSystemStateName(SystemState),
> +          PowerActionName(PowerAction),
> +          status);
> +    return status;
> +}
> +
> +static FORCEINLINE NTSTATUS
> +__PdoQueryDevicePowerUp(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    DEVICE_POWER_STATE  DeviceState;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
> +
> +    ASSERT3U(DeviceState, <,  __PdoGetDevicePowerState(Pdo));
> +
> +    status = PdoForwardIrpSynchronously(Pdo, Irp);
> +
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +static FORCEINLINE NTSTATUS
> +__PdoQueryDevicePowerDown(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    DEVICE_POWER_STATE  DeviceState;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
> +
> +    ASSERT3U(DeviceState, >,  __PdoGetDevicePowerState(Pdo));
> +
> +    status = PdoForwardIrpSynchronously(Pdo, Irp);
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +static FORCEINLINE NTSTATUS
> +__PdoQueryDevicePower(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    DEVICE_POWER_STATE  DeviceState;
> +    POWER_ACTION        PowerAction;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
> +    PowerAction = StackLocation->Parameters.Power.ShutdownType;
> +
> +    Trace("====> (%s:%s)\n",
> +          PowerDeviceStateName(DeviceState),
> +          PowerActionName(PowerAction));
> +
> +    if (DeviceState == __PdoGetDevicePowerState(Pdo)) {
> +        status = PdoForwardIrpSynchronously(Pdo, Irp);
> +        IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +        goto done;
> +    }
> +
> +    status = (DeviceState < __PdoGetDevicePowerState(Pdo)) ?
> +             __PdoQueryDevicePowerUp(Pdo, Irp) :
> +             __PdoQueryDevicePowerDown(Pdo, Irp);
> +
> +done:
> +    Trace("<==== (%s:%s)(%08x)\n",
> +          PowerDeviceStateName(DeviceState),
> +          PowerActionName(PowerAction),
> +          status);
> +    return status;
> +}
> +
> +static FORCEINLINE NTSTATUS
> +__PdoQuerySystemPowerUp(
> +    IN  PXENDISK_PDO     Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    SYSTEM_POWER_STATE  SystemState;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    SystemState = StackLocation->Parameters.Power.State.SystemState;
> +
> +    ASSERT3U(SystemState, <,  __PdoGetSystemPowerState(Pdo));
> +
> +    status = PdoForwardIrpSynchronously(Pdo, Irp);
> +
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +static FORCEINLINE NTSTATUS
> +__PdoQuerySystemPowerDown(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    SYSTEM_POWER_STATE  SystemState;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    SystemState = StackLocation->Parameters.Power.State.SystemState;
> +
> +    ASSERT3U(SystemState, >,  __PdoGetSystemPowerState(Pdo));
> +
> +    status = PdoForwardIrpSynchronously(Pdo, Irp);
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +static FORCEINLINE NTSTATUS
> +__PdoQuerySystemPower(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    SYSTEM_POWER_STATE  SystemState;
> +    POWER_ACTION        PowerAction;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    SystemState = StackLocation->Parameters.Power.State.SystemState;
> +    PowerAction = StackLocation->Parameters.Power.ShutdownType;
> +
> +    Trace("====> (%s:%s)\n",
> +          PowerSystemStateName(SystemState),
> +          PowerActionName(PowerAction));
> +
> +    if (SystemState == __PdoGetSystemPowerState(Pdo)) {
> +        status = PdoForwardIrpSynchronously(Pdo, Irp);
> +        IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +        goto done;
> +    }
> +
> +    status = (SystemState < __PdoGetSystemPowerState(Pdo)) ?
> +             __PdoQuerySystemPowerUp(Pdo, Irp) :
> +             __PdoQuerySystemPowerDown(Pdo, Irp);
> +
> +done:
> +    Trace("<==== (%s:%s)(%08x)\n",
> +          PowerSystemStateName(SystemState),
> +          PowerActionName(PowerAction),
> +          status);
> +
> +    return status;
> +}
> +
> +static NTSTATUS
> +PdoDevicePower(
> +    IN  PXENDISK_THREAD Self,
> +    IN  PVOID           Context
> +    )
> +{
> +    PXENDISK_PDO        Pdo = Context;
> +    PKEVENT             Event;
> +
> +    Event = ThreadGetEvent(Self);
> +
> +    for (;;) {
> +        PIRP                Irp;
> +        PIO_STACK_LOCATION  StackLocation;
> +        UCHAR               MinorFunction;
> +
> +        if (Pdo->DevicePowerIrp == NULL) {
> +            (VOID) KeWaitForSingleObject(Event,
> +                                         Executive,
> +                                         KernelMode,
> +                                         FALSE,
> +                                         NULL);
> +            KeClearEvent(Event);
> +        }
> +
> +        if (ThreadIsAlerted(Self))
> +            break;
> +
> +        Irp = Pdo->DevicePowerIrp;
> +
> +        if (Irp == NULL)
> +            continue;
> +
> +        Pdo->DevicePowerIrp = NULL;
> +        KeMemoryBarrier();
> +
> +        StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +        MinorFunction = StackLocation->MinorFunction;
> +
> +        switch (StackLocation->MinorFunction) {
> +        case IRP_MN_SET_POWER:
> +            (VOID) __PdoSetDevicePower(Pdo, Irp);
> +            break;
> +
> +        case IRP_MN_QUERY_POWER:
> +            (VOID) __PdoQueryDevicePower(Pdo, Irp);
> +            break;
> +
> +        default:
> +            ASSERT(FALSE);
> +            break;
> +        }
> +
> +        IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +    }
> +
> +    return STATUS_SUCCESS;
> +}
> +
> +static NTSTATUS
> +PdoSystemPower(
> +    IN  PXENDISK_THREAD Self,
> +    IN  PVOID           Context
> +    )
> +{
> +    PXENDISK_PDO        Pdo = Context;
> +    PKEVENT             Event;
> +
> +    Event = ThreadGetEvent(Self);
> +
> +    for (;;) {
> +        PIRP                Irp;
> +        PIO_STACK_LOCATION  StackLocation;
> +        UCHAR               MinorFunction;
> +
> +        if (Pdo->SystemPowerIrp == NULL) {
> +            (VOID) KeWaitForSingleObject(Event,
> +                                         Executive,
> +                                         KernelMode,
> +                                         FALSE,
> +                                         NULL);
> +            KeClearEvent(Event);
> +        }
> +
> +        if (ThreadIsAlerted(Self))
> +            break;
> +
> +        Irp = Pdo->SystemPowerIrp;
> +
> +        if (Irp == NULL)
> +            continue;
> +
> +        Pdo->SystemPowerIrp = NULL;
> +        KeMemoryBarrier();
> +
> +        StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +        MinorFunction = StackLocation->MinorFunction;
> +
> +        switch (StackLocation->MinorFunction) {
> +        case IRP_MN_SET_POWER:
> +            (VOID) __PdoSetSystemPower(Pdo, Irp);
> +            break;
> +
> +        case IRP_MN_QUERY_POWER:
> +            (VOID) __PdoQuerySystemPower(Pdo, Irp);
> +            break;
> +
> +        default:
> +            ASSERT(FALSE);
> +            break;
> +        }
> +
> +        IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +    }
> +
> +    return STATUS_SUCCESS;
> +}
> +
> +__drv_functionClass(IO_COMPLETION_ROUTINE)
> +__drv_sameIRQL
> +static NTSTATUS
> +__PdoDispatchPower(
> +    IN  PDEVICE_OBJECT  DeviceObject,
> +    IN  PIRP            Irp,
> +    IN  PVOID           Context
> +    )
> +{
> +    PXENDISK_PDO        Pdo = Context;
> +
> +    UNREFERENCED_PARAMETER(DeviceObject);
> +
> +    if (Irp->PendingReturned)
> +        IoMarkIrpPending(Irp);
> +
> +    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +    return STATUS_SUCCESS;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +PdoDispatchPower(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    UCHAR               MinorFunction;
> +    POWER_STATE_TYPE    PowerType;
> +    NTSTATUS            status;
> +
> +    status = IoAcquireRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +    MinorFunction = StackLocation->MinorFunction;
> +
> +    if (MinorFunction != IRP_MN_QUERY_POWER &&
> +        MinorFunction != IRP_MN_SET_POWER) {
> +        IoCopyCurrentIrpStackLocationToNext(Irp);
> +        IoSetCompletionRoutine(Irp,
> +                               __PdoDispatchPower,
> +                               Pdo,
> +                               TRUE,
> +                               TRUE,
> +                               TRUE);
> +
> +        status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
> +
> +        goto done;
> +    }
> +
> +    PowerType = StackLocation->Parameters.Power.Type;
> +
> +    Trace("====> (%02x:%s)\n",
> +          MinorFunction,
> +          PowerMinorFunctionName(MinorFunction));
> +
> +    switch (PowerType) {
> +    case DevicePowerState:
> +        IoMarkIrpPending(Irp);
> +
> +        ASSERT3P(Pdo->DevicePowerIrp, ==, NULL);
> +        Pdo->DevicePowerIrp = Irp;
> +        KeMemoryBarrier();
> +
> +        ThreadWake(Pdo->DevicePowerThread);
> +
> +        status = STATUS_PENDING;
> +        break;
> +
> +    case SystemPowerState:
> +        IoMarkIrpPending(Irp);
> +
> +        ASSERT3P(Pdo->SystemPowerIrp, ==, NULL);
> +        Pdo->SystemPowerIrp = Irp;
> +        KeMemoryBarrier();
> +
> +        ThreadWake(Pdo->SystemPowerThread);
> +
> +        status = STATUS_PENDING;
> +        break;
> +
> +    default:
> +        IoCopyCurrentIrpStackLocationToNext(Irp);
> +        IoSetCompletionRoutine(Irp,
> +                               __PdoDispatchPower,
> +                               Pdo,
> +                               TRUE,
> +                               TRUE,
> +                               TRUE);
> +
> +        status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
> +        break;
> +    }
> +
> +    Trace("<==== (%02x:%s) (%08x)\n",
> +          MinorFunction,
> +          PowerMinorFunctionName(MinorFunction),
> +          status);
> +
> +done:
> +    return status;
> +
> +fail1:
> +    Error("fail1 (%08x)\n", status);
> +
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +__drv_functionClass(IO_COMPLETION_ROUTINE)
> +__drv_sameIRQL
> +static NTSTATUS
> +__PdoDispatchDefault(
> +    IN  PDEVICE_OBJECT  DeviceObject,
> +    IN  PIRP            Irp,
> +    IN  PVOID           Context
> +    )
> +{
> +    PXENDISK_PDO        Pdo = Context;
> +
> +    UNREFERENCED_PARAMETER(DeviceObject);
> +
> +    if (Irp->PendingReturned)
> +        IoMarkIrpPending(Irp);
> +
> +    IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +
> +    return STATUS_SUCCESS;
> +}
> +
> +static DECLSPEC_NOINLINE NTSTATUS
> +PdoDispatchDefault(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    NTSTATUS            status;
> +
> +    status = IoAcquireRemoveLock(&Pdo->Dx->RemoveLock, Irp);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    IoCopyCurrentIrpStackLocationToNext(Irp);
> +    IoSetCompletionRoutine(Irp,
> +                           __PdoDispatchDefault,
> +                           Pdo,
> +                           TRUE,
> +                           TRUE,
> +                           TRUE);
> +
> +    status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
> +
> +    return status;
> +
> +fail1:
> +    Error("fail1 (%08x)\n", status);
> +
> +    Irp->IoStatus.Status = status;
> +    IoCompleteRequest(Irp, IO_NO_INCREMENT);
> +
> +    return status;
> +}
> +
> +NTSTATUS
> +PdoDispatch(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    )
> +{
> +    PIO_STACK_LOCATION  StackLocation;
> +    NTSTATUS            status;
> +
> +    StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +
> +    switch (StackLocation->MajorFunction) {
> +    case IRP_MJ_DEVICE_CONTROL:
> +        status = PdoDispatchControl(Pdo, Irp);
> +        break;
> +
> +    case IRP_MJ_PNP:
> +        status = PdoDispatchPnp(Pdo, Irp);
> +        break;
> +
> +    case IRP_MJ_POWER:
> +        status = PdoDispatchPower(Pdo, Irp);
> +        break;
> +
> +    default:
> +        status = PdoDispatchDefault(Pdo, Irp);
> +        break;
> +    }
> +
> +    return status;
> +}
> +
> +NTSTATUS
> +PdoCreate(
> +    PXENDISK_FDO                    Fdo,
> +    PDEVICE_OBJECT                  PhysicalDeviceObject
> +    )
> +{
> +    PDEVICE_OBJECT                  LowerDeviceObject;
> +    ULONG                           DeviceType;
> +    PDEVICE_OBJECT                  FilterDeviceObject;
> +    PXENDISK_DX                     Dx;
> +    PXENDISK_PDO                    Pdo;
> +    NTSTATUS                        status;
> +
> +    LowerDeviceObject =
> IoGetAttachedDeviceReference(PhysicalDeviceObject);
> +    DeviceType = LowerDeviceObject->DeviceType;
> +    ObDereferenceObject(LowerDeviceObject);
> +
> +#pragma prefast(suppress:28197) // Possibly leaking memory
> 'PhysicalDeviceObject'
> +    status = IoCreateDevice(DriverGetDriverObject(),
> +                            sizeof(XENDISK_DX),
> +                            NULL,
> +                            DeviceType,
> +                            FILE_DEVICE_SECURE_OPEN,
> +                            FALSE,
> +                            &FilterDeviceObject);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    Dx = (PXENDISK_DX)FilterDeviceObject->DeviceExtension;
> +    RtlZeroMemory(Dx, sizeof (XENDISK_DX));
> +
> +    Dx->Type = PHYSICAL_DEVICE_OBJECT;
> +    Dx->DeviceObject = FilterDeviceObject;
> +    Dx->DevicePnpState = Present;
> +    Dx->SystemPowerState = PowerSystemShutdown;
> +    Dx->DevicePowerState = PowerDeviceD3;
> +
> +    IoInitializeRemoveLock(&Dx->RemoveLock, PDO_TAG, 0, 0);
> +
> +    Pdo = __PdoAllocate(sizeof (XENDISK_PDO));
> +
> +    status = STATUS_NO_MEMORY;
> +    if (Pdo == NULL)
> +        goto fail2;
> +
> +    LowerDeviceObject = IoAttachDeviceToDeviceStack(FilterDeviceObject,
> +                                                    PhysicalDeviceObject);
> +
> +    status = STATUS_UNSUCCESSFUL;
> +    if (LowerDeviceObject == NULL)
> +        goto fail3;
> +
> +    Pdo->Dx = Dx;
> +    Pdo->PhysicalDeviceObject = PhysicalDeviceObject;
> +    Pdo->LowerDeviceObject = LowerDeviceObject;
> +    Pdo->SectorSize = 512;
> +
> +    status = ThreadCreate(PdoSystemPower, Pdo, &Pdo-
> >SystemPowerThread);
> +    if (!NT_SUCCESS(status))
> +        goto fail4;
> +
> +    status = ThreadCreate(PdoDevicePower, Pdo, &Pdo-
> >DevicePowerThread);
> +    if (!NT_SUCCESS(status))
> +        goto fail5;
> +
> +    Verbose("%p\n", FilterDeviceObject);
> +
> +    Dx->Pdo = Pdo;
> +
> +#pragma prefast(suppress:28182) // Dereferencing NULL pointer
> +    FilterDeviceObject->DeviceType = LowerDeviceObject->DeviceType;
> +    FilterDeviceObject->Characteristics = LowerDeviceObject-
> >Characteristics;
> +
> +    FilterDeviceObject->Flags |= LowerDeviceObject->Flags;
> +    FilterDeviceObject->Flags &= ~DO_DEVICE_INITIALIZING;
> +
> +    __PdoLink(Pdo, Fdo);
> +
> +    return STATUS_SUCCESS;
> +
> +fail5:
> +    Error("fail5\n");
> +
> +    ThreadAlert(Pdo->SystemPowerThread);
> +    ThreadJoin(Pdo->SystemPowerThread);
> +    Pdo->SystemPowerThread = NULL;
> +
> +fail4:
> +    Error("fail4\n");
> +
> +    Pdo->PhysicalDeviceObject = NULL;
> +    Pdo->LowerDeviceObject = NULL;
> +    Pdo->Dx = NULL;
> +
> +    IoDetachDevice(LowerDeviceObject);
> +
> +fail3:
> +    Error("fail3\n");
> +
> +    ASSERT(IsZeroMemory(Pdo, sizeof (XENDISK_PDO)));
> +    __PdoFree(Pdo);
> +
> +fail2:
> +    Error("fail2\n");
> +
> +    IoDeleteDevice(FilterDeviceObject);
> +
> +fail1:
> +    Error("fail1 (%08x)\n", status);
> +
> +    return status;
> +}
> +
> +VOID
> +PdoDestroy(
> +    IN  PXENDISK_PDO    Pdo
> +    )
> +{
> +    PDEVICE_OBJECT      LowerDeviceObject = Pdo->LowerDeviceObject;
> +    PXENDISK_DX         Dx = Pdo->Dx;
> +    PDEVICE_OBJECT      FilterDeviceObject = Dx->DeviceObject;
> +
> +    ASSERT3U(__PdoGetDevicePnpState(Pdo), ==, Deleted);
> +
> +    ASSERT(__PdoIsMissing(Pdo));
> +    Pdo->Missing = FALSE;
> +
> +    __PdoUnlink(Pdo);
> +
> +    Verbose("%p (%s)\n",
> +         FilterDeviceObject,
> +         Pdo->Reason);
> +    Pdo->Reason = NULL;
> +
> +    Dx->Pdo = NULL;
> +
> +    ThreadAlert(Pdo->DevicePowerThread);
> +    ThreadJoin(Pdo->DevicePowerThread);
> +    Pdo->DevicePowerThread = NULL;
> +
> +    ThreadAlert(Pdo->SystemPowerThread);
> +    ThreadJoin(Pdo->SystemPowerThread);
> +    Pdo->SystemPowerThread = NULL;
> +
> +    Pdo->SectorSize = 0;
> +    Pdo->PhysicalDeviceObject = NULL;
> +    Pdo->LowerDeviceObject = NULL;
> +    Pdo->Dx = NULL;
> +
> +    IoDetachDevice(LowerDeviceObject);
> +
> +    ASSERT(IsZeroMemory(Pdo, sizeof (XENDISK_PDO)));
> +    __PdoFree(Pdo);
> +
> +    IoDeleteDevice(FilterDeviceObject);
> +}
> diff --git a/src/xendisk/pdo.h b/src/xendisk/pdo.h
> new file mode 100644
> index 0000000..5e2e5d6
> --- /dev/null
> +++ b/src/xendisk/pdo.h
> @@ -0,0 +1,90 @@
> +/* 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 _XENDISK_PDO_H
> +#define _XENDISK_PDO_H
> +
> +#include <ntddk.h>
> +#include "types.h"
> +#include "fdo.h"
> +
> +typedef struct _XENDISK_PDO XENDISK_PDO, *PXENDISK_PDO;
> +
> +extern VOID
> +PdoSetDevicePnpState(
> +    IN  PXENDISK_PDO        Pdo,
> +    IN  DEVICE_PNP_STATE    State
> +    );
> +
> +extern DEVICE_PNP_STATE
> +PdoGetDevicePnpState(
> +    IN  PXENDISK_PDO    Pdo
> +    );
> +
> +extern PDEVICE_OBJECT
> +PdoGetPhysicalDeviceObject(
> +    IN  PXENDISK_PDO    Pdo
> +    );
> +
> +extern BOOLEAN
> +PdoIsMissing(
> +    IN  PXENDISK_PDO    Pdo
> +    );
> +
> +extern VOID
> +PdoSetMissing(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  const CHAR      *Reason
> +    );
> +
> +extern BOOLEAN
> +PdoIsMasked(
> +    IN  PXENDISK_PDO    Pdo
> +    );
> +
> +extern NTSTATUS
> +PdoCreate(
> +    IN  PXENDISK_FDO    Fdo,
> +    IN  PDEVICE_OBJECT  PhysicalDeviceObject
> +    );
> +
> +extern VOID
> +PdoDestroy(
> +    IN  PXENDISK_PDO    Pdo
> +    );
> +
> +extern NTSTATUS
> +PdoDispatch(
> +    IN  PXENDISK_PDO    Pdo,
> +    IN  PIRP            Irp
> +    );
> +
> +#endif // _XENDISK_PDO_H
> diff --git a/src/xendisk/thread.c b/src/xendisk/thread.c
> new file mode 100644
> index 0000000..92e2b94
> --- /dev/null
> +++ b/src/xendisk/thread.c
> @@ -0,0 +1,225 @@
> +/* 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 "thread.h"
> +#include "debug.h"
> +#include "assert.h"
> +#include "util.h"
> +
> +#define THREAD_POOL 'ERHT'
> +
> +struct _XENDISK_THREAD {
> +    XENDISK_THREAD_FUNCTION Function;
> +    PVOID                   Context;
> +    KEVENT                  Event;
> +    BOOLEAN                 Alerted;
> +    LONG                    References;
> +    PKTHREAD                Thread;
> +};
> +
> +static FORCEINLINE PVOID
> +__ThreadAllocate(
> +    IN  ULONG   Length
> +    )
> +{
> +    return __AllocateNonPagedPoolWithTag(__FUNCTION__, __LINE__,
> Length, THREAD_POOL);
> +}
> +
> +static FORCEINLINE VOID
> +__ThreadFree(
> +    IN  PVOID   Buffer
> +    )
> +{
> +    __FreePoolWithTag(Buffer, THREAD_POOL);
> +}
> +
> +static FORCEINLINE VOID
> +__ThreadWake(
> +    IN  PXENDISK_THREAD Thread
> +    )
> +{
> +    KeSetEvent(&Thread->Event, IO_NO_INCREMENT, FALSE);
> +}
> +
> +VOID
> +ThreadWake(
> +    IN  PXENDISK_THREAD Thread
> +    )
> +{
> +    __ThreadWake(Thread);
> +}
> +
> +static FORCEINLINE VOID
> +__ThreadAlert(
> +    IN  PXENDISK_THREAD Thread
> +    )
> +{
> +    Thread->Alerted = TRUE;
> +    __ThreadWake(Thread);
> +}
> +
> +VOID
> +ThreadAlert(
> +    IN  PXENDISK_THREAD Thread
> +    )
> +{
> +    __ThreadAlert(Thread);
> +}
> +
> +KSTART_ROUTINE  ThreadFunction;
> +
> +VOID
> +ThreadFunction(
> +    IN  PVOID       Argument
> +    )
> +{
> +    PXENDISK_THREAD Self = Argument;
> +    NTSTATUS        status;
> +
> +    status = Self->Function(Self, Self->Context);
> +
> +    if (InterlockedDecrement(&Self->References) == 0)
> +        __ThreadFree(Self);
> +
> +    PsTerminateSystemThread(status);
> +    // NOT REACHED
> +}
> +
> +NTSTATUS
> +ThreadCreate(
> +    IN  XENDISK_THREAD_FUNCTION Function,
> +    IN  PVOID                   Context,
> +    OUT PXENDISK_THREAD         *Thread
> +    )
> +{
> +    HANDLE                      Handle;
> +    NTSTATUS                    status;
> +
> +    ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
> +
> +    (*Thread) = __ThreadAllocate(sizeof (XENDISK_THREAD));
> +
> +    status = STATUS_NO_MEMORY;
> +    if (*Thread == NULL)
> +        goto fail1;
> +
> +    (*Thread)->Function = Function;
> +    (*Thread)->Context = Context;
> +    (*Thread)->Alerted = FALSE;
> +    (*Thread)->References = 2; // One for us, one for the thread function
> +
> +    KeInitializeEvent(&(*Thread)->Event, NotificationEvent, FALSE);
> +
> +    status = PsCreateSystemThread(&Handle,
> +                                  STANDARD_RIGHTS_ALL | SPECIFIC_RIGHTS_ALL,
> +                                  NULL,
> +                                  NULL,
> +                                  NULL,
> +                                  ThreadFunction,
> +                                  *Thread);
> +    if (!NT_SUCCESS(status)) {
> +        --(*Thread)->References;    // Fake thread function termination
> +        goto fail2;
> +    }
> +
> +    status = ObReferenceObjectByHandle(Handle,
> +                                       SYNCHRONIZE,
> +                                       *PsThreadType,
> +                                       KernelMode,
> +                                       &(*Thread)->Thread,
> +                                       NULL);
> +    if (!NT_SUCCESS(status))
> +        goto fail3;
> +
> +    ZwClose(Handle);
> +
> +    return STATUS_SUCCESS;
> +
> +fail3:
> +    Error("fail3\n");
> +
> +    __ThreadAlert(*Thread);
> +    ZwClose(Handle);
> +
> +fail2:
> +    Error("fail2\n");
> +
> +    if (InterlockedDecrement(&(*Thread)->References) == 0)
> +        __ThreadFree(*Thread);
> +
> +    *Thread = NULL;
> +
> +fail1:
> +    Error("fail1 (%08x)\n", status);
> +
> +    return status;
> +}
> +
> +PKEVENT
> +ThreadGetEvent(
> +    IN  PXENDISK_THREAD Thread
> +    )
> +{
> +    return &Thread->Event;
> +}
> +
> +BOOLEAN
> +ThreadIsAlerted(
> +    IN  PXENDISK_THREAD Thread
> +    )
> +{
> +    return Thread->Alerted;
> +}
> +
> +VOID
> +ThreadJoin(
> +    IN  PXENDISK_THREAD Thread
> +    )
> +{
> +    LONG                References;
> +
> +    ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
> +    ASSERT3P(KeGetCurrentThread(), !=, Thread->Thread);
> +
> +    (VOID) KeWaitForSingleObject(Thread->Thread,
> +                                 Executive,
> +                                 KernelMode,
> +                                 FALSE,
> +                                 NULL);
> +
> +    References = InterlockedDecrement(&Thread->References);
> +    ASSERT3U(References, ==, 0);
> +
> +    __ThreadFree(Thread);
> +}
> +
> diff --git a/src/xendisk/thread.h b/src/xendisk/thread.h
> new file mode 100644
> index 0000000..c197337
> --- /dev/null
> +++ b/src/xendisk/thread.h
> @@ -0,0 +1,73 @@
> +/* 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 _XENDISK_THREAD_H
> +#define _XENDISK_THREAD_H
> +
> +#include <ntddk.h>
> +
> +typedef struct _XENDISK_THREAD XENDISK_THREAD, *PXENDISK_THREAD;
> +
> +typedef NTSTATUS (*XENDISK_THREAD_FUNCTION)(PXENDISK_THREAD,
> PVOID);
> +
> +extern NTSTATUS
> +ThreadCreate(
> +    IN  XENDISK_THREAD_FUNCTION Function,
> +    IN  PVOID                   Context,
> +    OUT PXENDISK_THREAD         *Thread
> +    );
> +
> +extern PKEVENT
> +ThreadGetEvent(
> +    IN  PXENDISK_THREAD Self
> +    );
> +
> +extern BOOLEAN
> +ThreadIsAlerted(
> +    IN  PXENDISK_THREAD Self
> +    );
> +
> +extern VOID
> +ThreadWake(
> +    IN  PXENDISK_THREAD Thread
> +    );
> +
> +extern VOID
> +ThreadAlert(
> +    IN  PXENDISK_THREAD Thread
> +    );
> +
> +extern VOID
> +ThreadJoin(
> +    IN  PXENDISK_THREAD Thread
> +    );
> +
> +#endif  // _XENDISK_THREAD_H
> diff --git a/src/xendisk/types.h b/src/xendisk/types.h
> new file mode 100644
> index 0000000..b2b4218
> --- /dev/null
> +++ b/src/xendisk/types.h
> @@ -0,0 +1,53 @@
> +/* 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 _XENDISK_TYPES_H
> +#define _XENDISK_TYPES_H
> +
> +typedef enum _DEVICE_OBJECT_TYPE {
> +    PHYSICAL_DEVICE_OBJECT = 'ODP',
> +    FUNCTION_DEVICE_OBJECT = 'ODF'
> +} DEVICE_OBJECT_TYPE, *PDEVICE_OBJECT_TYPE;
> +
> +typedef enum _DEVICE_PNP_STATE {
> +    Invalid = 0,
> +    Present,        // PDO only
> +    Enumerated,     // PDO only
> +    Added,          // FDO only
> +    Started,
> +    StopPending,
> +    Stopped,
> +    RemovePending,
> +    SurpriseRemovePending,
> +    Deleted
> +} DEVICE_PNP_STATE, *PDEVICE_PNP_STATE;
> +
> +#endif  // _XENDISK_TYPES_H
> diff --git a/src/xendisk/util.h b/src/xendisk/util.h
> new file mode 100644
> index 0000000..e7adc22
> --- /dev/null
> +++ b/src/xendisk/util.h
> @@ -0,0 +1,222 @@
> +/* 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 _UTIL_H
> +#define _UTIL_H
> +
> +#include <ntddk.h>
> +
> +#include "assert.h"
> +
> +typedef struct _NON_PAGED_BUFFER_HEADER {
> +    SIZE_T  Length;
> +    ULONG   Tag;
> +} NON_PAGED_BUFFER_HEADER, *PNON_PAGED_BUFFER_HEADER;
> +
> +typedef struct _NON_PAGED_BUFFER_TRAILER {
> +    ULONG   Tag;
> +} NON_PAGED_BUFFER_TRAILER, *PNON_PAGED_BUFFER_TRAILER;
> +
> +static FORCEINLINE PVOID
> +__AllocateNonPagedPoolWithTag(
> +    IN  PCHAR                   Caller,
> +    IN  ULONG                   Line,
> +    IN  SIZE_T                  Length,
> +    IN  ULONG                   Tag
> +    )
> +{
> +    PUCHAR                      Buffer;
> +    PNON_PAGED_BUFFER_HEADER    Header;
> +    PNON_PAGED_BUFFER_TRAILER   Trailer;
> +
> +    ASSERT3S(Length, !=, 0);
> +
> +    Buffer = (PUCHAR)ExAllocatePoolWithTag(NonPagedPool,
> +                                   sizeof (NON_PAGED_BUFFER_HEADER) +
> +                                   Length +
> +                                   sizeof (NON_PAGED_BUFFER_TRAILER),
> +                                   Tag);
> +    if (Buffer == NULL) {
> +        Warning("%s:%u : AllocFailed %d bytes, %08x tag\n", Caller, Line,
> Length, Tag);
> +        goto done;
> +    }
> +
> +    RtlZeroMemory(Buffer,
> +                  sizeof (NON_PAGED_BUFFER_HEADER) +
> +                  Length +
> +                  sizeof (NON_PAGED_BUFFER_TRAILER));
> +
> +    Header = (PNON_PAGED_BUFFER_HEADER)Buffer;
> +    Header->Length = Length;
> +    Header->Tag = Tag;
> +
> +    Buffer += sizeof (NON_PAGED_BUFFER_HEADER);
> +
> +    Trailer = (PNON_PAGED_BUFFER_TRAILER)(Buffer + Length);
> +    Trailer->Tag = Tag;
> +
> +done:
> +    return Buffer;
> +}
> +
> +static FORCEINLINE VOID
> +__FreePoolWithTag(
> +    IN  PVOID                   _Buffer,
> +    IN  ULONG                   Tag
> +    )
> +{
> +    PUCHAR                      Buffer = (PUCHAR)_Buffer;
> +    SIZE_T                      Length;
> +    PNON_PAGED_BUFFER_HEADER    Header;
> +    PNON_PAGED_BUFFER_TRAILER   Trailer;
> +
> +    ASSERT3P(Buffer, !=, NULL);
> +
> +    Buffer -= sizeof (NON_PAGED_BUFFER_HEADER);
> +
> +    Header = (PNON_PAGED_BUFFER_HEADER)Buffer;
> +    ASSERT3U(Tag, ==, Header->Tag);
> +    Length = Header->Length;
> +
> +    Buffer += sizeof (NON_PAGED_BUFFER_HEADER);
> +
> +    Trailer = (PNON_PAGED_BUFFER_TRAILER)(Buffer + Length);
> +    ASSERT3U(Tag, ==, Trailer->Tag);
> +
> +    Buffer -= sizeof (NON_PAGED_BUFFER_HEADER);
> +
> +    RtlFillMemory(Buffer,
> +                  sizeof (NON_PAGED_BUFFER_HEADER) +
> +                  Length +
> +                  sizeof (NON_PAGED_BUFFER_TRAILER),
> +                  0xAA);
> +
> +    ExFreePoolWithTag(Buffer, Tag);
> +}
> +
> +static FORCEINLINE PMDL
> +__AllocPagesForMdl(
> +    IN  SIZE_T          Size
> +    )
> +{
> +    PMDL                Mdl;
> +    PHYSICAL_ADDRESS    LowAddr;
> +    PHYSICAL_ADDRESS    HighAddr;
> +    PHYSICAL_ADDRESS    SkipBytes;
> +
> +    SkipBytes.QuadPart = 0ull;
> +    HighAddr.QuadPart = ~0ull;
> +
> +    // try > 4GB
> +    LowAddr.QuadPart = 0x100000000ull;
> +    Mdl = MmAllocatePagesForMdlEx(LowAddr, HighAddr, SkipBytes, Size,
> MmCached, 0);
> +    if (Mdl) {
> +        if (MmGetMdlByteCount(Mdl) == Size) {
> +            goto done;
> +        }
> +        MmFreePagesFromMdl(Mdl);
> +        ExFreePool(Mdl);
> +        Mdl = NULL;
> +    }
> +
> +    // try > 2GB
> +    LowAddr.QuadPart = 0x80000000ull;
> +    Mdl = MmAllocatePagesForMdlEx(LowAddr, HighAddr, SkipBytes, Size,
> MmCached, 0);
> +    if (Mdl) {
> +        if (MmGetMdlByteCount(Mdl) == Size) {
> +            goto done;
> +        }
> +        MmFreePagesFromMdl(Mdl);
> +        ExFreePool(Mdl);
> +        Mdl = NULL;
> +    }
> +
> +    // try anywhere
> +    LowAddr.QuadPart = 0ull;
> +    Mdl = MmAllocatePagesForMdlEx(LowAddr, HighAddr, SkipBytes, Size,
> MmCached, 0);
> +    // Mdl byte count gets checked again after this returns
> +
> +done:
> +    return Mdl;
> +}
> +static FORCEINLINE PVOID
> +___AllocPages(
> +    IN  PCHAR           Caller,
> +    IN  ULONG           Line,
> +    IN  SIZE_T          Size,
> +    OUT PMDL*           Mdl
> +    )
> +{
> +    PVOID               Buffer;
> +
> +    *Mdl = __AllocPagesForMdl(Size);
> +    if (*Mdl == NULL) {
> +        Warning("%s:%u : MmAllocatePagesForMdlEx Failed %d bytes\n",
> Caller, Line, Size);
> +        goto fail1;
> +    }
> +
> +    if (MmGetMdlByteCount(*Mdl) != Size) {
> +        Warning("%s:%u : %d bytes != %d bytes requested\n", Caller, Line,
> MmGetMdlByteCount(*Mdl), Size);
> +        goto fail2;
> +    }
> +
> +    Buffer = MmMapLockedPagesSpecifyCache(*Mdl, KernelMode,
> MmCached, NULL, FALSE, NormalPagePriority);
> +    if (Buffer == NULL) {
> +        Warning("%s:%u : MmMapLockedPagesSpecifyCache Failed %d
> bytes\n", Caller, Line, Size);
> +        goto fail3;
> +    }
> +
> +    return Buffer;
> +
> +fail3:
> +fail2:
> +    MmFreePagesFromMdl(*Mdl);
> +    ExFreePool(*Mdl);
> +fail1:
> +    *Mdl = NULL;
> +    return NULL;
> +}
> +#define __AllocPages(Size, Mdl) ___AllocPages(__FUNCTION__, __LINE__,
> Size, Mdl)
> +
> +static FORCEINLINE VOID
> +__FreePages(
> +    IN  PVOID           Buffer,
> +    IN  PMDL            Mdl
> +    )
> +{
> +    if (Buffer && Mdl) {
> +        MmUnmapLockedPages(Buffer, Mdl);
> +        MmFreePagesFromMdl(Mdl);
> +        ExFreePool(Mdl);
> +    }
> +}
> +
> +#endif  // _UTIL_H
> diff --git a/src/xendisk/xendisk.rc b/src/xendisk/xendisk.rc
> new file mode 100644
> index 0000000..df2e5b6
> --- /dev/null
> +++ b/src/xendisk/xendisk.rc
> @@ -0,0 +1,56 @@
> +/* 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 <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         COMPANY_NAME_STR
> +#define VER_LEGALCOPYRIGHT_STR      "Copyright (c) Citrix Systems Inc."
> +
> +#define VER_PRODUCTNAME_STR         "XENDISK"
> +#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        "XENDISK.SYS"
> +#define VER_FILEDESCRIPTION_STR     "XENDISK"
> +
> +#define VER_FILETYPE                VFT_DRV
> +#define VER_FILESUBTYPE             VFT2_DRV_SYSTEM
> +
> +#include <common.ver>
> diff --git a/src/xenvbd.inf b/src/xenvbd.inf
> index bc8627b..0d58453 100644
> --- a/src/xenvbd.inf
> +++ b/src/xenvbd.inf
> @@ -46,6 +46,7 @@ CoInst_CopyFiles=11
>  [SourceDisksFiles]
>  xenvbd.sys=0,,
>  xencrsh.sys=0,,
> +xendisk.sys=0,,
>  xenvbd_coinst.dll=0,,
> 
>  [Manufacturer]
> @@ -62,9 +63,25 @@ CopyFiles=XenVbd_Copyfiles
>  [XenVbd_Copyfiles]
>  xenvbd.sys
>  xencrsh.sys
> +xendisk.sys
> +
> +[XenVbd_Inst.HW]
> +AddReg=XenVbd_AddReg
> +
> +[XenVbd_AddReg]
> +HKR,,"UpperFilters",0x00010000,"xendisk"
> 
>  [XenVbd_Inst.Services]
>  AddService=xenvbd,2,XenVbd_Service,
> +AddService=xendisk,,XenDisk_Service,
> +
> +[XenDisk_Service]
> +DisplayName=%XenDiskDesc%
> +ServiceType=%SERVICE_KERNEL_DRIVER%
> +StartType=%SERVICE_BOOT_START%
> +ErrorControl=%SERVICE_ERROR_NORMAL%
> +ServiceBinary=%12%\xendisk.sys
> +LoadOrderGroup="Scsi Miniport"
> 
>  [XenVbd_Service]
>  DisplayName=%XenVbdDesc%
> @@ -95,6 +112,7 @@
> HKR,,CoInstallers32,0x00010000,"xenvbd_coinst_@MAJOR_VERSION@_@M
> INOR_VERSION@_@M
>  Company = "@COMPANY_NAME@"
>  DiskDesc = "@PRODUCT_NAME@ PV Storage Host Adapter Package"
>  XenVbdDesc= "@PRODUCT_NAME@ PV Storage Host Adapter"
> +XenDiskDesc= "@PRODUCT_NAME@ PV Storage Filter"
> 
>  SERVICE_BOOT_START = 0x0
>  SERVICE_SYSTEM_START = 0x1
> diff --git a/vs2012/package/package.vcxproj
> b/vs2012/package/package.vcxproj
> index 5e5fcbc..9782f19 100644
> --- a/vs2012/package/package.vcxproj
> +++ b/vs2012/package/package.vcxproj
> @@ -51,6 +51,9 @@
>  		<ProjectReference Include="..\xenvbd\xenvbd.vcxproj">
>  			<Project>{ef236371-3145-41b1-99c9-
> 82b33e353f17}</Project>
>  		</ProjectReference>
> +		<ProjectReference Include="..\xendisk\xendisk.vcxproj">
> +			<Project>{d7411b2c-2c43-434d-9f56-
> e10a3d2f5bad}</Project>
> +		</ProjectReference>
>  	</ItemGroup>
>  	<ItemGroup>
>  		<FilesToPackage
> Include="$(KIT)\Redist\DIFx\dpinst\EngMui\x86\dpinst.exe"
> Condition="'$(Platform)'=='Win32'" />
> diff --git a/vs2012/xendisk/xendisk.vcxproj
> b/vs2012/xendisk/xendisk.vcxproj
> new file mode 100644
> index 0000000..333bc40
> --- /dev/null
> +++ b/vs2012/xendisk/xendisk.vcxproj
> @@ -0,0 +1,84 @@
> +<?xml version="1.0" encoding="utf-8"?>
> +<Project DefaultTargets="Build" ToolsVersion="4.0"
> xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
> +	<Import Project="..\configs.props" />
> +
> +	<PropertyGroup Label="Globals">
> +		<Configuration>Windows Vista Debug</Configuration>
> +		<Platform Condition="'$(Platform)' == ''">Win32</Platform>
> +
> 	<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
> +	</PropertyGroup>
> +	<PropertyGroup Label="ProeprtySheets">
> +
> 	<PlatformToolset>WindowsKernelModeDriver8.0</PlatformToolset
> >
> +		<ConfigurationType>Driver</ConfigurationType>
> +		<DriverType>WDM</DriverType>
> +	</PropertyGroup>
> +
> +	<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
> +
> +	<PropertyGroup Label="Globals">
> +		<ProjectGuid>{D7411B2C-2C43-434D-9F56-
> E10A3D2F5BAD}</ProjectGuid>
> +	</PropertyGroup>
> +
> +	<Import Project="..\targets.props" />
> +	<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
> +
> +	<PropertyGroup>
> +
> 	<IncludePath>$(ProjectDir)..\..\include;$(IncludePath)</IncludePath
> >
> +		<RunCodeAnalysis>true</RunCodeAnalysis>
> +		<EnableInf2cat>false</EnableInf2cat>
> +
> 	<IntDir>..\$(ProjectName)\$(ConfigurationName)\$(Platform)\</Int
> Dir>
> +		<OutDir>..\$(ConfigurationName)\$(Platform)\</OutDir>
> +	</PropertyGroup>
> +
> +	<ItemDefinitionGroup>
> +		<ClCompile>
> +			<BufferSecurityCheck>false</BufferSecurityCheck>
> +
> 	<PreprocessorDefinitions>__MODULE__="XENDISK";%(Preprocesso
> rDefinitions)</PreprocessorDefinitions>
> +			<WarningLevel>EnableAllWarnings</WarningLevel>
> +
> 	<DisableSpecificWarnings>4548;4711;4820;4668;4255;6001;6054;28196
> ;%(DisableSpecificWarnings)</DisableSpecificWarnings>
> +
> 	<MultiProcessorCompilation>true</MultiProcessorCompilation>
> +			<EnablePREfast>true</EnablePREfast>
> +		</ClCompile>
> +		<Link>
> +
> 	<AdditionalDependencies>$(DDK_LIB_PATH)/libcntpr.lib;%(Addition
> alDependencies)</AdditionalDependencies>
> +		</Link>
> +		<Inf>
> +			<SpecifyArchitecture>true</SpecifyArchitecture>
> +
> 	<SpecifyDriverVerDirectiveVersion>true</SpecifyDriverVerDirective
> Version>
> +
> 	<TimeStamp>$(MAJOR_VERSION).$(MINOR_VERSION).$(MICRO_VE
> RSION).$(BUILD_NUMBER)</TimeStamp>
> +			<EnableVerbose>true</EnableVerbose>
> +		</Inf>
> +	</ItemDefinitionGroup>
> +	<ItemDefinitionGroup Condition="'$(Platform)'=='Win32'">
> +		<ClCompile>
> +
> 	<PreprocessorDefinitions>__i386__;%(PreprocessorDefinitions)</Pr
> eprocessorDefinitions>
> +		</ClCompile>
> +		<Inf>
> +			<Architecture>x86</Architecture>
> +		</Inf>
> +	</ItemDefinitionGroup>
> +	<ItemDefinitionGroup Condition="'$(Platform)'=='x64'">
> +		<ClCompile>
> +
> 	<PreprocessorDefinitions>__x86_64__;%(PreprocessorDefinitions)<
> /PreprocessorDefinitions>
> +		</ClCompile>
> +		<Inf>
> +			<Architecture>amd64</Architecture>
> +		</Inf>
> +	</ItemDefinitionGroup>
> +
> +	<ItemGroup>
> +		<FilesToPackage Include="$(TargetPath)" />
> +		<FilesToPackage Include="$(OutDir)$(TargetName).pdb" />
> +		<FilesToPackage Include="@(Inf->'%(CopyOutput)')"
> Condition="'@(Inf)'!=''" />
> +	</ItemGroup>
> +	<ItemGroup>
> +		<ClCompile Include="../../src/xendisk/driver.c" />
> +		<ClCompile Include="../../src/xendisk/fdo.c" />
> +		<ClCompile Include="../../src/xendisk/pdo.c" />
> +		<ClCompile Include="../../src/xendisk/thread.c" />
> +	</ItemGroup>
> +	<ItemGroup>
> +		<ResourceCompile Include="..\..\src\xendisk\xendisk.rc" />
> +	</ItemGroup>
> +	<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
> +</Project>
> diff --git a/vs2012/xendisk/xendisk.vcxproj.user
> b/vs2012/xendisk/xendisk.vcxproj.user
> new file mode 100644
> index 0000000..0b2b210
> --- /dev/null
> +++ b/vs2012/xendisk/xendisk.vcxproj.user
> @@ -0,0 +1,8 @@
> +<?xml version="1.0" encoding="utf-8"?>
> +<Project ToolsVersion="4.0"
> xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
> +	<PropertyGroup>
> +		<SignMode>TestSign</SignMode>
> +		<TestCertificate>..\..\src\xenvbd.pfx</TestCertificate>
> +
> 	<TimeStampServer>http://timestamp.verisign.com/scripts/timstam
> p.dll</TimeStampServer>
> +	</PropertyGroup>
> +</Project>
> diff --git a/vs2012/xenvbd.sln b/vs2012/xenvbd.sln
> index 86fb1a5..15113cf 100644
> --- a/vs2012/xenvbd.sln
> +++ b/vs2012/xenvbd.sln
> @@ -4,10 +4,13 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}")
> = "xenvbd", "xenvbd\xenvbd.vcx
>  	ProjectSection(ProjectDependencies) = postProject
>  		{50C08437-C1F3-4349-BF6A-7B55A06BF999} = {50C08437-
> C1F3-4349-BF6A-7B55A06BF999}
>  		{58F5BC43-B92E-4A2B-975D-0066EAB29092} = {58F5BC43-
> B92E-4A2B-975D-0066EAB29092}
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD} = {D7411B2C-
> 2C43-434D-9F56-E10A3D2F5BAD}
>  	EndProjectSection
>  EndProject
>  Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xencrsh",
> "xencrsh\xencrsh.vcxproj", "{58F5BC43-B92E-4A2B-975D-0066EAB29092}"
>  EndProject
> +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xendisk",
> "xendisk\xendisk.vcxproj", "{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}"
> +EndProject
>  Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xenvbd_coinst",
> "coinst\xenvbd_coinst.vcxproj", "{50C08437-C1F3-4349-BF6A-
> 7B55A06BF999}"
>  	ProjectSection(ProjectDependencies) = postProject
>  		{58F5BC43-B92E-4A2B-975D-0066EAB29092} = {58F5BC43-
> B92E-4A2B-975D-0066EAB29092}
> @@ -18,6 +21,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}")
> = "package", "package\package.
>  		{50C08437-C1F3-4349-BF6A-7B55A06BF999} = {50C08437-
> C1F3-4349-BF6A-7B55A06BF999}
>  		{58F5BC43-B92E-4A2B-975D-0066EAB29092} = {58F5BC43-
> B92E-4A2B-975D-0066EAB29092}
>          {EF236371-3145-41B1-99C9-82B33E353F17} = {EF236371-3145-41B1-99C9-
> 82B33E353F17}
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD} = {D7411B2C-
> 2C43-434D-9F56-E10A3D2F5BAD}
>  	EndProjectSection
>  EndProject
>  Global
> @@ -36,6 +40,30 @@ Global
>  		Windows Vista Release|x64 = Windows Vista Release|x64
>  	EndGlobalSection
>  	GlobalSection(ProjectConfigurationPlatforms) = postSolution
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7
> Debug|Win32.ActiveCfg = Windows 7 Debug|Win32
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7
> Debug|Win32.Build.0 = Windows 7 Debug|Win32
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7
> Debug|x64.ActiveCfg = Windows 7 Debug|x64
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7
> Debug|x64.Build.0 = Windows 7 Debug|x64
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7
> Release|Win32.ActiveCfg = Windows 7 Release|Win32
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7
> Release|Win32.Build.0 = Windows 7 Release|Win32
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7
> Release|x64.ActiveCfg = Windows 7 Release|x64
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7
> Release|x64.Build.0 = Windows 7 Release|x64
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8
> Debug|Win32.ActiveCfg = Windows 8 Debug|Win32
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8
> Debug|Win32.Build.0 = Windows 8 Debug|Win32
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8
> Debug|x64.ActiveCfg = Windows 8 Debug|x64
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8
> Debug|x64.Build.0 = Windows 8 Debug|x64
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8
> Release|Win32.ActiveCfg = Windows 8 Release|Win32
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8
> Release|Win32.Build.0 = Windows 8 Release|Win32
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8
> Release|x64.ActiveCfg = Windows 8 Release|x64
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8
> Release|x64.Build.0 = Windows 8 Release|x64
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista
> Debug|Win32.ActiveCfg = Windows Vista Debug|Win32
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista
> Debug|Win32.Build.0 = Windows Vista Debug|Win32
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista
> Debug|x64.ActiveCfg = Windows Vista Debug|x64
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista
> Debug|x64.Build.0 = Windows Vista Debug|x64
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista
> Release|Win32.ActiveCfg = Windows Vista Release|Win32
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista
> Release|Win32.Build.0 = Windows Vista Release|Win32
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista
> Release|x64.ActiveCfg = Windows Vista Release|x64
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista
> Release|x64.Build.0 = Windows Vista Release|x64
>  		{EF236371-3145-41B1-99C9-82B33E353F17}.Windows 7
> Debug|Win32.ActiveCfg = Windows 7 Debug|Win32
>  		{EF236371-3145-41B1-99C9-82B33E353F17}.Windows 7
> Debug|Win32.Build.0 = Windows 7 Debug|Win32
>  		{EF236371-3145-41B1-99C9-82B33E353F17}.Windows 7
> Debug|x64.ActiveCfg = Windows 7 Debug|x64
> diff --git a/vs2013/package/package.vcxproj
> b/vs2013/package/package.vcxproj
> index 5d0de4d..8b2fa4f 100644
> --- a/vs2013/package/package.vcxproj
> +++ b/vs2013/package/package.vcxproj
> @@ -80,6 +80,9 @@
>      <ProjectReference Include="..\xenvbd\xenvbd.vcxproj">
>        <Project>{ef236371-3145-41b1-99c9-82b33e353f17}</Project>
>      </ProjectReference>
> +    <ProjectReference Include="..\xendisk\xendisk.vcxproj">
> +      <Project>{d7411b2c-2c43-434d-9f56-e10a3d2f5bad}</Project>
> +    </ProjectReference>
>    </ItemGroup>
>    <ItemGroup>
>      <FilesToPackage
> Include="$(KIT)\Redist\DIFx\dpinst\EngMui\x86\dpinst.exe"
> Condition="'$(Platform)'=='Win32'" />
> diff --git a/vs2013/xendisk/xendisk.vcxproj
> b/vs2013/xendisk/xendisk.vcxproj
> new file mode 100644
> index 0000000..39b9163
> --- /dev/null
> +++ b/vs2013/xendisk/xendisk.vcxproj
> @@ -0,0 +1,112 @@
> +<?xml version="1.0" encoding="utf-8"?>
> +<Project DefaultTargets="Build" ToolsVersion="4.0"
> xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
> +  <Import Project="..\configs.props" />
> +  <PropertyGroup Label="Globals">
> +    <Configuration>Windows Vista Debug</Configuration>
> +    <Platform Condition="'$(Platform)' == ''">Win32</Platform>
> +    <DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
> +  </PropertyGroup>
> +  <PropertyGroup Label="ProeprtySheets">
> +    <ConfigurationType>Driver</ConfigurationType>
> +    <DriverType>WDM</DriverType>
> +  </PropertyGroup>
> +  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
> +  <PropertyGroup Label="Configuration"
> Condition="'$(Configuration)|$(Platform)'=='Windows 8 Release|Win32'">
> +    <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|Win32'">
> +    <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)'=='Windows 7 Debug|Win32'">
> +    <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 Release|x64'">
> +    <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 Release|x64'">
> +    <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 Debug|x64'">
> +    <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset>
> +  </PropertyGroup>
> +  <PropertyGroup Label="Configuration"
> Condition="'$(Configuration)|$(Platform)'=='Windows 8 Debug|x64'">
> +    <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset>
> +  </PropertyGroup>
> +  <PropertyGroup Label="Globals">
> +    <ProjectGuid>{D7411B2C-2C43-434D-9F56-
> E10A3D2F5BAD}</ProjectGuid>
> +  </PropertyGroup>
> +  <Import Project="..\targets.props" />
> +  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
> +  <PropertyGroup>
> +    <IncludePath>$(ProjectDir)..\..\include;$(IncludePath)</IncludePath>
> +    <RunCodeAnalysis>true</RunCodeAnalysis>
> +    <EnableInf2cat>false</EnableInf2cat>
> +    <IntDir>..\$(ProjectName)\$(ConfigurationName)\$(Platform)\</IntDir>
> +    <OutDir>..\$(ConfigurationName)\$(Platform)\</OutDir>
> +  </PropertyGroup>
> +  <ItemDefinitionGroup>
> +    <ClCompile>
> +      <BufferSecurityCheck>false</BufferSecurityCheck>
> +
> <PreprocessorDefinitions>__MODULE__="XENDISK";%(PreprocessorDefiniti
> ons)</PreprocessorDefinitions>
> +      <WarningLevel>EnableAllWarnings</WarningLevel>
> +
> <DisableSpecificWarnings>4548;4711;4820;4668;4255;6001;6054;28196;%(Disa
> bleSpecificWarnings)</DisableSpecificWarnings>
> +      <MultiProcessorCompilation>true</MultiProcessorCompilation>
> +      <EnablePREfast>true</EnablePREfast>
> +    </ClCompile>
> +    <Link>
> +
> <AdditionalDependencies>$(DDK_LIB_PATH)/libcntpr.lib;%(AdditionalDepen
> dencies)</AdditionalDependencies>
> +    </Link>
> +    <Inf>
> +      <SpecifyArchitecture>true</SpecifyArchitecture>
> +
> <SpecifyDriverVerDirectiveVersion>true</SpecifyDriverVerDirectiveVersion
> >
> +
> <TimeStamp>$(MAJOR_VERSION).$(MINOR_VERSION).$(MICRO_VERSION).
> $(BUILD_NUMBER)</TimeStamp>
> +      <EnableVerbose>true</EnableVerbose>
> +    </Inf>
> +  </ItemDefinitionGroup>
> +  <ItemDefinitionGroup Condition="'$(Platform)'=='Win32'">
> +    <ClCompile>
> +
> <PreprocessorDefinitions>__i386__;%(PreprocessorDefinitions)</Preproces
> sorDefinitions>
> +    </ClCompile>
> +    <Inf>
> +      <Architecture>x86</Architecture>
> +    </Inf>
> +  </ItemDefinitionGroup>
> +  <ItemDefinitionGroup Condition="'$(Platform)'=='x64'">
> +    <ClCompile>
> +
> <PreprocessorDefinitions>__x86_64__;%(PreprocessorDefinitions)</Prepro
> cessorDefinitions>
> +    </ClCompile>
> +    <Inf>
> +      <Architecture>amd64</Architecture>
> +    </Inf>
> +  </ItemDefinitionGroup>
> +  <ItemGroup>
> +    <FilesToPackage Include="$(TargetPath)" />
> +    <FilesToPackage Include="$(OutDir)$(TargetName).pdb" />
> +    <FilesToPackage Include="@(Inf->'%(CopyOutput)')"
> Condition="'@(Inf)'!=''" />
> +  </ItemGroup>
> +  <ItemGroup>
> +    <ClCompile Include="../../src/xendisk/driver.c" />
> +    <ClCompile Include="../../src/xendisk/fdo.c" />
> +    <ClCompile Include="../../src/xendisk/pdo.c" />
> +    <ClCompile Include="../../src/xendisk/thread.c" />
> +  </ItemGroup>
> +  <ItemGroup>
> +    <ResourceCompile Include="..\..\src\xendisk\xendisk.rc" />
> +  </ItemGroup>
> +  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
> +</Project>
> diff --git a/vs2013/xendisk/xendisk.vcxproj.user
> b/vs2013/xendisk/xendisk.vcxproj.user
> new file mode 100644
> index 0000000..1f1f3c0
> --- /dev/null
> +++ b/vs2013/xendisk/xendisk.vcxproj.user
> @@ -0,0 +1,8 @@
> +<?xml version="1.0" encoding="utf-8"?>
> +<Project ToolsVersion="4.0"
> xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
> +  <PropertyGroup>
> +    <SignMode>TestSign</SignMode>
> +    <TestCertificate>..\..\src\xenvbd.pfx</TestCertificate>
> +
> <TimeStampServer>http://timestamp.verisign.com/scripts/timstamp.dll</Ti
> meStampServer>
> +  </PropertyGroup>
> +</Project>
> diff --git a/vs2013/xenvbd.sln b/vs2013/xenvbd.sln
> index 13128c5..da798d2 100644
> --- a/vs2013/xenvbd.sln
> +++ b/vs2013/xenvbd.sln
> @@ -4,10 +4,13 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}")
> = "xenvbd", "xenvbd\xenvbd.vcx
>  	ProjectSection(ProjectDependencies) = postProject
>  		{50C08437-C1F3-4349-BF6A-7B55A06BF999} = {50C08437-
> C1F3-4349-BF6A-7B55A06BF999}
>  		{58F5BC43-B92E-4A2B-975D-0066EAB29092} = {58F5BC43-
> B92E-4A2B-975D-0066EAB29092}
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD} = {D7411B2C-
> 2C43-434D-9F56-E10A3D2F5BAD}
>  	EndProjectSection
>  EndProject
>  Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xencrsh",
> "xencrsh\xencrsh.vcxproj", "{58F5BC43-B92E-4A2B-975D-0066EAB29092}"
>  EndProject
> +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xendisk",
> "xendisk\xendisk.vcxproj", "{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}"
> +EndProject
>  Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xenvbd_coinst",
> "coinst\xenvbd_coinst.vcxproj", "{50C08437-C1F3-4349-BF6A-
> 7B55A06BF999}"
>      ProjectSection(ProjectDependencies) = postProject
>  		{58F5BC43-B92E-4A2B-975D-0066EAB29092} = {58F5BC43-
> B92E-4A2B-975D-0066EAB29092}
> @@ -18,6 +21,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}")
> = "package", "package\package.
>  		{50C08437-C1F3-4349-BF6A-7B55A06BF999} = {50C08437-
> C1F3-4349-BF6A-7B55A06BF999}
>  		{58F5BC43-B92E-4A2B-975D-0066EAB29092} = {58F5BC43-
> B92E-4A2B-975D-0066EAB29092}
>          {EF236371-3145-41B1-99C9-82B33E353F17} = {EF236371-3145-41B1-99C9-
> 82B33E353F17}
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD} = {D7411B2C-
> 2C43-434D-9F56-E10A3D2F5BAD}
>  	EndProjectSection
>  EndProject
>  Global
> @@ -36,6 +40,30 @@ Global
>  		Windows Vista Release|x64 = Windows Vista Release|x64
>  	EndGlobalSection
>  	GlobalSection(ProjectConfigurationPlatforms) = postSolution
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7
> Debug|Win32.ActiveCfg = Windows 7 Debug|Win32
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7
> Debug|Win32.Build.0 = Windows 7 Debug|Win32
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7
> Debug|x64.ActiveCfg = Windows 7 Debug|x64
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7
> Debug|x64.Build.0 = Windows 7 Debug|x64
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7
> Release|Win32.ActiveCfg = Windows 7 Release|Win32
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7
> Release|Win32.Build.0 = Windows 7 Release|Win32
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7
> Release|x64.ActiveCfg = Windows 7 Release|x64
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 7
> Release|x64.Build.0 = Windows 7 Release|x64
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8
> Debug|Win32.ActiveCfg = Windows 8 Debug|Win32
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8
> Debug|Win32.Build.0 = Windows 8 Debug|Win32
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8
> Debug|x64.ActiveCfg = Windows 8 Debug|x64
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8
> Debug|x64.Build.0 = Windows 8 Debug|x64
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8
> Release|Win32.ActiveCfg = Windows 8 Release|Win32
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8
> Release|Win32.Build.0 = Windows 8 Release|Win32
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8
> Release|x64.ActiveCfg = Windows 8 Release|x64
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows 8
> Release|x64.Build.0 = Windows 8 Release|x64
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista
> Debug|Win32.ActiveCfg = Windows Vista Debug|Win32
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista
> Debug|Win32.Build.0 = Windows Vista Debug|Win32
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista
> Debug|x64.ActiveCfg = Windows Vista Debug|x64
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista
> Debug|x64.Build.0 = Windows Vista Debug|x64
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista
> Release|Win32.ActiveCfg = Windows Vista Release|Win32
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista
> Release|Win32.Build.0 = Windows Vista Release|Win32
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista
> Release|x64.ActiveCfg = Windows Vista Release|x64
> +		{D7411B2C-2C43-434D-9F56-E10A3D2F5BAD}.Windows Vista
> Release|x64.Build.0 = Windows Vista Release|x64
>  		{EF236371-3145-41B1-99C9-82B33E353F17}.Windows 7
> Debug|Win32.ActiveCfg = Windows 7 Debug|Win32
>  		{EF236371-3145-41B1-99C9-82B33E353F17}.Windows 7
> Debug|Win32.Build.0 = Windows 7 Debug|Win32
>  		{EF236371-3145-41B1-99C9-82B33E353F17}.Windows 7
> Debug|x64.ActiveCfg = Windows 7 Debug|x64
> --
> 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 Thu Oct 30 10:30:04 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 30 Oct 2014 10:30: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 1XjmzU-00028I-JP; Thu, 30 Oct 2014 10:30:04 +0000
Received: from mail6.bemta4.messagelabs.com ([85.158.143.247])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <Paul.Durrant@citrix.com>) id 1XjmzU-00028D-5P
	for win-pv-devel@lists.xenproject.org; Thu, 30 Oct 2014 10:30:04 +0000
Received: from [85.158.143.35] by server-3.bemta-4.messagelabs.com id
	4F/CE-02699-B2312545; Thu, 30 Oct 2014 10:30:03 +0000
X-Env-Sender: Paul.Durrant@citrix.com
X-Msg-Ref: server-6.tower-21.messagelabs.com!1414665002!13558938!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: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 6461 invoked from network); 30 Oct 2014 10:30:03 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-6.tower-21.messagelabs.com with RC4-SHA encrypted SMTP;
	30 Oct 2014 10:30:03 -0000
X-IronPort-AV: E=Sophos;i="5.07,284,1413244800"; d="scan'208";a="26370749"
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: [PATCH 0/3] Support discard/trim/unmap
Thread-Index: AQHP8qIws13v2KPd7kWQ0Xdo8ftMDpxIc4xg
Date: Thu, 30 Oct 2014 10:30:01 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD01113AA3C@AMSPEX01CL01.citrite.net>
References: <1414495644-5948-1-git-send-email-owen.smith@citrix.com>
In-Reply-To: <1414495644-5948-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 0/3] Support discard/trim/unmap
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 [mailto:owen.smith@citrix.com]
> Sent: 28 October 2014 11:27
> To: win-pv-devel@lists.xenproject.org
> Cc: Paul Durrant; Owen Smith
> Subject: [PATCH 0/3] Support discard/trim/unmap
> 
> Add an upper filter to intercept discard/trim/unmap operations, translate to
> SCSIOP_UNMAP commands and pass through storport to xenvbd. Xenvbd
> will then
> issue the correct BLKIF_OP_DISCARD operation to the backend (if
> supported).
> 
> Owen Smith (3):
>   Prepare SCSIOP_UNMAP correctly
>   Run XenVbd SDV after XenCrsh SDV
>   Add XenDisk device upper filter.
> 

Series applied. Thanks!

  Paul

>  build.py                            |    3 +-
>  src/xendisk/assert.h                |  220 ++++
>  src/xendisk/debug.h                 |   94 ++
>  src/xendisk/driver.c                |  203 ++++
>  src/xendisk/driver.h                |   68 ++
>  src/xendisk/fdo.c                   | 1862 +++++++++++++++++++++++++++++++
>  src/xendisk/fdo.h                   |   78 ++
>  src/xendisk/mutex.h                 |  113 ++
>  src/xendisk/pdo.c                   | 2079
> +++++++++++++++++++++++++++++++++++
>  src/xendisk/pdo.h                   |   90 ++
>  src/xendisk/thread.c                |  225 ++++
>  src/xendisk/thread.h                |   73 ++
>  src/xendisk/types.h                 |   53 +
>  src/xendisk/util.h                  |  222 ++++
>  src/xendisk/xendisk.rc              |   56 +
>  src/xenvbd.inf                      |   18 +
>  src/xenvbd/pdo.c                    |   69 +-
>  vs2012/package/package.vcxproj      |    3 +
>  vs2012/xendisk/xendisk.vcxproj      |   84 ++
>  vs2012/xendisk/xendisk.vcxproj.user |    8 +
>  vs2012/xenvbd.sln                   |   28 +
>  vs2013/package/package.vcxproj      |    3 +
>  vs2013/xendisk/xendisk.vcxproj      |  112 ++
>  vs2013/xendisk/xendisk.vcxproj.user |    8 +
>  vs2013/xenvbd.sln                   |   28 +
>  25 files changed, 5784 insertions(+), 16 deletions(-)
>  create mode 100644 src/xendisk/assert.h
>  create mode 100644 src/xendisk/debug.h
>  create mode 100644 src/xendisk/driver.c
>  create mode 100644 src/xendisk/driver.h
>  create mode 100644 src/xendisk/fdo.c
>  create mode 100644 src/xendisk/fdo.h
>  create mode 100644 src/xendisk/mutex.h
>  create mode 100644 src/xendisk/pdo.c
>  create mode 100644 src/xendisk/pdo.h
>  create mode 100644 src/xendisk/thread.c
>  create mode 100644 src/xendisk/thread.h
>  create mode 100644 src/xendisk/types.h
>  create mode 100644 src/xendisk/util.h
>  create mode 100644 src/xendisk/xendisk.rc
>  create mode 100644 vs2012/xendisk/xendisk.vcxproj
>  create mode 100644 vs2012/xendisk/xendisk.vcxproj.user
>  create mode 100644 vs2013/xendisk/xendisk.vcxproj
>  create mode 100644 vs2013/xendisk/xendisk.vcxproj.user
> 
> --
> 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 Thu Oct 30 10:30:04 2014
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 30 Oct 2014 10:30: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 1XjmzU-00028I-JP; Thu, 30 Oct 2014 10:30:04 +0000
Received: from mail6.bemta4.messagelabs.com ([85.158.143.247])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <Paul.Durrant@citrix.com>) id 1XjmzU-00028D-5P
	for win-pv-devel@lists.xenproject.org; Thu, 30 Oct 2014 10:30:04 +0000
Received: from [85.158.143.35] by server-3.bemta-4.messagelabs.com id
	4F/CE-02699-B2312545; Thu, 30 Oct 2014 10:30:03 +0000
X-Env-Sender: Paul.Durrant@citrix.com
X-Msg-Ref: server-6.tower-21.messagelabs.com!1414665002!13558938!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: 6.12.3; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 6461 invoked from network); 30 Oct 2014 10:30:03 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-6.tower-21.messagelabs.com with RC4-SHA encrypted SMTP;
	30 Oct 2014 10:30:03 -0000
X-IronPort-AV: E=Sophos;i="5.07,284,1413244800"; d="scan'208";a="26370749"
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: [PATCH 0/3] Support discard/trim/unmap
Thread-Index: AQHP8qIws13v2KPd7kWQ0Xdo8ftMDpxIc4xg
Date: Thu, 30 Oct 2014 10:30:01 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD01113AA3C@AMSPEX01CL01.citrite.net>
References: <1414495644-5948-1-git-send-email-owen.smith@citrix.com>
In-Reply-To: <1414495644-5948-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 0/3] Support discard/trim/unmap
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 [mailto:owen.smith@citrix.com]
> Sent: 28 October 2014 11:27
> To: win-pv-devel@lists.xenproject.org
> Cc: Paul Durrant; Owen Smith
> Subject: [PATCH 0/3] Support discard/trim/unmap
> 
> Add an upper filter to intercept discard/trim/unmap operations, translate to
> SCSIOP_UNMAP commands and pass through storport to xenvbd. Xenvbd
> will then
> issue the correct BLKIF_OP_DISCARD operation to the backend (if
> supported).
> 
> Owen Smith (3):
>   Prepare SCSIOP_UNMAP correctly
>   Run XenVbd SDV after XenCrsh SDV
>   Add XenDisk device upper filter.
> 

Series applied. Thanks!

  Paul

>  build.py                            |    3 +-
>  src/xendisk/assert.h                |  220 ++++
>  src/xendisk/debug.h                 |   94 ++
>  src/xendisk/driver.c                |  203 ++++
>  src/xendisk/driver.h                |   68 ++
>  src/xendisk/fdo.c                   | 1862 +++++++++++++++++++++++++++++++
>  src/xendisk/fdo.h                   |   78 ++
>  src/xendisk/mutex.h                 |  113 ++
>  src/xendisk/pdo.c                   | 2079
> +++++++++++++++++++++++++++++++++++
>  src/xendisk/pdo.h                   |   90 ++
>  src/xendisk/thread.c                |  225 ++++
>  src/xendisk/thread.h                |   73 ++
>  src/xendisk/types.h                 |   53 +
>  src/xendisk/util.h                  |  222 ++++
>  src/xendisk/xendisk.rc              |   56 +
>  src/xenvbd.inf                      |   18 +
>  src/xenvbd/pdo.c                    |   69 +-
>  vs2012/package/package.vcxproj      |    3 +
>  vs2012/xendisk/xendisk.vcxproj      |   84 ++
>  vs2012/xendisk/xendisk.vcxproj.user |    8 +
>  vs2012/xenvbd.sln                   |   28 +
>  vs2013/package/package.vcxproj      |    3 +
>  vs2013/xendisk/xendisk.vcxproj      |  112 ++
>  vs2013/xendisk/xendisk.vcxproj.user |    8 +
>  vs2013/xenvbd.sln                   |   28 +
>  25 files changed, 5784 insertions(+), 16 deletions(-)
>  create mode 100644 src/xendisk/assert.h
>  create mode 100644 src/xendisk/debug.h
>  create mode 100644 src/xendisk/driver.c
>  create mode 100644 src/xendisk/driver.h
>  create mode 100644 src/xendisk/fdo.c
>  create mode 100644 src/xendisk/fdo.h
>  create mode 100644 src/xendisk/mutex.h
>  create mode 100644 src/xendisk/pdo.c
>  create mode 100644 src/xendisk/pdo.h
>  create mode 100644 src/xendisk/thread.c
>  create mode 100644 src/xendisk/thread.h
>  create mode 100644 src/xendisk/types.h
>  create mode 100644 src/xendisk/util.h
>  create mode 100644 src/xendisk/xendisk.rc
>  create mode 100644 vs2012/xendisk/xendisk.vcxproj
>  create mode 100644 vs2012/xendisk/xendisk.vcxproj.user
>  create mode 100644 vs2013/xendisk/xendisk.vcxproj
>  create mode 100644 vs2013/xendisk/xendisk.vcxproj.user
> 
> --
> 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

