aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/usb/dvb-usb/gp8psk.c
diff options
context:
space:
mode:
authorMauro Carvalho Chehab <mchehab@s-opensource.com>2016-11-12 12:46:27 -0200
committerLinus Torvalds <torvalds@linux-foundation.org>2016-11-13 10:02:22 -0800
commit1596c387e970cb680d4031fbe4d6eb2c2a4ddb63 (patch)
treeccac90cf3c0b1fc6ee3fa04b0f14f94ce9975d90 /drivers/media/usb/dvb-usb/gp8psk.c
parentdvb-usb: move data_mutex to struct dvb_usb_device (diff)
downloadlinux-dev-1596c387e970cb680d4031fbe4d6eb2c2a4ddb63.tar.xz
linux-dev-1596c387e970cb680d4031fbe4d6eb2c2a4ddb63.zip
gp8psk: fix gp8psk_usb_in_op() logic
Commit bc29131ecb10 ("[media] gp8psk: don't do DMA on stack") fixed the usage of DMA on stack, but the memcpy was wrong for gp8psk_usb_in_op(). Fix it. From Derek's email: "Fix confirmed using 2 different Skywalker models with HD mpeg4, SD mpeg2." Suggested-by: Johannes Stezenbach <js@linuxtv.org> Fixes: bc29131ecb10 ("[media] gp8psk: don't do DMA on stack") Tested-by: Derek <user.vdr@gmail.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/media/usb/dvb-usb/gp8psk.c')
-rw-r--r--drivers/media/usb/dvb-usb/gp8psk.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/media/usb/dvb-usb/gp8psk.c b/drivers/media/usb/dvb-usb/gp8psk.c
index adfd76491451..2829e3082d15 100644
--- a/drivers/media/usb/dvb-usb/gp8psk.c
+++ b/drivers/media/usb/dvb-usb/gp8psk.c
@@ -67,7 +67,6 @@ int gp8psk_usb_in_op(struct dvb_usb_device *d, u8 req, u16 value, u16 index, u8
return ret;
while (ret >= 0 && ret != blen && try < 3) {
- memcpy(st->data, b, blen);
ret = usb_control_msg(d->udev,
usb_rcvctrlpipe(d->udev,0),
req,
@@ -81,8 +80,10 @@ int gp8psk_usb_in_op(struct dvb_usb_device *d, u8 req, u16 value, u16 index, u8
if (ret < 0 || ret != blen) {
warn("usb in %d operation failed.", req);
ret = -EIO;
- } else
+ } else {
ret = 0;
+ memcpy(b, st->data, blen);
+ }
deb_xfer("in: req. %x, val: %x, ind: %x, buffer: ",req,value,index);
debug_dump(b,blen,deb_xfer);