Re: [PATCH RESEND 04/62] init: x86, arm, sh, sparc: remove variable rd_image_start, which controls starting block number of initrd

Christophe Leroy
2025-09-15T11:50:35Z

Le 13/09/2025 à 02:37, Askar Safin a écrit :
> [Vous ne recevez pas souvent de courriers de safinaskar@gmail.com. Découvrez pourquoi ceci est important à https://aka.ms/LearnAboutSenderIdentification ]
>
> This is preparation for initrd removal
>
> Signed-off-by: Askar Safin <safinaskar@gmail.com>
> ---
> Documentation/arch/x86/boot.rst | 4 ++--
> arch/arm/kernel/atags_parse.c | 2 --
> arch/sh/include/asm/setup.h | 1 -
> arch/sh/kernel/head_32.S | 2 +-
> arch/sh/kernel/setup.c | 9 +--------
> arch/sparc/boot/piggyback.c | 4 ++--
> arch/sparc/kernel/head_32.S | 4 ++--
> arch/sparc/kernel/head_64.S | 6 ++++--
> arch/sparc/kernel/setup_32.c | 5 -----
> arch/sparc/kernel/setup_64.c | 5 -----
> arch/x86/boot/header.S | 2 +-
> arch/x86/include/uapi/asm/bootparam.h | 5 +----
> arch/x86/kernel/setup.c | 5 -----
> include/linux/initrd.h | 3 ---
> init/do_mounts_rd.c | 8 +++-----
> 15 files changed, 17 insertions(+), 48 deletions(-)
>
> diff --git a/Documentation/arch/x86/boot.rst b/Documentation/arch/x86/boot.rst
> index 77e6163288db..118aa7b69667 100644
> --- a/Documentation/arch/x86/boot.rst
> +++ b/Documentation/arch/x86/boot.rst
> @@ -189,7 +189,7 @@ Offset/Size Proto Name Meaning
> 01F1/1 ALL(1) setup_sects The size of the setup in sectors
> 01F2/2 ALL root_flags If set, the root is mounted readonly
> 01F4/4 2.04+(2) syssize The size of the 32-bit code in 16-byte paras
> -01F8/2 ALL ram_size DO NOT USE - for bootsect.S use only
> +01F8/2 ALL ram_size DO NOT USE - for bootsect.S use only - used to control initrd, which was removed from Linux in 2025

Is this change really needed/usefull. Here people can think it shall not
be used because it is removed in 2025. But it reality it was already
DO-NOT-USE 20 years old.

> 01FA/2 ALL vid_mode Video mode control
> 01FC/2 ALL root_dev Default root device number
> 01FE/2 ALL boot_flag 0xAA55 magic number
> @@ -308,7 +308,7 @@ Offset/size: 0x1f8/2
> Protocol: ALL
> ============ ===============
>
> - This field is obsolete.
> + This field is obsolete. Used to control initrd, which was removed from Linux in 2025.

Same comment, this field has been obsolete long before the removal of
initrd in 2025 so that new comment bring confusion.

>
> ============ ===================
> Field name: vid_mode
> diff --git a/arch/arm/kernel/atags_parse.c b/arch/arm/kernel/atags_parse.c
> index 4ec591bde3df..a3f0a4f84e04 100644
> --- a/arch/arm/kernel/atags_parse.c
> +++ b/arch/arm/kernel/atags_parse.c
> @@ -90,8 +90,6 @@ __tagtable(ATAG_VIDEOTEXT, parse_tag_videotext);
> #ifdef CONFIG_BLK_DEV_RAM
> static int __init parse_tag_ramdisk(const struct tag *tag)
> {
> - rd_image_start = tag->u.ramdisk.start;
> -
> if (tag->u.ramdisk.size)
> rd_size = tag->u.ramdisk.size;
>
> diff --git a/arch/sh/include/asm/setup.h b/arch/sh/include/asm/setup.h
> index 84bb23a771f3..d1b97c5726e4 100644
> --- a/arch/sh/include/asm/setup.h
> +++ b/arch/sh/include/asm/setup.h
> @@ -10,7 +10,6 @@
> #define PARAM ((unsigned char *)empty_zero_page)
>
> #define MOUNT_ROOT_RDONLY (*(unsigned long *) (PARAM+0x000))
> -#define RAMDISK_FLAGS (*(unsigned long *) (PARAM+0x004))
> #define ORIG_ROOT_DEV (*(unsigned long *) (PARAM+0x008))
> #define LOADER_TYPE (*(unsigned long *) (PARAM+0x00c))
> #define INITRD_START (*(unsigned long *) (PARAM+0x010))
> diff --git a/arch/sh/kernel/head_32.S b/arch/sh/kernel/head_32.S
> index b603b7968b38..4382c0f058c8 100644
> --- a/arch/sh/kernel/head_32.S
> +++ b/arch/sh/kernel/head_32.S
> @@ -28,7 +28,7 @@
> .section .empty_zero_page, "aw"
> ENTRY(empty_zero_page)
> .long 1 /* MOUNT_ROOT_RDONLY */
> - .long 0 /* RAMDISK_FLAGS */
> + .long 0 /* RAMDISK_FLAGS - used to control initrd, which was removed from Linux in 2025 */
> .long 0x0200 /* ORIG_ROOT_DEV */
> .long 1 /* LOADER_TYPE */
> .long 0x00000000 /* INITRD_START */
> diff --git a/arch/sh/kernel/setup.c b/arch/sh/kernel/setup.c
> index d66f098e9e9f..50f1d39fe34f 100644
> --- a/arch/sh/kernel/setup.c
> +++ b/arch/sh/kernel/setup.c
> @@ -70,8 +70,6 @@ EXPORT_SYMBOL(sh_mv);
>
> extern int root_mountflags;
>
> -#define RAMDISK_IMAGE_START_MASK 0x07FF
> -
> static char __initdata command_line[COMMAND_LINE_SIZE] = { 0, };
>
> static struct resource code_resource = {
> @@ -273,19 +271,14 @@ void __init setup_arch(char **cmdline_p)
>
> printk(KERN_NOTICE "Boot params:\n"
> "... MOUNT_ROOT_RDONLY - %08lx\n"
> - "... RAMDISK_FLAGS - %08lx\n"
> "... ORIG_ROOT_DEV - %08lx\n"
> "... LOADER_TYPE - %08lx\n"
> "... INITRD_START - %08lx\n"
> "... INITRD_SIZE - %08lx\n",
> - MOUNT_ROOT_RDONLY, RAMDISK_FLAGS,
> + MOUNT_ROOT_RDONLY,
> ORIG_ROOT_DEV, LOADER_TYPE,
> INITRD_START, INITRD_SIZE);
>
> -#ifdef CONFIG_BLK_DEV_RAM
> - rd_image_start = RAMDISK_FLAGS & RAMDISK_IMAGE_START_MASK;
> -#endif
> -
> if (!MOUNT_ROOT_RDONLY)
> root_mountflags &= ~MS_RDONLY;
> setup_initial_init_mm(_text, _etext, _edata, _end);
> diff --git a/arch/sparc/boot/piggyback.c b/arch/sparc/boot/piggyback.c
> index 6d74064add0a..a9cc55254ff8 100644
> --- a/arch/sparc/boot/piggyback.c
> +++ b/arch/sparc/boot/piggyback.c
> @@ -220,8 +220,8 @@ int main(int argc,char **argv)
>
> /*
> * root_flags = 0
> - * root_dev = 1 (RAMDISK_MAJOR)
> - * ram_flags = 0
> + * root_dev = 1 (1 used to mean RAMDISK_MAJOR, i. e. initrd, which was removed from Linux)

At the end of your series RAMDISK_MAJOR still exists so this comment is
wrong.

> + * ram_flags = 0 (used to control initrd, which was removed from Linux in 2025)
> * sparc_ramdisk_image = "PAGE aligned address after _end")
> * sparc_ramdisk_size = size of image
> */

Shouldn't this block be droped entirely ?

> diff --git a/arch/sparc/kernel/head_32.S b/arch/sparc/kernel/head_32.S
> index 38345460d542..46f0e39b9037 100644
> --- a/arch/sparc/kernel/head_32.S
> +++ b/arch/sparc/kernel/head_32.S
> @@ -65,7 +65,7 @@ empty_zero_page: .skip PAGE_SIZE
> EXPORT_SYMBOL(empty_zero_page)
>
> .global root_flags
> - .global ram_flags
> + .global ram_flags /* used to control initrd, which was removed from Linux in 2025 */

Can we remove this line completely instead of adding a comment ?

> .global root_dev
> .global sparc_ramdisk_image
> .global sparc_ramdisk_size
> @@ -81,7 +81,7 @@ root_flags:
> .half 1
> root_dev:
> .half 0
> -ram_flags:
> +ram_flags: /* used to control initrd, which was removed from Linux in 2025 */

Same, why not remove this object completely ?

> .half 0
> sparc_ramdisk_image:
> .word 0
> diff --git a/arch/sparc/kernel/head_64.S b/arch/sparc/kernel/head_64.S
> index cf0549134234..4480c0532fe9 100644
> --- a/arch/sparc/kernel/head_64.S
> +++ b/arch/sparc/kernel/head_64.S
> @@ -52,7 +52,9 @@ stext:
> * Fields should be kept upward compatible and whenever any change is made,
> * HdrS version should be incremented.
> */
> - .global root_flags, ram_flags, root_dev
> + .global root_flags
> + .global ram_flags /* used to control initrd, which was removed from Linux in 2025 */

Same, can you remove them ?
Such comments in the code are generaly pointless, you can recover
history with 'git log'.

> + .global root_dev
> .global sparc_ramdisk_image, sparc_ramdisk_size
> .global sparc_ramdisk_image64
>
> @@ -71,7 +73,7 @@ root_flags:
> .half 1
> root_dev:
> .half 0
> -ram_flags:
> +ram_flags: /* used to control initrd, which was removed from Linux in 2025 */

Same, remove.

> .half 0
> sparc_ramdisk_image:
> .word 0
> diff --git a/arch/sparc/kernel/setup_32.c b/arch/sparc/kernel/setup_32.c
> index eb60be31127f..fb46fb3acf54 100644
> --- a/arch/sparc/kernel/setup_32.c
> +++ b/arch/sparc/kernel/setup_32.c
> @@ -170,8 +170,6 @@ static void __init boot_flags_init(char *commands)
>
> extern unsigned short root_flags;
> extern unsigned short root_dev;
> -extern unsigned short ram_flags;
> -#define RAMDISK_IMAGE_START_MASK 0x07FF
>
> extern int root_mountflags;
>
> @@ -335,9 +333,6 @@ void __init setup_arch(char **cmdline_p)
> if (!root_flags)
> root_mountflags &= ~MS_RDONLY;
> ROOT_DEV = old_decode_dev(root_dev);
> -#ifdef CONFIG_BLK_DEV_RAM
> - rd_image_start = ram_flags & RAMDISK_IMAGE_START_MASK;
> -#endif
>
> prom_setsync(prom_sync_me);
>
> diff --git a/arch/sparc/kernel/setup_64.c b/arch/sparc/kernel/setup_64.c
> index f728f1b00aca..79b56613c6d8 100644
> --- a/arch/sparc/kernel/setup_64.c
> +++ b/arch/sparc/kernel/setup_64.c
> @@ -143,8 +143,6 @@ static void __init boot_flags_init(char *commands)
>
> extern unsigned short root_flags;
> extern unsigned short root_dev;
> -extern unsigned short ram_flags;
> -#define RAMDISK_IMAGE_START_MASK 0x07FF
>
> extern int root_mountflags;
>
> @@ -640,9 +638,6 @@ void __init setup_arch(char **cmdline_p)
> if (!root_flags)
> root_mountflags &= ~MS_RDONLY;
> ROOT_DEV = old_decode_dev(root_dev);
> -#ifdef CONFIG_BLK_DEV_RAM
> - rd_image_start = ram_flags & RAMDISK_IMAGE_START_MASK;
> -#endif
>
> #ifdef CONFIG_IP_PNP
> if (!ic_set_manually) {
> diff --git a/arch/x86/boot/header.S b/arch/x86/boot/header.S
> index 9bea5a1e2c52..0ced2e9f100e 100644
> --- a/arch/x86/boot/header.S
> +++ b/arch/x86/boot/header.S
> @@ -235,7 +235,7 @@ hdr:
> .byte setup_sects - 1
> root_flags: .word ROOT_RDONLY
> syssize: .long ZO__edata / 16
> -ram_size: .word 0 /* Obsolete */
> +ram_size: .word 0 /* Used to control initrd, which was removed from Linux in 2025 */

Same, just remove, or make 'reserved' if you need to keep the space.

> vid_mode: .word SVGA_MODE
> root_dev: .word 0 /* Default to major/minor 0/0 */
> boot_flag: .word 0xAA55
> diff --git a/arch/x86/include/uapi/asm/bootparam.h b/arch/x86/include/uapi/asm/bootparam.h
> index f53dd3f319ba..bf56549f79bb 100644
> --- a/arch/x86/include/uapi/asm/bootparam.h
> +++ b/arch/x86/include/uapi/asm/bootparam.h
> @@ -4,9 +4,6 @@
>
> #include <asm/setup_data.h>
>
> -/* ram_size flags */
> -#define RAMDISK_IMAGE_START_MASK 0x07FF
> -
> /* loadflags */
> #define LOADED_HIGH (1<<0)
> #define KASLR_FLAG (1<<1)
> @@ -37,7 +34,7 @@ struct setup_header {
> __u8 setup_sects;
> __u16 root_flags;
> __u32 syssize;
> - __u16 ram_size;
> + __u16 ram_size; /* used to control initrd, which was removed from Linux in 2025 */

Rename it to 'reserved'.

> __u16 vid_mode;
> __u16 root_dev;
> __u16 boot_flag;
> diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
> index 6409e766fb17..797c3c9fc75e 100644
> --- a/arch/x86/kernel/setup.c
> +++ b/arch/x86/kernel/setup.c
> @@ -222,8 +222,6 @@ extern int root_mountflags;
>
> unsigned long saved_video_mode;
>
> -#define RAMDISK_IMAGE_START_MASK 0x07FF
> -
> static char __initdata command_line[COMMAND_LINE_SIZE];
> #ifdef CONFIG_CMDLINE_BOOL
> char builtin_cmdline[COMMAND_LINE_SIZE] = CONFIG_CMDLINE;
> @@ -541,9 +539,6 @@ static void __init parse_boot_params(void)
> bootloader_version = bootloader_type & 0xf;
> bootloader_version |= boot_params.hdr.ext_loader_ver << 4;
>
> -#ifdef CONFIG_BLK_DEV_RAM
> - rd_image_start = boot_params.hdr.ram_size & RAMDISK_IMAGE_START_MASK;
> -#endif
> #ifdef CONFIG_EFI
> if (!strncmp((char *)&boot_params.efi_info.efi_loader_signature,
> EFI32_LOADER_SIGNATURE, 4)) {
> diff --git a/include/linux/initrd.h b/include/linux/initrd.h
> index f1a1f4c92ded..6320a9cb6686 100644
> --- a/include/linux/initrd.h
> +++ b/include/linux/initrd.h
> @@ -5,9 +5,6 @@
>
> #define INITRD_MINOR 250 /* shouldn't collide with /dev/ram* too soon ... */
>
> -/* starting block # of image */
> -extern int rd_image_start;
> -
> /* size of a single RAM disk */
> extern unsigned long rd_size;
>
> diff --git a/init/do_mounts_rd.c b/init/do_mounts_rd.c
> index f7d53bc21e41..8e0a774a9c6f 100644
> --- a/init/do_mounts_rd.c
> +++ b/init/do_mounts_rd.c
> @@ -17,11 +17,9 @@
> static struct file *in_file, *out_file;
> static loff_t in_pos, out_pos;
>
> -int __initdata rd_image_start; /* starting block # of image */

Why do you need to change this really ? In any case this entire file
goes away in a later patch so you shouldn't bother to update that.

> -
> static int __init ramdisk_start_setup(char *str)
> {
> - rd_image_start = simple_strtol(str,NULL,0);
> + /* will be removed in next commit */

Useless comment, don't add such burden.

> return 1;
> }
> __setup("ramdisk_start=", ramdisk_start_setup);
> @@ -60,7 +58,7 @@ identify_ramdisk_image(struct file *file, loff_t pos,
> unsigned char *buf;
> const char *compress_name;
> unsigned long n;
> - int start_block = rd_image_start;
> + int start_block = 0;

Don't change, it is removed later.

>
> buf = kmalloc(size, GFP_KERNEL);
> if (!buf)
> @@ -196,7 +194,7 @@ int __init rd_load_image(char *from)
> if (IS_ERR(in_file))
> goto noclose_input;
>
> - in_pos = rd_image_start * BLOCK_SIZE;
> + in_pos = 0;

Same

> nblocks = identify_ramdisk_image(in_file, in_pos, &decompressor);
> if (nblocks < 0)
> goto done;
> --
> 2.47.2
>
>