|
@@ -28,9 +28,31 @@ atomic_t kexec_ready_to_reboot = ATOMIC_INIT(0);
|
|
|
void (*_crash_smp_send_stop)(void) = NULL;
|
|
|
#endif
|
|
|
|
|
|
+static void kexec_image_info(const struct kimage *kimage)
|
|
|
+{
|
|
|
+ unsigned long i;
|
|
|
+
|
|
|
+ pr_debug("kexec kimage info:\n");
|
|
|
+ pr_debug(" type: %d\n", kimage->type);
|
|
|
+ pr_debug(" start: %lx\n", kimage->start);
|
|
|
+ pr_debug(" head: %lx\n", kimage->head);
|
|
|
+ pr_debug(" nr_segments: %lu\n", kimage->nr_segments);
|
|
|
+
|
|
|
+ for (i = 0; i < kimage->nr_segments; i++) {
|
|
|
+ pr_debug(" segment[%lu]: %016lx - %016lx, 0x%lx bytes, %lu pages\n",
|
|
|
+ i,
|
|
|
+ kimage->segment[i].mem,
|
|
|
+ kimage->segment[i].mem + kimage->segment[i].memsz,
|
|
|
+ (unsigned long)kimage->segment[i].memsz,
|
|
|
+ (unsigned long)kimage->segment[i].memsz / PAGE_SIZE);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
int
|
|
|
machine_kexec_prepare(struct kimage *kimage)
|
|
|
{
|
|
|
+ kexec_image_info(kimage);
|
|
|
+
|
|
|
if (_machine_kexec_prepare)
|
|
|
return _machine_kexec_prepare(kimage);
|
|
|
return 0;
|