Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit db65c49e authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab
Browse files

[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
Loading
Loading
Loading
Loading
+13 −2
Original line number Diff line number Diff line
@@ -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;
}