From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932847AbdA0NkN (ORCPT ); Fri, 27 Jan 2017 08:40:13 -0500 Received: from mga07.intel.com ([134.134.136.100]:55751 "EHLO mga07.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932275AbdA0Njl (ORCPT ); Fri, 27 Jan 2017 08:39:41 -0500 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.33,295,1477983600"; d="scan'208";a="36308527" From: Tomas Winkler To: Greg Kroah-Hartman Cc: Alexander Usyskin , linux-kernel@vger.kernel.org, Tomas Winkler Subject: [char-misc-next 1/9] mei: bus: cancel and disable callback after release call Date: Fri, 27 Jan 2017 16:32:38 +0200 Message-Id: <1485527566-13653-1-git-send-email-tomas.winkler@intel.com> X-Mailer: git-send-email 2.7.4 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Alexander Usyskin 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 Signed-off-by: Tomas Winkler --- 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