dmaengine: idxd: fix sequence for pci driver remove() and shutdown()
authorDave Jiang <dave.jiang@intel.com>
Wed, 14 Jul 2021 21:57:19 +0000 (14:57 -0700)
committerVinod Koul <vkoul@kernel.org>
Tue, 20 Jul 2021 17:43:33 +0000 (23:13 +0530)
commit49c4959f04b587c8909b33adca4066995c768d60
treed1ef5e3b8dad60b4210605809c48514e3d402990
parent407b3ea075c2733d6eeb85de9aa33eecd1ff0fb9
dmaengine: idxd: fix sequence for pci driver remove() and shutdown()

->shutdown() call should only be responsible for quiescing the device.
Currently it is doing PCI device tear down. This causes issue when things
like MMIO mapping is removed while idxd_unregister_devices() will trigger
removal of idxd device sub-driver and still initiates MMIO writes to the
device. Another issue is with the unregistering of idxd 'struct device',
the memory context gets freed. So the teardown calls are accessing freed
memory and can cause kernel oops. Move all the teardown bits that doesn't
belong in shutdown to ->remove() call. Move unregistering of the idxd
conf_dev 'struct device' to after doing all the teardown to free all
the memory that's no longer needed.

Fixes: 47c16ac27d4c ("dmaengine: idxd: fix idxd conf_dev 'struct device' lifetime")
Signed-off-by: Dave Jiang <dave.jiang@intel.com>
Link: https://lore.kernel.org/r/162629983901.395844.17964803190905549615.stgit@djiang5-desk3.ch.intel.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
drivers/dma/idxd/init.c
drivers/dma/idxd/sysfs.c