Loading...
iokit/Kernel/IOInterruptController.cpp xnu-1228.3.13 xnu-1228.12.14
--- xnu/xnu-1228.3.13/iokit/Kernel/IOInterruptController.cpp
+++ xnu/xnu-1228.12.14/iokit/Kernel/IOInterruptController.cpp
@@ -87,6 +87,15 @@
   // Check if the interrupt source can/should be shared.
   canBeShared = vectorCanBeShared(vectorNumber, vector);
   IODTGetInterruptOptions(nub, source, &options);
+#if defined(__i386__) || defined(__x86_64__)
+  int   interruptType;
+  if (OSDynamicCast(IOPlatformDevice, getProvider()) &&
+      (getInterruptType(nub, source, &interruptType) == kIOReturnSuccess) &&
+      (kIOInterruptTypeLevel & interruptType))
+  {
+    options |= kIODTInterruptShared;
+  }
+#endif
   shouldBeShared = canBeShared && (options & kIODTInterruptShared);
   wasAlreadyRegisterd = vector->interruptRegistered;