initramfs: Expose retained initrd as sysfs file
authorAlexander Graf <graf@amazon.com>
Thu, 7 Dec 2023 23:56:54 +0000 (23:56 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 15 Dec 2023 16:23:00 +0000 (17:23 +0100)
commit2678fd2fe9ee2c569e9cb6b17e786bc8f0753538
tree39376d0d83d700190d27c1f48b3103edf4b96807
parent5133bee62f0ea5d4c316d503cc0040cac5637601
initramfs: Expose retained initrd as sysfs file

When the kernel command line option "retain_initrd" is set, we do not
free the initrd memory. However, we also don't expose it to anyone for
consumption. That leaves us in a weird situation where the only user of
this feature is ppc64 and arm64 specific kexec tooling.

To make it more generally useful, this patch adds a kobject to the
firmware object that contains the initrd context when "retain_initrd"
is set. That way, we can access the initrd any time after boot from
user space and for example hand it into kexec as --initrd parameter
if we want to reboot the same initrd. Or inspect it directly locally.

With this patch applied, there is a new /sys/firmware/initrd file when
the kernel was booted with an initrd and "retain_initrd" command line
option is set.

Signed-off-by: Alexander Graf <graf@amazon.com>
Tested-by: Bagas Sanjaya <bagasdotme@gmail.com>
Link: https://lore.kernel.org/r/20231207235654.16622-1-graf@amazon.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Documentation/ABI/testing/sysfs-firmware-initrd [new file with mode: 0644]
Documentation/admin-guide/kernel-parameters.txt
init/initramfs.c