Fork us on GitHub Follow us on Facebook Follow us on Twitter

Opened 9 years ago

Closed 9 years ago

Last modified 9 years ago

#486 closed defect (fixed)

i8042 crashes for unknown reason

Reported by: Jiří Zárevúcky Owned by:
Priority: major Milestone: 0.6.0
Component: helenos/unspecified Version: mainline
Keywords: Cc:
Blocker for: Depends on:
See also:

Description

I've stumbled upon this when trying to figure out why the GUI freezes for me, though I have no idea if it's related or what caused it. Screenshot attached.

Attachments (2)

i8042_crash.png (29.3 KB) - added by Jiří Zárevúcky 9 years ago.
screenshot of the crash info in kconsole
i8042.tar.bz2 (654.1 KB) - added by Jiří Zárevúcky 9 years ago.
Binary and disassembly

Download all attachments as: .zip

Change History (10)

Changed 9 years ago by Jiří Zárevúcky

Attachment: i8042_crash.png added

screenshot of the crash info in kconsole

comment:1 Changed 9 years ago by Jakub Jermář

Hi, could you also load the compressed i8042 binary which crashed?

comment:2 Changed 9 years ago by Jiri Svoboda

Ideally build with line debugging information and include the disassembly.

Changed 9 years ago by Jiří Zárevúcky

Attachment: i8042.tar.bz2 added

Binary and disassembly

comment:3 Changed 9 years ago by Jiří Zárevúcky

Yes, of course. By the way, why is there no email when an attachment is added?

comment:4 Changed 9 years ago by Jakub Jermář

Applying the disassembly to the stacktrace printed at i8042 crash, the driver crashed here:

tls_alloc_variant_2()+0x15:

	tcb->self = tcb;
    f0a3:	89 00                	mov    %eax,(%eax)

while it was doing:

tls_alloc_variant_2()+0x15
__make_tls()+0x1a
fibril_setup()+0x5
process_notification()+0x43
fibril_main()+0x19

comment:5 Changed 9 years ago by Jakub Jermář

Can it be that memalign() simply fails to allocate TLS data for the notification fibril?

        size = ALIGN_UP(size, &_tls_alignment);
        *data = memalign((uintptr_t) &_tls_alignment, sizeof(tcb_t) + size);

        tcb = (tcb_t *) (*data + size);
        tcb->self = tcb;

&_tls_alignment is 4 and 76 = 19 * 4, so memalign() must have returned NULL.

Last edited 9 years ago by Jakub Jermář (previous) (diff)

comment:6 Changed 9 years ago by Jakub Jermář

Clearly, we need to check the return value from memalign() here.

comment:7 Changed 9 years ago by Jakub Jermář

Resolution: fixed
Status: newclosed

Fixed in mainline,1641.

comment:8 Changed 9 years ago by Jakub Jermář

Milestone: 0.5.1
Note: See TracTickets for help on using tickets.