[ros-diffs] [cgutman] 55827: [NTOSKRNL] - Reenable and fix the correct reset code [HIDCLASS] - Disable removal of PDOs due to IRP cancellation issues [USBEHCI][USBOHCI][USBUHCI] - Disable removal of FDOs due t...

cgutman at svn.reactos.org cgutman at svn.reactos.org
Thu Feb 23 01:23:30 UTC 2012


Author: cgutman
Date: Thu Feb 23 01:23:30 2012
New Revision: 55827

URL: http://svn.reactos.org/svn/reactos?rev=55827&view=rev
Log:
[NTOSKRNL]
- Reenable and fix the correct reset code
[HIDCLASS]
- Disable removal of PDOs due to IRP cancellation issues
[USBEHCI][USBOHCI][USBUHCI]
- Disable removal of FDOs due to reinitialization issues

Modified:
    trunk/reactos/drivers/hid/hidclass/pdo.c
    trunk/reactos/drivers/usb/usbehci/hcd_controller.cpp
    trunk/reactos/drivers/usb/usbohci/hcd_controller.cpp
    trunk/reactos/drivers/usb/usbuhci/hcd_controller.cpp
    trunk/reactos/ntoskrnl/io/pnpmgr/plugplay.c

Modified: trunk/reactos/drivers/hid/hidclass/pdo.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/hid/hidclass/pdo.c?rev=55827&r1=55826&r2=55827&view=diff
==============================================================================
--- trunk/reactos/drivers/hid/hidclass/pdo.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/hid/hidclass/pdo.c [iso-8859-1] Thu Feb 23 01:23:30 2012
@@ -580,7 +580,12 @@
             //
             // no/op
             //
+#if 0
             Status = STATUS_SUCCESS;
+#else
+            DPRINT1("Denying removal of HID device due to IRP cancellation bugs\n");
+            Status = STATUS_UNSUCCESSFUL;
+#endif
             break;
         }
         default:

