FAILED: patch "[PATCH] media: gl861: fix probe of dvb_usb_gl861" failed to apply to 4.17-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 4.17-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
Quoted 1 line
From
48db0089bff6f9154f6bd98ce7a6ae3786fa8ebeMon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mika=20B=C3=A5tsman?= <[email protected]>
Date: Wed, 16 May 2018 16:32:19 -0400
Subject: [PATCH] media: gl861: fix probe of dvb_usb_gl861
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Probe of dvb_usb_gl861 was working at least with v4.4. Noticed the issue with v4.13 but according to similar issues the problem started with v4.9.
[ 15.288065] transfer buffer not dma capable [ 15.288090] WARNING: CPU: 2 PID: 493 at drivers/usb/core/hcd.c:1595 usb_hcd_map_urb_for_dma+0x4e2/0x640 ...CUT... [ 15.288791] dvb_usb_gl861: probe of 3-7:1.0 failed with error -5
Tested with MSI Mega Sky 580 DVB-T Tuner [GL861]
drivers/media/usb/dvb-usb-v2/gl861.c +10 -11
@@ -26,10 +26,14 @@ static int gl861_i2c_msg(struct dvb_usb_device *d, u8 addr,if (wo) { req =GL861_REQ_I2C_WRITE ; type =GL861_WRITE ; + buf =kmemdup (wbuf, wlen,GFP_KERNEL ); }else {/* rw */ req =GL861_REQ_I2C_READ ; type =GL861_READ ; + buf =kmalloc (rlen,GFP_KERNEL ); } +if (!buf) +return -ENOMEM ;switch (wlen) {case 1 :
@@ -42,24 +46,19 @@ static int gl861_i2c_msg(struct dvb_usb_device *d, u8 addr,default :dev_err (&d->udev->dev,"%s: wlen=%d, aborting\n" ,KBUILD_MODNAME , wlen); +kfree (buf);return -EINVAL ; } - buf =NULL ; -if (rlen >0 ) { - buf =kmalloc (rlen,GFP_KERNEL ); -if (!buf) -return -ENOMEM ; - } +usleep_range (1000 ,2000 );/* avoid I2C errors */ ret =usb_control_msg (d->udev,usb_rcvctrlpipe (d->udev,0 ), req, type, value, index, buf, rlen,2000 ); -if (rlen >0 ) { -if (ret >0 ) -memcpy (rbuf, buf, rlen); -kfree (buf); - } +if (!wo && ret >0 ) +memcpy (rbuf, buf, rlen); + +kfree (buf);return ret; }