* Patch "mei: amthif: fix deadlock in initialization during a reset" has been added to the 4.7-stable tree
@ 2016-10-20 14:24 gregkh
0 siblings, 0 replies; only message in thread
From: gregkh @ 2016-10-20 14:24 UTC (permalink / raw)
To: alexander.usyskin, gregkh, tomas.winkler; +Cc: stable, stable-commits
This is a note to let you know that I've just added the patch titled
mei: amthif: fix deadlock in initialization during a reset
to the 4.7-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
mei-amthif-fix-deadlock-in-initialization-during-a-reset.patch
and it can be found in the queue-4.7 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@vger.kernel.org> know about it.
>From e728ae271f4cf71218ec06a6daf61b79466cb466 Mon Sep 17 00:00:00 2001
From: Alexander Usyskin <alexander.usyskin@intel.com>
Date: Tue, 26 Jul 2016 01:06:09 +0300
Subject: mei: amthif: fix deadlock in initialization during a reset
From: Alexander Usyskin <alexander.usyskin@intel.com>
commit e728ae271f4cf71218ec06a6daf61b79466cb466 upstream.
The device lock was unnecessary obtained in bus rescan work before the
amthif client search. That causes incorrect lock ordering and task
hang:
...
[88004.613213] INFO: task kworker/1:14:21832 blocked for more than 120 seconds.
...
[88004.645934] Workqueue: events mei_cl_bus_rescan_work
...
The correct lock order is
cl_bus_lock
device_lock
me_clients_rwsem
Move device_lock into amthif init function that called
after me_clients_rwsem is released.
This fixes regression introduced by commit:
commit 025fb792bac3 ("mei: split amthif client init from end of clients enumeration")
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>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/misc/mei/amthif.c | 12 +++++++++---
drivers/misc/mei/bus.c | 2 --
2 files changed, 9 insertions(+), 5 deletions(-)
--- a/drivers/misc/mei/amthif.c
+++ b/drivers/misc/mei/amthif.c
@@ -67,8 +67,12 @@ int mei_amthif_host_init(struct mei_devi
struct mei_cl *cl = &dev->iamthif_cl;
int ret;
- if (mei_cl_is_connected(cl))
- return 0;
+ mutex_lock(&dev->device_lock);
+
+ if (mei_cl_is_connected(cl)) {
+ ret = 0;
+ goto out;
+ }
dev->iamthif_state = MEI_IAMTHIF_IDLE;
@@ -77,11 +81,13 @@ int mei_amthif_host_init(struct mei_devi
ret = mei_cl_link(cl);
if (ret < 0) {
dev_err(dev->dev, "amthif: failed cl_link %d\n", ret);
- return ret;
+ goto out;
}
ret = mei_cl_connect(cl, me_cl, NULL);
+out:
+ mutex_unlock(&dev->device_lock);
return ret;
}
--- a/drivers/misc/mei/bus.c
+++ b/drivers/misc/mei/bus.c
@@ -983,12 +983,10 @@ void mei_cl_bus_rescan_work(struct work_
container_of(work, struct mei_device, bus_rescan_work);
struct mei_me_client *me_cl;
- mutex_lock(&bus->device_lock);
me_cl = mei_me_cl_by_uuid(bus, &mei_amthif_guid);
if (me_cl)
mei_amthif_host_init(bus, me_cl);
mei_me_cl_put(me_cl);
- mutex_unlock(&bus->device_lock);
mei_cl_bus_rescan(bus);
}
Patches currently in stable-queue which might be from alexander.usyskin@intel.com are
queue-4.7/mei-amthif-fix-deadlock-in-initialization-during-a-reset.patch
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2016-10-20 14:24 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-10-20 14:24 Patch "mei: amthif: fix deadlock in initialization during a reset" has been added to the 4.7-stable tree gregkh
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).