Commit db65c49e authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab Committed by Mauro Carvalho Chehab

[media] s2255drv: don't use stack for DMA

The USB control messages require DMA to work. We cannot pass
a stack-allocated buffer, as it is not warranted that the
stack would be into a DMA enabled area.
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@osg.samsung.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@s-opensource.com>
parent 45ae4a52
...@@ -1901,19 +1901,30 @@ static long s2255_vendor_req(struct s2255_dev *dev, unsigned char Request, ...@@ -1901,19 +1901,30 @@ static long s2255_vendor_req(struct s2255_dev *dev, unsigned char Request,
s32 TransferBufferLength, int bOut) s32 TransferBufferLength, int bOut)
{ {
int r; int r;
unsigned char *buf;
buf = kmalloc(TransferBufferLength, GFP_KERNEL);
if (!buf)
return -ENOMEM;
if (!bOut) { if (!bOut) {
r = usb_control_msg(dev->udev, usb_rcvctrlpipe(dev->udev, 0), r = usb_control_msg(dev->udev, usb_rcvctrlpipe(dev->udev, 0),
Request, Request,
USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_TYPE_VENDOR | USB_RECIP_DEVICE |
USB_DIR_IN, USB_DIR_IN,
Value, Index, TransferBuffer, Value, Index, buf,
TransferBufferLength, HZ * 5); TransferBufferLength, HZ * 5);
if (r >= 0)
memcpy(TransferBuffer, buf, TransferBufferLength);
} else { } else {
memcpy(buf, TransferBuffer, TransferBufferLength);
r = usb_control_msg(dev->udev, usb_sndctrlpipe(dev->udev, 0), r = usb_control_msg(dev->udev, usb_sndctrlpipe(dev->udev, 0),
Request, USB_TYPE_VENDOR | USB_RECIP_DEVICE, Request, USB_TYPE_VENDOR | USB_RECIP_DEVICE,
Value, Index, TransferBuffer, Value, Index, buf,
TransferBufferLength, HZ * 5); TransferBufferLength, HZ * 5);
} }
kfree(buf);
return r; return r;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment