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

Opened 11 years ago

Closed 11 years ago

Last modified 11 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 11 years ago.
screenshot of the crash info in kconsole
i8042.tar.bz2 (654.1 KB) - added by Jiří Zárevúcky 11 years ago.
Binary and disassembly

Download all attachments as: .zip

Change History (10)

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

Attachment: i8042_crash.png added

screenshot of the crash info in kconsole

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

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

comment:2 Changed 11 years ago by Jiri Svoboda

Ideally build with line debugging information and include the disassembly.

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

Attachment: i8042.tar.bz2 added

Binary and disassembly

comment:3 Changed 11 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 11 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 11 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;

The only problem is that the reported fault address (76) does not really tie in into this scenario by 12 bytes if the aligned size is 64 and memalign() did return NULL.

Version 0, edited 11 years ago by Jakub Jermář (next)

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

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

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

Resolution: fixed
Status: newclosed

Fixed in mainline,1641.

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

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