mirror of
https://github.com/ipxe/ipxe
synced 2025-12-08 02:10:25 +03:00
[initrd] Rename bzimage_align() to initrd_align()
Alignment of initrd lengths is applicable to all Linux kernels, not just those in the x86 bzImage format. Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
@@ -316,17 +316,6 @@ static void bzimage_set_cmdline ( struct image *image,
|
||||
image->name, rm_cmdline );
|
||||
}
|
||||
|
||||
/**
|
||||
* Align initrd length
|
||||
*
|
||||
* @v len Length
|
||||
* @ret len Length rounded up to INITRD_ALIGN
|
||||
*/
|
||||
static inline size_t bzimage_align ( size_t len ) {
|
||||
|
||||
return ( ( len + INITRD_ALIGN - 1 ) & ~( INITRD_ALIGN - 1 ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Load initrd
|
||||
*
|
||||
@@ -407,7 +396,7 @@ static int bzimage_check_initrds ( struct image *image,
|
||||
|
||||
/* Calculate length */
|
||||
len += bzimage_load_initrd ( image, initrd, NULL );
|
||||
len = bzimage_align ( len );
|
||||
len = initrd_align ( len );
|
||||
|
||||
DBGC ( image, "bzImage %s initrd %s from [%#08lx,%#08lx)%s%s\n",
|
||||
image->name, initrd->name, virt_to_phys ( initrd->data ),
|
||||
@@ -467,7 +456,7 @@ static void bzimage_load_initrds ( struct image *image,
|
||||
for_each_image ( initrd ) {
|
||||
if ( virt_to_phys ( initrd->data ) >= top ) {
|
||||
top = ( virt_to_phys ( initrd->data ) +
|
||||
bzimage_align ( initrd->len ) );
|
||||
initrd_align ( initrd->len ) );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -491,7 +480,7 @@ static void bzimage_load_initrds ( struct image *image,
|
||||
if ( other == initrd )
|
||||
offset = 0;
|
||||
offset += bzimage_load_initrd ( image, other, NULL );
|
||||
offset = bzimage_align ( offset );
|
||||
offset = initrd_align ( offset );
|
||||
}
|
||||
|
||||
/* Load initrd at this address */
|
||||
|
||||
@@ -51,7 +51,6 @@ static void initrd_squash_high ( physaddr_t top ) {
|
||||
struct image *initrd;
|
||||
struct image *highest;
|
||||
void *data;
|
||||
size_t len;
|
||||
|
||||
/* Squash up any initrds already within or below the region */
|
||||
while ( 1 ) {
|
||||
@@ -70,9 +69,7 @@ static void initrd_squash_high ( physaddr_t top ) {
|
||||
break;
|
||||
|
||||
/* Move this image to its final position */
|
||||
len = ( ( highest->len + INITRD_ALIGN - 1 ) &
|
||||
~( INITRD_ALIGN - 1 ) );
|
||||
current -= len;
|
||||
current -= initrd_align ( highest->len );
|
||||
DBGC ( &images, "INITRD squashing %s [%#08lx,%#08lx)->"
|
||||
"[%#08lx,%#08lx)\n", highest->name,
|
||||
virt_to_phys ( highest->data ),
|
||||
@@ -86,9 +83,7 @@ static void initrd_squash_high ( physaddr_t top ) {
|
||||
/* Copy any remaining initrds (e.g. embedded images) to the region */
|
||||
for_each_image ( initrd ) {
|
||||
if ( virt_to_phys ( initrd->data ) >= top ) {
|
||||
len = ( ( initrd->len + INITRD_ALIGN - 1 ) &
|
||||
~( INITRD_ALIGN - 1 ) );
|
||||
current -= len;
|
||||
current -= initrd_align ( initrd->len );
|
||||
DBGC ( &images, "INITRD copying %s [%#08lx,%#08lx)->"
|
||||
"[%#08lx,%#08lx)\n", initrd->name,
|
||||
virt_to_phys ( initrd->data ),
|
||||
@@ -139,8 +134,8 @@ static void initrd_swap ( struct image *low, struct image *high ) {
|
||||
( virt_to_phys ( high->data ) + high->len ), high->name );
|
||||
|
||||
/* Calculate padded lengths */
|
||||
low_len = ( ( low->len + INITRD_ALIGN - 1 ) & ~( INITRD_ALIGN - 1 ) );
|
||||
high_len = ( ( high->len + INITRD_ALIGN - 1 ) & ~( INITRD_ALIGN - 1 ));
|
||||
low_len = initrd_align ( low->len );
|
||||
high_len = initrd_align ( high->len );
|
||||
len = ( low_len + high_len );
|
||||
data = low->rwdata;
|
||||
assert ( high->data == ( data + low_len ) );
|
||||
@@ -165,15 +160,12 @@ static int initrd_swap_any ( void ) {
|
||||
struct image *low;
|
||||
struct image *high;
|
||||
const void *adjacent;
|
||||
size_t padded_len;
|
||||
|
||||
/* Find any pair of initrds that can be swapped */
|
||||
for_each_image ( low ) {
|
||||
|
||||
/* Calculate location of adjacent image (if any) */
|
||||
padded_len = ( ( low->len + INITRD_ALIGN - 1 ) &
|
||||
~( INITRD_ALIGN - 1 ) );
|
||||
adjacent = ( low->data + padded_len );
|
||||
adjacent = ( low->data + initrd_align ( low->len ) );
|
||||
|
||||
/* Search for adjacent image */
|
||||
for_each_image ( high ) {
|
||||
|
||||
@@ -60,9 +60,6 @@ struct cpio_header {
|
||||
/** CPIO header length alignment */
|
||||
#define CPIO_ALIGN 4
|
||||
|
||||
/** Alignment for CPIO archives within an initrd */
|
||||
#define INITRD_ALIGN 4096
|
||||
|
||||
/**
|
||||
* Get CPIO image name
|
||||
*
|
||||
|
||||
@@ -14,4 +14,19 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
|
||||
extern void initrd_reshuffle ( physaddr_t bottom );
|
||||
extern int initrd_reshuffle_check ( size_t len, physaddr_t bottom );
|
||||
|
||||
/** Initial ramdisk chunk alignment */
|
||||
#define INITRD_ALIGN 4096
|
||||
|
||||
/**
|
||||
* Align initrd length
|
||||
*
|
||||
* @v len Length
|
||||
* @ret len Aligned length
|
||||
*/
|
||||
static inline __attribute__ (( always_inline )) size_t
|
||||
initrd_align ( size_t len ) {
|
||||
|
||||
return ( ( len + INITRD_ALIGN - 1 ) & ~( INITRD_ALIGN - 1 ) );
|
||||
}
|
||||
|
||||
#endif /* _IPXE_INITRD_H */
|
||||
|
||||
@@ -39,6 +39,7 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
|
||||
#include <wchar.h>
|
||||
#include <ipxe/image.h>
|
||||
#include <ipxe/cpio.h>
|
||||
#include <ipxe/initrd.h>
|
||||
#include <ipxe/efi/efi.h>
|
||||
#include <ipxe/efi/Protocol/SimpleFileSystem.h>
|
||||
#include <ipxe/efi/Protocol/BlockIo.h>
|
||||
|
||||
Reference in New Issue
Block a user