|
From: Petr V. <VAN...@vc...> - 2002-07-22 20:19:01
|
On 22 Jul 02 at 21:58, Sven wrote:
> I did a bit more looking, and found that :
>
> Jul 22 21:49:32 iliana kernel: SVEN : c->vc_screenbuf is -1055775808
Having them hexadecimal would be much better... c11223c0... bootmem.
> screen buffer is set to that when i overwrite the vgacon save_scree function, and here i save
> it (printed with %ld).
>
> Jul 22 21:49:32 iliana kernel: SVEN : set_origin : screenbuf is -941350912.
c7e42000... kmalloc
> Jul 22 21:49:32 iliana kernel: SVEN : set_origin : origin is -1072968800.
c00bcba0... inside VGA framebuffer.
> when set_origin is first called (not from do_update_screen) after that, it held this values.
>
> Clearly the screenbuf is not the same.
Probably resize triggers in. But you are doing something wrong - do
you work with Linus tree or on the top of James work? Inside (and after)
do_update_region you should not have origin pointing to the VGA
framebuffer anymore, it must point to screenbuf area! Or do you
implement some strange set_origin method?
> the nredraw_screen is called, which calls again set_origin, and then calls
> do_update_region as follows :
>
> Jul 22 21:49:32 iliana kernel: SVEN : do_update_region : + start = -941350912, count = 3700
>
> here we see that the screenbuf used is the wrongly set one,
> not the one i copied the stuff to.
Only place which does realloc is vc_resize, and code here should
properly move data.
> Mmm, i suppose that what happens is that the screenbuf is different
> for fbcon and vgacon or something such, and this seems clearly the reason
> for lot of garbage appearing on my screen, is it not ?
I've got an idea: vc_resize reads data from vc's origin, unconditionally,
without call to save_screen! So if your framebuffer layout is not
compatible with VGA, you are lost.
fbcon_init -> fbcon_setup -> vc_resize_con -> origin leaved unset...
Adding call to set_origin(currcons) into visual_init, just before
call to sw->con_init() may fix problem. Or maybe it will just make problem
even worse? Who knows?
Petr
|