Skip to content

Don't use stack for DMA transers on media usb drivers

Mauro Carvalho Chehab linux-media lkml 2 versions – In review

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v2 Latest31 patches 7 repliesIn review
  2. v126 patches 14 repliesSuperseded

Patches in v2 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/31af9005: don't do DMA on stackdrivers/media/usb/dvb-usb/af9005.c+180 -1370 replies
2/31cinergyT2-core: don't do DMA on stackdrivers/media/usb/dvb-usb/cinergyT2-core.c+61 -232 replies
3/31cinergyT2-core: handle error code on RC querydrivers/media/usb/dvb-usb/cinergyT2-core.c+5 -30 replies
3/31cinergyT2-core: handle error code on RC querydrivers/media/usb/dvb-usb/cinergyT2-core.c+5 -30 replies
4/31cinergyT2-fe: cache stats at cinergyt2_fe_read_status()drivers/media/usb/dvb-usb/cinergyT2-fe.c+7 -410 replies
5/31cinergyT2-fe: don't do DMA on stackdrivers/media/usb/dvb-usb/cinergyT2-fe.c+33 -230 replies
6/31cxusb: don't do DMA on stackdrivers/media/usb/dvb-usb/cxusb.c drivers/media/usb/dvb-usb/cxusb.h+41 -270 replies
7/31dib0700: be sure that dib0700_ctrl_rd() users can do DMAdrivers/media/usb/dvb-usb/dib0700_core.c drivers/media/usb/dvb-usb/dib0700_devices.c+16 -130 replies
8/31dib0700_core: don't use stack on I2C readsdrivers/media/usb/dvb-usb/dib0700_core.c+26 -10 replies
9/31dibusb: don't do DMA on stackdrivers/media/usb/dvb-usb/dibusb-common.c drivers/media/usb/dvb-usb/dibusb.h+85 -250 replies
10/31dibusb: handle error code on RC querydrivers/media/usb/dvb-usb/dibusb-common.c+6 -20 replies
11/31digitv: don't do DMA on stackdrivers/media/usb/dvb-usb/digitv.c drivers/media/usb/dvb-usb/digitv.h+14 -90 replies
12/31dtt200u-fe: don't keep waiting for lock at set_frontend()drivers/media/usb/dvb-usb/dtt200u-fe.c+0 -90 replies
13/31dtt200u-fe: don't do DMA on stackdrivers/media/usb/dvb-usb/dtt200u-fe.c+65 -300 replies
14/31dtt200u-fe: handle errors on USB control messagesdrivers/media/usb/dvb-usb/dtt200u-fe.c+31 -90 replies
15/31dtt200u: don't do DMA on stackdrivers/media/usb/dvb-usb/dtt200u.c+75 -290 replies
16/31dtt200u: handle USB control message errorsdrivers/media/usb/dvb-usb/dtt200u.c+18 -80 replies
17/31dtv5100: don't do DMA on stackdrivers/media/usb/dvb-usb/dtv5100.c+8 -20 replies
18/31gp8psk: don't do DMA on stackdrivers/media/usb/dvb-usb/gp8psk.c+12 -23 replies
19/31gp8psk: don't go past the buffer sizedrivers/media/usb/dvb-usb/gp8psk.c+11 -00 replies
20/31nova-t-usb2: don't do DMA on stackdrivers/media/usb/dvb-usb/nova-t-usb2.c+13 -50 replies
21/31pctv452e: don't do DMA on stackdrivers/media/usb/dvb-usb/pctv452e.c+74 -550 replies
22/31pctv452e: don't call BUG_ON() on non-fatal errordrivers/media/usb/dvb-usb/pctv452e.c+4 -30 replies
23/31technisat-usb2: use DMA buffers for I2C transfersdrivers/media/usb/dvb-usb/technisat-usb2.c+11 -50 replies
24/31dvb-usb: warn if return value for USB read/write routines is not checkeddrivers/media/usb/dvb-usb/dvb-usb.h+4 -20 replies
25/31nova-t-usb2: handle error code on RC querydrivers/media/usb/dvb-usb/nova-t-usb2.c+6 -30 replies
26/31dw2102: return error if su3000_power_ctrl() failsdrivers/media/usb/dvb-usb/dw2102.c+1 -10 replies
27/31digitv: handle error code on RC querydrivers/media/usb/dvb-usb/digitv.c+6 -40 replies
28/31cpia2_usb: don't use stack for DMAdrivers/media/usb/cpia2/cpia2_usb.c+29 -32 replies
28/31cpia2_usb: don't use stack for DMAdrivers/media/usb/cpia2/cpia2_usb.c+30 -40 replies
29/31s2255drv: don't use stack for DMAdrivers/media/usb/s2255/s2255drv.c+13 -20 replies
30/31stk-webcam: don't use stack for DMAdrivers/media/usb/stkwebcam/stk-webcam.c+11 -50 replies
31/31flexcop-usb: don't use stack for DMAdrivers/media/usb/b2c2/flexcop-usb.c drivers/media/usb/b2c2/flexcop-usb.h+72 -370 replies

Reviews trailers per patch

11 of 33 patches have a Reviewed-by or Acked-by.

