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: Benjamin Tissoires <benjamin.tissoires@redhat.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
This commit is contained in:
Родитель
061232f0d4
Коммит
b7a87ad677
|
@ -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,
|
||||||
}
|
}
|
||||||
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,
|
||||||
* 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;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче