From win-pv-devel-bounces@lists.xenproject.org Tue Nov 01 19:19:21 2022
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 01 Nov 2022 19:19:21 +0000
Received: from list by lists.xenproject.org with outflank-mailman.435208.688339 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1opwn8-0001tW-08; Tue, 01 Nov 2022 19:19:18 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 435208.688339; Tue, 01 Nov 2022 19:19:17 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1opwn7-0001tP-TU; Tue, 01 Nov 2022 19:19:17 +0000
Received: by outflank-mailman (input) for mailman id 435208;
 Tue, 01 Nov 2022 19:19:17 +0000
Received: from winpvdrvbuild.xenproject.org ([162.242.160.44])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <paul.durrant@xenproject.org>) id 1opwn7-0001tJ-Ad
 for win-pv-devel@lists.xenproject.org; Tue, 01 Nov 2022 19:19:17 +0000
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/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: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Date: Tue, 1 Nov 2022 19:19:09 +0000 (UTC)
From: paul.durrant@xenproject.org
To: win-pv-devel@lists.xenproject.org
Message-ID: <18889432.5.1667330350315.JavaMail.WINPVDRVBUILD$@winpvdrvbuild>
Subject: XENVKBD-master - Build #33 - Successful
MIME-Version: 1.0
Content-Type: multipart/mixed; 
	boundary="----=_Part_4_24713654.1667330349752"
X-Jenkins-Job: XENVKBD-master
X-Jenkins-Result: SUCCESS


------=_Part_4_24713654.1667330349752
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit

The build system has completed build #33.

Check console output at https://winpvdrvbuild.xenproject.org:8080/job/XENVKBD-master/33/console to view the results.
------=_Part_4_24713654.1667330349752--


From win-pv-devel-bounces@lists.xenproject.org Tue Nov 01 21:34:13 2022
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 01 Nov 2022 21:34:13 +0000
Received: from list by lists.xenproject.org with outflank-mailman.435245.688376 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1opytf-0003Yi-3z; Tue, 01 Nov 2022 21:34:11 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 435245.688376; Tue, 01 Nov 2022 21:34:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1opytf-0003Ya-14; Tue, 01 Nov 2022 21:34:11 +0000
Received: by outflank-mailman (input) for mailman id 435245;
 Tue, 01 Nov 2022 21:34:10 +0000
Received: from winpvdrvbuild.xenproject.org ([162.242.160.44])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <paul.durrant@xenproject.org>) id 1opytd-0003YU-W5
 for win-pv-devel@lists.xenproject.org; Tue, 01 Nov 2022 21:34:10 +0000
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/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: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Date: Tue, 1 Nov 2022 21:34:01 +0000 (UTC)
From: paul.durrant@xenproject.org
To: win-pv-devel@lists.xenproject.org
Message-ID: <4519154.7.1667338442804.JavaMail.WINPVDRVBUILD$@winpvdrvbuild>
Subject: XENIFACE-master - Build #113 - Successful
MIME-Version: 1.0
Content-Type: multipart/mixed; 
	boundary="----=_Part_6_30788621.1667338442585"
X-Jenkins-Job: XENIFACE-master
X-Jenkins-Result: SUCCESS


------=_Part_6_30788621.1667338442585
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit

The build system has completed build #113.

Check console output at https://winpvdrvbuild.xenproject.org:8080/job/XENIFACE-master/113/console to view the results.
------=_Part_6_30788621.1667338442585--


From win-pv-devel-bounces@lists.xenproject.org Tue Nov 01 23:42:55 2022
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 01 Nov 2022 23:42:55 +0000
Received: from list by lists.xenproject.org with outflank-mailman.435310.688421 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1oq0uD-0004iK-70; Tue, 01 Nov 2022 23:42:53 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 435310.688421; Tue, 01 Nov 2022 23:42:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1oq0uD-0004iD-3M; Tue, 01 Nov 2022 23:42:53 +0000
Received: by outflank-mailman (input) for mailman id 435310;
 Tue, 01 Nov 2022 23:42:51 +0000
Received: from winpvdrvbuild.xenproject.org ([162.242.160.44])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <paul.durrant@xenproject.org>) id 1oq0uB-0004i7-M8
 for win-pv-devel@lists.xenproject.org; Tue, 01 Nov 2022 23:42:51 +0000
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/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: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Date: Tue, 1 Nov 2022 23:42:43 +0000 (UTC)
From: paul.durrant@xenproject.org
To: win-pv-devel@lists.xenproject.org
Message-ID: <30481844.9.1667346164323.JavaMail.WINPVDRVBUILD$@winpvdrvbuild>
Subject: XENNET-master - Build #122 - Successful
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="----=_Part_8_8755171.1667346163995"
X-Jenkins-Job: XENNET-master
X-Jenkins-Result: SUCCESS


------=_Part_8_8755171.1667346163995
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit

The build system has completed build #122.

Check console output at https://winpvdrvbuild.xenproject.org:8080/job/XENNET-master/122/console to view the results.
------=_Part_8_8755171.1667346163995--


From win-pv-devel-bounces@lists.xenproject.org Wed Nov 02 01:13:48 2022
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 02 Nov 2022 01:13:48 +0000
Received: from list by lists.xenproject.org with outflank-mailman.435423.688786 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1oq2KA-000573-GB; Wed, 02 Nov 2022 01:13:46 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 435423.688786; Wed, 02 Nov 2022 01:13:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1oq2KA-00056w-DW; Wed, 02 Nov 2022 01:13:46 +0000
Received: by outflank-mailman (input) for mailman id 435423;
 Wed, 02 Nov 2022 01:13:45 +0000
Received: from winpvdrvbuild.xenproject.org ([162.242.160.44])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <paul.durrant@xenproject.org>) id 1oq2K9-00056q-5B
 for win-pv-devel@lists.xenproject.org; Wed, 02 Nov 2022 01:13:45 +0000
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/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: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Date: Wed, 2 Nov 2022 01:13:36 +0000 (UTC)
From: paul.durrant@xenproject.org
To: win-pv-devel@lists.xenproject.org
Message-ID: <22663683.11.1667351617717.JavaMail.WINPVDRVBUILD$@winpvdrvbuild>
Subject: XENHID-master - Build #31 - Successful
MIME-Version: 1.0
Content-Type: multipart/mixed; 
	boundary="----=_Part_10_33405945.1667351617232"
X-Jenkins-Job: XENHID-master
X-Jenkins-Result: SUCCESS


------=_Part_10_33405945.1667351617232
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit

The build system has completed build #31.

Check console output at https://winpvdrvbuild.xenproject.org:8080/job/XENHID-master/31/console to view the results.
------=_Part_10_33405945.1667351617232--


From win-pv-devel-bounces@lists.xenproject.org Wed Nov 02 03:21:55 2022
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 02 Nov 2022 03:21:55 +0000
Received: from list by lists.xenproject.org with outflank-mailman.435443.688812 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1oq4K9-0005WC-LL; Wed, 02 Nov 2022 03:21:53 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 435443.688812; Wed, 02 Nov 2022 03:21:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1oq4K9-0005W4-If; Wed, 02 Nov 2022 03:21:53 +0000
Received: by outflank-mailman (input) for mailman id 435443;
 Wed, 02 Nov 2022 03:21:52 +0000
Received: from winpvdrvbuild.xenproject.org ([162.242.160.44])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <paul.durrant@xenproject.org>) id 1oq4K8-0005Vy-37
 for win-pv-devel@lists.xenproject.org; Wed, 02 Nov 2022 03:21:52 +0000
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/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: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Date: Wed, 2 Nov 2022 03:21:44 +0000 (UTC)
From: paul.durrant@xenproject.org
To: win-pv-devel@lists.xenproject.org
Message-ID: <15889585.13.1667359304439.JavaMail.WINPVDRVBUILD$@winpvdrvbuild>
Subject: XENCONS-master - Build #39 - Successful
MIME-Version: 1.0
Content-Type: multipart/mixed; 
	boundary="----=_Part_12_10368384.1667359304205"
X-Jenkins-Job: XENCONS-master
X-Jenkins-Result: SUCCESS


------=_Part_12_10368384.1667359304205
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit

The build system has completed build #39.

Check console output at https://winpvdrvbuild.xenproject.org:8080/job/XENCONS-master/39/console to view the results.
------=_Part_12_10368384.1667359304205--


From win-pv-devel-bounces@lists.xenproject.org Wed Nov 02 03:53:19 2022
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 02 Nov 2022 03:53:19 +0000
Received: from list by lists.xenproject.org with outflank-mailman.435451.688815 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1oq4oW-0000pN-SU; Wed, 02 Nov 2022 03:53:16 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 435451.688815; Wed, 02 Nov 2022 03:53:16 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1oq4oW-0000pG-Pq; Wed, 02 Nov 2022 03:53:16 +0000
Received: by outflank-mailman (input) for mailman id 435451;
 Wed, 02 Nov 2022 03:53:16 +0000
Received: from winpvdrvbuild.xenproject.org ([162.242.160.44])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <paul.durrant@xenproject.org>) id 1oq4oW-0000pA-10
 for win-pv-devel@lists.xenproject.org; Wed, 02 Nov 2022 03:53:16 +0000
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/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: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Date: Wed, 2 Nov 2022 03:53:08 +0000 (UTC)
From: paul.durrant@xenproject.org
To: win-pv-devel@lists.xenproject.org
Message-ID: <21013754.15.1667361188346.JavaMail.WINPVDRVBUILD$@winpvdrvbuild>
Subject: XENVIF-master - Build #200 - Successful
MIME-Version: 1.0
Content-Type: multipart/mixed; 
	boundary="----=_Part_14_30554592.1667361188190"
X-Jenkins-Job: XENVIF-master
X-Jenkins-Result: SUCCESS


------=_Part_14_30554592.1667361188190
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit

The build system has completed build #200.

Check console output at https://winpvdrvbuild.xenproject.org:8080/job/XENVIF-master/200/console to view the results.
------=_Part_14_30554592.1667361188190--


From win-pv-devel-bounces@lists.xenproject.org Wed Nov 02 04:31:45 2022
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 02 Nov 2022 04:31:45 +0000
Received: from list by lists.xenproject.org with outflank-mailman.435459.688819 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1oq5Pj-0005Sn-GD; Wed, 02 Nov 2022 04:31:43 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 435459.688819; Wed, 02 Nov 2022 04:31:43 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1oq5Pj-0005Sj-Dd; Wed, 02 Nov 2022 04:31:43 +0000
Received: by outflank-mailman (input) for mailman id 435459;
 Wed, 02 Nov 2022 04:31:42 +0000
Received: from winpvdrvbuild.xenproject.org ([162.242.160.44])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <paul.durrant@xenproject.org>) id 1oq5Pi-0005Ri-2T
 for win-pv-devel@lists.xenproject.org; Wed, 02 Nov 2022 04:31:42 +0000
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/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: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Date: Wed, 2 Nov 2022 04:31:34 +0000 (UTC)
From: paul.durrant@xenproject.org
To: win-pv-devel@lists.xenproject.org
Message-ID: <1737864.17.1667363494332.JavaMail.WINPVDRVBUILD$@winpvdrvbuild>
Subject: XENVBD-master - Build #160 - Successful
MIME-Version: 1.0
Content-Type: multipart/mixed; 
	boundary="----=_Part_16_7046458.1667363494254"
X-Jenkins-Job: XENVBD-master
X-Jenkins-Result: SUCCESS


------=_Part_16_7046458.1667363494254
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit

The build system has completed build #160.

Check console output at https://winpvdrvbuild.xenproject.org:8080/job/XENVBD-master/160/console to view the results.
------=_Part_16_7046458.1667363494254--


From win-pv-devel-bounces@lists.xenproject.org Wed Nov 02 05:03:13 2022
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 02 Nov 2022 05:03:13 +0000
Received: from list by lists.xenproject.org with outflank-mailman.435467.688823 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1oq5uA-0001VU-Ng; Wed, 02 Nov 2022 05:03:10 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 435467.688823; Wed, 02 Nov 2022 05:03:10 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1oq5uA-0001VN-Kz; Wed, 02 Nov 2022 05:03:10 +0000
Received: by outflank-mailman (input) for mailman id 435467;
 Wed, 02 Nov 2022 05:03:09 +0000
Received: from winpvdrvbuild.xenproject.org ([162.242.160.44])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <paul.durrant@xenproject.org>) id 1oq5u9-0001VH-7X
 for win-pv-devel@lists.xenproject.org; Wed, 02 Nov 2022 05:03:09 +0000
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/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: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Date: Wed, 2 Nov 2022 05:03:01 +0000 (UTC)
From: paul.durrant@xenproject.org
To: win-pv-devel@lists.xenproject.org
Message-ID: <3158028.19.1667365381442.JavaMail.WINPVDRVBUILD$@winpvdrvbuild>
Subject: XENIFACE-master - Build #114 - Successful
MIME-Version: 1.0
Content-Type: multipart/mixed; 
	boundary="----=_Part_18_30382664.1667365381286"
X-Jenkins-Job: XENIFACE-master
X-Jenkins-Result: SUCCESS


------=_Part_18_30382664.1667365381286
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit

The build system has completed build #114.

Check console output at https://winpvdrvbuild.xenproject.org:8080/job/XENIFACE-master/114/console to view the results.
------=_Part_18_30382664.1667365381286--


From win-pv-devel-bounces@lists.xenproject.org Wed Nov 02 05:40:26 2022
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 02 Nov 2022 05:40:26 +0000
Received: from list by lists.xenproject.org with outflank-mailman.435483.688838 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1oq6UC-0006yv-Nz; Wed, 02 Nov 2022 05:40:24 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 435483.688838; Wed, 02 Nov 2022 05:40:24 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1oq6UC-0006yo-LQ; Wed, 02 Nov 2022 05:40:24 +0000
Received: by outflank-mailman (input) for mailman id 435483;
 Wed, 02 Nov 2022 05:40:23 +0000
Received: from winpvdrvbuild.xenproject.org ([162.242.160.44])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <paul.durrant@xenproject.org>) id 1oq6UB-0006yi-EF
 for win-pv-devel@lists.xenproject.org; Wed, 02 Nov 2022 05:40:23 +0000
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/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: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Date: Wed, 2 Nov 2022 05:40:15 +0000 (UTC)
From: paul.durrant@xenproject.org
To: win-pv-devel@lists.xenproject.org
Message-ID: <27340419.21.1667367615600.JavaMail.WINPVDRVBUILD$@winpvdrvbuild>
Subject: XENVBD-master - Build #161 - Successful
MIME-Version: 1.0
Content-Type: multipart/mixed; 
	boundary="----=_Part_20_4243354.1667367615490"
X-Jenkins-Job: XENVBD-master
X-Jenkins-Result: SUCCESS


------=_Part_20_4243354.1667367615490
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit

The build system has completed build #161.

Check console output at https://winpvdrvbuild.xenproject.org:8080/job/XENVBD-master/161/console to view the results.
------=_Part_20_4243354.1667367615490--


From win-pv-devel-bounces@lists.xenproject.org Tue Nov 08 10:41:42 2022
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 08 Nov 2022 10:41:42 +0000
Received: from list by lists.xenproject.org with outflank-mailman.439857.693925 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1osM31-0007d1-Om; Tue, 08 Nov 2022 10:41:39 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 439857.693925; Tue, 08 Nov 2022 10:41:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1osM31-0007cu-M7; Tue, 08 Nov 2022 10:41:39 +0000
Received: by outflank-mailman (input) for mailman id 439857;
 Tue, 08 Nov 2022 10:41:39 +0000
Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254]
 helo=se1-gles-sth1.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=h5nM=3I=citrix.com=prvs=30438a45d=martin.harvey@srs-se1.protection.inumbo.net>)
 id 1osM31-0007cX-AH
 for win-pv-devel@lists.xenproject.org; Tue, 08 Nov 2022 10:41:39 +0000
Received: from esa1.hc3370-68.iphmx.com (esa1.hc3370-68.iphmx.com
 [216.71.145.142]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS
 id e9af94cc-5f51-11ed-91b5-6bf2151ebd3b;
 Tue, 08 Nov 2022 11:41:37 +0100 (CET)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/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: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: e9af94cc-5f51-11ed-91b5-6bf2151ebd3b
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1667904097;
  h=from:to:cc:subject:date:message-id:mime-version:
   content-transfer-encoding;
  bh=XgB+y+sCo7uXUQ+Y4S4tIaAovqQHUKe+5uJHCTklNY0=;
  b=YMRosN3m8HR4z28AJwSxmagda87QN2y7eEVrL8M1w80si6B/UKOD/shK
   EP8kVFlzPC3wdRGgjLZ6PacrdWUrd4m6uhPOMsmuHh/UTzVdnVJmxULJG
   5vtiH25aNkPz0oV/7vOWC7ithjFIOpKE1g1G5+6h1Tfqgx111f7GWQbJh
   g=;
Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
X-SBRS: None
X-MesageID: 84805277
X-Ironport-Server: esa1.hc3370-68.iphmx.com
X-Remote-IP: 162.221.156.83
X-Policy: $RELAYED
IronPort-Data: A9a23:kvfNo6B4Q1dSWBVW/3Hjw5YqxClBgxIJ4kV8jS/XYbTApDN30TdWy
 WQbWG7QM/yCMWbxLtwlad+2oRgE7cPdmNdlQQY4rX1jcSlH+JHPbTi7wuUcHAvJd5GeExg3h
 yk6QoOdRCzhZiaE/n9BCpC48T8nk/nNHuCnYAL9EngZbRd+Tys8gg5Ulec8g4p56fC0GArIs
 t7pyyHlEAbNNwVcbyRFtcpvlDs15K6o4WpA7gRnDRx2lAS2e0c9Xcp3yZ6ZdxMUcqEMdsamS
 uDKyq2O/2+x13/B3fv8z94X2mVTKlLjFVDmZkh+AsBOsTAbzsAG6Y4pNeJ0VKtio27hc+ada
 jl6ncfYpQ8BZsUgkQmGOvVSO3kW0aZuoNcrLZUj2CA6IoKvn3bEmp1T4E8K0YIw3PYqX11jq
 MMkDBcCb0m539qnnL+hRbw57igjBJGD0II3v3hhyXfSDOo8QICFSKLPjTNa9G5u3IYUR6+YP
 pdHL2o0BPjDS0Qn1lM/DZskgOauwHn2aSNVuXqepLYt4niVxwt0uFToGIqJKoTXH5oK9qqej
 nmcxEryXU4DCO3B6ifZ/Wvvr+XsjTyuDer+E5Xnr6U30TV/3Fc7FxwQEEOl5PW0lEO6c9ZeM
 FAPvDojq7Ao806mRcW7WAe3yENopTZFBYAWSbdjrljQlOyEuG51G1ToUBZneIF4iOJregAO8
 VCIxumxPS0zvaeaHCf1GqivkRu+Pi0cLGknbCACTBcY79SLnLzfni4jXf44Tvfr04Sd9SXYh
 mnT8XNg3+l7Ydsjjf3TwLzRv967SnElpCYR7x6fYG+q5xgRiGWNN93xsgizARqtwe+kori9U
 JoswZb2AAMmV8vleMmxrAIlTdmUCw6tamG0vLKWN8BJGvTE0yfLkXpsyD9/Plx1Fc0PZCXkZ
 kTe0SsIusEMbCf0NPcvOdzhYyjP8UQHPY27Ps04k/IUOsQhHON51H0GibGsM5DFzxF3zPBX1
 WazesewF3cKYZmLPxLvL9rwENYDmEgD+I8kbcuinkz6jeLHPCT9pHVsGALmU93VJZis+G39m
 +uz/ePTo/mDeIUSuhXqzLM=
IronPort-HdrOrdr: A9a23:x/jR1qspAkKDYsUABX0tFM//7skDetV00zEX/kB9WHVpmszxra
 6TdZMgpHvJYVcqKRcdcL+7WJVoLUmxyXcX2/h1AV7BZniEhILAFugLhuGO/9SJIVyYygc378
 ZdmsZFZ+EYdWIK7/rH3A==
X-IronPort-AV: E=Sophos;i="5.96,147,1665460800"; 
   d="scan'208";a="84805277"
From: Martin Harvey <Martin.Harvey@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
CC: Martin Harvey <Martin.Harvey@citrix.com>, Martin Harvey
	<martin.harvey@citrix.com>
Subject: [PATCH] Correct return codes during racy destruction.
Date: Tue, 8 Nov 2022 10:41:16 +0000
Message-ID: <20221108104116.1294-1-Martin.Harvey@citrix.com>
X-Mailer: git-send-email 2.25.0.windows.1
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

Signed-off-by: Martin Harvey <martin.harvey@citrix.com>
---
 src/xenbus/driver.c  | 12 ++++++++++++
 src/xenbus/fdo.c     |  2 +-
 src/xenbus/pdo.c     |  2 +-
 src/xenfilt/driver.c | 12 ++++++++++++
 4 files changed, 26 insertions(+), 2 deletions(-)

diff --git a/src/xenbus/driver.c b/src/xenbus/driver.c
index e07de55..167dd22 100644
--- a/src/xenbus/driver.c
+++ b/src/xenbus/driver.c
@@ -760,8 +760,20 @@ DriverDispatch(
     ASSERT3P(Dx->DeviceObject, ==, DeviceObject);
 
     if (Dx->DevicePnpState == Deleted) {
+        PIO_STACK_LOCATION StackLocation = IoGetCurrentIrpStackLocation(Irp);
+        UCHAR MajorFunction = StackLocation->MajorFunction;
+        UCHAR MinorFunction = StackLocation->MinorFunction;
         status = STATUS_NO_SUCH_DEVICE;
 
+        if (MajorFunction == IRP_MJ_PNP) {
+            if ((MinorFunction == IRP_MN_SURPRISE_REMOVAL) ||
+               (MinorFunction == IRP_MN_REMOVE_DEVICE)) {
+                /* FDO and PDO deletions can block after being marked deleted, but before IoDeleteDevice */
+                status = STATUS_SUCCESS;
+            }
+            BUG_ON((MinorFunction == IRP_MN_CANCEL_REMOVE_DEVICE) || (MinorFunction == IRP_MN_CANCEL_STOP_DEVICE));
+        }
+
         Irp->IoStatus.Status = status;
         IoCompleteRequest(Irp, IO_NO_INCREMENT);
         goto done;
diff --git a/src/xenbus/fdo.c b/src/xenbus/fdo.c
index d08c518..4242f07 100644
--- a/src/xenbus/fdo.c
+++ b/src/xenbus/fdo.c
@@ -4708,7 +4708,7 @@ FdoDispatchPnp(
           MinorFunction, 
           PnpMinorFunctionName(MinorFunction)); 
 
-    switch (StackLocation->MinorFunction) {
+    switch (MinorFunction) {
     case IRP_MN_FILTER_RESOURCE_REQUIREMENTS:
         status = FdoFilterResourceRequirements(Fdo, Irp);
         break;
diff --git a/src/xenbus/pdo.c b/src/xenbus/pdo.c
index efd29dc..fe88d5d 100644
--- a/src/xenbus/pdo.c
+++ b/src/xenbus/pdo.c
@@ -1609,7 +1609,7 @@ PdoDispatchPnp(
           MinorFunction, 
           PnpMinorFunctionName(MinorFunction));
 
-    switch (StackLocation->MinorFunction) {
+    switch (MinorFunction) {
     case IRP_MN_START_DEVICE:
         status = PdoStartDevice(Pdo, Irp);
         break;
diff --git a/src/xenfilt/driver.c b/src/xenfilt/driver.c
index 8a8396e..894fd24 100644
--- a/src/xenfilt/driver.c
+++ b/src/xenfilt/driver.c
@@ -862,8 +862,20 @@ DriverDispatch(
     ASSERT3P(Dx->DeviceObject, ==, DeviceObject);
 
     if (Dx->DevicePnpState == Deleted) {
+        PIO_STACK_LOCATION StackLocation = IoGetCurrentIrpStackLocation(Irp);
+        UCHAR MajorFunction = StackLocation->MajorFunction;
+        UCHAR MinorFunction = StackLocation->MinorFunction;
         status = STATUS_NO_SUCH_DEVICE;
 
+        if (MajorFunction == IRP_MJ_PNP) {
+            if ((MinorFunction == IRP_MN_SURPRISE_REMOVAL) ||
+               (MinorFunction == IRP_MN_REMOVE_DEVICE)) {
+                /* FDO and PDO deletions can block after being marked deleted, but before IoDeleteDevice */
+                status = STATUS_SUCCESS;
+            }
+            BUG_ON((MinorFunction == IRP_MN_CANCEL_REMOVE_DEVICE) || (MinorFunction == IRP_MN_CANCEL_STOP_DEVICE));
+        }
+
         Irp->IoStatus.Status = status;
         IoCompleteRequest(Irp, IO_NO_INCREMENT);
         goto done;
-- 
2.25.0.windows.1



From win-pv-devel-bounces@lists.xenproject.org Tue Nov 08 10:44:03 2022
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 08 Nov 2022 10:44:03 +0000
Received: from list by lists.xenproject.org with outflank-mailman.439864.693930 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1osM5K-0007kQ-Vk; Tue, 08 Nov 2022 10:44:02 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 439864.693930; Tue, 08 Nov 2022 10:44:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1osM5K-0007kJ-Sv; Tue, 08 Nov 2022 10:44:02 +0000
Received: by outflank-mailman (input) for mailman id 439864;
 Tue, 08 Nov 2022 10:44:02 +0000
Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254]
 helo=se1-gles-sth1.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=h5nM=3I=citrix.com=prvs=30438a45d=martin.harvey@srs-se1.protection.inumbo.net>)
 id 1osM5K-0007kD-4s
 for win-pv-devel@lists.xenproject.org; Tue, 08 Nov 2022 10:44:02 +0000
Received: from esa3.hc3370-68.iphmx.com (esa3.hc3370-68.iphmx.com
 [216.71.145.155]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS
 id 406f5455-5f52-11ed-91b5-6bf2151ebd3b;
 Tue, 08 Nov 2022 11:44:00 +0100 (CET)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/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: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 406f5455-5f52-11ed-91b5-6bf2151ebd3b
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1667904240;
  h=from:to:cc:subject:date:message-id:mime-version:
   content-transfer-encoding;
  bh=b4x3nI2ZbgvxVuYeoMtQTuSSfRahiv3UjdfmSAgM2gs=;
  b=iDc0i9My/fWN5y+ospH4xlQDqGD+MsM1oTjXUHoJTX1CXBk0Foeq4NBJ
   GE+lXBm65iwZUdEVh+Y8Ly9aok7wREjl9ZzNV49+KRHYAZAn6InVJDB/l
   LMH9EqAUz6FA455mKDG6OlDTjQ07LnDv+m4hUHhTPbB+SWCek3IB3oeii
   o=;
Authentication-Results: esa3.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
X-SBRS: None
X-MesageID: 84375496
X-Ironport-Server: esa3.hc3370-68.iphmx.com
X-Remote-IP: 162.221.156.83
X-Policy: $RELAYED
IronPort-Data: A9a23:JztVqK29G5YCyPeLmPbD5Ytxkn2cJEfYwER7XKvMYLTBsI5bpzMPx
 2dNWm+AOv2LYzH3c9kgPoq09R8DvJ6ByddmSlNppC1hF35El5HIVI+TRqvS04F+DeWYFR46s
 J9OAjXkBJppJpMJjk71atANlVEliefTAOK5ULSfUsxIbVcMYD87jh5+kPIOjIdtgNyoayuAo
 tq3qMDEULOf82cc3lk8tuTS9nuDgNyo4GlC5wVmNagS1LPjvyJ94Kw3dPnZw0TQGuG4LsbiL
 87fwbew+H/u/htFIrtJRZ6iLyXm6paLVeS/oiI+t5qK23CulQRrukoPD9IOaF8/ttm8t4sZJ
 OOhF3CHYVxB0qXkwIzxWvTDes10FfUuFLTveRBTvSEPpqFvnrSFL/hGVSkL0YMkFulfAUxlx
 eA8ATY0MxWS3ei0m42RWLRQr5F2RCXrFNt3VnBIyDjYCbAtQIzZQrWM7thdtNsyrpkQR7CEP
 ZNfMGcxKkSbC/FMEg5/5JYWme6ymnj5NT1RskyYtII84nTJzRw327/oWDbQUozWHpoIwhfGz
 o7A11rXDCEfNO208DiUqi+LgvGXkyWlaLtHQdVU8dY12QbOlwT/EiY+Slq95OGnz0KzRd9bA
 0gV4TY167g/8lSxSdvwVAH+p2SL1iPwQPIJTbd8slvUjPOJvUDJXQDoUwKtdvQmmeQGWRgD0
 GbUmsKzDz40j5eHFE60o+L8QSyJBQAZKmoLZCkhRAQD4sX+rIxbsi8jXuqPA4bu0ISrRGiYL
 ySi6XFn2u5N1ZJjO7CTpwivvt66mnTeoufZDC3zV3nt0A52bZXNi2eAuQmCtqYowGp0ozC8U
 Jk4dyq2tr5m4XKlznblrAAx8FaBtp643MX02wIHInXY323FFr7KVdk4DMtCDEloKN0YXjTif
 VXevwhcjLcKYiX1PfMpOtrpUZp6pUQFKTgCfqmKBuein7ArLFPXlM2QTRL4M5/RfLgEzvhkZ
 MbznTeEBncGE6V3pAdatM9EuYLGB0kWmwvueHwM50/+gOLDOCbMEe1t3ZnnRrlR0Z5oaT79q
 753X/ZmAT0GOAEiSkE7KbIuEG0=
IronPort-HdrOrdr: A9a23:xuQ6KKtJHknz52f68RauVy3y7skDfNV00zEX/kB9WHVpmszxra
 +TdZMgpHrJYVcqKRYdcL+7WZVoLUmwyXcX2/hyAV7BZmnbUQKTRekIh7cKqweQfxEWndQy6U
 4PScRD4aXLfDtHsfo=
X-IronPort-AV: E=Sophos;i="5.96,147,1665460800"; 
   d="scan'208";a="84375496"
From: Martin Harvey <Martin.Harvey@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
CC: Martin Harvey <Martin.Harvey@citrix.com>, Martin Harvey
	<martin.harvey@citrix.com>
Subject: [PATCH] Correct return codes during racy destruction.
Date: Tue, 8 Nov 2022 10:43:46 +0000
Message-ID: <20221108104346.648-1-Martin.Harvey@citrix.com>
X-Mailer: git-send-email 2.25.0.windows.1
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

Signed-off-by: Martin Harvey <martin.harvey@citrix.com>
---
 src/xencons/driver.c | 12 ++++++++++++
 src/xencons/fdo.c    |  2 +-
 src/xencons/pdo.c    |  2 +-
 3 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/src/xencons/driver.c b/src/xencons/driver.c
index 5a4d1d3..2cec799 100644
--- a/src/xencons/driver.c
+++ b/src/xencons/driver.c
@@ -194,8 +194,20 @@ Dispatch(
     ASSERT3P(Dx->DeviceObject, ==, DeviceObject);
 
     if (Dx->DevicePnpState == Deleted) {
+        PIO_STACK_LOCATION StackLocation = IoGetCurrentIrpStackLocation(Irp);
+        UCHAR MajorFunction = StackLocation->MajorFunction;
+        UCHAR MinorFunction = StackLocation->MinorFunction;
         status = STATUS_NO_SUCH_DEVICE;
 
+        if (MajorFunction == IRP_MJ_PNP) {
+            if ((MinorFunction == IRP_MN_SURPRISE_REMOVAL) ||
+               (MinorFunction == IRP_MN_REMOVE_DEVICE)) {
+                /* FDO and PDO deletions can block after being marked deleted, but before IoDeleteDevice */
+                status = STATUS_SUCCESS;
+            }
+            BUG_ON((MinorFunction == IRP_MN_CANCEL_REMOVE_DEVICE) || (MinorFunction == IRP_MN_CANCEL_STOP_DEVICE));
+        }
+
         Irp->IoStatus.Status = status;
         IoCompleteRequest(Irp, IO_NO_INCREMENT);
         goto done;
diff --git a/src/xencons/fdo.c b/src/xencons/fdo.c
index 9904249..5640db9 100644
--- a/src/xencons/fdo.c
+++ b/src/xencons/fdo.c
@@ -2021,7 +2021,7 @@ FdoDispatchPnp(
           MinorFunction,
           PnpMinorFunctionName(MinorFunction));
 
-    switch (StackLocation->MinorFunction) {
+    switch (MinorFunction) {
     case IRP_MN_START_DEVICE:
         status = FdoStartDevice(Fdo, Irp);
         break;
diff --git a/src/xencons/pdo.c b/src/xencons/pdo.c
index d7db389..c9c313d 100644
--- a/src/xencons/pdo.c
+++ b/src/xencons/pdo.c
@@ -1271,7 +1271,7 @@ PdoDispatchPnp(
           MinorFunction,
           PnpMinorFunctionName(MinorFunction));
 
-    switch (StackLocation->MinorFunction) {
+    switch (MinorFunction) {
     case IRP_MN_START_DEVICE:
         status = PdoStartDevice(Pdo, Irp);
         break;
-- 
2.25.0.windows.1



From win-pv-devel-bounces@lists.xenproject.org Tue Nov 08 10:45:30 2022
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 08 Nov 2022 10:45:30 +0000
Received: from list by lists.xenproject.org with outflank-mailman.439874.693934 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1osM6k-00083K-4M; Tue, 08 Nov 2022 10:45:30 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 439874.693934; Tue, 08 Nov 2022 10:45:30 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1osM6k-00083D-1a; Tue, 08 Nov 2022 10:45:30 +0000
Received: by outflank-mailman (input) for mailman id 439874;
 Tue, 08 Nov 2022 10:45:29 +0000
Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254]
 helo=se1-gles-sth1.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=h5nM=3I=citrix.com=prvs=30438a45d=martin.harvey@srs-se1.protection.inumbo.net>)
 id 1osM6j-000837-K3
 for win-pv-devel@lists.xenproject.org; Tue, 08 Nov 2022 10:45:29 +0000
Received: from esa6.hc3370-68.iphmx.com (esa6.hc3370-68.iphmx.com
 [216.71.155.175]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS
 id 742c7d67-5f52-11ed-91b5-6bf2151ebd3b;
 Tue, 08 Nov 2022 11:45:28 +0100 (CET)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/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: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 742c7d67-5f52-11ed-91b5-6bf2151ebd3b
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1667904328;
  h=from:to:cc:subject:date:message-id:mime-version:
   content-transfer-encoding;
  bh=rJD8kMEYFf+gDrEgKfJUVwpD+eC5Qxe1s9/iLg734Jk=;
  b=FgBhdWiknXIoU8Vi5yj/7r1UHH7cyU4Jkfm/4Ev/oMzsqPk8qNugGG1R
   meW14rRDrZEis1DYRLo8z5dLVymy5jbLWXyv1buMsqVTZk4TsRQJuxzsS
   kPebpoqPs2XpOUUdzLE69M+H0ofLsTczKl/ZlMposNNeT5PiCkjIqL8oS
   o=;
Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
X-SBRS: None
X-MesageID: 83973974
X-Ironport-Server: esa6.hc3370-68.iphmx.com
X-Remote-IP: 162.221.156.83
X-Policy: $RELAYED
IronPort-Data: A9a23:EaUGv69pSCBX6O81GqD2DrUD2H6TJUtcMsCJ2f8bNWPcYEJGY0x3z
 zQbDT+BO67ZNDT2c993aYnj/RwEsZPXzIcyHQZkrC48E34SpcT7XtnIdU2Y0wF+jCHgZBk+s
 5hBMImowOQcFCK0SsKFa+C5xZVE/fjUAOG6UKucYHsZqTZMEE8JkQhkl/MynrlmiN24BxLlk
 d7pqojUNUTNNwRcawr40Ire7kIx1BjOkGlA5AZnPKgb5Aa2e0Q9V/rzG4ngdxMUfaEMdgKKb
 76r5K20+Grf4yAsBruN+losWhRXKlJ6FVHmZkt+A8BOsDAbzsAB+v9T2M4nQVVWk120c+VZk
 72hg3ASpTABZcUgkMxFO/VR/roX0aduoNcrKlDn2SCfItGvn9IBDJyCAWlvVbD09NqbDklCx
 8wmIxkgfCyAhvuY7LPiUfI314caeZyD0IM34hmMzBncBPciB5vCX7/L9ZlT2zJYasJmRKiEI
 ZBDMHw2MUqGM0Yn1lQ/UfrSmM+tj2PjcjseqFuPu6cmy2PS0BZwwP7mN9+9ltmiFZ4EwR3J+
 T6uE2LRUwEbGP6yyCG++DH3qeXwuwbgAYgtLejtnhJtqALKnTFCYPEMbnOkoP/8klD7V99BJ
 kg8/is1sbN05EGtVsP6XRCzvDiDpBF0ZjZLO7RkskfXkPOSulvHQDhfJtJcVDA4nMMEdQIh/
 3Kbo9DoHBJDseSOUinMtY7B+FteJhMpBWMFYCYFSy4M7N/ivJw/g3rzczpzLEKmpoarQG+tm
 lhmuAB73uxO1pBTi81X6Hid21qRSo71ohnZD+k9dkas9UtHaYGsfOREAnCLvK8bfO51orRs1
 UXoevRyDshUU/lhdwTXGo3h+Y1FAN7UWAAweXY1Q/EcG82FohZOvel4uVmS3ntBPMceYiPOa
 0TOow5X75I7FCL0M/AnP9zoU5xwk/iI+THZuhf8N4QmX3SMXFXfoHEGibC4gwgBb3TAYYlgY
 MzGIK5A/F4RCLh9zSreegvu+eZD+83/rEuNLa3GI+OPiuPPPCPJEe5dajNjrIkRtcu5nekcy
 P4HX+Pi9vmVeLSWjvX/mWLLEW03EA==
IronPort-HdrOrdr: A9a23:Jebo3a8rTGLfE8WK5R1uk+Ezdb1zdoMgy1knxilNoENuH/Bwxv
 rFoB1E73TJYW4qKRcdcKO7SdC9qBLnhOlICOwqUYtKMzOW3FdAQLsC0WKA+UyXJ8SdzJ876U
 4IScEXZ7PN5DNB/KXHCXyDYrMdKa68gcKVbInlr0tFfEVPUeVN/g15AgGUHgldXw9dH6c0E5
 Ka+45uuyegUW5/VLXyOlA1G8z44/HbnpPvZhALQzQ97hOVsD+u4LnmVzCFwxYlVS9Vy7tKyx
 mPr+W53NTojxiI8G6R64bh1eUYpDLV8KoPOCXDsLlaFtymsHfRWG0oYcz4gNlympDn1L9iqq
 i3nz4we8t08H/fZWezvF/k3BThyi8n7zv4xUafmmaLm72KeNsWMbswuWtiSGqr12Mw+NVnlK
 5b1WOQsJRaSRvGgSTm/tDNExVnjFC9r3YumfMayyU3a/prVJZB6YgEuE9FGpYJGyz3rIghDe
 l1FcnZoPJba0mTYXzVtnRmhNasQnMwFBGbRVVqgL3h7xFG2HRii0cIzs0WmXkNsJo7Vplf/u
 zBdr9lkblfJ/VmHJ6VxN1xP/dfJla9Pi4kaljiXGgPPJt3R07wlw==
X-IronPort-AV: E=Sophos;i="5.96,147,1665460800"; 
   d="scan'208";a="83973974"
From: Martin Harvey <Martin.Harvey@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
CC: Martin Harvey <Martin.Harvey@citrix.com>, Martin Harvey
	<martin.harvey@citrix.com>
Subject: [PATCH] Correct return codes during racy destruction.
Date: Tue, 8 Nov 2022 10:45:07 +0000
Message-ID: <20221108104507.182-1-Martin.Harvey@citrix.com>
X-Mailer: git-send-email 2.25.0.windows.1
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

Signed-off-by: Martin Harvey <martin.harvey@citrix.com>
---
 src/xeniface/driver.c | 12 ++++++++++++
 src/xeniface/fdo.c    |  2 +-
 2 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/src/xeniface/driver.c b/src/xeniface/driver.c
index db41cfe..d7c73e0 100644
--- a/src/xeniface/driver.c
+++ b/src/xeniface/driver.c
@@ -108,8 +108,20 @@ Dispatch(
     ASSERT3P(Dx->DeviceObject, ==, DeviceObject);
 
     if (Dx->DevicePnpState == Deleted) {
+        PIO_STACK_LOCATION StackLocation = IoGetCurrentIrpStackLocation(Irp);
+        UCHAR MajorFunction = StackLocation->MajorFunction;
+        UCHAR MinorFunction = StackLocation->MinorFunction;
         status = STATUS_NO_SUCH_DEVICE;
 
+        if (MajorFunction == IRP_MJ_PNP) {
+            if ((MinorFunction == IRP_MN_SURPRISE_REMOVAL) ||
+               (MinorFunction == IRP_MN_REMOVE_DEVICE)) {
+                /* FDO and PDO deletions can block after being marked deleted, but before IoDeleteDevice */
+                status = STATUS_SUCCESS;
+            }
+            BUG_ON((MinorFunction == IRP_MN_CANCEL_REMOVE_DEVICE) || (MinorFunction == IRP_MN_CANCEL_STOP_DEVICE));
+        }
+
         Irp->IoStatus.Status = status;
         IoCompleteRequest(Irp, IO_NO_INCREMENT);
         goto done;
diff --git a/src/xeniface/fdo.c b/src/xeniface/fdo.c
index 6aabf96..f282277 100644
--- a/src/xeniface/fdo.c
+++ b/src/xeniface/fdo.c
@@ -1498,7 +1498,7 @@ FdoDispatchPnp(
           MinorFunction,
           PnpMinorFunctionName(MinorFunction));
 
-    switch (StackLocation->MinorFunction) {
+    switch (MinorFunction) {
     case IRP_MN_START_DEVICE:
         status = FdoStartDevice(Fdo, Irp);
         break;
-- 
2.25.0.windows.1



From win-pv-devel-bounces@lists.xenproject.org Tue Nov 08 10:48:03 2022
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 08 Nov 2022 10:48:03 +0000
Received: from list by lists.xenproject.org with outflank-mailman.439881.693938 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1osM9C-0008AQ-Bn; Tue, 08 Nov 2022 10:48:02 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 439881.693938; Tue, 08 Nov 2022 10:48:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1osM9C-0008AI-8g; Tue, 08 Nov 2022 10:48:02 +0000
Received: by outflank-mailman (input) for mailman id 439881;
 Tue, 08 Nov 2022 10:48:01 +0000
Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254]
 helo=se1-gles-sth1.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=h5nM=3I=citrix.com=prvs=30438a45d=martin.harvey@srs-se1.protection.inumbo.net>)
 id 1osM9B-0008AC-Jo
 for win-pv-devel@lists.xenproject.org; Tue, 08 Nov 2022 10:48:01 +0000
Received: from esa4.hc3370-68.iphmx.com (esa4.hc3370-68.iphmx.com
 [216.71.155.144]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS
 id cdd9d345-5f52-11ed-91b5-6bf2151ebd3b;
 Tue, 08 Nov 2022 11:47:58 +0100 (CET)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/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: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: cdd9d345-5f52-11ed-91b5-6bf2151ebd3b
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1667904480;
  h=from:to:cc:subject:date:message-id:mime-version:
   content-transfer-encoding;
  bh=DKR9lRBdrCxGmKoM0JZuF9oiMMxRP6HLzd3HOpK9uTY=;
  b=Upft/xpSCVeKM07+g4AHP80ZRe0TJyOY2/ZDfdXRrNUR195CGr3Jd/LK
   kCSGtqPc8jZNNt7klGikDNP00Zu19HQZgAX2iUaH+YWu9F4Sswx/ZgeIY
   cQK2dYt0N/FzwW3nF8WBArlOVxzEEqXYFh3m261aoBQtWreBelLYmIbg6
   Y=;
Authentication-Results: esa4.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
X-SBRS: None
X-MesageID: 86912561
X-Ironport-Server: esa4.hc3370-68.iphmx.com
X-Remote-IP: 162.221.156.83
X-Policy: $RELAYED
IronPort-Data: A9a23:cFcztK8QH2lLTC1OaU7iDrUD2H6TJUtcMsCJ2f8bNWPcYEJGY0x3m
 2dKW27SMqyPY2X0f9h1O9+/pxlQ6pfRmNJiTFZtqC88E34SpcT7XtnIdU2Y0wF+jCHgZBk+s
 5hBMImowOQcFCK0SsKFa+C5xZVE/fjUAOG6UKucYHsZqTZMEE8JkQhkl/MynrlmiN24BxLlk
 d7pqojUNUTNNwRcawr40Ire7kIx1BjOkGlA5AZnPKgb5Aa2e0Q9V/rzG4ngdxMUfaEMdgKKb
 76r5K20+Grf4yAsBruN+losWhRXKlJ6FVHmZkt+A8BOsDAbzsAB+v9T2M4nQVVWk120c+VZk
 72hg3ASpTABZcUgkMxFO/VR/roX0aduoNcrKlDn2SCfItGvn9IBDJyCAWlvVbD09NqbDkkNq
 /0UKGsQNCqpmqGJ3LSbE7Ergtw8eZyD0IM34hmMzBncBPciB5vCX7/L9ZlT2zJYasJmRKiEI
 ZBDMHw2MUqGM0Yn1lQ/UfrSmM+tj2PjcjseqFuPu6cmy2PS0BZwwP7mN9+9ltmiFZsExxzF+
 DuuE2LRJwMdOtyxwDu5/CiNhajwlGDGSq4uC+jtnhJtqALKnTFCYPEMbnOkoP/8klD7V99BJ
 kg8/is1sbN05EGtVsP6XRCzvDiDpBF0ZjZLO7RkskfXkPOSulvHQDhfJtJcVDA4nIxoRDAqj
 ULTpfn0RgNztp3METWZ7qjB+FteJhMpBWMFYCYFSy4M7N/ivJw/g3rzczpzLEKmpoarQG+tm
 lhmuAB73uxO1pBTi81X6Hid21qRSo71ohnZD+k9dkas9UtHaYGsfOREAnCLvK8bfO51orRs1
 UXoevRyDshUU/lhdwTXGo3h+Y1FAN7UWAAweXY1Q/EcG82FohZOvel4uVmS3ntBPMceYiPOa
 0TOow5X75I7FCL0M/AnP9zoU5xwk/iI+THZuhf8N4QmX3SMXFXfoHEGibC4gwgBb3TAYYlgY
 MzGIK5A/F4RCLh9zSreegvu+eZD+83/rEuNLa3GI+OPiuPPPCPJEe5dajNjrIkRtcu5nekcy
 P4HX+Pi9vmVeLKWjvX/mWLLEW03EA==
IronPort-HdrOrdr: A9a23:KBFxLKGwhFa7Lk2HpLqE5MeALOsnbusQ8zAXP0AYc3Jom6uj5q
 STdZUgpHnJYVkqOE3I9ertBEDiewK4yXcW2/hzAV7KZmCP0wHEEGgL1/qE/9SKIUzDH4Bmup
 uIC5IOauHNMQ==
X-IronPort-AV: E=Sophos;i="5.96,147,1665460800"; 
   d="scan'208";a="86912561"
From: Martin Harvey <Martin.Harvey@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
CC: Martin Harvey <Martin.Harvey@citrix.com>, Martin Harvey
	<martin.harvey@citrix.com>
Subject: [PATCH] Correct return codes during racy destruction.
Date: Tue, 8 Nov 2022 10:47:30 +0000
Message-ID: <20221108104730.1765-1-Martin.Harvey@citrix.com>
X-Mailer: git-send-email 2.25.0.windows.1
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

Signed-off-by: Martin Harvey <martin.harvey@citrix.com>
---
 src/xendisk/driver.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/src/xendisk/driver.c b/src/xendisk/driver.c
index 4b004c5..9573259 100644
--- a/src/xendisk/driver.c
+++ b/src/xendisk/driver.c
@@ -170,8 +170,20 @@ Dispatch(
     ASSERT3P(Dx->DeviceObject, ==, DeviceObject);
 
     if (Dx->DevicePnpState == Deleted) {
+        PIO_STACK_LOCATION StackLocation = IoGetCurrentIrpStackLocation(Irp);
+        UCHAR MajorFunction = StackLocation->MajorFunction;
+        UCHAR MinorFunction = StackLocation->MinorFunction;
         status = STATUS_NO_SUCH_DEVICE;
 
+        if (MajorFunction == IRP_MJ_PNP) {
+            if ((MinorFunction == IRP_MN_SURPRISE_REMOVAL) ||
+               (MinorFunction == IRP_MN_REMOVE_DEVICE)) {
+                /* FDO and PDO deletions can block after being marked deleted, but before IoDeleteDevice */
+                status = STATUS_SUCCESS;
+            }
+            BUG_ON((MinorFunction == IRP_MN_CANCEL_REMOVE_DEVICE) || (MinorFunction == IRP_MN_CANCEL_STOP_DEVICE));
+        }
+
         Irp->IoStatus.Status = status;
         IoCompleteRequest(Irp, IO_NO_INCREMENT);
         goto done;
-- 
2.25.0.windows.1



From win-pv-devel-bounces@lists.xenproject.org Tue Nov 08 10:49:16 2022
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 08 Nov 2022 10:49:16 +0000
Received: from list by lists.xenproject.org with outflank-mailman.439885.693941 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1osMAO-0008El-FS; Tue, 08 Nov 2022 10:49:16 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 439885.693941; Tue, 08 Nov 2022 10:49:16 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1osMAO-0008Ee-Cw; Tue, 08 Nov 2022 10:49:16 +0000
Received: by outflank-mailman (input) for mailman id 439885;
 Tue, 08 Nov 2022 10:49:15 +0000
Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50]
 helo=se1-gles-flk1.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=h5nM=3I=citrix.com=prvs=30438a45d=martin.harvey@srs-se1.protection.inumbo.net>)
 id 1osMAN-0008EY-5P
 for win-pv-devel@lists.xenproject.org; Tue, 08 Nov 2022 10:49:15 +0000
Received: from esa1.hc3370-68.iphmx.com (esa1.hc3370-68.iphmx.com
 [216.71.145.142]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS
 id f9de4be6-5f52-11ed-8fd1-01056ac49cbb;
 Tue, 08 Nov 2022 11:49:13 +0100 (CET)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/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: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: f9de4be6-5f52-11ed-8fd1-01056ac49cbb
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1667904553;
  h=from:to:cc:subject:date:message-id:mime-version:
   content-transfer-encoding;
  bh=6YvR1fRdSVoKfJjm/dUClTWl54ZdBORWttLcgq3s70A=;
  b=Wwpqp3IkDO/5DqGFBC91NEkP9QB/W9oMq3o9qoeJKvCbbI/+J0C7zrDI
   AdRI6QouApX7s8yRXE6xz5aI20pxmddDQisY0+/JvtbzSpxN2tVe6ZTaE
   uDmdGCbF8q6y4KYezVY8zA40ZrsVfXwxm6Ss7C/Mm1Pbb4j6G9w1RAdwD
   U=;
Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
X-SBRS: None
X-MesageID: 84805691
X-Ironport-Server: esa1.hc3370-68.iphmx.com
X-Remote-IP: 162.221.156.83
X-Policy: $RELAYED
IronPort-Data: A9a23:jAEdzq6vi6QUfU7Qc+Jz5wxRtGDHchMFZxGqfqrLsTDasY5as4F+v
 mUdWGGDP6mOYTCmc9lwOo6x8E5TvZLdn4dmGVZvrCo0Hi5G8cbLO4+Ufxz6V8+wwm8vb2o8t
 plDNYOQRCwQZiWBzvt4GuG59RGQ7YnRGvynTraBYnoqLeNdYH9JoQp5nOIkiZJfj9G8Agec0
 fv/uMSaM1K+s9JOGjt8B5mr9VU+4pwehBtC5gZkPKkT7AeH/5UoJMl3yZ+ZfiOQrrZ8RoZWd
 86bpJml82XQ+QsaC9/Nut4XpWVTH9Y+lSDX4pZnc/DKbipq/0Te4Y5iXBYoUm9Fii3hojxE4
 I4lWapc6+seFvakdOw1C3G0GszlVEFM0OevzXOX6aR/w6BaGpdFLjoH4EweZOUlFuhL7W5mq
 d4ENSoJShy6ifu4m7iDcrR9o98zFZy+VG8fkikIITDxCP8nRdbIQrnQ5M8e1zA17ixMNa+AP
 YxDM2MpNUmeJU0UUrsUIMtWcOOAg3Dlbzxe7lKcv7Q68kDYzRBr0airO93QEjCPbZUJzh7F+
 DOfl4j/KhQCc9e86XmKyS+PvrHjvxvfAbMRK7Lto5aGh3XMnzdOWXX6T2CTvvi/z1agHt5SN
 UEQ0i4vtrQpslymSMHnWB+1q2LCuQQTM+e8CMVjtlvLkPCNpV/EWC5UFVatdeDKqudqZyA3z
 Futk+rnHDI0uoWtFGO47aet+Gba1TcuEUcOYioNTA0g6tbloZ0ugh+ncuuPAJJZnfWuR2iun
 mniQDwWwuxK0JVVj/nTEUXv2WrEm3TfcuIiCuw7tEqB5xgxWoOqbpfABbPzvacZd9bxorVsU
 RE5dymiAAImV8/leM+lGr9l8FSVCxGtYVXhbaZHRcVJythU0yfLkEA5yGgWyL1VGsgFYyT1R
 0TYpBlc4pReVFPzM/EoM97vUpxyl/awfTgAahwzRoMQCqWdiSfdpH0+DaJu9zyFfLcQfVEXZ
 s7ALJfE4YcyAqV71jumL9rxIpdyrh3TBAr7G/jG8vhQ+eHHNSbIFe9caAHmgyJQxPrsnTg5O
 u13b6OioyizmsWkCsUL2eb/9Ww3EEU=
IronPort-HdrOrdr: A9a23:6Q5xzKi0scV1NukQIrxaFpx9GnBQXtAji2hC6mlwRA09TySZ//
 rAoB19726QtN9xYgBGpTnuAsi9qB/nmKKdgrNhX4tKPjOHhILAFugLhuHfKlXbaknDH4Vmu5
 uIHZITNDSJNykYsfrH
X-IronPort-AV: E=Sophos;i="5.96,147,1665460800"; 
   d="scan'208";a="84805691"
From: Martin Harvey <Martin.Harvey@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
CC: Martin Harvey <Martin.Harvey@citrix.com>, Martin Harvey
	<martin.harvey@citrix.com>
Subject: [PATCH] Correct return codes during racy destruction.
Date: Tue, 8 Nov 2022 10:49:00 +0000
Message-ID: <20221108104900.1645-1-Martin.Harvey@citrix.com>
X-Mailer: git-send-email 2.25.0.windows.1
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

Signed-off-by: Martin Harvey <martin.harvey@citrix.com>
---
 src/xenvif/driver.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/src/xenvif/driver.c b/src/xenvif/driver.c
index 8bc097a..cac0cee 100644
--- a/src/xenvif/driver.c
+++ b/src/xenvif/driver.c
@@ -350,8 +350,20 @@ Dispatch(
     ASSERT3P(Dx->DeviceObject, ==, DeviceObject);
 
     if (Dx->DevicePnpState == Deleted) {
+        PIO_STACK_LOCATION StackLocation = IoGetCurrentIrpStackLocation(Irp);
+        UCHAR MajorFunction = StackLocation->MajorFunction;
+        UCHAR MinorFunction = StackLocation->MinorFunction;
         status = STATUS_NO_SUCH_DEVICE;
 
+        if (MajorFunction == IRP_MJ_PNP) {
+            if ((MinorFunction == IRP_MN_SURPRISE_REMOVAL) ||
+               (MinorFunction == IRP_MN_REMOVE_DEVICE)) {
+                /* FDO and PDO deletions can block after being marked deleted, but before IoDeleteDevice */
+                status = STATUS_SUCCESS;
+            }
+            ASSERT((MinorFunction != IRP_MN_CANCEL_REMOVE_DEVICE) && (MinorFunction != IRP_MN_CANCEL_STOP_DEVICE));
+        }
+
         Irp->IoStatus.Status = status;
         IoCompleteRequest(Irp, IO_NO_INCREMENT);
         goto done;
-- 
2.25.0.windows.1



From win-pv-devel-bounces@lists.xenproject.org Tue Nov 08 10:52:04 2022
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 08 Nov 2022 10:52:04 +0000
Received: from list by lists.xenproject.org with outflank-mailman.439895.693946 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1osMD5-0000iK-NL; Tue, 08 Nov 2022 10:52:03 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 439895.693946; Tue, 08 Nov 2022 10:52:03 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1osMD5-0000iD-Ke; Tue, 08 Nov 2022 10:52:03 +0000
Received: by outflank-mailman (input) for mailman id 439895;
 Tue, 08 Nov 2022 10:52:02 +0000
Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50]
 helo=se1-gles-flk1.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=h5nM=3I=citrix.com=prvs=30438a45d=martin.harvey@srs-se1.protection.inumbo.net>)
 id 1osMD4-0000i7-Dk
 for win-pv-devel@lists.xenproject.org; Tue, 08 Nov 2022 10:52:02 +0000
Received: from esa3.hc3370-68.iphmx.com (esa3.hc3370-68.iphmx.com
 [216.71.145.155]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS
 id 5ea57af0-5f53-11ed-8fd1-01056ac49cbb;
 Tue, 08 Nov 2022 11:52:01 +0100 (CET)
Received: from mail-dm6nam12lp2169.outbound.protection.outlook.com (HELO
 NAM12-DM6-obe.outbound.protection.outlook.com) ([104.47.59.169])
 by ob1.hc3370-68.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256;
 08 Nov 2022 05:51:58 -0500
Received: from MW4PR03MB6347.namprd03.prod.outlook.com (2603:10b6:303:11e::22)
 by CO3PR03MB6741.namprd03.prod.outlook.com (2603:10b6:303:17c::17)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5791.27; Tue, 8 Nov
 2022 10:51:57 +0000
Received: from MW4PR03MB6347.namprd03.prod.outlook.com
 ([fe80::1a60:e566:681f:83f3]) by MW4PR03MB6347.namprd03.prod.outlook.com
 ([fe80::1a60:e566:681f:83f3%2]) with mapi id 15.20.5791.026; Tue, 8 Nov 2022
 10:51:57 +0000
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/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: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 5ea57af0-5f53-11ed-8fd1-01056ac49cbb
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1667904720;
  h=from:to:subject:date:message-id:references:in-reply-to:
   content-transfer-encoding:mime-version;
  bh=Z2inmYWVQ+QI9zVbfUJOURKwnT9BAKpfDl4maH0oOZg=;
  b=gEHWSX9uVamA9PLjB1waW7XycJs8a9N+vnxScOoVVhdqE9pwhvZ2ACYa
   Z8or2/czb+4LSHPEUD15uhJDyy3uJViNVyK5drCELqshzziiAZ90GZbLw
   fDlg3zH7ZBI7CH+mokst8Q3xFaPnGgwZFKHI5zm38ct5O/rTPCLOvfB8O
   Q=;
X-IronPort-RemoteIP: 104.47.59.169
X-IronPort-MID: 84375985
X-IronPort-Reputation: None
X-IronPort-Listener: OutboundMail
X-IronPort-SenderGroup: RELAY_O365
X-IronPort-MailFlowPolicy: $RELAYED
IronPort-Data: A9a23:DzxLmK3/qPDLEYno7vbD5dxwkn2cJEfYwER7XKvMYLTBsI5bp2BSx
 zBLDz3UP//YYWTxftgiPNvl8k8CsZbRn9FlSVZppC1hF35El5HIVI+TRqvS04F+DeWYFR46s
 J9OAjXkBJppJpMJjk71atANlVEliefTAOK5ULSfUsxIbVcMYD87jh5+kPIOjIdtgNyoayuAo
 tq3qMDEULOf82cc3lk8tuTS9nuDgNyo4GlC5wVmNagS1LPjvyJ94Kw3dPnZw0TQGuG4LsbiL
 87fwbew+H/u/htFIrtJRZ6iLyXm6paLVeS/oiI+t5qK23CulQRrukoPD9IOaF8/ttm8t4sZJ
 OOhF3CHYVxB0qXkwIzxWvTDes10FfUuFLTveRBTvSEPpqFvnrSFL/hGVSkL0YMkFulfXE8U/
 PohN2o0Ph2moOvo7oyrROlov5F2RCXrFNt3VnBI6xj8VKxjbbWdBqLA6JlfwSs6gd1IEbDGf
 c0FZDFzbRPGJRpSJlMQD5F4l+Ct7pX9W2QA9BTJ+uxqsi6Kkl0ZPLvFabI5fvSPTN9Jn0Dep
 mvc4WnoKhobKMae2XyO9XfEaurnzX+gB99DRODQGvhC2F2V6GtIVTEvSXi0+Na60g23fvRVJ
 BlBksYphe1onKCxdfHiXhv9uGDBshMCVt54F+wh9BrL2qfS+xyeBGUPUnhGctNOiSMtbTkj1
 1vMk9a3AzVq6eeRUSjEqObSqi6uMy8IK2NEfTUDUQYO/9jkpsc0kw7LSdFgVqWyi7UZBA3N/
 txDlwBm7517sCLB//zTEYzv6950mqX0cw==
IronPort-HdrOrdr: A9a23:SAioE6NLl5UtAcBcT3/155DYdb4zR+YMi2TDiHoddfUFSKalfp
 6V98jzjSWE8Ar5K0tQ4uxoX5PwCk80lKQFqbX5WI3PYOCIghrNEGgP1+rfKnjbalTDH41mpO
 1dmspFebrN5DFB5K6UjjVQUexQpuVvm5rY5ts2uk0dKD2CHJsQjTuRZDz6LmRGAC19QbYpHp
 uV4cRK4xC6f24MU8i9Dn4ZG8DeutzijvvdEFI7Li9izDPLoSKj6bb8HRTd9AwZSSlzzbAr9n
 WAuxDl55+kr+qwxnbnpiDuBtVt6ZXcI+l4dYyxY/suW3bRY8GTFcZcsoi5zXEISSeUmRMXeZ
 f30lMd1o9ImgnslymO0GbQMk/boXsTAjbZuCOlqGqmrsrjSD0gDc1dwYpfbxvC8kIl+Mpxya
 RRwguixu1q5D777VHADuLzJmVXv1vxpWBnnf8YjnRZX4dbYLhNrZYH9EcQFJsbBir15I0uDe
 ErVajnlb9rWELfa2qcsnhkwdSqUHh2FhCaQlIassjQ1zRNhnh2w0YR2cRalHYd85A2TYVC+o
 3/Q9JVvaALStVTYbN2Be8HT8fyAmvRQQjUOGbXOljjHLFvAQO+l3c22sRH2AiHQu148HJpou
 W/bLpxjx9NR2v+TcuTwZZM7hfBBG2gQDWF8LAv26RE
X-IronPort-AV: E=Sophos;i="5.96,147,1665460800"; 
   d="scan'208";a="84375985"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=Mh1OIuLI+c/i29P/Ofx9iI9X60J5phhcA764ESh2dO9PQuzYUkv9+QUYFRFG5bcdbz7S3NiRyZxLGEHQbYD7DPGpfGaSZm8Fi9Dk92X1c1J3T09wPxEZbyD3XvNeYGjtez+ccRnQZjQJE9K8+WTRa6B5dq6l9ES2EP7BJ8FHJN0YPIUwZCrCA1/wpB2ZhCE6xq8sl8gnQ0v2WPjg4xBHyoRbXdVuxEMMm8+nd2+Q13TZC2tDfuYpbzZELsUEdmiEjQQXRPYPZkod4UKCM2DyipLME2wKeLWhnUDOX3f446Q/Pa/ixvWH7C5zhn+w8H7lsobBwzGWpMHyPScfQ0uuUQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=Z2inmYWVQ+QI9zVbfUJOURKwnT9BAKpfDl4maH0oOZg=;
 b=UfFByn1NDGK7QL3mthnuatyBb+r6k1s95Q9niBO5I2FwPLeEAsdyYtzydRl09VhfTD5N7A5hc1OcvMmXvjp2pv3ypDq8EN5DJ/epeNJ6YXsaMUQVgTWET1kUV40pw2/ESMLaW6NbXUPs+tPkXj6hm2Cw+/VqLBz7wWXxk4/yKhCVH9QmJZvBHU/GMEKqSHp8KGPuNRl0w24MzbddnJllibgSLdtifXIZX75jipyNu/q3i9K2UfNr4KDKzptFIWPPj0IWyQrEYzU70BlxNM0wxKutnyhfZAxO6glrYZ1kOm7LaFCn3d9ISzl9GU6a8CdLsfxrjfEA5F68XuqRJJOiiQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=Z2inmYWVQ+QI9zVbfUJOURKwnT9BAKpfDl4maH0oOZg=;
 b=B/8t3uUl4bnxc4m7OYmbSQnLBwIEkuwUPf/E/gyIZNAWOMEL8PLi80rGnUZInEvBh2qErDToP3lxbK+ZzbyAdus1x0ZMI7PO49/yyu51eoHfgYxe5rdqbY89PJSFrKS6z0fqhKEiNPk8+dxWndRscrwe9sy1kXzv9wKjPuwhF38=
From: Martin Harvey <martin.harvey@citrix.com>
To: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Subject: Correction: Correct return codes during racy destruction.
Thread-Topic: Correction: Correct return codes during racy destruction.
Thread-Index: AQHY82AfitRpB6BUmU6wROmNTUT7PQ==
Date: Tue, 8 Nov 2022 10:51:57 +0000
Message-ID:
 <MW4PR03MB6347DFD47EA9DBA9189502119A3F9@MW4PR03MB6347.namprd03.prod.outlook.com>
References: <20221108104900.1645-1-Martin.Harvey@citrix.com>
In-Reply-To: <20221108104900.1645-1-Martin.Harvey@citrix.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
authentication-results: dkim=none (message not signed)
 header.d=none;dmarc=none action=none header.from=citrix.com;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: MW4PR03MB6347:EE_|CO3PR03MB6741:EE_
x-ms-office365-filtering-correlation-id: f6f91273-ce0b-4a3a-af91-08dac1774181
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam: BCL:0;
x-microsoft-antispam-message-info:
 PkWfazXmBatRKS/AhipWWffhXvZHNZNxLMW/lR5OtH0vtmtzXgzKr+1VGooigTjpSfIZ228Q6VvWwKi3Cm4Psa2qyVmmS8tZ/w2E5oTR/WXKeGXTKIoxbGr6HRTASzLlBJhD4Nj+KIXAGZOwoyKfFoBrVkl9tP53wzgtua5ygmURKK7ubB1BzHGtNiRrWBLeu/CR5mZrEtGfnCdil4yET6xJohd+fozILAepdkUQMN8E63rcx+svIPE9/xJ7uOLdkSebjypgFaMLmRgJmd4vrMyvXfgvMmEJ6Krvc159P40qIOBPCpBHlDfuq0qTzJyxo4mc0geQ4s0myqjuxkGuirqlU3sYKZyH9k3G7hwKbi24HAca8aIlHHTgSH7W8DO7rpZ3hJwSOAlghlvc7LZ8JL7tFN/o9C51R24ncLOIwLGZHoWnHljAQ8yYvjBhG0MPg+alSF7UGlSlexQTGmMkv7mgQymQxrqOvjN9DdUvVp5DKqy+Ka2+nNCJ8EGWUxVsF28Pfhc5JWtSg973iixQ/0qiAB1aA05jaDvx6flF7m/i+95HdSqz5wtCiw+3aM780zX+TFjDBRIHfrtbfN71vG8eb156qyOzgpFx+CH/HKMJaFZGj2qnmmkke5LmOIfrcupSPYUk0Zynd3jzvqglt96mWTD/EKHfaUOue8VoGYLT8Cg1Y/e5rEbrc/gY+PMKA56c+6t8KDdB7tNG9L1LC++JnoaQScdBW0qTVPG7pblwsuUYvD3NWCtTUNQFG01x1PAwacuUJ6i+eRDSrLXxkQ==
x-forefront-antispam-report:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MW4PR03MB6347.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(39860400002)(366004)(346002)(136003)(376002)(396003)(451199015)(38100700002)(55016003)(44832011)(6916009)(186003)(122000001)(66446008)(6506007)(82960400001)(9686003)(26005)(7696005)(38070700005)(66556008)(41300700001)(8936002)(5660300002)(33656002)(2906002)(478600001)(71200400001)(52536014)(64756008)(316002)(66476007)(76116006)(8676002)(66946007)(86362001)(558084003);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?us-ascii?Q?3TwV1Z3HCc01k4Vd7DnJHUEjGEQ/WvqaNAiRpEE+cYWyd93bWshHCnFU0Nf9?=
 =?us-ascii?Q?IzyfYs/x4SyYbPKQOQCFNoB0P0h7T99MplowgiZPwShCh+S2LhX2Qua0+5tU?=
 =?us-ascii?Q?wZWPTnoXXvjTuhQ7/ADPaRUkuRUFJsFejYZwEVHfe76A3ChN+U5y1oDTg2ek?=
 =?us-ascii?Q?InuibZ/TQtpVT8JbtYBtUctn1WFH3eGZmrawkN/cfQUWjJi2VORCRxJ8gTud?=
 =?us-ascii?Q?EGjyIHy46KTCtUdR2Ygw1M/LWI0qv66ewgPgArwTmrJURK07Qs5+n7DxBS7K?=
 =?us-ascii?Q?BCOJVHpDG92aEaIYWZqnVfDfQ8V+Iu4J85QN7sLjCIHro52m1WTT5+xNGlXV?=
 =?us-ascii?Q?tPjtH1Hi9Z5+LjHOktzUDD+F7xUlXLjLEJdvTPhN2OU5JMkYZrVMoOZrVfSG?=
 =?us-ascii?Q?c9Chg5wnx0WYtTgWFKICiYmJo/vz+c07HBcvQIlZM6bwHI1PQbgZGSHaoy/8?=
 =?us-ascii?Q?Sv3tOt1G6nKnzZ0hN7lNs/3ECild1HE1Oh4ZueKxIACvSMrtZ3dBkqZeJKAL?=
 =?us-ascii?Q?Mb93PtWuzqUsis5RtY3oqDhCqCYgegmjMO+F30taAOVjBObvcRShdcUVyV8A?=
 =?us-ascii?Q?AGf3NujboeVc0ai4Aj9ccQ8Jd4OvbDDO4oZAHqd3pYoqf5zJELjVEi8n8LQi?=
 =?us-ascii?Q?jHLj+5T5PVRxmfzlJqcJycb7cXHPUmT8KvVcoVMN74ld6kSKASaz2DdLkDXv?=
 =?us-ascii?Q?xNPTNWlh5Z0p9ng4dcbZXhm0qqsTmhDpLpgEbuu/WEcUfCQaXylBHPp8xmn0?=
 =?us-ascii?Q?lHxT4FDHm68IB9bC7jwq+6L9W9pt5+4BZZnLGX3qeKVvIgCPF/3l1kXq+Cjn?=
 =?us-ascii?Q?lfOm4nkiNOtElc3U/AwAzZawLRs61hl2DF4xZKHZto8L/ROOqy86lCPfbdsb?=
 =?us-ascii?Q?Wx+K0LfUirWEuO6eMWlkbAtKLGuqKHh0H8AJY86jEqlkGIhFQf6L2KrAiA4m?=
 =?us-ascii?Q?HHpezOuefhX5N4A8FeZdTmtP2S6Ww4UfsEJcPe/dehUGYrXx6w0aeBnkjpkb?=
 =?us-ascii?Q?bREJIkpHtw1hW662AfpwN/o1WkgVeDnEZpLFPj37aCn6EWNaOUKivB6EKtUO?=
 =?us-ascii?Q?20Z8W6l4qPJwjbzSFNUYZ9wGjr7MvJFXOeRWpor+vp8LDAv/To5GPqHjDiJP?=
 =?us-ascii?Q?0Bm+p9pxf8yxnUMIAuucDkgy5VRwObzuxrePMIcMnkuNLXd4No/yqbpmBQdN?=
 =?us-ascii?Q?OMG+XwgbglEwFdjdyGSneGS4DFU/NryLB8xZY9Z9ZG/yvMh0cvmr5gN3t4UI?=
 =?us-ascii?Q?kJ5LTN5n006Bdtt0P0tnmeJe8oRxM1AmV/5S0AQ3aZMTrMzxPJUGITuIjv6s?=
 =?us-ascii?Q?EYhuywNuBGVh1XiwvI3R2UlLQZWgfVZsYGhD+AY85V/quuWb9S/zjFVJ8Qd6?=
 =?us-ascii?Q?si2ggfMOw6SKnKvsAw4Hu+zb6WmVIL0FITSZ6x2DFrR3AFBNnNaQcDqYQ2ju?=
 =?us-ascii?Q?7Xv/fGz0qWkYPL8ZhR3zfKAyzhi4iTdmZttDXtdSSXO+rNF3zHO7YusJasGh?=
 =?us-ascii?Q?vwzh1Im6pIi5ploCPEQXyk/2B2BdNJ+ZOTgEhOcR8FmCRwgSS+yl+lZHrp76?=
 =?us-ascii?Q?DP9/wW+h2G5XbrYujDbh9MhQzrN/cpvgem2y4wKZ?=
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-OriginatorOrg: citrix.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: MW4PR03MB6347.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: f6f91273-ce0b-4a3a-af91-08dac1774181
X-MS-Exchange-CrossTenant-originalarrivaltime: 08 Nov 2022 10:51:57.0320
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: q4qt/HFYM++J6n4igfYGlHbNVBj6nP/KOcLw9lfXueN6JMkFQkziBIvRPq49COMUuM5t7515HZHqgDBK6lxJqP7V5Y1BNsVa15pOqqZlKGM=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO3PR03MB6741


Apologies, I have sent these patches with BUG_ON calls, when they should be=
 asserts. I will correct and resend.

MH.


From win-pv-devel-bounces@lists.xenproject.org Tue Nov 08 10:58:54 2022
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 08 Nov 2022 10:58:54 +0000
Received: from list by lists.xenproject.org with outflank-mailman.439905.693950 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1osMJh-000168-8j; Tue, 08 Nov 2022 10:58:53 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 439905.693950; Tue, 08 Nov 2022 10:58:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1osMJh-000161-65; Tue, 08 Nov 2022 10:58:53 +0000
Received: by outflank-mailman (input) for mailman id 439905;
 Tue, 08 Nov 2022 10:58:52 +0000
Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254]
 helo=se1-gles-sth1.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=h5nM=3I=citrix.com=prvs=30438a45d=martin.harvey@srs-se1.protection.inumbo.net>)
 id 1osMJg-00015v-4n
 for win-pv-devel@lists.xenproject.org; Tue, 08 Nov 2022 10:58:52 +0000
Received: from esa1.hc3370-68.iphmx.com (esa1.hc3370-68.iphmx.com
 [216.71.145.142]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS
 id 52d7c0dc-5f54-11ed-91b5-6bf2151ebd3b;
 Tue, 08 Nov 2022 11:58:50 +0100 (CET)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/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: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 52d7c0dc-5f54-11ed-91b5-6bf2151ebd3b
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1667905130;
  h=from:to:cc:subject:date:message-id:mime-version:
   content-transfer-encoding;
  bh=6dHn91ztckjpcd+oop8zU6RxBw2ulCnas8J3Jco6Q6A=;
  b=OqXX0qck9tdWYRr2Dz7tecWukbrw8+4QyUDxrgAVkcOtknMWYRPCKPBW
   VXaMKPQKVSb5F/zbeSRF1k3shVKTWoJ22OEPzHUcVCUl+V/RgioeKRqX6
   k/0aS6BmhNkFqAQtMaEo8J4lTn/fQ2kT/qyLRTYiMrJOEksGqpdUueVIs
   E=;
Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
X-SBRS: None
X-MesageID: 84806152
X-Ironport-Server: esa1.hc3370-68.iphmx.com
X-Remote-IP: 162.221.156.83
X-Policy: $RELAYED
IronPort-Data: A9a23:H/hXNK1N+gY6wkRp3/bD5Ytxkn2cJEfYwER7XKvMYLTBsI5bpzJVz
 jAZWD/VafmJYWSmKYsnO4iz8UoBsZ6DzNZiSgZupC1hF35El5HIVI+TRqvS04F+DeWYFR46s
 J9OAjXkBJppJpMJjk71atANlVEliefTAOK5ULSfUsxIbVcMYD87jh5+kPIOjIdtgNyoayuAo
 tq3qMDEULOf82cc3lk8tuTS9nuDgNyo4GlC5wVmNagS1LPjvyJ94Kw3dPnZw0TQGuG4LsbiL
 87fwbew+H/u/htFIrtJRZ6iLyXm6paLVeS/oiI+t5qK23CulQRrukoPD9IOaF8/ttm8t4sZJ
 OOhF3CHYVxB0qXkwIzxWvTDes10FfUuFLTveRBTvSEPpqFvnrSFL/hGVSkL0YMkFulfDE8Tx
 78JMDs2Pj+in/CI3ayfU81RmZF2RCXrFNt3VnBIyDjYCbAtQIzZQrWM7thdtNsyrpkQR7CEP
 ZNfMGcxKkSbC/FMEg5/5JYWme6ymnj5NT1RskyYtII84nTJzRw327/oWDbQUozWFZ0LxxvCz
 o7A1zj8HjVFFN3H9QOm/XCmgs/+wHzWXLtHQdVU8dY12QbOlwT/EiY+Slq95OGnz0KzRd9bA
 0gV4TY167g/8lSxSdvwVAH+p2SL1iPwQPIJTbd8slvUjPOJvUDJXQDoUwKtdvQrmpIEBi0y3
 WTZsPLxFwJyrpmMbU+Co+L8QSyJBQAZKmoLZCkhRAQD4sX+rIxbsi8jXuqPA4bu0ISrRGiYL
 ySi6XFn2u5N1ZJjO7CTpwivvt66mnTeoufZDC3zV3nt0A52bZXNi2eAuQmCtqYowGp0ozC8U
 Jk4dyq2tr5m4XKlznblrAAx8FaBtp643MX02wIHInXY323FFr7KVdk4DMtCDEloKN0YXjTif
 VXevwhcjLcKYiX1PfMpOtrpUZp6pUQFKTgCfqmKBuein7ArLFPXlM2QTRL4M5/RfLgEzvhkZ
 MbznTeEBncGE6V3pAdatM9EuYLGB0kWmwvueHwM50/+gOLDOCbMEe1t3ZnnRrlR0Z5oaT79q
 753X/ZmAT0DOAEiSkE7KbIuEG0=
IronPort-HdrOrdr: A9a23:d71xAauOaZv2TbTKe7UjDFgb7skDfNV00zEX/kB9WHVpmszxra
 +TdZMgpHrJYVcqKRYdcL+7WZVoLUmwyXcX2/hyAV7BZmnbUQKTRekIh7cKqweQfxEWndQy6U
 4PScRD4aXLfDtHsfo=
X-IronPort-AV: E=Sophos;i="5.96,147,1665460800"; 
   d="scan'208";a="84806152"
From: Martin Harvey <Martin.Harvey@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
CC: Martin Harvey <Martin.Harvey@citrix.com>, Martin Harvey
	<martin.harvey@citrix.com>
Subject: [PATCH] Correct return codes during racy destruction (2).
Date: Tue, 8 Nov 2022 10:58:37 +0000
Message-ID: <20221108105837.1627-1-Martin.Harvey@citrix.com>
X-Mailer: git-send-email 2.25.0.windows.1
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

Signed-off-by: Martin Harvey <martin.harvey@citrix.com>
---
 src/xenbus/driver.c  | 12 ++++++++++++
 src/xenfilt/driver.c | 12 ++++++++++++
 2 files changed, 24 insertions(+)

diff --git a/src/xenbus/driver.c b/src/xenbus/driver.c
index e07de55..cd03fce 100644
--- a/src/xenbus/driver.c
+++ b/src/xenbus/driver.c
@@ -760,8 +760,20 @@ DriverDispatch(
     ASSERT3P(Dx->DeviceObject, ==, DeviceObject);
 
     if (Dx->DevicePnpState == Deleted) {
+        PIO_STACK_LOCATION StackLocation = IoGetCurrentIrpStackLocation(Irp);
+        UCHAR MajorFunction = StackLocation->MajorFunction;
+        UCHAR MinorFunction = StackLocation->MinorFunction;
         status = STATUS_NO_SUCH_DEVICE;
 
+        if (MajorFunction == IRP_MJ_PNP) {
+            if ((MinorFunction == IRP_MN_SURPRISE_REMOVAL) ||
+               (MinorFunction == IRP_MN_REMOVE_DEVICE)) {
+                /* FDO and PDO deletions can block after being marked deleted, but before IoDeleteDevice */
+                status = STATUS_SUCCESS;
+            }
+            ASSERT((MinorFunction != IRP_MN_CANCEL_REMOVE_DEVICE) && (MinorFunction != IRP_MN_CANCEL_STOP_DEVICE));
+        }
+
         Irp->IoStatus.Status = status;
         IoCompleteRequest(Irp, IO_NO_INCREMENT);
         goto done;
diff --git a/src/xenfilt/driver.c b/src/xenfilt/driver.c
index 8a8396e..6e00485 100644
--- a/src/xenfilt/driver.c
+++ b/src/xenfilt/driver.c
@@ -862,8 +862,20 @@ DriverDispatch(
     ASSERT3P(Dx->DeviceObject, ==, DeviceObject);
 
     if (Dx->DevicePnpState == Deleted) {
+        PIO_STACK_LOCATION StackLocation = IoGetCurrentIrpStackLocation(Irp);
+        UCHAR MajorFunction = StackLocation->MajorFunction;
+        UCHAR MinorFunction = StackLocation->MinorFunction;
         status = STATUS_NO_SUCH_DEVICE;
 
+        if (MajorFunction == IRP_MJ_PNP) {
+            if ((MinorFunction == IRP_MN_SURPRISE_REMOVAL) ||
+               (MinorFunction == IRP_MN_REMOVE_DEVICE)) {
+                /* FDO and PDO deletions can block after being marked deleted, but before IoDeleteDevice */
+                status = STATUS_SUCCESS;
+            }
+            ASSERT((MinorFunction != IRP_MN_CANCEL_REMOVE_DEVICE) && (MinorFunction != IRP_MN_CANCEL_STOP_DEVICE));
+        }
+
         Irp->IoStatus.Status = status;
         IoCompleteRequest(Irp, IO_NO_INCREMENT);
         goto done;
-- 
2.25.0.windows.1



From win-pv-devel-bounces@lists.xenproject.org Tue Nov 08 10:59:32 2022
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 08 Nov 2022 10:59:32 +0000
Received: from list by lists.xenproject.org with outflank-mailman.439909.693953 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1osMKK-00019z-BR; Tue, 08 Nov 2022 10:59:32 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 439909.693953; Tue, 08 Nov 2022 10:59:32 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1osMKK-00019s-8r; Tue, 08 Nov 2022 10:59:32 +0000
Received: by outflank-mailman (input) for mailman id 439909;
 Tue, 08 Nov 2022 10:59:31 +0000
Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254]
 helo=se1-gles-sth1.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=h5nM=3I=citrix.com=prvs=30438a45d=martin.harvey@srs-se1.protection.inumbo.net>)
 id 1osMKJ-00015v-35
 for win-pv-devel@lists.xenproject.org; Tue, 08 Nov 2022 10:59:31 +0000
Received: from esa5.hc3370-68.iphmx.com (esa5.hc3370-68.iphmx.com
 [216.71.155.168]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS
 id 69f73e90-5f54-11ed-91b5-6bf2151ebd3b;
 Tue, 08 Nov 2022 11:59:29 +0100 (CET)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/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: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 69f73e90-5f54-11ed-91b5-6bf2151ebd3b
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1667905169;
  h=from:to:cc:subject:date:message-id:mime-version:
   content-transfer-encoding;
  bh=CQA9ULxLw/1e4X/dKzGaGoA59OUft6NXDUCobYVRDeE=;
  b=hIlU8E5b/4Mddt9sJEHwSgXbR47CyH4bjDiyHxhTeagQmW62DJVvLHB4
   hHURLHllgEyo5cn+sQuWVxS6m8tn9U797pe9RLXZDusUh8d0Fub3c+L7i
   LAwKhKVPd3/1TO0MdvxX17p4ydXPQLO7GFI0qOh3AaxG1CWkn7gNfWrQ1
   I=;
Authentication-Results: esa5.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
X-SBRS: None
X-MesageID: 83456625
X-Ironport-Server: esa5.hc3370-68.iphmx.com
X-Remote-IP: 162.221.156.83
X-Policy: $RELAYED
IronPort-Data: A9a23:UaQawaBWE0L+gxVW/3Hjw5YqxClBgxIJ4kV8jS/XYbTApDwghjxVz
 mZLDDyAOanZYjPxKd9wYdi/oEJVvMXWnIcyQQY4rX1jcSlH+JHPbTi7wuUcHAvJd5GeExg3h
 yk6QoOdRCzhZiaE/n9BCpC48T8nk/nNHuCnYAL9EngZbRd+Tys8gg5Ulec8g4p56fC0GArIs
 t7pyyHlEAbNNwVcbyRFtcpvlDs15K6o4WpA7gRnDRx2lAS2e0c9Xcp3yZ6ZdxMUcqEMdsamS
 uDKyq2O/2+x13/B3fv8z94X2mVTKlLjFVDmZkh+AsBOsTAbzsAG6Y4pNeJ0VKtio27hc+ada
 jl6ncfYpQ8BZsUgkQmGOvVSO3kW0aZuoNcrLZUj2CA6IoKvn3bEmp1T4E8K0YIw2N13HD1Wx
 6wjNy1caTKvmfu9zO+1Vbw57igjBJGD0II3v3hhyXfSDOo8QICFSKLPjTNa9G5u3IYUR6+YP
 pdHL2o0BPjDS0Qn1lM/DZskgOauwHn2aSNVuXqepLYt4niVxwt0uFToGIqOJoHUG58I9qqej
 nPGz3rfJT0zCP2ekzrVy06+hNDDwTyuDer+E5Xnr6U30TV/3Fc7FxwQEEOl5PW0lEO6c9ZeM
 FAPvDojq7Ao806mRcW7WAe3yENopTZFBYAWSbdjrljQlOyEuG51G1ToUBZjU9w76NcEFQc1y
 w6Ovf/3HDdj7bOKHCf1GqivkRu+Pi0cLGknbCACTBcY79SLnLzfni4jXf44Tvfr04Sd9SXYh
 mnT8XNg3+l7Ydsjjf3TwLzRv967SnElpCYR7x6fYG+q5xgRiGWNN93xsgizARqtwe+kori9U
 JoswZb2AAMmV8vleMmxrAIlTdmUCw6tamG0vLKWN8BJGvTE0yfLkXpsyD9/Plx1Fc0PZCXkZ
 kTe0SsIusEMbCf0NPcvOdzhYyjP8UQHPY27Ps04k/IUOsQhHON51H0GibGsM5DFzxF3zPBX1
 WazesewF3cKYZmLPxLvL9rwENYDmEgD+I8kbcuinkz6jeLHPCT9pHVsGALmU93VJZis+G39m
 +uz/ePTo/mDeIUSuhXqzLM=
IronPort-HdrOrdr: A9a23:Kfoiq6t70nyoqDUd42CqZemf7skDfNV00zEX/kB9WHVpmszxra
 +TdZMgpHrJYVcqKRYdcL+7WZVoLUmwyXcX2/hyAV7BZmnbUQKTRekIh7cKqweQfxEWndQy6U
 4PScRD4aXLfDtHsfo=
X-IronPort-AV: E=Sophos;i="5.96,147,1665460800"; 
   d="scan'208";a="83456625"
From: Martin Harvey <Martin.Harvey@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
CC: Martin Harvey <Martin.Harvey@citrix.com>, Martin Harvey
	<martin.harvey@citrix.com>
Subject: [PATCH] Correct return codes during racy destruction (2).
Date: Tue, 8 Nov 2022 10:59:18 +0000
Message-ID: <20221108105918.1345-1-Martin.Harvey@citrix.com>
X-Mailer: git-send-email 2.25.0.windows.1
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

Signed-off-by: Martin Harvey <martin.harvey@citrix.com>
---
 src/xencons/driver.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/src/xencons/driver.c b/src/xencons/driver.c
index 5a4d1d3..c3688c1 100644
--- a/src/xencons/driver.c
+++ b/src/xencons/driver.c
@@ -194,8 +194,20 @@ Dispatch(
     ASSERT3P(Dx->DeviceObject, ==, DeviceObject);
 
     if (Dx->DevicePnpState == Deleted) {
+        PIO_STACK_LOCATION StackLocation = IoGetCurrentIrpStackLocation(Irp);
+        UCHAR MajorFunction = StackLocation->MajorFunction;
+        UCHAR MinorFunction = StackLocation->MinorFunction;
         status = STATUS_NO_SUCH_DEVICE;
 
+        if (MajorFunction == IRP_MJ_PNP) {
+            if ((MinorFunction == IRP_MN_SURPRISE_REMOVAL) ||
+               (MinorFunction == IRP_MN_REMOVE_DEVICE)) {
+                /* FDO and PDO deletions can block after being marked deleted, but before IoDeleteDevice */
+                status = STATUS_SUCCESS;
+            }
+            ASSERT((MinorFunction != IRP_MN_CANCEL_REMOVE_DEVICE) && (MinorFunction != IRP_MN_CANCEL_STOP_DEVICE));
+        }
+
         Irp->IoStatus.Status = status;
         IoCompleteRequest(Irp, IO_NO_INCREMENT);
         goto done;
-- 
2.25.0.windows.1



From win-pv-devel-bounces@lists.xenproject.org Tue Nov 08 11:00:09 2022
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 08 Nov 2022 11:00:09 +0000
Received: from list by lists.xenproject.org with outflank-mailman.439918.693970 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1osMKv-0002Ro-R6; Tue, 08 Nov 2022 11:00:09 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 439918.693970; Tue, 08 Nov 2022 11:00:09 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1osMKv-0002Rh-NC; Tue, 08 Nov 2022 11:00:09 +0000
Received: by outflank-mailman (input) for mailman id 439918;
 Tue, 08 Nov 2022 11:00:08 +0000
Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254]
 helo=se1-gles-sth1.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=h5nM=3I=citrix.com=prvs=30438a45d=martin.harvey@srs-se1.protection.inumbo.net>)
 id 1osMKu-00015v-76
 for win-pv-devel@lists.xenproject.org; Tue, 08 Nov 2022 11:00:08 +0000
Received: from esa1.hc3370-68.iphmx.com (esa1.hc3370-68.iphmx.com
 [216.71.145.142]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS
 id 808ba414-5f54-11ed-91b5-6bf2151ebd3b;
 Tue, 08 Nov 2022 12:00:07 +0100 (CET)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/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: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 808ba414-5f54-11ed-91b5-6bf2151ebd3b
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1667905207;
  h=from:to:cc:subject:date:message-id:mime-version:
   content-transfer-encoding;
  bh=COR4Aqe0ta/euzlgsUXc+hGrYPztGDBlScSt/pUZGAE=;
  b=huCSYNcDMut2AW0QiNBHpPoRNWnNwdLhvvM6M6BmkbKtbMMCSpdoF5iS
   HEF6ORskpw7gJ3nYGFI3DaY01B2NX6lZyaD6C+FWcKtLlF0Sx6SGnI0L4
   Y/RlZD7zbhpxvhXa6hE3l1nFtdMH0VABlC2Uq3x8jURJaeima5ghtaGaU
   s=;
Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
X-SBRS: None
X-MesageID: 84806227
X-Ironport-Server: esa1.hc3370-68.iphmx.com
X-Remote-IP: 162.221.156.83
X-Policy: $RELAYED
IronPort-Data: A9a23:5zHX3Kg/+4bT46AhycBkFuq9X161OBAKZh0ujC45NGQN5FlHY01je
 htvWmqFbqmIZ2CmeNEnPI7k/RhUscfdyddkSQptrXozRigb9cadCdqndUqhZCn6wu8v7q5Ex
 55HNoSfdpBcolv0/ErF3m3J9CEkvU2wbuOgTrWCYmUpH1QMpB4J0XpLg/Q+jpNjne+3CgaMv
 cKai8DEMRqu1iUc3lg8sspvkzsy+qWs0N8klgZmP6oS5QeOzyB94K83fsldEVOpGuG4IcbiL
 wrz5OnR1n/U+R4rFuSknt7TGqHdauePVeQmoiM+t5mK2nCulARrukoIHKN0hXNsoyeIh7hMJ
 OBl7vRcf+uL0prkw4zxWzEAe8130DYvFLXveRBTuuTLp6HKnueFL1yDwyjaMKVBktubD12i+
 tRFDXMdQC2p39uJxaCKcrNxtMgAcOXkadZ3VnFIlVk1DN4jSJHHBa7L+cVZzHE7gcUm8fT2P
 pRDL2A1NVKZPkMJagx/5JEWxY9EglH6eidEqVTTpaMt/WXC5AdwzKLsIJzefdniqcB9zhrI/
 jycpTuR7hcyEfKt5z6k/H+WmNSMlCP8Bo1KL+ex36s/6LGU7jNKU0BHPbehmtGmi0j7Q8waJ
 0EK9y4Gqakp6FftXtT7Rwe/onOPolgbQdU4LgEhwFjTkOyOuV/fXzVaCG4aADA7iCMobWEPl
 U+novmxPANqooytE2+v+pTIgTznbED5MlQ+TSMDSAIE5fzqr4cykg/DQ75fLUKlsjHmMWqum
 m7X9UDSk51W1JdWjPvjoTgrlhr2/vD0ohgJChI7t45Pxidwf8abaoOh8jA3Bt4Qfd/CHjFtU
 JXp8vVyDdzi77nXykRho81XRtlFAspp1xWN6WOD57F7q1yQF4eLJOi9IFhWfS+FyPosdz7ze
 1P0sghM/pJVN3bCRfYpPd3hV5pzlfC6S4SNuhXogj1mO8YZSeN61Hs2OR74M57FzCDAbp3Ty
 b/EKJ3xXB72+IxszSasRvd17FPY7nlW+I4SLLilpymaPU22PyfEEepZaALWNIjULsqs+W3oz
 jqWDOPSoz03bQE0SnC/HVI7RbzSEUUGOA==
IronPort-HdrOrdr: A9a23:+Mc676k5Yks5DZbqb0j/dBMAibDpDfIm3DAbv31ZSRFFG/Fxl6
 iV88jzsiWE7Qr5OUtQ/uxoV5PgfZqxz/NICOoqTNWftWvd2FdARbsKheCJ/9SJIVybygc378
 ldmsZFZOEYdWIK7vrH3A==
X-IronPort-AV: E=Sophos;i="5.96,147,1665460800"; 
   d="scan'208";a="84806227"
From: Martin Harvey <Martin.Harvey@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
CC: Martin Harvey <Martin.Harvey@citrix.com>, Martin Harvey
	<martin.harvey@citrix.com>
Subject: [PATCH] Correct return codes during racy destruction (2).
Date: Tue, 8 Nov 2022 10:59:55 +0000
Message-ID: <20221108105955.1741-1-Martin.Harvey@citrix.com>
X-Mailer: git-send-email 2.25.0.windows.1
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

Signed-off-by: Martin Harvey <martin.harvey@citrix.com>
---
 src/xeniface/driver.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/src/xeniface/driver.c b/src/xeniface/driver.c
index db41cfe..246bf7a 100644
--- a/src/xeniface/driver.c
+++ b/src/xeniface/driver.c
@@ -108,8 +108,20 @@ Dispatch(
     ASSERT3P(Dx->DeviceObject, ==, DeviceObject);
 
     if (Dx->DevicePnpState == Deleted) {
+        PIO_STACK_LOCATION StackLocation = IoGetCurrentIrpStackLocation(Irp);
+        UCHAR MajorFunction = StackLocation->MajorFunction;
+        UCHAR MinorFunction = StackLocation->MinorFunction;
         status = STATUS_NO_SUCH_DEVICE;
 
+        if (MajorFunction == IRP_MJ_PNP) {
+            if ((MinorFunction == IRP_MN_SURPRISE_REMOVAL) ||
+               (MinorFunction == IRP_MN_REMOVE_DEVICE)) {
+                /* FDO and PDO deletions can block after being marked deleted, but before IoDeleteDevice */
+                status = STATUS_SUCCESS;
+            }
+            ASSERT((MinorFunction != IRP_MN_CANCEL_REMOVE_DEVICE) && (MinorFunction != IRP_MN_CANCEL_STOP_DEVICE));
+        }
+
         Irp->IoStatus.Status = status;
         IoCompleteRequest(Irp, IO_NO_INCREMENT);
         goto done;
-- 
2.25.0.windows.1



From win-pv-devel-bounces@lists.xenproject.org Tue Nov 08 11:01:01 2022
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 08 Nov 2022 11:01:01 +0000
Received: from list by lists.xenproject.org with outflank-mailman.439929.693972 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1osMLk-0002im-Tb; Tue, 08 Nov 2022 11:01:00 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 439929.693972; Tue, 08 Nov 2022 11:01:00 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1osMLk-0002if-Qe; Tue, 08 Nov 2022 11:01:00 +0000
Received: by outflank-mailman (input) for mailman id 439929;
 Tue, 08 Nov 2022 11:00:59 +0000
Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50]
 helo=se1-gles-flk1.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=h5nM=3I=citrix.com=prvs=30438a45d=martin.harvey@srs-se1.protection.inumbo.net>)
 id 1osMLj-0002fq-2E
 for win-pv-devel@lists.xenproject.org; Tue, 08 Nov 2022 11:00:59 +0000
Received: from esa6.hc3370-68.iphmx.com (esa6.hc3370-68.iphmx.com
 [216.71.155.175]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS
 id 9d238639-5f54-11ed-8fd1-01056ac49cbb;
 Tue, 08 Nov 2022 12:00:57 +0100 (CET)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/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: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 9d238639-5f54-11ed-8fd1-01056ac49cbb
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1667905257;
  h=from:to:cc:subject:date:message-id:mime-version:
   content-transfer-encoding;
  bh=8a8ELjuRvTI+AO7/530+2qf5Hr0/PF3XWpUsYlkf9Gc=;
  b=QA3sSWMAFSzBHH2ihQ2NN8CpPKo2RSIAZx520JqZMqF0NCLU86w62nxe
   lcxTkt3RhC5IhIlCJe8ukr9xylWG6zk0p/ZPH0hYOqrnwGRRaiZjzy7I9
   02nHwK3Rg9vk83m2iN3W+0N2CbiOsEro2OaF7Dis0n+LdRWMS3KIqSa0I
   w=;
Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
X-SBRS: None
X-MesageID: 83974992
X-Ironport-Server: esa6.hc3370-68.iphmx.com
X-Remote-IP: 162.221.156.83
X-Policy: $RELAYED
IronPort-Data: A9a23:oxIipKCyxi+G/BVW/3Hjw5YqxClBgxIJ4kV8jS/XYbTApGtwgmQHn
 GAXXTyFbqrYMzageY9+aovi9ksC7cXXyNRkQQY4rX1jcSlH+JHPbTi7wuUcHAvJd5GeExg3h
 yk6QoOdRCzhZiaE/n9BCpC48T8nk/nNHuCnYAL9EngZbRd+Tys8gg5Ulec8g4p56fC0GArIs
 t7pyyHlEAbNNwVcbyRFtcpvlDs15K6o4WpA7gRnDRx2lAS2e0c9Xcp3yZ6ZdxMUcqEMdsamS
 uDKyq2O/2+x13/B3fv8z94X2mVTKlLjFVDmZkh+AsBOsTAbzsAG6Y4pNeJ0VKtio27hc+ada
 jl6ncfYpQ8BZsUgkQmGOvVSO3kW0aZuoNcrLZUj2CA6IoKvn3bEmp1T4E8K0YIw2f1lGkh27
 /UkDCkWXzmymcWI3YnjVbw57igjBJGD0II3v3hhyXfSDOo8QICFSKLPjTNa9G5u3IYUR6+YP
 pdHL2o0BPjDS0Qn1lM/DZskgOauwHn2aSNVuXqepLYt4niVxwt0uFToGIqOK4PWFJQP9qqej
 n+f5Er+OTxdDvDB6B2n0SOsg+/XoCyuDer+E5Xnr6U30TV/3Fc7FxwQEEOl5PW0lEO6c9ZeM
 FAPvDojq7Ao806mRcW7WAe3yENopTZFBYAWSbdjrljQlOyEuG51G1ToUBZic849nfcsTAAOz
 0S4tuL3IgJyi+WKHCf1GqivkRu+Pi0cLGknbCACTBcY79SLnLzfni4jXf44Tvfr04Sd9SXYh
 mnT8XNg3+l7Ydsjjf3TwLzRv967SnElpCYR7x6fYG+q5xgRiGWNN93xsgizARqtwe+kori9U
 JoswZb2AAMmV8vleMmxrAIlTdmUCw6tamG0vLKWN8BJGvTE0yfLkXpsyD9/Plx1Fc0PZCXkZ
 kTe0SsIusEMbCf0NPcvOdzhYyjP8UQHPY27Ps04k/IUOsQhHON51H0GibGsM5DFzxF3zPBX1
 WazesewF3cKYZmLPxLvL9rwENYDmEgD+I8kbcumkkX6iOLFOCD9pHVsGALmU93VJZis+G39m
 +uz/ePTo/mDeIUSuhXqzLM=
IronPort-HdrOrdr: A9a23:BR0Iqal4yIZZZVaD59JZ1Pdvhl7pDfIm3DAbv31ZSRFFG/Fxl6
 iV88jzsiWE7Qr5OUtQ/uxoV5PgfZqxz/NICOoqTNWftWvd2FdARbsKheCJ/9SJIVybygc378
 ldmsZFZOEYdWIK7vrH3A==
X-IronPort-AV: E=Sophos;i="5.96,147,1665460800"; 
   d="scan'208";a="83974992"
From: Martin Harvey <Martin.Harvey@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
CC: Martin Harvey <Martin.Harvey@citrix.com>, Martin Harvey
	<martin.harvey@citrix.com>
Subject: [PATCH] Correct return codes during racy destruction (2).
Date: Tue, 8 Nov 2022 11:00:44 +0000
Message-ID: <20221108110044.1039-1-Martin.Harvey@citrix.com>
X-Mailer: git-send-email 2.25.0.windows.1
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

Signed-off-by: Martin Harvey <martin.harvey@citrix.com>
---
 src/xendisk/driver.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/src/xendisk/driver.c b/src/xendisk/driver.c
index 4b004c5..c165c90 100644
--- a/src/xendisk/driver.c
+++ b/src/xendisk/driver.c
@@ -170,8 +170,20 @@ Dispatch(
     ASSERT3P(Dx->DeviceObject, ==, DeviceObject);
 
     if (Dx->DevicePnpState == Deleted) {
+        PIO_STACK_LOCATION StackLocation = IoGetCurrentIrpStackLocation(Irp);
+        UCHAR MajorFunction = StackLocation->MajorFunction;
+        UCHAR MinorFunction = StackLocation->MinorFunction;
         status = STATUS_NO_SUCH_DEVICE;
 
+        if (MajorFunction == IRP_MJ_PNP) {
+            if ((MinorFunction == IRP_MN_SURPRISE_REMOVAL) ||
+               (MinorFunction == IRP_MN_REMOVE_DEVICE)) {
+                /* FDO and PDO deletions can block after being marked deleted, but before IoDeleteDevice */
+                status = STATUS_SUCCESS;
+            }
+            ASSERT((MinorFunction != IRP_MN_CANCEL_REMOVE_DEVICE) && (MinorFunction != IRP_MN_CANCEL_STOP_DEVICE));
+        }
+
         Irp->IoStatus.Status = status;
         IoCompleteRequest(Irp, IO_NO_INCREMENT);
         goto done;
-- 
2.25.0.windows.1



From win-pv-devel-bounces@lists.xenproject.org Tue Nov 08 11:05:11 2022
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 08 Nov 2022 11:05:11 +0000
Received: from list by lists.xenproject.org with outflank-mailman.439943.693988 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1osMPl-0003fA-HM; Tue, 08 Nov 2022 11:05:09 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 439943.693988; Tue, 08 Nov 2022 11:05:09 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1osMPl-0003f2-EN; Tue, 08 Nov 2022 11:05:09 +0000
Received: by outflank-mailman (input) for mailman id 439943;
 Tue, 08 Nov 2022 11:05:08 +0000
Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254]
 helo=se1-gles-sth1.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=h5nM=3I=citrix.com=prvs=30438a45d=martin.harvey@srs-se1.protection.inumbo.net>)
 id 1osMMI-00015v-ET
 for win-pv-devel@lists.xenproject.org; Tue, 08 Nov 2022 11:01:34 +0000
Received: from esa1.hc3370-68.iphmx.com (esa1.hc3370-68.iphmx.com
 [216.71.145.142]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS
 id b3f4edff-5f54-11ed-91b5-6bf2151ebd3b;
 Tue, 08 Nov 2022 12:01:33 +0100 (CET)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/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: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: b3f4edff-5f54-11ed-91b5-6bf2151ebd3b
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1667905293;
  h=from:to:cc:subject:date:message-id:mime-version:
   content-transfer-encoding;
  bh=6YvR1fRdSVoKfJjm/dUClTWl54ZdBORWttLcgq3s70A=;
  b=MaLRnX6b/RCyO0Z25uohgDJk6DBWA0fDug8CV4lA13zla1+iM1fjtrQD
   /+/ayB7Rc3F1OYxhVjksDEdJu4EQS1/QqWhPE9F8sxmqabRk4/knS5YFc
   aNFTCf+qosMe42F8JDli3XNheHwV4zfIokzq4OgKxmCTll6012s+wjmmw
   4=;
Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
X-SBRS: None
X-MesageID: 84806426
X-Ironport-Server: esa1.hc3370-68.iphmx.com
X-Remote-IP: 162.221.156.83
X-Policy: $RELAYED
IronPort-Data: A9a23:KBF1v60+QPk1xFWR1PbD5Ytxkn2cJEfYwER7XKvMYLTBsI5bp2ZUn
 zEXWTrUOa3eMGLxfdxyPNjgoB4OvZfTx9IyS1BtpC1hF35El5HIVI+TRqvS04F+DeWYFR46s
 J9OAjXkBJppJpMJjk71atANlVEliefTAOK5ULSfUsxIbVcMYD87jh5+kPIOjIdtgNyoayuAo
 tq3qMDEULOf82cc3lk8tuTS9nuDgNyo4GlC5wVmNagS1LPjvyJ94Kw3dPnZw0TQGuG4LsbiL
 87fwbew+H/u/htFIrtJRZ6iLyXm6paLVeS/oiI+t5qK23CulQRrukoPD9IOaF8/ttm8t4sZJ
 OOhF3CHYVxB0qXkwIzxWvTDes10FfUuFLTveRBTvSEPpqFvnrSFL/hGVSkL0YMkFulfAUIR+
 e4nNjcxZFOBgLmU4fWlQ9dlmZF2RCXrFNt3VnBIyDjYCbAtQIzZQrWM7thdtNsyrpkQR7CEP
 ZNfMGcxKkSbC/FMEg5/5JYWme6ymnj5NT1RskyYtII84nTJzRw327/oWDbQUozWFZ0LwhzGz
 o7A10/7LAggbv+W9RaM2Wy92uP0gA3FB41HQdVU8dY12QbOlwT/EiY+Slq95OGnz0KzRd9bA
 0gV4TY167g/8lSxSdvwVAH+p2SL1iPwQPIJTbd8slvUjPOJvUDJXQDoUwKtdvQml5A6VwM00
 WOD3NHuXh5O96Ocd3uCo+L8QSyJBQAZKmoLZCkhRAQD4sX+rIxbsi8jXuqPA4bu0ISrRGiYL
 ySi6XFn2u5N1ZJjO7CTpwivvt66mnTeoufZDC3zV3nt0A52bZXNi2eAuQmCtqYowGp0ozC8U
 Jk4dyq2tr5m4XKlznblrAAx8FaBtp643MX02wIHInXY323FFr7KVdk4DMtCDEloKN0YXjTif
 VXevwhcjLcKYiX1PfMpOtrpUZp6pUQFKTgCfqmKBuein7ArLFPXlM2QTRL4M5/RfLgEzvhkZ
 MbznTeEBncGE6V3pAdatM9EuYLGB0kWmwvueHwM50/6jOvDPSbOFelt3ZnnRrlR0Z5oaT79q
 753X/ZmAT0FOAEiSkE7KbIuEG0=
IronPort-HdrOrdr: A9a23:uALrVK+9wzejWpdP2jxuk+DSI+orL9Y04lQ7vn2YSXRuHfBw8P
 re+cjztCWE7wr5N0tApTntAsS9qBDnhPxICOsqXYtKNTOO0ADDEGgL1/qH/9SKIUPDH4BmuZ
 uIC5IOa+HNMQ==
X-IronPort-AV: E=Sophos;i="5.96,147,1665460800"; 
   d="scan'208";a="84806426"
From: Martin Harvey <Martin.Harvey@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
CC: Martin Harvey <Martin.Harvey@citrix.com>, Martin Harvey
	<martin.harvey@citrix.com>
Subject: [PATCH] Correct return codes during racy destruction (2).
Date: Tue, 8 Nov 2022 11:01:22 +0000
Message-ID: <20221108110122.1644-1-Martin.Harvey@citrix.com>
X-Mailer: git-send-email 2.25.0.windows.1
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

Signed-off-by: Martin Harvey <martin.harvey@citrix.com>
---
 src/xenvif/driver.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/src/xenvif/driver.c b/src/xenvif/driver.c
index 8bc097a..cac0cee 100644
--- a/src/xenvif/driver.c
+++ b/src/xenvif/driver.c
@@ -350,8 +350,20 @@ Dispatch(
     ASSERT3P(Dx->DeviceObject, ==, DeviceObject);
 
     if (Dx->DevicePnpState == Deleted) {
+        PIO_STACK_LOCATION StackLocation = IoGetCurrentIrpStackLocation(Irp);
+        UCHAR MajorFunction = StackLocation->MajorFunction;
+        UCHAR MinorFunction = StackLocation->MinorFunction;
         status = STATUS_NO_SUCH_DEVICE;
 
+        if (MajorFunction == IRP_MJ_PNP) {
+            if ((MinorFunction == IRP_MN_SURPRISE_REMOVAL) ||
+               (MinorFunction == IRP_MN_REMOVE_DEVICE)) {
+                /* FDO and PDO deletions can block after being marked deleted, but before IoDeleteDevice */
+                status = STATUS_SUCCESS;
+            }
+            ASSERT((MinorFunction != IRP_MN_CANCEL_REMOVE_DEVICE) && (MinorFunction != IRP_MN_CANCEL_STOP_DEVICE));
+        }
+
         Irp->IoStatus.Status = status;
         IoCompleteRequest(Irp, IO_NO_INCREMENT);
         goto done;
-- 
2.25.0.windows.1



From win-pv-devel-bounces@lists.xenproject.org Tue Nov 08 11:12:27 2022
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 08 Nov 2022 11:12:27 +0000
Received: from list by lists.xenproject.org with outflank-mailman.439953.693991 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1osMWo-0004dP-2S; Tue, 08 Nov 2022 11:12:26 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 439953.693991; Tue, 08 Nov 2022 11:12:26 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1osMWn-0004dI-W8; Tue, 08 Nov 2022 11:12:25 +0000
Received: by outflank-mailman (input) for mailman id 439953;
 Tue, 08 Nov 2022 11:12:25 +0000
Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50]
 helo=se1-gles-flk1.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=P4OT=3I=gmail.com=xadimgnik@srs-se1.protection.inumbo.net>)
 id 1osMWn-0004dC-KS
 for win-pv-devel@lists.xenproject.org; Tue, 08 Nov 2022 11:12:25 +0000
Received: from mail-wr1-x42e.google.com (mail-wr1-x42e.google.com
 [2a00:1450:4864:20::42e])
 by se1-gles-flk1.inumbo.com (Halon) with ESMTPS
 id 38e0ed85-5f56-11ed-8fd1-01056ac49cbb;
 Tue, 08 Nov 2022 12:12:24 +0100 (CET)
Received: by mail-wr1-x42e.google.com with SMTP id z14so20417669wrn.7
 for <win-pv-devel@lists.xenproject.org>; Tue, 08 Nov 2022 03:12:24 -0800 (PST)
Received: from [192.168.18.106] (54-240-197-231.amazon.com. [54.240.197.231])
 by smtp.gmail.com with ESMTPSA id
 bn9-20020a056000060900b00228cd9f6349sm9933098wrb.106.2022.11.08.03.12.23
 for <win-pv-devel@lists.xenproject.org>
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Tue, 08 Nov 2022 03:12:23 -0800 (PST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/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: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 38e0ed85-5f56-11ed-8fd1-01056ac49cbb
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20210112;
        h=content-transfer-encoding:in-reply-to:organization:content-language
         :references:to:subject:user-agent:mime-version:date:message-id:from
         :from:to:cc:subject:date:message-id:reply-to;
        bh=3GVCnzgYC4sVyotIELNtDs5MVQCXL0ugqhcBfpEMtpE=;
        b=e1nj+JhkE3ycELwy70rAjCG++nHFmQlqf8Y3TkNw9cj0omHhS783sxNqaH4oNNv799
         O8pi0NteyA1SbLrj9amgMABNG4bODBL1YXSMdaHM4ufByZrhJHuiFsfFoLHpkbOFxo2T
         VZULp+CLhFS/bY0+J9iaMIluDZnVFhFBOS9NSdk//MPAZ2KifbL3tC4LVx3nZH7W6WZ0
         BmBlA8bF6Bd0AoMmzi3L5gntnyvwdAf5XhyV+ry+UBk4RUBVGhB5y80++39J4imCmDML
         uVv6xVbF7mzpPh3qUWiwEH0/IqG+HKfG9HFlVMfPrKGsQkWoRqO6543iDeq0wdSUnwYZ
         b+tw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20210112;
        h=content-transfer-encoding:in-reply-to:organization:content-language
         :references:to:subject:user-agent:mime-version:date:message-id:from
         :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;
        bh=3GVCnzgYC4sVyotIELNtDs5MVQCXL0ugqhcBfpEMtpE=;
        b=gB+91CcYlZizyodpJul+8rriwph8sOnRU4Sf0+54hO4TsegzSz7ORNuZxdHKh4P3Hq
         xelFKiNQwVZ1q8JDKZ/qw/Wfy5uPv6fBEMbywUfsr5IYCNhWiId0DQmNfmjscVy9DUKv
         aGjdRkpJHOdQyGnLodpUo7EpbQkmc9/meP88vMXiunWduZZLpHKMmlq2JQE5usxrojrG
         6uYENClc9AvBDIgbGy/cnpXwxbEdNxS9T+BtZ5PH4R4cRpgiAb+zEvUrh4+ez8FBeeYG
         uuljonBHevUea2CZzcdiX6gfGZGFIed5oN2ZvFk/ZDYkbPP73mV6Gn6hlZCE4zRANpYE
         JF8A==
X-Gm-Message-State: ACrzQf3tzN7F+vXjzU0LfK4FNaZjHM5KqssKUfl3OtYE3R+Hqj20oLmU
	IU+p+6KYp5wqXniocVW/trPSU/Cn7GWQUw==
X-Google-Smtp-Source: AMsMyM79drLskbQCK82Ui54DIkegLX0P/1buJmKJ4tQR9HKnMAT/NMxYKZshxIczqtgo1gpjMrJxtQ==
X-Received: by 2002:adf:f092:0:b0:236:6753:cc3a with SMTP id n18-20020adff092000000b002366753cc3amr35550173wro.62.1667905944113;
        Tue, 08 Nov 2022 03:12:24 -0800 (PST)
From: Paul Durrant <xadimgnik@gmail.com>
X-Google-Original-From: Paul Durrant <paul@xen.org>
Message-ID: <626a0d57-9537-e108-5d5d-361d3c18b03a@xen.org>
Date: Tue, 8 Nov 2022 11:12:23 +0000
MIME-Version: 1.0
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101
 Thunderbird/102.4.1
Subject: Re: [PATCH] Correct return codes during racy destruction.
To: win-pv-devel@lists.xenproject.org
References: <20221108104900.1645-1-Martin.Harvey@citrix.com>
Content-Language: en-US
Organization: Xen Project
In-Reply-To: <20221108104900.1645-1-Martin.Harvey@citrix.com>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit

On 08/11/2022 10:49, Martin Harvey wrote:

Can we have an explanatory commit comment? How did you discover the 
races (since the HLK/WLK has not complained before AFAIK)? What is the 
fall-out of the race? BSOD?

   Paul

> Signed-off-by: Martin Harvey <martin.harvey@citrix.com>
> ---
>   src/xenvif/driver.c | 12 ++++++++++++
>   1 file changed, 12 insertions(+)
> 
> diff --git a/src/xenvif/driver.c b/src/xenvif/driver.c
> index 8bc097a..cac0cee 100644
> --- a/src/xenvif/driver.c
> +++ b/src/xenvif/driver.c
> @@ -350,8 +350,20 @@ Dispatch(
>       ASSERT3P(Dx->DeviceObject, ==, DeviceObject);
>   
>       if (Dx->DevicePnpState == Deleted) {
> +        PIO_STACK_LOCATION StackLocation = IoGetCurrentIrpStackLocation(Irp);
> +        UCHAR MajorFunction = StackLocation->MajorFunction;
> +        UCHAR MinorFunction = StackLocation->MinorFunction;
>           status = STATUS_NO_SUCH_DEVICE;
>   
> +        if (MajorFunction == IRP_MJ_PNP) {
> +            if ((MinorFunction == IRP_MN_SURPRISE_REMOVAL) ||
> +               (MinorFunction == IRP_MN_REMOVE_DEVICE)) {
> +                /* FDO and PDO deletions can block after being marked deleted, but before IoDeleteDevice */
> +                status = STATUS_SUCCESS;
> +            }
> +            ASSERT((MinorFunction != IRP_MN_CANCEL_REMOVE_DEVICE) && (MinorFunction != IRP_MN_CANCEL_STOP_DEVICE));
> +        }
> +
>           Irp->IoStatus.Status = status;
>           IoCompleteRequest(Irp, IO_NO_INCREMENT);
>           goto done;



From win-pv-devel-bounces@lists.xenproject.org Tue Nov 08 11:52:38 2022
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 08 Nov 2022 11:52:38 +0000
Received: from list by lists.xenproject.org with outflank-mailman.440022.694084 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1osN9h-0005Z3-5G; Tue, 08 Nov 2022 11:52:37 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 440022.694084; Tue, 08 Nov 2022 11:52:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1osN9h-0005Yw-24; Tue, 08 Nov 2022 11:52:37 +0000
Received: by outflank-mailman (input) for mailman id 440022;
 Tue, 08 Nov 2022 11:52:36 +0000
Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50]
 helo=se1-gles-flk1.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=h5nM=3I=citrix.com=prvs=30438a45d=martin.harvey@srs-se1.protection.inumbo.net>)
 id 1osN9f-0005Yp-UZ
 for win-pv-devel@lists.xenproject.org; Tue, 08 Nov 2022 11:52:36 +0000
Received: from esa5.hc3370-68.iphmx.com (esa5.hc3370-68.iphmx.com
 [216.71.155.168]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS
 id d257da43-5f5b-11ed-8fd1-01056ac49cbb;
 Tue, 08 Nov 2022 12:52:31 +0100 (CET)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/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: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: d257da43-5f5b-11ed-8fd1-01056ac49cbb
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1667908350;
  h=from:to:cc:subject:date:message-id:mime-version:
   content-transfer-encoding;
  bh=6VMVbF15ZJ0RGfzcWJVZwK5+ikkF5PVB6ZPHDQPBtVU=;
  b=fV3UB80cL3V8tJxnpp4WXGb0pzilT1469tgcGrmppXX6ZjSi7t6gzmwd
   +C87Ifuz6Dxdn/Omsi/4DQXG2JbSU/NaJ240QU2GYoxc8cfGenjWWMPMX
   DUu9H208XacReUpeV6NIu7DXGH4fzCnoteFGLDu1I3BUjzo+yW3Od+I4P
   Q=;
Authentication-Results: esa5.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
X-SBRS: None
X-MesageID: 83459564
X-Ironport-Server: esa5.hc3370-68.iphmx.com
X-Remote-IP: 162.221.156.83
X-Policy: $RELAYED
IronPort-Data: A9a23:gx7tta+rD7C4lRiITzMhDrUD2H6TJUtcMsCJ2f8bNWPcYEJGY0x3z
 WoWWDuBaPzfamv8e4slYIvjoB8CsMODy4A1HVZspXs8E34SpcT7XtnIdU2Y0wF+jCHgZBk+s
 5hBMImowOQcFCK0SsKFa+C5xZVE/fjUAOG6UKucYHsZqTZMEE8JkQhkl/MynrlmiN24BxLlk
 d7pqojUNUTNNwRcawr40Ire7kIx1BjOkGlA5AZnPKgb5Aa2e0Q9V/rzG4ngdxMUfaEMdgKKb
 76r5K20+Grf4yAsBruN+losWhRXKlJ6FVHmZkt+A8BOsDAbzsAB+v9T2M4nQVVWk120c+VZk
 72hg3ASpTABZcUgkMxFO/VR/roX0aduoNcrKlDn2SCfItGvn9IBDJyCAWlvVbD09NqbDkke/
 O4qOWs3NSyDgszt+6+kYPFm3OMKeZyD0IM34hmMzBncBPciB5vCX7/L9ZlT2zJYasJmRKiEI
 ZBDMHw2MUqGM0Yn1lQ/UfrSmM+tj2PjcjseqFuPu6cmy2PS0BZwwP7mN9+9ltmiFZ4JwxfF+
 D6uE2LRMkA8adC58hq/wGvvvMjvsgrySYMsC+jtnhJtqALKnTFCYPEMbnOkoP/8klD7V99BJ
 kg8/is1sbN05EGtVsP6XRCzvDiDpBF0ZjZLO7RkskfXkPOSulvHQDhfJtJcVDA4nJ8/Vw47j
 WXSo9PsK2dUraK/UXjH0Z7B+FteJhMpBWMFYCYFSy4M7N/ivJw/g3rzczpzLEKmpoarQG+tm
 lhmuAB73uxO1pBTi81X6Hid21qRSo71ohnZD+k9dkas9UtHaYGsfOREAnCLvK8bfO51orRs1
 UXoevRyDshUU/lhdwTXGo3h+Y1FAN7UWAAweXY1Q/EcG82FohZOvel4uVmS3ntBPMceYiPOa
 0TOow5X75I7FCL0M/AnP9zoU5xwk/iI+THZuhf8N4QmX3SMXFXfoHEGibC4gwgBb3TAYYlgY
 MzGIK5A/F4RCLh9zSreegvu+eZD+83/rEuNLa3GI+OPiufDNSPMEexZbjNjrIkRtcu5nekcy
 P4HX+Pi9vmVeLCWjvX/mWLLEW03EA==
IronPort-HdrOrdr: A9a23:9JM3waxMU7IxHWflOs1KKrPwIL1zdoMgy1knxilNoRw8SKKlfq
 eV7ZAmPH7P+VAssR4b+exoVJPtfZq+z+8R3WByB8bAYOCOggLBR+sO0WKL+UyGJ8SUzI9gPM
 lbHJSWcOeAb2RHsQ==
X-IronPort-AV: E=Sophos;i="5.96,147,1665460800"; 
   d="scan'208";a="83459564"
From: Martin Harvey <Martin.Harvey@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
CC: Martin Harvey <Martin.Harvey@citrix.com>, Martin Harvey
	<martin.harvey@citrix.com>
Subject: [PATCH] [RFQ] Asynchronous power handling.
Date: Tue, 8 Nov 2022 11:51:55 +0000
Message-ID: <20221108115155.1733-1-Martin.Harvey@citrix.com>
X-Mailer: git-send-email 2.25.0.windows.1
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

This patch submitted for comment as part of recent efforts to improve
reliability and performance in the windows PV drivers, particularly
in the hibernate and shutdown testcases under driver verifier.

This patch is just one sample (for xenbus). We also have patches
for all the other xen* windows drivers.

Internal test results indicate that this code removes at least one
failure case on the shutdown path, and also demonstrates that an
existing interittent hibernate bug is not due to the PV driver stack.

We are performing long-term soak testing of this branch in parallel
with mainstream development to check that it solves (or ameliorates,
or aids investigation) into intermittent test failures.

We hope to provide full WHQL test results, and statistical failure
rates for this change in the coming months, as well as an analysis
of any other bugs or problems uncovered.

If this change turns out to be significantly better than the current
codebase, then we expect it will be possible to break-down this
patch into small pieces (by file or by device object) for easier
merging and integration.

Signed-off-by: Martin Harvey <martin.harvey@citrix.com>
---
 src/xenbus/fdo.c   | 1051 +++++++++++++++++++++++++++++---------------
 src/xenbus/pdo.c   |  302 ++++++-------
 src/xenbus/store.c |    6 +-
 src/xenbus/types.h |    5 +
 src/xenfilt/fdo.c  |  600 +++++++------------------
 src/xenfilt/pdo.c  |  611 +++++++------------------
 6 files changed, 1166 insertions(+), 1409 deletions(-)

diff --git a/src/xenbus/fdo.c b/src/xenbus/fdo.c
index d08c518..9501c31 100644
--- a/src/xenbus/fdo.c
+++ b/src/xenbus/fdo.c
@@ -63,6 +63,7 @@
 #include "dbg_print.h"
 #include "assert.h"
 #include "util.h"
+#include "types.h"
 
 #define XENBUS_FDO_TAG 'ODF'
 
@@ -106,11 +107,6 @@ struct _XENBUS_FDO {
     ULONG                           Usage[DeviceUsageTypeDumpFile + 1];
     BOOLEAN                         NotDisableable;
 
-    PXENBUS_THREAD                  SystemPowerThread;
-    PIRP                            SystemPowerIrp;
-    PXENBUS_THREAD                  DevicePowerThread;
-    PIRP                            DevicePowerIrp;
-
     CHAR                            VendorName[MAXNAMELEN];
 
     MUTEX                           Mutex;
@@ -168,6 +164,11 @@ struct _XENBUS_FDO {
     PXENBUS_SUSPEND_CALLBACK        SuspendCallbackLate;
     BOOLEAN                         ConsoleAcquired;
     PLOG_DISPOSITION                LogDisposition;
+
+    PIO_WORKITEM                     FdoSPowerWorkItem;
+    XENBUS_POWER_WORKITEM_CONTEXT FdoSPowerContext;
+    PIO_WORKITEM                     FdoDPowerWorkItem;
+    XENBUS_POWER_WORKITEM_CONTEXT FdoDPowerContext;
 };
 
 static FORCEINLINE PVOID
@@ -4585,6 +4586,9 @@ FdoQueryCapabilities(
         DEVICE_POWER_STATE  DevicePowerState;
 
         DevicePowerState = Fdo->LowerDeviceCapabilities.DeviceState[SystemPowerState];
+        Trace("PowerCaps: SystemState: %s (%u), best device power: %s (%u)\n",
+            SystemPowerStateName(SystemPowerState), SystemPowerState,
+            DevicePowerStateName(DevicePowerState), DevicePowerState);
     }
 
     IoCompleteRequest(Irp, IO_NO_INCREMENT);
@@ -4775,42 +4779,142 @@ FdoDispatchPnp(
     return status;
 }
 
+VOID _FdoD3toD0PowerWorker(
+  IN PDEVICE_OBJECT DeviceObject,
+  IN PVOID Context
+  )
+{
+    PXENBUS_POWER_WORKITEM_CONTEXT PowerContext = (PXENBUS_POWER_WORKITEM_CONTEXT)Context;
+    PXENBUS_FDO     Fdo = (PXENBUS_FDO) PowerContext->FdoOrPdo;
+    PIRP              Irp;
+    NTSTATUS          status;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
+
+    Irp = InterlockedExchangePointer(&PowerContext->Irp, NULL);
+    ASSERT(Irp != NULL);
+
+    status = FdoD3ToD0(Fdo);
+    if (!NT_SUCCESS(status))
+        Error("fail1 - but continue IRP processing. (%08x)\n", status);
+
+    /* Cannot change Irp->IoStatus */
+    /* Continue completion chain */
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+}
+
+VOID FdoD3toD0PowerWorker(
+    IN PXENBUS_FDO     Fdo,
+    IN PIRP              Irp
+)
+{
+    PVOID Exchange;
+
+    ASSERT(Fdo->FdoDPowerContext.FdoOrPdo == Fdo);
+    Exchange = InterlockedExchangePointer(&Fdo->FdoDPowerContext.Irp, Irp);
+    ASSERT(Exchange == NULL);
+
+    IoQueueWorkItem(Fdo->FdoDPowerWorkItem,
+                    _FdoD3toD0PowerWorker,
+                    DelayedWorkQueue,
+                    &Fdo->FdoDPowerContext);
+}
+
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
+static NTSTATUS
+FdoCompleteSetDevicePowerUp(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
+    )
+{
+    PXENBUS_FDO     Fdo = (PXENBUS_FDO) Context;
+    PIO_STACK_LOCATION StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    DEVICE_POWER_STATE DeviceState = StackLocation->Parameters.Power.State.DeviceState;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
+
+    /* Already marked pending by us */
+    Info("%s -> %s\n",
+         DevicePowerStateName(__FdoGetDevicePowerState(Fdo)),
+         DevicePowerStateName(DeviceState));
+
+    /* Don't worry about IRP IoStatus */
+    ASSERT3U(DeviceState, ==, PowerDeviceD0);
+    FdoD3toD0PowerWorker(Fdo, Irp);
+
+    /* Stop completion chain in all circumstances. */
+    return STATUS_MORE_PROCESSING_REQUIRED;
+}
+
 static NTSTATUS
-FdoSetDevicePowerUp(
+FdoDispatchSetDevicePowerUp(
     IN  PXENBUS_FDO     Fdo,
     IN  PIRP            Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
     DEVICE_POWER_STATE  DeviceState;
-    NTSTATUS            status;
+
+    Trace("====>\n");
 
     StackLocation = IoGetCurrentIrpStackLocation(Irp);
     DeviceState = StackLocation->Parameters.Power.State.DeviceState;
 
     ASSERT3U(DeviceState, <,  __FdoGetDevicePowerState(Fdo));
 
-    status = FdoForwardIrpSynchronously(Fdo, Irp);
-    if (!NT_SUCCESS(status))
-        goto done;
+    IoMarkIrpPending(Irp);
+    IoCopyCurrentIrpStackLocationToNext(Irp);
+    IoSetCompletionRoutine(Irp,
+                           FdoCompleteSetDevicePowerUp,
+                           Fdo,
+                           TRUE,
+                           TRUE,
+                           TRUE);
+    IoCallDriver(Fdo->LowerDeviceObject, Irp);
+    return STATUS_PENDING;
+}
 
-    Info("%s: %s -> %s\n",
-         __FdoGetName(Fdo),
-         DevicePowerStateName(__FdoGetDevicePowerState(Fdo)),
-         DevicePowerStateName(DeviceState));
+VOID _FdoD0toD3PowerWorker(
+  IN PDEVICE_OBJECT DeviceObject,
+  IN PVOID Context
+  )
+{
+    PXENBUS_POWER_WORKITEM_CONTEXT PowerContext = (PXENBUS_POWER_WORKITEM_CONTEXT)Context;
+    PXENBUS_FDO     Fdo = (PXENBUS_FDO) PowerContext->FdoOrPdo;
+    PIRP              Irp;
 
-    ASSERT3U(DeviceState, ==, PowerDeviceD0);
-    status = FdoD3ToD0(Fdo);
-    ASSERT(NT_SUCCESS(status));
+    UNREFERENCED_PARAMETER(DeviceObject);
 
-done:
-    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+    Irp = InterlockedExchangePointer(&PowerContext->Irp, NULL);
+    ASSERT(Irp != NULL);
 
-    return status;
+    FdoD0ToD3(Fdo);
+    /* We are on dispatch path here, irp pended. */
+    IoCopyCurrentIrpStackLocationToNext(Irp);
+    IoCallDriver(Fdo->LowerDeviceObject, Irp);
+}
+
+VOID FdoD0ToD3PowerWorker(
+    IN PXENBUS_FDO     Fdo,
+    IN PIRP              Irp
+)
+{
+    PVOID Exchange;
+
+    ASSERT(Fdo->FdoDPowerContext.FdoOrPdo == Fdo);
+    Exchange = InterlockedExchangePointer(&Fdo->FdoDPowerContext.Irp, Irp);
+    ASSERT(Exchange == NULL);
+
+    IoQueueWorkItem(Fdo->FdoDPowerWorkItem,
+                    _FdoD0toD3PowerWorker,
+                    DelayedWorkQueue,
+                    &Fdo->FdoDPowerContext);
 }
 
 static NTSTATUS
-FdoSetDevicePowerDown(
+FdoDispatchSetDevicePowerDown(
     IN  PXENBUS_FDO     Fdo,
     IN  PIRP            Irp
     )
@@ -4831,17 +4935,22 @@ FdoSetDevicePowerDown(
 
     ASSERT3U(DeviceState, ==, PowerDeviceD3);
 
-    if (__FdoGetDevicePowerState(Fdo) == PowerDeviceD0)
-        FdoD0ToD3(Fdo);
-
-    status = FdoForwardIrpSynchronously(Fdo, Irp);
-    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+    /* All handled in dispatch, no extra error handling */
+    if (__FdoGetDevicePowerState(Fdo) == PowerDeviceD0) {
+        IoMarkIrpPending(Irp);
+        FdoD0ToD3PowerWorker(Fdo, Irp);
+        status = STATUS_PENDING;
+    } else {
+        /* Not marked pending, can skip */
+        IoSkipCurrentIrpStackLocation(Irp);
+        status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
+    }
 
     return status;
 }
 
 static NTSTATUS
-FdoSetDevicePower(
+FdoDispatchSetDevicePower(
     IN  PXENBUS_FDO     Fdo,
     IN  PIRP            Irp
     )
@@ -4859,18 +4968,16 @@ FdoSetDevicePower(
           DevicePowerStateName(DeviceState), 
           PowerActionName(PowerAction));
 
-    ASSERT3U(PowerAction, <,  PowerActionShutdown);
-
     if (DeviceState == __FdoGetDevicePowerState(Fdo)) {
-        status = FdoForwardIrpSynchronously(Fdo, Irp);
-        IoCompleteRequest(Irp, IO_NO_INCREMENT);
+        IoSkipCurrentIrpStackLocation(Irp);
+        status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
 
         goto done;
     }
 
     status = (DeviceState < __FdoGetDevicePowerState(Fdo)) ?
-             FdoSetDevicePowerUp(Fdo, Irp) :
-             FdoSetDevicePowerDown(Fdo, Irp);
+             FdoDispatchSetDevicePowerUp(Fdo, Irp) :
+             FdoDispatchSetDevicePowerDown(Fdo, Irp);
 
 done:
     Trace("<==== (%s:%s)(%08x)\n",
@@ -4880,10 +4987,34 @@ done:
     return status;
 }
 
+static NTSTATUS
+FdoRequestSetDevicePower(
+    IN  PXENBUS_FDO               Fdo,
+    IN  DEVICE_POWER_STATE          DeviceState,
+    IN  PREQUEST_POWER_COMPLETE     CompletionFunction,
+    IN  PVOID                       Context
+    )
+{
+    POWER_STATE             PowerState;
+    NTSTATUS                status;
+
+    Trace("%s\n", DevicePowerStateName(DeviceState));
+
+    PowerState.DeviceState = DeviceState;
+
+    status = PoRequestPowerIrp(Fdo->LowerDeviceObject,
+                               IRP_MN_SET_POWER,
+                               PowerState,
+                               CompletionFunction,
+                               Context,
+                               NULL);
+    return status;
+}
+
 __drv_functionClass(REQUEST_POWER_COMPLETE)
 __drv_sameIRQL
 VOID
-FdoRequestSetDevicePowerCompletion(
+FdoCompleteSetSystemPowerUp2(
     IN  PDEVICE_OBJECT      DeviceObject,
     IN  UCHAR               MinorFunction,
     IN  POWER_STATE         PowerState,
@@ -4891,112 +5022,238 @@ FdoRequestSetDevicePowerCompletion(
     IN  PIO_STATUS_BLOCK    IoStatus
     )
 {
-    PKEVENT                 Event = Context;
+    PIRP            Irp = (PIRP) Context;
 
     UNREFERENCED_PARAMETER(DeviceObject);
     UNREFERENCED_PARAMETER(MinorFunction);
     UNREFERENCED_PARAMETER(PowerState);
+    UNREFERENCED_PARAMETER(IoStatus);
 
-    ASSERT(NT_SUCCESS(IoStatus->Status));
+    /* Although can change Irp->IoStatus for pended IRP, drivers should not fail this. */
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+}
 
-    KeSetEvent(Event, IO_NO_INCREMENT, FALSE);
+static NTSTATUS
+FdoCompleteSetSystemPowerUpTail(
+    IN PXENBUS_FDO     Fdo,
+    IN PIRP              Irp
+)
+{
+    PIO_STACK_LOCATION  StackLocation = IoGetCurrentIrpStackLocation(Irp);;
+    SYSTEM_POWER_STATE  SystemState = StackLocation->Parameters.Power.State.SystemState;
+    DEVICE_POWER_STATE  DeviceState;
+    /* This executes in two contexts:
+       1. When we are in the completion routine FdoCompleteSetSystemPowerUp
+       2. When we at the end of the worker routine FdoS4ToS3PowerWorker
+    */
+
+    Info("%s -> %s\n",
+         SystemPowerStateName(__FdoGetSystemPowerState(Fdo)),
+         SystemPowerStateName(SystemState));
+
+    __FdoSetSystemPowerState(Fdo, SystemState);
+
+    DeviceState = Fdo->LowerDeviceCapabilities.DeviceState[SystemState];
+    return FdoRequestSetDevicePower(Fdo, DeviceState, FdoCompleteSetSystemPowerUp2, Irp);
 }
 
-__drv_requiresIRQL(PASSIVE_LEVEL)
-static VOID
-FdoRequestSetDevicePower(
-    IN  PXENBUS_FDO         Fdo,
-    IN  DEVICE_POWER_STATE  DeviceState
-    )
+VOID _FdoS4ToS3PowerWorker(
+  IN PDEVICE_OBJECT DeviceObject,
+  IN PVOID Context
+  )
 {
-    POWER_STATE             PowerState;
-    KEVENT                  Event;
-    NTSTATUS                status;
+    PXENBUS_POWER_WORKITEM_CONTEXT PowerContext = (PXENBUS_POWER_WORKITEM_CONTEXT)Context;
+    PXENBUS_FDO     Fdo = (PXENBUS_FDO) PowerContext->FdoOrPdo;
+    PIRP              Irp;
+    NTSTATUS          status;
 
-    Trace("%s\n", DevicePowerStateName(DeviceState));
+    UNREFERENCED_PARAMETER(DeviceObject);
 
-    ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
+    Irp = InterlockedExchangePointer(&PowerContext->Irp, NULL);
+    ASSERT(Irp != NULL);
 
-    PowerState.DeviceState = DeviceState;
-    KeInitializeEvent(&Event, NotificationEvent, FALSE);
+    __FdoSetSystemPowerState(Fdo, PowerSystemHibernate); /* Meet preconds for S4 to S3 */
+    FdoS4ToS3(Fdo);
+    status = FdoCompleteSetSystemPowerUpTail(Fdo, Irp); /* And set final system state, S3 or higher */
 
-    status = PoRequestPowerIrp(Fdo->LowerDeviceObject,
-                               IRP_MN_SET_POWER,
-                               PowerState,
-                               FdoRequestSetDevicePowerCompletion,
-                               &Event,
-                               NULL);
-    ASSERT(NT_SUCCESS(status));
+    /* Whatever happens, we have stopped completion processing for SIrp,
+      to restart SIrp processing, call IoCompleteRequest. */
+    if (!NT_SUCCESS(status))
+        goto fail1;
 
-    (VOID) KeWaitForSingleObject(&Event,
-                                 Executive,
-                                 KernelMode,
-                                 FALSE,
-                                 NULL);
+    return; /* FdoCompleteSetSystemPowerUp2 will complete the request.*/
+
+fail1:
+    Error("fail1 - but continue IRP processing. (%08x)\n", status);
+    /* Although can change Irp->IoStatus for pended IRP, drivers should not fail this. */
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+}
+
+VOID FdoS4ToS3PowerWorker(
+    IN PXENBUS_FDO     Fdo,
+    IN PIRP              Irp
+)
+{
+    PVOID Exchange;
+
+    ASSERT(Fdo->FdoSPowerContext.FdoOrPdo == Fdo);
+    Exchange = InterlockedExchangePointer(&Fdo->FdoSPowerContext.Irp, Irp);
+    ASSERT(Exchange == NULL);
+
+    IoQueueWorkItem(Fdo->FdoDPowerWorkItem,
+                    _FdoS4ToS3PowerWorker,
+                    DelayedWorkQueue,
+                    &Fdo->FdoSPowerContext);
 }
 
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
 static NTSTATUS
-FdoSetSystemPowerUp(
-    IN  PXENBUS_FDO     Fdo,
-    IN  PIRP            Irp
+FdoCompleteSetSystemPowerUp(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
     )
 {
-
+    PXENBUS_FDO     Fdo = (PXENBUS_FDO) Context;
     PIO_STACK_LOCATION  StackLocation;
     SYSTEM_POWER_STATE  SystemState;
-    DEVICE_POWER_STATE  DeviceState;
     NTSTATUS            status;
 
-    StackLocation = IoGetCurrentIrpStackLocation(Irp);
-    SystemState = StackLocation->Parameters.Power.State.SystemState;
-
-    ASSERT3U(SystemState, <,  __FdoGetSystemPowerState(Fdo));
+    UNREFERENCED_PARAMETER(DeviceObject);
 
-    status = FdoForwardIrpSynchronously(Fdo, Irp);
-    if (!NT_SUCCESS(status))
-        goto done;
+    /* IRP marked as pending on dispatch path, no need to check pending returned */
 
-    Info("%s: %s -> %s\n",
-         __FdoGetName(Fdo),
-         SystemPowerStateName(__FdoGetSystemPowerState(Fdo)),
-         SystemPowerStateName(SystemState));
+    /* Don't worry about IRP IoStatus */
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    BUG_ON(StackLocation->DeviceObject != Fdo->Dx->DeviceObject);
+    SystemState = StackLocation->Parameters.Power.State.SystemState;
 
     if (SystemState < PowerSystemHibernate &&
         __FdoGetSystemPowerState(Fdo) >= PowerSystemHibernate) {
-        __FdoSetSystemPowerState(Fdo, PowerSystemHibernate);
-        FdoS4ToS3(Fdo);
+        FdoS4ToS3PowerWorker(Fdo, Irp);
+        goto done; /* Stop completion routine for the moment... */
     }
 
-    __FdoSetSystemPowerState(Fdo, SystemState);
+    status = FdoCompleteSetSystemPowerUpTail(Fdo, Irp);
+    if (!NT_SUCCESS(status))
+        goto fail1;
 
-    DeviceState = Fdo->LowerDeviceCapabilities.DeviceState[SystemState];
-    FdoRequestSetDevicePower(Fdo, DeviceState);
+    goto done;
 
-done:
-    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+fail1:
+    Error("fail1 - but continue IRP processing. (%08x)\n", status);
+    /* marked pending on dispatch path, don't change Irp->IoStatus, keep going.*/
+    return STATUS_CONTINUE_COMPLETION;
 
-    return status;
+done:
+    /* Will later complete the IRP (which is marked pending, in worker or 2nd level comp routine.)*/
+        return STATUS_MORE_PROCESSING_REQUIRED;
 }
 
-static NTSTATUS
-FdoSetSystemPowerDown(
+static VOID
+FdoDispatchSetSystemPowerUp(
     IN  PXENBUS_FDO     Fdo,
     IN  PIRP            Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
     SYSTEM_POWER_STATE  SystemState;
-    DEVICE_POWER_STATE  DeviceState;
-    NTSTATUS            status;
 
     StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    BUG_ON(StackLocation->DeviceObject != Fdo->Dx->DeviceObject);
     SystemState = StackLocation->Parameters.Power.State.SystemState;
 
-    ASSERT3U(SystemState, >,  __FdoGetSystemPowerState(Fdo));
+    ASSERT3U(SystemState, <,  __FdoGetSystemPowerState(Fdo));
 
-    DeviceState = Fdo->LowerDeviceCapabilities.DeviceState[SystemState];
+    /* IRP already pended, and we want to complete it *after* completion routine. */
+    IoCopyCurrentIrpStackLocationToNext(Irp);
+    IoSetCompletionRoutine(Irp,
+                           FdoCompleteSetSystemPowerUp,
+                           Fdo,
+                           TRUE,
+                           TRUE,
+                           TRUE);
+    IoCallDriver(Fdo->LowerDeviceObject, Irp);
+}
+
+VOID
+FdoDispatchSetSystemPowerDown2Tail(
+    IN PXENBUS_FDO     Fdo,
+    IN PIRP              Irp
+)
+{
+    PIO_STACK_LOCATION  StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    SYSTEM_POWER_STATE  SystemState = StackLocation->Parameters.Power.State.SystemState;
+
+    __FdoSetSystemPowerState(Fdo, SystemState);
+}
+
+VOID _FdoS3ToS4PowerWorker(
+  IN PDEVICE_OBJECT DeviceObject,
+  IN PVOID Context
+  )
+{
+    PXENBUS_POWER_WORKITEM_CONTEXT PowerContext = (PXENBUS_POWER_WORKITEM_CONTEXT)Context;
+    PXENBUS_FDO     Fdo = (PXENBUS_FDO) PowerContext->FdoOrPdo;
+    PIRP              Irp;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
+
+    Irp = InterlockedExchangePointer(&PowerContext->Irp, NULL);
+    ASSERT(Irp != NULL);
+
+    /* Meet preconditions for S3 to S4 */
+    __FdoSetSystemPowerState(Fdo, PowerSystemSleeping3);
+    FdoS3ToS4(Fdo);
+    FdoDispatchSetSystemPowerDown2Tail(Fdo, Irp);
+
+    IoCopyCurrentIrpStackLocationToNext(Irp); /* Irp has been pended */
+    IoCallDriver(Fdo->LowerDeviceObject, Irp);
+}
+
+VOID FdoS3ToS4PowerWorker(
+    IN PXENBUS_FDO     Fdo,
+    IN PIRP              Irp
+)
+{
+    PVOID Exchange;
+
+    ASSERT(Fdo->FdoSPowerContext.FdoOrPdo == Fdo);
+    Exchange = InterlockedExchangePointer(&Fdo->FdoSPowerContext.Irp, Irp);
+    ASSERT(Exchange == NULL);
+
+    IoQueueWorkItem(Fdo->FdoDPowerWorkItem,
+                    _FdoS3ToS4PowerWorker,
+                    DelayedWorkQueue,
+                    &Fdo->FdoSPowerContext);
+}
+
+__drv_functionClass(REQUEST_POWER_COMPLETE)
+__drv_sameIRQL
+VOID
+FdoDispatchSetSystemPowerDown2(
+    IN  PDEVICE_OBJECT      DeviceObject,
+    IN  UCHAR               MinorFunction,
+    IN  POWER_STATE         PowerState,
+    IN  PVOID               Context,
+    IN  PIO_STATUS_BLOCK    IoStatus
+    )
+{
+    PIRP                Irp = (PIRP) Context;
+    PIO_STACK_LOCATION  StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    PDEVICE_OBJECT      UpperDeviceObject = StackLocation->DeviceObject;
+    PXENBUS_DX        Dx = (PXENBUS_DX)UpperDeviceObject->DeviceExtension;
+    PXENBUS_FDO       Fdo = Dx->Fdo;
+    SYSTEM_POWER_STATE  SystemState = StackLocation->Parameters.Power.State.SystemState;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
+    UNREFERENCED_PARAMETER(MinorFunction);
+    UNREFERENCED_PARAMETER(PowerState);
 
-    FdoRequestSetDevicePower(Fdo, DeviceState);
+    if (!NT_SUCCESS(IoStatus->Status)) {
+        Error("fail1 - but continue IRP processing. (%08x)\n", IoStatus->Status);
+    }
 
     Info("%s: %s -> %s\n",
          __FdoGetName(Fdo),
@@ -5005,60 +5262,110 @@ FdoSetSystemPowerDown(
 
     if (SystemState >= PowerSystemHibernate &&
         __FdoGetSystemPowerState(Fdo) < PowerSystemHibernate) {
-        __FdoSetSystemPowerState(Fdo, PowerSystemSleeping3);
-        FdoS3ToS4(Fdo);
+        FdoS3ToS4PowerWorker(Fdo, Irp);
+        goto done;
     }
 
-    __FdoSetSystemPowerState(Fdo, SystemState);
+    FdoDispatchSetSystemPowerDown2Tail(Fdo, Irp);
 
-    status = FdoForwardIrpSynchronously(Fdo, Irp);
-    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+    goto calldown;
 
-    return status;
+calldown:
+    IoCopyCurrentIrpStackLocationToNext(Irp); /* Irp has been pended */
+    IoCallDriver(Fdo->LowerDeviceObject, Irp);
+    return;
+
+done:
+    ;
 }
 
-static NTSTATUS
-FdoSetSystemPower(
+
+static VOID
+FdoDispatchSetSystemPowerDown(
     IN  PXENBUS_FDO     Fdo,
     IN  PIRP            Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
     SYSTEM_POWER_STATE  SystemState;
-    POWER_ACTION        PowerAction;
+    DEVICE_POWER_STATE  DeviceState;
     NTSTATUS            status;
 
     StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    BUG_ON(StackLocation->DeviceObject != Fdo->Dx->DeviceObject);
     SystemState = StackLocation->Parameters.Power.State.SystemState;
-    PowerAction = StackLocation->Parameters.Power.ShutdownType;
-
-    Trace("====> (%s:%s)\n",
-          SystemPowerStateName(SystemState), 
-          PowerActionName(PowerAction));
 
-    ASSERT3U(PowerAction, <,  PowerActionShutdown);
+    ASSERT3U(SystemState, >,  __FdoGetSystemPowerState(Fdo));
 
-    if (SystemState == __FdoGetSystemPowerState(Fdo)) {
-        status = FdoForwardIrpSynchronously(Fdo, Irp);
-        IoCompleteRequest(Irp, IO_NO_INCREMENT);
+    DeviceState = Fdo->LowerDeviceCapabilities.DeviceState[SystemState];
 
+    if (SystemState >= PowerSystemShutdown) {
+        /* No DIrp generation, no FDO Powerdown.
+           Legacy shutdown just yanks system power.
+           Best device state for S5 is advertised as D3,
+           which is not *really* the case, but we can't increase it. */
         goto done;
     }
 
-    status = (SystemState < __FdoGetSystemPowerState(Fdo)) ?
-             FdoSetSystemPowerUp(Fdo, Irp) :
-             FdoSetSystemPowerDown(Fdo, Irp);
+    status = FdoRequestSetDevicePower(Fdo, DeviceState, FdoDispatchSetSystemPowerDown2, Irp);
+    if (!NT_SUCCESS(status))
+        goto fail1;
 
+    /* IRP already marked pending - nothing more to do if awaiting callback. */
+    return;
+
+fail1:
+    /* In theory could change IRP status, but are not supposed to fail this IRP. */
+    Error("fail1 - but continue IRP processing. (%08x)\n", status);
 done:
-    Trace("<==== (%s:%s)(%08x)\n",
-          SystemPowerStateName(SystemState), 
-          PowerActionName(PowerAction),
-          status);
-    return status;
+    IoCopyCurrentIrpStackLocationToNext(Irp); /* Irp has been pended */
+    IoCallDriver(Fdo->LowerDeviceObject, Irp);
 }
 
 static NTSTATUS
-FdoQueryDevicePowerUp(
+FdoDispatchSetSystemPower(
+    IN  PXENBUS_FDO     Fdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    SYSTEM_POWER_STATE  SystemState;
+    POWER_ACTION        PowerAction;
+
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    SystemState = StackLocation->Parameters.Power.State.SystemState;
+    PowerAction = StackLocation->Parameters.Power.ShutdownType;
+
+    /* IRP_MN_SET_POWER Setting system power, IRP's *must* be pended. */
+    IoMarkIrpPending(Irp);
+
+    Trace("====> (%s:%s)\n",
+          SystemPowerStateName(SystemState),
+          PowerActionName(PowerAction));
+
+    if (SystemState == __FdoGetSystemPowerState(Fdo)) {
+        IoCopyCurrentIrpStackLocationToNext(Irp); /* Pended, copy not skip */
+        IoCallDriver(Fdo->LowerDeviceObject, Irp);
+        goto done;
+    }
+
+    if (SystemState < __FdoGetSystemPowerState(Fdo)) {
+        FdoDispatchSetSystemPowerUp(Fdo, Irp);
+    } else {
+        FdoDispatchSetSystemPowerDown(Fdo, Irp);
+    }
+
+done:
+    Trace("<==== (%s:%s)\n",
+          SystemPowerStateName(SystemState),
+          PowerActionName(PowerAction));
+
+    return STATUS_PENDING;
+}
+
+
+static NTSTATUS
+FdoDispatchQueryDevicePowerUp(
     IN  PXENBUS_FDO     Fdo,
     IN  PIRP            Irp
     )
@@ -5072,15 +5379,15 @@ FdoQueryDevicePowerUp(
 
     ASSERT3U(DeviceState, <,  __FdoGetDevicePowerState(Fdo));
 
-    status = FdoForwardIrpSynchronously(Fdo, Irp);
-
-    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+    /* N.B. Shutdown / hibernation failures caused by our device state could be vetoed here. */
+    IoSkipCurrentIrpStackLocation(Irp);
+    status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
 
     return status;
 }
 
 static NTSTATUS
-FdoQueryDevicePowerDown(
+FdoDispatchQueryDevicePowerDown(
     IN  PXENBUS_FDO     Fdo,
     IN  PIRP            Irp
     )
@@ -5094,14 +5401,15 @@ FdoQueryDevicePowerDown(
 
     ASSERT3U(DeviceState, >,  __FdoGetDevicePowerState(Fdo));
 
-    status = FdoForwardIrpSynchronously(Fdo, Irp);
-    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+    /* N.B. Shutdown / hibernation failures caused by our device state could be vetoed here. */
+    IoSkipCurrentIrpStackLocation(Irp);
+    status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
 
     return status;
 }
 
 static NTSTATUS
-FdoQueryDevicePower(
+FdoDispatchQueryDevicePower(
     IN  PXENBUS_FDO     Fdo,
     IN  PIRP            Irp
     )
@@ -5119,18 +5427,16 @@ FdoQueryDevicePower(
           DevicePowerStateName(DeviceState), 
           PowerActionName(PowerAction));
 
-    ASSERT3U(PowerAction, <,  PowerActionShutdown);
-
     if (DeviceState == __FdoGetDevicePowerState(Fdo)) {
-        status = FdoForwardIrpSynchronously(Fdo, Irp);
-        IoCompleteRequest(Irp, IO_NO_INCREMENT);
+        IoSkipCurrentIrpStackLocation(Irp);
+        status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
 
         goto done;
     }
 
     status = (DeviceState < __FdoGetDevicePowerState(Fdo)) ?
-             FdoQueryDevicePowerUp(Fdo, Irp) :
-             FdoQueryDevicePowerDown(Fdo, Irp);
+             FdoDispatchQueryDevicePowerUp(Fdo, Irp) :
+             FdoDispatchQueryDevicePowerDown(Fdo, Irp);
 
 done:
     Trace("<==== (%s:%s)(%08x)\n",
@@ -5140,10 +5446,35 @@ done:
     return status;
 }
 
+
+static NTSTATUS
+FdoRequestQueryDevicePower(
+    IN  PXENBUS_FDO                 Fdo,
+    IN  DEVICE_POWER_STATE          DeviceState,
+    IN  PREQUEST_POWER_COMPLETE     CompletionFunction,
+    IN  PVOID                       Context
+    )
+{
+    POWER_STATE             PowerState;
+    NTSTATUS                status;
+
+    Trace("%s\n", DevicePowerStateName(DeviceState));
+
+    PowerState.DeviceState = DeviceState;
+
+    status = PoRequestPowerIrp(Fdo->LowerDeviceObject,
+                               IRP_MN_QUERY_POWER,
+                               PowerState,
+                               CompletionFunction,
+                               Context,
+                               NULL);
+    return status;
+}
+
 __drv_functionClass(REQUEST_POWER_COMPLETE)
 __drv_sameIRQL
 VOID
-FdoRequestQueryDevicePowerCompletion(
+FdoCompleteQuerySystemPowerUp2(
     IN  PDEVICE_OBJECT      DeviceObject,
     IN  UCHAR               MinorFunction,
     IN  POWER_STATE         PowerState,
@@ -5151,83 +5482,121 @@ FdoRequestQueryDevicePowerCompletion(
     IN  PIO_STATUS_BLOCK    IoStatus
     )
 {
-    PKEVENT                 Event = Context;
+    PIRP            Irp = (PIRP) Context;
 
     UNREFERENCED_PARAMETER(DeviceObject);
     UNREFERENCED_PARAMETER(MinorFunction);
     UNREFERENCED_PARAMETER(PowerState);
 
-    ASSERT(NT_SUCCESS(IoStatus->Status));
-
-    KeSetEvent(Event, IO_NO_INCREMENT, FALSE);
+    if (!NT_SUCCESS(IoStatus->Status))
+        Irp->IoStatus.Status = IoStatus->Status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
 }
 
-__drv_requiresIRQL(PASSIVE_LEVEL)
-static VOID
-FdoRequestQueryDevicePower(
-    IN  PXENBUS_FDO         Fdo,
-    IN  DEVICE_POWER_STATE  DeviceState
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
+static NTSTATUS
+FdoCompleteQuerySystemPowerUp(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
     )
 {
-    POWER_STATE             PowerState;
-    KEVENT                  Event;
-    NTSTATUS                status;
+    PXENBUS_FDO     Fdo = (PXENBUS_FDO) Context;
+    PIO_STACK_LOCATION  StackLocation;
+    SYSTEM_POWER_STATE  SystemState;
+    DEVICE_POWER_STATE  DeviceState;
+    NTSTATUS            status;
 
-    Trace("%s\n", DevicePowerStateName(DeviceState));
+    UNREFERENCED_PARAMETER(DeviceObject);
 
-    ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
+    /* IRP marked as pending on dispatch path. */
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    BUG_ON(StackLocation->DeviceObject != Fdo->Dx->DeviceObject);
+    SystemState = StackLocation->Parameters.Power.State.SystemState;
+    DeviceState = Fdo->LowerDeviceCapabilities.DeviceState[SystemState];
+    status = FdoRequestQueryDevicePower(Fdo, DeviceState, FdoCompleteQuerySystemPowerUp2, Irp);
+    if (!NT_SUCCESS(status))
+        goto fail1;
 
-    PowerState.DeviceState = DeviceState;
-    KeInitializeEvent(&Event, NotificationEvent, FALSE);
+    goto done;
 
-    status = PoRequestPowerIrp(Fdo->LowerDeviceObject,
-                               IRP_MN_QUERY_POWER,
-                               PowerState,
-                               FdoRequestQueryDevicePowerCompletion,
-                               &Event,
-                               NULL);
-    ASSERT(NT_SUCCESS(status));
+fail1:
+    /* Irp marked as pending on dispatch path, so can change final IoStatus, pass to completion routine above. */
+    Error("fail1 (%08x)\n", status);
+    Irp->IoStatus.Status = status;
+    return STATUS_CONTINUE_COMPLETION;
 
-    (VOID) KeWaitForSingleObject(&Event,
-                                 Executive,
-                                 KernelMode,
-                                 FALSE,
-                                 NULL);
+done:
+    /* Will later complete the IRP (which is marked pending, in 2nd level comp routine.)*/
+        return STATUS_MORE_PROCESSING_REQUIRED;
 }
 
 static NTSTATUS
-FdoQuerySystemPowerUp(
+FdoDispatchQuerySystemPowerUp(
     IN  PXENBUS_FDO     Fdo,
     IN  PIRP            Irp
     )
 {
-
     PIO_STACK_LOCATION  StackLocation;
     SYSTEM_POWER_STATE  SystemState;
-    DEVICE_POWER_STATE  DeviceState;
     NTSTATUS            status;
 
     StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    BUG_ON(StackLocation->DeviceObject != Fdo->Dx->DeviceObject);
     SystemState = StackLocation->Parameters.Power.State.SystemState;
 
     ASSERT3U(SystemState, <,  __FdoGetSystemPowerState(Fdo));
 
-    status = FdoForwardIrpSynchronously(Fdo, Irp);
-    if (!NT_SUCCESS(status))
-        goto done;
+    IoMarkIrpPending(Irp); /* Must mark IRP pending because we want to complete it *after* completion routine. */
+    IoCopyCurrentIrpStackLocationToNext(Irp);
+    IoSetCompletionRoutine(Irp,
+                           FdoCompleteQuerySystemPowerUp,
+                           Fdo,
+                           TRUE,
+                           TRUE,
+                           TRUE);
+    status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
+    return STATUS_PENDING;
+}
 
-    DeviceState = Fdo->LowerDeviceCapabilities.DeviceState[SystemState];
+VOID
+FdoDispatchQuerySystemPowerDown2(
+    IN  PDEVICE_OBJECT      DeviceObject,
+    IN  UCHAR               MinorFunction,
+    IN  POWER_STATE         PowerState,
+    IN  PVOID               Context,
+    IN  PIO_STATUS_BLOCK    IoStatus
+    )
+{
+    PIRP                Irp = (PIRP) Context;
+    PIO_STACK_LOCATION  StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    PDEVICE_OBJECT      UpperDeviceObject = StackLocation->DeviceObject;
+    PXENBUS_DX          Dx = (PXENBUS_DX)UpperDeviceObject->DeviceExtension;
+    PXENBUS_FDO         Fdo = Dx->Fdo;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
+    UNREFERENCED_PARAMETER(MinorFunction);
+    UNREFERENCED_PARAMETER(PowerState);
 
-    FdoRequestQueryDevicePower(Fdo, DeviceState);
+    if (!NT_SUCCESS(IoStatus->Status))
+        goto fail1;
 
-done:
+    IoCopyCurrentIrpStackLocationToNext(Irp); /* Irp has been pended. */
+    IoCallDriver(Fdo->LowerDeviceObject, Irp);
+    goto done;
+
+fail1:
+    Error("fail1 (%08x)\n", IoStatus->Status);
+    Irp->IoStatus.Status = IoStatus->Status;
     IoCompleteRequest(Irp, IO_NO_INCREMENT);
 
-    return status;
+done:
+    ;
 }
 
 static NTSTATUS
-FdoQuerySystemPowerDown(
+FdoDispatchQuerySystemPowerDown(
     IN  PXENBUS_FDO     Fdo,
     IN  PIRP            Irp
     )
@@ -5238,22 +5607,32 @@ FdoQuerySystemPowerDown(
     NTSTATUS            status;
 
     StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    BUG_ON(StackLocation->DeviceObject != Fdo->Dx->DeviceObject);
     SystemState = StackLocation->Parameters.Power.State.SystemState;
 
     ASSERT3U(SystemState, >,  __FdoGetSystemPowerState(Fdo));
 
     DeviceState = Fdo->LowerDeviceCapabilities.DeviceState[SystemState];
 
-    FdoRequestQueryDevicePower(Fdo, DeviceState);
+    status = FdoRequestQueryDevicePower(Fdo, DeviceState, FdoDispatchQuerySystemPowerDown2, Irp);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+        IoMarkIrpPending(Irp);
+        status = STATUS_PENDING;
+    goto done;
 
-    status = FdoForwardIrpSynchronously(Fdo, Irp);
-    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+fail1:
+    Error("fail1 (%08x)\n", status);
+        Irp->IoStatus.Status = status;
+        IoCompleteRequest(Irp, IO_NO_INCREMENT);
 
+done:
     return status;
 }
 
 static NTSTATUS
-FdoQuerySystemPower(
+FdoDispatchQuerySystemPower(
     IN  PXENBUS_FDO     Fdo,
     IN  PIRP            Irp
     )
@@ -5271,18 +5650,15 @@ FdoQuerySystemPower(
           SystemPowerStateName(SystemState), 
           PowerActionName(PowerAction));
 
-    ASSERT3U(PowerAction, <,  PowerActionShutdown);
-
     if (SystemState == __FdoGetSystemPowerState(Fdo)) {
-        status = FdoForwardIrpSynchronously(Fdo, Irp);
-        IoCompleteRequest(Irp, IO_NO_INCREMENT);
-
+        IoSkipCurrentIrpStackLocation(Irp);
+        status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
         goto done;
     }
 
     status = (SystemState < __FdoGetSystemPowerState(Fdo)) ?
-             FdoQuerySystemPowerUp(Fdo, Irp) :
-             FdoQuerySystemPowerDown(Fdo, Irp);
+             FdoDispatchQuerySystemPowerUp(Fdo, Irp) :
+             FdoDispatchQuerySystemPowerDown(Fdo, Irp);
 
 done:
     Trace("<==== (%s:%s)(%08x)\n",
@@ -5294,117 +5670,57 @@ done:
 }
 
 static NTSTATUS
-FdoDevicePower(
-    IN  PXENBUS_THREAD  Self,
-    IN  PVOID           Context
+FdoDispatchDevicePower(
+    IN  PXENBUS_FDO  Fdo,
+    IN  PIRP         Irp
     )
 {
-    PXENBUS_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;
+        NTSTATUS status;
+        PIO_STACK_LOCATION StackLocation = IoGetCurrentIrpStackLocation(Irp);
 
         switch (StackLocation->MinorFunction) {
         case IRP_MN_SET_POWER:
-            (VOID) FdoSetDevicePower(Fdo, Irp);
+            status = FdoDispatchSetDevicePower(Fdo, Irp);
             break;
 
         case IRP_MN_QUERY_POWER:
-            (VOID) FdoQueryDevicePower(Fdo, Irp);
+            status = FdoDispatchQueryDevicePower(Fdo, Irp);
             break;
 
         default:
             ASSERT(FALSE);
+            IoSkipCurrentIrpStackLocation(Irp);
+            status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
             break;
         }
-    }
-
-    return STATUS_SUCCESS;
+        return status;
 }
 
 static NTSTATUS
-FdoSystemPower(
-    IN  PXENBUS_THREAD  Self,
-    IN  PVOID           Context
+FdoDispatchSystemPower(
+    IN  PXENBUS_FDO  Fdo,
+    IN  PIRP         Irp
     )
 {
-    PXENBUS_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);
-        }
+    NTSTATUS status;
+    PIO_STACK_LOCATION StackLocation = IoGetCurrentIrpStackLocation(Irp);
 
-        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;
+    switch (StackLocation->MinorFunction) {
+    case IRP_MN_SET_POWER:
+        status = FdoDispatchSetSystemPower(Fdo, Irp);
+        break;
 
-        case IRP_MN_QUERY_POWER:
-            (VOID) FdoQuerySystemPower(Fdo, Irp);
-            break;
+    case IRP_MN_QUERY_POWER:
+        status = FdoDispatchQuerySystemPower(Fdo, Irp);
+        break;
 
-        default:
-            ASSERT(FALSE);
-            break;
-        }
+    default:
+        ASSERT(FALSE);
+        IoSkipCurrentIrpStackLocation(Irp);
+        status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
+        break;
     }
-
-    return STATUS_SUCCESS;
+    return status;
 }
 
 static NTSTATUS
@@ -5433,36 +5749,13 @@ FdoDispatchPower(
     PowerType = StackLocation->Parameters.Power.Type;
     PowerAction = StackLocation->Parameters.Power.ShutdownType;
 
-    if (PowerAction >= PowerActionShutdown) {
-        IoSkipCurrentIrpStackLocation(Irp);
-        status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
-
-        goto done;
-    }
-
     switch (PowerType) {
     case DevicePowerState:
-        IoMarkIrpPending(Irp);
-
-        ASSERT3P(Fdo->DevicePowerIrp, ==, NULL);
-        Fdo->DevicePowerIrp = Irp;
-        KeMemoryBarrier();
-
-        ThreadWake(Fdo->DevicePowerThread);
-
-        status = STATUS_PENDING;
+        status = FdoDispatchDevicePower(Fdo, Irp);
         break;
 
     case SystemPowerState:
-        IoMarkIrpPending(Irp);
-
-        ASSERT3P(Fdo->SystemPowerIrp, ==, NULL);
-        Fdo->SystemPowerIrp = Irp;
-        KeMemoryBarrier();
-
-        ThreadWake(Fdo->SystemPowerThread);
-
-        status = STATUS_PENDING;
+        status = FdoDispatchSystemPower(Fdo, Irp);
         break;
 
     default:
@@ -5475,6 +5768,7 @@ done:
     return status;
 }
 
+
 static NTSTATUS
 FdoDispatchDefault(
     IN  PXENBUS_FDO Fdo,
@@ -5822,87 +6116,79 @@ FdoCreate(
     Fdo->LowerDeviceObject = IoAttachDeviceToDeviceStack(FunctionDeviceObject,
                                                          PhysicalDeviceObject);
 
-    status = ThreadCreate(FdoSystemPower, Fdo, &Fdo->SystemPowerThread);
-    if (!NT_SUCCESS(status))
-        goto fail3;
-
-    status = ThreadCreate(FdoDevicePower, Fdo, &Fdo->DevicePowerThread);
-    if (!NT_SUCCESS(status))
-        goto fail4;
-
     status = FdoAcquireLowerBusInterface(Fdo);
     if (!NT_SUCCESS(status))
-        goto fail5;
+        goto fail3;
 
     if (FdoGetBusData(Fdo,
                       PCI_WHICHSPACE_CONFIG,
                       &Header,
                       0,
                       sizeof (PCI_COMMON_HEADER)) == 0)
-        goto fail6;
+        goto fail4;
 
     status = __FdoSetVendorName(Fdo,
                                 Header.VendorID,
                                 Header.DeviceID);
     if (!NT_SUCCESS(status))
-        goto fail7;
+        goto fail5;
 
     __FdoSetName(Fdo);
 
     status = FdoSetActive(Fdo);
     if (!NT_SUCCESS(status))
-        goto fail8;
+        goto fail6;
 
     if (!__FdoIsActive(Fdo))
         goto done;
 
     status = __FdoAllocateBuffer(Fdo);
     if (!NT_SUCCESS(status))
-        goto fail9;
+        goto fail7;
 
     status = DebugInitialize(Fdo, &Fdo->DebugContext);
     if (!NT_SUCCESS(status))
-        goto fail10;
+        goto fail8;
 
     status = SuspendInitialize(Fdo, &Fdo->SuspendContext);
     if (!NT_SUCCESS(status))
-        goto fail11;
+        goto fail9;
 
     status = SharedInfoInitialize(Fdo, &Fdo->SharedInfoContext);
     if (!NT_SUCCESS(status))
-        goto fail12;
+        goto fail10;
 
     status = EvtchnInitialize(Fdo, &Fdo->EvtchnContext);
     if (!NT_SUCCESS(status))
-        goto fail13;
+        goto fail11;
 
     status = RangeSetInitialize(Fdo, &Fdo->RangeSetContext);
     if (!NT_SUCCESS(status))
-        goto fail14;
+        goto fail12;
 
     status = CacheInitialize(Fdo, &Fdo->CacheContext);
     if (!NT_SUCCESS(status))
-        goto fail15;
+        goto fail13;
 
     status = GnttabInitialize(Fdo, &Fdo->GnttabContext);
     if (!NT_SUCCESS(status))
-        goto fail16;
+        goto fail14;
 
     status = StoreInitialize(Fdo, &Fdo->StoreContext);
     if (!NT_SUCCESS(status))
-        goto fail17;
+        goto fail15;
 
     status = ConsoleInitialize(Fdo, &Fdo->ConsoleContext);
     if (!NT_SUCCESS(status))
-        goto fail18;
+        goto fail16;
 
     status = UnplugInitialize(Fdo, &Fdo->UnplugContext);
     if (!NT_SUCCESS(status))
-        goto fail19;
+        goto fail17;
 
     status = FdoBalloonInitialize(Fdo);
     if (!NT_SUCCESS(status))
-        goto fail20;
+        goto fail18;
 
     status = DebugGetInterface(__FdoGetDebugContext(Fdo),
                                XENBUS_DEBUG_INTERFACE_VERSION_MAX,
@@ -5952,6 +6238,20 @@ FdoCreate(
                                  sizeof (Fdo->BalloonInterface));
     ASSERT(NT_SUCCESS(status));
 
+    Fdo->FdoSPowerWorkItem = IoAllocateWorkItem(FunctionDeviceObject);
+    if (Fdo->FdoSPowerWorkItem == NULL)
+        goto fail19;
+
+    Fdo->FdoSPowerContext.FdoOrPdo = Fdo;
+    Fdo->FdoSPowerContext.Irp = NULL;
+
+    Fdo->FdoDPowerWorkItem = IoAllocateWorkItem(FunctionDeviceObject);
+    if (Fdo->FdoDPowerWorkItem == NULL)
+        goto fail20;
+
+    Fdo->FdoDPowerContext.FdoOrPdo = Fdo;
+    Fdo->FdoDPowerContext.Irp = NULL;
+
 done:
     InitializeMutex(&Fdo->Mutex);
     InitializeListHead(&Fdo->List);
@@ -5975,105 +6275,122 @@ done:
 
 fail20:
     Error("fail20\n");
-
-    UnplugTeardown(Fdo->UnplugContext);
-    Fdo->UnplugContext = NULL;
+    IoFreeWorkItem(Fdo->FdoSPowerWorkItem);
+    Fdo->FdoSPowerWorkItem = NULL;
+    RtlZeroMemory(&Fdo->FdoSPowerContext, sizeof(Fdo->FdoSPowerContext));
 
 fail19:
     Error("fail19\n");
+    RtlZeroMemory(&Fdo->BalloonInterface,
+                    sizeof (XENBUS_BALLOON_INTERFACE));
 
-    ConsoleTeardown(Fdo->ConsoleContext);
-    Fdo->ConsoleContext = NULL;
+    RtlZeroMemory(&Fdo->ConsoleInterface,
+                    sizeof (XENBUS_CONSOLE_INTERFACE));
+
+    RtlZeroMemory(&Fdo->StoreInterface,
+                    sizeof (XENBUS_STORE_INTERFACE));
+
+    RtlZeroMemory(&Fdo->RangeSetInterface,
+                    sizeof (XENBUS_RANGE_SET_INTERFACE));
+
+    RtlZeroMemory(&Fdo->EvtchnInterface,
+                    sizeof (XENBUS_EVTCHN_INTERFACE));
+
+    RtlZeroMemory(&Fdo->SuspendInterface,
+                    sizeof (XENBUS_SUSPEND_INTERFACE));
+
+    RtlZeroMemory(&Fdo->DebugInterface,
+                    sizeof (XENBUS_DEBUG_INTERFACE));
+
+    FdoBalloonTeardown(Fdo);
 
 fail18:
     Error("fail18\n");
 
-    StoreTeardown(Fdo->StoreContext);
-    Fdo->StoreContext = NULL;
+    UnplugTeardown(Fdo->UnplugContext);
+    Fdo->UnplugContext = NULL;
 
 fail17:
     Error("fail17\n");
 
-    GnttabTeardown(Fdo->GnttabContext);
-    Fdo->GnttabContext = NULL;
+    ConsoleTeardown(Fdo->ConsoleContext);
+    Fdo->ConsoleContext = NULL;
 
 fail16:
     Error("fail16\n");
 
-    CacheTeardown(Fdo->CacheContext);
-    Fdo->CacheContext = NULL;
+    StoreTeardown(Fdo->StoreContext);
+    Fdo->StoreContext = NULL;
 
 fail15:
     Error("fail15\n");
 
-    RangeSetTeardown(Fdo->RangeSetContext);
-    Fdo->RangeSetContext = NULL;
+    GnttabTeardown(Fdo->GnttabContext);
+    Fdo->GnttabContext = NULL;
 
 fail14:
     Error("fail14\n");
 
-    EvtchnTeardown(Fdo->EvtchnContext);
-    Fdo->EvtchnContext = NULL;
+    CacheTeardown(Fdo->CacheContext);
+    Fdo->CacheContext = NULL;
 
 fail13:
     Error("fail13\n");
 
-    SharedInfoTeardown(Fdo->SharedInfoContext);
-    Fdo->SharedInfoContext = NULL;
+    RangeSetTeardown(Fdo->RangeSetContext);
+    Fdo->RangeSetContext = NULL;
 
 fail12:
     Error("fail12\n");
 
-    SuspendTeardown(Fdo->SuspendContext);
-    Fdo->SuspendContext = NULL;
+    EvtchnTeardown(Fdo->EvtchnContext);
+    Fdo->EvtchnContext = NULL;
 
 fail11:
     Error("fail11\n");
 
-    DebugTeardown(Fdo->DebugContext);
-    Fdo->DebugContext = NULL;
+    SharedInfoTeardown(Fdo->SharedInfoContext);
+    Fdo->SharedInfoContext = NULL;
 
 fail10:
     Error("fail10\n");
 
-    __FdoFreeBuffer(Fdo);
+    SuspendTeardown(Fdo->SuspendContext);
+    Fdo->SuspendContext = NULL;
 
 fail9:
     Error("fail9\n");
 
-    //
-    // We don't want to call DriverClearActive() so just
-    // clear the FDO flag.
-    //
-    Fdo->Active = FALSE;
+    DebugTeardown(Fdo->DebugContext);
+    Fdo->DebugContext = NULL;
 
 fail8:
     Error("fail8\n");
 
-    RtlZeroMemory(Fdo->VendorName, MAXNAMELEN);
+    __FdoFreeBuffer(Fdo);
 
 fail7:
     Error("fail7\n");
 
+    //
+    // We don't want to call DriverClearActive() so just
+    // clear the FDO flag.
+    //
+    Fdo->Active = FALSE;
+
 fail6:
     Error("fail6\n");
 
-    FdoReleaseLowerBusInterface(Fdo);
+    RtlZeroMemory(Fdo->VendorName, MAXNAMELEN);
 
 fail5:
     Error("fail5\n");
 
-    ThreadAlert(Fdo->DevicePowerThread);
-    ThreadJoin(Fdo->DevicePowerThread);
-    Fdo->DevicePowerThread = NULL;
-    
 fail4:
     Error("fail4\n");
 
-    ThreadAlert(Fdo->SystemPowerThread);
-    ThreadJoin(Fdo->SystemPowerThread);
-    Fdo->SystemPowerThread = NULL;
-    
+    FdoReleaseLowerBusInterface(Fdo);
+
 fail3:
     Error("fail3\n");
 
@@ -6125,6 +6442,16 @@ FdoDestroy(
     RtlZeroMemory(&Fdo->List, sizeof (LIST_ENTRY));
     RtlZeroMemory(&Fdo->Mutex, sizeof (MUTEX));
 
+    IoFreeWorkItem(Fdo->FdoSPowerWorkItem);
+    ASSERT(Fdo->FdoSPowerContext.Irp == NULL);
+    IoFreeWorkItem(Fdo->FdoDPowerWorkItem);
+    ASSERT(Fdo->FdoDPowerContext.Irp == NULL);
+
+    RtlZeroMemory(&Fdo->FdoSPowerWorkItem, sizeof(Fdo->FdoSPowerWorkItem));
+    RtlZeroMemory(&Fdo->FdoDPowerWorkItem, sizeof(Fdo->FdoDPowerWorkItem));
+    RtlZeroMemory(&Fdo->FdoSPowerContext, sizeof(Fdo->FdoSPowerContext));
+    RtlZeroMemory(&Fdo->FdoDPowerContext, sizeof(Fdo->FdoDPowerContext));
+
     if (__FdoIsActive(Fdo)) {
         RtlZeroMemory(&Fdo->BalloonInterface,
                       sizeof (XENBUS_BALLOON_INTERFACE));
@@ -6188,14 +6515,6 @@ FdoDestroy(
 
     FdoReleaseLowerBusInterface(Fdo);
 
-    ThreadAlert(Fdo->DevicePowerThread);
-    ThreadJoin(Fdo->DevicePowerThread);
-    Fdo->DevicePowerThread = NULL;
-
-    ThreadAlert(Fdo->SystemPowerThread);
-    ThreadJoin(Fdo->SystemPowerThread);
-    Fdo->SystemPowerThread = NULL;
-
     IoDetachDevice(Fdo->LowerDeviceObject);
 
     RtlZeroMemory(&Fdo->LowerDeviceCapabilities, sizeof (DEVICE_CAPABILITIES));
diff --git a/src/xenbus/pdo.c b/src/xenbus/pdo.c
index efd29dc..1ae2f07 100644
--- a/src/xenbus/pdo.c
+++ b/src/xenbus/pdo.c
@@ -49,6 +49,7 @@
 #include "util.h"
 #include "version.h"
 #include "revision.h"
+#include "types.h"
 
 #define PDO_TAG 'ODP'
 
@@ -57,11 +58,6 @@
 struct _XENBUS_PDO {
     PXENBUS_DX                  Dx;
 
-    PXENBUS_THREAD              SystemPowerThread;
-    PIRP                        SystemPowerIrp;
-    PXENBUS_THREAD              DevicePowerThread;
-    PIRP                        DevicePowerIrp;
-
     PXENBUS_FDO                 Fdo;
     BOOLEAN                     Missing;
     const CHAR                  *Reason;
@@ -73,6 +69,11 @@ struct _XENBUS_PDO {
 
     XENBUS_SUSPEND_INTERFACE    SuspendInterface;
     PXENBUS_SUSPEND_CALLBACK    SuspendCallbackLate;
+
+    PIO_WORKITEM                  PdoSPowerWorkItem;
+    XENBUS_POWER_WORKITEM_CONTEXT PdoSPowerContext;
+    PIO_WORKITEM                  PdoDPowerWorkItem;
+    XENBUS_POWER_WORKITEM_CONTEXT PdoDPowerContext;
 };
 
 static FORCEINLINE PVOID
@@ -1700,26 +1701,29 @@ PdoDispatchPnp(
     return status;
 }
 
-static NTSTATUS
-PdoSetDevicePower(
-    IN  PXENBUS_PDO     Pdo,
-    IN  PIRP            Irp
-    )
+VOID _PdoDStatePowerWorker(
+  IN PDEVICE_OBJECT DeviceObject,
+  IN PVOID Context
+  )
 {
+    PXENBUS_POWER_WORKITEM_CONTEXT PowerContext = (PXENBUS_POWER_WORKITEM_CONTEXT)Context;
+    PXENBUS_PDO         Pdo = (PXENBUS_PDO) PowerContext->FdoOrPdo;
+    PIRP                Irp;
+    NTSTATUS            status;
     PIO_STACK_LOCATION  StackLocation;
     DEVICE_POWER_STATE  DeviceState;
     POWER_ACTION        PowerAction;
 
+    UNREFERENCED_PARAMETER(DeviceObject);
+
+    Irp = InterlockedExchangePointer(&PowerContext->Irp, NULL);
+    ASSERT(Irp != NULL);
+
     StackLocation = IoGetCurrentIrpStackLocation(Irp);
     DeviceState = StackLocation->Parameters.Power.State.DeviceState;
     PowerAction = StackLocation->Parameters.Power.ShutdownType;
 
-    Trace("====> (%s:%s)\n",
-          DevicePowerStateName(DeviceState), 
-          PowerActionName(PowerAction));
-
-    ASSERT3U(PowerAction, <, PowerActionShutdown);
-
+    status = STATUS_SUCCESS;
     if (__PdoGetDevicePowerState(Pdo) > DeviceState) {
         Trace("%s: POWERING UP: %s -> %s\n",
               __PdoGetName(Pdo),
@@ -1727,7 +1731,7 @@ PdoSetDevicePower(
               DevicePowerStateName(DeviceState));
 
         ASSERT3U(DeviceState, ==, PowerDeviceD0);
-        PdoD3ToD0(Pdo);
+        status = PdoD3ToD0(Pdo);
     } else if (__PdoGetDevicePowerState(Pdo) < DeviceState) {
         Trace("%s: POWERING DOWN: %s -> %s\n",
               __PdoGetName(Pdo),
@@ -1738,76 +1742,81 @@ PdoSetDevicePower(
         PdoD0ToD3(Pdo);
     }
 
+    if(NT_SUCCESS(status))
+        goto done;
+
+    Error("fail1 (%08x)\n", status);
+    /* TODO - Consider cycling device power at some later point?
+       Need PPO to retry SIRP -> DIRP */
+
+done:
+    /* Cannot fail the IRP at this point, keep going. */
     Irp->IoStatus.Status = STATUS_SUCCESS;
     IoCompleteRequest(Irp, IO_NO_INCREMENT);
 
     Trace("<==== (%s:%s)\n",
           DevicePowerStateName(DeviceState), 
           PowerActionName(PowerAction));
-
-    return STATUS_SUCCESS;
 }
 
-static NTSTATUS
-PdoDevicePower(
-    IN  PXENBUS_THREAD  Self,
-    IN  PVOID           Context
-    )
+VOID PdoDStatePowerWorker(
+    IN PXENBUS_PDO       Pdo,
+    IN PIRP              Irp
+)
 {
-    PXENBUS_PDO         Pdo = Context;
-    PKEVENT             Event;
-
-    Event = ThreadGetEvent(Self);
-
-    for (;;) {
-        PIRP    Irp;
-
-        if (Pdo->DevicePowerIrp == NULL) {
-            (VOID) KeWaitForSingleObject(Event,
-                                         Executive,
-                                         KernelMode,
-                                         FALSE,
-                                         NULL);
-            KeClearEvent(Event);
-        }
-
-        if (ThreadIsAlerted(Self))
-            break;
-
-        Irp = Pdo->DevicePowerIrp;
+    PVOID Exchange;
 
-        if (Irp == NULL)
-            continue;
+    ASSERT(Pdo->PdoDPowerContext.FdoOrPdo == Pdo);
+    Exchange = InterlockedExchangePointer(&Pdo->PdoDPowerContext.Irp, Irp);
+    ASSERT(Exchange == NULL);
 
-        Pdo->DevicePowerIrp = NULL;
-        KeMemoryBarrier();
-
-        (VOID) PdoSetDevicePower(Pdo, Irp);
-    }
-
-    return STATUS_SUCCESS;
+    IoQueueWorkItem(Pdo->PdoDPowerWorkItem,
+                    _PdoDStatePowerWorker,
+                    DelayedWorkQueue,
+                    &Pdo->PdoDPowerContext);
 }
 
 static NTSTATUS
-PdoSetSystemPower(
+PdoDispatchSetDevicePower(
     IN  PXENBUS_PDO     Pdo,
     IN  PIRP            Irp
     )
 {
+    PIO_STACK_LOCATION StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    DEVICE_POWER_STATE DeviceState = StackLocation->Parameters.Power.State.DeviceState;
+    POWER_ACTION PowerAction = StackLocation->Parameters.Power.ShutdownType;
+
+    Trace("====> (%s:%s)\n",
+          DevicePowerStateName(DeviceState),
+          PowerActionName(PowerAction));
+
+    IoMarkIrpPending(Irp);
+    PdoDStatePowerWorker(Pdo, Irp);
+    return STATUS_PENDING;
+}
+
+
+VOID _PdoSStatePowerWorker(
+  IN PDEVICE_OBJECT DeviceObject,
+  IN PVOID Context
+  )
+{
+    PXENBUS_POWER_WORKITEM_CONTEXT PowerContext = (PXENBUS_POWER_WORKITEM_CONTEXT)Context;
+    PXENBUS_PDO         Pdo = (PXENBUS_PDO) PowerContext->FdoOrPdo;
+    PIRP                Irp;
     PIO_STACK_LOCATION  StackLocation;
     SYSTEM_POWER_STATE  SystemState;
     POWER_ACTION        PowerAction;
 
+    UNREFERENCED_PARAMETER(DeviceObject);
+
+    Irp = InterlockedExchangePointer(&PowerContext->Irp, NULL);
+    ASSERT(Irp != NULL);
+
     StackLocation = IoGetCurrentIrpStackLocation(Irp);
     SystemState = StackLocation->Parameters.Power.State.SystemState;
     PowerAction = StackLocation->Parameters.Power.ShutdownType;
 
-    Trace("====> (%s:%s)\n",
-          SystemPowerStateName(SystemState), 
-          PowerActionName(PowerAction));
-
-    ASSERT3U(PowerAction, <, PowerActionShutdown);
-
     if (__PdoGetSystemPowerState(Pdo) > SystemState) {
         if (SystemState < PowerSystemHibernate &&
             __PdoGetSystemPowerState(Pdo) >= PowerSystemHibernate) {
@@ -1841,52 +1850,50 @@ PdoSetSystemPower(
     Trace("<==== (%s:%s)\n",
           SystemPowerStateName(SystemState), 
           PowerActionName(PowerAction));
-
-    return STATUS_SUCCESS;
 }
 
-static NTSTATUS
-PdoSystemPower(
-    IN  PXENBUS_THREAD  Self,
-    IN  PVOID           Context
-    )
+VOID PdoSStatePowerWorker(
+    IN PXENBUS_PDO       Pdo,
+    IN PIRP              Irp
+)
 {
-    PXENBUS_PDO         Pdo = Context;
-    PKEVENT             Event;
-
-    Event = ThreadGetEvent(Self);
+    PVOID Exchange;
 
-    for (;;) {
-        PIRP    Irp;
+    ASSERT(Pdo->PdoSPowerContext.FdoOrPdo == Pdo);
+    Exchange = InterlockedExchangePointer(&Pdo->PdoSPowerContext.Irp, Irp);
+    ASSERT(Exchange == NULL);
 
-        if (Pdo->SystemPowerIrp == NULL) {
-            (VOID) KeWaitForSingleObject(Event,
-                                         Executive,
-                                         KernelMode,
-                                         FALSE,
-                                         NULL);
-            KeClearEvent(Event);
-        }
-
-        if (ThreadIsAlerted(Self))
-            break;
-
-        Irp = Pdo->SystemPowerIrp;
+    IoQueueWorkItem(Pdo->PdoSPowerWorkItem,
+                    _PdoSStatePowerWorker,
+                    DelayedWorkQueue,
+                    &Pdo->PdoSPowerContext);
+}
 
-        if (Irp == NULL)
-            continue;
+static NTSTATUS
+PdoDispatchSetSystemPower(
+    IN  PXENBUS_PDO     Pdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
+    SYSTEM_POWER_STATE  SystemState;
+    POWER_ACTION        PowerAction;
 
-        Pdo->SystemPowerIrp = NULL;
-        KeMemoryBarrier();
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    SystemState = StackLocation->Parameters.Power.State.SystemState;
+    PowerAction = StackLocation->Parameters.Power.ShutdownType;
 
-        (VOID) PdoSetSystemPower(Pdo, Irp);
-    }
+    Trace("====> (%s:%s)\n",
+          SystemPowerStateName(SystemState),
+          PowerActionName(PowerAction));
 
-    return STATUS_SUCCESS;
+    IoMarkIrpPending(Irp);
+    PdoSStatePowerWorker(Pdo, Irp);
+    return STATUS_PENDING;
 }
 
 static NTSTATUS
-PdoSetPower(
+PdoDispatchSetPower(
     IN  PXENBUS_PDO     Pdo,
     IN  PIRP            Irp
     )
@@ -1900,38 +1907,13 @@ PdoSetPower(
     PowerType = StackLocation->Parameters.Power.Type;
     PowerAction = StackLocation->Parameters.Power.ShutdownType;
 
-    if (PowerAction >= PowerActionShutdown) {
-        Irp->IoStatus.Status = STATUS_SUCCESS;
-        
-        status = Irp->IoStatus.Status;
-        IoCompleteRequest(Irp, IO_NO_INCREMENT);
-
-        goto done;
-    }
-
     switch (PowerType) {
     case DevicePowerState:
-        IoMarkIrpPending(Irp);
-
-        ASSERT3P(Pdo->DevicePowerIrp, ==, NULL);
-        Pdo->DevicePowerIrp = Irp;
-        KeMemoryBarrier();
-
-        ThreadWake(Pdo->DevicePowerThread);
-
-        status = STATUS_PENDING;
+        status = PdoDispatchSetDevicePower(Pdo, Irp);
         break;
 
     case SystemPowerState:
-        IoMarkIrpPending(Irp);
-
-        ASSERT3P(Pdo->SystemPowerIrp, ==, NULL);
-        Pdo->SystemPowerIrp = Irp;
-        KeMemoryBarrier();
-
-        ThreadWake(Pdo->SystemPowerThread);
-
-        status = STATUS_PENDING;
+        status = PdoDispatchSetSystemPower(Pdo, Irp);
         break;
 
     default:
@@ -1940,26 +1922,20 @@ PdoSetPower(
         break;
     }
 
-done:
     return status;
 }
 
 static NTSTATUS
-PdoQueryPower(
+PdoDispatchQueryPower(
     IN  PXENBUS_PDO Pdo,
     IN  PIRP        Irp
     )
 {
-    NTSTATUS        status;
-
     UNREFERENCED_PARAMETER(Pdo);
 
-    status = STATUS_SUCCESS;
-
-    Irp->IoStatus.Status = status;
+    Irp->IoStatus.Status = STATUS_SUCCESS;
     IoCompleteRequest(Irp, IO_NO_INCREMENT);
-
-    return status;
+    return STATUS_SUCCESS;
 }
 
 static NTSTATUS
@@ -1977,14 +1953,15 @@ PdoDispatchPower(
 
     switch (StackLocation->MinorFunction) {
     case IRP_MN_SET_POWER:
-        status = PdoSetPower(Pdo, Irp);
+        status = PdoDispatchSetPower(Pdo, Irp);
         break;
 
     case IRP_MN_QUERY_POWER:
-        status = PdoQueryPower(Pdo, Irp);
+        status = PdoDispatchQueryPower(Pdo, Irp);
         break;
 
     default:
+        /* TODO - Always complete with status success?? */
         status = Irp->IoStatus.Status;
         IoCompleteRequest(Irp, IO_NO_INCREMENT);
         break;
@@ -2098,21 +2075,13 @@ PdoCreate(
     Pdo->Dx = Dx;
     Pdo->Fdo = Fdo;
 
-    status = ThreadCreate(PdoSystemPower, Pdo, &Pdo->SystemPowerThread);
-    if (!NT_SUCCESS(status))
-        goto fail3;
-
-    status = ThreadCreate(PdoDevicePower, Pdo, &Pdo->DevicePowerThread);
-    if (!NT_SUCCESS(status))
-        goto fail4;
-
     __PdoSetName(Pdo, Name);
     __PdoSetRemovable(Pdo);
     __PdoSetEjectable(Pdo);
 
     status = BusInitialize(Pdo, &Pdo->BusInterface);
     if (!NT_SUCCESS(status))
-        goto fail5;
+        goto fail3;
 
     status = SuspendGetInterface(FdoGetSuspendContext(Fdo),
                                  XENBUS_SUSPEND_INTERFACE_VERSION_MAX,
@@ -2127,6 +2096,20 @@ PdoCreate(
 
     PdoDumpRevisions(Pdo);
 
+    Pdo->PdoSPowerWorkItem = IoAllocateWorkItem(PhysicalDeviceObject);
+    if (Pdo->PdoSPowerWorkItem == NULL)
+        goto fail4;
+
+    Pdo->PdoSPowerContext.FdoOrPdo = Pdo;
+    Pdo->PdoSPowerContext.Irp = NULL;
+
+    Pdo->PdoDPowerWorkItem = IoAllocateWorkItem(PhysicalDeviceObject);
+    if (Pdo->PdoDPowerWorkItem == NULL)
+        goto fail5;
+
+    Pdo->PdoDPowerContext.FdoOrPdo = Pdo;
+    Pdo->PdoDPowerContext.Irp = NULL;
+
     Dx->Pdo = Pdo;
     PhysicalDeviceObject->Flags &= ~DO_DEVICE_INITIALIZING;
 
@@ -2137,23 +2120,21 @@ PdoCreate(
 fail5:
     Error("fail5\n");
 
-    Pdo->Ejectable = FALSE;
-    Pdo->Removable = FALSE;
-
-    ThreadAlert(Pdo->DevicePowerThread);
-    ThreadJoin(Pdo->DevicePowerThread);
-    Pdo->DevicePowerThread = NULL;
+    IoFreeWorkItem(Pdo->PdoSPowerWorkItem);
+    Pdo->PdoSPowerWorkItem = NULL;
+    RtlZeroMemory(&Pdo->PdoSPowerContext, sizeof(Pdo->PdoSPowerContext));
 
 fail4:
     Error("fail4\n");
 
-    ThreadAlert(Pdo->SystemPowerThread);
-    ThreadJoin(Pdo->SystemPowerThread);
-    Pdo->SystemPowerThread = NULL;
+    RtlZeroMemory(&Pdo->SuspendInterface,
+                  sizeof (XENBUS_SUSPEND_INTERFACE));
 
 fail3:
     Error("fail3\n");
 
+    Pdo->Ejectable = FALSE;
+    Pdo->Removable = FALSE;
     Pdo->Fdo = NULL;
     Pdo->Dx = NULL;
 
@@ -2187,6 +2168,16 @@ PdoDestroy(
 
     FdoRemovePhysicalDeviceObject(Fdo, Pdo);
 
+    IoFreeWorkItem(Pdo->PdoSPowerWorkItem);
+    ASSERT(Pdo->PdoSPowerContext.Irp == NULL);
+    IoFreeWorkItem(Pdo->PdoDPowerWorkItem);
+    ASSERT(Pdo->PdoDPowerContext.Irp == NULL);
+
+    RtlZeroMemory(&Pdo->PdoSPowerWorkItem, sizeof(Pdo->PdoSPowerWorkItem));
+    RtlZeroMemory(&Pdo->PdoDPowerWorkItem, sizeof(Pdo->PdoDPowerWorkItem));
+    RtlZeroMemory(&Pdo->PdoSPowerContext, sizeof(Pdo->PdoSPowerContext));
+    RtlZeroMemory(&Pdo->PdoDPowerContext, sizeof(Pdo->PdoDPowerContext));
+
     Info("%p (%s) (%s)\n",
          PhysicalDeviceObject,
          __PdoGetName(Pdo),
@@ -2202,15 +2193,6 @@ PdoDestroy(
 
     Pdo->Ejectable = FALSE;
     Pdo->Removable = FALSE;
-
-    ThreadAlert(Pdo->DevicePowerThread);
-    ThreadJoin(Pdo->DevicePowerThread);
-    Pdo->DevicePowerThread = NULL;
-    
-    ThreadAlert(Pdo->SystemPowerThread);
-    ThreadJoin(Pdo->SystemPowerThread);
-    Pdo->SystemPowerThread = NULL;
-
     Pdo->Fdo = NULL;
     Pdo->Dx = NULL;
 
diff --git a/src/xenbus/store.c b/src/xenbus/store.c
index 5ffea1f..cf31e3b 100644
--- a/src/xenbus/store.c
+++ b/src/xenbus/store.c
@@ -40,9 +40,13 @@
 #include "thread.h"
 #include "fdo.h"
 #include "dbg_print.h"
-#include "assert.h"
 #include "util.h"
 
+//Temp workaround for CA-371783 testing checked builds.
+#undef ASSERT
+#define ASSERT(x) ((void)0)
+
+
 extern ULONG
 NTAPI
 RtlRandomEx (
diff --git a/src/xenbus/types.h b/src/xenbus/types.h
index 0f08627..8f84860 100644
--- a/src/xenbus/types.h
+++ b/src/xenbus/types.h
@@ -50,4 +50,9 @@ typedef enum _DEVICE_PNP_STATE {
     Deleted
 } DEVICE_PNP_STATE, *PDEVICE_PNP_STATE;
 
+typedef struct _XENBUS_POWER_WORKITEM_CONTEXT {
+    PVOID                           FdoOrPdo;
+    PIRP                            Irp;
+} XENBUS_POWER_WORKITEM_CONTEXT, *PXENBUS_POWER_WORKITEM_CONTEXT;
+
 #endif  // _XENBUS_TYPES_H
diff --git a/src/xenfilt/fdo.c b/src/xenfilt/fdo.c
index 63fa7b3..1e4affa 100644
--- a/src/xenfilt/fdo.c
+++ b/src/xenfilt/fdo.c
@@ -59,11 +59,6 @@ struct _XENFILT_FDO {
     PDEVICE_OBJECT                  PhysicalDeviceObject;
     CHAR                            Name[MAXNAMELEN];
 
-    PXENFILT_THREAD                 SystemPowerThread;
-    PIRP                            SystemPowerIrp;
-    PXENFILT_THREAD                 DevicePowerThread;
-    PIRP                            DevicePowerIrp;
-
     MUTEX                           Mutex;
     LIST_ENTRY                      List;
     ULONG                           References;
@@ -1077,81 +1072,82 @@ fail1:
     return status;
 }
 
+
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
 static NTSTATUS
-FdoSetDevicePowerUp(
-    IN  PXENFILT_FDO    Fdo,
-    IN  PIRP            Irp
+FdoCompleteSetDevicePowerUp(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
     )
 {
+    PXENFILT_FDO     Fdo = (PXENFILT_FDO) Context;
     PIO_STACK_LOCATION  StackLocation;
-    DEVICE_POWER_STATE  DeviceState;
     POWER_STATE         PowerState;
-    NTSTATUS            status;
 
-    StackLocation = IoGetCurrentIrpStackLocation(Irp);
-    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
-
-    ASSERT3U(DeviceState, <,  __FdoGetDevicePowerState(Fdo));
+    UNREFERENCED_PARAMETER(DeviceObject);
 
-    status = FdoForwardIrpSynchronously(Fdo, Irp);
-    if (!NT_SUCCESS(status))
-        goto done;
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    PowerState = StackLocation->Parameters.Power.State;
 
-    Trace("%s: %s -> %s\n",
-          __FdoGetName(Fdo),
-          DevicePowerStateName(__FdoGetDevicePowerState(Fdo)),
-          DevicePowerStateName(DeviceState));
+    if (Irp->PendingReturned) {
+        IoMarkIrpPending(Irp);
+    }
 
-    PowerState.DeviceState = DeviceState;
+    __FdoSetDevicePowerState(Fdo, PowerState.DeviceState);
     PoSetPowerState(Fdo->Dx->DeviceObject,
                     DevicePowerState,
                     PowerState);
 
-    __FdoSetDevicePowerState(Fdo, DeviceState);
+    return STATUS_CONTINUE_COMPLETION;
+}
 
-done:
-    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+static FORCEINLINE NTSTATUS
+FdoDispatchSetDevicePowerUp(
+    IN  PXENFILT_FDO     Fdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
 
-    return status;
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+
+    IoCopyCurrentIrpStackLocationToNext(Irp);
+    IoSetCompletionRoutine(Irp,
+                           FdoCompleteSetDevicePowerUp,
+                           Fdo,
+                           TRUE,
+                           TRUE,
+                           TRUE);
+    return IoCallDriver(Fdo->LowerDeviceObject, Irp);
 }
 
-static NTSTATUS
-FdoSetDevicePowerDown(
-    IN  PXENFILT_FDO    Fdo,
+static FORCEINLINE NTSTATUS
+FdoDispatchSetDevicePowerDown(
+    IN  PXENFILT_FDO     Fdo,
     IN  PIRP            Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
-    DEVICE_POWER_STATE  DeviceState;
     POWER_STATE         PowerState;
-    NTSTATUS            status;
 
     StackLocation = IoGetCurrentIrpStackLocation(Irp);
-    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
+    PowerState = StackLocation->Parameters.Power.State;
 
-    ASSERT3U(DeviceState, >,  __FdoGetDevicePowerState(Fdo));
-
-    Trace("%s: %s -> %s\n",
-          __FdoGetName(Fdo),
-          DevicePowerStateName(__FdoGetDevicePowerState(Fdo)),
-          DevicePowerStateName(DeviceState));
-
-    PowerState.DeviceState = DeviceState;
+    __FdoSetDevicePowerState(Fdo, PowerState.DeviceState);
     PoSetPowerState(Fdo->Dx->DeviceObject,
                     DevicePowerState,
                     PowerState);
 
-    __FdoSetDevicePowerState(Fdo, DeviceState);
-
-    status = FdoForwardIrpSynchronously(Fdo, Irp);
-    IoCompleteRequest(Irp, IO_NO_INCREMENT);
-
-    return status;
+    IoSkipCurrentIrpStackLocation(Irp);
+    return IoCallDriver(Fdo->LowerDeviceObject, Irp);
 }
 
-static NTSTATUS
-FdoSetDevicePower(
-    IN  PXENFILT_FDO    Fdo,
+/* IRQL argnostic code, just mark power states.*/
+static FORCEINLINE NTSTATUS
+FdoDispatchSetDevicePower(
+    IN  PXENFILT_FDO     Fdo,
     IN  PIRP            Irp
     )
 {
@@ -1164,419 +1160,220 @@ FdoSetDevicePower(
     DeviceState = StackLocation->Parameters.Power.State.DeviceState;
     PowerAction = StackLocation->Parameters.Power.ShutdownType;
 
-    Trace("%s: ====> (%s:%s)\n",
-          __FdoGetName(Fdo),
-          DevicePowerStateName(DeviceState), 
+    /* See if we can get away without pending the IRP in a filter
+       driver. */
+
+    Trace("====> (%s:%s)\n",
+          DevicePowerStateName(DeviceState),
           PowerActionName(PowerAction));
 
-    if (DeviceState == __FdoGetDevicePowerState(Fdo)) {
-        status = FdoForwardIrpSynchronously(Fdo, Irp);
-        IoCompleteRequest(Irp, IO_NO_INCREMENT);
 
+    if (DeviceState == __FdoGetDevicePowerState(Fdo)) {
+        IoSkipCurrentIrpStackLocation(Irp);
+        status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
         goto done;
     }
 
-    status = (DeviceState < __FdoGetDevicePowerState(Fdo)) ?
-             FdoSetDevicePowerUp(Fdo, Irp) :
-             FdoSetDevicePowerDown(Fdo, Irp);
+    if (DeviceState < __FdoGetDevicePowerState(Fdo)) {
+        status = FdoDispatchSetDevicePowerUp(Fdo, Irp);
+    } else {
+        status = FdoDispatchSetDevicePowerDown(Fdo, Irp);
+    }
 
 done:
-    Trace("%s: <==== (%s:%s)(%08x)\n",
-          __FdoGetName(Fdo),
-          DevicePowerStateName(DeviceState), 
-          PowerActionName(PowerAction),
-          status);
+    Trace("<==== (%s:%s)\n",
+          DevicePowerStateName(DeviceState),
+          PowerActionName(PowerAction));
+
     return status;
 }
 
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
 static NTSTATUS
-FdoSetSystemPowerUp(
-    IN  PXENFILT_FDO    Fdo,
-    IN  PIRP            Irp
+FdoCompleteSetSystemPowerUp(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
     )
 {
+    PXENFILT_FDO     Fdo = (PXENFILT_FDO) Context;
     PIO_STACK_LOCATION  StackLocation;
     SYSTEM_POWER_STATE  SystemState;
-    NTSTATUS            status;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
 
     StackLocation = IoGetCurrentIrpStackLocation(Irp);
     SystemState = StackLocation->Parameters.Power.State.SystemState;
 
-    ASSERT3U(SystemState, <,  __FdoGetSystemPowerState(Fdo));
-
-    status = FdoForwardIrpSynchronously(Fdo, Irp);
-    if (!NT_SUCCESS(status))
-        goto done;
-
-    Trace("%s: %s -> %s\n",
-          __FdoGetName(Fdo),
-          SystemPowerStateName(__FdoGetSystemPowerState(Fdo)),
-          SystemPowerStateName(SystemState));
+    if (Irp->PendingReturned) {
+        IoMarkIrpPending(Irp);
+    }
 
     __FdoSetSystemPowerState(Fdo, SystemState);
 
-done:
-    IoCompleteRequest(Irp, IO_NO_INCREMENT);
-
-    return status;
+    return STATUS_CONTINUE_COMPLETION;
 }
 
-static NTSTATUS
-FdoSetSystemPowerDown(
+static FORCEINLINE NTSTATUS
+FdoDispatchSetSystemPowerUp(
     IN  PXENFILT_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));
-
-    Trace("%s: %s -> %s\n",
-          __FdoGetName(Fdo),
-          SystemPowerStateName(__FdoGetSystemPowerState(Fdo)),
-          SystemPowerStateName(SystemState));
-
-    __FdoSetSystemPowerState(Fdo, SystemState);
-
-    status = FdoForwardIrpSynchronously(Fdo, Irp);
-    IoCompleteRequest(Irp, IO_NO_INCREMENT);
 
-    return status;
+    IoCopyCurrentIrpStackLocationToNext(Irp);
+    IoSetCompletionRoutine(Irp,
+                           FdoCompleteSetSystemPowerUp,
+                           Fdo,
+                           TRUE,
+                           TRUE,
+                           TRUE);
+    return IoCallDriver(Fdo->LowerDeviceObject, Irp);
 }
 
-static NTSTATUS
-FdoSetSystemPower(
-    IN  PXENFILT_FDO    Fdo,
+static FORCEINLINE NTSTATUS
+FdoDispatchSetSystemPowerDown(
+    IN  PXENFILT_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:%s)\n",
-          __FdoGetName(Fdo),
-          SystemPowerStateName(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:%s)(%08x)\n",
-          __FdoGetName(Fdo),
-          SystemPowerStateName(SystemState), 
-          PowerActionName(PowerAction),
-          status);
-    return status;
-}
-
-static NTSTATUS
-FdoQueryDevicePowerUp(
-    IN  PXENFILT_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 NTSTATUS
-FdoQueryDevicePowerDown(
-    IN  PXENFILT_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);
+    __FdoSetSystemPowerState(Fdo, SystemState);
 
-    return status;
+    IoSkipCurrentIrpStackLocation(Irp);
+    return IoCallDriver(Fdo->LowerDeviceObject, Irp);
 }
 
-static NTSTATUS
-FdoQueryDevicePower(
-    IN  PXENFILT_FDO    Fdo,
+/* IRQL argnostic code, just mark power states.*/
+static FORCEINLINE NTSTATUS
+FdoDispatchSetSystemPower(
+    IN  PXENFILT_FDO     Fdo,
     IN  PIRP            Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
-    DEVICE_POWER_STATE  DeviceState;
+    SYSTEM_POWER_STATE  SystemState;
     POWER_ACTION        PowerAction;
     NTSTATUS            status;
 
     StackLocation = IoGetCurrentIrpStackLocation(Irp);
-    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
+    SystemState = StackLocation->Parameters.Power.State.SystemState;
     PowerAction = StackLocation->Parameters.Power.ShutdownType;
 
-    Trace("%s: ====> (%s:%s)\n",
-          __FdoGetName(Fdo),
-          DevicePowerStateName(DeviceState), 
-          PowerActionName(PowerAction));
+    /* See if we can get away without pending the IRP in a filter
+       driver. */
 
-    if (DeviceState == __FdoGetDevicePowerState(Fdo)) {
-        status = FdoForwardIrpSynchronously(Fdo, Irp);
-        IoCompleteRequest(Irp, IO_NO_INCREMENT);
+    Trace("====> (%s:%s)\n",
+          SystemPowerStateName(SystemState),
+          PowerActionName(PowerAction));
 
+    if (SystemState == __FdoGetSystemPowerState(Fdo)) {
+        IoSkipCurrentIrpStackLocation(Irp);
+        status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
         goto done;
     }
 
-    status = (DeviceState < __FdoGetDevicePowerState(Fdo)) ?
-             FdoQueryDevicePowerUp(Fdo, Irp) :
-             FdoQueryDevicePowerDown(Fdo, Irp);
+    if (SystemState < __FdoGetSystemPowerState(Fdo)) {
+        status = FdoDispatchSetSystemPowerUp(Fdo, Irp);
+    } else {
+        status = FdoDispatchSetSystemPowerDown(Fdo, Irp);
+    }
 
 done:
-    Trace("%s: <==== (%s:%s)(%08x)\n",
-          __FdoGetName(Fdo),
-          DevicePowerStateName(DeviceState), 
-          PowerActionName(PowerAction),
-          status);
+    Trace("<==== (%s:%s)\n",
+          SystemPowerStateName(SystemState),
+          PowerActionName(PowerAction));
+
     return status;
 }
 
-static NTSTATUS
-FdoQuerySystemPowerUp(
+static FORCEINLINE NTSTATUS
+FdoDispatchQueryPower(
     IN  PXENFILT_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;
+    /* Queries we will just pass thru, regardless of what they are.
+       Don't need to pend or set any completion routines. */
+    IoSkipCurrentIrpStackLocation(Irp);
+    return IoCallDriver(Fdo->LowerDeviceObject, Irp);
 }
 
+/* Dispatch - call down, and/or set completion, IRP not pended */
 static NTSTATUS
-FdoQuerySystemPowerDown(
-    IN  PXENFILT_FDO    Fdo,
+FdoDispatchDevicePower(
+    IN  PXENFILT_FDO   Fdo,
     IN  PIRP            Irp
     )
 {
-    PIO_STACK_LOCATION  StackLocation;
-    SYSTEM_POWER_STATE  SystemState;
-    NTSTATUS            status;
+    NTSTATUS status;
+    PIO_STACK_LOCATION StackLocation = IoGetCurrentIrpStackLocation(Irp);
 
-    StackLocation = IoGetCurrentIrpStackLocation(Irp);
-    SystemState = StackLocation->Parameters.Power.State.SystemState;
-
-    ASSERT3U(SystemState, >,  __FdoGetSystemPowerState(Fdo));
+    switch (StackLocation->MinorFunction) {
+    case IRP_MN_SET_POWER:
+        status = FdoDispatchSetDevicePower(Fdo, Irp);
+        break;
 
-    status = FdoForwardIrpSynchronously(Fdo, Irp);
-    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+    case IRP_MN_QUERY_POWER:
+        status = FdoDispatchQueryPower(Fdo, Irp);
+        break;
 
+    default:
+        ASSERT(FALSE);
+        IoSkipCurrentIrpStackLocation(Irp);
+        status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
+        break;
+    }
     return status;
 }
 
+/* Dispatch - call down, and/or set completion, IRP not pended */
 static NTSTATUS
-FdoQuerySystemPower(
-    IN  PXENFILT_FDO    Fdo,
+FdoDispatchSystemPower(
+    IN  PXENFILT_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;
+    NTSTATUS status;
+    PIO_STACK_LOCATION StackLocation = IoGetCurrentIrpStackLocation(Irp);
 
-    Trace("%s: ====> (%s:%s)\n",
-          __FdoGetName(Fdo),
-          SystemPowerStateName(SystemState), 
-          PowerActionName(PowerAction));
+    switch (StackLocation->MinorFunction) {
+    case IRP_MN_SET_POWER:
+        status = FdoDispatchSetSystemPower(Fdo, Irp);
+        break;
 
-    if (SystemState == __FdoGetSystemPowerState(Fdo)) {
-        status = FdoForwardIrpSynchronously(Fdo, Irp);
-        IoCompleteRequest(Irp, IO_NO_INCREMENT);
+    case IRP_MN_QUERY_POWER:
+        status = FdoDispatchQueryPower(Fdo, Irp);
+        break;
 
-        goto done;
+    default:
+        ASSERT(FALSE);
+        IoSkipCurrentIrpStackLocation(Irp);
+        status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
+        break;
     }
-
-    status = (SystemState < __FdoGetSystemPowerState(Fdo)) ?
-             FdoQuerySystemPowerUp(Fdo, Irp) :
-             FdoQuerySystemPowerDown(Fdo, Irp);
-
-done:
-    Trace("%s: <==== (%s:%s)(%08x)\n",
-          __FdoGetName(Fdo),
-          SystemPowerStateName(SystemState), 
-          PowerActionName(PowerAction),
-          status);
-
     return status;
 }
 
-static NTSTATUS
-FdoDevicePower(
-    IN  PXENFILT_THREAD Self,
-    IN  PVOID           Context
-    )
-{
-    PXENFILT_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  PXENFILT_THREAD Self,
-    IN  PVOID           Context
-    )
-{
-    PXENFILT_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;
-}
-
-static NTSTATUS
+static DECLSPEC_NOINLINE NTSTATUS
 FdoDispatchPower(
-    IN  PXENFILT_FDO    Fdo,
+    IN  PXENFILT_FDO   Fdo,
     IN  PIRP            Irp
     )
 {
@@ -1585,79 +1382,36 @@ FdoDispatchPower(
     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) {
         IoSkipCurrentIrpStackLocation(Irp);
-
         status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
-        IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
 
         goto done;
     }
 
     PowerType = StackLocation->Parameters.Power.Type;
 
-    Trace("%s: ====> (%02x:%s)\n",
-          __FdoGetName(Fdo),
-          MinorFunction, 
-          PowerMinorFunctionName(MinorFunction)); 
-
     switch (PowerType) {
     case DevicePowerState:
-        IoMarkIrpPending(Irp);
-
-        ASSERT3P(Fdo->DevicePowerIrp, ==, NULL);
-        Fdo->DevicePowerIrp = Irp;
-        KeMemoryBarrier();
-
-        ThreadWake(Fdo->DevicePowerThread);
-
-        status = STATUS_PENDING;
+        status = FdoDispatchDevicePower(Fdo, Irp);
         break;
 
     case SystemPowerState:
-        IoMarkIrpPending(Irp);
-
-        ASSERT3P(Fdo->SystemPowerIrp, ==, NULL);
-        Fdo->SystemPowerIrp = Irp;
-        KeMemoryBarrier();
-
-        ThreadWake(Fdo->SystemPowerThread);
-
-        status = STATUS_PENDING;
+        status = FdoDispatchSystemPower(Fdo, Irp);
         break;
 
     default:
         IoSkipCurrentIrpStackLocation(Irp);
-
         status = IoCallDriver(Fdo->LowerDeviceObject, Irp);
-        IoReleaseRemoveLock(&Fdo->Dx->RemoveLock, Irp);
         break;
     }
 
-    Trace("%s: <==== (%02x:%s) (%08x)\n",
-          __FdoGetName(Fdo),
-          MinorFunction, 
-          PowerMinorFunctionName(MinorFunction),
-          status);
-
 done:
     return status;
-
-fail1:
-    Error("fail1 (%08x)\n", status);
-
-    Irp->IoStatus.Status = status;
-    IoCompleteRequest(Irp, IO_NO_INCREMENT);
-
-    return status;
 }
 
 static NTSTATUS
@@ -1775,21 +1529,13 @@ FdoCreate(
     Fdo->LowerDeviceObject = LowerDeviceObject;
     Fdo->Type = Type;
 
-    status = ThreadCreate(FdoSystemPower, Fdo, &Fdo->SystemPowerThread);
-    if (!NT_SUCCESS(status))
-        goto fail4;
-
-    status = ThreadCreate(FdoDevicePower, Fdo, &Fdo->DevicePowerThread);
-    if (!NT_SUCCESS(status))
-        goto fail5;
-
     status = __FdoSetDeviceID(Fdo);
     if (!NT_SUCCESS(status))
-        goto fail6;
+        goto fail4;
 
     status = __FdoSetInstanceID(Fdo);
     if (!NT_SUCCESS(status))
-        goto fail7;
+        goto fail5;
 
     __FdoSetName(Fdo);
 
@@ -1814,24 +1560,10 @@ FdoCreate(
 
     return STATUS_SUCCESS;
 
-fail7:
-    Error("fail7\n");
-
-    __FdoClearDeviceID(Fdo);
-
-fail6:
-    Error("fail6\n");
-
-    ThreadAlert(Fdo->DevicePowerThread);
-    ThreadJoin(Fdo->DevicePowerThread);
-    Fdo->DevicePowerThread = NULL;
-
 fail5:
     Error("fail5\n");
 
-    ThreadAlert(Fdo->SystemPowerThread);
-    ThreadJoin(Fdo->SystemPowerThread);
-    Fdo->SystemPowerThread = NULL;
+    __FdoClearDeviceID(Fdo);
 
 fail4:
     Error("fail4\n");
@@ -1891,14 +1623,6 @@ FdoDestroy(
     __FdoClearInstanceID(Fdo);
     __FdoClearDeviceID(Fdo);
 
-    ThreadAlert(Fdo->DevicePowerThread);
-    ThreadJoin(Fdo->DevicePowerThread);
-    Fdo->DevicePowerThread = NULL;
-
-    ThreadAlert(Fdo->SystemPowerThread);
-    ThreadJoin(Fdo->SystemPowerThread);
-    Fdo->SystemPowerThread = NULL;
-
     Fdo->Type = XENFILT_EMULATED_OBJECT_TYPE_UNKNOWN;
     Fdo->LowerDeviceObject = NULL;
     Fdo->PhysicalDeviceObject = NULL;
diff --git a/src/xenfilt/pdo.c b/src/xenfilt/pdo.c
index 741c2f3..2475c6a 100644
--- a/src/xenfilt/pdo.c
+++ b/src/xenfilt/pdo.c
@@ -56,11 +56,6 @@ struct _XENFILT_PDO {
     PDEVICE_OBJECT                  PhysicalDeviceObject;
     CHAR                            Name[MAXNAMELEN];
 
-    PXENFILT_THREAD                 SystemPowerThread;
-    PIRP                            SystemPowerIrp;
-    PXENFILT_THREAD                 DevicePowerThread;
-    PIRP                            DevicePowerIrp;
-
     PXENFILT_FDO                    Fdo;
     BOOLEAN                         Missing;
     const CHAR                      *Reason;
@@ -1186,82 +1181,84 @@ fail1:
     return status;
 }
 
+
+
+
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
 static NTSTATUS
-PdoSetDevicePowerUp(
-    IN  PXENFILT_PDO    Pdo,
-    IN  PIRP            Irp
+PdoCompleteSetDevicePowerUp(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
     )
 {
+    PXENFILT_PDO        Pdo = (PXENFILT_PDO) Context;
     PIO_STACK_LOCATION  StackLocation;
-    DEVICE_POWER_STATE  DeviceState;
     POWER_STATE         PowerState;
-    NTSTATUS            status;
-
-    StackLocation = IoGetCurrentIrpStackLocation(Irp);
-    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
 
-    ASSERT3U(DeviceState, <,  __PdoGetDevicePowerState(Pdo));
+    UNREFERENCED_PARAMETER(DeviceObject);
 
-    status = PdoForwardIrpSynchronously(Pdo, Irp);
-    if (!NT_SUCCESS(status))
-        goto done;
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+    PowerState = StackLocation->Parameters.Power.State;
 
-    Trace("%s: %s -> %s\n",
-          __PdoGetName(Pdo),
-          DevicePowerStateName(__PdoGetDevicePowerState(Pdo)),
-          DevicePowerStateName(DeviceState));
+    if (Irp->PendingReturned) {
+        IoMarkIrpPending(Irp);
+    }
 
-    PowerState.DeviceState = DeviceState;
-    PoSetPowerState(__PdoGetDeviceObject(Pdo),
+    __PdoSetDevicePowerState(Pdo, PowerState.DeviceState);
+    PoSetPowerState(Pdo->Dx->DeviceObject,
                     DevicePowerState,
                     PowerState);
 
-    __PdoSetDevicePowerState(Pdo, DeviceState);
+    return STATUS_CONTINUE_COMPLETION;
+}
 
-done:
-    Irp->IoStatus.Status = status;
-    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+static FORCEINLINE NTSTATUS
+PdoDispatchSetDevicePowerUp(
+    IN  PXENFILT_PDO     Pdo,
+    IN  PIRP            Irp
+    )
+{
+    PIO_STACK_LOCATION  StackLocation;
 
-    return status;
+    StackLocation = IoGetCurrentIrpStackLocation(Irp);
+
+    IoCopyCurrentIrpStackLocationToNext(Irp);
+    IoSetCompletionRoutine(Irp,
+                           PdoCompleteSetDevicePowerUp,
+                           Pdo,
+                           TRUE,
+                           TRUE,
+                           TRUE);
+    return IoCallDriver(Pdo->LowerDeviceObject, Irp);
 }
 
-static NTSTATUS
-PdoSetDevicePowerDown(
+static FORCEINLINE NTSTATUS
+PdoDispatchSetDevicePowerDown(
     IN  PXENFILT_PDO    Pdo,
     IN  PIRP            Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
-    DEVICE_POWER_STATE  DeviceState;
     POWER_STATE         PowerState;
-    NTSTATUS            status;
 
     StackLocation = IoGetCurrentIrpStackLocation(Irp);
-    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
+    PowerState = StackLocation->Parameters.Power.State;
 
-    ASSERT3U(DeviceState, >,  __PdoGetDevicePowerState(Pdo));
-
-    Trace("%s: %s -> %s\n",
-          __PdoGetName(Pdo),
-          DevicePowerStateName(__PdoGetDevicePowerState(Pdo)),
-          DevicePowerStateName(DeviceState));
-
-    PowerState.DeviceState = DeviceState;
-    PoSetPowerState(__PdoGetDeviceObject(Pdo),
+    __PdoSetDevicePowerState(Pdo, PowerState.DeviceState);
+    PoSetPowerState(Pdo->Dx->DeviceObject,
                     DevicePowerState,
                     PowerState);
 
-    __PdoSetDevicePowerState(Pdo, DeviceState);
-
-    status = PdoForwardIrpSynchronously(Pdo, Irp);
-    IoCompleteRequest(Irp, IO_NO_INCREMENT);
-
-    return status;
+    IoSkipCurrentIrpStackLocation(Irp);
+    return IoCallDriver(Pdo->LowerDeviceObject, Irp);
 }
 
-static NTSTATUS
-PdoSetDevicePower(
-    IN  PXENFILT_PDO    Pdo,
+/* IRQL argnostic code, just mark power states.*/
+static FORCEINLINE NTSTATUS
+PdoDispatchSetDevicePower(
+    IN  PXENFILT_PDO     Pdo,
     IN  PIRP            Irp
     )
 {
@@ -1274,422 +1271,220 @@ PdoSetDevicePower(
     DeviceState = StackLocation->Parameters.Power.State.DeviceState;
     PowerAction = StackLocation->Parameters.Power.ShutdownType;
 
-    Trace("%s: ====> (%s:%s)\n",
-          __PdoGetName(Pdo),
-          DevicePowerStateName(DeviceState), 
+    /* See if we can get away without pending the IRP in a filter
+       driver. */
+
+    Trace("====> (%s:%s)\n",
+          DevicePowerStateName(DeviceState),
           PowerActionName(PowerAction));
 
-    if (DeviceState == __PdoGetDevicePowerState(Pdo)) {
-        status = PdoForwardIrpSynchronously(Pdo, Irp);
-        IoCompleteRequest(Irp, IO_NO_INCREMENT);
 
+    if (DeviceState == __PdoGetDevicePowerState(Pdo)) {
+        IoSkipCurrentIrpStackLocation(Irp);
+        status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
         goto done;
     }
 
-    status = (DeviceState < __PdoGetDevicePowerState(Pdo)) ?
-             PdoSetDevicePowerUp(Pdo, Irp) :
-             PdoSetDevicePowerDown(Pdo, Irp);
+    if (DeviceState < __PdoGetDevicePowerState(Pdo)) {
+        status = PdoDispatchSetDevicePowerUp(Pdo, Irp);
+    } else {
+        status = PdoDispatchSetDevicePowerDown(Pdo, Irp);
+    }
 
 done:
-    Trace("%s: <==== (%s:%s)(%08x)\n",
-          __PdoGetName(Pdo),
-          DevicePowerStateName(DeviceState), 
-          PowerActionName(PowerAction),
-          status);
+    Trace("<==== (%s:%s)\n",
+          DevicePowerStateName(DeviceState),
+          PowerActionName(PowerAction));
+
     return status;
 }
 
+__drv_functionClass(IO_COMPLETION_ROUTINE)
+__drv_sameIRQL
 static NTSTATUS
-PdoSetSystemPowerUp(
-    IN  PXENFILT_PDO    Pdo,
-    IN  PIRP            Irp
+PdoCompleteSetSystemPowerUp(
+    IN  PDEVICE_OBJECT  DeviceObject,
+    IN  PIRP            Irp,
+    IN  PVOID           Context
     )
 {
+    PXENFILT_PDO     Pdo = (PXENFILT_PDO) Context;
     PIO_STACK_LOCATION  StackLocation;
     SYSTEM_POWER_STATE  SystemState;
-    NTSTATUS            status;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
 
     StackLocation = IoGetCurrentIrpStackLocation(Irp);
     SystemState = StackLocation->Parameters.Power.State.SystemState;
 
-    ASSERT3U(SystemState, <,  __PdoGetSystemPowerState(Pdo));
-
-    status = PdoForwardIrpSynchronously(Pdo, Irp);
-    if (!NT_SUCCESS(status))
-        goto done;
-
-    Trace("%s: %s -> %s\n",
-          __PdoGetName(Pdo),
-          SystemPowerStateName(__PdoGetSystemPowerState(Pdo)),
-          SystemPowerStateName(SystemState));
+    if (Irp->PendingReturned) {
+        IoMarkIrpPending(Irp);
+    }
 
     __PdoSetSystemPowerState(Pdo, SystemState);
 
-done:
-    Irp->IoStatus.Status = status;
-    IoCompleteRequest(Irp, IO_NO_INCREMENT);
-
-    return status;
+    return STATUS_CONTINUE_COMPLETION;
 }
 
-static NTSTATUS
-PdoSetSystemPowerDown(
+static FORCEINLINE NTSTATUS
+PdoDispatchSetSystemPowerUp(
     IN  PXENFILT_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));
-
-    Trace("%s: %s -> %s\n",
-          __PdoGetName(Pdo),
-          SystemPowerStateName(__PdoGetSystemPowerState(Pdo)),
-          SystemPowerStateName(SystemState));
-
-    __PdoSetSystemPowerState(Pdo, SystemState);
 
-    status = PdoForwardIrpSynchronously(Pdo, Irp);
-    IoCompleteRequest(Irp, IO_NO_INCREMENT);
-
-    return status;
+    IoCopyCurrentIrpStackLocationToNext(Irp);
+    IoSetCompletionRoutine(Irp,
+                           PdoCompleteSetSystemPowerUp,
+                           Pdo,
+                           TRUE,
+                           TRUE,
+                           TRUE);
+    return IoCallDriver(Pdo->LowerDeviceObject, Irp);
 }
 
-static NTSTATUS
-PdoSetSystemPower(
-    IN  PXENFILT_PDO    Pdo,
+static FORCEINLINE NTSTATUS
+PdoDispatchSetSystemPowerDown(
+    IN  PXENFILT_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:%s)\n",
-          __PdoGetName(Pdo),
-          SystemPowerStateName(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:%s)(%08x)\n",
-          __PdoGetName(Pdo),
-          SystemPowerStateName(SystemState), 
-          PowerActionName(PowerAction),
-          status);
-    return status;
-}
-
-static NTSTATUS
-PdoQueryDevicePowerUp(
-    IN  PXENFILT_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 NTSTATUS
-PdoQueryDevicePowerDown(
-    IN  PXENFILT_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);
+    __PdoSetSystemPowerState(Pdo, SystemState);
 
-    return status;
+    IoSkipCurrentIrpStackLocation(Irp);
+    return IoCallDriver(Pdo->LowerDeviceObject, Irp);
 }
 
-static NTSTATUS
-PdoQueryDevicePower(
-    IN  PXENFILT_PDO    Pdo,
+/* IRQL argnostic code, just mark power states.*/
+static FORCEINLINE NTSTATUS
+PdoDispatchSetSystemPower(
+    IN  PXENFILT_PDO     Pdo,
     IN  PIRP            Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
-    DEVICE_POWER_STATE  DeviceState;
+    SYSTEM_POWER_STATE  SystemState;
     POWER_ACTION        PowerAction;
     NTSTATUS            status;
 
     StackLocation = IoGetCurrentIrpStackLocation(Irp);
-    DeviceState = StackLocation->Parameters.Power.State.DeviceState;
+    SystemState = StackLocation->Parameters.Power.State.SystemState;
     PowerAction = StackLocation->Parameters.Power.ShutdownType;
 
-    Trace("%s: ====> (%s:%s)\n",
-          __PdoGetName(Pdo),
-          DevicePowerStateName(DeviceState), 
-          PowerActionName(PowerAction));
+    /* See if we can get away without pending the IRP in a filter
+       driver. */
 
-    if (DeviceState == __PdoGetDevicePowerState(Pdo)) {
-        status = PdoForwardIrpSynchronously(Pdo, Irp);
-        IoCompleteRequest(Irp, IO_NO_INCREMENT);
+    Trace("====> (%s:%s)\n",
+          SystemPowerStateName(SystemState),
+          PowerActionName(PowerAction));
 
+    if (SystemState == __PdoGetSystemPowerState(Pdo)) {
+        IoSkipCurrentIrpStackLocation(Irp);
+        status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
         goto done;
     }
 
-    status = (DeviceState < __PdoGetDevicePowerState(Pdo)) ?
-             PdoQueryDevicePowerUp(Pdo, Irp) :
-             PdoQueryDevicePowerDown(Pdo, Irp);
+    if (SystemState < __PdoGetSystemPowerState(Pdo)) {
+        status = PdoDispatchSetSystemPowerUp(Pdo, Irp);
+    } else {
+        status = PdoDispatchSetSystemPowerDown(Pdo, Irp);
+    }
 
 done:
-    Trace("%s: <==== (%s:%s)(%08x)\n",
-          __PdoGetName(Pdo),
-          DevicePowerStateName(DeviceState), 
-          PowerActionName(PowerAction),
-          status);
-    return status;
-}
-
-static NTSTATUS
-PdoQuerySystemPowerUp(
-    IN  PXENFILT_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);
+    Trace("<==== (%s:%s)\n",
+          SystemPowerStateName(SystemState),
+          PowerActionName(PowerAction));
 
     return status;
 }
 
-static NTSTATUS
-PdoQuerySystemPowerDown(
+static FORCEINLINE NTSTATUS
+PdoDispatchQueryPower(
     IN  PXENFILT_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;
+    /* Queries we will just pass thru, regardless of what they are.
+       Don't need to pend or set any completion routines. */
+    IoSkipCurrentIrpStackLocation(Irp);
+    return IoCallDriver(Pdo->LowerDeviceObject, Irp);
 }
 
+/* Dispatch - call down, and/or set completion, IRP not pended */
 static NTSTATUS
-PdoQuerySystemPower(
-    IN  PXENFILT_PDO    Pdo,
+PdoDispatchDevicePower(
+    IN  PXENFILT_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;
+    NTSTATUS status;
+    PIO_STACK_LOCATION StackLocation = IoGetCurrentIrpStackLocation(Irp);
 
-    Trace("%s: ====> (%s:%s)\n",
-          __PdoGetName(Pdo),
-          SystemPowerStateName(SystemState), 
-          PowerActionName(PowerAction));
+    switch (StackLocation->MinorFunction) {
+    case IRP_MN_SET_POWER:
+        status = PdoDispatchSetDevicePower(Pdo, Irp);
+        break;
 
-    if (SystemState == __PdoGetSystemPowerState(Pdo)) {
-        status = PdoForwardIrpSynchronously(Pdo, Irp);
-        IoCompleteRequest(Irp, IO_NO_INCREMENT);
+    case IRP_MN_QUERY_POWER:
+        status = PdoDispatchQueryPower(Pdo, Irp);
+        break;
 
-        goto done;
+    default:
+        ASSERT(FALSE);
+        IoSkipCurrentIrpStackLocation(Irp);
+        status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
+        break;
     }
-
-    status = (SystemState < __PdoGetSystemPowerState(Pdo)) ?
-             PdoQuerySystemPowerUp(Pdo, Irp) :
-             PdoQuerySystemPowerDown(Pdo, Irp);
-
-done:
-    Trace("%s: <==== (%s:%s)(%08x)\n",
-          __PdoGetName(Pdo),
-          SystemPowerStateName(SystemState), 
-          PowerActionName(PowerAction),
-          status);
-
     return status;
 }
 
+/* Dispatch - call down, and/or set completion, IRP not pended */
 static NTSTATUS
-PdoDevicePower(
-    IN  PXENFILT_THREAD Self,
-    IN  PVOID           Context
+PdoDispatchSystemPower(
+    IN  PXENFILT_PDO   Pdo,
+    IN  PIRP            Irp
     )
 {
-    PXENFILT_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;
+    NTSTATUS status;
+    PIO_STACK_LOCATION StackLocation = IoGetCurrentIrpStackLocation(Irp);
 
-        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;
+    switch (StackLocation->MinorFunction) {
+    case IRP_MN_SET_POWER:
+        status = PdoDispatchSetSystemPower(Pdo, Irp);
+        break;
 
-        default:
-            ASSERT(FALSE);
-            break;
-        }
+    case IRP_MN_QUERY_POWER:
+        status = PdoDispatchQueryPower(Pdo, Irp);
+        break;
 
-        IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
+    default:
+        ASSERT(FALSE);
+        IoSkipCurrentIrpStackLocation(Irp);
+        status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
+        break;
     }
-
-    return STATUS_SUCCESS;
+    return status;
 }
 
-static NTSTATUS
-PdoSystemPower(
-    IN  PXENFILT_THREAD Self,
-    IN  PVOID           Context
-    )
-{
-    PXENFILT_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;
-}
-
-static NTSTATUS
+static DECLSPEC_NOINLINE NTSTATUS
 PdoDispatchPower(
-    IN  PXENFILT_PDO    Pdo,
+    IN  PXENFILT_PDO   Pdo,
     IN  PIRP            Irp
     )
 {
@@ -1698,81 +1493,39 @@ PdoDispatchPower(
     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) {
         IoSkipCurrentIrpStackLocation(Irp);
-
         status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
-        IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
 
         goto done;
     }
 
     PowerType = StackLocation->Parameters.Power.Type;
 
-    Trace("%s: ====> (%02x:%s)\n",
-          __PdoGetName(Pdo),
-          MinorFunction, 
-          PowerMinorFunctionName(MinorFunction)); 
-
     switch (PowerType) {
     case DevicePowerState:
-        IoMarkIrpPending(Irp);
-
-        ASSERT3P(Pdo->DevicePowerIrp, ==, NULL);
-        Pdo->DevicePowerIrp = Irp;
-        KeMemoryBarrier();
-
-        ThreadWake(Pdo->DevicePowerThread);
-
-        status = STATUS_PENDING;
+        status = PdoDispatchDevicePower(Pdo, Irp);
         break;
 
     case SystemPowerState:
-        IoMarkIrpPending(Irp);
-
-        ASSERT3P(Pdo->SystemPowerIrp, ==, NULL);
-        Pdo->SystemPowerIrp = Irp;
-        KeMemoryBarrier();
-
-        ThreadWake(Pdo->SystemPowerThread);
-
-        status = STATUS_PENDING;
+        status = PdoDispatchSystemPower(Pdo, Irp);
         break;
 
     default:
         IoSkipCurrentIrpStackLocation(Irp);
-
         status = IoCallDriver(Pdo->LowerDeviceObject, Irp);
-        IoReleaseRemoveLock(&Pdo->Dx->RemoveLock, Irp);
         break;
     }
 
-    Trace("%s: <==== (%02x:%s) (%08x)\n",
-          __PdoGetName(Pdo),
-          MinorFunction, 
-          PowerMinorFunctionName(MinorFunction),
-          status);
-
 done:
     return status;
-
-fail1:
-    Error("fail1 (%08x)\n", status);
-
-    Irp->IoStatus.Status = status;
-    IoCompleteRequest(Irp, IO_NO_INCREMENT);
-
-    return status;
 }
 
+
 static NTSTATUS
 PdoDispatchDefault(
     IN  PXENFILT_PDO    Pdo,
@@ -1907,17 +1660,9 @@ PdoCreate(
     Pdo->LowerDeviceObject = LowerDeviceObject;
     Pdo->Type = Type;
 
-    status = ThreadCreate(PdoSystemPower, Pdo, &Pdo->SystemPowerThread);
-    if (!NT_SUCCESS(status))
-        goto fail4;
-
-    status = ThreadCreate(PdoDevicePower, Pdo, &Pdo->DevicePowerThread);
-    if (!NT_SUCCESS(status))
-        goto fail5;
-
     status = PdoSetDeviceInformation(Pdo);
     if (!NT_SUCCESS(status))
-        goto fail6;
+        goto fail4;
 
     status = DriverQueryId(Pdo->LowerDeviceObject,
                            BusQueryCompatibleIDs,
@@ -1932,7 +1677,7 @@ PdoCreate(
                                __PdoGetType(Pdo),
                                &Pdo->EmulatedObject);
     if (!NT_SUCCESS(status))
-        goto fail7;
+        goto fail5;
 
     if (CompatibleIDs)
         ExFreePool(CompatibleIDs);
@@ -1957,28 +1702,14 @@ PdoCreate(
 
     return STATUS_SUCCESS;
 
-fail7:
-    Error("fail7\n");
+fail5:
+    Error("fail5\n");
 
     if (CompatibleIDs)
         ExFreePool(CompatibleIDs);
 
     PdoClearDeviceInformation(Pdo);
 
-fail6:
-    Error("fail6\n");
-
-    ThreadAlert(Pdo->DevicePowerThread);
-    ThreadJoin(Pdo->DevicePowerThread);
-    Pdo->DevicePowerThread = NULL;
-
-fail5:
-    Error("fail5\n");
-
-    ThreadAlert(Pdo->SystemPowerThread);
-    ThreadJoin(Pdo->SystemPowerThread);
-    Pdo->SystemPowerThread = NULL;
-
 fail4:
     Error("fail4\n");
 
@@ -2040,14 +1771,6 @@ PdoDestroy(
 
     PdoClearDeviceInformation(Pdo);
 
-    ThreadAlert(Pdo->DevicePowerThread);
-    ThreadJoin(Pdo->DevicePowerThread);
-    Pdo->DevicePowerThread = NULL;
-
-    ThreadAlert(Pdo->SystemPowerThread);
-    ThreadJoin(Pdo->SystemPowerThread);
-    Pdo->SystemPowerThread = NULL;
-
     Pdo->Type = XENFILT_EMULATED_OBJECT_TYPE_UNKNOWN;
     Pdo->PhysicalDeviceObject = NULL;
     Pdo->LowerDeviceObject = NULL;
-- 
2.25.0.windows.1



From win-pv-devel-bounces@lists.xenproject.org Tue Nov 08 13:40:12 2022
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 08 Nov 2022 13:40:12 +0000
Received: from list by lists.xenproject.org with outflank-mailman.440048.694098 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1osOpl-0001zE-CZ; Tue, 08 Nov 2022 13:40:09 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 440048.694098; Tue, 08 Nov 2022 13:40:09 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1osOpl-0001z7-9t; Tue, 08 Nov 2022 13:40:09 +0000
Received: by outflank-mailman (input) for mailman id 440048;
 Tue, 08 Nov 2022 13:40:07 +0000
Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50]
 helo=se1-gles-flk1.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=h5nM=3I=citrix.com=prvs=30438a45d=martin.harvey@srs-se1.protection.inumbo.net>)
 id 1osOpj-0001uV-8q
 for win-pv-devel@lists.xenproject.org; Tue, 08 Nov 2022 13:40:07 +0000
Received: from esa2.hc3370-68.iphmx.com (esa2.hc3370-68.iphmx.com
 [216.71.145.153]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS
 id d8f695b1-5f6a-11ed-8fd1-01056ac49cbb;
 Tue, 08 Nov 2022 14:40:04 +0100 (CET)
Received: from mail-bn8nam11lp2168.outbound.protection.outlook.com (HELO
 NAM11-BN8-obe.outbound.protection.outlook.com) ([104.47.58.168])
 by ob1.hc3370-68.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256;
 08 Nov 2022 08:40:01 -0500
Received: from MW4PR03MB6347.namprd03.prod.outlook.com (2603:10b6:303:11e::22)
 by BN9PR03MB6092.namprd03.prod.outlook.com (2603:10b6:408:11d::5)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5791.27; Tue, 8 Nov
 2022 13:40:00 +0000
Received: from MW4PR03MB6347.namprd03.prod.outlook.com
 ([fe80::1a60:e566:681f:83f3]) by MW4PR03MB6347.namprd03.prod.outlook.com
 ([fe80::1a60:e566:681f:83f3%2]) with mapi id 15.20.5791.026; Tue, 8 Nov 2022
 13:40:00 +0000
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/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: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: d8f695b1-5f6a-11ed-8fd1-01056ac49cbb
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1667914804;
  h=from:to:subject:date:message-id:references:in-reply-to:
   content-transfer-encoding:mime-version;
  bh=L3RYAsztGI1kLmPbWa0Q2YJuPCzC3dVj16DWmNqpLhA=;
  b=XX8NelSfRNmwjt2RdSF1mLvWrXDOjUMTyHfZHyBS9U5H9EmuusqT/iMB
   CBn6IE2+pUWLmF+Bj978inRvSJdqN3rphSHzgP3TqLRvsqkXMIY3lXHeJ
   4FdxZSTRqqyoB6BdTEOsHwqiF3QlSEDwg4mR+IKYMldmGsWxBhSNLGMAK
   Q=;
X-IronPort-RemoteIP: 104.47.58.168
X-IronPort-MID: 84404492
X-IronPort-Reputation: None
X-IronPort-Listener: OutboundMail
X-IronPort-SenderGroup: RELAY_O365
X-IronPort-MailFlowPolicy: $RELAYED
IronPort-Data: A9a23:CMHMCqB0JmJxkxVW/zPiw5YqxClBgxIJ4kV8jS/XYbTApG8mgWQGn
 zBNWGmBPvyLamD3L4gkaYnl80wBupHVm4NjQQY4rX1jcSlH+JHPbTi7wuUcHAvJd5GeExg3h
 yk6QoOdRCzhZiaE/n9BCpC48T8nk/nNHuCnYAL9EngZbRd+Tys8gg5Ulec8g4p56fC0GArIs
 t7pyyHlEAbNNwVcbyRFtcpvlDs15K6o4WpA7gRnDRx2lAS2e0c9Xcp3yZ6ZdxMUcqEMdsamS
 uDKyq2O/2+x13/B3fv8z94X2mVTKlLjFVDmZkh+AsBOsTAbzsAG6Y4pNeJ0VKtio27hc+ada
 jl6ncfYpQ8BZsUgkQmGOvVSO3kW0aZuoNcrLZUj2CA6IoKvn3bEmp1T4E8K0YIw4ct7OU0Nx
 cEhMGpccUiMu93o8pXrVbw57igjBJGD0II3nFhFlGicJ9B2BJfJTuPN+MNS2yo2ioZWB/HCa
 sEFaD1pKhPdfxlIPVRRA5U79AuqriCnL3sE9xTI9exuvTi7IA9ZidABNPLQc8aWRMMTnk+Cu
 G/X12/4HgsbJJqUzj/tHneE1rOTxX+nCdh6+LuQ1dBWw0GI3WEvOSYtSACbj/6zskjncocKQ
 6AT0m90xUQoz2S7R9X8WhK+oX2ssRsVWt4WGOo/gCmSy6yR+xjcCmUaQzppbN09qNRwVTEsz
 kWOnd7iGXpoqrL9dJ6G3rKdrDf3My5FK2YHPHYAVVFcvYmlp5wvhBXSSNolCLSyktD+BTD3x
 XaNsTQ6gLIQy8UM0s1X4Gz6vt5lnbCRJiZd2+kddjvNAt9RDGJ9W7GV1A==
IronPort-HdrOrdr: A9a23:NgcAfqDU170H4BXlHegSsceALOsnbusQ8zAXPh9KJCC9I/bzqy
 nxpp8mPEfP+U4ssQIb6Ku90c67MDjhHP9OkMEs1NKZMDUO11HYSL2KgbGC/9SkIVyGygc/79
 YrT0EdMqyWMbESt6+Tj2eF+pQbsb+6GcuT9ITjJgJWPGRXgtZbnmVE42igcnFedU1jP94UBZ
 Cc7s1Iq36LYnIMdPm2AXEDQqzqu8DLvIiOW29LOzcXrC21yR+44r/zFBaVmj0EVSlU/Lsk+W
 /Z1yTk+6SYte2hwBO07R6d030Woqqu9jJwPr3NtiEnEESutu9uXvUiZ1S2hkF1nAho0idurD
 CDmWZlAy050QKqQoj8m2qR5+Cn6kdi15aq8y7lvVLz5cP+Xz40EMxHmMZQdQbY8VMpuJVm3L
 tMxH/xjeshMfrsplWJ2zHzbWAfqmOk5X451eIDhX1WVoUTLLdXsIwE5UtQVJMNBjjz5owrGP
 RnSJi03oceTXqKK3TC+mV/yt2lWXo+Wh+AX0gZo8SQlzxbhmpwwUcUzNEW2n0A6JU+QZ9Z4P
 msCNUfqJheCssNKa5tDuYIRsW6TmTLXBLXKWqXZU/qEakWUki92aIfII9Fl91CVKZ4vafawq
 6xL2+wnVRCBX7GGImJwIBB9AzLTSG0QSnto/sul6REhg==
X-IronPort-AV: E=Sophos;i="5.96,147,1665460800"; 
   d="scan'208";a="84404492"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=by/jRiL1BR5t5BfstNe1Exlw9imPiAK/NmJxVFyN8lHDIF4D+ZgAslWMcjVQiiysY+XGdYHTTvd9kpkiQHyTKmydnGhtLPakoXBzu+7lfe/1+8tIa6dD3lTJO0+iCKCzILYdyIbnGDV+KNaCfEzkEX+dttHwwNeOF1oNUNd9n4w6B7XEWj+tDNvxHTWKdeeteBrUX1s2M9+25RLEPKKIGcJKvUql0n8JyIrgPlOS5heHGDFh+XPmy0gGoQ2BFReUciDJOzpixEMXS/FmEQm2cMv/nBLHMzSxqBBWM80Y7iNejJAf5I/EDoEE0ciNMW0Wqyb6syZMiA5u/5Pri3a/Vw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=L3RYAsztGI1kLmPbWa0Q2YJuPCzC3dVj16DWmNqpLhA=;
 b=BzcIE10eQsdeXDEsuBWhqwFT2lpuxhSOL5rr1g3cIqjWAPOTxi1gKA5/hweYZwQDuku8fJSrsXa/lK1p9OeHwOYUPByzUkFQdFrPJHrXJ1EX5cWQBLxhzS7Infs9s5YviU+gp53fJ3STJ3TdftTL/M3ISYGNJ/zKI0VR98dt+NQYGdFte0rGr3DtxcLxYnA8h8hCow2NKtQPbiY8TbgP1o50ypXhzLM9r241m34wGVTLKQAzdla4K7LnxVnQuzPXpJliNWf1Ofd6+rnddYzbLNQtO0oEskUA2rNB0gvbexXuClL3fXDeQ3a6hWJ5vxZi9eKKI1ft2A/4d6DRVD0Ydg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=L3RYAsztGI1kLmPbWa0Q2YJuPCzC3dVj16DWmNqpLhA=;
 b=UGUm7YRj2BTz5PeYnJXHlL0StzlU8/8ka2hrPCp11bgeXcoVdxDVlJJAw5bRSmCVESm08IJwsVhfGun2iudWK5uVuwYURfhX9ZYVVA9keCxS+hbzeMcCblB89VbTWAHAa6BVE0Fxi6DP7VPlzlhUjNyvpCM7v9Y0RpH5Q3xHKfM=
From: Martin Harvey <martin.harvey@citrix.com>
To: Paul Durrant <xadimgnik@gmail.com>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Subject: RE: [PATCH] Correct return codes during racy destruction.
Thread-Topic: [PATCH] Correct return codes during racy destruction.
Thread-Index: AQHY81+9qLsOJ2hQ9EGiZ4lsMUPqyq403zSAgAAlRoA=
Date: Tue, 8 Nov 2022 13:40:00 +0000
Message-ID:
 <MW4PR03MB6347B147C08625B1610C8B479A3F9@MW4PR03MB6347.namprd03.prod.outlook.com>
References: <20221108104900.1645-1-Martin.Harvey@citrix.com>
 <626a0d57-9537-e108-5d5d-361d3c18b03a@xen.org>
In-Reply-To: <626a0d57-9537-e108-5d5d-361d3c18b03a@xen.org>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
authentication-results: dkim=none (message not signed)
 header.d=none;dmarc=none action=none header.from=citrix.com;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: MW4PR03MB6347:EE_|BN9PR03MB6092:EE_
x-ms-office365-filtering-correlation-id: ba74f329-a7e6-4f88-ff8b-08dac18ebb79
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam: BCL:0;
x-microsoft-antispam-message-info:
 Spf6j3bxekEJq04qant6Snt9bGRX+OXJT0ubfF/STP0s8cXrVGwVQ+pS9D058cIoYoB/OhL1vVoLMm3Qv+/TQJCtsVYmaQlmuu1VygWusF6tGCngh5cTwgyotWQBhX3zOWnrCbWI7Oku7ZL6g5GhpNeKs8jQ59aERw1V+ylcCrrmvSRDsogCeYQtnJUaxMnOxDLW5ksQF9QCqOVl7RYtCFAsyzeQKSywkgx+F7temvn7jQ4mTfJtQwngPvIRy/PyTsRPKa1NBBez3LcqONkUtYXZzDe8aBKuJFeIV38Mb69EJmf5mBtmAVfOu+vkCkM0ZUyfxkGipU4/lxPhOr5pZw4QSEPalRdpaeliXbATfRlbj2nWK8QXOIMZn1BD/JAY/aXz6AuyqdvvYA0D6njHMLxh88tgSR1d+oz9NfptazWl151imEBYlpNt3bdw708mj1rbxO2cjAQ2EMbJ3hJDXLthEZmxBkgBsa5u04qwBsryn9+5yfYzvELzSFAbuqTbgXAkXM+0e7hdooqH0OM4SErQkFKQNyrmXs3HJlCFN/sFBU4aQOq5F9QDECVLKO6tzcFQ4znuU4ExWGHe0wgyC0eKOWjV426B6ADe6QQFwoVFTfP6+3Df2EL4fyYWkhR1bsgOVZgrYVU1w+nGpZ2GyAXbAyNyowr2FoqjHOZYDfXaeW1zB5cedBMtsQtUdmqvUvPpkz/8jLCvMFWJli4Q+8xlOY+WiO9PcAtzlWexmrTPUMpF3KENoSIh0/fePW8HinAyk3CjywrHqgEfz1QOUQ==
x-forefront-antispam-report:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MW4PR03MB6347.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(366004)(346002)(396003)(136003)(376002)(39860400002)(451199015)(9686003)(55016003)(26005)(53546011)(7696005)(186003)(2906002)(5660300002)(478600001)(83380400001)(6506007)(38070700005)(86362001)(33656002)(82960400001)(38100700002)(122000001)(41300700001)(8936002)(52536014)(71200400001)(44832011)(316002)(110136005)(64756008)(66476007)(66946007)(76116006)(66556008)(8676002)(66446008);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?utf-8?B?NkxGeWVMSU5hU1dPckpoa3Q4RlpURWxYbHRDT2FJSDFjL09BK3ZqeDRxOG1E?=
 =?utf-8?B?Z2ZTbnJoK29BY2gxQmplR3QyOEgxMlV5Ujd1S05EMzFmZW1XNnpoZVNjTjVC?=
 =?utf-8?B?cnNaSmJkUXE4MzdSNGdRbzgxejFQa3VXOEliTS9EWTJCVWlpUEVxK09FdWtI?=
 =?utf-8?B?R2YwZVY0V1dGSVZiQVZRaWYwWitOb0J1djNLWVBBQnRlYlZ4QjNtZWEvVlJJ?=
 =?utf-8?B?SWlvSFk2UWV3ZysrakoxVnRZZEt4VGl0M1MxZk8xT2JpaWxsenE2Y1NvZFhs?=
 =?utf-8?B?TTBydWUyK0dpVGtvaXp1bWs4MHVPNGhNNlNvQkd5WkhKb1htaXdDbEhSSlBR?=
 =?utf-8?B?ek1LeVhzcXVNYnp5RzR4eVBOUnNMMWJUODYvV0phaEtRZjd6R2xZaVlDYUJq?=
 =?utf-8?B?eUUzNnRPVHl5L0REdHBNeWZKUFA3dW1RTDNNd0grS243MFB6dVhBSDducEZR?=
 =?utf-8?B?TkZ3bmwycVdBbC9XSmVTcEczaE1Oc2p1UTQzUGhsVWpjTEtYZS9ldlBXd1FM?=
 =?utf-8?B?TWxJck1XTzdVNklPS29hOHg1VXFHUWRNZ0lDc2JFdFNXTkR4SmgyMWdxTkUv?=
 =?utf-8?B?ekxUYWRuZWplL0tIOG5yUVcyRElrWm5vM3hpRythUmsyZGhqc0k5Qzdzc1hi?=
 =?utf-8?B?UWxQa0gwdXBlaS8ySFgrU2t6Y2xZRThNSVdHNm9LUWxna2ZxRFk5dkhDd0RE?=
 =?utf-8?B?QkFWaS9pRkFHbkd1VnAwbGQ3VEtKMVF5ZUVUVXV1UTlnK0hZc0RiRzBIUkds?=
 =?utf-8?B?b1hMZW9qM285OVRkQUZCYVE0QlkwWTEzL2dCTks4dlJ5clYxNEFvOU5jRXRr?=
 =?utf-8?B?NkFGdVhIQUVGeExNL0FGZld3VTlsdllIN3dTYitNVVZ2c2RFYXpJeGpKeHpU?=
 =?utf-8?B?Vk9uY25xenVrRCtsWmwyNkNHa0VoelZoSysyc2FvWFNFMU04N1pTYUVYSUhP?=
 =?utf-8?B?cW5iQVdLTFdkdUliUUYrRkswLzBva2NlTDNPcGZWbXB5VWdpcWl2ZVhPWmxz?=
 =?utf-8?B?M3ZtWDlDai9oZ3c3YUw3NnJ1d2JtSnJINjd6UXc4RVl6OGZTZnpwZkkvY3JF?=
 =?utf-8?B?S3d3MFRYdld4LzNzdm5SU29LellBdXNTSHR0cUJvZ0gybXZ6WDk2UmlnVGJq?=
 =?utf-8?B?MWRjdWF4WEY4VEl6YjFBZEx2ZXQxU2xLcUEyOTdHSnY1K09UaTJQZElnVmRI?=
 =?utf-8?B?dkhHV3ZEejJ1TnM5ZjBXV1FkZnF0cFRQT3dESHRvUGlwOFBZR1NHOVVKem1M?=
 =?utf-8?B?clpmSmdGVmJWMkNnSVdoNTExTmdYMm1YMVA3S2o4NDVhTEc3ajNHS1owRzIw?=
 =?utf-8?B?bStkdkRKeUNzM2NJajJ5YnNLV3hFN3NYUW4zeE9uMXVKQk5RcmR3OVhZU3JO?=
 =?utf-8?B?emhTclNYUXNlY0hLZ0IycUEzR1JiYmlaMjNHSG9qMldIZ1pnWVdyVkdyWUNa?=
 =?utf-8?B?NC81V09XOWRISVhVTnh0WWtoUWVXbVVVTUpBOGNWbFRxVWhOZWoreEJtcjhX?=
 =?utf-8?B?c2NJRFo1Q1dTVGFUT1k5OEtVR1hNNVZEZWxIZWtqUE0rdTYxOHF2eE9zV1JQ?=
 =?utf-8?B?TjZiUERadUFnR052dm54K3JFa0dTN2p1cnVseXNWaDZkVDVyNzExcXNaZGhW?=
 =?utf-8?B?RUVrSExGYzI5Mm9TeFFzbzdpK1dIcUdxYTVMTmUzdzFmaHI0Ny8zcGV2MXBt?=
 =?utf-8?B?RVEwenJ1ZnFzZVU2cDhZRmZBMmNra3ZLWU5sZ1pmTVVmV1RYQXFMMHZzZE1I?=
 =?utf-8?B?MDFuSEhRQlRWVXR0TUYvY2hMZm1JbDIyNm56ZUNBZStkZEgrdDNqbEZub3JP?=
 =?utf-8?B?cTl0ZWpWdmFiOE5xbURwM0hreXJ2bkdVU2dndjNzTlRMenZibCtuUDI5bXFY?=
 =?utf-8?B?eWFLOEIyNFh0NUhKY1hPSVY3ZzExMHNWcnk2QVdWNG9iOVNCRjF2alR5bUJ4?=
 =?utf-8?B?RzBhYm0zOUNudTJBNVFvVlhJL1FaVWRjSEJsTWt1ZkwyOXFjUGN0T3M4YWtG?=
 =?utf-8?B?elc1d0MxNmFXNDE2SlhsRm9qaThYWGU5L1dDanFpZGdXM3pqUjc5UnM2c0Vv?=
 =?utf-8?B?dTcrV0E1RFVIMTZjYU0rU1R5dEJ4cXg0Q2lPNlRzN01zSkR0Ni9CSk54b0hL?=
 =?utf-8?Q?l/wX1Sy3K9gpQs5z0pX57dhMQ?=
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-OriginatorOrg: citrix.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: MW4PR03MB6347.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: ba74f329-a7e6-4f88-ff8b-08dac18ebb79
X-MS-Exchange-CrossTenant-originalarrivaltime: 08 Nov 2022 13:40:00.1041
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: CHtNvjfRn6fd3Ga3IcZU5hafRH4s+GLxlhFuTKYTjGe/d5WafE5pszgR/o2BOHM2BLdUbBYWyMKg1OwMFeh+NDUbPY+9tZLpYi6y5+OKb+8=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN9PR03MB6092

DQoNCi0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQpGcm9tOiB3aW4tcHYtZGV2ZWwgPHdpbi1w
di1kZXZlbC1ib3VuY2VzQGxpc3RzLnhlbnByb2plY3Qub3JnPiBPbiBCZWhhbGYgT2YgUGF1bCBE
dXJyYW50DQpTZW50OiAwOCBOb3ZlbWJlciAyMDIyIDExOjEyDQpUbzogd2luLXB2LWRldmVsQGxp
c3RzLnhlbnByb2plY3Qub3JnDQpTdWJqZWN0OiBSZTogW1BBVENIXSBDb3JyZWN0IHJldHVybiBj
b2RlcyBkdXJpbmcgcmFjeSBkZXN0cnVjdGlvbi4NCg0KPiBbQ0FVVElPTiAtIEVYVEVSTkFMIEVN
QUlMXSBETyBOT1QgcmVwbHksIGNsaWNrIGxpbmtzLCBvciBvcGVuIGF0dGFjaG1lbnRzIHVubGVz
cyB5b3UgaGF2ZSB2ZXJpZmllZCB0aGUgc2VuZGVyIGFuZCBrbm93IHRoZSBjb250ZW50IGlzIHNh
ZmUuDQo+DQo+DQo+IENhbiB3ZSBoYXZlIGFuIGV4cGxhbmF0b3J5IGNvbW1pdCBjb21tZW50PyBI
b3cgZGlkIHlvdSBkaXNjb3ZlciB0aGUgcmFjZXMgKHNpbmNlIHRoZSBITEsvV0xLIGhhcyBub3Qg
Y29tcGxhaW5lZCBiZWZvcmUgQUZBSUspPyBXaGF0IGlzIHRoZSBmYWxsLW91dCBvZiB0aGUgcmFj
ZT8gQlNPRD8NCg0KU3VyZSAtIElmIHlvdSdyZSBoYXBweSB3aXRoIHRoaXMsIEknbGwgYW1lbmQg
dGhlIGNvbW1pdCBtZXNzYWdlcyBhbmQgcmVzdWJtaXQgdGhlIHBhdGNoZXMgKHRoaXJkIHRpbWUg
bHVja3khKQ0KDQpDaXRyaXggYXJlIG5vdyB0ZXN0aW5nIFBWIGRyaXZlcnMgd2l0aCBjaGVja2Vk
IGJ1aWxkcyBhbmQgZHJpdmVyIHZlcmlmaWVyLiBUaGlzIGNoZWNrcyByZXR1cm4gY29kZXMgZm9y
IFBuUCBJUlAncy4gRHJpdmVycyBtdXN0IGNvbXBsZXRlIElSUF9NTl9SRU1PVkVfREVWSUNFIGFu
ZCBJUlBfTU5fU1VSUFJJU0VfUkVNT1ZBTCB3aXRoIFNUQVRVU19TVUNDRVNTLg0KDQpVbmZvcnR1
bmF0ZWx5LCBpdCBpcyBwb3NzaWJsZSB0byByZWNlaXZlIGxhdGVyIFBuUCByZXF1ZXN0cyBmb3Ig
dGhlc2UgSVJQcyBhZnRlciAgX19GZG9TZXREZXZpY2VQbnBTdGF0ZShGZG8sIERlbGV0ZWQpLCBh
bmQgYmVmb3JlIElvRGVsZXRlRGV2aWNlIGZvciB0aGUgRkRPLCBwb3NzaWJseSBkdXJpbmcgdGhl
IGNhbGwgdG8gbG93ZXIgbGV2ZWwgZHJpdmVycy4gU2luY2UgdGhlIEZETyBpcyBpcnJldm9jYWJs
eSBvbiB0aGUgZGVsZXRpb24gcGF0aCwgd2UgZmFpbCB0aGVzZSByZXF1ZXN0cyB3aXRoIFNUQVRV
U19OT19TVUNIX0RFVklDRSwgaG93ZXZlciwgTVNETiBpbmRpY2F0ZXMgd2Ugc2hvdWxkIGFsd2F5
cyBzdWNjZWVkIHRoZXNlIHJlcXVlc3RzIChldmVuIGlmIHRoZXkgYXJlIGEgZHVwbGljYXRlKSwg
YW5kIGZhaWx1cmUgdG8gZG8gc28gcmVzdWx0cyBpbiBhIGRyaXZlciB2ZXJpZmllciBidWdjaGVj
ay4NCg0KTUguDQo=


From win-pv-devel-bounces@lists.xenproject.org Thu Nov 10 16:27:53 2022
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 10 Nov 2022 16:27:53 +0000
Received: from list by lists.xenproject.org with outflank-mailman.442005.696051 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1otAP8-0006kM-IU; Thu, 10 Nov 2022 16:27:50 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 442005.696051; Thu, 10 Nov 2022 16:27:50 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1otAP8-0006kF-Fs; Thu, 10 Nov 2022 16:27:50 +0000
Received: by outflank-mailman (input) for mailman id 442005;
 Thu, 10 Nov 2022 16:27:49 +0000
Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254]
 helo=se1-gles-sth1.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=budx=3K=citrix.com=prvs=3066134d4=martin.harvey@srs-se1.protection.inumbo.net>)
 id 1otAP7-0006k9-8M
 for win-pv-devel@lists.xenproject.org; Thu, 10 Nov 2022 16:27:49 +0000
Received: from esa4.hc3370-68.iphmx.com (esa4.hc3370-68.iphmx.com
 [216.71.155.144]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS
 id 9ab071d4-6114-11ed-91b5-6bf2151ebd3b;
 Thu, 10 Nov 2022 17:27:47 +0100 (CET)
Received: from mail-mw2nam12lp2044.outbound.protection.outlook.com (HELO
 NAM12-MW2-obe.outbound.protection.outlook.com) ([104.47.66.44])
 by ob1.hc3370-68.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256;
 10 Nov 2022 11:27:27 -0500
Received: from MW4PR03MB6347.namprd03.prod.outlook.com (2603:10b6:303:11e::22)
 by PH0PR03MB6235.namprd03.prod.outlook.com (2603:10b6:510:ed::16)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5791.27; Thu, 10 Nov
 2022 16:27:26 +0000
Received: from MW4PR03MB6347.namprd03.prod.outlook.com
 ([fe80::1a60:e566:681f:83f3]) by MW4PR03MB6347.namprd03.prod.outlook.com
 ([fe80::1a60:e566:681f:83f3%2]) with mapi id 15.20.5791.026; Thu, 10 Nov 2022
 16:27:26 +0000
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/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: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 9ab071d4-6114-11ed-91b5-6bf2151ebd3b
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1668097667;
  h=from:to:subject:date:message-id:mime-version;
  bh=RBCeU0sAWmt0sjRiu/kkNoqKJlawx96n6k174L+Uuks=;
  b=TAKGqFwx+Imb20z79Hik4pjHWsYPgeG/4jwnG+hFlgVa2gGHHmm1JnJU
   agl4sG/HmzO6pmvlbetvm9gcPMfpKoaLCClPvnx0cFH9q7azixAX7cbK9
   66dnFyQyDEIXsYJFnFGVNvOmpiAQXSeaonl3ApYMzUQomdpyklh5PnWUn
   g=;
X-IronPort-RemoteIP: 104.47.66.44
X-IronPort-MID: 87115607
X-IronPort-Reputation: None
X-IronPort-Listener: OutboundMail
X-IronPort-SenderGroup: RELAY_O365
X-IronPort-MailFlowPolicy: $RELAYED
IronPort-Data: A9a23:9KECn6wzY0viEMGbsPJ6t+c7xyrEfRIJ4+MujC+fZmUNrF6WrkUPx
 mUdDGHUMvqNYmXzKtlybdm3pk9QvpfWn9NrGwBr/iAxQypGp/SeCIXCJC8cHc8wwu7rFxs7s
 ppEOrEsCOhuExcwcz/0auCJQUFUjP3OHfykTbaeYUidfCc8IA85kxVvhuUltYBhhNm9Emult
 Mj75sbSIzdJ4RYtWo4vw//F+U0HUMja4mtC5AVnPKgT5zcyqlFOZH4hDfDpR5fHatE88t6SH
 47r0Ly/92XFyBYhYvvNfmHTKxBirhb6ZGBiu1IOM0SQqkEqSh8ai87XAME0e0ZP4whlqvgqo
 Dl7WT5cfi9yVkHEsLx1vxC1iEiSN4UekFPMCSDXXcB+UyQq2pYjqhljJBheAGEWxgp4KXFlz
 acDGj4rVz3Zjcy2nLyLU/dLmf12eaEHPKtH0p1h5RfwKK98BLX8GeDN79Ie2yosjMdTG/qYf
 9AedTdkcBXHZVtIJ0sTD5U92uyvgxETcRUB8A7T+fVxvTaVkFAZPLvFabI5fvSPTN9Jn0Dep
 mvc4WnoKhobKMae2XyO9XfEaurnzXyiAd9MTOLQGvhCqVmunEMYOjMsbBjl4ue7mAmBUOhDA
 hlBksYphe1onKCxdfHiXhv9uGDBshMCVt54F+wh9BrL2qfS+xyeBGUPUnhGctNOiSMtbTkj1
 1vMmsyzAzVq6eeRUSjFquvSqi6uMy8IK2NEfTUDUQYO/9jkpsc0kw7LSdFgVqWyi7UZBA3N/
 txDlwBm7517sCLB///TEYzv6950mqX0cw==
IronPort-HdrOrdr: A9a23:ll2QTaAiM/6UQ5rlHeggsceALOsnbusQ8zAXPh9KJCC9I/bzqy
 nxpp8mPEfP+VAssQIb6Km90ci7MAXhHPtOjbX5Uo3SODUO1FHIEGgA1/qq/9SDIVyYygc178
 4JHMZD4bbLfDtHZLPBkWyF+qEbsbu6Gc6T5dv2/jNId0VHeqtg5wB2BkKwCUttXjRLApI/Cd
 61+tdHjyDIQwVdUu2LQl0+G8TTrdzCk5zrJTQcAQQ81QWIhTS0rJbnDhmj2AsEWT8n+8ZpzY
 GFqX212kyQiYD19vbu7R6c032Qoqqh9jJ3Pr3BtiHSEESttu/nXvUjZ1TIhkFMnAjm0idQrD
 CLmWZpAy070QKqQkil5RTqwAXuyzAo9jvrzkKZm2LqpYjjSCs9ENcpv/MtTvL10TtSgDhH6t
 M440uJ855MSR/QliX04NbFExlsi0qvuHIn1eoelWZWX4cSYKJY6dV3xjIjLL4QWCbhrIw3Gu
 hnC8/RoP5QbFOBdnjc+m1i2salUHg/FgqPBkICpsuW2T5Lm20R9Tpt+OUP2nMbsJ4tQZhN4O
 rJdqxuibFVV8cTKblwAe8QKPHHelAlgSi8QV56DW6Xa53vYUi91qIfyI9FmN2CadgP0IY4no
 jHXRdRqXMyEnied/Gz4A==
X-IronPort-AV: E=Sophos;i="5.96,154,1665460800"; 
   d="scan'208,217";a="87115607"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=LlffHwFcrvyb5m2KyncN2adyIMccV1oyKAg11e7cr6XA1w1Nvcj1cSDzg3eozZpLCz7x3KtaOcmvdHwYCts1c8lwAlyKdBW7sxbuKXBDbOvn437b9NNBSeLEFc1Hh2lKcIQCFGQE3ZYsbJZUxLSUIBEYTzVL+PcAj8PcdJYoySYOQZEAvnvdvvjMC5bntMmEvATNuc23IkPw/x96FBAUljEe1qztAKvLaRYYh5vF+bN51vB+PTWMNYvM2WNce6ac3f1BvjcL5sP7RyMBhzJj7oylX7OG1ao/urWWMak+3h9pOySY3h3hjypXbyIMLlTTsk14G8h7e9hdh7wtAVkAfQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=i+X4tVgV9iHMMlSSyPEm/JtDzfVRfOiHJt1CHr8nWIY=;
 b=kcnOvY7u6QWPqShYQ08bqzg14E77yOaUerNi7bm7mNcxDIBM1z56RLyJSLnRg28Cunl19B/VzgMBL1WjAjto9bs+YC3BZx193UCC068D4ZJKzT3Pe74f+r5GeAfaXyPhPH/FoI7eyzj2gubiPg2F526xNJvEo2tegC/i6os4MLro6Yq5J33W9yEX6GJrCYA3c8daSLJ2UB+S0zy9SlzVpqykFCVACfuTVTUaccQhX7aMhok/Yzhby1WwA2X3nvsQTYSKFu6qvxaDh4u1sey2t/0EMvHFmdo0QHy8eTOp1kebHas70RaZbaDqaikw/eB9YOToluVn8yiNv7W98uLOWw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=i+X4tVgV9iHMMlSSyPEm/JtDzfVRfOiHJt1CHr8nWIY=;
 b=P3bWuy+eTU/JWv/bEBCqOPI8fztQuUB8csSn9dDNcZiIGSAjbYNk7qOYQovLubhOdztmWNwzyytnF3ZPiRSX7EWoX1t/1z/KptanX9NoGam2Eu7Y5jan7clxUy7IHVgCL7Z/aJ8HJmd9I8NKQgxi1SxzkAkMtqIn1zlrOfWcoAA=
From: Martin Harvey <martin.harvey@citrix.com>
To: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Subject: Power rewrite has uncovered 3 outstanding issues in master.
Thread-Topic: Power rewrite has uncovered 3 outstanding issues in master.
Thread-Index: Adj1IOMcKQefDxr/QVWwL9wSbdnjlg==
Date: Thu, 10 Nov 2022 16:27:25 +0000
Message-ID:
 <MW4PR03MB63478A1F6E1E0215C265FA5E9A019@MW4PR03MB6347.namprd03.prod.outlook.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
authentication-results: dkim=none (message not signed)
 header.d=none;dmarc=none action=none header.from=citrix.com;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: MW4PR03MB6347:EE_|PH0PR03MB6235:EE_
x-ms-office365-filtering-correlation-id: 7f6bc6a0-6a90-478f-bc52-08dac3387421
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam: BCL:0;
x-microsoft-antispam-message-info:
 vtClxfK/OT9FhxXSzaaY89vurp9cGdh4elwZrhdJ2WOAZ0rWbrgSVi1DiSsG383OVnZlBqDQgxFU+l0wS3RNlwjocffqegX/WYBMK3qdQ040pLhifMXNiGJltc/kIwqdJ2LtY9MacVlldtuhWTdBzrZWXQUUn+AaW1eiJgnxNOp9JwC80b/06v0ohimSCCNMxPJPHWx+0PQo3nBiAtzWVoq7/1LAg9zSwdHbmN+9PBsaAJqK1Q4F4PMZTOYYpOgYggLdyEoAmnaO+C9YlJRuHOTewpUizsZzPrBs9uWazK0G61oDOFIpcq4y6fia1/5/fS3NomN4JW+VsEWUpa7GuGHFsLf53nu82X9XS8vApYYpeqi9ygc1lV/eoXW9HDZ8v8CM82eWrnatmIYgzAvMJh6eHImtj2dMQh8a7T3ca8v5iAR1aNManDtQORn1ygF8s+qeYhFG0OB5dFv/i/k90nl8fiZ1wl4DgFucUML5asEIZd8tPN0eLgGKvEcsNercI6qHLl4Ylb28hUrooD4ERL1u/wWmseOR6Q3lC4ShP78BFvwkqCksl8Vg4kcUNMbLJy3zFB/4FHREjcP315NA2t/V7NajMloBX7yYhe05wt3RjwaYiehIEia44seXCMfEJUgcZp4CXwtYu4qCKs1AAmRrWuL817NZgNFUIFs1j8FzsolT52LPpA8mjBvePzOz0gvHieLmuSGyHRI418MmfKc7HzO7Kk8QQYH02TcP8cu4D/86OApRfU6sgDbywXXSlYRv+HfMr7D9vSipFW1pmw==
x-forefront-antispam-report:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MW4PR03MB6347.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(396003)(346002)(366004)(376002)(39860400002)(136003)(451199015)(86362001)(38070700005)(33656002)(122000001)(5660300002)(44832011)(186003)(2906002)(4744005)(6506007)(9686003)(7696005)(26005)(83380400001)(82960400001)(38100700002)(66446008)(76116006)(66946007)(64756008)(52536014)(8936002)(66476007)(55016003)(6916009)(478600001)(316002)(41300700001)(8676002)(71200400001)(66556008);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?us-ascii?Q?3UIFM/FXiTQd07EN8nbKkrnJqcQ/CqXxhQBauRlqvU0hZa5C7JFVFlrk7W3n?=
 =?us-ascii?Q?hfrBQaN9z/rQMjlNp4ZJDCIilRYaRaDSf1uSeCqJKVn33cRyRDJZtOkPnRNm?=
 =?us-ascii?Q?4DhjN+Al4HqZH9yLBfvv2aY5lKGlG8LVQzTtw6EclfRO/khvZlxJNn2zMYwF?=
 =?us-ascii?Q?XRV+dmw3xdsC42f1mN76q5tXVOc+9YE8bko5XkT7s2r4BVFR7QjIqhBRxCsE?=
 =?us-ascii?Q?1Opagx/zGF9wPjNYWHW0ANJ71PTUzbT9fL0/snOjXuGLizeO3HSk9V662IhD?=
 =?us-ascii?Q?ipvQAdLLdbBmxA5rNhtvuiikmz47rOip4vzQwECQd2FIy8gS/1uHRBxRAec9?=
 =?us-ascii?Q?q3yEjlQ8DSWrlUt4HgMTr7ZzDT2uHG8qWgKRNPv0/33CaDGd/IDZ0uFkMDtN?=
 =?us-ascii?Q?xmeTDC63TYZdkXrXXAgmmqdi3IinPy76/vUao9Rq0h5BPOh3Id9EP0HhK9JD?=
 =?us-ascii?Q?PZDwpgEy2WYwwZsB0l+FcCuuB8H8mo+jSe5PN6n9TgjpqRGnSUHHNL2ff3RI?=
 =?us-ascii?Q?MtyFEobc0u2Gc0zyxIow0i0E/UGgM6AoDxDrJ5JGeE3Gd6yWQSJo8RIlVhg4?=
 =?us-ascii?Q?Triie11O38IAcu65M1QgD3zmEsqChzt5E/RpoMSjZl0Ct+PPLtO5pz+rF9cC?=
 =?us-ascii?Q?BNFVksah9opoiwSYLJFdSsqJOPMzA1byJWah+M18Q5ZUUjyFq36cntam1aqo?=
 =?us-ascii?Q?XubKhdV/J5kYDJ4ubTueI8vbYE24pq8p7Rjep0+WR3rEGTpNfVsciWCX7pFu?=
 =?us-ascii?Q?hybjIW+FdY/ab1lUtA4roEjDVC8npEpvxiygG5tLkh5i+5qPghUSS5BXjT66?=
 =?us-ascii?Q?jhkWFOeNWZ5S6p0lZCFKhOgwuiV66rdlOoD3aSVjfO7ftZ0qwLQqyLMLIEzm?=
 =?us-ascii?Q?IXXZ6rGUxzyl8nTjfMgdN703FA1BMqkH7Op/u4/uhQTsi2UQwmEqLnTRjP2F?=
 =?us-ascii?Q?3ERBLUl/85k9CcKBY7c7qA1OlSOQux+xmWA9sMYi0UoJHH3sM9IDndDUUFuy?=
 =?us-ascii?Q?C7/cAZydFVVSsIJezNeimLojf224oHJg2MFZsJri6x3NI2gQC3QVous7eeFR?=
 =?us-ascii?Q?JAjslWovW+z1V6zpljKh3NmJipdU6r+3FPWYgYzqTKCX4+IXHfVwtFDLZIyF?=
 =?us-ascii?Q?xc3IFP2Zag1ibJUxgY+PyD44ReFkh0FMkkstK5nnxlCjC0KEfeO/AXIzzzH6?=
 =?us-ascii?Q?uKKlpMOAissOLADhPSIup4zkjhf9yfbmQvcgpY6IAK5iwuVE2GhoBrxQrfcy?=
 =?us-ascii?Q?reXSxyPks3DA1Qdven0CbHs6JOiEw98eeQKHywaIumbYWxfAKF/8+9c4nUFv?=
 =?us-ascii?Q?AgclpzIT6D8AwgnXER3u4sXincbHOy2wFCHJ64uue0QJJfQejBJl8mPbJcqQ?=
 =?us-ascii?Q?bW70NPQFoct/Pe1wH+dnj0pIUdrKdKh2A3i31z/ktyWACFOiViA1s55wIflY?=
 =?us-ascii?Q?7LKpxUna1rIycDB2BdTXr1bIaxjm1R71aiTkPUprdKKh/neLtrEWH1TR8a/8?=
 =?us-ascii?Q?nWFG4MEXQsHHXGpMSMatsCXbdVX76PElxjqz+W2Wi3inG1Vkzl1DRk6ye68s?=
 =?us-ascii?Q?dsoVKM92dgb2U2vGWP390n41otH6Wbh0heSSNBrq?=
Content-Type: multipart/alternative;
	boundary="_000_MW4PR03MB63478A1F6E1E0215C265FA5E9A019MW4PR03MB6347namp_"
MIME-Version: 1.0
X-OriginatorOrg: citrix.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: MW4PR03MB6347.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 7f6bc6a0-6a90-478f-bc52-08dac3387421
X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Nov 2022 16:27:25.9830
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: R+15F++Uzqs3TTf9RfwiFEUUNsrrwg+R/vFlL3iCzBOS+MvxeCo0QEQzjlPZpinPPKnwQy1WSygwEE0nKi5aExq3r/nQPJxsw1qyt9mHaqU=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR03MB6235

--_000_MW4PR03MB63478A1F6E1E0215C265FA5E9A019MW4PR03MB6347namp_
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable


Recent RFQ patch has raised 3 known issues which also need fixing in master=
, not taking into account async handling needed for IRP_MN_SET_POWER.


  1.  XenVif FDO create memsets wrong structure in failure path. Probably a=
 merge error.
  2.  PowerActionShutdown handling completes IRP's in FDO's where it should=
 pass them down.
  3.  FdoRequestSetDevicePower does not handle Unspecified values in capabi=
lity matrix when handling the SIrp->DIrp generation.

I have some contractors working on them.

MH.

--_000_MW4PR03MB63478A1F6E1E0215C265FA5E9A019MW4PR03MB6347namp_
Content-Type: text/html; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<html xmlns:v=3D"urn:schemas-microsoft-com:vml" xmlns:o=3D"urn:schemas-micr=
osoft-com:office:office" xmlns:w=3D"urn:schemas-microsoft-com:office:word" =
xmlns:m=3D"http://schemas.microsoft.com/office/2004/12/omml" xmlns=3D"http:=
//www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dus-ascii"=
>
<meta name=3D"Generator" content=3D"Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
	{font-family:"Cambria Math";
	panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
	{font-family:DengXian;
	panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
	{font-family:"\@DengXian";
	panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{margin:0cm;
	font-size:11.0pt;
	font-family:"Calibri",sans-serif;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
	{mso-style-priority:34;
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:36.0pt;
	font-size:11.0pt;
	font-family:"Calibri",sans-serif;}
span.EmailStyle17
	{mso-style-type:personal-compose;
	font-family:"Calibri",sans-serif;
	color:windowtext;}
.MsoChpDefault
	{mso-style-type:export-only;
	font-family:"Calibri",sans-serif;}
@page WordSection1
	{size:612.0pt 792.0pt;
	margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
	{page:WordSection1;}
/* List Definitions */
@list l0
	{mso-list-id:13654428;
	mso-list-type:hybrid;
	mso-list-template-ids:1907278008 134807567 134807577 134807579 134807567 1=
34807577 134807579 134807567 134807577 134807579;}
@list l0:level1
	{mso-level-tab-stop:none;
	mso-level-number-position:left;
	text-indent:-18.0pt;}
@list l0:level2
	{mso-level-number-format:alpha-lower;
	mso-level-tab-stop:none;
	mso-level-number-position:left;
	text-indent:-18.0pt;}
@list l0:level3
	{mso-level-number-format:roman-lower;
	mso-level-tab-stop:none;
	mso-level-number-position:right;
	text-indent:-9.0pt;}
@list l0:level4
	{mso-level-tab-stop:none;
	mso-level-number-position:left;
	text-indent:-18.0pt;}
@list l0:level5
	{mso-level-number-format:alpha-lower;
	mso-level-tab-stop:none;
	mso-level-number-position:left;
	text-indent:-18.0pt;}
@list l0:level6
	{mso-level-number-format:roman-lower;
	mso-level-tab-stop:none;
	mso-level-number-position:right;
	text-indent:-9.0pt;}
@list l0:level7
	{mso-level-tab-stop:none;
	mso-level-number-position:left;
	text-indent:-18.0pt;}
@list l0:level8
	{mso-level-number-format:alpha-lower;
	mso-level-tab-stop:none;
	mso-level-number-position:left;
	text-indent:-18.0pt;}
@list l0:level9
	{mso-level-number-format:roman-lower;
	mso-level-tab-stop:none;
	mso-level-number-position:right;
	text-indent:-9.0pt;}
ol
	{margin-bottom:0cm;}
ul
	{margin-bottom:0cm;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext=3D"edit" spidmax=3D"1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext=3D"edit">
<o:idmap v:ext=3D"edit" data=3D"1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang=3D"EN-GB" link=3D"#0563C1" vlink=3D"#954F72" style=3D"word-wrap:=
break-word">
<div class=3D"WordSection1">
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<p class=3D"MsoNormal">Recent RFQ patch has raised 3 known issues which als=
o need fixing in master, not taking into account async handling needed for =
IRP_MN_SET_POWER.<o:p></o:p></p>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<ol style=3D"margin-top:0cm" start=3D"1" type=3D"1">
<li class=3D"MsoListParagraph" style=3D"margin-left:0cm;mso-list:l0 level1 =
lfo1">XenVif FDO create memsets wrong structure in failure path. Probably a=
 merge error.<o:p></o:p></li><li class=3D"MsoListParagraph" style=3D"margin=
-left:0cm;mso-list:l0 level1 lfo1">PowerActionShutdown handling completes I=
RP&#8217;s in FDO&#8217;s where it should pass them down.<o:p></o:p></li><l=
i class=3D"MsoListParagraph" style=3D"margin-left:0cm;mso-list:l0 level1 lf=
o1">FdoRequestSetDevicePower does not handle Unspecified values in capabili=
ty matrix when handling the SIrp-&gt;DIrp generation.<o:p></o:p></li></ol>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<p class=3D"MsoNormal">I have some contractors working on them.<o:p></o:p><=
/p>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<p class=3D"MsoNormal">MH.<o:p></o:p></p>
</div>
</body>
</html>

--_000_MW4PR03MB63478A1F6E1E0215C265FA5E9A019MW4PR03MB6347namp_--


From win-pv-devel-bounces@lists.xenproject.org Mon Nov 14 11:32:47 2022
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 14 Nov 2022 11:32:47 +0000
Received: from list by lists.xenproject.org with outflank-mailman.443285.697842 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ouXhl-0005Mb-C2; Mon, 14 Nov 2022 11:32:45 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 443285.697842; Mon, 14 Nov 2022 11:32:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ouXhl-0005MT-9H; Mon, 14 Nov 2022 11:32:45 +0000
Received: by outflank-mailman (input) for mailman id 443285;
 Mon, 14 Nov 2022 11:32:44 +0000
Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254]
 helo=se1-gles-sth1.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=BuQF=3O=citrix.com=prvs=310a79da2=martin.harvey@srs-se1.protection.inumbo.net>)
 id 1ouXhk-0005MN-4b
 for win-pv-devel@lists.xenproject.org; Mon, 14 Nov 2022 11:32:44 +0000
Received: from esa1.hc3370-68.iphmx.com (esa1.hc3370-68.iphmx.com
 [216.71.145.142]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS
 id 0aa323a0-6410-11ed-91b6-6bf2151ebd3b;
 Mon, 14 Nov 2022 12:32:42 +0100 (CET)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/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: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 0aa323a0-6410-11ed-91b6-6bf2151ebd3b
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1668425562;
  h=from:to:cc:subject:date:message-id:mime-version:
   content-transfer-encoding;
  bh=LmD5605/8T5J27IMyaQFDoSdo1o36IoT10HuHK53dBE=;
  b=FPK0mjjunRzY3z/+FYc5IZIG5SGd0zga/zqibcPQd7WTF07GqVP74000
   pRCdeGBqhFXJ4af/cr4PspD2rURB9vBqW08kfrkknT3VhSbeokum5H+4L
   KJKgS7Xis229ewweDyIUcG8yB6bbv8E/vJ4DW83MYP8XV9e1/deNvKmhh
   0=;
Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
X-SBRS: None
X-MesageID: 85184647
X-Ironport-Server: esa1.hc3370-68.iphmx.com
X-Remote-IP: 162.221.156.83
X-Policy: $RELAYED
IronPort-Data: A9a23:jSfElq3fB177LVmxpPbD5Ytxkn2cJEfYwER7XKvMYLTBsI5bp2BTn
 GcfCzyBa/qNZTOnKIxxYdi09U5V78LVmNJgSgs4pC1hF35El5HIVI+TRqvS04F+DeWYFR46s
 J9OAjXkBJppJpMJjk71atANlVEliefTAOK5ULSfUsxIbVcMYD87jh5+kPIOjIdtgNyoayuAo
 tq3qMDEULOf82cc3lk8tuTS9nuDgNyo4GlC5wVnOagS1LPjvyJ94Kw3dPnZw0TQGuG4LsbiL
 87fwbew+H/u/htFIrtJRZ6iLyXm6paLVeS/oiI+t5qK23CulQRrukoPD9IOaF8/ttm8t4sZJ
 OOhF3CHYVxB0qXkwIzxWvTDes10FfUuFLTveRBTvSEPpqFvnrSFL/hGVSkL0YMkFulfWWt/9
 Pk8BGo2SR2zuPKZ+6q4ZtJXiZF2RCXrFNt3VnBIyDjYCbAtQIzZQrWM7thdtNsyrpkQR7CEP
 ZNfMGcxKkSbC/FMEg5/5JYWme6ymnj5NT1RskyYtII84nTJzRw327/oWDbQUozXHJUJwBrHz
 o7A12L/Ej8hLebB9Xmqr3TroebixB7/ZbtHQdVU8dY12QbOlwT/EiY+Slq95OGnz0KzRd9bA
 0gV4TY167g/8lSxSdvwVAH+p2SL1iPwQPIJTbd8slvUjPOJvUDJXQDoUwKtdvR+vv43QBgGj
 GSukuPWFRNUqL65ckmSo+L8QSyJBQAZKmoLZCkhRAQD4sX+rIxbsi8jXuqPA4bu0ISrRGiYL
 ySi6XFn2u5N1ZJjO7CTpwivvt66mnTeoufZDC3zV3nt0A52bZXNi2eAuQmCtqYowGp0ozC8U
 Jk4dyq2trFm4XKlznblrAAx8FaBuZ643MX02wIHInXY323FFr7KVdk4DMtCDEloKN0YXjTif
 VXevwhcjLcKYiX6NvErP9ztUJx7pUQFKTgCfqmJBuein7ArLFPXlM2QTRP4M5/RfLgEzvhkZ
 MbznTeEBncGE6V3pAdatM9EuYLGB0kWmwvueHwM50/9gefEPiTFFOtt3ZnnRrlR0Z5oaT79q
 753X/ZmAT0GOAEiSkE7KbIuEG0=
IronPort-HdrOrdr: A9a23:TaNoQ6mpP0390KSPlpRzHLlHirPpDfIg3DAbv31ZSRFFG/Fxl6
 iV8sjzsiWE7Ar5OUtQ/+xoV5PhfZqxz/JICOoqTNKftWvdyQiVxehZhOOIqVDd8kXFh4lgPM
 xbEpSWZueeMbEDt7eZ3DWF
X-IronPort-AV: E=Sophos;i="5.96,161,1665460800"; 
   d="scan'208";a="85184647"
From: Martin Harvey <Martin.Harvey@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
CC: Martin Harvey <Martin.Harvey@citrix.com>, Martin Harvey
	<martin.harvey@citrix.com>
Subject: [PATCH] Correct return codes during racy destruction (3).
Date: Mon, 14 Nov 2022 11:32:26 +0000
Message-ID: <20221114113226.1895-1-Martin.Harvey@citrix.com>
X-Mailer: git-send-email 2.25.0.windows.1
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

Errors in PnP retun codes found when testing under driver
verifier with mixed VM lifecycle operations. Under some
rare cases, it is possible to get more than one PnP
"remove like" operation. This results in a PnP remove
operation being processed whilst the device is already
in the deleted state.

This patch fixes the immediate cause of the bugfixes,
buy fixing the return code. Device destruction is
unchanged. Investigation into the root cause is still
ongoing.

Signed-off-by: Martin Harvey <martin.harvey@citrix.com>
---
 src/xenbus/driver.c  | 12 ++++++++++++
 src/xenfilt/driver.c | 12 ++++++++++++
 2 files changed, 24 insertions(+)

diff --git a/src/xenbus/driver.c b/src/xenbus/driver.c
index e07de55..cd03fce 100644
--- a/src/xenbus/driver.c
+++ b/src/xenbus/driver.c
@@ -760,8 +760,20 @@ DriverDispatch(
     ASSERT3P(Dx->DeviceObject, ==, DeviceObject);
 
     if (Dx->DevicePnpState == Deleted) {
+        PIO_STACK_LOCATION StackLocation = IoGetCurrentIrpStackLocation(Irp);
+        UCHAR MajorFunction = StackLocation->MajorFunction;
+        UCHAR MinorFunction = StackLocation->MinorFunction;
         status = STATUS_NO_SUCH_DEVICE;
 
+        if (MajorFunction == IRP_MJ_PNP) {
+            if ((MinorFunction == IRP_MN_SURPRISE_REMOVAL) ||
+               (MinorFunction == IRP_MN_REMOVE_DEVICE)) {
+                /* FDO and PDO deletions can block after being marked deleted, but before IoDeleteDevice */
+                status = STATUS_SUCCESS;
+            }
+            ASSERT((MinorFunction != IRP_MN_CANCEL_REMOVE_DEVICE) && (MinorFunction != IRP_MN_CANCEL_STOP_DEVICE));
+        }
+
         Irp->IoStatus.Status = status;
         IoCompleteRequest(Irp, IO_NO_INCREMENT);
         goto done;
diff --git a/src/xenfilt/driver.c b/src/xenfilt/driver.c
index 8a8396e..6e00485 100644
--- a/src/xenfilt/driver.c
+++ b/src/xenfilt/driver.c
@@ -862,8 +862,20 @@ DriverDispatch(
     ASSERT3P(Dx->DeviceObject, ==, DeviceObject);
 
     if (Dx->DevicePnpState == Deleted) {
+        PIO_STACK_LOCATION StackLocation = IoGetCurrentIrpStackLocation(Irp);
+        UCHAR MajorFunction = StackLocation->MajorFunction;
+        UCHAR MinorFunction = StackLocation->MinorFunction;
         status = STATUS_NO_SUCH_DEVICE;
 
+        if (MajorFunction == IRP_MJ_PNP) {
+            if ((MinorFunction == IRP_MN_SURPRISE_REMOVAL) ||
+               (MinorFunction == IRP_MN_REMOVE_DEVICE)) {
+                /* FDO and PDO deletions can block after being marked deleted, but before IoDeleteDevice */
+                status = STATUS_SUCCESS;
+            }
+            ASSERT((MinorFunction != IRP_MN_CANCEL_REMOVE_DEVICE) && (MinorFunction != IRP_MN_CANCEL_STOP_DEVICE));
+        }
+
         Irp->IoStatus.Status = status;
         IoCompleteRequest(Irp, IO_NO_INCREMENT);
         goto done;
-- 
2.25.0.windows.1



From win-pv-devel-bounces@lists.xenproject.org Mon Nov 14 11:34:53 2022
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 14 Nov 2022 11:34:53 +0000
Received: from list by lists.xenproject.org with outflank-mailman.443292.697846 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ouXjo-0005Rw-H1; Mon, 14 Nov 2022 11:34:52 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 443292.697846; Mon, 14 Nov 2022 11:34:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ouXjo-0005Rp-EQ; Mon, 14 Nov 2022 11:34:52 +0000
Received: by outflank-mailman (input) for mailman id 443292;
 Mon, 14 Nov 2022 11:34:50 +0000
Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254]
 helo=se1-gles-sth1.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=BuQF=3O=citrix.com=prvs=310a79da2=martin.harvey@srs-se1.protection.inumbo.net>)
 id 1ouXjm-0005Rj-PZ
 for win-pv-devel@lists.xenproject.org; Mon, 14 Nov 2022 11:34:50 +0000
Received: from esa5.hc3370-68.iphmx.com (esa5.hc3370-68.iphmx.com
 [216.71.155.168]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS
 id 564f2d86-6410-11ed-91b6-6bf2151ebd3b;
 Mon, 14 Nov 2022 12:34:47 +0100 (CET)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/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: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 564f2d86-6410-11ed-91b6-6bf2151ebd3b
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1668425687;
  h=from:to:cc:subject:date:message-id:mime-version:
   content-transfer-encoding;
  bh=WH3/0KrGgdn5ylA6TRTZsWyY02HlF4VuApRbalNfADo=;
  b=humyrwIsSvjoAu+6TN8J7Jy/D0UQJMktFY1UvlYMlZXUJXr4qIk3BxuI
   h67bX68FMx+1XQOH5bN7JVSE5kf/25HqUNUql7uEYE6YMFnLsK/j8TezQ
   kVxjbO4l8ftSXira+dK8usyxszc7bj9znpAGqyhoawnELiw7PGYzL4B/L
   E=;
Authentication-Results: esa5.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
X-SBRS: None
X-MesageID: 83827181
X-Ironport-Server: esa5.hc3370-68.iphmx.com
X-Remote-IP: 162.221.156.83
X-Policy: $RELAYED
IronPort-Data: A9a23:lSHkP6sHpvn10UUra4gPn3KsTufnVA5eMUV32f8akzHdYApBsoF/q
 tZmKWyBb6rZZWT3fth2a9jjpEoDuJ6Hn4NqQAZlrigzEyIV+JbJXdiXEBz9bniYRiHhoOCLz
 O1FM4Wdc5pkJpP4jk3wWlQ0hSAkjclkfpKlVKiffHg0HVU/IMsYoUoLs/YjhYJ1isSODQqIu
 Nfjy+XSI1bg0DNvWo4uw/vrRChH4bKj5lv0gnRkPaoR5QaHyyFMZH4iDfrZw0XQE9E88tGSH
 44v/JnhlkvF8hEkDM+Sk7qTWiXmlZaLYGBiIlIPM0STqkAqSh4ai87XB9JFAatjsB2bnsgZ9
 Tl4ncfYpTHFnEH7sL91vxFwS0mSNEDdkVPNCSDXXce7lyUqf5ZwqhnH4Y5f0YAwo45K7W9yG
 fMwa3M/R0yy1tOPzrPjVudsp9kkCMvUBdZK0p1g5Wmx4fcORJnCR+PB5MNC3Sd2jcdLdRrcT
 5NHM3w1Nk2GOkARfAdMYH49tL7Aan3XdjRCtFOT46o++Xbe3SR60aT3McqTcduPLSlQthbD9
 jiZpjSgav0cHOGbxgbV41+GurDwmzzeUo0cHuWj8tc/1TV/wURMUUZLBDNXu8KRlU+4HspBb
 kAZ5Ccqhawz71CwCMnwWQWip3yJtQJaXMBfe9DW8ynUlPCSuVzAQDFZEHgRM7TKqfPaWxRpl
 W2gw+K4NAVhseWJR3K867CwrwyLbH19wXA5WQcISg4M4t/GqY41jw7SQtsLLJNZnuEZChmrn
 WnU8XFWa6E7yJdSiv7lpQyvbyeE/MChc+Ij2unAsotJBCtdbZXtWYGn4EOzAR1ofNfAFQnpU
 JTpdqGjAAEy4XOlzn3lrAYlRuvBCxO53Nr03zZS82EJrWjFxpJaVdk4DfEXDB4B3jw4UTHoe
 lTPngha+YVeOnCnBYcuPdzhUJp2kfa8Toy0PhwxUjapSsEsHDJrAQk0PRLAt4wTuBVEfV4D1
 WezLp/3UCdy5VVPxzuqXeYNuYLHNQhnrV4+hPnTkXya7FZpTCXPGepfagHeM7xRAWHtiFy9z
 uuz/vCik313ONASqAGOmWLPBTjm9UQGOK0=
IronPort-HdrOrdr: A9a23:UpS3FKk/N+fhd0E+bm7uiQm1FyTpDfIm3DAbv31ZSRFFG/Fxl6
 iV88jzsiWE7Qr5OUtQ/uxoV5PgfZqxz/NICOoqTNWftWvd2FdARbsKheCJ/9SJIVybygc378
 ldmsZFZOEYdWIK7vrH3A==
X-IronPort-AV: E=Sophos;i="5.96,161,1665460800"; 
   d="scan'208";a="83827181"
From: Martin Harvey <Martin.Harvey@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
CC: Martin Harvey <Martin.Harvey@citrix.com>, Martin Harvey
	<martin.harvey@citrix.com>
Subject: [PATCH] Correct return codes during racy destruction (3).
Date: Mon, 14 Nov 2022 11:34:21 +0000
Message-ID: <20221114113421.1164-1-Martin.Harvey@citrix.com>
X-Mailer: git-send-email 2.25.0.windows.1
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

Errors in PnP retun codes found when testing under driver
verifier with mixed VM lifecycle operations. Under some
rare cases, it is possible to get more than one PnP
"remove like" operation. This results in a PnP remove
operation being processed whilst the device is already
in the deleted state.

This patch fixes the immediate cause of the bugfixes,
buy fixing the return code. Device destruction is
unchanged. Investigation into the root cause is still
ongoing.

Signed-off-by: Martin Harvey <martin.harvey@citrix.com>
---
 src/xencons/driver.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/src/xencons/driver.c b/src/xencons/driver.c
index 5a4d1d3..c3688c1 100644
--- a/src/xencons/driver.c
+++ b/src/xencons/driver.c
@@ -194,8 +194,20 @@ Dispatch(
     ASSERT3P(Dx->DeviceObject, ==, DeviceObject);
 
     if (Dx->DevicePnpState == Deleted) {
+        PIO_STACK_LOCATION StackLocation = IoGetCurrentIrpStackLocation(Irp);
+        UCHAR MajorFunction = StackLocation->MajorFunction;
+        UCHAR MinorFunction = StackLocation->MinorFunction;
         status = STATUS_NO_SUCH_DEVICE;
 
+        if (MajorFunction == IRP_MJ_PNP) {
+            if ((MinorFunction == IRP_MN_SURPRISE_REMOVAL) ||
+               (MinorFunction == IRP_MN_REMOVE_DEVICE)) {
+                /* FDO and PDO deletions can block after being marked deleted, but before IoDeleteDevice */
+                status = STATUS_SUCCESS;
+            }
+            ASSERT((MinorFunction != IRP_MN_CANCEL_REMOVE_DEVICE) && (MinorFunction != IRP_MN_CANCEL_STOP_DEVICE));
+        }
+
         Irp->IoStatus.Status = status;
         IoCompleteRequest(Irp, IO_NO_INCREMENT);
         goto done;
-- 
2.25.0.windows.1



From win-pv-devel-bounces@lists.xenproject.org Mon Nov 14 11:35:59 2022
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 14 Nov 2022 11:35:59 +0000
Received: from list by lists.xenproject.org with outflank-mailman.443296.697850 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ouXkt-0005Y0-Km; Mon, 14 Nov 2022 11:35:59 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 443296.697850; Mon, 14 Nov 2022 11:35:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ouXkt-0005Xt-IG; Mon, 14 Nov 2022 11:35:59 +0000
Received: by outflank-mailman (input) for mailman id 443296;
 Mon, 14 Nov 2022 11:35:58 +0000
Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50]
 helo=se1-gles-flk1.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=BuQF=3O=citrix.com=prvs=310a79da2=martin.harvey@srs-se1.protection.inumbo.net>)
 id 1ouXks-0005Xl-2r
 for win-pv-devel@lists.xenproject.org; Mon, 14 Nov 2022 11:35:58 +0000
Received: from esa6.hc3370-68.iphmx.com (esa6.hc3370-68.iphmx.com
 [216.71.155.175]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS
 id 7f6a9164-6410-11ed-8fd2-01056ac49cbb;
 Mon, 14 Nov 2022 12:35:56 +0100 (CET)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/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: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 7f6a9164-6410-11ed-8fd2-01056ac49cbb
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1668425756;
  h=from:to:cc:subject:date:message-id:mime-version:
   content-transfer-encoding;
  bh=2DuxR50Z/S8q9f6xw6+MYsZV6dGi3YayACFrgWMpFZg=;
  b=dKVVbK/dpcrhaNr/v5jHvIJAyYNPqw/oaVw6DVMbMZw4nptPFwOUDgiW
   ihRAeVH4xfjCwsNg6BPBs6TtmtApkXb+zpjiVWv0pNztzrB5R/NdDO1vB
   6Tq++CPqcFn+tT9QN6rhTMHEnDexk99oLWMmhlof8ALDnDVzCHm/Aa4Nv
   U=;
Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
X-SBRS: None
X-MesageID: 84350118
X-Ironport-Server: esa6.hc3370-68.iphmx.com
X-Remote-IP: 162.221.156.83
X-Policy: $RELAYED
IronPort-Data: A9a23:HE7E+qoFJAxf6WoieY/DOiEN/9heBmJAZRIvgKrLsJaIsI4StFCzt
 garIBmCOK3eYTH8c40iPYrloUICupPQx99iSgA5/ywzHnwU8ZuZCYyVIHmrMnLJJKUvbq7FA
 +Y2MYCccZ9uHhcwgj/3b9ANeFEljfngqoLUUbKCYWYpAFc+E0/NsDo788YhmIlknNOlNA2Ev
 NL2sqX3NUSsnjV5KQr40YrawP9UlKm06W1wUmAWP6gR5gaHziVNVfrzGInqR5fGatgMdgKFb
 76rIIGRpgvx4xorA9W5pbf3GmVirmn6ZFXmZtJ+AsBOszAazsAA+v9T2Mk0MC+7vw6hjdFpo
 OihgLTrIesf0g8gr8xGO/VQO3kW0aSrY9YrK1Dn2SCY5xWun3cBX5yCpaz5VGEV0r8fPI1Ay
 RAXAAEPZTyKwP2o/JGYVuQ9v5oAFcrLN6pK7xmMzRmBZRonaZXKQqGM7t5ExjYgwMtJGJ4yZ
 eJAN2ApNk6ZJUQSZBFHU/rSn8/x7pX7WzhRsk6Uo+w36nLNwR1Z27nxKtvFPNeNQK25m27I+
 jmbpz2gUnn2MvSS8CK+3lSAgdbOlDP8VLk/Op2z1M5T1Qj7Kms7V0RNCArTTeOColG/XZdHN
 QkY9zQjqYA29Ve3VZ/tUhugunmGsxUAHd1KHIUHBBqlk/SOpVzDXy5dE2AHOIdOWNIKqSIC5
 12Cs9quGiJTk56JRCOkqJStrhO5EH1ARYMdXhMsQQwA6tjlhYg8iBPTU9pueJKIYs3J9SLYm
 G7T8nVn71kHpYtSjvjgowib6965jsKRJjPZ8Dk7SY5MAulRQIe+L7Kl5lHAhRqrBNbIFwLR1
 JTodiX30QzvMX1vvHbcKAnuNOvzjxpgDNE7qQAHInXZ327xk0NPhKgJiNy+TW8wWir+RRfnY
 VXIpSRa74JJMX2hYMdfOtzvW590kfS+SY+9B5g4i+aihbAoKWe6ENxGPxbMjwgBbmBx+U3AB
 XtrWZn1VitLYUiW5DG3W/0cwdcWKtMWnAvuqFGS50rP7Idyk1bOE+dYagHUPr1lhE5GyS2Mm
 +ti2wKx4003eIXDjuP/q+b/8XhiwaAHOK3L
IronPort-HdrOrdr: A9a23:EKWAM6EA+DedKybrpLqE4seALOsnbusQ8zAXP0AYc3Nom6uj5q
 WTdZUgpHjJYVkqOU3I9ersBEDiewK/yXcW2+ks1N6ZNWGM0ldARLsSibcKqAePJ8SRzIJgPN
 9bAstDNOE=
X-IronPort-AV: E=Sophos;i="5.96,161,1665460800"; 
   d="scan'208";a="84350118"
From: Martin Harvey <Martin.Harvey@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
CC: Martin Harvey <Martin.Harvey@citrix.com>, Martin Harvey
	<martin.harvey@citrix.com>
Subject: [PATCH] Correct return codes during racy destruction (3).
Date: Mon, 14 Nov 2022 11:35:38 +0000
Message-ID: <20221114113538.247-1-Martin.Harvey@citrix.com>
X-Mailer: git-send-email 2.25.0.windows.1
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

Errors in PnP retun codes found when testing under driver
verifier with mixed VM lifecycle operations. Under some
rare cases, it is possible to get more than one PnP
"remove like" operation. This results in a PnP remove
operation being processed whilst the device is already
in the deleted state.

This patch fixes the immediate cause of the bugfixes,
buy fixing the return code. Device destruction is
unchanged. Investigation into the root cause is still
ongoing.

Signed-off-by: Martin Harvey <martin.harvey@citrix.com>
---
 src/xeniface/driver.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/src/xeniface/driver.c b/src/xeniface/driver.c
index db41cfe..246bf7a 100644
--- a/src/xeniface/driver.c
+++ b/src/xeniface/driver.c
@@ -108,8 +108,20 @@ Dispatch(
     ASSERT3P(Dx->DeviceObject, ==, DeviceObject);
 
     if (Dx->DevicePnpState == Deleted) {
+        PIO_STACK_LOCATION StackLocation = IoGetCurrentIrpStackLocation(Irp);
+        UCHAR MajorFunction = StackLocation->MajorFunction;
+        UCHAR MinorFunction = StackLocation->MinorFunction;
         status = STATUS_NO_SUCH_DEVICE;
 
+        if (MajorFunction == IRP_MJ_PNP) {
+            if ((MinorFunction == IRP_MN_SURPRISE_REMOVAL) ||
+               (MinorFunction == IRP_MN_REMOVE_DEVICE)) {
+                /* FDO and PDO deletions can block after being marked deleted, but before IoDeleteDevice */
+                status = STATUS_SUCCESS;
+            }
+            ASSERT((MinorFunction != IRP_MN_CANCEL_REMOVE_DEVICE) && (MinorFunction != IRP_MN_CANCEL_STOP_DEVICE));
+        }
+
         Irp->IoStatus.Status = status;
         IoCompleteRequest(Irp, IO_NO_INCREMENT);
         goto done;
-- 
2.25.0.windows.1



From win-pv-devel-bounces@lists.xenproject.org Mon Nov 14 11:36:44 2022
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 14 Nov 2022 11:36:44 +0000
Received: from list by lists.xenproject.org with outflank-mailman.443304.697854 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ouXlc-0005cS-Nn; Mon, 14 Nov 2022 11:36:44 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 443304.697854; Mon, 14 Nov 2022 11:36:44 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ouXlc-0005cL-LE; Mon, 14 Nov 2022 11:36:44 +0000
Received: by outflank-mailman (input) for mailman id 443304;
 Mon, 14 Nov 2022 11:36:43 +0000
Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254]
 helo=se1-gles-sth1.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=BuQF=3O=citrix.com=prvs=310a79da2=martin.harvey@srs-se1.protection.inumbo.net>)
 id 1ouXlb-0005aL-Js
 for win-pv-devel@lists.xenproject.org; Mon, 14 Nov 2022 11:36:43 +0000
Received: from esa4.hc3370-68.iphmx.com (esa4.hc3370-68.iphmx.com
 [216.71.155.144]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS
 id 9b60897d-6410-11ed-91b6-6bf2151ebd3b;
 Mon, 14 Nov 2022 12:36:42 +0100 (CET)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/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: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 9b60897d-6410-11ed-91b6-6bf2151ebd3b
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1668425802;
  h=from:to:cc:subject:date:message-id:mime-version:
   content-transfer-encoding;
  bh=eMdDuwBYvdMeHtFmTgVowPCBwBd7URtlMNSsKVyqw9w=;
  b=Tb9vX85z7rxhDCOaiTZv4Ag669vBBFkrb004nPgupsWzKEw1ZqOyzbFh
   tYXv1eELmmFLa5ENLOAE/OviZdNH681FJ4PA5Z1B5UiE9YWMPF4fuJzNa
   /BUezSMsnwJZXWYTFoYvC7nUGupjLQCmJyjJw0CocY26YtFrXmw3+ADx6
   o=;
Authentication-Results: esa4.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
X-SBRS: None
X-MesageID: 87294399
X-Ironport-Server: esa4.hc3370-68.iphmx.com
X-Remote-IP: 162.221.156.83
X-Policy: $RELAYED
IronPort-Data: A9a23:DfAOQqI7Og+UNP8gFE+RiZUlxSXFcZb7ZxGr2PjKsXjdYENSgj0Ax
 jBMXWmDa6zZZGameI10bNjj9UoDusTRztBkG1dlqX01Q3x08seUXt7xwmUcnc+xBpaaEB84t
 ZV2hv3odp1coqr0/0/1WlTZhSAgk/rOHv+kUrWs1hlZHWdMUD0mhQ9oh9k3i4tphcnRKw6Ws
 Jb5rta31GWNglaYCUpJrfPdwP9TlK6q4mlB5wViPakjUGL2zBH5MrpOfcldEFOgKmVkNrbSb
 /rOyri/4lTY838FYj9yuu+mGqGiaue60Tmm0hK6aYD76vRxjnVaPpIAHOgdcS9qZwChxLid/
 jnvWauYEm/FNoWU8AgUvoIx/ytWZcWq85efSZSzXFD6I+QrvBIAzt03ZHzaM7H09c5IIlF+s
 t4YFwsJTRuZo/qP2ZOqVrFj05FLwMnDZOvzu1llxDDdS/0nXYrCU+PB4towMDUY354UW6yEP
 oxANGQpPE+ojx5nYz/7DLo7lf20h3+5czRCtl+EjaE2/3LS3Ep6172F3N/9KoPQFJkOzxfwS
 mTu5GT1OhREMuWmjnm1/C2plrGWvCjWYddHfFG/3qEz2wDCroAJMzUJVF3+uef8hkOgVtZ3L
 00P5jFovaU07FasTNT2Q1u/unHsg/IHc4MOSatgsljLk/eKpVbCboQZctJfQOMFhP9xZzwV7
 VuqlMnNHQV2kayJEX3Io994sgiOESQSKGYDYwoNQg0E/8TvrekPs/7fcjpwOPXr14OoQFkc1
 xjP9XFj3OtL0abnwo3hpTj6bySQSo8lp+LfziHeRSqb4wxwf+ZJjKT4uAGAvZ6swGt0J2RtX
 UToeeDEvYji7rnXzkRhpdnh+5n3j8tpyBWG3TZS82AJrlxAOxeLJOi8Gg1WKkZzKdojcjT0e
 kLVsg45zMYNYivxM/MrPd7qU5VCIU3c+TPND628UzazSsIpKF/vEN9GOCZ8IFwBYGBzyPpia
 P93gO6nDGoACLQP8dZFb7517FLqrwhgrV7uqWfTlE73jODEPi7IFd/o8jKmN4gE0U9Nmy2Nm
 /43CidA4083vDHWCsUPzbMuEA==
IronPort-HdrOrdr: A9a23:aT8/c6zfBc9NRwZnaFsdKrPwJr1zdoMgy1knxilNoRw8SKOlfq
 eV7ZEmPH7P+VEssR4b+OxoVJPsfZq+z+8W3WByB9eftWDd0QPCRr2KhbGSpwEIcBeRygcy78
 tdmtBFeb7NMWQ=
X-IronPort-AV: E=Sophos;i="5.96,161,1665460800"; 
   d="scan'208";a="87294399"
From: Martin Harvey <Martin.Harvey@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
CC: Martin Harvey <Martin.Harvey@citrix.com>, Martin Harvey
	<martin.harvey@citrix.com>
Subject: [PATCH] Correct return codes during racy destruction (3).
Date: Mon, 14 Nov 2022 11:36:25 +0000
Message-ID: <20221114113625.1712-1-Martin.Harvey@citrix.com>
X-Mailer: git-send-email 2.25.0.windows.1
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

Errors in PnP retun codes found when testing under driver
verifier with mixed VM lifecycle operations. Under some
rare cases, it is possible to get more than one PnP
"remove like" operation. This results in a PnP remove
operation being processed whilst the device is already
in the deleted state.

This patch fixes the immediate cause of the bugfixes,
buy fixing the return code. Device destruction is
unchanged. Investigation into the root cause is still
ongoing.

Signed-off-by: Martin Harvey <martin.harvey@citrix.com>
---
 src/xendisk/driver.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/src/xendisk/driver.c b/src/xendisk/driver.c
index 4b004c5..c165c90 100644
--- a/src/xendisk/driver.c
+++ b/src/xendisk/driver.c
@@ -170,8 +170,20 @@ Dispatch(
     ASSERT3P(Dx->DeviceObject, ==, DeviceObject);
 
     if (Dx->DevicePnpState == Deleted) {
+        PIO_STACK_LOCATION StackLocation = IoGetCurrentIrpStackLocation(Irp);
+        UCHAR MajorFunction = StackLocation->MajorFunction;
+        UCHAR MinorFunction = StackLocation->MinorFunction;
         status = STATUS_NO_SUCH_DEVICE;
 
+        if (MajorFunction == IRP_MJ_PNP) {
+            if ((MinorFunction == IRP_MN_SURPRISE_REMOVAL) ||
+               (MinorFunction == IRP_MN_REMOVE_DEVICE)) {
+                /* FDO and PDO deletions can block after being marked deleted, but before IoDeleteDevice */
+                status = STATUS_SUCCESS;
+            }
+            ASSERT((MinorFunction != IRP_MN_CANCEL_REMOVE_DEVICE) && (MinorFunction != IRP_MN_CANCEL_STOP_DEVICE));
+        }
+
         Irp->IoStatus.Status = status;
         IoCompleteRequest(Irp, IO_NO_INCREMENT);
         goto done;
-- 
2.25.0.windows.1



From win-pv-devel-bounces@lists.xenproject.org Mon Nov 14 11:37:32 2022
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 14 Nov 2022 11:37:32 +0000
Received: from list by lists.xenproject.org with outflank-mailman.443310.697859 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ouXmO-0005h5-Qz; Mon, 14 Nov 2022 11:37:32 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 443310.697859; Mon, 14 Nov 2022 11:37:32 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ouXmO-0005gy-OJ; Mon, 14 Nov 2022 11:37:32 +0000
Received: by outflank-mailman (input) for mailman id 443310;
 Mon, 14 Nov 2022 11:37:31 +0000
Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254]
 helo=se1-gles-sth1.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=BuQF=3O=citrix.com=prvs=310a79da2=martin.harvey@srs-se1.protection.inumbo.net>)
 id 1ouXmN-0005gs-S8
 for win-pv-devel@lists.xenproject.org; Mon, 14 Nov 2022 11:37:31 +0000
Received: from esa4.hc3370-68.iphmx.com (esa4.hc3370-68.iphmx.com
 [216.71.155.144]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS
 id b7c3715d-6410-11ed-91b6-6bf2151ebd3b;
 Mon, 14 Nov 2022 12:37:30 +0100 (CET)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/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: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: b7c3715d-6410-11ed-91b6-6bf2151ebd3b
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1668425849;
  h=from:to:cc:subject:date:message-id:mime-version:
   content-transfer-encoding;
  bh=mz2Lu/KMv/esctdpegqmbyTaJhz64NNUgqaUOIjapp8=;
  b=VtlTXu9L8wKcYTyQKgCfAU17uvQq8B3PFp6EybqYSVBqzNjckUVlp60L
   morFPw43GOtktXBmCv72y88bpnCKioBxxEXyrV8cgbgH6rAgeonkztFv4
   41N9IZJnTXzpOgmwhxYjBoZEVK3uyqxWdrSjd61y32XyDZ1k2LbPGoJnf
   M=;
Authentication-Results: esa4.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
X-SBRS: None
X-MesageID: 87294439
X-Ironport-Server: esa4.hc3370-68.iphmx.com
X-Remote-IP: 162.221.156.83
X-Policy: $RELAYED
IronPort-Data: A9a23:UBMIiKDYQ7bHbBVW/3Hjw5YqxClBgxIJ4kV8jS/XYbTApGlx3zxUn
 TBKDz3Ub6qCYTOjed4kaInlpEoCvcXdmNE3QQY4rX1jcSlH+JHPbTi7wuUcHAvJd5GeExg3h
 yk6QoOdRCzhZiaE/n9BCpC48T8nk/nNHuCnYAL9EngZbRd+Tys8gg5Ulec8g4p56fC0GArIs
 t7pyyHlEAbNNwVcbyRFtcpvlDs15K6o4WpB4gRnDRx2lAS2e0c9Xcp3yZ6ZdxMUcqEMdsamS
 uDKyq2O/2+x13/B3fv8z94X2mVTKlLjFVDmZkh+AsBOsTAbzsAG6Y4pNeJ0VKtio27hc+ada
 jl6ncfYpQ8BZsUgkQmGOvVSO3kW0aZuoNcrLZUj2CA6IoKvn3bEmp1T4E8K0YIwxaF7Pkpk1
 PoiJjUvZAGNheOryZ3nY7w57igjBJGD0II3v3hhyXfSDOo8QICFSKLPjTNa9G5u3IYUR6+YP
 pdHL2o0BPjDS0Qn1lM/DZskgOauwHn2aSNVuXqepLYt4niVxwt0uFToGIqKII3WGZ4E9qqej
 mTY2XnIDxslCIGelBmdwnWvj/PJhwquDer+E5Xnr6U30TV/3Fc7FxwQEEOl5PW0lEO6c9ZeM
 FAPvDojq7Ao806mRcW7WAe3yENopTZFBYAWSbdjrljQlOyEuG51G1ToUBZ+L9AZn+UXQwYk0
 32Djt3rBCFmn+G8HCf1GqivkRu+Pi0cLGknbCACTBcY79SLnLzfni4jXf44Tvfr04Sd9SXYh
 mnT8XNg3+l7Ydsjjf3TwLzRv967SnElpCYR7x6fYG+q5xgRiGWNN93xsgizARqtwe+kori9U
 JoswZn2AAMmV8vleMmxrAIlQtmUCw6tamG0vLKWN8BJGvTE0yfLkXpsyD9/Plx1Fc0PZCXkZ
 kTe0SsIusEDZyX2MfErONrgYyjP8UQHPY24Ps04k/IUOsQhHON51HwGibGsM5DFzxF3zPBX1
 WazesewF3cKYZmLPxLvL9rwENYDmEgD+I8kbcuhn0n9i+DOOSL9pHVsGALmU93VJZis+G39m
 +uz/ePTo/mDeIUSuhXqzLM=
IronPort-HdrOrdr: A9a23:5xhJSq9vu3RN7kI8+cBuk+DSI+orL9Y04lQ7vn2YSXRuHfBw8P
 re+cjztCWE7wr5N0tApTntAsS9qBDnhPxICOsqXYtKNTOO0ADDEGgL1/qH/9SKIUPDH4BmuZ
 uIC5IOa+HNMQ==
X-IronPort-AV: E=Sophos;i="5.96,161,1665460800"; 
   d="scan'208";a="87294439"
From: Martin Harvey <Martin.Harvey@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
CC: Martin Harvey <Martin.Harvey@citrix.com>, Martin Harvey
	<martin.harvey@citrix.com>
Subject: [PATCH] Correct return codes during racy destruction (3).
Date: Mon, 14 Nov 2022 11:37:19 +0000
Message-ID: <20221114113719.564-1-Martin.Harvey@citrix.com>
X-Mailer: git-send-email 2.25.0.windows.1
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

Errors in PnP retun codes found when testing under driver
verifier with mixed VM lifecycle operations. Under some
rare cases, it is possible to get more than one PnP
"remove like" operation. This results in a PnP remove
operation being processed whilst the device is already
in the deleted state.

This patch fixes the immediate cause of the bugfixes,
buy fixing the return code. Device destruction is
unchanged. Investigation into the root cause is still
ongoing.

Signed-off-by: Martin Harvey <martin.harvey@citrix.com>
---
 src/xenvif/driver.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/src/xenvif/driver.c b/src/xenvif/driver.c
index 8bc097a..cac0cee 100644
--- a/src/xenvif/driver.c
+++ b/src/xenvif/driver.c
@@ -350,8 +350,20 @@ Dispatch(
     ASSERT3P(Dx->DeviceObject, ==, DeviceObject);
 
     if (Dx->DevicePnpState == Deleted) {
+        PIO_STACK_LOCATION StackLocation = IoGetCurrentIrpStackLocation(Irp);
+        UCHAR MajorFunction = StackLocation->MajorFunction;
+        UCHAR MinorFunction = StackLocation->MinorFunction;
         status = STATUS_NO_SUCH_DEVICE;
 
+        if (MajorFunction == IRP_MJ_PNP) {
+            if ((MinorFunction == IRP_MN_SURPRISE_REMOVAL) ||
+               (MinorFunction == IRP_MN_REMOVE_DEVICE)) {
+                /* FDO and PDO deletions can block after being marked deleted, but before IoDeleteDevice */
+                status = STATUS_SUCCESS;
+            }
+            ASSERT((MinorFunction != IRP_MN_CANCEL_REMOVE_DEVICE) && (MinorFunction != IRP_MN_CANCEL_STOP_DEVICE));
+        }
+
         Irp->IoStatus.Status = status;
         IoCompleteRequest(Irp, IO_NO_INCREMENT);
         goto done;
-- 
2.25.0.windows.1



From win-pv-devel-bounces@lists.xenproject.org Thu Nov 17 09:45:03 2022
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 17 Nov 2022 09:45:03 +0000
Received: from list by lists.xenproject.org with outflank-mailman.444343.699954 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ovbS9-00048m-Az; Thu, 17 Nov 2022 09:45:01 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 444343.699954; Thu, 17 Nov 2022 09:45:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ovbS9-00048h-8I; Thu, 17 Nov 2022 09:45:01 +0000
Received: by outflank-mailman (input) for mailman id 444343;
 Wed, 16 Nov 2022 16:14:47 +0000
Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50]
 helo=se1-gles-flk1.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=LIDY=3Q=citrix.com=prvs=312fd569b=Rabish.Kumar@srs-se1.protection.inumbo.net>)
 id 1ovL3n-0004UC-DZ
 for win-pv-devel@lists.xenproject.org; Wed, 16 Nov 2022 16:14:47 +0000
Received: from esa3.hc3370-68.iphmx.com (esa3.hc3370-68.iphmx.com
 [216.71.145.155]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS
 id c503d87a-65c9-11ed-8fd2-01056ac49cbb;
 Wed, 16 Nov 2022 17:14:44 +0100 (CET)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/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: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: c503d87a-65c9-11ed-8fd2-01056ac49cbb
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1668615284;
  h=from:to:cc:subject:date:message-id:mime-version:
   content-transfer-encoding;
  bh=+0345gIdlODRjJeh69Vx0GImvR0g3RKCn4nO6nI3Tqw=;
  b=CO88Slyh4BeeGwdwGFt/nfxLA2ksNB1+AlMUqiFD4kchsXwsbmRp79HM
   jx8iENuHKd51L274Ee/bz1DxLmyE4b8zy+v1fEpSc3DoMzL4EazSFxsTF
   at/kFRG2POjhhFbFmCW1nROCsRvt88dMR3PBLNyApgrEqkSD0n9WwAATA
   0=;
Authentication-Results: esa3.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
X-SBRS: None
X-MesageID: 84953949
X-Ironport-Server: esa3.hc3370-68.iphmx.com
X-Remote-IP: 162.221.156.83
X-Policy: $RELAYED
IronPort-Data: A9a23:14noSKonp7bJQPHFFPveKKmfM2FeBmJAZRIvgKrLsJaIsI4StFCzt
 garIBmDO6rfZzahLtAiaY+woxsCsZfUzdI1HlA9+XhgEn8WoJuZCYyVIHmrMnLJJKUvbq7FA
 +Y2MYCccZ9uHhcwgj/3b9ANeFEljfngqoLUUbKCYWYpAFc+E0/NsDo788YhmIlknNOlNA2Ev
 NL2sqX3NUSsnjV5KQr40YrawP9UlKm06W1wUmAWP6gR5gaHzidNVfrzGInqR5fGatgMdgKFb
 76rIIGRpgvx4xorA9W5pbf3GmVirmn6ZFXmZtJ+AsBOszAazsAA+v9T2Mk0MC+7vw6hjdFpo
 OihgLTrIesf0g8gr8xGO/VQO3kW0aSrY9YrK1Dn2SCY5xWun3cBX5yCpaz5VGEV0r8fPI1Ay
 RAXAAhTZDzZwL+Q+66QZfF+g+EBdPS7YrpK7xmMzRmBZRonaZXKQqGM7t5ExjYgwMtJGJ4yZ
 eJAN2ApNk6ZJUQSZBFHU/rSn8/x7pX7WwdRolOOpewU/m3a1iR60aT3McqTcduPLSlQthbE9
 z+drjioav0cHP+UwAu4/Su9vbHevx3LZb8uFOPh5uE/1TV/wURMUUZLBDNXu8KRlU+4HspBb
 kAZ5Ccqhawz71CwCMnwWQWip3yJtQJaXMBfe9DW8ynUlPCSuVzAQDFZEHgRM7TKqfPaWxQSi
 FWlxZS0Iwdzm5KNW3e41O+p/W2LbH19wXA5WQcISg4M4t/GqY41jw7SQtsLLJNZnuEZChmrn
 WnU8XFWa6E7yJdSiv7lpQyvbyeE/MChc+Ij2unAsotJBCtdbZXtWYGn4EOzAR1ofNfAFQnpU
 JTpdqGjAAEy4XOlznLlrAYlRuvBCxO53Nr03zZS82EJrWjFxpJaVdk4DfEXDB4B3jw4UTHoe
 lTPngha+YVeOnCnBYcuPdzhVp91l/mxS4u+PhwxUjapSsEvHDJrAQk0PRLAt4wTuBVEfV4D1
 WezLp/3UCdy5VVPxzuqXeYNuYLHNQhnrV4+hPnTkXya7FZpTCTKEu9abgXSNr1RAWHtiFy9z
 uuz/vCik313ONASqAGOoeb/8XhiwaAHOK3L
IronPort-HdrOrdr: A9a23:s4Da8KATKU1w7A/lHemm55DYdb4zR+YMi2TC1yhKJiC9Ffbo8v
 xG/c5rsiMc5wxxZJhNo7290cq7MBHhHPxOgbX5VI3KNGKNhILBFvAH0WKI+VPd8kPFmtK1rZ
 0QEJRDNA==
X-IronPort-AV: E=Sophos;i="5.96,167,1665460800"; 
   d="scan'208";a="84953949"
From: "Rabish Kumar (3P)" <rabish.kumar@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
CC: "Rabish Kumar (3P)" <rabish.kumar@citrix.com>
Subject: [PATCH] FdoCreate: bad memset in failure path.
Date: Wed, 16 Nov 2022 21:44:21 +0530
Message-ID: <20221116161421.237-1-rabish.kumar@citrix.com>
X-Mailer: git-send-email 2.37.2.windows.2
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

Signed-off-by: Rabish Kumar <rabish.kumar@citrix.com>
---
 src/xenvif/fdo.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/xenvif/fdo.c b/src/xenvif/fdo.c
index 8067e03..b684c7b 100644
--- a/src/xenvif/fdo.c
+++ b/src/xenvif/fdo.c
@@ -3173,8 +3173,8 @@ FdoCreate(
 fail14:
     Error("fail14\n");
 
-    RtlZeroMemory(&Fdo->UnplugInterface,
-                  sizeof (XENBUS_UNPLUG_INTERFACE));
+    RtlZeroMemory(&Fdo->GnttabInterface,
+                  sizeof (XENBUS_GNTTAB_INTERFACE));
 
 fail13:
     Error("fail13\n");
-- 
2.37.2.windows.2



From win-pv-devel-bounces@lists.xenproject.org Thu Nov 17 10:39:49 2022
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 17 Nov 2022 10:39:49 +0000
Received: from list by lists.xenproject.org with outflank-mailman.444919.700107 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ovcJA-0007dS-1Z; Thu, 17 Nov 2022 10:39:48 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 444919.700107; Thu, 17 Nov 2022 10:39:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ovcJ9-0007dJ-V6; Thu, 17 Nov 2022 10:39:47 +0000
Received: by outflank-mailman (input) for mailman id 444919;
 Thu, 17 Nov 2022 10:39:46 +0000
Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254]
 helo=se1-gles-sth1.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=FMyv=3R=citrix.com=prvs=313191bf4=owen.smith@srs-se1.protection.inumbo.net>)
 id 1ovcJ8-0007ch-BG
 for win-pv-devel@lists.xenproject.org; Thu, 17 Nov 2022 10:39:46 +0000
Received: from esa5.hc3370-68.iphmx.com (esa5.hc3370-68.iphmx.com
 [216.71.155.168]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS
 id 24c20b0e-6664-11ed-91b6-6bf2151ebd3b;
 Thu, 17 Nov 2022 11:39:44 +0100 (CET)
Received: from mail-bn7nam10lp2102.outbound.protection.outlook.com (HELO
 NAM10-BN7-obe.outbound.protection.outlook.com) ([104.47.70.102])
 by ob1.hc3370-68.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256;
 17 Nov 2022 05:39:34 -0500
Received: from MWHPR03MB2926.namprd03.prod.outlook.com (2603:10b6:300:11c::19)
 by DS7PR03MB5382.namprd03.prod.outlook.com (2603:10b6:5:2c7::5) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5813.19; Thu, 17 Nov
 2022 10:39:31 +0000
Received: from MWHPR03MB2926.namprd03.prod.outlook.com
 ([fe80::c518:c81b:1b24:c1f9]) by MWHPR03MB2926.namprd03.prod.outlook.com
 ([fe80::c518:c81b:1b24:c1f9%3]) with mapi id 15.20.5813.019; Thu, 17 Nov 2022
 10:39:31 +0000
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/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: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 24c20b0e-6664-11ed-91b6-6bf2151ebd3b
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1668681584;
  h=from:to:cc:subject:date:message-id:references:
   in-reply-to:content-transfer-encoding:mime-version;
  bh=S2WpNCMmHIRYjxfZbCze1N6xIqLYLzQuCvws0cV15JA=;
  b=XO+LZuyiMYFvyFxmVddPde9kaoyHoRTaZg/byPK6RJ4Cw9BpIzcLbjRN
   VMxPwaP/Sp9fOH8ucr03lF+2i6/dGMx7wvTRH8paCfGcVlruyYIggcCN3
   BbGdv2f8+wfPLsamqKc2kTMo3mLl9N0HaDNK8Q2fFUmcbGFjAaZ86L8qv
   A=;
X-IronPort-RemoteIP: 104.47.70.102
X-IronPort-MID: 84079955
X-IronPort-Reputation: None
X-IronPort-Listener: OutboundMail
X-IronPort-SenderGroup: RELAY_O365
X-IronPort-MailFlowPolicy: $RELAYED
IronPort-Data: A9a23:qS+W16y6Rh/n2SkHOmt6t+c1xyrEfRIJ4+MujC+fZmUNrF6WrkVSz
 WIdWz/SP/aPazbwetx+b43i/RwPsJCDyIVnQABrrCAxQypGp/SeCIXCJC8cHc8wwu7rFxs7s
 ppEOrEsCOhuExcwcz/0auCJQUFUjP3OHfykTbaeYUidfCc8IA85kxVvhuUltYBhhNm9Emult
 Mj75sbSIzdJ4RYtWo4vw//F+U0HUMja4mtC5AVnPK8T5jcyqlFOZH4hDfDpR5fHatE88t6SH
 47r0Ly/92XFyBYhYvvNfmHTKxBirhb6ZGBiu1IOM0SQqkEqSh8ai87XAME0e0ZP4whlqvgqo
 Dl7WT5cfi9yVkHEsLx1vxC1iEiSN4UekFPMCSDXXcB+UyQq2pYjqhljJBheAGEWxgp4KXp8/
 9wFBAEBUg6k2L+P2ru2SMZoh+12eaEHPKtH0p1h5RfwKK9+BLrlHODN79Ie2yosjMdTG/qYf
 9AedTdkcBXHZVtIJ0sTD5U92uyvgxETcRUB8A7T+fVxvDCVlVQruFTuGIO9ltiiQtpYmACDo
 2Pa/0zyAw0ANczZwj2Amp6prr+TxXyqCd9PfFG+3uI0sBqZnD0xMxITcEWK+N6ArW2bdusKf
 iT4/QJr98De7neDUdj7GgWm5XKJoBMYc95RCPEhrhGAzLLO5ASUDXRCSSROAOHKr+czTD0uk
 1WPwNXgAGU3tKXPECrHsLCJsTm1JC4Za3cYYjMJRhcE5N+lp5wvihXITZBoF6vdYsDJJAwcC
 gui9EAW74j/R+ZSv0ln1TgrWw6Rm6U=
IronPort-HdrOrdr: A9a23:xIaUgK4ibwBCcIgDrgPXwfKCI+orL9Y04lQ7vn2ZFiY5TiXIra
 qTdaogviMc0AxhI03Jmbi7Scq9qADnhORICO4qTP2ftWjdySCVxeRZgbcKrAeQfBEWmtQ96U
 4kSdkHNDSSNyk2sS+Z2njfLz9I+rDun86VbKXlvg5QpGpRGsNdBnJCe2Km+zpNNWx77PQCdK
 a0145inX6NaH4XZsO0Cj0sWPXCncTCkNbLcAMLHBku7SiJlHeN5KThGxaV8x8CW3cXqI1Svl
 Ttokjc3OGOovu7whjT2yv66IlXosLozp9uFdGBkc8cLxTrk0KNaJ56U7OPkTgpqKWE6Uoskv
 PLvxA8Vv4Dp0/5TyWQm1/AygPg2DEh5zvJ0lmDm0bupsT/WXYTF9dBrZgxSGqZ12MQ+PVHlI
 5b1WOQsJRaSTnamj7m2tTOXxZ20mKpvHsZl/IJhXA3a/pfVFYRl/1dwKpmKuZEIMvI0vFiLA
 CoNrCa2B9iSyLZU5kehBgo/DXjZAVrIv7MeDl+hiXc6UkroJk+9TpX+CVXpAZ+yLstD5ZD/O
 jKKaJuifVHSdIXd7t0AKMbTdKwEXGle2O7DIu+GyWSKEg8AQO7l7fnpLEuoO26cp0By5U/3J
 zHTVNDrGY3P0bjE9eH0pFH+g3EBDzVZ0Wk9uhOo5xi/rHsTrviNiOODFgojsu7uv0aRsnWQe
 y6Np5aC+LqaWHuBYFK1QvjXIQ6EwhWbOQF/tIgH16eqMPCLYPn8uTdbfbIPbLoVS0pX2vua0
 FzKQQb5P8wnHxDdkWI8CQ5AUmdBHAX1agAYZTy7qwU1JUHMJFKv0wclUm5j/v7WgF/jg==
X-IronPort-AV: E=Sophos;i="5.96,171,1665460800"; 
   d="scan'208";a="84079955"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=hrVziwDmvwDLJjxchF7LL/V+57V5ArSXvgWdgZXLExmbWPK1E91tOBLCWMjclMZtCKlRUkj9F/X0DNS83WNfLv121hCkrF/Xycbp4NR79r5NJoF1pA4ts1SIQvkpSFtp+kxZK838jQffBotXwFT53OLkFneQDiZXjQJO7ECHUXuwQNvuumgdjbho1dffIEybIfMZnij9ia2Vl8r/a555FPleLLE0w4NLpwd7v/KVZwHNqWffnALnoWTX/XL7A2OlOA/aJlev8HHmdXOYxfOH6dVM24AV62FY1T8qtzJCAszLb2h9kYioukNAVw2uti51c3FfHRKKAR2Gc2zXHofPzw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=kN3Y7LIQHUYnCkbtfTCBVc0CIf+HyuXg+GGjmK6XDKY=;
 b=OAbNx+napzStMAVqmzFGRYNPMGtwpkO0oEG/JzkWqwG2fTR6Lts+T+B8WZrFCBah+MXmGnLAXqh6asYGCemdIe/qlPmtKoSVqIkQ/1PcfD+u4KVBMI72ts0+DI12uIId0tHap085mSvQ3AmifyFeOoAQci3PjFpjZWKX7aqUrXkzUmH5NuQB+JVZ8kQdkGnH5F8NTx7gEMc9eFfiprUvJeOYmZGcobHAbSmgS+YMGVphfNhh8jGI+65XNkghLuGYN3kdRHBWKigBxDo/orQQOE9FzwOo/ry1H4I4GOx/AvYGEELoEZ11DcRrbwa/k2vaTU1FZt2i3Te9ivX44+Eqyg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=kN3Y7LIQHUYnCkbtfTCBVc0CIf+HyuXg+GGjmK6XDKY=;
 b=xbjHkb92UPx313Qxa9IS889y7AvRKD6OQKcjOO6zgRQW0bLo2md62WPRIhzZz14aGson9e+u9lY3q4ogezgKnDGg96fFyjr2MhSMAej0SN4PDsDcLH5DTGByIucGX/58Ktb591uIXd23iRe2X4m0wpee+qEo+8kFZ0H9sUOVzqo=
From: Owen Smith <owen.smith@citrix.com>
To: "Rabish Kumar (3P)" <Rabish.Kumar@citrix.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
CC: "Rabish Kumar (3P)" <Rabish.Kumar@citrix.com>
Subject: RE: [PATCH] FdoCreate: bad memset in failure path.
Thread-Topic: [PATCH] FdoCreate: bad memset in failure path.
Thread-Index: AQHY+mlN1segnDg3SU2ZyElWazxk165C7Fag
Date: Thu, 17 Nov 2022 10:39:31 +0000
Message-ID:
 <MWHPR03MB29269526C22091B5C4AB87A1FE069@MWHPR03MB2926.namprd03.prod.outlook.com>
References: <20221116161421.237-1-rabish.kumar@citrix.com>
In-Reply-To: <20221116161421.237-1-rabish.kumar@citrix.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
authentication-results: dkim=none (message not signed)
 header.d=none;dmarc=none action=none header.from=citrix.com;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: MWHPR03MB2926:EE_|DS7PR03MB5382:EE_
x-ms-office365-filtering-correlation-id: a9cd9739-b20e-4732-21e4-08dac88802c1
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam: BCL:0;
x-microsoft-antispam-message-info:
 xTTTU5WrbZW/FE1JNHG5o8TG/Su6BC5ukbJlAjeUlxZJ0UkDUAZIS5hqPHkmV6KU55RUMMec6tzweARPyGo2X3niHATFFboCUzrEKr7NUxGa35bnLCTChYr8SWmTPBUaC2/xc16sOtpz63TWwbYfA4E1SCB9egbBCZKKdcyOEOwOyKxWaI+thpnwVctrO/1LooBwxoid/aBcOIFypuh/NxXeguZzQ9HfTWMubiFPYtTwoDfdnVZI83XyUQM7FOIExafTWQ2vDz7L27EnjuBghv9c/+kUvdjPDkzLoH7fmuGWDVEX6d9jA8mPKLEd0odjzx7qTUAgZ/f8LXlSVn1BbLJtbIzEYKxhP6Wru2nlf9QRbKZki8eW5eCjp4Yz8/avRcmGd5dCHKoWuYaxXyyJS7Wck3EyJl5TLi+HBI1kPsdzwEQdHahbq/e1dEvovw6yxF1ZNN45i0RjNpdkTwMEtrfiIbn9SIWbVnZwTCxXGp58wxPKnpctqKPBagTEJB/G4Rba/hofkKDSCrYOlgDTJnzrYes28aaMVYeetOmpOKk3iIqD+vhu+WEfvhM6zkpTQibY+ySZacgBhdwHMayqRgPzsICsD03nlD4PdRMEChfzr0UakjSPetLexeCJl4hinTnqSyBcOhSG4KuVcgADJYrqPjJOiGPRajS1ryF7Z9QseJ/Fcpj7WDgi6niLIsxspTWEFWW8ORA3K7k66FMWXQ==
x-forefront-antispam-report:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MWHPR03MB2926.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(39860400002)(396003)(346002)(136003)(366004)(376002)(451199015)(83380400001)(86362001)(33656002)(38100700002)(82960400001)(122000001)(38070700005)(478600001)(71200400001)(7696005)(53546011)(6506007)(52536014)(55016003)(107886003)(8676002)(4326008)(66946007)(66556008)(66476007)(64756008)(76116006)(66446008)(110136005)(316002)(41300700001)(186003)(26005)(9686003)(4744005)(44832011)(5660300002)(8936002)(2906002);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?us-ascii?Q?WapBcf5s/zYO6Qyu3imgCAVc4+VLP/DDADFzFk9dWT+JHtP/XINydNlDV0u0?=
 =?us-ascii?Q?WKOVzjk93khaS/voyHVBrRcDXFi2cL/cL7rS/+oSLabkI01PIDFUL8yuIbwA?=
 =?us-ascii?Q?FBcFmlIhhoPoM1xZq9LxYm5cQsZzyGhnIsMGGF4NUndY/l/5iHYrUHojXIEX?=
 =?us-ascii?Q?w7bk2smEsbIrNLqTLKSTObbJJujjbqwrvDHnSiFFkhvVThqHLH61pm+pEXFN?=
 =?us-ascii?Q?BDBmpbAC1CKydcpj8clwlwSmkqzOIIqeWRPEgSpCkkOh2gbQf3kTRaozIv70?=
 =?us-ascii?Q?VQOuHhyYxtMN0muaNmZgs1NX4ZekE6yTlpVYyQopawnOfA+JiZWwERqIPN3A?=
 =?us-ascii?Q?sxYVsVzJhPZaMxC3qVEkhiZyptRWQCt29w3VknXy5y0davWxKIqM9nrt3shK?=
 =?us-ascii?Q?EoFhSZqKvh6LHgrZs3wJhIGYRA1lb+xp0oajTMR6NKWAKWMqVtqEgcC3uNI1?=
 =?us-ascii?Q?zn5PtZp+JOX6DvuajuilHhh6fp5hFc9jMV5vSgj5UqVN894AIAGoODQ4kh1a?=
 =?us-ascii?Q?+TcIuIoFUqjMkhv9WJuUL5IzqYZl2VupSn+bUESrSslSO1NJgGBO1Io9kM+T?=
 =?us-ascii?Q?/yHeWuSx8xh+RYq3xMTW/WHAzoZScq3VUv486fou2VkQsxZwszmRskbYJ6gt?=
 =?us-ascii?Q?jeycOJJZciWdG01U8ElxwYss5mvxVPelIgG8h59rs0p1Z1cveYRLmrxWJj3S?=
 =?us-ascii?Q?RXhMvPVAQL7AeYT2g91C43cl0OErV7vPJ3RERzTAxpNv/DuFD36oaUo6JvQF?=
 =?us-ascii?Q?HA+M0+r9IIhnAyJQL/cG5uQ9YzBZNojfsogHlAuiyGq9LCvhsnB7OtXufx59?=
 =?us-ascii?Q?QE7+uQEt5MES5UnLBjP3qaO73fT6UVFldWHclKN90rKZdTefCmkrMirK0oK7?=
 =?us-ascii?Q?J/E0jnDAtTWzUNY2HSrTzDo4wQcWPrvYJkUW+QlUn+vC2q/45w1/qflqeS34?=
 =?us-ascii?Q?hKGBO3Yk+MLfv1WZANYuoPxJ3S26RS59AvEAmAR5akHLr+kbS8aTEcXKhb2t?=
 =?us-ascii?Q?d1aPNLQswzy60g1DjoF1vb3tVRnXYZ/ypP+00+MCPkLI/NVErcazIxssy49Q?=
 =?us-ascii?Q?SgLhXU/ltnx2qdzcWjaxIePuIlq9PwUfsvVgIrkSB0iwe7BFdD8UgRVsrUWx?=
 =?us-ascii?Q?wS2Pu5L9HlemUg8cut8/z8M6KBQLBP+WAQs1GlMWltK8a+q+bX749M0+JYW3?=
 =?us-ascii?Q?dK7+lDiX2K6iowrpFyQ7O4eumPaL4HsU+FrNf/j516NmOTjHkEAeeDgT8FbY?=
 =?us-ascii?Q?0hY59p6fObgSfIQMXOc2FSOwd70YFZ6ue/eDJREzbzCkEYtf/yDsDkuIVjns?=
 =?us-ascii?Q?MghElb+PQGsGl7jF4TLRDVT8SiaV9kfU0/9wjWHjnOnBKPnLo3vZ8ExRkJwJ?=
 =?us-ascii?Q?H5LdJkhlQXzzqL4hOFaKvETF5f3PGedvs9m9eDzmQCUkzgpBaTtc8/KgtLVu?=
 =?us-ascii?Q?+KVEuvKEfbCTmp6ACfcbJzZx38yEtp3d58TNzvAJKr/sNdiKjq0uUGIkF/CG?=
 =?us-ascii?Q?tNhLgj9X6GgR+5CouA3YhlIFMfNRWwT//W7hjZiAN76OeGuDBzI1LV2J7/he?=
 =?us-ascii?Q?sHl/DdiIcp0z+0idIJyUkTpAoYYUG/V3uTiKhpds?=
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0:
	hWEXg9QRUNDV9/gMOlI03uxBf7RL+J79ViUF9SVBXjVVjDY1EzzfZE5RL0XxVDNTWsf263BSfzWGzGj0xXiCATbkFRMenEv6XTH7ShS2GkBT6g8JmSlx9t9TFQEsXeU+pNtyr0NHfCbFqcwAB2Qt8T6YUz+dO7c+Rykr92I+1Pjys8OC96+BFKGgA1cA8T8rSASSzYaQ8vlK9qPZJUMzjEvf8Jb8hIBOxUzVRXHeaoHh4lhf2FhQ2KoS/qsomOyagJL9Sa0ZZ5WQDvTXuaO7xjUy4e7QQWTFBaUckr1ydbs/J7NlrqryPFS9CEPseQotsCbiHbjvYIygISlGCZDCZPSmFjUI5K0F210UzgKIewaAUBmB9wg1kJurtsB258bFRW1Lta+53slDCJ+BvuEPlOm37SCWY+vzXhe+1lR1t7jKfioOKG4vASbnMys5Glvxv/1Vov7l5qH6VRa5E8J6IFAhJivuAHQakbQlMIS39HvMJrqT1JtBCRfy2NbiyoNfPQvkLX62HNIL93LP7uwcXvdtbtZhQszByZ3GFZG0soXLD3uWUBkAQKXZ/UJLIxN25+JiiO9q/kElXgQhmmGeH/4bSTZlVZdbVT+EA27HWBlYLfCAEpKsU4Zk6a/1ADyTEUwlqG7jxWFt+hY7AygSkE8XP7++3c9UNFjrdYlr+2eTfK6w7FN6X62g81yjLzwVGknoAioAFQPD7nplXqMdtHH4gzmyi/TMDOVeetKW9lUd5SPDfVg8+mdwmSjnPZKj/QOpvgi7h7Vj+JGt1VRdErNRrio4SBnsDFNr5OPvZV0=
X-OriginatorOrg: citrix.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: MWHPR03MB2926.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: a9cd9739-b20e-4732-21e4-08dac88802c1
X-MS-Exchange-CrossTenant-originalarrivaltime: 17 Nov 2022 10:39:31.3040
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: 7ZOpMM5xf5qWtO68KiPKxUsdXRkw5WRWRSgMLqIGtYsLPS/zQ1vQAtc6I5YMFwePEAiCKwbKeYrhAsbefEJ+7w==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS7PR03MB5382

-----Original Message-----
From: win-pv-devel <win-pv-devel-bounces@lists.xenproject.org> On Behalf Of=
 Rabish Kumar (3P)
Sent: 16 November 2022 16:14
To: win-pv-devel@lists.xenproject.org
Cc: Rabish Kumar (3P) <Rabish.Kumar@citrix.com>
Subject: [PATCH] FdoCreate: bad memset in failure path.

[CAUTION - EXTERNAL EMAIL] DO NOT reply, click links, or open attachments u=
nless you have verified the sender and know the content is safe.

Signed-off-by: Rabish Kumar <rabish.kumar@citrix.com>


Fail14 attempts to clear the wrong interface - possibly leading to the ASSE=
RT at line 3249 asserting
Acked-by: Owen Smith <owen.smith@citrix.com>



---
 src/xenvif/fdo.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/xenvif/fdo.c b/src/xenvif/fdo.c index 8067e03..b684c7b 100=
644
--- a/src/xenvif/fdo.c
+++ b/src/xenvif/fdo.c
@@ -3173,8 +3173,8 @@ FdoCreate(
 fail14:
     Error("fail14\n");
=20
-    RtlZeroMemory(&Fdo->UnplugInterface,
-                  sizeof (XENBUS_UNPLUG_INTERFACE));
+    RtlZeroMemory(&Fdo->GnttabInterface,
+                  sizeof (XENBUS_GNTTAB_INTERFACE));
=20
 fail13:
     Error("fail13\n");
--
2.37.2.windows.2





From win-pv-devel-bounces@lists.xenproject.org Fri Nov 18 10:06:22 2022
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 18 Nov 2022 10:06:22 +0000
Received: from list by lists.xenproject.org with outflank-mailman.445527.700726 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ovyGK-00082k-CZ; Fri, 18 Nov 2022 10:06:20 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 445527.700726; Fri, 18 Nov 2022 10:06:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ovyGK-00082d-9u; Fri, 18 Nov 2022 10:06:20 +0000
Received: by outflank-mailman (input) for mailman id 445527;
 Fri, 18 Nov 2022 10:06:19 +0000
Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50]
 helo=se1-gles-flk1.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=cvkr=3S=citrix.com=prvs=314418f8a=owen.smith@srs-se1.protection.inumbo.net>)
 id 1ovyGJ-00082X-S5
 for win-pv-devel@lists.xenproject.org; Fri, 18 Nov 2022 10:06:19 +0000
Received: from esa2.hc3370-68.iphmx.com (esa2.hc3370-68.iphmx.com
 [216.71.145.153]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS
 id 9e4bddd9-6728-11ed-8fd2-01056ac49cbb;
 Fri, 18 Nov 2022 11:06:09 +0100 (CET)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/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: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 9e4bddd9-6728-11ed-8fd2-01056ac49cbb
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1668765978;
  h=from:to:cc:subject:date:message-id:mime-version:
   content-transfer-encoding;
  bh=p8QdFW4Mt2bSimvVIL7tqdWwYJIUQKBD0+KvgtXjukw=;
  b=cMKly2D5vvTXsYPSNigFEXG2UU1MopgSgRGC44sNQ3kLnyZPkTRfNYZZ
   0nNB92eN4nEFizmYEzHYUsb2vhUj4VgnhkigcVbtM2Z9W/tljPz2DF5VP
   JYzqn5I2c3znSCXZTNF5AxVYA2PVC1/ZQecm1zUCVxsUqr2bmPFclFLun
   0=;
Authentication-Results: esa2.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
X-SBRS: None
X-MesageID: 85121708
X-Ironport-Server: esa2.hc3370-68.iphmx.com
X-Remote-IP: 162.221.156.83
X-Policy: $RELAYED
IronPort-Data: A9a23:TCprIKNGI9fUtIPvrR3/l8FynXyQoLVcMsEvi/4bfWQNrUoq1DcEy
 WtJXz+HPfzbZjD9edxxYdi/oR8CvZfRzdNjTAto+SlhQUwRpJueD7x1DKtS0wC6dZSfER09v
 63yTvGacajYm1eF/k/F3oDJ9CU6jufQA+KmU4YoAwgpLSd8UiAtlBl/rOAwh49skLCRDhiE/
 Nj/uKUzAnf8s9JPGj9SuvzrRC9H5qyo4mpB5wxmPJingXeF/5UrJMNHTU2OByOQrrl8RoaSW
 +vFxbelyWLVlz9F5gSNy+uTnuUiG9Y+DCDW4pZkc/HKbitq/0Te5p0TJvsEAXq7vh3S9zxHJ
 HehgrTrIeshFvWkdO3wyHC0GQkmVUFN0OevzXRSLaV/ZqAJGpfh66wGMa04AWEX0utTWjhh0
 fMAEREyRQ7ZmPy4mej4a9A506zPLOGzVG8eknRpzDWfBvc6W5HTBa7N4Le03h9p2JoIR6yHI
 ZNEN3w/N3wsYDUWUrsTIJUhkeHunXz+bz1wo1OJv6snpWPUyWSd1ZC9bYOPI4PSFa25mG6/h
 ULg7UP8IioiF9uhmDGu/V2M37TQyHaTtIU6S+Tjq68CbEeo7nMSDlgOSx63rOe0jma6WslDM
 AoE9yw2t68w+Ue3CN7nUHWFTGWs50BGHYAKSqtjtV/LmvG8Dxul6nYsQxoaMfMCu9cPZAMBy
 AWWgd2wX39OiejAIZ6CzYu8oTS3MCkTCGYNYy4YUAcIi+XeTJEPYgHnFYg6TvPs5jHhMXSpm
 m3R8nBi71kGpZRTv5hX62wrlN5FSnLhagcurjvaUWu+hu+STN70Ptf4gbQ3ABspEWp4crVjl
 CJa8yR9xLpUZX1oqMBqaLtlIV1Rz6zZWAAweHY2d3Thnhz0k5JZQahe4StlOGBiOdsedDnib
 Sf74F0PtMAJYSb3N/EuO+pd7vjGK4C6TbwJsdiNP7JzjmVZLlfbrEmCm2bPt4wSrKTcuf5mY
 srKGSpdJX0bFb5m3FKLqxQ1iNcWK+FX7T27eK0XODz8jOvCNCDPFOZt3ZnnRrlR0Z5oaT79q
 753X/ZmAT0GOAEiSkE7KbIuEG0=
IronPort-HdrOrdr: A9a23:0/DZUan5KSO7l2pUBI0/5BnVbwzpDfIg3DAbv31ZSRFFG/Fxl6
 iV8sjzsiWE7Ar5OUtQ/+xoV5PhfZqxz/JICOoqTNKftWvdyQiVxehZhOOIqVDd8kXFh4lgPM
 xbEpSWZueeMbEDt7eZ3DWF
X-IronPort-AV: E=Sophos;i="5.96,173,1665460800"; 
   d="scan'208";a="85121708"
From: Owen Smith <owen.smith@citrix.com>
To: <win-pv-devel@lists.xenproject.org>
CC: Owen Smith <owen.smith@citrix.com>
Subject: [PATCH] Pass SignMode to MSBuild
Date: Fri, 18 Nov 2022 10:06:10 +0000
Message-ID: <20221118100610.1050-1-owen.smith@citrix.com>
X-Mailer: git-send-email 2.32.0.windows.1
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain

Allows overriding of SignMode to "Off" to prevent signing binaries with the PFX
file. This is useful if wrapper builds sign binaries with alternative signatures
or when signing is not required.

Signed-off-by: Owen Smith <owen.smith@citrix.com>
---
 build.ps1                      | 10 +++++++---
 msbuild.ps1                    |  5 ++++-
 vs2019/package/package.vcxproj | 12 +++++++++---
 vs2022/package/package.vcxproj | 12 +++++++++---
 4 files changed, 29 insertions(+), 10 deletions(-)

diff --git a/build.ps1 b/build.ps1
index 88d57a6..08b9715 100644
--- a/build.ps1
+++ b/build.ps1
@@ -6,6 +6,7 @@ param(
 	[Parameter(Mandatory = $true)]
 	[string]$Type,
 	[string]$Arch,
+	[string]$SignMode = "TestSign",
 	[switch]$CodeQL,
 	[switch]$Sdv
 )
@@ -28,7 +29,8 @@ Function Build {
 		SolutionDir = $solutiondir[$visualstudioversion];
 		ConfigurationBase = $configurationbase[$visualstudioversion];
 		Arch = $Arch;
-		Type = $Type
+		Type = $Type;
+		SignMode = $SignMode
 		}
 	& ".\msbuild.ps1" @params
 	if ($LASTEXITCODE -ne 0) {
@@ -47,7 +49,8 @@ Function SdvBuild {
 		SolutionDir = $solutiondir[$visualstudioversion];
 		ConfigurationBase = $configurationbase[$visualstudioversion];
 		Arch = $arch;
-		Type = "sdv"
+		Type = "sdv";
+		SignMode = $SignMode
 		}
 	& ".\msbuild.ps1" @params
 }
@@ -62,7 +65,8 @@ function CodeQLBuild {
 		SolutionDir = $solutiondir[$visualstudioversion];
 		ConfigurationBase = $configurationbase[$visualstudioversion];
 		Arch = $arch;
-		Type = "codeql"
+		Type = "codeql";
+		SignMode = $SignMode
 		}
 	& ".\msbuild.ps1" @params
 }
diff --git a/msbuild.ps1 b/msbuild.ps1
index 846abd2..1ec8508 100644
--- a/msbuild.ps1
+++ b/msbuild.ps1
@@ -7,7 +7,8 @@ param(
 	[Parameter(Mandatory = $true)]
 	[string]$Arch,
 	[Parameter(Mandatory = $true)]
-	[string]$Type
+	[string]$Type,
+	[string]$SignMode = "TestSign"
 )
 
 Function Run-MSBuild {
@@ -25,6 +26,7 @@ Function Run-MSBuild {
 	$c += " /m:4"
 	$c += [string]::Format(" /p:Configuration=""{0}""", $Configuration)
 	$c += [string]::Format(" /p:Platform=""{0}""", $Platform)
+	$c += [string]::Format(" /p:SignMode=""{0}""", $SignMode)
 	$c += [string]::Format(" /t:""{0}"" ", $Target)
 	if ($Inputs) {
 		$c += [string]::Format(" /p:Inputs=""{0}"" ", $Inputs)
@@ -99,6 +101,7 @@ Function Run-CodeQL {
 	$a += " /t:Build"
 	$a += [string]::Format(" /p:Configuration=""{0}""", $Configuration)
 	$a += [string]::Format(" /p:Platform=""{0}""", $Platform)
+	$a += [string]::Format(" /p:SignMode=""{0}""", $SignMode)
 	$a += " "
 	$a += Join-Path $projpath $project
 	$a | Set-Content $bat
diff --git a/vs2019/package/package.vcxproj b/vs2019/package/package.vcxproj
index 00af1a3..f1e0919 100644
--- a/vs2019/package/package.vcxproj
+++ b/vs2019/package/package.vcxproj
@@ -70,10 +70,16 @@
   <ItemGroup>
     <PackageFiles Include="$(OutDir)\$(ProjectName)\*" />
   </ItemGroup>
-  <Target Name="Archive" AfterTargets="TestSign">
+  <Target Name="ArchiveUnsigned" AfterTargets="Inf2Cat" Condition="('$(SignMode)' != 'TestSign') AND ('$(SignMode)' != 'ProductionSign')">
     <Copy
-	SourceFiles="@(PackageFiles)"
-	DestinationFiles="@(PackageFiles->'$(ArchiveDir)\%(FileName)%(Extension)')"
+        SourceFiles="@(PackageFiles)"
+        DestinationFiles="@(PackageFiles->'$(ArchiveDir)\%(FileName)%(Extension)')"
+    />
+  </Target>
+  <Target Name="ArchiveSigned" AfterTargets="TestSign;ProductionSign" Condition="('$(SignMode)' == 'TestSign' or '$(SignMode)' == 'ProductionSign')">
+    <Copy
+        SourceFiles="@(PackageFiles)"
+        DestinationFiles="@(PackageFiles->'$(ArchiveDir)\%(FileName)%(Extension)')"
     />
   </Target>
 </Project>
diff --git a/vs2022/package/package.vcxproj b/vs2022/package/package.vcxproj
index 00af1a3..f1e0919 100644
--- a/vs2022/package/package.vcxproj
+++ b/vs2022/package/package.vcxproj
@@ -70,10 +70,16 @@
   <ItemGroup>
     <PackageFiles Include="$(OutDir)\$(ProjectName)\*" />
   </ItemGroup>
-  <Target Name="Archive" AfterTargets="TestSign">
+  <Target Name="ArchiveUnsigned" AfterTargets="Inf2Cat" Condition="('$(SignMode)' != 'TestSign') AND ('$(SignMode)' != 'ProductionSign')">
     <Copy
-	SourceFiles="@(PackageFiles)"
-	DestinationFiles="@(PackageFiles->'$(ArchiveDir)\%(FileName)%(Extension)')"
+        SourceFiles="@(PackageFiles)"
+        DestinationFiles="@(PackageFiles->'$(ArchiveDir)\%(FileName)%(Extension)')"
+    />
+  </Target>
+  <Target Name="ArchiveSigned" AfterTargets="TestSign;ProductionSign" Condition="('$(SignMode)' == 'TestSign' or '$(SignMode)' == 'ProductionSign')">
+    <Copy
+        SourceFiles="@(PackageFiles)"
+        DestinationFiles="@(PackageFiles->'$(ArchiveDir)\%(FileName)%(Extension)')"
     />
   </Target>
 </Project>
-- 
2.32.0.windows.1



From win-pv-devel-bounces@lists.xenproject.org Wed Nov 23 15:09:26 2022
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 23 Nov 2022 15:09:26 +0000
Received: from list by lists.xenproject.org with outflank-mailman.447616.704048 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1oxrNL-00030G-El; Wed, 23 Nov 2022 15:09:23 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 447616.704048; Wed, 23 Nov 2022 15:09:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1oxrNL-000309-Bv; Wed, 23 Nov 2022 15:09:23 +0000
Received: by outflank-mailman (input) for mailman id 447616;
 Wed, 23 Nov 2022 15:09:22 +0000
Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50]
 helo=se1-gles-flk1.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=p9hv=3X=citrix.com=prvs=3195fe8df=martin.harvey@srs-se1.protection.inumbo.net>)
 id 1oxrNK-000303-9W
 for win-pv-devel@lists.xenproject.org; Wed, 23 Nov 2022 15:09:22 +0000
Received: from esa5.hc3370-68.iphmx.com (esa5.hc3370-68.iphmx.com
 [216.71.155.168]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS
 id cc3530da-6b40-11ed-8fd2-01056ac49cbb;
 Wed, 23 Nov 2022 16:09:19 +0100 (CET)
Received: from mail-co1nam11lp2174.outbound.protection.outlook.com (HELO
 NAM11-CO1-obe.outbound.protection.outlook.com) ([104.47.56.174])
 by ob1.hc3370-68.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256;
 23 Nov 2022 10:09:16 -0500
Received: from MW4PR03MB6347.namprd03.prod.outlook.com (2603:10b6:303:11e::22)
 by BY5PR03MB5251.namprd03.prod.outlook.com (2603:10b6:a03:22b::20)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5834.15; Wed, 23 Nov
 2022 15:09:14 +0000
Received: from MW4PR03MB6347.namprd03.prod.outlook.com
 ([fe80::8462:fe5c:6c46:6e9e]) by MW4PR03MB6347.namprd03.prod.outlook.com
 ([fe80::8462:fe5c:6c46:6e9e%9]) with mapi id 15.20.5834.015; Wed, 23 Nov 2022
 15:09:14 +0000
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/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: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: cc3530da-6b40-11ed-8fd2-01056ac49cbb
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
  d=citrix.com; s=securemail; t=1669216160;
  h=from:to:subject:date:message-id:references:in-reply-to:
   mime-version;
  bh=4ks810H5gmqKfkulOOVO/kw30ZnG+nBvCJ5hfpujdbA=;
  b=TlLQIL9udveLb2Zqsjz6saNrnZ+Et9KWAVMRSLhx3C9aax3KBCIpb5bo
   FciLadluKWu+mdeQKxru4LkKAn1VrKHohYtCrO3q2EgfRePmdxkXoDyjg
   oxOz6a3Re2VcXFNxeDOuCZ8DY9G9YF6U5n/yCVuNyHozXFW02KU2SfV6c
   U=;
X-IronPort-RemoteIP: 104.47.56.174
X-IronPort-MID: 84479028
X-IronPort-Reputation: None
X-IronPort-Listener: OutboundMail
X-IronPort-SenderGroup: RELAY_O365
X-IronPort-MailFlowPolicy: $RELAYED
IronPort-Data: A9a23:Xm1OGKqpFpuO5ttD3iXlbvEK6PxeBmIXZBIvgKrLsJaIsI4StFCzt
 garIBnXbquCYTDzKo0nPI+19x9Xv5fWmtU1SQdl/C1mRX4Sp5uZCYyVIHmrMnLJJKUvbq7FA
 +Y2MYCccZ9uHhcwgj/3b9ANeFEljfngqoLUUbKCYWYpAFc+E0/NsDo788YhmIlknNOlNA2Ev
 NL2sqX3NUSsnjV5KQr40YrawP9UlKm06W1wUmAWP6gR5gaHzSJNVvrzGInqR5fGatgMdgKFb
 76rIIGRpgvx4xorA9W5pbf3GmVirmn6ZFXmZtJ+AsBOszAazsAA+v9T2Mk0MC+7vw6hjdFpo
 OihgLTrIesf0g8gr8xGO/VQO3kW0aSrY9YrK1Dn2SCY5xWun3cBX5yCpaz5VGEV0r8fPI1Ay
 RAXACAxSEmB2PyN+ZD4Z7lRtp8yKsr5YJxK7xmMzRmBZRonabbqZvyToPR/hXI3jM0IGuvCb
 c0EbzYpdA7HfxBEJlYQDtQ5gfusgX78NTZfrTp5p4JuuzSVkFM3jearaYWJEjCJbZw9ckKwo
 2vc42X/RBETLsKS2BKO8262h/+JliT+MG4XPO3kqqE72AfDroAVIC8PCXeHisCXs0G3Q+IBA
 k0J1BAtn4FnoSRHSfG4BXVUukWsoR8aHsJOVuE39gyJ4q7V+BqCQHgJSCZbb94rv9NwQiYlv
 mJlhPvsDD1r9baSEHSU8+7NqSvoYHdJa2gfeSUDUA0JpcH5p50+hQ7OSdAlF7OpitryGnf7x
 DXiQDUCuoj/RPUjj82TlW0rSRr3znQVZmbZPjnqY18=
IronPort-HdrOrdr: A9a23:wMGtvaFytvisKbRNpLqF5ZLXdLJyesId70hD6qkvc3Fom52j/f
 xGws5x6fatskdoZJhSo6H6BEDgewKVyXcR2+Us1NiZLW3bUQeTTb2KqLGSugEIeBeOvdK1t5
 0QFJSWYeeYZTcVsS+52njfLz9K+qjlzEncv5a6854bd3AJV0gP1WdEIzfeNnczaBhNBJI/Gp
 bZzs1bpwC4cXBSQtWnCmIDV+3jocSOsJ79exYJCzMu9QHL1FqTmfPHOind+i1bfyJEwL8k/2
 SAuwvl5p+7u/X+5g7A23TV55F2nsKk7tdYHsSDhuUcNz2poAe1Y4ZKXaGEoVkO0auSwWdvtO
 OJjwYrPsx15X+UVHqyuwHR1w7p1ytrw2P+yHeD6EGT7vDRdXYfMY5slIhZehzW5w4Lp9dnyp
 9G2Gqfqt5+EQ7ApiLg/NLFPisa2HZc4EBS0NL7vUYvErf2W4Uh77D3O3klVavoKRiKqLzP1t
 MeSP00qswmNm9yJEqpxFWHiObcI0jbWC32DnTq8/blrwR+jTR3yVAVy9cYmWpF/JUhS4Nc7+
 CBKahwkqpSJ/VmGp6VKd1xNPdfMFa9NS7kISaXOxDqBasHM3XCp9r+56g0/vijfNgNwIEpkJ
 rMXVtEvSpqEnieQPGmzdlO6FTAUW+9VTPixoVX4IV4oKT1QP7uPTeYQF4jnsO8q7EUA9HdWf
 y0JJVKasWTW1fGCMJMxUnzSpNSIX4RXIkcvcs6QUuHpobRJojjpoXgAYTuzXrWYEUZs0/Ecw
 o+tWLIVbp9B2iQKwHFqQmUXW/xcUri+p81GLTG/oEoufgwCrE=
X-IronPort-AV: E=Sophos;i="5.96,187,1665460800"; 
   d="scan'208,217";a="84479028"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=dTKwPmn3nnCY9Mmy1X+n4EobST3Jlo3o1IZ3p/Q+ZUchUca75S6tA2jjh9tdF94tl8ctta3vSINbRVCQquxEC98jI8fvquvAdqPZ9Ju7gEx2JWSrgfAh9HbhpvO0vZ2QXtpdGZZ5eFGhUwy4U1VvQ3wWq3JtxU87AxZpK1uyXiRwscRieT+uELyAzm/PdwezxAU8DsCWHztuKLj+X/tMMZwxYSHrpaNlBoSTRysQMjGJaSdSHONiCVfGOuVjUaJvDcRnsgDJlCUMF0ABhWjK0SHIYltx4IYaZyso8l0tWXEfcZ3aIO8E2HlHU9N7bx2omnS313G64JCBPywRPqIoBw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=obgpPNUrRz5wyXCURbdAKw8nMuz3ng2Cd4Jb+t/7yS0=;
 b=mZYIetdDBwulNHt3X2PsvpgVzdEbx7kIi2JLdAT+r8BgcObzHT5EiTr29RXzFp5d6pYOxg18e8T4dKfdnNYYceD2dRynJUam7h1RVCGO0ZNpces9BgtkbFO7BMCmNrriFCoJwK8JIWqzxH+JNrST1JtGdYZZK7fL9MhjTBrjvXttRf1Nlh4F/brHEm6q1OvRVdbJkOlH5klbNle1LAN2/qeEzUaIfQavhuacWhyTX/bYZfGFKuaqyduj09wt3mcktKbPR1rZaQOcimzyUG1RKJXb/GhLwK/5k2PUngL1/kReykyl8pk3Hv7C2/SvWpKnDvvFRi+C178gzUPZ9+y+pw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=obgpPNUrRz5wyXCURbdAKw8nMuz3ng2Cd4Jb+t/7yS0=;
 b=eYfBAlBQlk7Gyf01FaJlLesThUROGD+22bbUG22jr6GD11og2SJ9CoYca3qAc7v9xtoFkg6DkeOvUB5fsN30OpwRZaT6hGbY+ZKskiPfO0YnmDG+FcHHTonJFs28vrb54MCqG9qPKoTXcwKKOQ0yLd4/5osxZE+bySfbdiTZOWY=
From: Martin Harvey <martin.harvey@citrix.com>
To: Martin Harvey <martin.harvey@citrix.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Subject: RE: Power rewrite has uncovered 3 outstanding issues in master.
Thread-Topic: Power rewrite has uncovered 3 outstanding issues in master.
Thread-Index: Adj1IOMcKQefDxr/QVWwL9wSbdnjlgKLHdrA
Date: Wed, 23 Nov 2022 15:09:14 +0000
Message-ID:
 <MW4PR03MB634768CD475A23CEA43E82969A0C9@MW4PR03MB6347.namprd03.prod.outlook.com>
References:
 <MW4PR03MB63478A1F6E1E0215C265FA5E9A019@MW4PR03MB6347.namprd03.prod.outlook.com>
In-Reply-To:
 <MW4PR03MB63478A1F6E1E0215C265FA5E9A019@MW4PR03MB6347.namprd03.prod.outlook.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
authentication-results: dkim=none (message not signed)
 header.d=none;dmarc=none action=none header.from=citrix.com;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: MW4PR03MB6347:EE_|BY5PR03MB5251:EE_
x-ms-office365-filtering-correlation-id: 607cbef2-396a-4165-70cb-08dacd64af3b
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam: BCL:0;
x-microsoft-antispam-message-info:
 5FRRfVpTLurCoNZ/IJvj2cRCgFvGMUfgR+BbiMZ5Gb6SN51YSMuI/b9ZDoBILUG4g5MMEosxSeNNYr0f8dsYBARGBBt5xYZCgfMsq0Z55a5Oem9CH/rMTw28up3IKZuruiFTMGX4qPqisvgM7mmHQeb6gP/set6i7LR8RQJVsq/H5a8CHIFvHvKWgm90jGWCR7k/F9T0p/3zCZAduQ5qZIKLWdrLG7uU0xJScBZtq2h99uYly36zEhfpVz1kule9KD9yAo5Eore4CxVvUPCqKTld4SYBospAlvzDAn/Z43zuLGy7BNaKaB+Fz9CEK1IweLy3PX+HG9X0kIUe2x2I3dZxZXC9mMuIaYeP4+rvsXMPVjqzlRbDw5nPjVhG4wYvUjPBj+/oArc11rRGahubSnEUK59YPFdi/nVvB9sSUvCEnAyGkOnCBTLLp17ooI7wc2lhh/SByU96NHlShREeL845dlYaGYXnE37J5qgZOUj/KfbExC3SBBYqwpW5/cqe5+YUelrdLCowGVQ7yhRMopEydwSktfhHEzWPTbg1UZDZy0ZlYay2gcHQF/NXd8z2Z3y4rK5HiADUC3jXjNc1Z0GcxqREggGUlK+AmkRHn3wI19ZpQt4sDcoeSeWNbBjIamD10Lz2UDpgWWcQiXOK5masQr5HLoLnNZWXRyQfQhtLBi/GObSWpu63KZhFbAbXt11Zg+635F8kIQakH6GtPw==
x-forefront-antispam-report:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MW4PR03MB6347.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(39860400002)(376002)(136003)(366004)(396003)(346002)(451199015)(71200400001)(478600001)(66446008)(64756008)(66476007)(8676002)(76116006)(66556008)(110136005)(186003)(9686003)(26005)(41300700001)(52536014)(8936002)(44832011)(5660300002)(33656002)(7696005)(316002)(6506007)(2906002)(82960400001)(55016003)(38070700005)(86362001)(558084003)(66946007)(122000001)(38100700002);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?us-ascii?Q?4Zi0fxb5HYI2eOzh8Lk8GvZpZwrr9v/nhJTJCFzwrZX0Qsertpp6AUW8X7w7?=
 =?us-ascii?Q?5QvSBBDsewhIoP19bo357+l6nOLMS+lbP6pwmoCL7h3RmV0Cr8FxKrX/ucL1?=
 =?us-ascii?Q?Dz5x9klBGnHMZSYoZwL5vOmiUNYGjjeZWl5zZPkM7A5s6bmC53sApWt9XHOp?=
 =?us-ascii?Q?eNHQwERbwzBQB4ks8VX8iMWgnBaSjR/B66sDdylyL9J9PtwnyD28c/Vk16uF?=
 =?us-ascii?Q?QcZgcp/5o4nQFwmsfRtfSz0iXZDZaxrSsrgzM7L7iTiddsN+LDngmGtEpAg0?=
 =?us-ascii?Q?+SeY8f+IFiKlOvnwdEzL50MNHig9aVAotXze9GobO9WaGeTUg+b+0poTN/K/?=
 =?us-ascii?Q?Ec9RDirjPFAFuM9xx3XHEc2/xtYVVRoAHd3hvP+vc+yfAPGIA/9ypmYf98zY?=
 =?us-ascii?Q?/s03XNmYSA1yev18mlxsAXtc28siwgvXXM0zbldXlSGm6osVrgm30k0rgEcM?=
 =?us-ascii?Q?SODmjOo7x4IzHqWBriidEoXdiapCW1Emj0GS63y51R8x5JybFFT6Cm0s3s5C?=
 =?us-ascii?Q?a4qyUt1Ydqe7ATsGKbvjIkPHSypnUz2vY6D0SleeedEZqc+0VjLcmfKfYpRF?=
 =?us-ascii?Q?vcru56YhLhlWZSdzaZHJ3wRnlgg6cw78Xd1OAZqGfRkpqG6bQZ8tQ8QTdcVk?=
 =?us-ascii?Q?LV1+eE42mvArTQVqtZLGEvPh1sijaOhv0jdbGC5xLpwuCp2XMtYPak6ckMXy?=
 =?us-ascii?Q?r1619hPERO5q1PsoGhZx+bdqW3GAiJCfHBS1ceV2SNu0K6zu4LTGI8yzQWiG?=
 =?us-ascii?Q?awLjOkXCnaMXcLG9z8qARejG0dRY0B1lHKdEstct9wGvp8s5IpDuniu1X6Z4?=
 =?us-ascii?Q?8MaEzH3a7sRAybQEfIGNiSCmugOwBG9Bt50Ku9YHOrIRn0GLCxHqhhEPbaXX?=
 =?us-ascii?Q?oP+LBkpNDpKwcc1f26d0F66pMfa9SsS3I3XWAIV3JoRft9FmPXyFns6QCPSO?=
 =?us-ascii?Q?HOAmCkF/8BTZs5uytDnmM2CoqzIjGCduui/pNOZEnmNylkpk14U2YNxW0Shq?=
 =?us-ascii?Q?z9z15YZtecNzh5vx/+qomcOStrKvJ7YskfNdh7ZhzaPZinzRYwGY6NZ9TpRd?=
 =?us-ascii?Q?nybaqsGjTvqoJEU4gvIK6cYfKY22kCuDaE1bXzRBiCfCmbjllMv58BBaOm3n?=
 =?us-ascii?Q?Sw4BuKU4CkdxKiv91o/JQgNyK4796YRHNpF3OutbBSg4hXCq8+ZzVsUwgMJ2?=
 =?us-ascii?Q?F/YqEXYVRLEXlTEuGVRcajjlhHtvkWyjxDnURPUXFOjmrjv0ywcpO8am8fOT?=
 =?us-ascii?Q?qE/KDJQ/NMh0MU+SVtt13CBvsNEKF1TZj714vBGnTLgFTTv9T5f3h/xX6hHC?=
 =?us-ascii?Q?dVq/5UqenzDSl1OowSTLrCGS1+yZCYxmKz/MSfRb1U9gqOvU7UtXByOdpCU4?=
 =?us-ascii?Q?x1lHwnh5+ViB4cAkcY1hvsWnbA3nBjFhLYkk7R17EkN4s0yX9VPlaca38p5k?=
 =?us-ascii?Q?MmBHSmwdarcwDvOPnxx/SZnUiwWSy44HxkEygROv9gi/Jk3zJOg5FXqFugUC?=
 =?us-ascii?Q?ePjk9YhfGXwH6HqPGKagjgtXeNzQwbj5AWJxavjmId8oWXktsASP9VqhRysp?=
 =?us-ascii?Q?vRPzHl6RQr8YiNJZpaYoQCS5DVrJpkjkb+K60j0C?=
Content-Type: multipart/alternative;
	boundary="_000_MW4PR03MB634768CD475A23CEA43E82969A0C9MW4PR03MB6347namp_"
MIME-Version: 1.0
X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0:
	820jA25TsfSFMD5mZq11czzDNFqPIs470j0GlegG0l1hsEHiTiF2rGMkexD5/H56Ut40tONFA7QTB4p1gLN/0nJtVrGizMXPxgsLKNmBn0jOI9BErH7Q0jZmZFKUVQZZlChBh1xArV5uIVqrf0bfWGCUAM+yYvNilDzmX2D1FNlWcCcojtd91bTM9y1Qp8R1we2UO/S4PkM+EGssu/yhsNQnJOfg88eA78GkcuJ9DYfRpg6UHBMxc5AQ4vanZXUCWglkARSTitionqMidxfsdOwDdWvoUMp+LbeMfYQClKCn3tj0kyBFKdHrV7YzffoZyorxY8okqQ9npESWh0MefV+LyypGvUUI2ci8ubP4S/QwhGoL51pa5y9aiJERM6XpDkT8F8EdObqEMcZRL4q7gbY9I0bApeJ3/u/e5b3qiMB6NsL8dF29fUnsfL7PaU+xs77FmTI96JKmK0rDKm+ldwa2V+54dXXvlad6UmlLM9eF9XkUwJvhzXvBsMiU5p3rRlG4BcYB4fz42gIwyXIj5XG83H7HA/pVBjE5+fAmh28HpZJBgDjduYGJ8VGiNnU9wyfT+Ze246z91zJMhNvkHZzI547vLqM5szRDUIyPiV5AmUCLwN+cQR+OxhKOCdt7kqpOEKr+WCSgCsdPwZAiFJRaCn/OU1DgPRnP/YdMG0wD/yvb0Mu7MfgQBHzgWXJQ759mT6mfEA0XBw2YTfUMg4rrtNAR49r4f6TAW1lFg/xrVAETiwzsCA8eFwqyfBKfCupOGnBKBb7mDX5CpsQ6ew==
X-OriginatorOrg: citrix.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: MW4PR03MB6347.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 607cbef2-396a-4165-70cb-08dacd64af3b
X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Nov 2022 15:09:14.6366
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: DSaB0tgQLUWMA811ZDR1qhp03J74NOt6SkNkkw2mrTR9zAeQY7umGOyTEQOZIefNq52zkc8NSzoJ1NL50GCL9GfaZw81xEdgKqyBIol/+Xs=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR03MB5251

--_000_MW4PR03MB634768CD475A23CEA43E82969A0C9MW4PR03MB6347namp_
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

> PowerActionShutdown handling completes IRP's in FDO's where it should pas=
s them down.

My apologies - this is no longer an issue.

MH.

--_000_MW4PR03MB634768CD475A23CEA43E82969A0C9MW4PR03MB6347namp_
Content-Type: text/html; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<html xmlns:v=3D"urn:schemas-microsoft-com:vml" xmlns:o=3D"urn:schemas-micr=
osoft-com:office:office" xmlns:w=3D"urn:schemas-microsoft-com:office:word" =
xmlns:m=3D"http://schemas.microsoft.com/office/2004/12/omml" xmlns=3D"http:=
//www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dus-ascii"=
>
<meta name=3D"Generator" content=3D"Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
	{font-family:"Cambria Math";
	panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
	{font-family:DengXian;
	panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
	{font-family:"\@DengXian";
	panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{margin:0cm;
	font-size:11.0pt;
	font-family:"Calibri",sans-serif;}
span.EmailStyle20
	{mso-style-type:personal-reply;
	font-family:"Calibri",sans-serif;
	color:windowtext;}
.MsoChpDefault
	{mso-style-type:export-only;
	font-size:10.0pt;}
@page WordSection1
	{size:612.0pt 792.0pt;
	margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
	{page:WordSection1;}
/* List Definitions */
@list l0
	{mso-list-id:5063355;
	mso-list-template-ids:-2038108734;}
@list l0:level1
	{mso-level-tab-stop:36.0pt;
	mso-level-number-position:left;
	text-indent:-18.0pt;}
@list l0:level2
	{mso-level-tab-stop:72.0pt;
	mso-level-number-position:left;
	text-indent:-18.0pt;}
@list l0:level3
	{mso-level-tab-stop:108.0pt;
	mso-level-number-position:left;
	text-indent:-18.0pt;}
@list l0:level4
	{mso-level-tab-stop:144.0pt;
	mso-level-number-position:left;
	text-indent:-18.0pt;}
@list l0:level5
	{mso-level-tab-stop:180.0pt;
	mso-level-number-position:left;
	text-indent:-18.0pt;}
@list l0:level6
	{mso-level-tab-stop:216.0pt;
	mso-level-number-position:left;
	text-indent:-18.0pt;}
@list l0:level7
	{mso-level-tab-stop:252.0pt;
	mso-level-number-position:left;
	text-indent:-18.0pt;}
@list l0:level8
	{mso-level-tab-stop:288.0pt;
	mso-level-number-position:left;
	text-indent:-18.0pt;}
@list l0:level9
	{mso-level-tab-stop:324.0pt;
	mso-level-number-position:left;
	text-indent:-18.0pt;}
@list l1
	{mso-list-id:13654428;
	mso-list-type:hybrid;
	mso-list-template-ids:1907278008 134807567 134807577 134807579 134807567 1=
34807577 134807579 134807567 134807577 134807579;}
@list l1:level1
	{mso-level-tab-stop:none;
	mso-level-number-position:left;
	text-indent:-18.0pt;}
@list l1:level2
	{mso-level-number-format:alpha-lower;
	mso-level-tab-stop:none;
	mso-level-number-position:left;
	text-indent:-18.0pt;}
@list l1:level3
	{mso-level-number-format:roman-lower;
	mso-level-tab-stop:none;
	mso-level-number-position:right;
	text-indent:-9.0pt;}
@list l1:level4
	{mso-level-tab-stop:none;
	mso-level-number-position:left;
	text-indent:-18.0pt;}
@list l1:level5
	{mso-level-number-format:alpha-lower;
	mso-level-tab-stop:none;
	mso-level-number-position:left;
	text-indent:-18.0pt;}
@list l1:level6
	{mso-level-number-format:roman-lower;
	mso-level-tab-stop:none;
	mso-level-number-position:right;
	text-indent:-9.0pt;}
@list l1:level7
	{mso-level-tab-stop:none;
	mso-level-number-position:left;
	text-indent:-18.0pt;}
@list l1:level8
	{mso-level-number-format:alpha-lower;
	mso-level-tab-stop:none;
	mso-level-number-position:left;
	text-indent:-18.0pt;}
@list l1:level9
	{mso-level-number-format:roman-lower;
	mso-level-tab-stop:none;
	mso-level-number-position:right;
	text-indent:-9.0pt;}
ol
	{margin-bottom:0cm;}
ul
	{margin-bottom:0cm;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext=3D"edit" spidmax=3D"1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext=3D"edit">
<o:idmap v:ext=3D"edit" data=3D"1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang=3D"EN-GB" link=3D"#0563C1" vlink=3D"#954F72" style=3D"word-wrap:=
break-word">
<div class=3D"WordSection1">
<p class=3D"MsoNormal">&gt; PowerActionShutdown handling completes IRP&#821=
7;s in FDO&#8217;s where it should pass them down.<o:p></o:p></p>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<p class=3D"MsoNormal">My apologies &#8211; this is no longer an issue.<o:p=
></o:p></p>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<p class=3D"MsoNormal">MH.<o:p></o:p></p>
</div>
</body>
</html>

--_000_MW4PR03MB634768CD475A23CEA43E82969A0C9MW4PR03MB6347namp_--


From win-pv-devel-bounces@lists.xenproject.org Wed Nov 30 14:48:52 2022
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 30 Nov 2022 14:48:52 +0000
Received: from list by lists.xenproject.org with outflank-mailman.449918.706961 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1p0OOG-0003be-RM; Wed, 30 Nov 2022 14:48:48 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 449918.706961; Wed, 30 Nov 2022 14:48:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1p0OOG-0003bX-Om; Wed, 30 Nov 2022 14:48:48 +0000
Received: by outflank-mailman (input) for mailman id 449918;
 Wed, 30 Nov 2022 14:48:47 +0000
Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50]
 helo=se1-gles-flk1.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=NcZi=36=gmail.com=xadimgnik@srs-se1.protection.inumbo.net>)
 id 1p0OOF-0003bR-5U
 for win-pv-devel@lists.xenproject.org; Wed, 30 Nov 2022 14:48:47 +0000
Received: from mail-wr1-x433.google.com (mail-wr1-x433.google.com
 [2a00:1450:4864:20::433])
 by se1-gles-flk1.inumbo.com (Halon) with ESMTPS
 id 1078e534-70be-11ed-8fd2-01056ac49cbb;
 Wed, 30 Nov 2022 15:48:35 +0100 (CET)
Received: by mail-wr1-x433.google.com with SMTP id x17so27434343wrn.6
 for <win-pv-devel@lists.xenproject.org>; Wed, 30 Nov 2022 06:48:44 -0800 (PST)
Received: from [192.168.23.148] (54-240-197-233.amazon.com. [54.240.197.233])
 by smtp.gmail.com with ESMTPSA id
 p8-20020a05600c468800b003cfaae07f68sm6512546wmo.17.2022.11.30.06.48.44
 for <win-pv-devel@lists.xenproject.org>
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Wed, 30 Nov 2022 06:48:44 -0800 (PST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/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: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 1078e534-70be-11ed-8fd2-01056ac49cbb
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20210112;
        h=content-transfer-encoding:in-reply-to:organization:references:to
         :content-language:subject:user-agent:mime-version:date:message-id
         :from:from:to:cc:subject:date:message-id:reply-to;
        bh=/JYNU5EP2m6gQ3f0WpOIsdBRMJ07SCUMLq/bTgnubYU=;
        b=qfyvCFpQasAlY383oojPRRxLaIprxkdEYYMac9hleW0dCqrhXDiGllf71cMaev9rNQ
         8aTNbDtInpn6l3qwsxFUVSBJ3QpLU3bPmbo2TYhB5hVsyzMDaDhpFHXfXQ7NOYItrb1H
         MbPRG3Uq3gyC3UPKRRXvP7QhFhq7VbMxbh5iemWPiTf6/7AzefAWq0fRZnez84qpFp9+
         vp8olIa/pBRTykCSTh0a9VK44YKCUZG9j1JTMYEuFZAPtTZR7YUlVEWpWJa9kWMWB+Kv
         ow4kpEQ+RGlEauXmnc6Y47TekRQqYCV09U14JMvlfYxb4U4Q2FvCe0HQ9wjWF2QxUCe1
         FIqw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20210112;
        h=content-transfer-encoding:in-reply-to:organization:references:to
         :content-language:subject:user-agent:mime-version:date:message-id
         :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;
        bh=/JYNU5EP2m6gQ3f0WpOIsdBRMJ07SCUMLq/bTgnubYU=;
        b=xLb8vi8Z7Zq01w+K05TXetYBU/NESR3bGx8tkiGTI4qnPm6iOVKeut2+GKlqMD+7/6
         HJzwE5gKBudn4R7c997hF40x1XU7kKVeyKuTgLsijAC5wCeXcrJcuQ3jpak6nh+DY+v6
         iFxiVY37GM8dV24nA9zVBvBopNZA4Nn1BifLl2hRUaKJsxp/bQtZockyI3lb1hsS2cM0
         PrQXnFDE1RE5gFdwPyFCQGJwBQgR1PHXDgM/Uvci87M2QKwonHyiKo3mL8Vwu6/Ji2vW
         Guajm6IAr2In35pgJiP21swfl6ZWriVDdtEHmq7blJ2kpna4HqJa3cuHgtlrxBh9IJvU
         ozGA==
X-Gm-Message-State: ANoB5pmDUzwk3gapD8TAjDuTgPnTuxw4/gPt5c9UP0AEhXB1HpNMCPW4
	0Vxa9tYjV41K645tV9qasJxs0UiVW47FfQ==
X-Google-Smtp-Source: AA0mqf4uZIOyTPTUyNHWSO8GaJplZ9LxzYtbdm1Vs61ZGMDx4HVmYm/Qv1JfevGKAdq4+lO72apeHw==
X-Received: by 2002:a5d:5a93:0:b0:242:f1c:71ed with SMTP id bp19-20020a5d5a93000000b002420f1c71edmr12337426wrb.122.1669819724538;
        Wed, 30 Nov 2022 06:48:44 -0800 (PST)
From: Paul Durrant <xadimgnik@gmail.com>
X-Google-Original-From: Paul Durrant <paul@xen.org>
Message-ID: <e0dc8645-56fc-a434-6ffd-bfdc3c6098e8@xen.org>
Date: Wed, 30 Nov 2022 14:48:43 +0000
MIME-Version: 1.0
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101
 Thunderbird/102.5.0
Subject: Re: [PATCH] Pass SignMode to MSBuild
Content-Language: en-US
To: win-pv-devel@lists.xenproject.org
References: <20221118100610.1050-1-owen.smith@citrix.com>
Organization: Xen Project
In-Reply-To: <20221118100610.1050-1-owen.smith@citrix.com>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit

On 18/11/2022 10:06, Owen Smith wrote:
> Allows overriding of SignMode to "Off" to prevent signing binaries with the PFX
> file. This is useful if wrapper builds sign binaries with alternative signatures
> or when signing is not required.
> 
> Signed-off-by: Owen Smith <owen.smith@citrix.com>

Acked-by: Paul Durrant <paul@xen.org>

... although there seems to be some indent weirdnes, but it could be by 
MUA. I also assume this is equally applicable to all drivers.



