linux-input.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] HID: hid-sensor-hub: fix sleeping function called from invalid context
@ 2014-03-24 23:25 Srinivas Pandruvada
  2014-03-25 12:11 ` Jiri Kosina
  0 siblings, 1 reply; 2+ messages in thread
From: Srinivas Pandruvada @ 2014-03-24 23:25 UTC (permalink / raw)
  To: jkosina; +Cc: linux-input, Srinivas Pandruvada

Fix issue with the sleeping calling hid_hw_request under spinlock.
When i2c is used as HID transport, this is calling kmalloc, which
can sleep. So remove call to this function while under spinlock.
 [ 1067.021961] Call Trace:
 [ 1067.021970]  [<ffffffff8192f5f2>] dump_stack+0x4d/0x6f
 [ 1067.021976]  [<ffffffff811109f2>] __might_sleep+0xd2/0xf0
 [ 1067.021981]  [<ffffffff811ea15b>] __kmalloc+0xeb/0x200
 [ 1067.021989]  [<ffffffff816e0cb3>] ? hid_alloc_report_buf+0x23/0x30
 [ 1067.021993]  [<ffffffff816e0cb3>] hid_alloc_report_buf+0x23/0x30
 [ 1067.021997]  [<ffffffff816f4cb7>] i2c_hid_request+0x57/0x110
 [ 1067.022006]  [<ffffffffa02bc61c>] sensor_hub_input_attr_get_raw_value+0xbc/0x100 [hid_sensor_hub]

Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
---
 drivers/hid/hid-sensor-hub.c | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/drivers/hid/hid-sensor-hub.c b/drivers/hid/hid-sensor-hub.c
index 9c22e14..9021c9c 100644
--- a/drivers/hid/hid-sensor-hub.c
+++ b/drivers/hid/hid-sensor-hub.c
@@ -260,13 +260,12 @@ int sensor_hub_input_attr_get_raw_value(struct hid_sensor_hub_device *hsdev,
 
 	spin_lock_irqsave(&data->lock, flags);
 	data->pending.status = true;
+	spin_unlock_irqrestore(&data->lock, flags);
 	report = sensor_hub_report(report_id, hsdev->hdev, HID_INPUT_REPORT);
-	if (!report) {
-		spin_unlock_irqrestore(&data->lock, flags);
+	if (!report)
 		goto err_free;
-	}
+
 	hid_hw_request(hsdev->hdev, report, HID_REQ_GET_REPORT);
-	spin_unlock_irqrestore(&data->lock, flags);
 	wait_for_completion_interruptible_timeout(&data->pending.ready, HZ*5);
 	switch (data->pending.raw_size) {
 	case 1:
-- 
1.8.3.2


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] HID: hid-sensor-hub: fix sleeping function called from invalid context
  2014-03-24 23:25 [PATCH] HID: hid-sensor-hub: fix sleeping function called from invalid context Srinivas Pandruvada
@ 2014-03-25 12:11 ` Jiri Kosina
  0 siblings, 0 replies; 2+ messages in thread
From: Jiri Kosina @ 2014-03-25 12:11 UTC (permalink / raw)
  To: Srinivas Pandruvada; +Cc: linux-input

On Mon, 24 Mar 2014, Srinivas Pandruvada wrote:

> Fix issue with the sleeping calling hid_hw_request under spinlock.
> When i2c is used as HID transport, this is calling kmalloc, which
> can sleep. So remove call to this function while under spinlock.
>  [ 1067.021961] Call Trace:
>  [ 1067.021970]  [<ffffffff8192f5f2>] dump_stack+0x4d/0x6f
>  [ 1067.021976]  [<ffffffff811109f2>] __might_sleep+0xd2/0xf0
>  [ 1067.021981]  [<ffffffff811ea15b>] __kmalloc+0xeb/0x200
>  [ 1067.021989]  [<ffffffff816e0cb3>] ? hid_alloc_report_buf+0x23/0x30
>  [ 1067.021993]  [<ffffffff816e0cb3>] hid_alloc_report_buf+0x23/0x30
>  [ 1067.021997]  [<ffffffff816f4cb7>] i2c_hid_request+0x57/0x110
>  [ 1067.022006]  [<ffffffffa02bc61c>] sensor_hub_input_attr_get_raw_value+0xbc/0x100 [hid_sensor_hub]

Applied, thanks.

-- 
Jiri Kosina
SUSE Labs

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2014-03-25 12:11 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-03-24 23:25 [PATCH] HID: hid-sensor-hub: fix sleeping function called from invalid context Srinivas Pandruvada
2014-03-25 12:11 ` Jiri Kosina

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).