mei: bus: cancel and disable callback after release call

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 <alexander.usyskin@intel.com>
Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Alexander Usyskin 2017-01-27 16:32:38 +02:00 committed by Greg Kroah-Hartman
parent 1274a690f6
commit 9ecb839f16

View file

@ -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;