https://git.reactos.org/?p=reactos.git;a=commitdiff;h=2b9941e7cbdca2202871f…
commit 2b9941e7cbdca2202871f8a71c9564f81392a11f
Author:     Hervé Poussineau <hpoussin(a)reactos.org>
AuthorDate: Thu Jun 18 18:18:13 2020 +0200
Commit:     Hervé Poussineau <hpoussin(a)reactos.org>
CommitDate: Sat Jun 20 08:16:24 2020 +0200
    [PCI] Fix PDO removal
    We must not do anything on PDO removal, especially not deleting it.
    We are allowed to delete it, only once we successfully completed a
IRP_MN_QUERY_DEVICE_RELATIONS without with PDO.
---
 drivers/bus/pci/pdo.c | 25 +------------------------
 1 file changed, 1 insertion(+), 24 deletions(-)
diff --git a/drivers/bus/pci/pdo.c b/drivers/bus/pci/pdo.c
index 1d6b8c54ecf..139aed69439 100644
--- a/drivers/bus/pci/pdo.c
+++ b/drivers/bus/pci/pdo.c
@@ -1577,34 +1577,11 @@ PdoPnpControl(
         case IRP_MN_STOP_DEVICE:
         case IRP_MN_QUERY_REMOVE_DEVICE:
         case IRP_MN_CANCEL_REMOVE_DEVICE:
+        case IRP_MN_REMOVE_DEVICE:
         case IRP_MN_SURPRISE_REMOVAL:
             Status = STATUS_SUCCESS;
             break;
-        case IRP_MN_REMOVE_DEVICE:
-            {
-                PPDO_DEVICE_EXTENSION DeviceExtension = DeviceObject->DeviceExtension;
-                PFDO_DEVICE_EXTENSION FdoDeviceExtension =
DeviceExtension->Fdo->DeviceExtension;
-                KIRQL OldIrql;
-
-                /* Remove it from the device list */
-                KeAcquireSpinLock(&FdoDeviceExtension->DeviceListLock,
&OldIrql);
-                RemoveEntryList(&DeviceExtension->PciDevice->ListEntry);
-                FdoDeviceExtension->DeviceListCount--;
-                KeReleaseSpinLock(&FdoDeviceExtension->DeviceListLock, OldIrql);
-
-                /* Free the device */
-                ExFreePoolWithTag(DeviceExtension->PciDevice, TAG_PCI);
-
-                /* Complete the IRP */
-                Irp->IoStatus.Status = STATUS_SUCCESS;
-                IoCompleteRequest(Irp, IO_NO_INCREMENT);
-
-                /* Delete the DO */
-                IoDeleteDevice(DeviceObject);
-                return STATUS_SUCCESS;
-            }
-
         case IRP_MN_QUERY_INTERFACE:
             DPRINT("IRP_MN_QUERY_INTERFACE received\n");
             Status = PdoQueryInterface(DeviceObject, Irp, IrpSp);