2012/3/2 Gilles Chanteperdrix <[email protected]>
> On 03/02/2012 11:04 AM, Gilles Chanteperdrix wrote:
> > On 03/01/2012 05:23 AM, Oscar Dávila wrote:
> >> Finally i could get the dump
> >>
> >>
> >> post-prompt
> >> No breakpoints or watchpoints.
> >>
> >> breakpoints-table-end
> >>
> >> post-prompt
> >> Dump of assembler code for function __ipipe_sync_stage:
> >> 0xc106d376 <__ipipe_sync_stage+0>: push %ebp
> >> (...)
> >> 0xc106d526 <__ipipe_sync_stage+432>: ret
> >> End of assembler dump.
> >
> > The address where the EIP is when the NMI watchdog triggers is
> > 0xc106d5e1, so, outside this code.
> >
> And this dump does not seem to correspond to the kernel that was running
> when the bug happened, because in that case we had
>
> 0xc106d5e1 == __ipipe_sync_stage + 0x21b
>
> whereas in your dump,
>
> __ipipe_sync_stage + 0x21b == 0xc106d591
>
> Sorry about that, i lost that image of the kernel.
Here is a new complete test.
Kernel Messages
Kernel failure message 1:
BUG: NMI Watchdog detected LOCKUP on CPU0, ip c10751d3, registers:
Modules linked in: isofs udf crc_itu_t i915 drm_kms_helper drm
i2c_algo_bit sco ppdev bridge stp bnep lp l2cap crc16 bluetooth rfkill
binfmt_misc fuse loop snd_intel8x0 snd_ac97_codec ac97_bus snd_pcm_oss
snd_mixer_oss snd_pcm snd_seq_midi snd_rawmidi snd_seq_midi_event
snd_seq snd_timer snd_seq_device i2c_i801 snd parport_pc i2c_core
soundcore snd_page_alloc parport rng_core tpm_tis tpm evdev psmouse
serio_raw usbhid hid ext3 jbd mbcache sg sr_mod sd_mod crc_t10dif
cdrom ata_generic uhci_hcd ehci_hcd ata_piix libata scsi_mod tg3
usbcore floppy libphy nls_base [last unloaded: scsi_wait_scan]
Pid: 1891, comm: ex01 Not tainted 2.6.35.9-xenomai-2.6.0-8 #5 IBM/8143PSR
EIP: 0060:[<c10751d3>] EFLAGS: 00200002 CPU: 0
EIP is at __ipipe_sync_stage+0x131/0x181
EAX: deb38000 EBX: 00000521 ECX: de8a6940 EDX: c1472580
ESI: c1542100 EDI: 00000523 EBP: deb39f98 ESP: deb39f64
DS: 007b ES: 007b FS: 00d8 GS: 0033 SS: 0068
Process ex01 (pid: 1891, ti=deb38000 task=de8a6940 task.ti=deb38000)
I-pipe domain Linux
Stack:
ffffffff c1542100 c109dfb0 c1468cf4 00000520 c1542104 c1c03cf8 c1c03cfc
<0> c1c03d04 c146802c deb39fb4 00200282 00000001 deb39fac c1019be4 080499c4
<0> 00000000 00000000 deb38000 c1287a71 080499c4 080486a4 00000000 00000000
Call Trace:
[<c109dfb0>] ? hisyscall_event+0x0/0x2b2
[<c1019be4>] ? __ipipe_syscall_root+0xd9/0xe8
[<c1287a71>] ? system_call+0x2d/0x4f
Code: f9 c1 e1 07 8b 91 0c 21 54 c1 89 d8 ff 91 08 21 54 c1 e8 b7 b6
fb ff fa 89 e0 25 00 e0 ff ff 83 78 14 00 75 58 f6 40 08 08 74 52 <eb>
f8 c1 e7 07 8b 97 08 21 54 c1 64 8b 3d 14 7f 46 c1 03 7d f0
---[ end trace 6b3881f72975605e ]---
Objdump -S
c10750a2 <__ipipe_sync_stage>:
* return of this routine.
*
* This routine must be called with hw interrupts off.
*/
void __ipipe_sync_stage(void)
{
c10750a2: 55 push %ebp
c10750a3: 89 e5 mov %esp,%ebp
c10750a5: 57 push %edi
c10750a6: 56 push %esi
c10750a7: 53 push %ebx
c10750a8: 83 ec 28 sub $0x28,%esp
struct ipipe_percpu_domain_data *p;
struct ipipe_domain *ipd;
int irq;
ipd = __ipipe_current_domain;
c10750ab: ba 94 e6 46 c1 mov $0xc146e694,%edx
c10750b0: 64 a1 14 7f 46 c1 mov %fs:0xc1467f14,%eax
c10750b6: 8b 34 10 mov (%eax,%edx,1),%esi
p = ipipe_cpudom_ptr(ipd);
c10750b9: ba f4 8c 46 c1 mov $0xc1468cf4,%edx
c10750be: 01 d0 add %edx,%eax
c10750c0: 69 0e 68 16 00 00 imul $0x1668,(%esi),%ecx
c10750c6: 01 c8 add %ecx,%eax
c10750c8: 0f ba 28 00 btsl $0x0,(%eax)
barrier();
if (test_bit(IPIPE_LOCK_FLAG, &ipd->irqs[irq].control))
continue;
if (!__ipipe_pipeline_head_p(ipd))
c10750cc: 8d 4e 04 lea 0x4(%esi),%ecx
c10750cf: 89 4d e0 mov %ecx,-0x20(%ebp)
void __ipipe_end_edge_irq(unsigned irq, struct irq_desc *desc);
static inline void __do_root_xirq(ipipe_irq_handler_t handler,
unsigned int irq)
{
struct pt_regs *regs = &__raw_get_cpu_var(__ipipe_tick_regs);
c10750d2: bb 2c 80 46 c1 mov $0xc146802c,%ebx
c10750d7: 89 5d f0 mov %ebx,-0x10(%ebp)
__ipipe_do_root_xirq(ipd, irq);
local_irq_disable_hw();
root_stall_after_handler();
}
p = ipipe_cpudom_ptr(__ipipe_current_domain);
c10750da: 89 55 d8 mov %edx,-0x28(%ebp)
clear_bit(nr, addr);
}
static inline void __clear_bit(int nr, volatile unsigned long *addr)
{
asm volatile("btr %1,%0" : ADDR : "Ir" (nr));
c10750dd: 8d 50 10 lea 0x10(%eax),%edx
c10750e0: 89 55 ec mov %edx,-0x14(%ebp)
c10750e3: 8d 48 08 lea 0x8(%eax),%ecx
c10750e6: 89 4d e8 mov %ecx,-0x18(%ebp)
c10750e9: 8d 58 04 lea 0x4(%eax),%ebx
c10750ec: 89 5d e4 mov %ebx,-0x1c(%ebp)
c10750ef: 89 75 d0 mov %esi,-0x30(%ebp)
{
int l0b, l1b, l2b;
unsigned long l0m, l1m, l2m;
unsigned int irq;
l0m = p->irqpend_himap;
c10750f2: 8b 50 04 mov 0x4(%eax),%edx
if (unlikely(l0m == 0))
c10750f5: 85 d2 test %edx,%edx
c10750f7: 0f 84 4a 01 00 00 je c1075247 <__xirq_end+0x24>
int __ipipe_handle_irq(struct pt_regs *regs);
static inline unsigned long __ipipe_ffnz(unsigned long ul)
{
__asm__("bsrl %1, %0":"=r"(ul)
c10750fd: 0f bd d2 bsr %edx,%edx
return -1;
l0b = __ipipe_ffnz(l0m);
l1m = p->irqpend_mdmap[l0b];
c1075100: 8b 4c 90 08 mov 0x8(%eax,%edx,4),%ecx
if (unlikely(l1m == 0))
c1075104: 85 c9 test %ecx,%ecx
c1075106: 0f 84 3b 01 00 00 je c1075247 <__xirq_end+0x24>
c107510c: 0f bd c9 bsr %ecx,%ecx
return -1;
l1b = __ipipe_ffnz(l1m) + l0b * BITS_PER_LONG;
c107510f: 89 d3 mov %edx,%ebx
c1075111: c1 e3 05 shl $0x5,%ebx
c1075114: 01 d9 add %ebx,%ecx
l2m = p->irqpend_lomap[l1b];
c1075116: 8d 79 04 lea 0x4(%ecx),%edi
c1075119: 8b 1c b8 mov (%eax,%edi,4),%ebx
if (unlikely(l2m == 0))
c107511c: 85 db test %ebx,%ebx
c107511e: 0f 84 23 01 00 00 je c1075247 <__xirq_end+0x24>
c1075124: 0f bd f3 bsr %ebx,%esi
return -1;
l2b = __ipipe_ffnz(l2m);
irq = l1b * BITS_PER_LONG + l2b;
c1075127: 89 cb mov %ecx,%ebx
c1075129: c1 e3 05 shl $0x5,%ebx
c107512c: 89 5d dc mov %ebx,-0x24(%ebp)
c107512f: 8b 5d dc mov -0x24(%ebp),%ebx
c1075132: 01 f3 add %esi,%ebx
c1075134: 8b 75 ec mov -0x14(%ebp),%esi
c1075137: 0f b3 1e btr %ebx,(%esi)
__clear_bit(irq, p->irqpend_lomap);
if (p->irqpend_lomap[l1b] == 0) {
c107513a: 83 3c b8 00 cmpl $0x0,(%eax,%edi,4)
c107513e: 75 13 jne c1075153
<__ipipe_sync_stage+0xb1>
c1075140: 8b 75 e8 mov -0x18(%ebp),%esi
c1075143: 0f b3 0e btr %ecx,(%esi)
__clear_bit(l1b, p->irqpend_mdmap);
if (p->irqpend_mdmap[l0b] == 0)
c1075146: 83 7c 90 08 00 cmpl $0x0,0x8(%eax,%edx,4)
c107514b: 75 06 jne c1075153
<__ipipe_sync_stage+0xb1>
c107514d: 8b 4d e4 mov -0x1c(%ebp),%ecx
c1075150: 0f b3 11 btr %edx,(%ecx)
if (ipd == ipipe_root_domain)
trace_hardirqs_off();
for (;;) {
irq = __ipipe_next_irq(p);
if (irq < 0)
c1075153: 85 db test %ebx,%ebx
c1075155: 0f 88 ec 00 00 00 js c1075247 <__xirq_end+0x24>
* that all updates to maps are done before the
* handler gets called.
*/
barrier();
if (test_bit(IPIPE_LOCK_FLAG, &ipd->irqs[irq].control))
c107515b: 8d 53 02 lea 0x2(%ebx),%edx
c107515e: c1 e2 07 shl $0x7,%edx
c1075161: 8b 75 d0 mov -0x30(%ebp),%esi
c1075164: f6 04 16 20 testb $0x20,(%esi,%edx,1)
c1075168: 75 88 jne c10750f2
<__ipipe_sync_stage+0x50>
continue;
if (!__ipipe_pipeline_head_p(ipd))
c107516a: 8b 45 e0 mov -0x20(%ebp),%eax
c107516d: 3b 05 50 77 3f c1 cmp 0xc13f7750,%eax
c1075173: 74 01 je c1075176
<__ipipe_sync_stage+0xd4>
local_irq_enable_hw();
c1075175: fb sti
if (likely(ipd != ipipe_root_domain)) {
c1075176: 81 fe 00 21 54 c1 cmp $0xc1542100,%esi
c107517c: 74 16 je c1075194
<__ipipe_sync_stage+0xf2>
ipd->irqs[irq].handler(irq, ipd->irqs[irq].cookie);
c107517e: 8d 4b 02 lea 0x2(%ebx),%ecx
c1075181: c1 e1 07 shl $0x7,%ecx
c1075184: 8b 54 31 0c mov 0xc(%ecx,%esi,1),%edx
c1075188: 89 d8 mov %ebx,%eax
c107518a: ff 54 0e 08 call *0x8(%esi,%ecx,1)
__ipipe_run_irqtail(irq);
local_irq_disable_hw();
c107518e: fa cli
c107518f: e9 91 00 00 00 jmp c1075225 <__xirq_end+0x2>
} else if (ipipe_virtual_irq_p(irq)) {
c1075194: 8d 83 e0 fa ff ff lea -0x520(%ebx),%eax
c107519a: 83 f8 1f cmp $0x1f,%eax
c107519d: 8d 7b 02 lea 0x2(%ebx),%edi
c10751a0: 77 33 ja c10751d5
<__ipipe_sync_stage+0x133>
irq_enter();
c10751a2: e8 f8 b3 fb ff call c103059f <irq_enter>
ipd->irqs[irq].handler(irq, ipd->irqs[irq].cookie);
c10751a7: 89 f9 mov %edi,%ecx
c10751a9: c1 e1 07 shl $0x7,%ecx
c10751ac: 8b 91 0c 21 54 c1 mov -0x3eabdef4(%ecx),%edx
c10751b2: 89 d8 mov %ebx,%eax
c10751b4: ff 91 08 21 54 c1 call *-0x3eabdef8(%ecx)
irq_exit();
c10751ba: e8 b7 b6 fb ff call c1030876 <irq_exit>
local_irq_disable_hw();
c10751bf: fa cli
c10751c0: 89 e0 mov %esp,%eax
c10751c2: 25 00 e0 ff ff and $0xffffe000,%eax
root_stall_after_handler();
while (__ipipe_check_root_resched())
c10751c7: 83 78 14 00 cmpl $0x0,0x14(%eax)
c10751cb: 75 58 jne c1075225 <__xirq_end+0x2>
c10751cd: f6 40 08 08 testb $0x8,0x8(%eax)
c10751d1: 74 52 je c1075225 <__xirq_end+0x2>
c10751d3: eb f8 jmp c10751cd
<__ipipe_sync_stage+0x12b>
__ipipe_preempt_schedule_irq();
} else {
__ipipe_do_root_xirq(ipd, irq);
c10751d5: c1 e7 07 shl $0x7,%edi
c10751d8: 8b 97 08 21 54 c1 mov -0x3eabdef8(%edi),%edx
void __ipipe_end_edge_irq(unsigned irq, struct irq_desc *desc);
static inline void __do_root_xirq(ipipe_irq_handler_t handler,
unsigned int irq)
{
struct pt_regs *regs = &__raw_get_cpu_var(__ipipe_tick_regs);
c10751de: 64 8b 3d 14 7f 46 c1 mov %fs:0xc1467f14,%edi
c10751e5: 03 7d f0 add -0x10(%ebp),%edi
static inline unsigned __ipipe_get_irq_vector(int irq)
{
#ifdef CONFIG_X86_IO_APIC
unsigned __ipipe_get_ioapic_irq_vector(int irq);
return __ipipe_get_ioapic_irq_vector(irq);
c10751e8: 89 d8 mov %ebx,%eax
c10751ea: 89 55 d4 mov %edx,-0x2c(%ebp)
c10751ed: e8 15 02 fa ff call c1015407
<__ipipe_get_ioapic_irq_vector>
regs->orig_ax = ~__ipipe_get_irq_vector(irq);
c10751f2: f7 d0 not %eax
c10751f4: 89 47 2c mov %eax,0x2c(%edi)
__asm__ __volatile__("pushfl\n\t"
c10751f7: 89 d8 mov %ebx,%eax
c10751f9: f7 d0 not %eax
c10751fb: 8b 55 d4 mov -0x2c(%ebp),%edx
c10751fe: 9c pushf
c10751ff: 81 0c 24 00 02 00 00 orl $0x200,(%esp)
c1075206: 0e push %cs
c1075207: 68 23 52 07 c1 push $0xc1075223
c107520c: 50 push %eax
c107520d: 0f a8 push %gs
c107520f: 0f a0 push %fs
c1075211: 06 push %es
c1075212: 1e push %ds
c1075213: 50 push %eax
c1075214: 55 push %ebp
c1075215: 57 push %edi
c1075216: 56 push %esi
c1075217: 52 push %edx
c1075218: 51 push %ecx
c1075219: 53 push %ebx
c107521a: 89 f8 mov %edi,%eax
c107521c: ff d2 call *%edx
c107521e: e9 dd 27 21 00 jmp c1287a00 <__kprobes_text_start>
c1075223 <__xirq_end>:
c1075223: fa cli
local_irq_disable_hw();
c1075224: fa cli
root_stall_after_handler();
}
p = ipipe_cpudom_ptr(__ipipe_current_domain);
c1075225: 64 8b 0d 14 7f 46 c1 mov %fs:0xc1467f14,%ecx
c107522c: ba 94 e6 46 c1 mov $0xc146e694,%edx
c1075231: 8b 5d d8 mov -0x28(%ebp),%ebx
c1075234: 8d 04 19 lea (%ecx,%ebx,1),%eax
c1075237: 8b 14 11 mov (%ecx,%edx,1),%edx
c107523a: 69 12 68 16 00 00 imul $0x1668,(%edx),%edx
c1075240: 01 d0 add %edx,%eax
c1075242: e9 96 fe ff ff jmp c10750dd
<__ipipe_sync_stage+0x3b>
c1075247: 0f ba 30 00 btrl $0x0,(%eax)
if (ipd == ipipe_root_domain)
trace_hardirqs_on();
__clear_bit(IPIPE_STALL_FLAG, &p->status);
}
c107524b: 83 c4 28 add $0x28,%esp
c107524e: 5b pop %ebx
c107524f: 5e pop %esi
c1075250: 5f pop %edi
c1075251: 5d pop %ebp
c1075252: c3 ret
And here http://odavilar.0x1fee3.org/xenomai/ you can find the dump with
gdb and the dump with objdump -d and also de .config of the kernel.
Thanks a lot.
--
Atentamente:
Oscar Dávila Ramírez
_______________________________________________
Xenomai-help mailing list
[email protected]
https://mail.gna.org/listinfo/xenomai-help