mirror of
https://gitlab.com/qemu-project/ipxe.git
synced 2025-10-30 07:56:50 +08:00
Compare commits
1 Commits
8021x
...
interprete
| Author | SHA1 | Date | |
|---|---|---|---|
| dcb50f550d |
@ -355,10 +355,6 @@ static size_t bzimage_load_initrd ( struct image *image,
|
||||
size_t offset;
|
||||
size_t pad_len;
|
||||
|
||||
/* Do not include kernel image itself as an initrd */
|
||||
if ( initrd == image )
|
||||
return 0;
|
||||
|
||||
/* Create cpio header for non-prebuilt images */
|
||||
offset = cpio_header ( initrd, &cpio );
|
||||
|
||||
@ -406,10 +402,6 @@ static int bzimage_check_initrds ( struct image *image,
|
||||
/* Calculate total loaded length of initrds */
|
||||
for_each_image ( initrd ) {
|
||||
|
||||
/* Skip kernel */
|
||||
if ( initrd == image )
|
||||
continue;
|
||||
|
||||
/* Calculate length */
|
||||
len += bzimage_load_initrd ( image, initrd, UNULL );
|
||||
len = bzimage_align ( len );
|
||||
|
||||
@ -204,10 +204,6 @@ static int multiboot_add_modules ( struct image *image, physaddr_t start,
|
||||
break;
|
||||
}
|
||||
|
||||
/* Do not include kernel image itself as a module */
|
||||
if ( module_image == image )
|
||||
continue;
|
||||
|
||||
/* Page-align the module */
|
||||
start = ( ( start + 0xfff ) & ~0xfff );
|
||||
|
||||
|
||||
@ -349,9 +349,8 @@ int image_exec ( struct image *image ) {
|
||||
/* Preserve record of any currently-running image */
|
||||
saved_current_image = current_image;
|
||||
|
||||
/* Take out a temporary reference to the image. This allows
|
||||
* the image to unregister itself if necessary, without
|
||||
* automatically freeing itself.
|
||||
/* Take out a temporary reference to the image, so that it
|
||||
* does not get freed when temporarily unregistered.
|
||||
*/
|
||||
current_image = image_get ( image );
|
||||
|
||||
@ -371,6 +370,9 @@ int image_exec ( struct image *image ) {
|
||||
/* Record boot attempt */
|
||||
syslog ( LOG_NOTICE, "Executing \"%s\"\n", image->name );
|
||||
|
||||
/* Temporarily unregister the image during its execution */
|
||||
unregister_image ( image );
|
||||
|
||||
/* Try executing the image */
|
||||
if ( ( rc = image->type->exec ( image ) ) != 0 ) {
|
||||
DBGC ( image, "IMAGE %s could not execute: %s\n",
|
||||
@ -387,6 +389,10 @@ int image_exec ( struct image *image ) {
|
||||
image->name, strerror ( rc ) );
|
||||
}
|
||||
|
||||
/* Re-register image (unless due to be replaced) */
|
||||
if ( ! image->replacement )
|
||||
register_image ( image );
|
||||
|
||||
/* Pick up replacement image before we drop the original
|
||||
* image's temporary reference. The replacement image must
|
||||
* already be registered, so we don't need to hold a temporary
|
||||
|
||||
@ -197,11 +197,6 @@ static int script_exec ( struct image *image ) {
|
||||
size_t saved_offset;
|
||||
int rc;
|
||||
|
||||
/* Temporarily de-register image, so that a "boot" command
|
||||
* doesn't throw us into an execution loop.
|
||||
*/
|
||||
unregister_image ( image );
|
||||
|
||||
/* Preserve state of any currently-running script */
|
||||
saved_offset = script_offset;
|
||||
|
||||
@ -212,10 +207,6 @@ static int script_exec ( struct image *image ) {
|
||||
/* Restore saved state */
|
||||
script_offset = saved_offset;
|
||||
|
||||
/* Re-register image (unless we have been replaced) */
|
||||
if ( ! image->replacement )
|
||||
register_image ( image );
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
||||
@ -240,10 +240,6 @@ static size_t efi_file_read_initrd ( struct efi_file_reader *reader ) {
|
||||
len = 0;
|
||||
for_each_image ( image ) {
|
||||
|
||||
/* Ignore currently executing image */
|
||||
if ( image == current_image )
|
||||
continue;
|
||||
|
||||
/* Pad to alignment boundary */
|
||||
pad_len = ( ( -reader->pos ) & ( INITRD_ALIGN - 1 ) );
|
||||
if ( pad_len ) {
|
||||
@ -1091,7 +1087,7 @@ int efi_file_install ( EFI_HANDLE handle ) {
|
||||
* instance only if the initrd is non-empty, since Linux does
|
||||
* not gracefully handle a zero-length initrd.
|
||||
*/
|
||||
load = ( list_is_singular ( &images ) ? NULL : &efi_file_initrd.load );
|
||||
load = ( list_empty ( &images ) ? NULL : &efi_file_initrd.load );
|
||||
if ( ( rc = efi_file_path_install ( &efi_file_initrd_path.vendor.Header,
|
||||
load ) ) != 0 ) {
|
||||
goto err_initrd;
|
||||
|
||||
Reference in New Issue
Block a user