Setting the UVC gadget with configfs and then reloading UDC controler driver (pxa27x_udc) causes kernel to fail. UDC subsystem was patched only in decreasing maxpacket size for UVC, addition of more predefined endpoints for pxa27x_udc and addition of some debugging pr_info. Practically same behaviour was observed on 4.7.0 too. Script: modprobe udc-core modprobe pxa27x-udc modprobe libcomposite modprobe usb_f_uvc mkdir -p /tmp/udc cd /tmp/udc mount none /tmp/udc -t configfs mkdir -p usb_gadget/gcam cd usb_gadget/gcam mkdir -p configs/c.1 mkdir -p functions/uvc.usb0 mkdir -p strings/0x409 mkdir -p configs/c.1/strings/0x409 echo 0x1d6b > idVendor echo 0x0102 > idProduct echo 16 > bMaxPacketSize0 echo "Magician" > strings/0x409/serialnumber echo "Linux Foundation" > strings/0x409/manufacturer echo "Webcam/EEM" > strings/0x409/product echo "Video" > configs/c.1/strings/0x409/configuration echo 239 > bDeviceClass echo 2 > bDeviceSubClass echo 1 > bDeviceProtocol echo 500 > configs/c.1/MaxPower echo 0xc0 > configs/c.1/bmAttributes mkdir -p functions/uvc.usb0/streaming/mjpeg/m/240p cat <<EOF > functions/uvc.usb0/streaming/mjpeg/m/240p/dwFrameInterval 666666 1000000 5000000 EOF echo "320" > functions/uvc.usb0/streaming/mjpeg/m/240p/wWidth echo "240" > functions/uvc.usb0/streaming/mjpeg/m/240p/wHeight echo "2000000" > functions/uvc.usb0/streaming/mjpeg/m/240p/dwDefaultFrameInterval mkdir -p functions/uvc.usb0/streaming/header/h cd functions/uvc.usb0/streaming/header/h ln -s ../../mjpeg/m cd ../../class/fs ln -s ../../header/h cd ../../class/hs ln -s ../../header/h cd ../../../control mkdir header/h ln -s header/h class/fs ln -s header/h class/ss cd ../../../ ln -s functions/uvc.usb0 configs/c.1 echo pxa27x-udc > UDC rmmod pxa27x_udc modprobe pxa27x_udc Segmentation fault dmesg configfs-gadget gadget: uvc_unbind configfs-gadget gadget: uvc_function_bind kobject (c2902870): tried to init an initialized object, something is seriously wrong. CPU: 0 PID: 340 Comm: modprobe Not tainted 4.10.0-rc5+ #1 Hardware name: HTC Magician [<c000edcc>] (unwind_backtrace) from [<c000cb6c>] (show_stack+0x10/0x14) [<c000cb6c>] (show_stack) from [<c01d15a0>] (kobject_init+0x74/0x94) [<c01d15a0>] (kobject_init) from [<c02467e8>] (device_initialize+0x20/0x9c) [<c02467e8>] (device_initialize) from [<c0248970>] (device_register+0xc/0x18) [<c0248970>] (device_register) from [<bf143360>] (__video_register_device+0xdd0/0x1684 [videodev]) [<bf143360>] (__video_register_device [videodev]) from [<bf5bfc24>] (uvc_function_bind+0x324/0x470 [usb_f_uvc]) [<bf5bfc24>] (uvc_function_bind [usb_f_uvc]) from [<bf5a8974>] (usb_add_function+0x70/0x1bc [libcomposite]) [<bf5a8974>] (usb_add_function [libcomposite]) from [<bf5ac2ac>] (configfs_composite_bind+0x224/0x320 [libcomposite]) [<bf5ac2ac>] (configfs_composite_bind [libcomposite]) from [<bf593640>] (udc_bind_to_driver+0x34/0xf8 [udc_core]) [<bf593640>] (udc_bind_to_driver [udc_core]) from [<bf593f10>] (usb_add_gadget_udc_release+0x190/0x23c [udc_core]) [<bf593f10>] (usb_add_gadget_udc_release [udc_core]) from [<bf5d3790>] (pxa_udc_probe+0x238/0x320 [pxa27x_udc]) [<bf5d3790>] (pxa_udc_probe [pxa27x_udc]) from [<c024c9f8>] (platform_drv_probe+0x38/0x94) [<c024c9f8>] (platform_drv_probe) from [<c024b02c>] (driver_probe_device+0x230/0x420) [<c024b02c>] (driver_probe_device) from [<c024b300>] (__driver_attach+0xe4/0xf8) [<c024b300>] (__driver_attach) from [<c02494d4>] (bus_for_each_dev+0x58/0x88) [<c02494d4>] (bus_for_each_dev) from [<c024a4f0>] (bus_add_driver+0x148/0x234) [<c024a4f0>] (bus_add_driver) from [<c024bbbc>] (driver_register+0x78/0xf4) [<c024bbbc>] (driver_register) from [<c00096a4>] (do_one_initcall+0x48/0x19c) [<c00096a4>] (do_one_initcall) from [<c00680b0>] (do_init_module+0x54/0x37c) [<c00680b0>] (do_init_module) from [<c0062794>] (load_module+0x1c98/0x1f6c) [<c0062794>] (load_module) from [<c0062c4c>] (SyS_finit_module+0x88/0xbc) [<c0062c4c>] (SyS_finit_module) from [<c000a420>] (ret_fast_syscall+0x0/0x38) Unable to handle kernel paging request at virtual address bf5a0718 pgd = c28dc000 [bf5a0718] *pgd=a28b8811, *pte=00000000, *ppte=00000000 Internal error: Oops: 7 [#1] ARM Modules linked in: pxa27x_udc(+) usb_f_uvc videobuf2_vmalloc libcomposite udc_core ppp_deflate zlib_inflate zlib_deflate bsd_comp ppp_async ppp_generic slhc ircomm_tty ircomm configfs btusb btintel bluetooth firmware_class ads7846 max1586 pxaficp_ir soc_mediabus ohci_pxa27x irda ohci_hcd fixed snd_soc_pxa2xx spi_pxa2xx_platform snd_pxa2xx_lib snd_pcm_dmaengine snd_soc_pxa_ssp videobuf2_dma_sg usbcore snd_soc_core videobuf2_memops v4l2_common videobuf2_v4l2 i2c_pxa pwm_bl videodev backlight snd_pcm videobuf2_core usb_common snd_timer pwm_pxa i2c_core snd ssp rtc_pxa rtc_sa1100 soundcore leds_gpio htc_pasic3 led_class mfd_core pda_power [last unloaded: pxa27x_udc] CPU: 0 PID: 340 Comm: modprobe Not tainted 4.10.0-rc5+ #1 Hardware name: HTC Magician task: c3b40c00 task.stack: c33fc000 PC is at kobject_get+0x10/0xa4 LR is at get_device+0x14/0x1c pc : [<c01d16b8>] lr : [<c02461a8>] psr: a0000013 sp : c33fdbb8 ip : 00000000 fp : 00000001 r10: bf15a920 r9 : 000001bc r8 : bf15ad20 r7 : c04f900c r6 : 00000000 r5 : c2902868 r4 : bf5a06f8 r3 : c2971580 r2 : 00000000 r1 : c04730a8 r0 : bf5a06f8 Flags: NzCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment none Control: 0000397f Table: a28dc000 DAC: 00000051 Process modprobe (pid: 340, stack limit = 0xc33fc198) Stack: (0xc33fdbb8 to 0xc33fe000) dba0: bf152ee8 bf15ad20 dbc0: c2902868 c02461a8 c2971580 c0248370 00000000 00000000 00000001 c003bb2c dbe0: c2902868 2ce51e4e c2902868 c2902860 c2902868 00000000 bf152ee8 bf15ad20 ... dfe0: bee048a8 bee04898 00016490 b6e33020 60000010 00000003 00000000 00000000 [<c01d16b8>] (kobject_get) from [<c02461a8>] (get_device+0x14/0x1c) [<c02461a8>] (get_device) from [<c0248370>] (device_add+0xa4/0x550) [<c0248370>] (device_add) from [<bf143360>] (__video_register_device+0xdd0/0x1684 [videodev]) [<bf143360>] (__video_register_device [videodev]) from [<bf5bfc24>] (uvc_function_bind+0x324/0x470 [usb_f_uvc]) [<bf5bfc24>] (uvc_function_bind [usb_f_uvc]) from [<bf5a8974>] (usb_add_function+0x70/0x1bc [libcomposite]) [<bf5a8974>] (usb_add_function [libcomposite]) from [<bf5ac2ac>] (configfs_composite_bind+0x224/0x320 [libcomposite]) [<bf5ac2ac>] (configfs_composite_bind [libcomposite]) from [<bf593640>] (udc_bind_to_driver+0x34/0xf8 [udc_core]) [<bf593640>] (udc_bind_to_driver [udc_core]) from [<bf593f10>] (usb_add_gadget_udc_release+0x190/0x23c [udc_core]) [<bf593f10>] (usb_add_gadget_udc_release [udc_core]) from [<bf5d3790>] (pxa_udc_probe+0x238/0x320 [pxa27x_udc]) [<bf5d3790>] (pxa_udc_probe [pxa27x_udc]) from [<c024c9f8>] (platform_drv_probe+0x38/0x94) [<c024c9f8>] (platform_drv_probe) from [<c024b02c>] (driver_probe_device+0x230/0x420) [<c024b02c>] (driver_probe_device) from [<c024b300>] (__driver_attach+0xe4/0xf8) [<c024b300>] (__driver_attach) from [<c02494d4>] (bus_for_each_dev+0x58/0x88) [<c02494d4>] (bus_for_each_dev) from [<c024a4f0>] (bus_add_driver+0x148/0x234) [<c024a4f0>] (bus_add_driver) from [<c024bbbc>] (driver_register+0x78/0xf4) [<c024bbbc>] (driver_register) from [<c00096a4>] (do_one_initcall+0x48/0x19c) [<c00096a4>] (do_one_initcall) from [<c00680b0>] (do_init_module+0x54/0x37c) [<c00680b0>] (do_init_module) from [<c0062794>] (load_module+0x1c98/0x1f6c) [<c0062794>] (load_module) from [<c0062c4c>] (SyS_finit_module+0x88/0xbc) [<c0062c4c>] (SyS_finit_module) from [<c000a420>] (ret_fast_syscall+0x0/0x38) Code: e92d4010 e2504000 e24dd008 0a00000b (e5d43020) ---[ end trace 113e46a0092a6b29 ]--- -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html