PatchPatrick Boettcher
1/31
2/31R-b
3/31
3/31
4/31
5/31R-b
6/31R-b
7/31R-b
8/31R-b
9/31R-b
10/31
11/31R-b
12/31
13/31
14/31
15/31R-b
16/31
17/31
18/31
19/31
20/31R-b
21/31R-b
22/31
23/31R-b
24/31
25/31
26/31
27/31
28/31
28/31
29/31
30/31
31/31

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes.

Read the v2 thread

Cover letter [PATCH v2 00/31] Don't use stack for DMA transers on media usb drivers

Sending URB control messages from stack was never supported. Yet, on x86, the stack was usually at a memory region that allows DMA transfer.

So, several drivers got it wrong. On Kernel 4.9, if VMAP_STACK=y, none of those drivers will work, as the stack won't be on a DMA-able area anymore.

So, fix the media drivers that requre it. It should noticed that the vast majority are at dvb-usb.

Please notice that those patches are compile-tested only. So, I really appreciate if people with devices using those drivers could test and report if they don't break anything. I intend to send this

PS.: I didn't verify any media driver inside staging.

Version 2:

- Added other USB drivers that are out of dvb-usb. After this series, all drivers will use kmalloc'ed buffers, although I won't doubt that some implementations may still have issues.

- Be sure that, on all places where it is using a buffer allocated at the dvb-usb state structs, they'll be protected by some mutex. On some such cases, there was already a mutex at the DVB core. So, I didn't need to add a new one. Thanks to Antti that reminded me about such need.

Mauro Carvalho Chehab (31):
af9005: don't do DMA on stack
cinergyT2-core: don't do DMA on stack
cinergyT2-core: handle error code on RC query
cinergyT2-fe: cache stats at cinergyt2_fe_read_status()
cinergyT2-fe: don't do DMA on stack
cxusb: don't do DMA on stack
dib0700: be sure that dib0700_ctrl_rd() users can do DMA
dib0700_core: don't use stack on I2C reads
dibusb: don't do DMA on stack
dibusb: handle error code on RC query
digitv: don't do DMA on stack
dtt200u-fe: don't keep waiting for lock at set_frontend()
dtt200u-fe: don't do DMA on stack
dtt200u-fe: handle errors on USB control messages
dtt200u: don't do DMA on stack
dtt200u: handle USB control message errors
dtv5100: don't do DMA on stack
gp8psk: don't do DMA on stack
gp8psk: don't go past the buffer size
nova-t-usb2: don't do DMA on stack
pctv452e: don't do DMA on stack
pctv452e: don't call BUG_ON() on non-fatal error
technisat-usb2: use DMA buffers for I2C transfers
dvb-usb: warn if return value for USB read/write routines is not
checked
nova-t-usb2: handle error code on RC query
dw2102: return error if su3000_power_ctrl() fails
digitv: handle error code on RC query
cpia2_usb: don't use stack for DMA
s2255drv: don't use stack for DMA
stk-webcam: don't use stack for DMA
flexcop-usb: don't use stack for DMA

 drivers/media/usb/b2c2/flexcop-usb.c        | 105 +++++----
 drivers/media/usb/b2c2/flexcop-usb.h        |   4 +
 drivers/media/usb/cpia2/cpia2_usb.c         |  32 ++-
 drivers/media/usb/dvb-usb/af9005.c          | 317 ++++++++++++++++------------
 drivers/media/usb/dvb-usb/cinergyT2-core.c  |  90 +++++---
 drivers/media/usb/dvb-usb/cinergyT2-fe.c    | 100 ++++-----
 drivers/media/usb/dvb-usb/cxusb.c           |  62 +++---
 drivers/media/usb/dvb-usb/cxusb.h           |   6 +
 drivers/media/usb/dvb-usb/dib0700_core.c    |  31 ++-
 drivers/media/usb/dvb-usb/dib0700_devices.c |  25 +--
 drivers/media/usb/dvb-usb/dibusb-common.c   | 113 +++++++---
 drivers/media/usb/dvb-usb/dibusb.h          |   3 +
 drivers/media/usb/dvb-usb/digitv.c          |  26 ++-
 drivers/media/usb/dvb-usb/digitv.h          |   3 +
 drivers/media/usb/dvb-usb/dtt200u-fe.c      | 128 +++++++----
 drivers/media/usb/dvb-usb/dtt200u.c         | 120 ++++++++---
 drivers/media/usb/dvb-usb/dtv5100.c         |  10 +-
 drivers/media/usb/dvb-usb/dvb-usb.h         |   6 +-
 drivers/media/usb/dvb-usb/dw2102.c          |   2 +-
 drivers/media/usb/dvb-usb/gp8psk.c          |  25 ++-
 drivers/media/usb/dvb-usb/nova-t-usb2.c     |  25 ++-
 drivers/media/usb/dvb-usb/pctv452e.c        | 136 +++++++-----
 drivers/media/usb/dvb-usb/technisat-usb2.c  |  16 +-
 drivers/media/usb/s2255/s2255drv.c          |  15 +-
 drivers/media/usb/stkwebcam/stk-webcam.c    |  16 +-
 25 files changed, 918 insertions(+), 498 deletions(-)
Signature · 1 line
2.7.4