]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[initrd] Rename bzimage_align() to initrd_align()
authorMichael Brown <mcb30@ipxe.org>
Thu, 22 May 2025 12:41:21 +0000 (13:41 +0100)
committerMichael Brown <mcb30@ipxe.org>
Thu, 22 May 2025 15:28:15 +0000 (16:28 +0100)
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>
src/arch/x86/image/bzimage.c
src/image/initrd.c
src/include/ipxe/cpio.h
src/include/ipxe/initrd.h
src/interface/efi/efi_file.c

index 63de82c63c85a347dab857867b08b6dc654e701f..08e0d0873be3befe03487a09d8b4f4cfacdf538e 100644 (file)
@@ -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 */
index 386414795a4836ea09a72e78155d29ec95b0e459..5e87355180e70347607cbc9bbade8473952c5ffb 100644 (file)
@@ -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 ) {
index c45c12b11a39d8afe8a09bf12cfe3a0b6a82bd06..744dbd269e1ef8afe8c757e38e5ea84404a98911 100644 (file)
@@ -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
  *
index 0b0ba0967942ce4895b2fe799bc497d7b1cf7411..10533b53b76441ff8197b63aa68e8165fe548e34 100644 (file)
@@ -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 */
index 79330641d5cd3dfc848a6e410d74050c5e5b22e8..1909dea104d28336aa7ad650e16992a37d568e10 100644 (file)
@@ -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>