* [PATCH 0/2] kexec: Introduce CONFIG_KEXEC_FILE for new syscall
@ 2014-08-13 14:42 ` Vivek Goyal
0 siblings, 0 replies; 8+ messages in thread
From: Vivek Goyal @ 2014-08-13 14:42 UTC (permalink / raw)
To: linux-kernel, akpm; +Cc: ebiederm, hpa, sruffell, kexec, Vivek Goyal
Hi,
This patch series introduces a new config option CONFIG_KEXEC_FILE for
the newly introduce kexec syscall (kexec_file_load()). Now all the
code for new syscall compiles only if CONFIG_KEXEC_FILE=y.
This new option currently is available only on x86_64. Other arches
can enable it as as when support is added.
There is some code in new syscall which currently requires -mcmodel=large
gcc option and that option is supported only in gcc 4.4 onwards. So
old users of gcc complained about it. Now old gcc users should be
fine as long as they don't set CONFIG_KEXEC_FILE=y.
As a new option is introduced, now CONFIG_KEXEC does not have to
select CRYPTO. So I have put in a patch to remove select CRYPTO=y
from all the arches.
Thanks
Vivek
Vivek Goyal (2):
kexec: Create a new config option CONFIG_KEXEC_FILE for new syscall
kexec: Remove CONFIG_KEXEC dependency on crypto
arch/arm/Kconfig | 2 --
arch/ia64/Kconfig | 2 --
arch/m68k/Kconfig | 2 --
arch/mips/Kconfig | 2 --
arch/powerpc/Kconfig | 2 --
arch/s390/Kconfig | 2 --
arch/sh/Kconfig | 2 --
arch/tile/Kconfig | 2 --
arch/x86/Kbuild | 4 +---
arch/x86/Kconfig | 18 ++++++++++++++----
arch/x86/Makefile | 5 +----
arch/x86/kernel/Makefile | 2 +-
arch/x86/kernel/crash.c | 6 ++----
arch/x86/kernel/machine_kexec_64.c | 11 +++++++++++
arch/x86/purgatory/Makefile | 5 +----
kernel/kexec.c | 11 +++++++++++
16 files changed, 42 insertions(+), 36 deletions(-)
--
1.9.0
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 0/2] kexec: Introduce CONFIG_KEXEC_FILE for new syscall
@ 2014-08-13 14:42 ` Vivek Goyal
0 siblings, 0 replies; 8+ messages in thread
From: Vivek Goyal @ 2014-08-13 14:42 UTC (permalink / raw)
To: linux-kernel, akpm; +Cc: Vivek Goyal, kexec, ebiederm, sruffell, hpa
Hi,
This patch series introduces a new config option CONFIG_KEXEC_FILE for
the newly introduce kexec syscall (kexec_file_load()). Now all the
code for new syscall compiles only if CONFIG_KEXEC_FILE=y.
This new option currently is available only on x86_64. Other arches
can enable it as as when support is added.
There is some code in new syscall which currently requires -mcmodel=large
gcc option and that option is supported only in gcc 4.4 onwards. So
old users of gcc complained about it. Now old gcc users should be
fine as long as they don't set CONFIG_KEXEC_FILE=y.
As a new option is introduced, now CONFIG_KEXEC does not have to
select CRYPTO. So I have put in a patch to remove select CRYPTO=y
from all the arches.
Thanks
Vivek
Vivek Goyal (2):
kexec: Create a new config option CONFIG_KEXEC_FILE for new syscall
kexec: Remove CONFIG_KEXEC dependency on crypto
arch/arm/Kconfig | 2 --
arch/ia64/Kconfig | 2 --
arch/m68k/Kconfig | 2 --
arch/mips/Kconfig | 2 --
arch/powerpc/Kconfig | 2 --
arch/s390/Kconfig | 2 --
arch/sh/Kconfig | 2 --
arch/tile/Kconfig | 2 --
arch/x86/Kbuild | 4 +---
arch/x86/Kconfig | 18 ++++++++++++++----
arch/x86/Makefile | 5 +----
arch/x86/kernel/Makefile | 2 +-
arch/x86/kernel/crash.c | 6 ++----
arch/x86/kernel/machine_kexec_64.c | 11 +++++++++++
arch/x86/purgatory/Makefile | 5 +----
kernel/kexec.c | 11 +++++++++++
16 files changed, 42 insertions(+), 36 deletions(-)
--
1.9.0
_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 1/2] kexec: Create a new config option CONFIG_KEXEC_FILE for new syscall
2014-08-13 14:42 ` Vivek Goyal
@ 2014-08-13 14:42 ` Vivek Goyal
-1 siblings, 0 replies; 8+ messages in thread
From: Vivek Goyal @ 2014-08-13 14:42 UTC (permalink / raw)
To: linux-kernel, akpm; +Cc: ebiederm, hpa, sruffell, kexec, Vivek Goyal
Currently new system call kexec_file_load() and all the associated code
compiles if CONFIG_KEXEC=y. But new syscall also compiles purgatory code
which currently uses gcc option -mcmodel=large. This option seems to be
available only gcc 4.4 onwards.
Hiding new functionality behind a new config option will not break
existing users of old gcc. Those who wish to enable new functionality
will require new gcc. Having said that, I am trying to figure out how
can I move away from using -mcmodel=large but that can take a while.
I think there are other advantages of introducing this new config
option. As this option will be enabled only on x86_64, other arches
don't have to compile generic kexec code which will never be used.
This new code selects CRYPTO=y and CRYPTO_SHA256=y. And all other
arches had to do this for CONFIG_KEXEC. Now with introduction
of new config option, we can remove crypto dependency from other
arches.
Now CONFIG_KEXEC_FILE is available only on x86_64. So whereever I
had CONFIG_X86_64 defined, I got rid of that.
For CONFIG_KEXEC_FILE, instead of doing select CRYPTO=y, I changed
it to "depends on CRYPTO=y". This should be safer as "select" is
not recursive.
Signed-off-by: Vivek Goyal <vgoyal@redhat.com>
---
arch/x86/Kbuild | 4 +---
arch/x86/Kconfig | 18 ++++++++++++++----
arch/x86/Makefile | 5 +----
arch/x86/kernel/Makefile | 2 +-
arch/x86/kernel/crash.c | 6 ++----
arch/x86/kernel/machine_kexec_64.c | 11 +++++++++++
arch/x86/purgatory/Makefile | 5 +----
kernel/kexec.c | 11 +++++++++++
8 files changed, 42 insertions(+), 20 deletions(-)
diff --git a/arch/x86/Kbuild b/arch/x86/Kbuild
index 61b6d51..3942f74 100644
--- a/arch/x86/Kbuild
+++ b/arch/x86/Kbuild
@@ -17,6 +17,4 @@ obj-$(CONFIG_IA32_EMULATION) += ia32/
obj-y += platform/
obj-y += net/
-ifeq ($(CONFIG_X86_64),y)
-obj-$(CONFIG_KEXEC) += purgatory/
-endif
+obj-$(CONFIG_KEXEC_FILE) += purgatory/
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index 4aafd32..a4bb9d0 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -1582,9 +1582,6 @@ source kernel/Kconfig.hz
config KEXEC
bool "kexec system call"
- select BUILD_BIN2C
- select CRYPTO
- select CRYPTO_SHA256
---help---
kexec is a system call that implements the ability to shutdown your
current kernel, and to start another kernel. It is like a reboot
@@ -1599,9 +1596,22 @@ config KEXEC
interface is strongly in flux, so no good recommendation can be
made.
+config KEXEC_FILE
+ bool "kexec file based system call"
+ select BUILD_BIN2C
+ depends on KEXEC
+ depends on X86_64
+ depends on CRYPTO=y
+ depends on CRYPTO_SHA256=y
+ ---help---
+ This is new version of kexec system call. This system call is
+ file based and takes file descriptors as system call argument
+ for kernel and initramfs as opposed to list of segments as
+ accepted by previous system call.
+
config KEXEC_VERIFY_SIG
bool "Verify kernel signature during kexec_file_load() syscall"
- depends on KEXEC
+ depends on KEXEC_FILE
---help---
This option makes kernel signature verification mandatory for
kexec_file_load() syscall. If kernel is signature can not be
diff --git a/arch/x86/Makefile b/arch/x86/Makefile
index c1aa368..c96bcec 100644
--- a/arch/x86/Makefile
+++ b/arch/x86/Makefile
@@ -184,11 +184,8 @@ archheaders:
$(Q)$(MAKE) $(build)=arch/x86/syscalls all
archprepare:
-ifeq ($(CONFIG_KEXEC),y)
-# Build only for 64bit. No loaders for 32bit yet.
- ifeq ($(CONFIG_X86_64),y)
+ifeq ($(CONFIG_KEXEC_FILE),y)
$(Q)$(MAKE) $(build)=arch/x86/purgatory arch/x86/purgatory/kexec-purgatory.c
- endif
endif
###
diff --git a/arch/x86/kernel/Makefile b/arch/x86/kernel/Makefile
index b5ea75c..ada2e2d 100644
--- a/arch/x86/kernel/Makefile
+++ b/arch/x86/kernel/Makefile
@@ -71,6 +71,7 @@ obj-$(CONFIG_FTRACE_SYSCALLS) += ftrace.o
obj-$(CONFIG_X86_TSC) += trace_clock.o
obj-$(CONFIG_KEXEC) += machine_kexec_$(BITS).o
obj-$(CONFIG_KEXEC) += relocate_kernel_$(BITS).o crash.o
+obj-$(CONFIG_KEXEC_FILE) += kexec-bzimage64.o
obj-$(CONFIG_CRASH_DUMP) += crash_dump_$(BITS).o
obj-y += kprobes/
obj-$(CONFIG_MODULES) += module.o
@@ -118,5 +119,4 @@ ifeq ($(CONFIG_X86_64),y)
obj-$(CONFIG_PCI_MMCONFIG) += mmconf-fam10h_64.o
obj-y += vsmp_64.o
- obj-$(CONFIG_KEXEC) += kexec-bzimage64.o
endif
diff --git a/arch/x86/kernel/crash.c b/arch/x86/kernel/crash.c
index 0553a34..a618fcd 100644
--- a/arch/x86/kernel/crash.c
+++ b/arch/x86/kernel/crash.c
@@ -182,8 +182,7 @@ void native_machine_crash_shutdown(struct pt_regs *regs)
crash_save_cpu(regs, safe_smp_processor_id());
}
-#ifdef CONFIG_X86_64
-
+#ifdef CONFIG_KEXEC_FILE
static int get_nr_ram_ranges_callback(unsigned long start_pfn,
unsigned long nr_pfn, void *arg)
{
@@ -696,5 +695,4 @@ int crash_load_segments(struct kimage *image)
return ret;
}
-
-#endif /* CONFIG_X86_64 */
+#endif /* CONFIG_KEXEC_FILE */
diff --git a/arch/x86/kernel/machine_kexec_64.c b/arch/x86/kernel/machine_kexec_64.c
index 8b04018..4859810 100644
--- a/arch/x86/kernel/machine_kexec_64.c
+++ b/arch/x86/kernel/machine_kexec_64.c
@@ -25,9 +25,11 @@
#include <asm/debugreg.h>
#include <asm/kexec-bzimage64.h>
+#ifdef CONFIG_KEXEC_FILE
static struct kexec_file_ops *kexec_file_loaders[] = {
&kexec_bzImage64_ops,
};
+#endif
static void free_transition_pgtable(struct kimage *image)
{
@@ -178,6 +180,7 @@ static void load_segments(void)
);
}
+#ifdef CONFIG_KEXEC_FILE
/* Update purgatory as needed after various image segments have been prepared */
static int arch_update_purgatory(struct kimage *image)
{
@@ -209,6 +212,12 @@ static int arch_update_purgatory(struct kimage *image)
return ret;
}
+#else /* !CONFIG_KEXEC_FILE */
+static inline int arch_update_purgatory(struct kimage *image)
+{
+ return 0;
+}
+#endif /* CONFIG_KEXEC_FILE */
int machine_kexec_prepare(struct kimage *image)
{
@@ -329,6 +338,7 @@ void arch_crash_save_vmcoreinfo(void)
/* arch-dependent functionality related to kexec file-based syscall */
+#ifdef CONFIG_KEXEC_FILE
int arch_kexec_kernel_image_probe(struct kimage *image, void *buf,
unsigned long buf_len)
{
@@ -522,3 +532,4 @@ overflow:
(int)ELF64_R_TYPE(rel[i].r_info), value);
return -ENOEXEC;
}
+#endif /* CONFIG_KEXEC_FILE */
diff --git a/arch/x86/purgatory/Makefile b/arch/x86/purgatory/Makefile
index 7fde9ee..c4ae06e 100644
--- a/arch/x86/purgatory/Makefile
+++ b/arch/x86/purgatory/Makefile
@@ -24,7 +24,4 @@ $(obj)/kexec-purgatory.c: $(obj)/purgatory.ro FORCE
$(call if_changed,bin2c)
-# No loaders for 32bits yet.
-ifeq ($(CONFIG_X86_64),y)
- obj-$(CONFIG_KEXEC) += kexec-purgatory.o
-endif
+obj-$(CONFIG_KEXEC_FILE) += kexec-purgatory.o
diff --git a/kernel/kexec.c b/kernel/kexec.c
index 0b49a0a..2bee072 100644
--- a/kernel/kexec.c
+++ b/kernel/kexec.c
@@ -64,7 +64,9 @@ bool kexec_in_progress = false;
char __weak kexec_purgatory[0];
size_t __weak kexec_purgatory_size = 0;
+#ifdef CONFIG_KEXEC_FILE
static int kexec_calculate_store_digests(struct kimage *image);
+#endif
/* Location of the reserved area for the crash kernel */
struct resource crashk_res = {
@@ -341,6 +343,7 @@ out_free_image:
return ret;
}
+#ifdef CONFIG_KEXEC_FILE
static int copy_file_from_fd(int fd, void **buf, unsigned long *buf_len)
{
struct fd f = fdget(fd);
@@ -612,6 +615,9 @@ out_free_image:
kfree(image);
return ret;
}
+#else /* CONFIG_KEXEC_FILE */
+static inline void kimage_file_post_load_cleanup(struct kimage *image) { }
+#endif /* CONFIG_KEXEC_FILE */
static int kimage_is_destination_range(struct kimage *image,
unsigned long start,
@@ -1375,6 +1381,7 @@ COMPAT_SYSCALL_DEFINE4(kexec_load, compat_ulong_t, entry,
}
#endif
+#ifdef CONFIG_KEXEC_FILE
SYSCALL_DEFINE5(kexec_file_load, int, kernel_fd, int, initrd_fd,
unsigned long, cmdline_len, const char __user *, cmdline_ptr,
unsigned long, flags)
@@ -1451,6 +1458,8 @@ out:
return ret;
}
+#endif /* CONFIG_KEXEC_FILE */
+
void crash_kexec(struct pt_regs *regs)
{
/* Take the kexec_mutex here to prevent sys_kexec_load
@@ -2006,6 +2015,7 @@ static int __init crash_save_vmcoreinfo_init(void)
subsys_initcall(crash_save_vmcoreinfo_init);
+#ifdef CONFIG_KEXEC_FILE
static int __kexec_add_segment(struct kimage *image, char *buf,
unsigned long bufsz, unsigned long mem,
unsigned long memsz)
@@ -2682,6 +2692,7 @@ int kexec_purgatory_get_set_symbol(struct kimage *image, const char *name,
return 0;
}
+#endif /* CONFIG_KEXEC_FILE */
/*
* Move into place and start executing a preloaded standalone
--
1.9.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 1/2] kexec: Create a new config option CONFIG_KEXEC_FILE for new syscall
@ 2014-08-13 14:42 ` Vivek Goyal
0 siblings, 0 replies; 8+ messages in thread
From: Vivek Goyal @ 2014-08-13 14:42 UTC (permalink / raw)
To: linux-kernel, akpm; +Cc: Vivek Goyal, kexec, ebiederm, sruffell, hpa
Currently new system call kexec_file_load() and all the associated code
compiles if CONFIG_KEXEC=y. But new syscall also compiles purgatory code
which currently uses gcc option -mcmodel=large. This option seems to be
available only gcc 4.4 onwards.
Hiding new functionality behind a new config option will not break
existing users of old gcc. Those who wish to enable new functionality
will require new gcc. Having said that, I am trying to figure out how
can I move away from using -mcmodel=large but that can take a while.
I think there are other advantages of introducing this new config
option. As this option will be enabled only on x86_64, other arches
don't have to compile generic kexec code which will never be used.
This new code selects CRYPTO=y and CRYPTO_SHA256=y. And all other
arches had to do this for CONFIG_KEXEC. Now with introduction
of new config option, we can remove crypto dependency from other
arches.
Now CONFIG_KEXEC_FILE is available only on x86_64. So whereever I
had CONFIG_X86_64 defined, I got rid of that.
For CONFIG_KEXEC_FILE, instead of doing select CRYPTO=y, I changed
it to "depends on CRYPTO=y". This should be safer as "select" is
not recursive.
Signed-off-by: Vivek Goyal <vgoyal@redhat.com>
---
arch/x86/Kbuild | 4 +---
arch/x86/Kconfig | 18 ++++++++++++++----
arch/x86/Makefile | 5 +----
arch/x86/kernel/Makefile | 2 +-
arch/x86/kernel/crash.c | 6 ++----
arch/x86/kernel/machine_kexec_64.c | 11 +++++++++++
arch/x86/purgatory/Makefile | 5 +----
kernel/kexec.c | 11 +++++++++++
8 files changed, 42 insertions(+), 20 deletions(-)
diff --git a/arch/x86/Kbuild b/arch/x86/Kbuild
index 61b6d51..3942f74 100644
--- a/arch/x86/Kbuild
+++ b/arch/x86/Kbuild
@@ -17,6 +17,4 @@ obj-$(CONFIG_IA32_EMULATION) += ia32/
obj-y += platform/
obj-y += net/
-ifeq ($(CONFIG_X86_64),y)
-obj-$(CONFIG_KEXEC) += purgatory/
-endif
+obj-$(CONFIG_KEXEC_FILE) += purgatory/
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index 4aafd32..a4bb9d0 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -1582,9 +1582,6 @@ source kernel/Kconfig.hz
config KEXEC
bool "kexec system call"
- select BUILD_BIN2C
- select CRYPTO
- select CRYPTO_SHA256
---help---
kexec is a system call that implements the ability to shutdown your
current kernel, and to start another kernel. It is like a reboot
@@ -1599,9 +1596,22 @@ config KEXEC
interface is strongly in flux, so no good recommendation can be
made.
+config KEXEC_FILE
+ bool "kexec file based system call"
+ select BUILD_BIN2C
+ depends on KEXEC
+ depends on X86_64
+ depends on CRYPTO=y
+ depends on CRYPTO_SHA256=y
+ ---help---
+ This is new version of kexec system call. This system call is
+ file based and takes file descriptors as system call argument
+ for kernel and initramfs as opposed to list of segments as
+ accepted by previous system call.
+
config KEXEC_VERIFY_SIG
bool "Verify kernel signature during kexec_file_load() syscall"
- depends on KEXEC
+ depends on KEXEC_FILE
---help---
This option makes kernel signature verification mandatory for
kexec_file_load() syscall. If kernel is signature can not be
diff --git a/arch/x86/Makefile b/arch/x86/Makefile
index c1aa368..c96bcec 100644
--- a/arch/x86/Makefile
+++ b/arch/x86/Makefile
@@ -184,11 +184,8 @@ archheaders:
$(Q)$(MAKE) $(build)=arch/x86/syscalls all
archprepare:
-ifeq ($(CONFIG_KEXEC),y)
-# Build only for 64bit. No loaders for 32bit yet.
- ifeq ($(CONFIG_X86_64),y)
+ifeq ($(CONFIG_KEXEC_FILE),y)
$(Q)$(MAKE) $(build)=arch/x86/purgatory arch/x86/purgatory/kexec-purgatory.c
- endif
endif
###
diff --git a/arch/x86/kernel/Makefile b/arch/x86/kernel/Makefile
index b5ea75c..ada2e2d 100644
--- a/arch/x86/kernel/Makefile
+++ b/arch/x86/kernel/Makefile
@@ -71,6 +71,7 @@ obj-$(CONFIG_FTRACE_SYSCALLS) += ftrace.o
obj-$(CONFIG_X86_TSC) += trace_clock.o
obj-$(CONFIG_KEXEC) += machine_kexec_$(BITS).o
obj-$(CONFIG_KEXEC) += relocate_kernel_$(BITS).o crash.o
+obj-$(CONFIG_KEXEC_FILE) += kexec-bzimage64.o
obj-$(CONFIG_CRASH_DUMP) += crash_dump_$(BITS).o
obj-y += kprobes/
obj-$(CONFIG_MODULES) += module.o
@@ -118,5 +119,4 @@ ifeq ($(CONFIG_X86_64),y)
obj-$(CONFIG_PCI_MMCONFIG) += mmconf-fam10h_64.o
obj-y += vsmp_64.o
- obj-$(CONFIG_KEXEC) += kexec-bzimage64.o
endif
diff --git a/arch/x86/kernel/crash.c b/arch/x86/kernel/crash.c
index 0553a34..a618fcd 100644
--- a/arch/x86/kernel/crash.c
+++ b/arch/x86/kernel/crash.c
@@ -182,8 +182,7 @@ void native_machine_crash_shutdown(struct pt_regs *regs)
crash_save_cpu(regs, safe_smp_processor_id());
}
-#ifdef CONFIG_X86_64
-
+#ifdef CONFIG_KEXEC_FILE
static int get_nr_ram_ranges_callback(unsigned long start_pfn,
unsigned long nr_pfn, void *arg)
{
@@ -696,5 +695,4 @@ int crash_load_segments(struct kimage *image)
return ret;
}
-
-#endif /* CONFIG_X86_64 */
+#endif /* CONFIG_KEXEC_FILE */
diff --git a/arch/x86/kernel/machine_kexec_64.c b/arch/x86/kernel/machine_kexec_64.c
index 8b04018..4859810 100644
--- a/arch/x86/kernel/machine_kexec_64.c
+++ b/arch/x86/kernel/machine_kexec_64.c
@@ -25,9 +25,11 @@
#include <asm/debugreg.h>
#include <asm/kexec-bzimage64.h>
+#ifdef CONFIG_KEXEC_FILE
static struct kexec_file_ops *kexec_file_loaders[] = {
&kexec_bzImage64_ops,
};
+#endif
static void free_transition_pgtable(struct kimage *image)
{
@@ -178,6 +180,7 @@ static void load_segments(void)
);
}
+#ifdef CONFIG_KEXEC_FILE
/* Update purgatory as needed after various image segments have been prepared */
static int arch_update_purgatory(struct kimage *image)
{
@@ -209,6 +212,12 @@ static int arch_update_purgatory(struct kimage *image)
return ret;
}
+#else /* !CONFIG_KEXEC_FILE */
+static inline int arch_update_purgatory(struct kimage *image)
+{
+ return 0;
+}
+#endif /* CONFIG_KEXEC_FILE */
int machine_kexec_prepare(struct kimage *image)
{
@@ -329,6 +338,7 @@ void arch_crash_save_vmcoreinfo(void)
/* arch-dependent functionality related to kexec file-based syscall */
+#ifdef CONFIG_KEXEC_FILE
int arch_kexec_kernel_image_probe(struct kimage *image, void *buf,
unsigned long buf_len)
{
@@ -522,3 +532,4 @@ overflow:
(int)ELF64_R_TYPE(rel[i].r_info), value);
return -ENOEXEC;
}
+#endif /* CONFIG_KEXEC_FILE */
diff --git a/arch/x86/purgatory/Makefile b/arch/x86/purgatory/Makefile
index 7fde9ee..c4ae06e 100644
--- a/arch/x86/purgatory/Makefile
+++ b/arch/x86/purgatory/Makefile
@@ -24,7 +24,4 @@ $(obj)/kexec-purgatory.c: $(obj)/purgatory.ro FORCE
$(call if_changed,bin2c)
-# No loaders for 32bits yet.
-ifeq ($(CONFIG_X86_64),y)
- obj-$(CONFIG_KEXEC) += kexec-purgatory.o
-endif
+obj-$(CONFIG_KEXEC_FILE) += kexec-purgatory.o
diff --git a/kernel/kexec.c b/kernel/kexec.c
index 0b49a0a..2bee072 100644
--- a/kernel/kexec.c
+++ b/kernel/kexec.c
@@ -64,7 +64,9 @@ bool kexec_in_progress = false;
char __weak kexec_purgatory[0];
size_t __weak kexec_purgatory_size = 0;
+#ifdef CONFIG_KEXEC_FILE
static int kexec_calculate_store_digests(struct kimage *image);
+#endif
/* Location of the reserved area for the crash kernel */
struct resource crashk_res = {
@@ -341,6 +343,7 @@ out_free_image:
return ret;
}
+#ifdef CONFIG_KEXEC_FILE
static int copy_file_from_fd(int fd, void **buf, unsigned long *buf_len)
{
struct fd f = fdget(fd);
@@ -612,6 +615,9 @@ out_free_image:
kfree(image);
return ret;
}
+#else /* CONFIG_KEXEC_FILE */
+static inline void kimage_file_post_load_cleanup(struct kimage *image) { }
+#endif /* CONFIG_KEXEC_FILE */
static int kimage_is_destination_range(struct kimage *image,
unsigned long start,
@@ -1375,6 +1381,7 @@ COMPAT_SYSCALL_DEFINE4(kexec_load, compat_ulong_t, entry,
}
#endif
+#ifdef CONFIG_KEXEC_FILE
SYSCALL_DEFINE5(kexec_file_load, int, kernel_fd, int, initrd_fd,
unsigned long, cmdline_len, const char __user *, cmdline_ptr,
unsigned long, flags)
@@ -1451,6 +1458,8 @@ out:
return ret;
}
+#endif /* CONFIG_KEXEC_FILE */
+
void crash_kexec(struct pt_regs *regs)
{
/* Take the kexec_mutex here to prevent sys_kexec_load
@@ -2006,6 +2015,7 @@ static int __init crash_save_vmcoreinfo_init(void)
subsys_initcall(crash_save_vmcoreinfo_init);
+#ifdef CONFIG_KEXEC_FILE
static int __kexec_add_segment(struct kimage *image, char *buf,
unsigned long bufsz, unsigned long mem,
unsigned long memsz)
@@ -2682,6 +2692,7 @@ int kexec_purgatory_get_set_symbol(struct kimage *image, const char *name,
return 0;
}
+#endif /* CONFIG_KEXEC_FILE */
/*
* Move into place and start executing a preloaded standalone
--
1.9.0
_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 2/2] kexec: Remove CONFIG_KEXEC dependency on crypto
2014-08-13 14:42 ` Vivek Goyal
@ 2014-08-13 14:43 ` Vivek Goyal
-1 siblings, 0 replies; 8+ messages in thread
From: Vivek Goyal @ 2014-08-13 14:43 UTC (permalink / raw)
To: linux-kernel, akpm; +Cc: ebiederm, hpa, sruffell, kexec, Vivek Goyal
New system call depends on crypto. As it did not have a separate config
option, CONFIG_KEXEC was modified to select CRYPTO and CRYPTO_SHA256.
But now previous patch introduced a new config option for new syscall.
So CONFIG_KEXEC does not require crypto. Remove that dependency.
Signed-off-by: Vivek Goyal <vgoyal@redhat.com>
---
arch/arm/Kconfig | 2 --
arch/ia64/Kconfig | 2 --
arch/m68k/Kconfig | 2 --
arch/mips/Kconfig | 2 --
arch/powerpc/Kconfig | 2 --
arch/s390/Kconfig | 2 --
arch/sh/Kconfig | 2 --
arch/tile/Kconfig | 2 --
8 files changed, 16 deletions(-)
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index c49a775..32cbbd5 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -1983,8 +1983,6 @@ config XIP_PHYS_ADDR
config KEXEC
bool "Kexec system call (EXPERIMENTAL)"
depends on (!SMP || PM_SLEEP_SMP)
- select CRYPTO
- select CRYPTO_SHA256
help
kexec is a system call that implements the ability to shutdown your
current kernel, and to start another kernel. It is like a reboot
diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig
index 64aefb7..c84c88b 100644
--- a/arch/ia64/Kconfig
+++ b/arch/ia64/Kconfig
@@ -549,8 +549,6 @@ source "drivers/sn/Kconfig"
config KEXEC
bool "kexec system call"
depends on !IA64_HP_SIM && (!SMP || HOTPLUG_CPU)
- select CRYPTO
- select CRYPTO_SHA256
help
kexec is a system call that implements the ability to shutdown your
current kernel, and to start another kernel. It is like a reboot
diff --git a/arch/m68k/Kconfig b/arch/m68k/Kconfig
index 3ff8c9a..87b7c75 100644
--- a/arch/m68k/Kconfig
+++ b/arch/m68k/Kconfig
@@ -91,8 +91,6 @@ config MMU_SUN3
config KEXEC
bool "kexec system call"
depends on M68KCLASSIC
- select CRYPTO
- select CRYPTO_SHA256
help
kexec is a system call that implements the ability to shutdown your
current kernel, and to start another kernel. It is like a reboot
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
index df51e78..900c7e5 100644
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
@@ -2396,8 +2396,6 @@ source "kernel/Kconfig.preempt"
config KEXEC
bool "Kexec system call"
- select CRYPTO
- select CRYPTO_SHA256
help
kexec is a system call that implements the ability to shutdown your
current kernel, and to start another kernel. It is like a reboot
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index a577609f..4bc7b62 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -399,8 +399,6 @@ config PPC64_SUPPORTS_MEMORY_FAILURE
config KEXEC
bool "kexec system call"
depends on (PPC_BOOK3S || FSL_BOOKE || (44x && !SMP))
- select CRYPTO
- select CRYPTO_SHA256
help
kexec is a system call that implements the ability to shutdown your
current kernel, and to start another kernel. It is like a reboot
diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig
index ab39ceb8..05c78bb 100644
--- a/arch/s390/Kconfig
+++ b/arch/s390/Kconfig
@@ -48,8 +48,6 @@ config ARCH_SUPPORTS_DEBUG_PAGEALLOC
config KEXEC
def_bool y
- select CRYPTO
- select CRYPTO_SHA256
config AUDIT_ARCH
def_bool y
diff --git a/arch/sh/Kconfig b/arch/sh/Kconfig
index 453fa5c..aa2df3e 100644
--- a/arch/sh/Kconfig
+++ b/arch/sh/Kconfig
@@ -595,8 +595,6 @@ source kernel/Kconfig.hz
config KEXEC
bool "kexec system call (EXPERIMENTAL)"
depends on SUPERH32 && MMU
- select CRYPTO
- select CRYPTO_SHA256
help
kexec is a system call that implements the ability to shutdown your
current kernel, and to start another kernel. It is like a reboot
diff --git a/arch/tile/Kconfig b/arch/tile/Kconfig
index a3ffe2d..7fcd492 100644
--- a/arch/tile/Kconfig
+++ b/arch/tile/Kconfig
@@ -191,8 +191,6 @@ source "kernel/Kconfig.hz"
config KEXEC
bool "kexec system call"
- select CRYPTO
- select CRYPTO_SHA256
---help---
kexec is a system call that implements the ability to shutdown your
current kernel, and to start another kernel. It is like a reboot
--
1.9.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 2/2] kexec: Remove CONFIG_KEXEC dependency on crypto
@ 2014-08-13 14:43 ` Vivek Goyal
0 siblings, 0 replies; 8+ messages in thread
From: Vivek Goyal @ 2014-08-13 14:43 UTC (permalink / raw)
To: linux-kernel, akpm; +Cc: Vivek Goyal, kexec, ebiederm, sruffell, hpa
New system call depends on crypto. As it did not have a separate config
option, CONFIG_KEXEC was modified to select CRYPTO and CRYPTO_SHA256.
But now previous patch introduced a new config option for new syscall.
So CONFIG_KEXEC does not require crypto. Remove that dependency.
Signed-off-by: Vivek Goyal <vgoyal@redhat.com>
---
arch/arm/Kconfig | 2 --
arch/ia64/Kconfig | 2 --
arch/m68k/Kconfig | 2 --
arch/mips/Kconfig | 2 --
arch/powerpc/Kconfig | 2 --
arch/s390/Kconfig | 2 --
arch/sh/Kconfig | 2 --
arch/tile/Kconfig | 2 --
8 files changed, 16 deletions(-)
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index c49a775..32cbbd5 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -1983,8 +1983,6 @@ config XIP_PHYS_ADDR
config KEXEC
bool "Kexec system call (EXPERIMENTAL)"
depends on (!SMP || PM_SLEEP_SMP)
- select CRYPTO
- select CRYPTO_SHA256
help
kexec is a system call that implements the ability to shutdown your
current kernel, and to start another kernel. It is like a reboot
diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig
index 64aefb7..c84c88b 100644
--- a/arch/ia64/Kconfig
+++ b/arch/ia64/Kconfig
@@ -549,8 +549,6 @@ source "drivers/sn/Kconfig"
config KEXEC
bool "kexec system call"
depends on !IA64_HP_SIM && (!SMP || HOTPLUG_CPU)
- select CRYPTO
- select CRYPTO_SHA256
help
kexec is a system call that implements the ability to shutdown your
current kernel, and to start another kernel. It is like a reboot
diff --git a/arch/m68k/Kconfig b/arch/m68k/Kconfig
index 3ff8c9a..87b7c75 100644
--- a/arch/m68k/Kconfig
+++ b/arch/m68k/Kconfig
@@ -91,8 +91,6 @@ config MMU_SUN3
config KEXEC
bool "kexec system call"
depends on M68KCLASSIC
- select CRYPTO
- select CRYPTO_SHA256
help
kexec is a system call that implements the ability to shutdown your
current kernel, and to start another kernel. It is like a reboot
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
index df51e78..900c7e5 100644
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
@@ -2396,8 +2396,6 @@ source "kernel/Kconfig.preempt"
config KEXEC
bool "Kexec system call"
- select CRYPTO
- select CRYPTO_SHA256
help
kexec is a system call that implements the ability to shutdown your
current kernel, and to start another kernel. It is like a reboot
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index a577609f..4bc7b62 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -399,8 +399,6 @@ config PPC64_SUPPORTS_MEMORY_FAILURE
config KEXEC
bool "kexec system call"
depends on (PPC_BOOK3S || FSL_BOOKE || (44x && !SMP))
- select CRYPTO
- select CRYPTO_SHA256
help
kexec is a system call that implements the ability to shutdown your
current kernel, and to start another kernel. It is like a reboot
diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig
index ab39ceb8..05c78bb 100644
--- a/arch/s390/Kconfig
+++ b/arch/s390/Kconfig
@@ -48,8 +48,6 @@ config ARCH_SUPPORTS_DEBUG_PAGEALLOC
config KEXEC
def_bool y
- select CRYPTO
- select CRYPTO_SHA256
config AUDIT_ARCH
def_bool y
diff --git a/arch/sh/Kconfig b/arch/sh/Kconfig
index 453fa5c..aa2df3e 100644
--- a/arch/sh/Kconfig
+++ b/arch/sh/Kconfig
@@ -595,8 +595,6 @@ source kernel/Kconfig.hz
config KEXEC
bool "kexec system call (EXPERIMENTAL)"
depends on SUPERH32 && MMU
- select CRYPTO
- select CRYPTO_SHA256
help
kexec is a system call that implements the ability to shutdown your
current kernel, and to start another kernel. It is like a reboot
diff --git a/arch/tile/Kconfig b/arch/tile/Kconfig
index a3ffe2d..7fcd492 100644
--- a/arch/tile/Kconfig
+++ b/arch/tile/Kconfig
@@ -191,8 +191,6 @@ source "kernel/Kconfig.hz"
config KEXEC
bool "kexec system call"
- select CRYPTO
- select CRYPTO_SHA256
---help---
kexec is a system call that implements the ability to shutdown your
current kernel, and to start another kernel. It is like a reboot
--
1.9.0
_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 1/2] kexec: Create a new config option CONFIG_KEXEC_FILE for new syscall
2014-08-13 14:42 ` Vivek Goyal
@ 2014-08-14 18:37 ` Shaun Ruffell
-1 siblings, 0 replies; 8+ messages in thread
From: Shaun Ruffell @ 2014-08-14 18:37 UTC (permalink / raw)
To: Vivek Goyal; +Cc: linux-kernel, akpm, ebiederm, hpa, kexec
On Wed, Aug 13, 2014 at 10:42:59AM -0400, Vivek Goyal wrote:
> Currently new system call kexec_file_load() and all the associated code
> compiles if CONFIG_KEXEC=y. But new syscall also compiles purgatory code
> which currently uses gcc option -mcmodel=large. This option seems to be
> available only gcc 4.4 onwards.
>
> Hiding new functionality behind a new config option will not break
> existing users of old gcc. Those who wish to enable new functionality
> will require new gcc. Having said that, I am trying to figure out how
> can I move away from using -mcmodel=large but that can take a while.
>
> I think there are other advantages of introducing this new config
> option. As this option will be enabled only on x86_64, other arches
> don't have to compile generic kexec code which will never be used.
> This new code selects CRYPTO=y and CRYPTO_SHA256=y. And all other
> arches had to do this for CONFIG_KEXEC. Now with introduction
> of new config option, we can remove crypto dependency from other
> arches.
>
> Now CONFIG_KEXEC_FILE is available only on x86_64. So whereever I
> had CONFIG_X86_64 defined, I got rid of that.
>
> For CONFIG_KEXEC_FILE, instead of doing select CRYPTO=y, I changed
> it to "depends on CRYPTO=y". This should be safer as "select" is
> not recursive.
>
> Signed-off-by: Vivek Goyal <vgoyal@redhat.com>
> ---
> arch/x86/Kbuild | 4 +---
> arch/x86/Kconfig | 18 ++++++++++++++----
> arch/x86/Makefile | 5 +----
> arch/x86/kernel/Makefile | 2 +-
> arch/x86/kernel/crash.c | 6 ++----
> arch/x86/kernel/machine_kexec_64.c | 11 +++++++++++
> arch/x86/purgatory/Makefile | 5 +----
> kernel/kexec.c | 11 +++++++++++
> 8 files changed, 42 insertions(+), 20 deletions(-)
Thanks Vivek. It is no surprise but applying this patch resolved my
issue.
Shaun
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/2] kexec: Create a new config option CONFIG_KEXEC_FILE for new syscall
@ 2014-08-14 18:37 ` Shaun Ruffell
0 siblings, 0 replies; 8+ messages in thread
From: Shaun Ruffell @ 2014-08-14 18:37 UTC (permalink / raw)
To: Vivek Goyal; +Cc: akpm, hpa, kexec, linux-kernel, ebiederm
On Wed, Aug 13, 2014 at 10:42:59AM -0400, Vivek Goyal wrote:
> Currently new system call kexec_file_load() and all the associated code
> compiles if CONFIG_KEXEC=y. But new syscall also compiles purgatory code
> which currently uses gcc option -mcmodel=large. This option seems to be
> available only gcc 4.4 onwards.
>
> Hiding new functionality behind a new config option will not break
> existing users of old gcc. Those who wish to enable new functionality
> will require new gcc. Having said that, I am trying to figure out how
> can I move away from using -mcmodel=large but that can take a while.
>
> I think there are other advantages of introducing this new config
> option. As this option will be enabled only on x86_64, other arches
> don't have to compile generic kexec code which will never be used.
> This new code selects CRYPTO=y and CRYPTO_SHA256=y. And all other
> arches had to do this for CONFIG_KEXEC. Now with introduction
> of new config option, we can remove crypto dependency from other
> arches.
>
> Now CONFIG_KEXEC_FILE is available only on x86_64. So whereever I
> had CONFIG_X86_64 defined, I got rid of that.
>
> For CONFIG_KEXEC_FILE, instead of doing select CRYPTO=y, I changed
> it to "depends on CRYPTO=y". This should be safer as "select" is
> not recursive.
>
> Signed-off-by: Vivek Goyal <vgoyal@redhat.com>
> ---
> arch/x86/Kbuild | 4 +---
> arch/x86/Kconfig | 18 ++++++++++++++----
> arch/x86/Makefile | 5 +----
> arch/x86/kernel/Makefile | 2 +-
> arch/x86/kernel/crash.c | 6 ++----
> arch/x86/kernel/machine_kexec_64.c | 11 +++++++++++
> arch/x86/purgatory/Makefile | 5 +----
> kernel/kexec.c | 11 +++++++++++
> 8 files changed, 42 insertions(+), 20 deletions(-)
Thanks Vivek. It is no surprise but applying this patch resolved my
issue.
Shaun
_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2014-08-14 18:38 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-08-13 14:42 [PATCH 0/2] kexec: Introduce CONFIG_KEXEC_FILE for new syscall Vivek Goyal
2014-08-13 14:42 ` Vivek Goyal
2014-08-13 14:42 ` [PATCH 1/2] kexec: Create a new config option " Vivek Goyal
2014-08-13 14:42 ` Vivek Goyal
2014-08-14 18:37 ` Shaun Ruffell
2014-08-14 18:37 ` Shaun Ruffell
2014-08-13 14:43 ` [PATCH 2/2] kexec: Remove CONFIG_KEXEC dependency on crypto Vivek Goyal
2014-08-13 14:43 ` Vivek Goyal
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.