Re: Preempt-RT on OMAP3?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Here are some of the crashes I've seen. Warning - I'm new to -rt and
to the linux-omap tree, so I'll apologize in advance if these are just
a result of me missing something obvious.

Context: using USB-gadget ethernet (g_ether) over musb (configured as
just peripheral, not OTG). Most of the time it works, but after a
while, or when it encounters a large packet (e.g fping -b30000) it
crashes like so (apparently something to do with receive DMA usage).
Although the fping -b case is kindof pathological, I've seen the same
crash when ssh/scping files across to the board, so it does occur in
real usage.


Unable to handle kernel NULL pointer dereference at virtual address 00000000
pgd = c0004000
[00000000] *pgd=00000000
Internal error: Oops: 817 [#1] PREEMPT
Modules linked in: g_ether ftdi_sio usbserial ipv6
CPU: 0    Not tainted  (2.6.29-rt1-omap1-g7648048 #1)
PC is at dma_channel_program+0x90/0x108
LR is at rxstate+0xc8/0x1b4
pc : [<c024c7c0>]    lr : [<c024b760>]    psr: 60000013
sp : cf93be10  ip : cf93be58  fp : cf93be54
r10: 00000000  r9 : 00000000  r8 : 8fa1d002
r7 : 00000200  r6 : cf98b668  r5 : cf98b668  r4 : cf98b600
r3 : 00000000  r2 : 00000000  r1 : 00000000  r0 : cf98b668
Flags: nZCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment kernel
Control: 10c5387d  Table: 8fa90019  DAC: 00000017
Process IRQ-93 (pid: 191, stack limit = 0xcf93a2e8)
Stack: (0xcf93be10 to 0xcf93c000)
be00:                                     bf062078 c024b8f4 00000000 cf05f3e0
be20: cf85f8e0 cf85f8e0 00000000 cf98b600 cf85f5e0 cf83b000 00000000 00002003
be40: d80ab110 00000001 cf93be94 cf93be58 c024b760 c024c73c 00000000 c02f8d18
be60: cf83b000 60000113 cf93a000 00002003 cf85f5e0 cf83b000 00000003 cf98b668
be80: d80ab110 00000001 cf93bedc cf93be98 c024bfc0 c024b6a4 00000003 00000002
bea0: cf93a000 cf94537c cf83b19c cf83b1d8 c004d80c cf98b650 00000002 00000001
bec0: 8fa1dc02 d80ab000 cf83b000 cf98b600 cf93beec cf93bee0 c02489e4 c024bc9c
bee0: cf93bf3c cf93bef0 c024c988 c024899c 00000002 cf820000 ffffffff c040caa4
bf00: af2001b4 cf94537c d80ab060 00000004 c006b43c c03ebbc8 cf93a000 cf8c09e0
bf20: 0000005d 00000000 0000005d 00000000 cf93bf74 cf93bf40 c007cef0 c024c844
bf40: cfa29e40 00000000 cf93bf84 c03ebbc8 cf93a000 0000005d 0000005d cf8c09e0
bf60: c03ebc20 c04186a4 cf93bf9c cf93bf78 c007d33c c007ce30 c03ebbc8 cf93a000
bf80: 0000005d 00000000 60000113 c03ebc08 cf93bfd4 cf93bfa0 c007d45c c007d2dc
bfa0: 00000000 00000032 00000000 cf93a000 c03ebbc8 c007d390 00000000 00000000
bfc0: 00000000 00000000 cf93bff4 cf93bfd8 c0065b54 c007d39c 00000000 00000000
bfe0: 00000000 00000000 00000000 cf93bff8 c0053b28 c0065b04 017bee08 08f7ef39
Backtrace:
[<c024c730>] (dma_channel_program+0x0/0x108) from [<c024b760>]
(rxstate+0xc8/0x1b4)
[<c024b698>] (rxstate+0x0/0x1b4) from [<c024bfc0>] (musb_g_rx+0x330/0x3ac)
[<c024bc90>] (musb_g_rx+0x0/0x3ac) from [<c02489e4>]
(musb_dma_completion+0x54/0x58)
[<c0248990>] (musb_dma_completion+0x0/0x58) from [<c024c988>]
(dma_controller_irq+0x150/0x18c)
[<c024c838>] (dma_controller_irq+0x0/0x18c) from [<c007cef0>]
(handle_IRQ_event+0xcc/0x1d8)
[<c007ce24>] (handle_IRQ_event+0x0/0x1d8) from [<c007d33c>]
(thread_simple_irq+0x6c/0xc0)
[<c007d2d0>] (thread_simple_irq+0x0/0xc0) from [<c007d45c>] (do_irqd+0xcc/0x334)
[<c007d390>] (do_irqd+0x0/0x334) from [<c0065b54>] (kthread+0x5c/0x94)
[<c0065af8>] (kthread+0x0/0x94) from [<c0053b28>] (do_exit+0x0/0x73c)
 r6:00000000 r5:00000000 r4:00000000
Code: 13a03000 03a03001 1a000002 e3a03000 (e5833000)
---[ end trace af756bf803843539 ]---


After the above crash has been seen, reboot/shutdown or rmmod do this:


Unable to handle kernel NULL pointer dereference at virtual address 00000000
pgd = cf054000
[00000000] *pgd=8f322031, *pte=00000000, *ppte=00000000
Internal error: Oops: 17 [#2] PREEMPT
Modules linked in: ftdi_sio usbserial ipv6
CPU: 0    Tainted: G      D     (2.6.29-rt1-omap1-g8dde6bd-dirty #1)
PC is at plist_add+0x5c/0xb0
LR is at task_blocks_on_rt_mutex+0x144/0x204
pc : [<c01bd098>]    lr : [<c0074690>]    psr: 60000093
sp : cfb6dd58  ip : cfb6dd70  fp : cfb6dd6c
r10: cfb6ddbc  r9 : 60000013  r8 : cfb6ddb0
r7 : cf1d0d60  r6 : cfb6ddb0  r5 : cf1d111c  r4 : cfb6ddc4
r3 : fffffffc  r2 : cfb6ddd0  r1 : cf1d111c  r0 : fffffffc
Flags: nZCv  IRQs off  FIQs on  Mode SVC_32  ISA ARM  Segment user
Control: 10c5387d  Table: 8f054019  DAC: 00000015
Process reboot (pid: 1335, stack limit = 0xcfb6c2e8)
Stack: (0xcfb6dd58 to 0xcfb6e000)
dd40:                                                       cfb6c000 cf1d111c
dd60: cfb6ddac cfb6dd70 c0074690 c01bd048 00000001 c040e320 00000000 cf83b0d0
dd80: cfa144e0 cf83b0d0 60000013 cfb6c000 0000006c 00000000 00000000 00000000
dda0: cfb6de0c cfb6ddb0 c02f55ac c0074558 00000078 cf83b0d0 cf83b0d0 cf83b0d8
ddc0: cf83b0d8 00000078 cfb6ddc8 cfb6ddc8 cfb6ddd0 cfb6ddd0 cfaba620 cf83b0d0
dde0: 0000006c cf83b0d0 00000000 fee1dead 0000006c c002d0c4 cfb6c000 00000000
de00: cfb6de1c cfb6de10 c02f60f4 c02f54d4 cfb6de34 cfb6de20 c0241964 c02f60c0
de20: c03e1148 c041eaa8 cfb6de44 cfb6de38 c01ee7a0 c0241950 cfb6de5c cfb6de48
de40: c01e9f0c c01ee78c 00000000 28121969 cfb6de6c cfb6de60 c00604dc c01e9eb8
de60: cfb6de84 cfb6de70 c0060530 c00604bc 01234567 01234567 cfb6dfa4 cfb6de88
de80: c00606ec c0060524 cfb6de84 00000000 c00bfa7c cf525e30 cf525e30 c03f0c2c
dea0: 00200200 00100100 cfb6decc cfb6deb8 c00bbb7c c00a7dc4 cfb6dee4 cf525e30
dec0: cfb6dee4 cfb6ded0 c00bbbcc c00bbb30 cf525e30 cf401548 cfb6defc cfb6dee8
dee0: c00bbc3c cf80e688 cf80e620 cf4078a0 cfb6df24 cfb6df00 c00c2f48 c0074a04
df00: c007ff60 cf1aea40 00000008 cf4078a0 cf525e30 cf80e620 cfb6df54 cfb6df28
df20: c00ad63c c00c2f28 00000000 c02f5420 cfb6df5c cf1aea40 00000000 cf881b00
df40: cf1aea40 c002d0c4 cfb6df64 cfb6df58 c00ad67c c00ad480 cfb6df84 cfb6df68
df60: c00aa328 c00ad658 cfb6df84 00000003 cf881b00 cf881b24 cfb6dfa4 cfb6df88
df80: c00aa3dc c00aa2b8 00000000 00000001 00000004 00000058 00000000 cfb6dfa8
dfa0: c002cf40 c0060588 00000000 00000001 fee1dead 28121969 01234567 0000006c
dfc0: 00000000 00000001 00000004 00000058 00000001 00000001 00000000 00000001
dfe0: 400d8620 befd2cc0 00009210 400d8638 60000010 fee1dead cfb6dff4 00000000
Backtrace:
[<c01bd03c>] (plist_add+0x0/0xb0) from [<c0074690>]
(task_blocks_on_rt_mutex+0x144/0x204)
 r5:cf1d111c r4:cfb6c000
[<c007454c>] (task_blocks_on_rt_mutex+0x0/0x204) from [<c02f55ac>]
(rt_spin_lock_slowlock+0xe4/0x27c)
[<c02f54c8>] (rt_spin_lock_slowlock+0x0/0x27c) from [<c02f60f4>]
(rt_spin_lock+0x40/0x44)
[<c02f60b4>] (rt_spin_lock+0x0/0x44) from [<c0241964>] (musb_shutdown+0x20/0x68)
[<c0241944>] (musb_shutdown+0x0/0x68) from [<c01ee7a0>]
(platform_drv_shutdown+0x20/0x24)
 r5:c041eaa8 r4:c03e1148
[<c01ee780>] (platform_drv_shutdown+0x0/0x24) from [<c01e9f0c>]
(device_shutdown+0x60/0xb8)
[<c01e9eac>] (device_shutdown+0x0/0xb8) from [<c00604dc>]
(kernel_restart_prepare+0x2c/0x3c)
 r5:28121969 r4:00000000
[<c00604b0>] (kernel_restart_prepare+0x0/0x3c) from [<c0060530>]
(kernel_restart+0x18/0x4c)
[<c0060518>] (kernel_restart+0x0/0x4c) from [<c00606ec>]
(sys_reboot+0x170/0x1dc)
 r4:01234567
[<c006057c>] (sys_reboot+0x0/0x1dc) from [<c002cf40>]
(ret_fast_syscall+0x0/0x2c)
 r7:00000058 r6:00000004 r5:00000001 r4:00000000
Code: ba000007 e1a00001 0a00000c e1a03000 (e5b32004)
---[ end trace d7d34d233af69b06 ]---
note: reboot[1335] exited with preempt_count 2
Segmentation fault

Finally, there is this crash (when musb is configured as OTG). When
you try to write to several of the sysfs entries, e.g.
/sys/devices/platform/musb_hdrc/mode, the driver crashes. Note that
this one doesn't appear to be limited to just -rt.

root@overo-grc:/sys/devices/platform/musb_hdrc# echo host > mode
Unable to handle kernel NULL pointer dereference at virtual address 00000000
pgd = cfbe4000
[00000000] *pgd=8fbaf031, *pte=00000000, *ppte=00000000
Internal error: Oops: 0 [#1] PREEMPT
Modules linked in: ftdi_sio usbserial ipv6
CPU: 0    Not tainted  (2.6.29-rt1-omap1-g8dde6bd-dirty #1)
PC is at 0x0
LR is at musb_platform_set_mode+0x50/0x70
pc : [<00000000>]    lr : [<c0243064>]    psr: 60000013
sp : cf0e3ed8  ip : cf83b0d0  fp : cf0e3ee4
r10: cf0e3f70  r9 : cfbf9238  r8 : c03ff1e8
r7 : c03e15ac  r6 : 00000005  r5 : cf83b0d0  r4 : cfaa7000
r3 : 00000081  r2 : d80ab000  r1 : cf83b000  r0 : cf83b1c4
Flags: nZCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment user
Control: 10c5387d  Table: 8fbe4019  DAC: 00000015
Process sh (pid: 1233, stack limit = 0xcf0e22e8)
Stack: (0xcf0e3ed8 to 0xcf0e4000)
3ec0:                                                       cf0e3f04 cf0e3ee8
3ee0: c0241ce0 c0243020 cf07bc00 00000005 cf92ef08 cfbf9220 cf0e3f14 cf0e3f08
3f00: c01e9dfc c0241c68 cf0e3f44 cf0e3f18 c00ef7bc c01e9de4 00000000 cf07bc00
3f20: 4001e000 cf0e3f70 00000005 00000005 cf0e2000 00000001 cf0e3f6c cf0e3f48
3f40: c00aca90 c00ef6b8 cf07bc00 00000000 00000000 00000000 cf07bc00 4001e000
3f60: cf0e3fa4 cf0e3f70 c00acbe4 c00ac9e8 00000000 00000000 cf0e3fa4 00000000
3f80: c00b8fe8 00000005 4001e000 401ac600 00000004 c002d0c4 00000000 cf0e3fa8
3fa0: c002cf40 c00acbac 00000005 4001e000 00000001 4001e000 00000005 00000000
3fc0: 00000005 4001e000 401ac600 00000004 00000005 000a93f0 00000001 000a9008
3fe0: 00000000 bea345e8 400f578c 4014299c 60000010 00000001 00000000 00000000
Backtrace:
[<c0243014>] (musb_platform_set_mode+0x0/0x70) from [<c0241ce0>]
(musb_mode_store+0x84/0xac)
[<c0241c5c>] (musb_mode_store+0x0/0xac) from [<c01e9dfc>]
(dev_attr_store+0x24/0x28)
 r6:cfbf9220 r5:cf92ef08 r4:00000005
[<c01e9dd8>] (dev_attr_store+0x0/0x28) from [<c00ef7bc>]
(sysfs_write_file+0x110/0x144)
[<c00ef6ac>] (sysfs_write_file+0x0/0x144) from [<c00aca90>]
(vfs_write+0xb4/0x144)
[<c00ac9dc>] (vfs_write+0x0/0x144) from [<c00acbe4>] (sys_write+0x44/0x70)
 r7:4001e000 r6:cf07bc00 r5:00000000 r4:00000000
[<c00acba0>] (sys_write+0x0/0x70) from [<c002cf40>] (ret_fast_syscall+0x0/0x2c)
 r8:c002d0c4 r7:00000004 r6:401ac600 r5:4001e000 r4:00000005
Code: bad PC value.
---[ end trace d7d34d233af69b05 ]---


I'm building git 90e758af52ba803cba233fabee81176d99589f09 (2.6.29
final) using openembedded linux-omap recipe. My config is attached. I
have applied the -rt3 (or -rt2 or -rt1 - same errors) patch from
http://www.kernel.org/pub/linux/kernel/projects/rt/. I can't get the
2.6.29.1-rtX patch to apply cleanly because I can't figure out which
git revision corresponds to 2.6.29.1....



There is one other oops I see during 8250/16550 serial port
initialization with -rt, but that was easily fixed (see attached
patch). As I said, I'm new to RT so I've got no idea if the way I did
it in the patch is valid, but it seems to work, and seeing as it's
only during initialization, it seems fairly safe.

Serial: 8250/16550 driver, 8 ports, IRQ sharing enabled
irq 72: nobody cared (try booting with the "irqpoll" option)
[<c02f6634>] (dump_stack+0x0/0x14) from [<c007e1d4>]
(__report_bad_irq+0x3c/0x98)
[<c007e198>] (__report_bad_irq+0x0/0x98) from [<c007e380>]
(note_interrupt+0x150/0x1d8)
 r4:c03eb2ec
[<c007e230>] (note_interrupt+0x0/0x1d8) from [<c007d370>]
(thread_simple_irq+0xa0/0xc0)
[<c007d2d0>] (thread_simple_irq+0x0/0xc0) from [<c007d45c>] (do_irqd+0xcc/0x334)
[<c007d390>] (do_irqd+0x0/0x334) from [<c0065b54>] (kthread+0x5c/0x94)
[<c0065af8>] (kthread+0x0/0x94) from [<c0053b28>] (do_exit+0x0/0x73c)
 r6:00000000 r5:00000000 r4:00000000
handlers:
[<c0036164>] (omap_uart_interrupt+0x0/0x1c)
Disabling IRQ #72
serial8250.0: ttyS0 at MMIO 0x4806a000 (irq = 72) is a ST16654
irq 73: nobody cared (try booting with the "irqpoll" option)
[<c02f6634>] (dump_stack+0x0/0x14) from [<c007e1d4>]
(__report_bad_irq+0x3c/0x98)
[<c007e198>] (__report_bad_irq+0x0/0x98) from [<c007e380>]
(note_interrupt+0x150/0x1d8)
 r4:c03eb358
[<c007e230>] (note_interrupt+0x0/0x1d8) from [<c007d370>]
(thread_simple_irq+0xa0/0xc0)
[<c007d2d0>] (thread_simple_irq+0x0/0xc0) from [<c007d45c>] (do_irqd+0xcc/0x334)
[<c007d390>] (do_irqd+0x0/0x334) from [<c0065b54>] (kthread+0x5c/0x94)
[<c0065af8>] (kthread+0x0/0x94) from [<c0053b28>] (do_exit+0x0/0x73c)
 r6:00000000 r5:00000000 r4:00000000
handlers:
[<c0036164>] (omap_uart_interrupt+0x0/0x1c)
Disabling IRQ #73
serial8250.0: ttyS1 at MMIO 0x4806c000 (irq = 73) is a ST16654
serial8250.0: ttyS2 at MMIO 0x49020000 (irq = 74) is a ST16654
console [ttyS2] enabled


Thanks in advance,
Hugo Vincent


On Mon, Apr 6, 2009 at 10:25 PM, David Brownell <david-b@xxxxxxxxxxx> wrote:
> On Sunday 05 April 2009, Hugo Vincent wrote:
>> I'm trying to get the realtime patch set to work on OMAP3 (Gumstix
>> Overo). Linux-omap 2.6.29 with the RT patches -rt1 or -rt2 work mostly
>> as is (MUSB and the usb-gadget layer have quite a few problems, and
>
> Like what?  Way back in 2.6.10 MUSB behaved relatively sanely.
> But that's a while back.  ;)
>
>
>> the realtime self-test stuff picks up a few problems to do with
>> spinlock usage etc, but most things seem to mostly work correctly for
>> my needs). Running cyclictest with various types of loads gives an
>> average latency of ~30-50 usec and worst case up around 300 usec.
>
>
>

Attachment: defconfig
Description: Binary data

diff --git a/drivers/serial/8250.c b/drivers/serial/8250.c
index 0d4f4c6..122b694 100644
--- a/drivers/serial/8250.c
+++ b/drivers/serial/8250.c
@@ -1073,6 +1073,7 @@ static void autoconfig(struct uart_8250_port *up, unsigned int probeflags)
 	unsigned char status1, scratch, scratch2, scratch3;
 	unsigned char save_lcr, save_mcr;
 	unsigned long flags;
+	DEFINE_RAW_SPINLOCK(raw_lock);
 
 	if (!up->port.iobase && !up->port.mapbase && !up->port.membase)
 		return;
@@ -1085,6 +1086,7 @@ static void autoconfig(struct uart_8250_port *up, unsigned int probeflags)
 	 * be frobbing the chips IRQ enable register to see if it exists.
 	 */
 	spin_lock_irqsave(&up->port.lock, flags);
+	spin_lock_irqsave(&raw_lock, flags);
 
 	up->capabilities = 0;
 	up->bugs = 0;
@@ -1240,6 +1242,7 @@ static void autoconfig(struct uart_8250_port *up, unsigned int probeflags)
 		serial_outp(up, UART_IER, 0);
 
  out:
+	spin_unlock_irqrestore(&raw_lock, flags);
 	spin_unlock_irqrestore(&up->port.lock, flags);
 	DEBUG_AUTOCONF("type=%s\n", uart_config[up->port.type].name);
 }

[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux