diff --git a/src/arch/i386/firmware/pcbios/hidemem.c b/src/arch/i386/firmware/pcbios/hidemem.c index c1788b3a..8f3069e1 100644 --- a/src/arch/i386/firmware/pcbios/hidemem.c +++ b/src/arch/i386/firmware/pcbios/hidemem.c @@ -190,6 +190,8 @@ static void hide_etherboot ( void ) { * possible. */ static void unhide_etherboot ( int flags __unused ) { + struct memory_map memmap; + int rc; /* If we have more than one hooked interrupt at this point, it * means that some other vector is still hooked, in which case @@ -203,15 +205,23 @@ static void unhide_etherboot ( int flags __unused ) { return; } - /* Try to unhook INT 15. If it fails, then just leave it - * hooked; it takes care of protecting itself. :) - */ - unhook_bios_interrupt ( 0x15, ( unsigned int ) int15, - &int15_vector ); + /* Try to unhook INT 15 */ + if ( ( rc = unhook_bios_interrupt ( 0x15, ( unsigned int ) int15, + &int15_vector ) ) != 0 ) { + DBG ( "Cannot unhook INT15: %s\n", strerror ( rc ) ); + /* Leave it hooked; there's nothing else we can do, + * and it should be intrinsically safe (though + * wasteful of RAM). + */ + } /* Unhook fake E820 map, if used */ if ( FAKE_E820 ) unfake_e820(); + + /* Dump memory map after unhiding */ + DBG ( "Unhidden iPXE from system memory map\n" ); + get_memmap ( &memmap ); } /** Hide Etherboot startup function */