Commit b7a87ad6 authored by Benjamin Tissoires's avatar Benjamin Tissoires Committed by Jiri Kosina

HID: magicmouse: make transfer buffers DMA capable

Kernel v4.9 strictly enforces DMA capable buffers, so we need to remove
buffers allocated on the stack.
Signed-off-by: default avatarBenjamin Tissoires <benjamin.tissoires@redhat.com>
Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
parent 061232f0
...@@ -493,7 +493,8 @@ static int magicmouse_input_configured(struct hid_device *hdev, ...@@ -493,7 +493,8 @@ static int magicmouse_input_configured(struct hid_device *hdev,
static int magicmouse_probe(struct hid_device *hdev, static int magicmouse_probe(struct hid_device *hdev,
const struct hid_device_id *id) const struct hid_device_id *id)
{ {
__u8 feature[] = { 0xd7, 0x01 }; const u8 feature[] = { 0xd7, 0x01 };
u8 *buf;
struct magicmouse_sc *msc; struct magicmouse_sc *msc;
struct hid_report *report; struct hid_report *report;
int ret; int ret;
...@@ -544,6 +545,12 @@ static int magicmouse_probe(struct hid_device *hdev, ...@@ -544,6 +545,12 @@ static int magicmouse_probe(struct hid_device *hdev,
} }
report->size = 6; report->size = 6;
buf = kmemdup(feature, sizeof(feature), GFP_KERNEL);
if (!buf) {
ret = -ENOMEM;
goto err_stop_hw;
}
/* /*
* Some devices repond with 'invalid report id' when feature * Some devices repond with 'invalid report id' when feature
* report switching it into multitouch mode is sent to it. * report switching it into multitouch mode is sent to it.
...@@ -552,8 +559,9 @@ static int magicmouse_probe(struct hid_device *hdev, ...@@ -552,8 +559,9 @@ static int magicmouse_probe(struct hid_device *hdev,
* but there seems to be no other way of switching the mode. * but there seems to be no other way of switching the mode.
* Thus the super-ugly hacky success check below. * Thus the super-ugly hacky success check below.
*/ */
ret = hid_hw_raw_request(hdev, feature[0], feature, sizeof(feature), ret = hid_hw_raw_request(hdev, buf[0], buf, sizeof(feature),
HID_FEATURE_REPORT, HID_REQ_SET_REPORT); HID_FEATURE_REPORT, HID_REQ_SET_REPORT);
kfree(buf);
if (ret != -EIO && ret != sizeof(feature)) { if (ret != -EIO && ret != sizeof(feature)) {
hid_err(hdev, "unable to request touch data (%d)\n", ret); hid_err(hdev, "unable to request touch data (%d)\n", ret);
goto err_stop_hw; goto err_stop_hw;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment