1
2
3
4
5
6
7#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
8
9#include <linux/capability.h>
10#include <linux/mm.h>
11#include <linux/file.h>
12#include <linux/slab.h>
13#include <linux/fs.h>
14#include <linux/kexec.h>
15#include <linux/mutex.h>
16#include <linux/list.h>
17#include <linux/highmem.h>
18#include <linux/syscalls.h>
19#include <linux/reboot.h>
20#include <linux/ioport.h>
21#include <linux/hardirq.h>
22#include <linux/elf.h>
23#include <linux/elfcore.h>
24#include <linux/utsname.h>
25#include <linux/numa.h>
26#include <linux/suspend.h>
27#include <linux/device.h>
28#include <linux/freezer.h>
29#include <linux/pm.h>
30#include <linux/cpu.h>
31#include <linux/uaccess.h>
32#include <linux/io.h>
33#include <linux/console.h>
34#include <linux/vmalloc.h>
35#include <linux/swap.h>
36#include <linux/syscore_ops.h>
37#include <linux/compiler.h>
38#include <linux/hugetlb.h>
39#include <linux/frame.h>
40
41#include <asm/page.h>
42#include <asm/sections.h>
43
44#include <crypto/hash.h>
45#include <crypto/sha.h>
46#include "kexec_internal.h"
47
48DEFINE_MUTEX(kexec_mutex);
49
50
51note_buf_t __percpu *crash_notes;
52
53
54bool kexec_in_progress = false;
55
56
57
58struct resource crashk_res = {
59 .name = "Crash kernel",
60 .start = 0,
61 .end = 0,
62 .flags = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM,
63 .desc = IORES_DESC_CRASH_KERNEL
64};
65struct resource crashk_low_res = {
66 .name = "Crash kernel",
67 .start = 0,
68 .end = 0,
69 .flags = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM,
70 .desc = IORES_DESC_CRASH_KERNEL
71};
72
73int kexec_should_crash(struct task_struct *p)
74{
75
76
77
78
79
80 if (crash_kexec_post_notifiers)
81 return 0;
82
83
84
85
86 if (in_interrupt() || !p->pid || is_global_init(p) || panic_on_oops)
87 return 1;
88 return 0;
89}
90
91int kexec_crash_loaded(void)
92{
93 return !!kexec_crash_image;
94}
95EXPORT_SYMBOL_GPL(kexec_crash_loaded);
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141#define KIMAGE_NO_DEST (-1UL)
142#define PAGE_COUNT(x) (((x) + PAGE_SIZE - 1) >> PAGE_SHIFT)
143
144static struct page *kimage_alloc_page(struct kimage *image,
145 gfp_t gfp_mask,
146 unsigned long dest);
147
148int sanity_check_segment_list(struct kimage *image)
149{
150 int i;
151 unsigned long nr_segments = image->nr_segments;
152 unsigned long total_pages = 0;
153 unsigned long nr_pages = totalram_pages();
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168 for (i = 0; i < nr_segments; i++) {
169 unsigned long mstart, mend;
170
171 mstart = image->segment[i].mem;
172 mend = mstart + image->segment[i].memsz;
173 if (mstart > mend)
174 return -EADDRNOTAVAIL;
175 if ((mstart & ~PAGE_MASK) || (mend & ~PAGE_MASK))
176 return -EADDRNOTAVAIL;
177 if (mend >= KEXEC_DESTINATION_MEMORY_LIMIT)
178 return -EADDRNOTAVAIL;
179 }
180
181
182
183
184
185
186 for (i = 0; i < nr_segments; i++) {
187 unsigned long mstart, mend;
188 unsigned long j;
189
190 mstart = image->segment[i].mem;
191 mend = mstart + image->segment[i].memsz;
192 for (j = 0; j < i; j++) {
193 unsigned long pstart, pend;
194
195 pstart = image->segment[j].mem;
196 pend = pstart + image->segment[j].memsz;
197
198 if ((mend > pstart) && (mstart < pend))
199 return -EINVAL;
200 }
201 }
202
203
204
205
206
207
208 for (i = 0; i < nr_segments; i++) {
209 if (image->segment[i].bufsz > image->segment[i].memsz)
210 return -EINVAL;
211 }
212
213
214
215
216
217
218 for (i = 0; i < nr_segments; i++) {
219 if (PAGE_COUNT(image->segment[i].memsz) > nr_pages / 2)
220 return -EINVAL;
221
222 total_pages += PAGE_COUNT(image->segment[i].memsz);
223 }
224
225 if (total_pages > nr_pages / 2)
226 return -EINVAL;
227
228
229
230
231
232
233
234
235
236
237
238 if (image->type == KEXEC_TYPE_CRASH) {
239 for (i = 0; i < nr_segments; i++) {
240 unsigned long mstart, mend;
241
242 mstart = image->segment[i].mem;
243 mend = mstart + image->segment[i].memsz - 1;
244
245 if ((mstart < phys_to_boot_phys(crashk_res.start)) ||
246 (mend > phys_to_boot_phys(crashk_res.end)))
247 return -EADDRNOTAVAIL;
248 }
249 }
250
251 return 0;
252}
253
254struct kimage *do_kimage_alloc_init(void)
255{
256 struct kimage *image;
257
258
259 image = kzalloc(sizeof(*image), GFP_KERNEL);
260 if (!image)
261 return NULL;
262
263 image->head = 0;
264 image->entry = &image->head;
265 image->last_entry = &image->head;
266 image->control_page = ~0;
267 image->type = KEXEC_TYPE_DEFAULT;
268
269
270 INIT_LIST_HEAD(&image->control_pages);
271
272
273 INIT_LIST_HEAD(&image->dest_pages);
274
275
276 INIT_LIST_HEAD(&image->unusable_pages);
277
278 return image;
279}
280
281int kimage_is_destination_range(struct kimage *image,
282 unsigned long start,
283 unsigned long end)
284{
285 unsigned long i;
286
287 for (i = 0; i < image->nr_segments; i++) {
288 unsigned long mstart, mend;
289
290 mstart = image->segment[i].mem;
291 mend = mstart + image->segment[i].memsz;
292 if ((end > mstart) && (start < mend))
293 return 1;
294 }
295
296 return 0;
297}
298
299static struct page *kimage_alloc_pages(gfp_t gfp_mask, unsigned int order)
300{
301 struct page *pages;
302
303 if (fatal_signal_pending(current))
304 return NULL;
305 pages = alloc_pages(gfp_mask & ~__GFP_ZERO, order);
306 if (pages) {
307 unsigned int count, i;
308
309 pages->mapping = NULL;
310 set_page_private(pages, order);
311 count = 1 << order;
312 for (i = 0; i < count; i++)
313 SetPageReserved(pages + i);
314
315 arch_kexec_post_alloc_pages(page_address(pages), count,
316 gfp_mask);
317
318 if (gfp_mask & __GFP_ZERO)
319 for (i = 0; i < count; i++)
320 clear_highpage(pages + i);
321 }
322
323 return pages;
324}
325
326static void kimage_free_pages(struct page *page)
327{
328 unsigned int order, count, i;
329
330 order = page_private(page);
331 count = 1 << order;
332
333 arch_kexec_pre_free_pages(page_address(page), count);
334
335 for (i = 0; i < count; i++)
336 ClearPageReserved(page + i);
337 __free_pages(page, order);
338}
339
340void kimage_free_page_list(struct list_head *list)
341{
342 struct page *page, *next;
343
344 list_for_each_entry_safe(page, next, list, lru) {
345 list_del(&page->lru);
346 kimage_free_pages(page);
347 }
348}
349
350static struct page *kimage_alloc_normal_control_pages(struct kimage *image,
351 unsigned int order)
352{
353
354
355
356
357
358
359
360
361
362
363
364
365
366 struct list_head extra_pages;
367 struct page *pages;
368 unsigned int count;
369
370 count = 1 << order;
371 INIT_LIST_HEAD(&extra_pages);
372
373
374
375
376 do {
377 unsigned long pfn, epfn, addr, eaddr;
378
379 pages = kimage_alloc_pages(KEXEC_CONTROL_MEMORY_GFP, order);
380 if (!pages)
381 break;
382 pfn = page_to_boot_pfn(pages);
383 epfn = pfn + count;
384 addr = pfn << PAGE_SHIFT;
385 eaddr = epfn << PAGE_SHIFT;
386 if ((epfn >= (KEXEC_CONTROL_MEMORY_LIMIT >> PAGE_SHIFT)) ||
387 kimage_is_destination_range(image, addr, eaddr)) {
388 list_add(&pages->lru, &extra_pages);
389 pages = NULL;
390 }
391 } while (!pages);
392
393 if (pages) {
394
395 list_add(&pages->lru, &image->control_pages);
396
397
398
399
400
401
402
403 }
404
405
406
407
408
409
410
411 kimage_free_page_list(&extra_pages);
412
413 return pages;
414}
415
416static struct page *kimage_alloc_crash_control_pages(struct kimage *image,
417 unsigned int order)
418{
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440 unsigned long hole_start, hole_end, size;
441 struct page *pages;
442
443 pages = NULL;
444 size = (1 << order) << PAGE_SHIFT;
445 hole_start = (image->control_page + (size - 1)) & ~(size - 1);
446 hole_end = hole_start + size - 1;
447 while (hole_end <= crashk_res.end) {
448 unsigned long i;
449
450 cond_resched();
451
452 if (hole_end > KEXEC_CRASH_CONTROL_MEMORY_LIMIT)
453 break;
454
455 for (i = 0; i < image->nr_segments; i++) {
456 unsigned long mstart, mend;
457
458 mstart = image->segment[i].mem;
459 mend = mstart + image->segment[i].memsz - 1;
460 if ((hole_end >= mstart) && (hole_start <= mend)) {
461
462 hole_start = (mend + (size - 1)) & ~(size - 1);
463 hole_end = hole_start + size - 1;
464 break;
465 }
466 }
467
468 if (i == image->nr_segments) {
469 pages = pfn_to_page(hole_start >> PAGE_SHIFT);
470 image->control_page = hole_end;
471 break;
472 }
473 }
474
475
476 if (pages)
477 arch_kexec_post_alloc_pages(page_address(pages), 1 << order, 0);
478
479 return pages;
480}
481
482
483struct page *kimage_alloc_control_pages(struct kimage *image,
484 unsigned int order)
485{
486 struct page *pages = NULL;
487
488 switch (image->type) {
489 case KEXEC_TYPE_DEFAULT:
490 pages = kimage_alloc_normal_control_pages(image, order);
491 break;
492 case KEXEC_TYPE_CRASH:
493 pages = kimage_alloc_crash_control_pages(image, order);
494 break;
495 }
496
497 return pages;
498}
499
500int kimage_crash_copy_vmcoreinfo(struct kimage *image)
501{
502 struct page *vmcoreinfo_page;
503 void *safecopy;
504
505 if (image->type != KEXEC_TYPE_CRASH)
506 return 0;
507
508
509
510
511
512
513
514
515
516
517 vmcoreinfo_page = kimage_alloc_control_pages(image, 0);
518 if (!vmcoreinfo_page) {
519 pr_warn("Could not allocate vmcoreinfo buffer\n");
520 return -ENOMEM;
521 }
522 safecopy = vmap(&vmcoreinfo_page, 1, VM_MAP, PAGE_KERNEL);
523 if (!safecopy) {
524 pr_warn("Could not vmap vmcoreinfo buffer\n");
525 return -ENOMEM;
526 }
527
528 image->vmcoreinfo_data_copy = safecopy;
529 crash_update_vmcoreinfo_safecopy(safecopy);
530
531 return 0;
532}
533
534static int kimage_add_entry(struct kimage *image, kimage_entry_t entry)
535{
536 if (*image->entry != 0)
537 image->entry++;
538
539 if (image->entry == image->last_entry) {
540 kimage_entry_t *ind_page;
541 struct page *page;
542
543 page = kimage_alloc_page(image, GFP_KERNEL, KIMAGE_NO_DEST);
544 if (!page)
545 return -ENOMEM;
546
547 ind_page = page_address(page);
548 *image->entry = virt_to_boot_phys(ind_page) | IND_INDIRECTION;
549 image->entry = ind_page;
550 image->last_entry = ind_page +
551 ((PAGE_SIZE/sizeof(kimage_entry_t)) - 1);
552 }
553 *image->entry = entry;
554 image->entry++;
555 *image->entry = 0;
556
557 return 0;
558}
559
560static int kimage_set_destination(struct kimage *image,
561 unsigned long destination)
562{
563 int result;
564
565 destination &= PAGE_MASK;
566 result = kimage_add_entry(image, destination | IND_DESTINATION);
567
568 return result;
569}
570
571
572static int kimage_add_page(struct kimage *image, unsigned long page)
573{
574 int result;
575
576 page &= PAGE_MASK;
577 result = kimage_add_entry(image, page | IND_SOURCE);
578
579 return result;
580}
581
582
583static void kimage_free_extra_pages(struct kimage *image)
584{
585
586 kimage_free_page_list(&image->dest_pages);
587
588
589 kimage_free_page_list(&image->unusable_pages);
590
591}
592
593int __weak machine_kexec_post_load(struct kimage *image)
594{
595 return 0;
596}
597
598void kimage_terminate(struct kimage *image)
599{
600 if (*image->entry != 0)
601 image->entry++;
602
603 *image->entry = IND_DONE;
604}
605
606#define for_each_kimage_entry(image, ptr, entry) \
607 for (ptr = &image->head; (entry = *ptr) && !(entry & IND_DONE); \
608 ptr = (entry & IND_INDIRECTION) ? \
609 boot_phys_to_virt((entry & PAGE_MASK)) : ptr + 1)
610
611static void kimage_free_entry(kimage_entry_t entry)
612{
613 struct page *page;
614
615 page = boot_pfn_to_page(entry >> PAGE_SHIFT);
616 kimage_free_pages(page);
617}
618
619void kimage_free(struct kimage *image)
620{
621 kimage_entry_t *ptr, entry;
622 kimage_entry_t ind = 0;
623
624 if (!image)
625 return;
626
627 if (image->vmcoreinfo_data_copy) {
628 crash_update_vmcoreinfo_safecopy(NULL);
629 vunmap(image->vmcoreinfo_data_copy);
630 }
631
632 kimage_free_extra_pages(image);
633 for_each_kimage_entry(image, ptr, entry) {
634 if (entry & IND_INDIRECTION) {
635
636 if (ind & IND_INDIRECTION)
637 kimage_free_entry(ind);
638
639
640
641 ind = entry;
642 } else if (entry & IND_SOURCE)
643 kimage_free_entry(entry);
644 }
645
646 if (ind & IND_INDIRECTION)
647 kimage_free_entry(ind);
648
649
650 machine_kexec_cleanup(image);
651
652
653 kimage_free_page_list(&image->control_pages);
654
655
656
657
658
659 if (image->file_mode)
660 kimage_file_post_load_cleanup(image);
661
662 kfree(image);
663}
664
665static kimage_entry_t *kimage_dst_used(struct kimage *image,
666 unsigned long page)
667{
668 kimage_entry_t *ptr, entry;
669 unsigned long destination = 0;
670
671 for_each_kimage_entry(image, ptr, entry) {
672 if (entry & IND_DESTINATION)
673 destination = entry & PAGE_MASK;
674 else if (entry & IND_SOURCE) {
675 if (page == destination)
676 return ptr;
677 destination += PAGE_SIZE;
678 }
679 }
680
681 return NULL;
682}
683
684static struct page *kimage_alloc_page(struct kimage *image,
685 gfp_t gfp_mask,
686 unsigned long destination)
687{
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706 struct page *page;
707 unsigned long addr;
708
709
710
711
712
713 list_for_each_entry(page, &image->dest_pages, lru) {
714 addr = page_to_boot_pfn(page) << PAGE_SHIFT;
715 if (addr == destination) {
716 list_del(&page->lru);
717 return page;
718 }
719 }
720 page = NULL;
721 while (1) {
722 kimage_entry_t *old;
723
724
725 page = kimage_alloc_pages(gfp_mask, 0);
726 if (!page)
727 return NULL;
728
729 if (page_to_boot_pfn(page) >
730 (KEXEC_SOURCE_MEMORY_LIMIT >> PAGE_SHIFT)) {
731 list_add(&page->lru, &image->unusable_pages);
732 continue;
733 }
734 addr = page_to_boot_pfn(page) << PAGE_SHIFT;
735
736
737 if (addr == destination)
738 break;
739
740
741 if (!kimage_is_destination_range(image, addr,
742 addr + PAGE_SIZE))
743 break;
744
745
746
747
748
749
750 old = kimage_dst_used(image, addr);
751 if (old) {
752
753 unsigned long old_addr;
754 struct page *old_page;
755
756 old_addr = *old & PAGE_MASK;
757 old_page = boot_pfn_to_page(old_addr >> PAGE_SHIFT);
758 copy_highpage(page, old_page);
759 *old = addr | (*old & ~PAGE_MASK);
760
761
762
763
764
765 if (!(gfp_mask & __GFP_HIGHMEM) &&
766 PageHighMem(old_page)) {
767 kimage_free_pages(old_page);
768 continue;
769 }
770 addr = old_addr;
771 page = old_page;
772 break;
773 }
774
775 list_add(&page->lru, &image->dest_pages);
776 }
777
778 return page;
779}
780
781static int kimage_load_normal_segment(struct kimage *image,
782 struct kexec_segment *segment)
783{
784 unsigned long maddr;
785 size_t ubytes, mbytes;
786 int result;
787 unsigned char __user *buf = NULL;
788 unsigned char *kbuf = NULL;
789
790 result = 0;
791 if (image->file_mode)
792 kbuf = segment->kbuf;
793 else
794 buf = segment->buf;
795 ubytes = segment->bufsz;
796 mbytes = segment->memsz;
797 maddr = segment->mem;
798
799 result = kimage_set_destination(image, maddr);
800 if (result < 0)
801 goto out;
802
803 while (mbytes) {
804 struct page *page;
805 char *ptr;
806 size_t uchunk, mchunk;
807
808 page = kimage_alloc_page(image, GFP_HIGHUSER, maddr);
809 if (!page) {
810 result = -ENOMEM;
811 goto out;
812 }
813 result = kimage_add_page(image, page_to_boot_pfn(page)
814 << PAGE_SHIFT);
815 if (result < 0)
816 goto out;
817
818 ptr = kmap(page);
819
820 clear_page(ptr);
821 ptr += maddr & ~PAGE_MASK;
822 mchunk = min_t(size_t, mbytes,
823 PAGE_SIZE - (maddr & ~PAGE_MASK));
824 uchunk = min(ubytes, mchunk);
825
826
827 if (image->file_mode)
828 memcpy(ptr, kbuf, uchunk);
829 else
830 result = copy_from_user(ptr, buf, uchunk);
831 kunmap(page);
832 if (result) {
833 result = -EFAULT;
834 goto out;
835 }
836 ubytes -= uchunk;
837 maddr += mchunk;
838 if (image->file_mode)
839 kbuf += mchunk;
840 else
841 buf += mchunk;
842 mbytes -= mchunk;
843
844 cond_resched();
845 }
846out:
847 return result;
848}
849
850static int kimage_load_crash_segment(struct kimage *image,
851 struct kexec_segment *segment)
852{
853
854
855
856
857 unsigned long maddr;
858 size_t ubytes, mbytes;
859 int result;
860 unsigned char __user *buf = NULL;
861 unsigned char *kbuf = NULL;
862
863 result = 0;
864 if (image->file_mode)
865 kbuf = segment->kbuf;
866 else
867 buf = segment->buf;
868 ubytes = segment->bufsz;
869 mbytes = segment->memsz;
870 maddr = segment->mem;
871 while (mbytes) {
872 struct page *page;
873 char *ptr;
874 size_t uchunk, mchunk;
875
876 page = boot_pfn_to_page(maddr >> PAGE_SHIFT);
877 if (!page) {
878 result = -ENOMEM;
879 goto out;
880 }
881 arch_kexec_post_alloc_pages(page_address(page), 1, 0);
882 ptr = kmap(page);
883 ptr += maddr & ~PAGE_MASK;
884 mchunk = min_t(size_t, mbytes,
885 PAGE_SIZE - (maddr & ~PAGE_MASK));
886 uchunk = min(ubytes, mchunk);
887 if (mchunk > uchunk) {
888
889 memset(ptr + uchunk, 0, mchunk - uchunk);
890 }
891
892
893 if (image->file_mode)
894 memcpy(ptr, kbuf, uchunk);
895 else
896 result = copy_from_user(ptr, buf, uchunk);
897 kexec_flush_icache_page(page);
898 kunmap(page);
899 arch_kexec_pre_free_pages(page_address(page), 1);
900 if (result) {
901 result = -EFAULT;
902 goto out;
903 }
904 ubytes -= uchunk;
905 maddr += mchunk;
906 if (image->file_mode)
907 kbuf += mchunk;
908 else
909 buf += mchunk;
910 mbytes -= mchunk;
911
912 cond_resched();
913 }
914out:
915 return result;
916}
917
918int kimage_load_segment(struct kimage *image,
919 struct kexec_segment *segment)
920{
921 int result = -ENOMEM;
922
923 switch (image->type) {
924 case KEXEC_TYPE_DEFAULT:
925 result = kimage_load_normal_segment(image, segment);
926 break;
927 case KEXEC_TYPE_CRASH:
928 result = kimage_load_crash_segment(image, segment);
929 break;
930 }
931
932 return result;
933}
934
935struct kimage *kexec_image;
936struct kimage *kexec_crash_image;
937int kexec_load_disabled;
938
939
940
941
942
943
944void __noclone __crash_kexec(struct pt_regs *regs)
945{
946
947
948
949
950
951
952
953
954 if (mutex_trylock(&kexec_mutex)) {
955 if (kexec_crash_image) {
956 struct pt_regs fixed_regs;
957
958 crash_setup_regs(&fixed_regs, regs);
959 crash_save_vmcoreinfo();
960 machine_crash_shutdown(&fixed_regs);
961 machine_kexec(kexec_crash_image);
962 }
963 mutex_unlock(&kexec_mutex);
964 }
965}
966STACK_FRAME_NON_STANDARD(__crash_kexec);
967
968void crash_kexec(struct pt_regs *regs)
969{
970 int old_cpu, this_cpu;
971
972
973
974
975
976
977 this_cpu = raw_smp_processor_id();
978 old_cpu = atomic_cmpxchg(&panic_cpu, PANIC_CPU_INVALID, this_cpu);
979 if (old_cpu == PANIC_CPU_INVALID) {
980
981 printk_safe_flush_on_panic();
982 __crash_kexec(regs);
983
984
985
986
987
988 atomic_set(&panic_cpu, PANIC_CPU_INVALID);
989 }
990}
991
992size_t crash_get_memory_size(void)
993{
994 size_t size = 0;
995
996 mutex_lock(&kexec_mutex);
997 if (crashk_res.end != crashk_res.start)
998 size = resource_size(&crashk_res);
999 mutex_unlock(&kexec_mutex);
1000 return size;
1001}
1002
1003void __weak crash_free_reserved_phys_range(unsigned long begin,
1004 unsigned long end)
1005{
1006 unsigned long addr;
1007
1008 for (addr = begin; addr < end; addr += PAGE_SIZE)
1009 free_reserved_page(boot_pfn_to_page(addr >> PAGE_SHIFT));
1010}
1011
1012int crash_shrink_memory(unsigned long new_size)
1013{
1014 int ret = 0;
1015 unsigned long start, end;
1016 unsigned long old_size;
1017 struct resource *ram_res;
1018
1019 mutex_lock(&kexec_mutex);
1020
1021 if (kexec_crash_image) {
1022 ret = -ENOENT;
1023 goto unlock;
1024 }
1025 start = crashk_res.start;
1026 end = crashk_res.end;
1027 old_size = (end == 0) ? 0 : end - start + 1;
1028 if (new_size >= old_size) {
1029 ret = (new_size == old_size) ? 0 : -EINVAL;
1030 goto unlock;
1031 }
1032
1033 ram_res = kzalloc(sizeof(*ram_res), GFP_KERNEL);
1034 if (!ram_res) {
1035 ret = -ENOMEM;
1036 goto unlock;
1037 }
1038
1039 start = roundup(start, KEXEC_CRASH_MEM_ALIGN);
1040 end = roundup(start + new_size, KEXEC_CRASH_MEM_ALIGN);
1041
1042 crash_free_reserved_phys_range(end, crashk_res.end);
1043
1044 if ((start == end) && (crashk_res.parent != NULL))
1045 release_resource(&crashk_res);
1046
1047 ram_res->start = end;
1048 ram_res->end = crashk_res.end;
1049 ram_res->flags = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM;
1050 ram_res->name = "System RAM";
1051
1052 crashk_res.end = end - 1;
1053
1054 insert_resource(&iomem_resource, ram_res);
1055
1056unlock:
1057 mutex_unlock(&kexec_mutex);
1058 return ret;
1059}
1060
1061void crash_save_cpu(struct pt_regs *regs, int cpu)
1062{
1063 struct elf_prstatus prstatus;
1064 u32 *buf;
1065
1066 if ((cpu < 0) || (cpu >= nr_cpu_ids))
1067 return;
1068
1069
1070
1071
1072
1073
1074
1075
1076 buf = (u32 *)per_cpu_ptr(crash_notes, cpu);
1077 if (!buf)
1078 return;
1079 memset(&prstatus, 0, sizeof(prstatus));
1080 prstatus.pr_pid = current->pid;
1081 elf_core_copy_kernel_regs(&prstatus.pr_reg, regs);
1082 buf = append_elf_note(buf, KEXEC_CORE_NOTE_NAME, NT_PRSTATUS,
1083 &prstatus, sizeof(prstatus));
1084 final_note(buf);
1085}
1086
1087static int __init crash_notes_memory_init(void)
1088{
1089
1090 size_t size, align;
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102 size = sizeof(note_buf_t);
1103 align = min(roundup_pow_of_two(sizeof(note_buf_t)), PAGE_SIZE);
1104
1105
1106
1107
1108
1109 BUILD_BUG_ON(size > PAGE_SIZE);
1110
1111 crash_notes = __alloc_percpu(size, align);
1112 if (!crash_notes) {
1113 pr_warn("Memory allocation for saving cpu register states failed\n");
1114 return -ENOMEM;
1115 }
1116 return 0;
1117}
1118subsys_initcall(crash_notes_memory_init);
1119
1120
1121
1122
1123
1124
1125int kernel_kexec(void)
1126{
1127 int error = 0;
1128
1129 if (!mutex_trylock(&kexec_mutex))
1130 return -EBUSY;
1131 if (!kexec_image) {
1132 error = -EINVAL;
1133 goto Unlock;
1134 }
1135
1136#ifdef CONFIG_KEXEC_JUMP
1137 if (kexec_image->preserve_context) {
1138 lock_system_sleep();
1139 pm_prepare_console();
1140 error = freeze_processes();
1141 if (error) {
1142 error = -EBUSY;
1143 goto Restore_console;
1144 }
1145 suspend_console();
1146 error = dpm_suspend_start(PMSG_FREEZE);
1147 if (error)
1148 goto Resume_console;
1149
1150
1151
1152
1153
1154
1155
1156 error = dpm_suspend_end(PMSG_FREEZE);
1157 if (error)
1158 goto Resume_devices;
1159 error = suspend_disable_secondary_cpus();
1160 if (error)
1161 goto Enable_cpus;
1162 local_irq_disable();
1163 error = syscore_suspend();
1164 if (error)
1165 goto Enable_irqs;
1166 } else
1167#endif
1168 {
1169 kexec_in_progress = true;
1170 kernel_restart_prepare(NULL);
1171 migrate_to_reboot_cpu();
1172
1173
1174
1175
1176
1177
1178
1179 cpu_hotplug_enable();
1180 pr_notice("Starting new kernel\n");
1181 machine_shutdown();
1182 }
1183
1184 machine_kexec(kexec_image);
1185
1186#ifdef CONFIG_KEXEC_JUMP
1187 if (kexec_image->preserve_context) {
1188 syscore_resume();
1189 Enable_irqs:
1190 local_irq_enable();
1191 Enable_cpus:
1192 suspend_enable_secondary_cpus();
1193 dpm_resume_start(PMSG_RESTORE);
1194 Resume_devices:
1195 dpm_resume_end(PMSG_RESTORE);
1196 Resume_console:
1197 resume_console();
1198 thaw_processes();
1199 Restore_console:
1200 pm_restore_console();
1201 unlock_system_sleep();
1202 }
1203#endif
1204
1205 Unlock:
1206 mutex_unlock(&kexec_mutex);
1207 return error;
1208}
1209
1210
1211
1212
1213
1214
1215
1216
1217void __weak arch_kexec_protect_crashkres(void)
1218{}
1219
1220void __weak arch_kexec_unprotect_crashkres(void)
1221{}
1222