From: Alexander Usyskin <[email protected]> A driver on the mei bus may rely on the availability of the receive callback during driver remove() call, e.g. mei_wdt. Move callbacks dismantling after the remove() call to unblock that scenario.
Signed-off-by: Alexander Usyskin <[email protected]> Signed-off-by: Tomas Winkler <[email protected]> --- drivers/misc/mei/bus.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/misc/mei/bus.c b/drivers/misc/mei/bus.c index 2d9c5dd06e42..3bb1f1500f6b 100644 --- a/drivers/misc/mei/bus.c +++ b/drivers/misc/mei/bus.c @@ -665,6 +665,10 @@ static int mei_cl_device_remove(struct device *dev) if (!cldev || !dev->driver) return 0; + cldrv = to_mei_cl_driver(dev->driver); + if (cldrv->remove) + ret = cldrv->remove(cldev); + if (cldev->rx_cb) { cancel_work_sync(&cldev->rx_work); cldev->rx_cb = NULL; @@ -674,10 +678,6 @@ static int mei_cl_device_remove(struct device *dev) cldev->notif_cb = NULL; } - cldrv = to_mei_cl_driver(dev->driver); - if (cldrv->remove) - ret = cldrv->remove(cldev); - module_put(THIS_MODULE); dev->driver = NULL; return ret; -- 2.7.4

