Hi,

I was trying to run xserver on l4linux using vesa frame buffer (l4 is running on kvm) and virtual machine
hangs and it seems that a infinite loop is started which is continuously try to do something
but doesn't succeed.

When I tried to debug it using gdb, it displays
0xb6ee9b28 in SetResetBIOSVars (pInt=0x820f5a0, set=<value optimized out>) at ../../../../hw/xfree86/int10/helper_exec.c:686

this code is from the xserver 1.7.7

static void
SetResetBIOSVars(xf86Int10InfoPtr pInt, Bool set)
{
    int pagesize = getpagesize();
    unsigned char* base = xf86MapVidMem(pInt->scrnIndex,
VIDMEM_MMIO, 0, pagesize);
    int i;

    if (set) {
for (i = BIOS_SCRATCH_OFF; i < BIOS_SCRATCH_END; i++)
    MEM_WW(pInt, i, *(base + i));
    } else {
for (i = BIOS_SCRATCH_OFF; i < BIOS_SCRATCH_END; i++)                                     /*line 685*/
    *(base + i) = MEM_RW(pInt, i);                                                                               /*line 686*/ //This line of code is not working  
    }
    
    xf86UnMapVidMem(pInt->scrnIndex,base,pagesize);
}

The value of base becomes 0 after xf86MapVidMem func is called. So my Guess is that this func is failing and returning NULL
but I am not able to figure out why

Also I read in previous years mailing list that Linux tries to execute int10 to set the VESA mode but L4 applications are not
allowed to execute real-mode code. Does this have anything to do with my problem?? How can I fix this problem?
Also, Is there a way to allow L4 applications to execute code in real mode and then switch back? May be add some code
to L4 to allow applications to execute code in real mode and then switch back.

 
Abhishek Gupta
Indian School of Mines