Patch "[media] cxusb: Use a dma capable buffer also for reading" has been added to the 4.9-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
[media] cxusb: Use a dma capable buffer also for reading
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
cxusb-use-a-dma-capable-buffer-also-for-reading.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
3f190e3aec212fc8c61e202c51400afa7384d4bcMon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stefan=20Br=C3=BCns?= <[email protected]>
Date: Sun, 5 Feb 2017 12:57:59 -0200
Subject: [media] cxusb: Use a dma capable buffer also for reading
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
From: Stefan Brüns <[email protected]>
commit 3f190e3aec212fc8c61e202c51400afa7384d4bc upstream.
Commit 17ce039b4e54 ("[media] cxusb: don't do DMA on stack") added a kmalloc'ed bounce buffer for writes, but missed to do the same for reads. As the read only happens after the write is finished, we can reuse the same buffer.
As dvb_usb_generic_rw handles a read length of 0 by itself, avoid calling it using the dvb_usb_generic_read wrapper function.
--- drivers/media/usb/dvb-usb/cxusb.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-)
drivers/media/usb/dvb-usb/cxusb.c +8 -7
@@ -59,23 +59,24 @@ static int cxusb_ctrl_msg(struct dvb_usb u8 cmd, u8 *wbuf, int wlen, u8 *rbuf, int rlen) { struct cxusb_state *st = d->priv; -int ret, wo; +int ret;if (1 + wlen >MAX_XFER_SIZE ) {warn ("i2c wr: len=%d is too big!\n" , wlen);return -EOPNOTSUPP ; } - wo = (rbuf ==NULL || rlen ==0 );/* write-only */ +if (rlen >MAX_XFER_SIZE ) { +warn ("i2c rd: len=%d is too big!\n" , rlen); +return -EOPNOTSUPP ; + }mutex_lock (&d->data_mutex); st->data[0 ] = cmd;memcpy (&st->data[1 ], wbuf, wlen); -if (wo) - ret =dvb_usb_generic_write (d, st->data,1 + wlen); -else - ret =dvb_usb_generic_rw (d, st->data,1 + wlen, - rbuf, rlen,0 ); + ret =dvb_usb_generic_rw (d, st->data,1 + wlen, st->data, rlen,0 ); +if (!ret && rbuf && rlen) +memcpy (rbuf, st->data, rlen);mutex_unlock (&d->data_mutex);return ret;
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/dvb-usb-firmware-don-t-do-dma-on-stack.patch queue-4.9/cxusb-use-a-dma-capable-buffer-also-for-reading.patch