Modified: trunk/reactos/drivers/usb/usbehci/hcd_controller.cpp
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbehci/hcd_controller.cpp?rev=55827&r1=55826&r2=55827&view=diff
==============================================================================
--- trunk/reactos/drivers/usb/usbehci/hcd_controller.cpp [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbehci/hcd_controller.cpp [iso-8859-1] Thu Feb 23 01:23:30 2012
@@ -537,6 +537,7 @@
         case IRP_MN_QUERY_REMOVE_DEVICE:
         case IRP_MN_QUERY_STOP_DEVICE:
         {
+#if 0
             //
             // sure
             //
@@ -547,6 +548,12 @@
             //
             IoSkipCurrentIrpStackLocation(Irp);
             return IoCallDriver(m_NextDeviceObject, Irp);
+#else
+            DPRINT1("Denying controller removal due to reinitialization bugs\n");
+            Irp->IoStatus.Status = STATUS_UNSUCCESSFUL;
+            IoCompleteRequest(Irp, IO_NO_INCREMENT);
+            return STATUS_UNSUCCESSFUL;
+#endif
         }
         case IRP_MN_REMOVE_DEVICE:
         {

Modified: trunk/reactos/drivers/usb/usbohci/hcd_controller.cpp
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbohci/hcd_controller.cpp?rev=55827&r1=55826&r2=55827&view=diff
==============================================================================
--- trunk/reactos/drivers/usb/usbohci/hcd_controller.cpp [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbohci/hcd_controller.cpp [iso-8859-1] Thu Feb 23 01:23:30 2012
@@ -537,6 +537,7 @@
         case IRP_MN_QUERY_REMOVE_DEVICE:
         case IRP_MN_QUERY_STOP_DEVICE:
         {
+#if 0
             //
             // sure
             //
@@ -547,6 +548,12 @@
             //
             IoSkipCurrentIrpStackLocation(Irp);
             return IoCallDriver(m_NextDeviceObject, Irp);
+#else
+            DPRINT1("Denying controller removal due to reinitialization bugs\n");
+            Irp->IoStatus.Status = STATUS_UNSUCCESSFUL;
+            IoCompleteRequest(Irp, IO_NO_INCREMENT);
+            return STATUS_UNSUCCESSFUL;
+#endif
         }
         case IRP_MN_REMOVE_DEVICE:
         {

Modified: trunk/reactos/drivers/usb/usbuhci/hcd_controller.cpp
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbuhci/hcd_controller.cpp?rev=55827&r1=55826&r2=55827&view=diff
==============================================================================
--- trunk/reactos/drivers/usb/usbuhci/hcd_controller.cpp [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbuhci/hcd_controller.cpp [iso-8859-1] Thu Feb 23 01:23:30 2012
@@ -537,6 +537,7 @@
         case IRP_MN_QUERY_REMOVE_DEVICE:
         case IRP_MN_QUERY_STOP_DEVICE:
         {
+#if 0
             //
             // sure
             //
@@ -547,6 +548,12 @@
             //
             IoSkipCurrentIrpStackLocation(Irp);
             return IoCallDriver(m_NextDeviceObject, Irp);
+#else
+            DPRINT1("Denying controller removal due to reinitialization bugs\n");
+            Irp->IoStatus.Status = STATUS_UNSUCCESSFUL;
+            IoCompleteRequest(Irp, IO_NO_INCREMENT);
+            return STATUS_UNSUCCESSFUL;
+#endif
         }
         case IRP_MN_REMOVE_DEVICE:
         {

Modified: trunk/reactos/ntoskrnl/io/pnpmgr/plugplay.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/io/pnpmgr/plugplay.c?rev=55827&r1=55826&r2=55827&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/io/pnpmgr/plugplay.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/io/pnpmgr/plugplay.c [iso-8859-1] Thu Feb 23 01:23:30 2012
@@ -555,38 +555,37 @@
     ASSERT(DeviceNode->Flags & DNF_ENUMERATED);
     ASSERT(DeviceNode->Flags & DNF_PROCESSED);
 
-#if 0
-    /* Remove the device node */
-    Status = IopRemoveDevice(DeviceNode);
-    if (NT_SUCCESS(Status))
-    {
-        /* Invalidate device relations for the parent to reenumerate the device */
-        Status = IoSynchronousInvalidateDeviceRelations(DeviceNode->Parent->PhysicalDeviceObject, BusRelations);
-        DPRINT1("A new driver has been loaded for '%wZ'\n", &DeviceInstance);
-    }
-#else
-    /* FIXME: We might clear some important flags */
-    DeviceNode->Flags &= ~DNF_DISABLED;
-
-    /* Load service data from the registry */
-    Status = IopActionConfigureChildServices(DeviceNode, DeviceNode->Parent);
-
-    if (NT_SUCCESS(Status))
-    {
-        /* Start the service and begin PnP initialization of the device again */
-        Status = IopActionInitChildServices(DeviceNode, DeviceNode->Parent);
-        DPRINT1("HACK: A new driver has been loaded for '%wZ' WITHOUT removing the old one\n", &DeviceInstance);
-    }
-#endif
-    else if (DeviceNode->Flags & DNF_ADDED)
-    {
-        /* A driver has already been loaded for this device */
-        DPRINT1("A reboot is required for the current driver for '%wZ' to be replaced\n", &DeviceInstance);
+    /* Check if there's already a driver loaded for this device */
+    if (DeviceNode->Flags & DNF_ADDED)
+    {
+        /* Remove the device node */
+        Status = IopRemoveDevice(DeviceNode);
+        if (NT_SUCCESS(Status))
+        {
+            /* Invalidate device relations for the parent to reenumerate the device */
+            Status = IoSynchronousInvalidateDeviceRelations(DeviceNode->Parent->PhysicalDeviceObject, BusRelations);
+            DPRINT1("A new driver has been loaded for '%wZ' (FDO above removed)\n", &DeviceNode->InstancePath);
+        }
+        else
+        {
+            /* A driver has already been loaded for this device */
+            DPRINT1("A reboot is required for the current driver for '%wZ' to be replaced\n", &DeviceNode->InstancePath);
+        }
     }
     else
     {
-        /* This device needs a driver */
-        DPRINT1("A reboot is required for the new driver for '%wZ' to load\n", &DeviceInstance);
+        /* FIXME: What if the device really is disabled? */
+        DeviceNode->Flags &= ~DNF_DISABLED;
+
+        /* Load service data from the registry */
+        Status = IopActionConfigureChildServices(DeviceNode, DeviceNode->Parent);
+
+        if (NT_SUCCESS(Status))
+        {
+            /* Start the service and begin PnP initialization of the device again */
+            Status = IopActionInitChildServices(DeviceNode, DeviceNode->Parent);
+            DPRINT1("A new driver will be loaded for '%wZ' (no FDO above)\n", &DeviceNode->InstancePath);
+        }
     }
 
     ObDereferenceObject(DeviceObject);




More information about the Ros-diffs mailing list