Index: drivers/input/i8042prt/pnp.c =================================================================== --- drivers/input/i8042prt/pnp.c (revision 74219) +++ drivers/input/i8042prt/pnp.c (working copy) @@ -303,8 +303,10 @@ return Status; } - if (DirqlMax == PortDeviceExtension->KeyboardInterrupt.Dirql) + if (DirqlMax == PortDeviceExtension->KeyboardInterrupt.Dirql || !PortDeviceExtension->HighestDIRQLInterrupt) + { PortDeviceExtension->HighestDIRQLInterrupt = PortDeviceExtension->KeyboardInterrupt.Object; + } PortDeviceExtension->Flags |= KEYBOARD_INITIALIZED; return STATUS_SUCCESS; } @@ -353,9 +355,10 @@ goto cleanup; } - if (DirqlMax == PortDeviceExtension->MouseInterrupt.Dirql) + if (DirqlMax == PortDeviceExtension->MouseInterrupt.Dirql || !PortDeviceExtension->HighestDIRQLInterrupt) + { PortDeviceExtension->HighestDIRQLInterrupt = PortDeviceExtension->MouseInterrupt.Object; - + } PortDeviceExtension->Flags |= MOUSE_INITIALIZED; Status = STATUS_SUCCESS; @@ -477,16 +480,23 @@ WARN_(I8042PRT, "i8042ConnectMouseInterrupt failed: %lx\n", Status); } - /* Start the mouse */ - Irql = KeAcquireInterruptSpinLock(DeviceExtension->HighestDIRQLInterrupt); - /* HACK: the mouse has already been reset in i8042DetectMouse. This second - reset prevents some touchpads/mice from working (Dell D531, D600). - See CORE-6901 */ - if (!(i8042HwFlags & FL_INITHACK)) + if (!DeviceExtension->HighestDIRQLInterrupt) { - i8042IsrWritePort(DeviceExtension, MOU_CMD_RESET, CTRL_WRITE_MOUSE); + /* Start the mouse */ + Irql = KeAcquireInterruptSpinLock(DeviceExtension->HighestDIRQLInterrupt); + /* HACK: the mouse has already been reset in i8042DetectMouse. This second + reset prevents some touchpads/mice from working (Dell D531, D600). + See CORE-6901 */ + if (!(i8042HwFlags & FL_INITHACK)) + { + i8042IsrWritePort(DeviceExtension, MOU_CMD_RESET, CTRL_WRITE_MOUSE); + } + KeReleaseInterruptSpinLock(DeviceExtension->HighestDIRQLInterrupt, Irql); } - KeReleaseInterruptSpinLock(DeviceExtension->HighestDIRQLInterrupt, Irql); + else + { + WARN_(I8042PRT, "HighestDIRQLInterrupt is null\n"); + } } return Status;