由于 USB 设备树,rcu_preempt 检测到嵌入式 Linux 启动停滞?

由于 USB 设备树,rcu_preempt 检测到嵌入式 Linux 启动停滞?

谁能指出正确的方向来解决(或至少调试)我在启动时遇到的这个 rcu_preempt 问题,如下面的日志信息所示?

思考该问题与“USB1”(第二个 USB 端口)的设备树配置有关,但我不确定是什么,因为第一个 USB 端口“USB0”没有此问题,并且两个端口的设备树定义相同。

这是启动时的日志记录:

[    0.932884] xhci-hcd xhci-hcd.1.auto: xHCI Host Controller
[    0.938388] xhci-hcd xhci-hcd.1.auto: new USB bus registered, assigned bus number 1
[    0.946166] xhci-hcd xhci-hcd.1.auto: hcc params 0x0238f625 hci version 0x100 quirks 0x0000000002010810
[    0.955602] xhci-hcd xhci-hcd.1.auto: irq 36, io mem 0xfe200000
[    0.961677] xhci-hcd xhci-hcd.1.auto: xHCI Host Controller
[    0.967187] xhci-hcd xhci-hcd.1.auto: new USB bus registered, assigned bus number 2
[    0.974856] xhci-hcd xhci-hcd.1.auto: Host supports USB 3.0 SuperSpeed
[    0.981927] hub 1-0:1.0: USB hub found
[    0.985712] hub 1-0:1.0: 1 port detected
[    0.990289] hub 2-0:1.0: USB hub found
[    0.994137] hub 2-0:1.0: 1 port detected
[    4.020674] Freeing initrd memory: 72488K
[   21.999957] rcu: INFO: rcu_preempt detected stalls on CPUs/tasks:
[   22.006039] rcu:     2-...0: (0 ticks this GP) idle=873/1/0x4000000000000000 softirq=89/89 fqs=2626
[   22.014902]  (detected by 3, t=5255 jiffies, g=-1059, q=16380 ncpus=4)
[   22.021421] Task dump for CPU 2:
[   22.024633] task:kworker/u8:2    state:R  running task     stack:    0 pid:   51 ppid:     2 flags:0x0000000a
[   22.034548] Workqueue: events_unbound deferred_probe_work_func
[   22.040380] Call trace:
[   22.042810]  __switch_to+0x100/0x1b0
[   22.046378]  of_get_next_child+0x40/0x78
[   22.050293]  of_platform_populate+0x70/0x130
[   22.054555]  dwc3_xlnx_probe+0x12c/0x1a0
[   22.058470]  platform_probe+0x64/0xd0
[   22.062125]  really_probe+0x150/0x3a0
[   22.065779]  __driver_probe_device+0x10c/0x180
[   22.070215]  driver_probe_device+0x38/0xe0
[   22.074304]  __device_attach_driver+0x94/0x120
[   22.078740]  bus_for_each_drv+0x74/0xc0
[   22.082568]  __device_attach+0xf0/0x1a8
[   22.086396]  device_initial_probe+0x10/0x18
[   22.090572]  bus_probe_device+0x90/0x98
[   22.094400]  deferred_probe_work_func+0x9c/0xe8
[   22.098923]  process_one_work+0x1a0/0x2f0
[   22.102925]  worker_thread+0x210/0x3f8
[   22.106666]  kthread+0x10c/0x118
[   22.109887]  ret_from_fork+0x10/0x20

这是我的 USB 相关项目的设备树:

       aliases {
                ethernet0 = &gem3;
                i2c0 = &i2c0;
                i2c1 = &i2c1;
                mmc0 = &sdhci1;
                nvmem0 = &eeprom;
                rtc0 = &rtc;
                serial0 = &uart0;
                serial1 = &uart1;
                serial2 = &dcc;
                spi0 = &qspi;
                usb0 = &usb0;
                usb1 = &usb1;
        };
 
....
 
        pinctrl_usb0_default: usb0-default {
                mux {
                        groups = "usb0_0_grp";
                        function = "usb0";
                };
 
                conf {
                        groups = "usb0_0_grp";
                        slew-rate = <SLEW_RATE_SLOW>;
                        power-source = <IO_STANDARD_LVCMOS18>;
                };
 
                conf-rx {
                        pins = "MIO52", "MIO53", "MIO55";
                        bias-high-impedance;
                };
 
                conf-tx {
                        pins = "MIO54", "MIO56", "MIO57", "MIO58", "MIO59",
                               "MIO60", "MIO61", "MIO62", "MIO63";
                        bias-disable;
                };
        };
 
        pinctrl_usb1_default: usb1-default {
                mux {
                        groups = "usb1_0_grp";
                        function = "usb1";
                };
 
                conf {
                        groups = "usb1_0_grp";
                        slew-rate = <SLEW_RATE_SLOW>;
                        power-source = <IO_STANDARD_LVCMOS18>;
                };
 
                conf-rx {
                        pins = "MIO64", "MIO65", "MIO67";
                        bias-high-impedance;
                };
 
                conf-tx {
                        pins = "MIO66", "MIO68", "MIO69", "MIO70", "MIO71",
                               "MIO72", "MIO73", "MIO74", "MIO75";
                        bias-disable;
                };
        };
 
....
 
&usb0 {
        status = "okay";
        clocks = <0x3 0x20>;
        clock-names = "bus_clk";
};
 
&dwc3_0 {
        /delete-property/ phy-names ;
        /delete-property/ phys ;
        snps,refclk_fladj;
        snps,enable_guctl1_resume_quirk;
        snps,enable_guctl1_ipd_quirk;
        snps,xhci-stream-quirk;
        maximum-speed = "high-speed";
        snps,dis_u2_susphy_quirk;
        snps,dis_u3_susphy_quirk;
        snps,usb3_lpm_capable;
        status = "okay";
        dr_mode = "host";
};
 
&usb1 {
        status = "okay";
        clocks = <0x3 0x20>;
        clock-names = "bus_clk";
};
 
&dwc3_1 {
        /delete-property/ phy-names ;
        /delete-property/ phys ;
        snps,refclk_fladj;
        snps,enable_guctl1_resume_quirk;
        snps,enable_guctl1_ipd_quirk;
        snps,xhci-stream-quirk;
        maximum-speed = "high-speed";
        snps,dis_u2_susphy_quirk;
        snps,dis_u3_susphy_quirk;
        snps,usb3_lpm_capable;
        status = "okay";
        dr_mode = "host";
};

相关内容