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

Reply via email to