mirror of
https://github.com/ipxe/ipxe
synced 2025-12-13 15:31:42 +03:00
[pxe] Check for unhookable interrupts in PXENV_STOP_UNDI
PXENV_STOP_UNDI should return PXENV_STATUS_KEEP_UNDI if the UNDI cannot be safely unloaded (e.g. due to interrupt vectors that could not be unhooked).
This commit is contained in:
@@ -37,6 +37,7 @@ FILE_LICENCE ( GPL2_OR_LATER );
|
|||||||
#include <gpxe/init.h>
|
#include <gpxe/init.h>
|
||||||
#include <gpxe/if_ether.h>
|
#include <gpxe/if_ether.h>
|
||||||
#include <basemem_packet.h>
|
#include <basemem_packet.h>
|
||||||
|
#include <biosint.h>
|
||||||
#include "pxe.h"
|
#include "pxe.h"
|
||||||
#include "pxe_call.h"
|
#include "pxe_call.h"
|
||||||
|
|
||||||
@@ -316,6 +317,14 @@ PXENV_EXIT_t pxenv_stop_undi ( struct s_PXENV_STOP_UNDI *stop_undi ) {
|
|||||||
/* Prepare for unload */
|
/* Prepare for unload */
|
||||||
shutdown ( SHUTDOWN_BOOT );
|
shutdown ( SHUTDOWN_BOOT );
|
||||||
|
|
||||||
|
/* Check to see if we still have any hooked interrupts */
|
||||||
|
if ( hooked_bios_interrupts != 0 ) {
|
||||||
|
DBG ( "PXENV_STOP_UNDI failed: %d interrupts still hooked\n",
|
||||||
|
hooked_bios_interrupts );
|
||||||
|
stop_undi->Status = PXENV_STATUS_KEEP_UNDI;
|
||||||
|
return PXENV_EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
stop_undi->Status = PXENV_STATUS_SUCCESS;
|
stop_undi->Status = PXENV_STATUS_SUCCESS;
|
||||||
return PXENV_EXIT_SUCCESS;
|
return PXENV_EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user