No subject
Mon Oct 13 20:30:02 AEDT 2025
descriptor is freed before the MSI teardown is invoked. Specifically, during NVMe
module unload (rmmod nvme), the call sequence is as follows:
cleanup_module
-> pci_unregister_driver
-> driver_unregister
-> bus_remove_driver
-> driver_detach
-> device_release_driver_internal
-> device_remove
-> pci_device_remove
-> nvme_remove
-> nvme_dev_disable
-> pci_free_irq_vectors
-> pci_disable_msix
-> pci_free_msi_irqs
-> pci_msi_teardown_msi_irqs ==> here we free msi_desc
Later, when call stack continue unwinding through,
-> device_release_driver_internal
-> device_unbind_cleanup
-> devres_release_all
-> release_nodes
-> msi_device_data_release
-> msi_remove_device_irq_domain
-> pseries_msi_ops_teardown => here the freed msi_desc is dereferenced, leads to crash
Possible Cause:
===============
This looks like a cleanup ordering issue introduced by the recent MSI parent
domain rework. The PCI/MSI teardown seems to assume that the MSI descriptor
remains valid until after the domain teardown path executes â which no longer
appears to hold true in this sequence.
Expected behavior:
==================
The rmmod nvme operation should cleanly unload the module without triggering a
crash or accessing freed MSI descriptors.
Additional notes:
=================
- The crash reproduces consistently on PowerPC (pseries, PHYP).
- It did not occur before the MSI parent domain series was merged.
- Likely to affect other MSI-capable PCI drivers.
Let me know if you need any further details. Also if you fix this bug,
I'd be glad to assist you validating the fix on PPC.
Thanks,
--Nilay
More information about the Linuxppc-dev
mailing list