diff options
| author | Jeff Moyer <jmoyer@redhat.com> | 2006-06-23 05:05:07 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-06-23 10:43:02 -0400 |
| commit | c330dda908b5a46469a997eea90b66f2f9f02b34 (patch) | |
| tree | aad52aa4e127c366ca185c2122650d7dbb3437a0 /kernel | |
| parent | 24bbb1faf3f0420eb252dd0fdc1e477b1d4d73bd (diff) | |
[PATCH] Add a sysfs file to determine if a kexec kernel is loaded
Create two files in /sys/kernel, kexec_loaded and kexec_crash_loaded. Each
file contains a simple boolean value indicating whether the relevant kernel
has been loaded into memory. The motivation for this is geared around
support.
Signed-off-by: Jeff Moyer <jmoyer@redhat.com>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/kexec.c | 6 | ||||
| -rw-r--r-- | kernel/ksysfs.c | 19 |
2 files changed, 22 insertions, 3 deletions
diff --git a/kernel/kexec.c b/kernel/kexec.c index bf39d28e4c0e..58f0f382597c 100644 --- a/kernel/kexec.c +++ b/kernel/kexec.c | |||
| @@ -902,14 +902,14 @@ static int kimage_load_segment(struct kimage *image, | |||
| 902 | * kexec does not sync, or unmount filesystems so if you need | 902 | * kexec does not sync, or unmount filesystems so if you need |
| 903 | * that to happen you need to do that yourself. | 903 | * that to happen you need to do that yourself. |
| 904 | */ | 904 | */ |
| 905 | struct kimage *kexec_image = NULL; | 905 | struct kimage *kexec_image; |
| 906 | static struct kimage *kexec_crash_image = NULL; | 906 | struct kimage *kexec_crash_image; |
| 907 | /* | 907 | /* |
| 908 | * A home grown binary mutex. | 908 | * A home grown binary mutex. |
| 909 | * Nothing can wait so this mutex is safe to use | 909 | * Nothing can wait so this mutex is safe to use |
| 910 | * in interrupt context :) | 910 | * in interrupt context :) |
| 911 | */ | 911 | */ |
| 912 | static int kexec_lock = 0; | 912 | static int kexec_lock; |
| 913 | 913 | ||
| 914 | asmlinkage long sys_kexec_load(unsigned long entry, unsigned long nr_segments, | 914 | asmlinkage long sys_kexec_load(unsigned long entry, unsigned long nr_segments, |
| 915 | struct kexec_segment __user *segments, | 915 | struct kexec_segment __user *segments, |
diff --git a/kernel/ksysfs.c b/kernel/ksysfs.c index f119e098e67b..9e28478a17a5 100644 --- a/kernel/ksysfs.c +++ b/kernel/ksysfs.c | |||
| @@ -14,6 +14,7 @@ | |||
| 14 | #include <linux/sysfs.h> | 14 | #include <linux/sysfs.h> |
| 15 | #include <linux/module.h> | 15 | #include <linux/module.h> |
| 16 | #include <linux/init.h> | 16 | #include <linux/init.h> |
| 17 | #include <linux/kexec.h> | ||
| 17 | 18 | ||
| 18 | #define KERNEL_ATTR_RO(_name) \ | 19 | #define KERNEL_ATTR_RO(_name) \ |
| 19 | static struct subsys_attribute _name##_attr = __ATTR_RO(_name) | 20 | static struct subsys_attribute _name##_attr = __ATTR_RO(_name) |
| @@ -48,6 +49,20 @@ static ssize_t uevent_helper_store(struct subsystem *subsys, const char *page, s | |||
| 48 | KERNEL_ATTR_RW(uevent_helper); | 49 | KERNEL_ATTR_RW(uevent_helper); |
| 49 | #endif | 50 | #endif |
| 50 | 51 | ||
| 52 | #ifdef CONFIG_KEXEC | ||
| 53 | static ssize_t kexec_loaded_show(struct subsystem *subsys, char *page) | ||
| 54 | { | ||
| 55 | return sprintf(page, "%d\n", !!kexec_image); | ||
| 56 | } | ||
| 57 | KERNEL_ATTR_RO(kexec_loaded); | ||
| 58 | |||
| 59 | static ssize_t kexec_crash_loaded_show(struct subsystem *subsys, char *page) | ||
| 60 | { | ||
| 61 | return sprintf(page, "%d\n", !!kexec_crash_image); | ||
| 62 | } | ||
| 63 | KERNEL_ATTR_RO(kexec_crash_loaded); | ||
| 64 | #endif /* CONFIG_KEXEC */ | ||
| 65 | |||
| 51 | decl_subsys(kernel, NULL, NULL); | 66 | decl_subsys(kernel, NULL, NULL); |
| 52 | EXPORT_SYMBOL_GPL(kernel_subsys); | 67 | EXPORT_SYMBOL_GPL(kernel_subsys); |
| 53 | 68 | ||
| @@ -56,6 +71,10 @@ static struct attribute * kernel_attrs[] = { | |||
| 56 | &uevent_seqnum_attr.attr, | 71 | &uevent_seqnum_attr.attr, |
| 57 | &uevent_helper_attr.attr, | 72 | &uevent_helper_attr.attr, |
| 58 | #endif | 73 | #endif |
| 74 | #ifdef CONFIG_KEXEC | ||
| 75 | &kexec_loaded_attr.attr, | ||
| 76 | &kexec_crash_loaded_attr.attr, | ||
| 77 | #endif | ||
| 59 | NULL | 78 | NULL |
| 60 | }; | 79 | }; |
| 61 | 80 | ||
