Such a simple code but get mistake…
My source code is as simple as usual
...in fbusb_probe for a new usb device... u8 buf[6] = {0x00, 0x2c, 0x00, 0xb8, 0x0b, 0x00}; usb_control_msg(par->udev, usb_sndctrlpipe(par->udev, 0), 0xb0, USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE, 0, 0, buf, 6, 100); ...
every parameter should be normal, but once the code runs at this position, it crashed…
[ 71.998261] ------------[ cut here ]------------ [ 72.002980] WARNING: CPU: 0 PID: 347 at drivers/usb/core/hcd.c:1598 usb_hcd_map_urb_for_dma+0x3f4/0x524 [ 72.012519] transfer buffer is on stack [ 72.016416] Modules linked in: pppoe ppp_async pppox ppp_generic nf_conntrack_ipv6 lzo iptable_nat ipt_REJECT ipt_MASQUERADE xt_time xt_tcpudp xt_state xt_nat xt_multiport xt_mark xt_mac xt_limit xt_conntrack xt_comment xt_TCPMSS xt_REDIRECT xt_LOG xt_FLOWOFFLOAD slhc nf_reject_ipv4 nf_nat_redirect nf_nat_masquerade_ipv4 nf_conntrack_ipv4 nf_nat_ipv4 nf_nat nf_log_ipv4 nf_flow_table_hw nf_flow_table nf_defrag_ipv6 nf_defrag_ipv4 nf_conntrack_rtcache nf_conntrack lzo_decompress lzo_compress iptable_mangle iptable_filter ip_tables crc_ccitt mt7628 i2c_mt7621 snd_soc_core ralink_gdma virt_dma i2c_dev ip6t_REJECT nf_reject_ipv6 nf_log_ipv6 nf_log_common ip6table_mangle ip6table_filter ip6_tables x_tables snd_compress snd_pcm_oss snd_mixer_oss snd_pcm snd_timer snd_rawmidi snd_seq_device snd_hwdep snd [ 72.088165] input_core soundcore vfat fat nls_utf8 nls_iso8859_1 nls_cp437 regmap_spi regmap_i2c i2c_core crypto_acompress mmc_block usb_storage mtk_sd mmc_core leds_gpio ohci_platform ohci_hcd ehci_platform sd_mod scsi_mod ehci_hcd gpio_button_hotplug [ 72.111025] CPU: 0 PID: 347 Comm: kworker/0:3 Not tainted 4.14.50 #0 [ 72.117496] Workqueue: usb_hub_wq hub_event [ 72.121735] Stack : 86846000 804635c8 86846610 8004e674 87e2b454 80447aa7 803f1944 0000015b [ 72.130235] 803f18b0 87f5187c 86846000 8004f350 86846610 87fd3915 87f51858 24c668a7 [ 72.138735] 00000000 00000000 00000000 000000c2 00000000 65756575 7375203a 75685f62 [ 72.147234] 00000001 00000000 00000040 63686520 00000000 00000000 802279e8 80412a8c [ 72.155732] 00000009 0000063e 86846000 804635c8 00000002 801db240 00000000 804a0000 [ 72.164288] ... [ 72.166788] Call Trace: [ 72.169290] [<8000e424>] show_stack+0x74/0x104 [ 72.173818] [<800245a0>] __warn+0x110/0x118 [ 72.178088] [<800245d8>] warn_slowpath_fmt+0x30/0x3c [ 72.183145] [<802279e8>] usb_hcd_map_urb_for_dma+0x3f4/0x524 [ 72.188899] [<80228d30>] usb_hcd_submit_urb+0x79c/0x7d0 [ 72.194203] [<8022a2c0>] usb_start_wait_urb+0x5c/0xec [ 72.199338] [<8022a400>] usb_control_msg+0xb0/0x114 [ 72.204296] [<801c4cfc>] fbusb_probe+0x260/0x2bc [ 72.208995] [<8022dd48>] usb_probe_interface+0x1cc/0x1f4 [ 72.214399] [<801e9824>] driver_probe_device+0x1fc/0x2c4 [ 72.219799] [<801e7c84>] bus_for_each_drv+0x9c/0xac [ 72.224749] [<801e95d4>] __device_attach+0xac/0xe4 [ 72.229621] [<801e8a84>] bus_probe_device+0x3c/0xb0 [ 72.234570] [<801e6d68>] device_add+0x444/0x550 [ 72.239178] [<8022cb38>] usb_set_configuration+0x5e8/0x634 [ 72.244756] [<802359a0>] generic_probe+0x6c/0x9c [ 72.249452] [<801e9824>] driver_probe_device+0x1fc/0x2c4 [ 72.254841] [<801e7c84>] bus_for_each_drv+0x9c/0xac [ 72.259800] [<801e95d4>] __device_attach+0xac/0xe4 [ 72.264661] [<801e8a84>] bus_probe_device+0x3c/0xb0 [ 72.269619] [<801e6d68>] device_add+0x444/0x550 [ 72.274221] [<802246ec>] usb_new_device+0x218/0x344 [ 72.279182] [<802256bc>] hub_event+0xc48/0xe84 [ 72.283705] [<800371a4>] process_one_work+0x1e8/0x318 [ 72.288843] [<80037fc8>] worker_thread+0x2f4/0x424 [ 72.293708] [<8003c940>] kthread+0x130/0x138 [ 72.298054] [<800092d8>] ret_from_kernel_thread+0x14/0x1c [ 72.303531] ---[ end trace e5f3e34a9f1d79f7 ]--- [ 72.308231] ------------[ cut here ]------------ [ 72.312928] WARNING: CPU: 0 PID: 347 at drivers/usb/core/hcd.c:1595 usb_hcd_map_urb_for_dma+0x3f4/0x524 [ 72.322455] transfer buffer not dma capable [ 72.326696] Modules linked in: pppoe ppp_async pppox ppp_generic nf_conntrack_ipv6 lzo iptable_nat ipt_REJECT ipt_MASQUERADE xt_time xt_tcpudp xt_state xt_nat xt_multiport xt_mark xt_mac xt_limit xt_conntrack xt_comment xt_TCPMSS xt_REDIRECT xt_LOG xt_FLOWOFFLOAD slhc nf_reject_ipv4 nf_nat_redirect nf_nat_masquerade_ipv4 nf_conntrack_ipv4 nf_nat_ipv4 nf_nat nf_log_ipv4 nf_flow_table_hw nf_flow_table nf_defrag_ipv6 nf_defrag_ipv4 nf_conntrack_rtcache nf_conntrack lzo_decompress lzo_compress iptable_mangle iptable_filter ip_tables crc_ccitt mt7628 i2c_mt7621 snd_soc_core ralink_gdma virt_dma i2c_dev ip6t_REJECT nf_reject_ipv6 nf_log_ipv6 nf_log_common ip6table_mangle ip6table_filter ip6_tables x_tables snd_compress snd_pcm_oss snd_mixer_oss snd_pcm snd_timer snd_rawmidi snd_seq_device snd_hwdep snd [ 72.398434] input_core soundcore vfat fat nls_utf8 nls_iso8859_1 nls_cp437 regmap_spi regmap_i2c i2c_core crypto_acompress mmc_block usb_storage mtk_sd mmc_core leds_gpio ohci_platform ohci_hcd ehci_platform sd_mod scsi_mod ehci_hcd gpio_button_hotplug [ 72.421261] CPU: 0 PID: 347 Comm: kworker/0:3 Tainted: G W 4.14.50 #0 [ 72.428952] Workqueue: usb_hub_wq hub_event [ 72.433200] Stack : 86846000 804635c8 86846610 8004e674 87e2b454 80447aa7 803f1944 0000015b [ 72.441699] 803f18b0 87f518b4 86846000 8004f350 86846610 87fd3915 87f51890 24c668a7 [ 72.450196] 00000000 00000000 00000000 000000ec 00000000 65756575 7375203a 75685f62 [ 72.458691] 00000001 00000000 f8000000 63686520 00000000 00000000 802279e8 80412a8c [ 72.467187] 00000009 0000063b 86846000 804635c8 00000002 801db240 00000000 804a0000 [ 72.475671] ... [ 72.478159] Call Trace: [ 72.480657] [<8000e424>] show_stack+0x74/0x104 [ 72.485183] [<800245a0>] __warn+0x110/0x118 [ 72.489441] [<800245d8>] warn_slowpath_fmt+0x30/0x3c [ 72.494490] [<802279e8>] usb_hcd_map_urb_for_dma+0x3f4/0x524 [ 72.500243] [<80228d30>] usb_hcd_submit_urb+0x79c/0x7d0 [ 72.505546] [<8022a2c0>] usb_start_wait_urb+0x5c/0xec [ 72.510688] [<801c4d24>] fbusb_probe+0x288/0x2bc [ 72.515378] [<8022dd48>] usb_probe_interface+0x1cc/0x1f4 [ 72.520788] [<801e9824>] driver_probe_device+0x1fc/0x2c4 [ 72.526186] [<801e7c84>] bus_for_each_drv+0x9c/0xac [ 72.531135] [<801e95d4>] __device_attach+0xac/0xe4 [ 72.536007] [<801e8a84>] bus_probe_device+0x3c/0xb0 [ 72.540957] [<801e6d68>] device_add+0x444/0x550 [ 72.545554] [<8022cb38>] usb_set_configuration+0x5e8/0x634 [ 72.551139] [<802359a0>] generic_probe+0x6c/0x9c [ 72.555838] [<801e9824>] driver_probe_device+0x1fc/0x2c4 [ 72.561227] [<801e7c84>] bus_for_each_drv+0x9c/0xac [ 72.566186] [<801e95d4>] __device_attach+0xac/0xe4 [ 72.571058] [<801e8a84>] bus_probe_device+0x3c/0xb0 [ 72.576014] [<801e6d68>] device_add+0x444/0x550 [ 72.580615] [<802246ec>] usb_new_device+0x218/0x344 [ 72.585564] [<802256bc>] hub_event+0xc48/0xe84 [ 72.590103] [<800371a4>] process_one_work+0x1e8/0x318 [ 72.595233] [<80037fc8>] worker_thread+0x2f4/0x424 [ 72.600108] [<8003c940>] kthread+0x130/0x138 [ 72.604445] [<800092d8>] ret_from_kernel_thread+0x14/0x1c [ 72.609929] ---[ end trace e5f3e34a9f1d79f8 ]---
No idea what is wrong…have to read more code and compare. At least usb-storage is working normal, if that works, it means this usb driver should be no big issue.
fbusb is just a USB device that to map a virtual frame buffer, I thought it is easy to be done 🙂