On 08.11.2016 07:39, Dave Airlie wrote: > From: Dave Airlie <airlied@xxxxxxxxxx> > > Thou shall not send control msg from the stack, > does that mean I can send it from the RO memory area? > > Reported-by: poma > Signed-off-by: Dave Airlie <airlied@xxxxxxxxxx> > --- > drivers/gpu/drm/udl/udl_main.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > > diff --git a/drivers/gpu/drm/udl/udl_main.c b/drivers/gpu/drm/udl/udl_main.c > index 29f0207..0798bcc 100644 > --- a/drivers/gpu/drm/udl/udl_main.c > +++ b/drivers/gpu/drm/udl/udl_main.c > @@ -98,10 +98,10 @@ static int udl_parse_vendor_descriptor(struct drm_device *dev, > static int udl_select_std_channel(struct udl_device *udl) > { > int ret; > - u8 set_def_chn[] = {0x57, 0xCD, 0xDC, 0xA7, > - 0x1C, 0x88, 0x5E, 0x15, > - 0x60, 0xFE, 0xC6, 0x97, > - 0x16, 0x3D, 0x47, 0xF2}; > + static const u8 set_def_chn[] = {0x57, 0xCD, 0xDC, 0xA7, > + 0x1C, 0x88, 0x5E, 0x15, > + 0x60, 0xFE, 0xC6, 0x97, > + 0x16, 0x3D, 0x47, 0xF2}; > > ret = usb_control_msg(udl->udev, > usb_sndctrlpipe(udl->udev, 0), > There is a compile time WARN: $ make drivers/gpu/drm/udl/udl.ko ... CC [M] drivers/gpu/drm/udl/udl_fb.o drivers/gpu/drm/udl/udl_main.c: In function ‘udl_select_std_channel’: drivers/gpu/drm/udl/udl_main.c:110:10: warning: passing argument 7 of ‘usb_control_msg’ discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers] set_def_chn, sizeof(set_def_chn), ^~~~~~~~~~~ In file included from drivers/gpu/drm/udl/udl_drv.h:17:0, from drivers/gpu/drm/udl/udl_main.c:14: ./include/linux/usb.h:1685:12: note: expected ‘void *’ but argument is of type ‘const u8 * {aka const unsigned char *}’ extern int usb_control_msg(struct usb_device *dev, unsigned int pipe, ^~~~~~~~~~~~~~~ CC [M] drivers/gpu/drm/udl/udl_transfer.o CC [M] drivers/gpu/drm/udl/udl_gem.o CC [M] drivers/gpu/drm/udl/udl_dmabuf.o LD [M] drivers/gpu/drm/udl/udl.o MODPOST 1 modules CC drivers/gpu/drm/udl/udl.mod.o LD [M] drivers/gpu/drm/udl/udl.ko Also there is a flood of waiting for request block: $ dmesg | grep -P '(?=.*drm)(?=.*urb)' [ 72.482211] [drm] wait for urb interrupted: ffffffc2 available: 0 [ 75.552227] [drm] wait for urb interrupted: ffffffc2 available: 0 [ 76.576146] [drm] wait for urb interrupted: ffffffc2 available: 0 ... [ 100.192153] [drm] wait for urb interrupted: ffffffc2 available: 0 [ 101.216166] [drm] wait for urb interrupted: ffffffc2 available: 0 [ 102.240141] [drm] wait for urb interrupted: ffffffc2 available: 0 ... [ 200.416146] [drm] wait for urb interrupted: ffffffc2 available: 0 [ 201.440208] [drm] wait for urb interrupted: ffffffc2 available: 0 [ 204.384162] [drm] wait for urb interrupted: ffffffc2 available: 0 ... [ 300.448151] [drm] wait for urb interrupted: ffffffc2 available: 0 [ 301.920166] [drm] wait for urb interrupted: ffffffc2 available: 0 [ 304.416147] [drm] wait for urb interrupted: ffffffc2 available: 0 ... [ 370.016157] [drm] wait for urb interrupted: ffffffc2 available: 0 ... And finally, Master Chef's special, the machine is KO'd due to trying out a module reload. _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel