This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Beaglebone ethernet fails if kernel is compiled with CONFIG_PREEMPT=y

Using 3.1 or 3.2 kernels, the ethernet stops working if I compile a kernel with CONFIG_PREEMPT.

The system still boots, and I get a serial prompt.  I cannot ping an external node.  From an external node I cannot ping the beaglebone.  If I change just that one setting and recompile, everything works.

I need the CONFIG_PREEMPT to work so I can control factories.

Thanks,

Dick

  • Pinging out using serial port stalls.  After 20 minutes, I hit control-C which terminated ping program.  Then did a dmesg and get this:

    [    5.304986] PHY: 0:00 - Link is Up - 100/Full
    [    5.305216] ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
    [   16.024368] eth0: no IPv6 routers present
    [  276.054412] ------------[ cut here ]------------
    [  276.054470] WARNING: at /tmp/linux-am33x/net/sched/sch_generic.c:255 dev_watchdog+0xe9/0x1a6()
    [  276.054491] NETDEV WATCHDOG: eth0 (cpsw): transmit queue 0 timed out
    [  276.054506] Modules linked in: ipv6
    [  276.054573] [<c000f7cf>] (unwind_backtrace+0x1/0x8a) from [<c0026967>] (warn_slowpath_common+0x33/0x48)
    [  276.054611] [<c0026967>] (warn_slowpath_common+0x33/0x48) from [<c00269cd>] (warn_slowpath_fmt+0x1b/0x24)
    [  276.054647] [<c00269cd>] (warn_slowpath_fmt+0x1b/0x24) from [<c020db9b>] (dev_watchdog+0xe9/0x1a6)
    [  276.054695] [<c020db9b>] (dev_watchdog+0xe9/0x1a6) from [<c002e04d>] (run_timer_softirq+0x103/0x18e)
    [  276.054732] [<c002e04d>] (run_timer_softirq+0x103/0x18e) from [<c002a65f>] (__do_softirq+0x65/0xc6)
    [  276.054766] [<c002a65f>] (__do_softirq+0x65/0xc6) from [<c002a943>] (irq_exit+0x27/0x68)
    [  276.054806] [<c002a943>] (irq_exit+0x27/0x68) from [<c000cbdf>] (handle_IRQ+0x3b/0x54)
    [  276.054840] [<c000cbdf>] (handle_IRQ+0x3b/0x54) from [<c000bed1>] (__irq_svc+0x31/0xa8)
    [  276.054874] [<c000bed1>] (__irq_svc+0x31/0xa8) from [<c000cc8a>] (default_idle+0x1a/0x1c)
    [  276.054908] [<c000cc8a>] (default_idle+0x1a/0x1c) from [<c000cd79>] (cpu_idle+0x29/0x68)
    [  276.054950] [<c000cd79>] (cpu_idle+0x29/0x68) from [<c03d54eb>] (start_kernel+0x1fb/0x254)
    [  276.054971] ---[ end trace 656e7ef4543df64d ]---


  • I have the same problem with kernel 3.2.0. Did you get any solution?

  • No, but its only been 13 months.

    Please post your results using a newer kernel.

  • I have rebuild 3.2.42 kernel, with CONFIG_PREEMPT = FALSE. 

    The GPIO interrupt latency with 3.2.0 (with or without CONFIG_PREEMPT) was between 2us and 180us, with lots of hits around 800us.

    I don't know why, but with 3.2.42 (without CONFIG_PREEMPT) latency is now between 2us and 20us (with a maximum at 4us). Only if there are strong flashdisk accesss there are a few hits with more latency. This is enough for my application, so I will not test Preemt or RT patches.