Hello. We were discussing with Robert how to move BIOS interrupt routines out of kernel. There are following possibilities: 1) Have a .lowmem section in every concerned module which will always be placed in low memory. Currently in experimental. Advantages: a) moving functions to modules is straightforward b) functions grow neither in size nor in complexity Disadvantages: c) needs lowmem allocators in core 2) Make every function needing bios interrupts setup its own trampoline. Due to complexity of trampolines it's not a real option 3) Have an universal routine grub_interrupt (int intno, struct grub_cpu_interrupt_regs *regs) which will be used by C routine to do the interrupt calls. This would move the complexity from asm to C. Advantages: a) simplicity in core b) complexity moved to a more readable language c) we can also rename grub_interrupt to grub_interrupt_real and make grub_interrupt dprintf registers before and after the call. This would make debugging BIOS quirks easier. Disadvantages: a) Moving functions needs effort b) C functions are probably bigger but it may be offset by possibility of inlining functions c) repeadetly changing from/to real mode is an overhead when executing multiple interrupts in series. Fortunately this condition is rare in our codebase and is only on non performance-critical parts like halting. d) Some functions aren't covered by this. At least grub_pxe_call is in this case. But we can use method 2 for them -- Regards Vladimir 'φ-coder/phcoder' Serbinenko