| From d5f8e166c25750adc147b0adf64a62a91653438a Mon Sep 17 00:00:00 2001 |
| From: Alexander Usyskin <alexander.usyskin@intel.com> |
| Date: Thu, 24 Nov 2016 13:34:02 +0200 |
| Subject: mei: request async autosuspend at the end of enumeration |
| |
| From: Alexander Usyskin <alexander.usyskin@intel.com> |
| |
| commit d5f8e166c25750adc147b0adf64a62a91653438a upstream. |
| |
| pm_runtime_autosuspend can take synchronous or asynchronous |
| paths, Because we are calling pm_runtime_mark_last_busy just before |
| this most of the cases it takes the asynchronous way. However, |
| when the FW or driver resets during already running runtime suspend, |
| the call will result in calling to the driver's rpm callback and results |
| in a deadlock on device_lock. |
| The simplest fix is to replace pm_runtime_autosuspend with |
| asynchronous pm_request_autosuspend. |
| |
| 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> |
| |
| --- |
| drivers/misc/mei/client.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/drivers/misc/mei/client.c |
| +++ b/drivers/misc/mei/client.c |
| @@ -675,7 +675,7 @@ void mei_host_client_init(struct mei_dev |
| |
| pm_runtime_mark_last_busy(dev->dev); |
| dev_dbg(dev->dev, "rpm: autosuspend\n"); |
| - pm_runtime_autosuspend(dev->dev); |
| + pm_request_autosuspend(dev->dev); |
| } |
| |
| /** |