mirror of
https://github.com/edk2-porting/linux-next.git
synced 2025-01-14 00:24:15 +08:00
[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: Mauro Carvalho Chehab <mchehab@osg.samsung.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
This commit is contained in:
parent
45ae4a5220
commit
db65c49e44
@ -1901,19 +1901,30 @@ static long s2255_vendor_req(struct s2255_dev *dev, unsigned char Request,
|
||||
s32 TransferBufferLength, int bOut)
|
||||
{
|
||||
int r;
|
||||
unsigned char *buf;
|
||||
|
||||
buf = kmalloc(TransferBufferLength, GFP_KERNEL);
|
||||
if (!buf)
|
||||
return -ENOMEM;
|
||||
|
||||
if (!bOut) {
|
||||
r = usb_control_msg(dev->udev, usb_rcvctrlpipe(dev->udev, 0),
|
||||
Request,
|
||||
USB_TYPE_VENDOR | USB_RECIP_DEVICE |
|
||||
USB_DIR_IN,
|
||||
Value, Index, TransferBuffer,
|
||||
Value, Index, buf,
|
||||
TransferBufferLength, HZ * 5);
|
||||
|
||||
if (r >= 0)
|
||||
memcpy(TransferBuffer, buf, TransferBufferLength);
|
||||
} else {
|
||||
memcpy(buf, TransferBuffer, TransferBufferLength);
|
||||
r = usb_control_msg(dev->udev, usb_sndctrlpipe(dev->udev, 0),
|
||||
Request, USB_TYPE_VENDOR | USB_RECIP_DEVICE,
|
||||
Value, Index, TransferBuffer,
|
||||
Value, Index, buf,
|
||||
TransferBufferLength, HZ * 5);
|
||||
}
|
||||
kfree(buf);
|
||||
return r;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user