Comment 10 for bug 139453

Revision history for this message
Colin Ian King (colin-king) wrote :

Removing usplash from the boot line shows that the vga console does work correctly without usplash, the bug occurs if usplash is not removed.

I've gone through the tty and vgacon drivers and I am pretty certain it is setting up the VGA DAC and palette correctly, so I suspect usplash (or actually the svga or bogl graphics libraries) are interfering with the console colour settings in some way.

After further investigation it appears if usplash is probably not restoring the vga text mode correctly. Looking at the usplash sources:

1) in the svga usplash code usplash_svga_init() in usplash_svga.c does a vga_setchipset() but does not restore the original setting in usplash_svga_done().

2) usplash_svga_setmode() changes the mode but the original mode is not restored in usplace_svga_done() either.

3) In usplash_svga_init(), the current palette is fetched gl_getpalette() after the call to vga_setchipset(). Not sure if this is correct, since swapping chipset before getting the color palette may be the wrong order to get the current VGA palette. Also, the palette is malloc()'d buy the malloc is not checked for a NULL return.

4) As for the bogl library version of the usplash code, I could not see where the original palette is being restored, which concerns me as this will mess up the console colours.

In summary, I think usplash needs tidying up first to make sure it is restoring the screen back to it's correct chipset, mode and palette. Then the code can be checked with my script to see if it is restoring the color palette correctly.

I will mark this as a won't fix on the kernel as I believe this is a usplash specific bug - since the underlying libraries are tinkering with the vga palettes, modes and DAC. If the fixed usplash is still showing this bug, please resubmit this as a kernel bug.