We are developing an IOUserSCSIParallelInterfaceController driver for a legacy controller.
After completing init() successfully, no other methods are called before a DriverKit assert failure - .driver.dext) Assertion failed: (notsync || !remote || (msgid == IOService_Start_ID) || queue->OnQueue()), function Invoke, file uioserver.cpp, line 1654. - that leads immediately to "IOPCIDevice::ClientCrashed_Impl() for client " .
This appears to be because the framework is attempting a SetPowerState()' during DEXT load, which is delivered off-queue and panics in OSMetaClassBase::Invoke (uioserver.cpp`) before any other dext method runs.
Apple Silicon Mac, macOS 26 (DriverKit 25.1 SDK), Xcode 26.x.
Expected:
The SetPowerState() power-up is delivered on the driver object's dispatch queue (or otherwise handled by the framework), allowing the dext's SetPowerState override to run, ACK via super::SetPowerState(powerFlags, SUPERDISPATCH), and proceed to UserInitializeController.
Actual behavior:
init() completes (our trace logs init then completed init)
Neither Start_Impl nor SetPowerState_Impl ever executes
Instead the process fails with the assertion above , IOPCIDevice::ClientCrashed_Impl() reports "client … does not have open session … skipping recovery".
- The dext crash-loops ("Driver … has crashed N time(s)").
Any suggestions?