kexec/s390: Add support for kexec_file_load
Subsystems (3)
PATCH 1/1 kexec/s390: Add support for kexec_file_load
Since kernel 4.17-rc2 s390 supports the kexec_file_load system call. Add the new system call to kexec-tools and provide the -s (--kexec-file-syscall) option for s390 to support this new feature.
--- kexec/arch/s390/kexec-image.c | 46 +++++++++++++++++++++++++++++++++++++++++++ kexec/kexec-syscall.h | 3 +++ 2 files changed, 49 insertions(+)
kexec/arch/s390/kexec-image.c +46 -0
@@ -22,6 +22,7 @@#include "../../kexec/crashdump.h" #include "kexec-s390.h" #include <arch/options.h> +#include <fcntl.h> static uint64_t crash_base, crash_end;static char command_line[COMMAND_LINESIZE ];
@@ -45,6 +46,48 @@ int command_line_add(const char *str)return 0 ; } +int image_s390_load_file (int argc,char **argv,struct kexec_info *info) +{ +const char *ramdisk =NULL ; +int opt; + +static const struct option options[] = + { + KEXEC_OPTIONS + {"command-line" ,1 ,0 ,OPT_APPEND }, + {"append" ,1 ,0 ,OPT_APPEND }, + {"initrd" ,1 ,0 ,OPT_RAMDISK }, + {0 ,0 ,0 ,0 }, + }; +static const char short_options[] =KEXEC_OPT_STR "" ; + +while ((opt =getopt_long (argc, argv, short_options, options,0 )) !=-1 ) { +switch (opt) { +case OPT_APPEND : +if (command_line_add (optarg)) +return -1 ; +break ; +case OPT_RAMDISK : + ramdisk = optarg; +break ; + } + } + +if (ramdisk) { + info->initrd_fd =open (ramdisk,O_RDONLY ); +if (info->initrd_fd ==-1 ) { +fprintf (stderr,"Could not open initrd file %s:%s\n" , + ramdisk,strerror (errno)); +return -1 ; + } + } + + info->command_line = command_line; + info->command_line_len =strlen (command_line) +1 ; + +return 0 ; +} +int image_s390_load (int argc,char **argv,const char *kernel_buf,off_t kernel_size,struct kexec_info *info)
@@ -56,6 +99,9 @@ image_s390_load(int argc, char **argv, const char *kernel_buf,unsigned int ramdisk_origin;int opt; +if (info->file_mode) +return image_s390_load_file (argc, argv, info); +static const struct option options[] = {KEXEC_OPTIONS
kexec/kexec-syscall.h +3 -0
@@ -64,6 +64,9 @@#ifdef __powerpc64__#define __NR_kexec_file_load 382#endif +#ifdef __s390x__ +#define __NR_kexec_file_load 381 +#endif #ifndef __NR_kexec_file_load/* system call not available for the arch */
Signature · 7 lines
2.16.3 _______________________________________________ kexec mailing list [email protected] http://lists.infradead.org/mailman/listinfo/kexec
Quoted 103 lines · Philipp Rudo
Since kernel 4.17-rc2 s390 supports the
kexec_file_loadsystem call. Add the new system call to kexec-tools and provide the -s (--kexec-file-syscall) option for s390 to support this new feature.Signed-off-by Philipp Rudo <[email protected]>--- kexec/arch/s390/kexec-image.c | 46 +++++++++++++++++++++++++++++++++++++++++++ kexec/kexec-syscall.h | 3 +++ 2 files changed, 49 insertions(+)kexec/arch/s390/kexec-image.c +46
-0@@ -22,6 +22,7 @@#include "../../kexec/crashdump.h" #include "kexec-s390.h" #include <arch/options.h> +#include <fcntl.h> static uint64_t crash_base, crash_end;static char command_line[COMMAND_LINESIZE ];@@ -45,6 +46,48 @@ int command_line_add(const char *str)return 0 ; } +int image_s390_load_file (int argc,char **argv,struct kexec_info *info) +{ +const char *ramdisk =NULL ; +int opt; + +static const struct option options[] = + { + KEXEC_OPTIONS + {"command-line" ,1 ,0 ,OPT_APPEND }, + {"append" ,1 ,0 ,OPT_APPEND }, + {"initrd" ,1 ,0 ,OPT_RAMDISK }, + {0 ,0 ,0 ,0 }, + }; +static const char short_options[] =KEXEC_OPT_STR "" ; + +while ((opt =getopt_long (argc, argv, short_options, options,0 )) !=-1 ) { +switch (opt) { +case OPT_APPEND : +if (command_line_add (optarg)) +return -1 ; +break ; +case OPT_RAMDISK : + ramdisk = optarg; +break ; + } + } + +if (ramdisk) { + info->initrd_fd =open (ramdisk,O_RDONLY ); +if (info->initrd_fd ==-1 ) { +fprintf (stderr,"Could not open initrd file %s:%s\n" , + ramdisk,strerror (errno)); +return -1 ; + } + } + + info->command_line = command_line; + info->command_line_len =strlen (command_line) +1 ; + +return 0 ; +} +int image_s390_load (int argc,char **argv,const char *kernel_buf,off_t kernel_size,struct kexec_info *info)@@ -56,6 +99,9 @@ image_s390_load(int argc, char **argv, const char *kernel_buf,unsigned int ramdisk_origin;int opt; +if (info->file_mode) +return image_s390_load_file (argc, argv, info); +static const struct option options[] = {KEXEC_OPTIONS kexec/kexec-syscall.h +3
-0@@ -64,6 +64,9 @@#ifdef __powerpc64__#define __NR_kexec_file_load 382#endif +#ifdef __s390x__ +#define __NR_kexec_file_load 381 +#endif #ifndef __NR_kexec_file_load/* system call not available for the arch */ Signature · 7 lines
2.16.3 _______________________________________________ kexec mailing list [email protected] http://lists.infradead.org/mailman/listinfo/kexec
Thanks
Dave
_______________________________________________
kexec mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/kexec
Simon Horman
AppliedQuoted 6 lines · Dave Young
Quoted 5 lines · Philipp Rudo
Since kernel 4.17-rc2 s390 supports the
kexec_file_loadsystem call. Add the new system call to kexec-tools and provide the -s (--kexec-file-syscall) option for s390 to support this new feature.Signed-off-by Philipp Rudo <[email protected]>
...
Quoted 1 line
Acked-by Dave Young <[email protected]>
Thanks, applied.
_______________________________________________
kexec mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/kexec
Quoted 6 lines · On Tue, 22 May 2018 10:11:04 +0200 Simon Horman <[email protected]> wrote:
Quoted 5 lines · Dave Young
Quoted 4 lines · Philipp Rudo
Since kernel 4.17-rc2 s390 supports the
kexec_file_loadsystem call. Add the new system call to kexec-tools and provide the -s (--kexec-file-syscall) option for s390 to support this new feature.
Quoted 8 lines
Quoted 1 line
Quoted 1 line
Signed-off-by Philipp Rudo <[email protected]>...
Quoted 1 line
Acked-by Dave Young <[email protected]>Thanks, applied.
Sorry for the late answer, I had the last week off. Nevertheless thanks to both of you.
Philipp