diff options
author | Mauro Carvalho Chehab <mchehab@s-opensource.com> | 2016-11-12 09:46:27 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2016-11-13 13:02:22 -0500 |
commit | 1596c387e970cb680d4031fbe4d6eb2c2a4ddb63 (patch) | |
tree | ccac90cf3c0b1fc6ee3fa04b0f14f94ce9975d90 /drivers/media | |
parent | 7724325a19fb0a51d2a69bd2915b33f0ff197f5a (diff) |
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')
-rw-r--r-- | drivers/media/usb/dvb-usb/gp8psk.c | 5 |
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 | |||
67 | return ret; | 67 | return ret; |
68 | 68 | ||
69 | while (ret >= 0 && ret != blen && try < 3) { | 69 | while (ret >= 0 && ret != blen && try < 3) { |
70 | memcpy(st->data, b, blen); | ||
71 | ret = usb_control_msg(d->udev, | 70 | ret = usb_control_msg(d->udev, |
72 | usb_rcvctrlpipe(d->udev,0), | 71 | usb_rcvctrlpipe(d->udev,0), |
73 | req, | 72 | req, |
@@ -81,8 +80,10 @@ int gp8psk_usb_in_op(struct dvb_usb_device *d, u8 req, u16 value, u16 index, u8 | |||
81 | if (ret < 0 || ret != blen) { | 80 | if (ret < 0 || ret != blen) { |
82 | warn("usb in %d operation failed.", req); | 81 | warn("usb in %d operation failed.", req); |
83 | ret = -EIO; | 82 | ret = -EIO; |
84 | } else | 83 | } else { |
85 | ret = 0; | 84 | ret = 0; |
85 | memcpy(b, st->data, blen); | ||
86 | } | ||
86 | 87 | ||
87 | deb_xfer("in: req. %x, val: %x, ind: %x, buffer: ",req,value,index); | 88 | deb_xfer("in: req. %x, val: %x, ind: %x, buffer: ",req,value,index); |
88 | debug_dump(b,blen,deb_xfer); | 89 | debug_dump(b,blen,deb_xfer); |