diff options
| author | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2019-05-09 11:49:44 +0200 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2019-05-09 11:49:44 +0200 |
| commit | cf6fd4d72fe78061c68af7a241387ec2d26dc161 (patch) | |
| tree | 54709a7495ad84e09fc6d49398c10447196e2566 /usb-line6.patch | |
| parent | c9d3986499ae91751f796f147d6439283938c364 (diff) | |
| download | patches-cf6fd4d72fe78061c68af7a241387ec2d26dc161.tar.gz | |
drop some patches now upstream and refresh one
Diffstat (limited to 'usb-line6.patch')
| -rw-r--r-- | usb-line6.patch | 283 |
1 files changed, 0 insertions, 283 deletions
diff --git a/usb-line6.patch b/usb-line6.patch deleted file mode 100644 index 1056bf953bf254..00000000000000 --- a/usb-line6.patch +++ /dev/null @@ -1,283 +0,0 @@ -From e2c743d1f900135c3e560cd9ea1647e4a1ebce7a Mon Sep 17 00:00:00 2001 -From: Greg Kroah-Hartman <gregkh@linuxfoundation.org> -Date: Wed, 23 Jan 2019 11:01:46 +0100 -Subject: [PATCH] sound: USB: line6: use dynamic buffers - -The line6 driver uses a lot of USB buffers off of the stack, which is -not allowed on many systems. Fix this up by dynamically allocating the -buffers with kmalloc() which allows for proper DMA-able memory. - -Tested-by: Christo Gouws <gouws.christo@gmail.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> -Cc: stable <stable@vger.kernel.org> - ---- - sound/usb/line6/driver.c | 60 ++++++++++++++++++++++++++------------------- - sound/usb/line6/podhd.c | 21 +++++++++------ - sound/usb/line6/toneport.c | 23 ++++++++++++----- - 3 files changed, 64 insertions(+), 40 deletions(-) - ---- a/sound/usb/line6/driver.c -+++ b/sound/usb/line6/driver.c -@@ -351,12 +351,16 @@ int line6_read_data(struct usb_line6 *li - { - struct usb_device *usbdev = line6->usbdev; - int ret; -- unsigned char len; -+ unsigned char *len; - unsigned count; - - if (address > 0xffff || datalen > 0xff) - return -EINVAL; - -+ len = kmalloc(sizeof(*len), GFP_KERNEL); -+ if (!len) -+ return -ENOMEM; -+ - /* query the serial number: */ - ret = usb_control_msg(usbdev, usb_sndctrlpipe(usbdev, 0), 0x67, - USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_OUT, -@@ -365,7 +369,7 @@ int line6_read_data(struct usb_line6 *li - - if (ret < 0) { - dev_err(line6->ifcdev, "read request failed (error %d)\n", ret); -- return ret; -+ goto exit; - } - - /* Wait for data length. We'll get 0xff until length arrives. */ -@@ -375,28 +379,29 @@ int line6_read_data(struct usb_line6 *li - ret = usb_control_msg(usbdev, usb_rcvctrlpipe(usbdev, 0), 0x67, - USB_TYPE_VENDOR | USB_RECIP_DEVICE | - USB_DIR_IN, -- 0x0012, 0x0000, &len, 1, -+ 0x0012, 0x0000, len, 1, - LINE6_TIMEOUT * HZ); - if (ret < 0) { - dev_err(line6->ifcdev, - "receive length failed (error %d)\n", ret); -- return ret; -+ goto exit; - } - -- if (len != 0xff) -+ if (*len != 0xff) - break; - } - -- if (len == 0xff) { -+ ret = -EIO; -+ if (*len == 0xff) { - dev_err(line6->ifcdev, "read failed after %d retries\n", - count); -- return -EIO; -- } else if (len != datalen) { -+ goto exit; -+ } else if (*len != datalen) { - /* should be equal or something went wrong */ - dev_err(line6->ifcdev, - "length mismatch (expected %d, got %d)\n", -- (int)datalen, (int)len); -- return -EIO; -+ (int)datalen, (int)*len); -+ goto exit; - } - - /* receive the result: */ -@@ -405,12 +410,12 @@ int line6_read_data(struct usb_line6 *li - 0x0013, 0x0000, data, datalen, - LINE6_TIMEOUT * HZ); - -- if (ret < 0) { -+ if (ret < 0) - dev_err(line6->ifcdev, "read failed (error %d)\n", ret); -- return ret; -- } - -- return 0; -+exit: -+ kfree(len); -+ return ret; - } - EXPORT_SYMBOL_GPL(line6_read_data); - -@@ -422,12 +427,16 @@ int line6_write_data(struct usb_line6 *l - { - struct usb_device *usbdev = line6->usbdev; - int ret; -- unsigned char status; -+ unsigned char *status; - int count; - - if (address > 0xffff || datalen > 0xffff) - return -EINVAL; - -+ status = kmalloc(sizeof(*status), GFP_KERNEL); -+ if (!status) -+ return -ENOMEM; -+ - ret = usb_control_msg(usbdev, usb_sndctrlpipe(usbdev, 0), 0x67, - USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_OUT, - 0x0022, address, data, datalen, -@@ -436,7 +445,7 @@ int line6_write_data(struct usb_line6 *l - if (ret < 0) { - dev_err(line6->ifcdev, - "write request failed (error %d)\n", ret); -- return ret; -+ goto exit; - } - - for (count = 0; count < LINE6_READ_WRITE_MAX_RETRIES; count++) { -@@ -447,28 +456,29 @@ int line6_write_data(struct usb_line6 *l - USB_TYPE_VENDOR | USB_RECIP_DEVICE | - USB_DIR_IN, - 0x0012, 0x0000, -- &status, 1, LINE6_TIMEOUT * HZ); -+ status, 1, LINE6_TIMEOUT * HZ); - - if (ret < 0) { - dev_err(line6->ifcdev, - "receiving status failed (error %d)\n", ret); -- return ret; -+ goto exit; - } - -- if (status != 0xff) -+ if (*status != 0xff) - break; - } - -- if (status == 0xff) { -+ if (*status == 0xff) { - dev_err(line6->ifcdev, "write failed after %d retries\n", - count); -- return -EIO; -- } else if (status != 0) { -+ ret = -EIO; -+ } else if (*status != 0) { - dev_err(line6->ifcdev, "write failed (error %d)\n", ret); -- return -EIO; -+ ret = -EIO; - } -- -- return 0; -+exit: -+ kfree(status); -+ return ret; - } - EXPORT_SYMBOL_GPL(line6_write_data); - ---- a/sound/usb/line6/podhd.c -+++ b/sound/usb/line6/podhd.c -@@ -225,28 +225,32 @@ static void podhd_startup_start_workqueu - static int podhd_dev_start(struct usb_line6_podhd *pod) - { - int ret; -- u8 init_bytes[8]; -+ u8 *init_bytes; - int i; - struct usb_device *usbdev = pod->line6.usbdev; - -+ init_bytes = kmalloc(8, GFP_KERNEL); -+ if (!init_bytes) -+ return -ENOMEM; -+ - ret = usb_control_msg(usbdev, usb_sndctrlpipe(usbdev, 0), - 0x67, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_OUT, - 0x11, 0, - NULL, 0, LINE6_TIMEOUT * HZ); - if (ret < 0) { - dev_err(pod->line6.ifcdev, "read request failed (error %d)\n", ret); -- return ret; -+ goto exit; - } - - /* NOTE: looks like some kind of ping message */ - ret = usb_control_msg(usbdev, usb_rcvctrlpipe(usbdev, 0), 0x67, - USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN, - 0x11, 0x0, -- &init_bytes, 3, LINE6_TIMEOUT * HZ); -+ init_bytes, 3, LINE6_TIMEOUT * HZ); - if (ret < 0) { - dev_err(pod->line6.ifcdev, - "receive length failed (error %d)\n", ret); -- return ret; -+ goto exit; - } - - pod->firmware_version = -@@ -255,7 +259,7 @@ static int podhd_dev_start(struct usb_li - for (i = 0; i <= 16; i++) { - ret = line6_read_data(&pod->line6, 0xf000 + 0x08 * i, init_bytes, 8); - if (ret < 0) -- return ret; -+ goto exit; - } - - ret = usb_control_msg(usbdev, usb_sndctrlpipe(usbdev, 0), -@@ -263,10 +267,9 @@ static int podhd_dev_start(struct usb_li - USB_TYPE_STANDARD | USB_RECIP_DEVICE | USB_DIR_OUT, - 1, 0, - NULL, 0, LINE6_TIMEOUT * HZ); -- if (ret < 0) -- return ret; -- -- return 0; -+exit: -+ kfree(init_bytes); -+ return ret; - } - - static void podhd_startup_workqueue(struct work_struct *work) ---- a/sound/usb/line6/toneport.c -+++ b/sound/usb/line6/toneport.c -@@ -365,16 +365,21 @@ static bool toneport_has_source_select(s - /* - Setup Toneport device. - */ --static void toneport_setup(struct usb_line6_toneport *toneport) -+static int toneport_setup(struct usb_line6_toneport *toneport) - { -- u32 ticks; -+ u32 *ticks; - struct usb_line6 *line6 = &toneport->line6; - struct usb_device *usbdev = line6->usbdev; - -+ ticks = kmalloc(sizeof(*ticks), GFP_KERNEL); -+ if (!ticks) -+ return -ENOMEM; -+ - /* sync time on device with host: */ - /* note: 32-bit timestamps overflow in year 2106 */ -- ticks = (u32)ktime_get_real_seconds(); -- line6_write_data(line6, 0x80c6, &ticks, 4); -+ *ticks = (u32)ktime_get_real_seconds(); -+ line6_write_data(line6, 0x80c6, ticks, 4); -+ kfree(ticks); - - /* enable device: */ - toneport_send_cmd(usbdev, 0x0301, 0x0000); -@@ -451,7 +456,9 @@ static int toneport_init(struct usb_line - return err; - } - -- toneport_setup(toneport); -+ err = toneport_setup(toneport); -+ if (err) -+ return err; - - /* register audio system: */ - return snd_card_register(line6->card); -@@ -463,7 +470,11 @@ static int toneport_init(struct usb_line - */ - static int toneport_reset_resume(struct usb_interface *interface) - { -- toneport_setup(usb_get_intfdata(interface)); -+ int err; -+ -+ err = toneport_setup(usb_get_intfdata(interface)); -+ if (err) -+ return err; - return line6_resume(interface); - } - #endif |
