1
2
3
4
5
6
7
8
9#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
10
11#include <linux/capability.h>
12#include <linux/mm.h>
13#include <linux/file.h>
14#include <linux/slab.h>
15#include <linux/fs.h>
16#include <linux/kexec.h>
17#include <linux/mutex.h>
18#include <linux/list.h>
19#include <linux/highmem.h>
20#include <linux/syscalls.h>
21#include <linux/reboot.h>
22#include <linux/ioport.h>
23#include <linux/hardirq.h>
24#include <linux/elf.h>
25#include <linux/elfcore.h>
26#include <linux/utsname.h>
27#include <linux/numa.h>
28#include <linux/suspend.h>
29#include <linux/device.h>
30#include <linux/freezer.h>
31#include <linux/pm.h>
32#include <linux/cpu.h>
33#include <linux/uaccess.h>
34#include <linux/io.h>
35#include <linux/console.h>
36#include <linux/vmalloc.h>
37#include <linux/swap.h>
38#include <linux/syscore_ops.h>
39#include <linux/compiler.h>
40#include <linux/hugetlb.h>
41
42#include <asm/page.h>
43#include <asm/sections.h>
44
45#include <crypto/hash.h>
46#include <crypto/sha.h>
47#include "kexec_internal.h"
48
49DEFINE_MUTEX(kexec_mutex);
50
51
52note_buf_t __percpu *crash_notes;
53
54
55static unsigned char vmcoreinfo_data[VMCOREINFO_BYTES];
56u32 vmcoreinfo_note[VMCOREINFO_NOTE_SIZE/4];
57size_t vmcoreinfo_size;
58size_t vmcoreinfo_max_size = sizeof(vmcoreinfo_data);
59
60
61bool kexec_in_progress = false;
62
63
64
65struct resource crashk_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};
72struct resource crashk_low_res = {
73 .name = "Crash kernel",
74 .start = 0,
75 .end = 0,
76 .flags = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM,
77 .desc = IORES_DESC_CRASH_KERNEL
78};
79
80int kexec_should_crash(struct task_struct *p)
81{
82
83
84
85
86
87 if (crash_kexec_post_notifiers)
88 return 0;
89
90
91
92
93 if (in_interrupt() || !p->pid || is_global_init(p) || panic_on_oops)
94 return 1;
95 return 0;
96}
97
98int kexec_crash_loaded(void)
99{
100 return !!kexec_crash_image;
101}
102EXPORT_SYMBOL_GPL(kexec_crash_loaded);
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
142
143
144
145
146
147
148#define KIMAGE_NO_DEST (-1UL)
149#define PAGE_COUNT(x) (((x) + PAGE_SIZE - 1) >> PAGE_SHIFT)
150
151static struct page *kimage_alloc_page(struct kimage *image,
152 gfp_t gfp_mask,
153 unsigned long dest);
154
155int sanity_check_segment_list(struct kimage *image)
156{
157 int i;
158 unsigned long nr_segments = image->nr_segments;
159 unsigned long total_pages = 0;
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174 for (i = 0; i < nr_segments; i++) {
175 unsigned long mstart, mend;
176
177 mstart = image->segment[i].mem;
178 mend = mstart + image->segment[i].memsz;
179 if (mstart > mend)
180 return -EADDRNOTAVAIL;
181 if ((mstart & ~PAGE_MASK) || (mend & ~PAGE_MASK))
182 return -EADDRNOTAVAIL;
183 if (mend >= KEXEC_DESTINATION_MEMORY_LIMIT)
184 return -EADDRNOTAVAIL;
185 }
186
187
188
189
190
191
192 for (i = 0; i < nr_segments; i++) {
193 unsigned long mstart, mend;
194 unsigned long j;
195
196 mstart = image->segment[i].mem;
197 mend = mstart + image->segment[i].memsz;
198 for (j = 0; j < i; j++) {
199 unsigned long pstart, pend;
200
201 pstart = image->segment[j].mem;
202 pend = pstart + image->segment[j].memsz;
203
204 if ((mend > pstart) && (mstart < pend))
205 return -EINVAL;
206 }
207 }
208
209
210
211
212
213
214 for (i = 0; i < nr_segments; i++) {
215 if (image->segment[i].bufsz > image->segment[i].memsz)
216 return -EINVAL;
217 }
218
219
220
221
222
223
224 for (i = 0; i < nr_segments; i++) {
225 if (PAGE_COUNT(image->segment[i].memsz) > totalram_pages / 2)
226 return -EINVAL;
227
228 total_pages += PAGE_COUNT(image->segment[i].memsz);
229 }
230
231 if (total_pages > totalram_pages / 2)
232 return -EINVAL;
233
234
235
236
237
238
239
240
241
242
243
244 if (image->type == KEXEC_TYPE_CRASH) {
245 for (i = 0; i < nr_segments; i++) {
246 unsigned long mstart, mend;
247
248 mstart = image->segment[i].mem;
249 mend = mstart + image->segment[i].memsz - 1;
250
251 if ((mstart < phys_to_boot_phys(crashk_res.start)) ||
252 (mend > phys_to_boot_phys(crashk_res.end)))
253 return -EADDRNOTAVAIL;
254 }
255 }
256
257 return 0;
258}
259
260struct kimage *do_kimage_alloc_init(void)
261{
262 struct kimage *image;
263
264
265 image = kzalloc(sizeof(*image), GFP_KERNEL);
266 if (!image)
267 return NULL;
268
269 image->head = 0;
270 image->entry = &image->head;
271 image->last_entry = &image->head;
272 image->control_page = ~0;
273 image->type = KEXEC_TYPE_DEFAULT;
274
275
276 INIT_LIST_HEAD(&image->control_pages);
277
278
279 INIT_LIST_HEAD(&image->dest_pages);
280
281
282 INIT_LIST_HEAD(&image->unusable_pages);
283
284 return image;
285}
286
287int kimage_is_destination_range(struct kimage *image,
288 unsigned long start,
289 unsigned long end)
290{
291 unsigned long i;
292
293 for (i = 0; i < image->nr_segments; i++) {
294 unsigned long mstart, mend;
295
296 mstart = image->segment[i].mem;
297 mend = mstart + image->segment[i].memsz;
298 if ((end > mstart) && (start < mend))
299 return 1;
300 }
301
302 return 0;
303}
304
305static struct page *kimage_alloc_pages(gfp_t gfp_mask, unsigned int order)
306{
307 struct page *pages;
308
309 pages = alloc_pages(gfp_mask, order);
310 if (pages) {
311 unsigned int count, i;
312
313 pages->mapping = NULL;
314 set_page_private(pages, order);
315 count = 1 << order;
316 for (i = 0; i < count; i++)
317 SetPageReserved(pages + i);
318 }
319
320 return pages;
321}
322
323static void kimage_free_pages(struct page *page)
324{
325 unsigned int order, count, i;
326
327 order = page_private(page);
328 count = 1 << order;
329 for (i = 0; i < count; i++)
330 ClearPageReserved(page + i);
331 __free_pages(page, order);
332}
333
334void kimage_free_page_list(struct list_head *list)
335{
336 struct page *page, *next;
337
338 list_for_each_entry_safe(page, next, list, lru) {
339 list_del(&page->lru);
340 kimage_free_pages(page);
341 }
342}
343
344static struct page *kimage_alloc_normal_control_pages(struct kimage *image,
345 unsigned int order)
346{
347
348
349
350
351
352
353
354
355
356
357
358
359
360 struct list_head extra_pages;
361 struct page *pages;
362 unsigned int count;
363
364 count = 1 << order;
365 INIT_LIST_HEAD(&extra_pages);
366
367
368
369
370 do {
371 unsigned long pfn, epfn, addr, eaddr;
372
373 pages = kimage_alloc_pages(KEXEC_CONTROL_MEMORY_GFP, order);
374 if (!pages)
375 break;
376 pfn = page_to_boot_pfn(pages);
377 epfn = pfn + count;
378 addr = pfn << PAGE_SHIFT;
379 eaddr = epfn << PAGE_SHIFT;
380 if ((epfn >= (KEXEC_CONTROL_MEMORY_LIMIT >> PAGE_SHIFT)) ||
381 kimage_is_destination_range(image, addr, eaddr)) {
382 list_add(&pages->lru, &extra_pages);
383 pages = NULL;
384 }
385 } while (!pages);
386
387 if (pages) {
388
389 list_add(&pages->lru, &image->control_pages);
390
391
392
393
394
395
396
397 }
398
399
400
401
402
403
404
405 kimage_free_page_list(&extra_pages);
406
407 return pages;
408}
409
410static struct page *kimage_alloc_crash_control_pages(struct kimage *image,
411 unsigned int order)
412{
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434 unsigned long hole_start, hole_end, size;
435 struct page *pages;
436
437 pages = NULL;
438 size = (1 << order) << PAGE_SHIFT;
439 hole_start = (image->control_page + (size - 1)) & ~(size - 1);
440 hole_end = hole_start + size - 1;
441 while (hole_end <= crashk_res.end) {
442 unsigned long i;
443
444 if (hole_end > KEXEC_CRASH_CONTROL_MEMORY_LIMIT)
445 break;
446
447 for (i = 0; i < image->nr_segments; i++) {
448 unsigned long mstart, mend;
449
450 mstart = image->segment[i].mem;
451 mend = mstart + image->segment[i].memsz - 1;
452 if ((hole_end >= mstart) && (hole_start <= mend)) {
453
454 hole_start = (mend + (size - 1)) & ~(size - 1);
455 hole_end = hole_start + size - 1;
456 break;
457 }
458 }
459
460 if (i == image->nr_segments) {
461 pages = pfn_to_page(hole_start >> PAGE_SHIFT);
462 image->control_page = hole_end;
463 break;
464 }
465 }
466
467 return pages;
468}
469
470
471struct page *kimage_alloc_control_pages(struct kimage *image,
472 unsigned int order)
473{
474 struct page *pages = NULL;
475
476 switch (image->type) {
477 case KEXEC_TYPE_DEFAULT:
478 pages = kimage_alloc_normal_control_pages(image, order);
479 break;
480 case KEXEC_TYPE_CRASH:
481 pages = kimage_alloc_crash_control_pages(image, order);
482 break;
483 }
484
485 return pages;
486}
487
488static int kimage_add_entry(struct kimage *image, kimage_entry_t entry)
489{
490 if (*image->entry != 0)
491 image->entry++;
492
493 if (image->entry == image->last_entry) {
494 kimage_entry_t *ind_page;
495 struct page *page;
496
497 page = kimage_alloc_page(image, GFP_KERNEL, KIMAGE_NO_DEST);
498 if (!page)
499 return -ENOMEM;
500
501 ind_page = page_address(page);
502 *image->entry = virt_to_boot_phys(ind_page) | IND_INDIRECTION;
503 image->entry = ind_page;
504 image->last_entry = ind_page +
505 ((PAGE_SIZE/sizeof(kimage_entry_t)) - 1);
506 }
507 *image->entry = entry;
508 image->entry++;
509 *image->entry = 0;
510
511 return 0;
512}
513
514static int kimage_set_destination(struct kimage *image,
515 unsigned long destination)
516{
517 int result;
518
519 destination &= PAGE_MASK;
520 result = kimage_add_entry(image, destination | IND_DESTINATION);
521
522 return result;
523}
524
525
526static int kimage_add_page(struct kimage *image, unsigned long page)
527{
528 int result;
529
530 page &= PAGE_MASK;
531 result = kimage_add_entry(image, page | IND_SOURCE);
532
533 return result;
534}
535
536
537static void kimage_free_extra_pages(struct kimage *image)
538{
539
540 kimage_free_page_list(&image->dest_pages);
541
542
543 kimage_free_page_list(&image->unusable_pages);
544
545}
546void kimage_terminate(struct kimage *image)
547{
548 if (*image->entry != 0)
549 image->entry++;
550
551 *image->entry = IND_DONE;
552}
553
554#define for_each_kimage_entry(image, ptr, entry) \
555 for (ptr = &image->head; (entry = *ptr) && !(entry & IND_DONE); \
556 ptr = (entry & IND_INDIRECTION) ? \
557 boot_phys_to_virt((entry & PAGE_MASK)) : ptr + 1)
558
559static void kimage_free_entry(kimage_entry_t entry)
560{
561 struct page *page;
562
563 page = boot_pfn_to_page(entry >> PAGE_SHIFT);
564 kimage_free_pages(page);
565}
566
567void kimage_free(struct kimage *image)
568{
569 kimage_entry_t *ptr, entry;
570 kimage_entry_t ind = 0;
571
572 if (!image)
573 return;
574
575 kimage_free_extra_pages(image);
576 for_each_kimage_entry(image, ptr, entry) {
577 if (entry & IND_INDIRECTION) {
578
579 if (ind & IND_INDIRECTION)
580 kimage_free_entry(ind);
581
582
583
584 ind = entry;
585 } else if (entry & IND_SOURCE)
586 kimage_free_entry(entry);
587 }
588
589 if (ind & IND_INDIRECTION)
590 kimage_free_entry(ind);
591
592
593 machine_kexec_cleanup(image);
594
595
596 kimage_free_page_list(&image->control_pages);
597
598
599
600
601
602 if (image->file_mode)
603 kimage_file_post_load_cleanup(image);
604
605 kfree(image);
606}
607
608static kimage_entry_t *kimage_dst_used(struct kimage *image,
609 unsigned long page)
610{
611 kimage_entry_t *ptr, entry;
612 unsigned long destination = 0;
613
614 for_each_kimage_entry(image, ptr, entry) {
615 if (entry & IND_DESTINATION)
616 destination = entry & PAGE_MASK;
617 else if (entry & IND_SOURCE) {
618 if (page == destination)
619 return ptr;
620 destination += PAGE_SIZE;
621 }
622 }
623
624 return NULL;
625}
626
627static struct page *kimage_alloc_page(struct kimage *image,
628 gfp_t gfp_mask,
629 unsigned long destination)
630{
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649 struct page *page;
650 unsigned long addr;
651
652
653
654
655
656 list_for_each_entry(page, &image->dest_pages, lru) {
657 addr = page_to_boot_pfn(page) << PAGE_SHIFT;
658 if (addr == destination) {
659 list_del(&page->lru);
660 return page;
661 }
662 }
663 page = NULL;
664 while (1) {
665 kimage_entry_t *old;
666
667
668 page = kimage_alloc_pages(gfp_mask, 0);
669 if (!page)
670 return NULL;
671
672 if (page_to_boot_pfn(page) >
673 (KEXEC_SOURCE_MEMORY_LIMIT >> PAGE_SHIFT)) {
674 list_add(&page->lru, &image->unusable_pages);
675 continue;
676 }
677 addr = page_to_boot_pfn(page) << PAGE_SHIFT;
678
679
680 if (addr == destination)
681 break;
682
683
684 if (!kimage_is_destination_range(image, addr,
685 addr + PAGE_SIZE))
686 break;
687
688
689
690
691
692
693 old = kimage_dst_used(image, addr);
694 if (old) {
695
696 unsigned long old_addr;
697 struct page *old_page;
698
699 old_addr = *old & PAGE_MASK;
700 old_page = boot_pfn_to_page(old_addr >> PAGE_SHIFT);
701 copy_highpage(page, old_page);
702 *old = addr | (*old & ~PAGE_MASK);
703
704
705
706
707
708 if (!(gfp_mask & __GFP_HIGHMEM) &&
709 PageHighMem(old_page)) {
710 kimage_free_pages(old_page);
711 continue;
712 }
713 addr = old_addr;
714 page = old_page;
715 break;
716 }
717
718 list_add(&page->lru, &image->dest_pages);
719 }
720
721 return page;
722}
723
724static int kimage_load_normal_segment(struct kimage *image,
725 struct kexec_segment *segment)
726{
727 unsigned long maddr;
728 size_t ubytes, mbytes;
729 int result;
730 unsigned char __user *buf = NULL;
731 unsigned char *kbuf = NULL;
732
733 result = 0;
734 if (image->file_mode)
735 kbuf = segment->kbuf;
736 else
737 buf = segment->buf;
738 ubytes = segment->bufsz;
739 mbytes = segment->memsz;
740 maddr = segment->mem;
741
742 result = kimage_set_destination(image, maddr);
743 if (result < 0)
744 goto out;
745
746 while (mbytes) {
747 struct page *page;
748 char *ptr;
749 size_t uchunk, mchunk;
750
751 page = kimage_alloc_page(image, GFP_HIGHUSER, maddr);
752 if (!page) {
753 result = -ENOMEM;
754 goto out;
755 }
756 result = kimage_add_page(image, page_to_boot_pfn(page)
757 << PAGE_SHIFT);
758 if (result < 0)
759 goto out;
760
761 ptr = kmap(page);
762
763 clear_page(ptr);
764 ptr += maddr & ~PAGE_MASK;
765 mchunk = min_t(size_t, mbytes,
766 PAGE_SIZE - (maddr & ~PAGE_MASK));
767 uchunk = min(ubytes, mchunk);
768
769
770 if (image->file_mode)
771 memcpy(ptr, kbuf, uchunk);
772 else
773 result = copy_from_user(ptr, buf, uchunk);
774 kunmap(page);
775 if (result) {
776 result = -EFAULT;
777 goto out;
778 }
779 ubytes -= uchunk;
780 maddr += mchunk;
781 if (image->file_mode)
782 kbuf += mchunk;
783 else
784 buf += mchunk;
785 mbytes -= mchunk;
786 }
787out:
788 return result;
789}
790
791static int kimage_load_crash_segment(struct kimage *image,
792 struct kexec_segment *segment)
793{
794
795
796
797
798 unsigned long maddr;
799 size_t ubytes, mbytes;
800 int result;
801 unsigned char __user *buf = NULL;
802 unsigned char *kbuf = NULL;
803
804 result = 0;
805 if (image->file_mode)
806 kbuf = segment->kbuf;
807 else
808 buf = segment->buf;
809 ubytes = segment->bufsz;
810 mbytes = segment->memsz;
811 maddr = segment->mem;
812 while (mbytes) {
813 struct page *page;
814 char *ptr;
815 size_t uchunk, mchunk;
816
817 page = boot_pfn_to_page(maddr >> PAGE_SHIFT);
818 if (!page) {
819 result = -ENOMEM;
820 goto out;
821 }
822 ptr = kmap(page);
823 ptr += maddr & ~PAGE_MASK;
824 mchunk = min_t(size_t, mbytes,
825 PAGE_SIZE - (maddr & ~PAGE_MASK));
826 uchunk = min(ubytes, mchunk);
827 if (mchunk > uchunk) {
828
829 memset(ptr + uchunk, 0, mchunk - uchunk);
830 }
831
832
833 if (image->file_mode)
834 memcpy(ptr, kbuf, uchunk);
835 else
836 result = copy_from_user(ptr, buf, uchunk);
837 kexec_flush_icache_page(page);
838 kunmap(page);
839 if (result) {
840 result = -EFAULT;
841 goto out;
842 }
843 ubytes -= uchunk;
844 maddr += mchunk;
845 if (image->file_mode)
846 kbuf += mchunk;
847 else
848 buf += mchunk;
849 mbytes -= mchunk;
850 }
851out:
852 return result;
853}
854
855int kimage_load_segment(struct kimage *image,
856 struct kexec_segment *segment)
857{
858 int result = -ENOMEM;
859
860 switch (image->type) {
861 case KEXEC_TYPE_DEFAULT:
862 result = kimage_load_normal_segment(image, segment);
863 break;
864 case KEXEC_TYPE_CRASH:
865 result = kimage_load_crash_segment(image, segment);
866 break;
867 }
868
869 return result;
870}
871
872struct kimage *kexec_image;
873struct kimage *kexec_crash_image;
874int kexec_load_disabled;
875
876
877
878
879
880
881void __crash_kexec(struct pt_regs *regs)
882{
883
884
885
886
887
888
889
890
891 if (mutex_trylock(&kexec_mutex)) {
892 if (kexec_crash_image) {
893 struct pt_regs fixed_regs;
894
895 crash_setup_regs(&fixed_regs, regs);
896 crash_save_vmcoreinfo();
897 machine_crash_shutdown(&fixed_regs);
898 machine_kexec(kexec_crash_image);
899 }
900 mutex_unlock(&kexec_mutex);
901 }
902}
903
904void crash_kexec(struct pt_regs *regs)
905{
906 int old_cpu, this_cpu;
907
908
909
910
911
912
913 this_cpu = raw_smp_processor_id();
914 old_cpu = atomic_cmpxchg(&panic_cpu, PANIC_CPU_INVALID, this_cpu);
915 if (old_cpu == PANIC_CPU_INVALID) {
916
917 printk_nmi_flush_on_panic();
918 __crash_kexec(regs);
919
920
921
922
923
924 atomic_set(&panic_cpu, PANIC_CPU_INVALID);
925 }
926}
927
928size_t crash_get_memory_size(void)
929{
930 size_t size = 0;
931
932 mutex_lock(&kexec_mutex);
933 if (crashk_res.end != crashk_res.start)
934 size = resource_size(&crashk_res);
935 mutex_unlock(&kexec_mutex);
936 return size;
937}
938
939void __weak crash_free_reserved_phys_range(unsigned long begin,
940 unsigned long end)
941{
942 unsigned long addr;
943
944 for (addr = begin; addr < end; addr += PAGE_SIZE)
945 free_reserved_page(boot_pfn_to_page(addr >> PAGE_SHIFT));
946}
947
948int crash_shrink_memory(unsigned long new_size)
949{
950 int ret = 0;
951 unsigned long start, end;
952 unsigned long old_size;
953 struct resource *ram_res;
954
955 mutex_lock(&kexec_mutex);
956
957 if (kexec_crash_image) {
958 ret = -ENOENT;
959 goto unlock;
960 }
961 start = crashk_res.start;
962 end = crashk_res.end;
963 old_size = (end == 0) ? 0 : end - start + 1;
964 if (new_size >= old_size) {
965 ret = (new_size == old_size) ? 0 : -EINVAL;
966 goto unlock;
967 }
968
969 ram_res = kzalloc(sizeof(*ram_res), GFP_KERNEL);
970 if (!ram_res) {
971 ret = -ENOMEM;
972 goto unlock;
973 }
974
975 start = roundup(start, KEXEC_CRASH_MEM_ALIGN);
976 end = roundup(start + new_size, KEXEC_CRASH_MEM_ALIGN);
977
978 crash_free_reserved_phys_range(end, crashk_res.end);
979
980 if ((start == end) && (crashk_res.parent != NULL))
981 release_resource(&crashk_res);
982
983 ram_res->start = end;
984 ram_res->end = crashk_res.end;
985 ram_res->flags = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM;
986 ram_res->name = "System RAM";
987
988 crashk_res.end = end - 1;
989
990 insert_resource(&iomem_resource, ram_res);
991
992unlock:
993 mutex_unlock(&kexec_mutex);
994 return ret;
995}
996
997static u32 *append_elf_note(u32 *buf, char *name, unsigned type, void *data,
998 size_t data_len)
999{
1000 struct elf_note note;
1001
1002 note.n_namesz = strlen(name) + 1;
1003 note.n_descsz = data_len;
1004 note.n_type = type;
1005 memcpy(buf, ¬e, sizeof(note));
1006 buf += (sizeof(note) + 3)/4;
1007 memcpy(buf, name, note.n_namesz);
1008 buf += (note.n_namesz + 3)/4;
1009 memcpy(buf, data, note.n_descsz);
1010 buf += (note.n_descsz + 3)/4;
1011
1012 return buf;
1013}
1014
1015static void final_note(u32 *buf)
1016{
1017 struct elf_note note;
1018
1019 note.n_namesz = 0;
1020 note.n_descsz = 0;
1021 note.n_type = 0;
1022 memcpy(buf, ¬e, sizeof(note));
1023}
1024
1025void crash_save_cpu(struct pt_regs *regs, int cpu)
1026{
1027 struct elf_prstatus prstatus;
1028 u32 *buf;
1029
1030 if ((cpu < 0) || (cpu >= nr_cpu_ids))
1031 return;
1032
1033
1034
1035
1036
1037
1038
1039
1040 buf = (u32 *)per_cpu_ptr(crash_notes, cpu);
1041 if (!buf)
1042 return;
1043 memset(&prstatus, 0, sizeof(prstatus));
1044 prstatus.pr_pid = current->pid;
1045 elf_core_copy_kernel_regs(&prstatus.pr_reg, regs);
1046 buf = append_elf_note(buf, KEXEC_CORE_NOTE_NAME, NT_PRSTATUS,
1047 &prstatus, sizeof(prstatus));
1048 final_note(buf);
1049}
1050
1051static int __init crash_notes_memory_init(void)
1052{
1053
1054 size_t size, align;
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066 size = sizeof(note_buf_t);
1067 align = min(roundup_pow_of_two(sizeof(note_buf_t)), PAGE_SIZE);
1068
1069
1070
1071
1072
1073 BUILD_BUG_ON(size > PAGE_SIZE);
1074
1075 crash_notes = __alloc_percpu(size, align);
1076 if (!crash_notes) {
1077 pr_warn("Memory allocation for saving cpu register states failed\n");
1078 return -ENOMEM;
1079 }
1080 return 0;
1081}
1082subsys_initcall(crash_notes_memory_init);
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099static int __init parse_crashkernel_mem(char *cmdline,
1100 unsigned long long system_ram,
1101 unsigned long long *crash_size,
1102 unsigned long long *crash_base)
1103{
1104 char *cur = cmdline, *tmp;
1105
1106
1107 do {
1108 unsigned long long start, end = ULLONG_MAX, size;
1109
1110
1111 start = memparse(cur, &tmp);
1112 if (cur == tmp) {
1113 pr_warn("crashkernel: Memory value expected\n");
1114 return -EINVAL;
1115 }
1116 cur = tmp;
1117 if (*cur != '-') {
1118 pr_warn("crashkernel: '-' expected\n");
1119 return -EINVAL;
1120 }
1121 cur++;
1122
1123
1124 if (*cur != ':') {
1125 end = memparse(cur, &tmp);
1126 if (cur == tmp) {
1127 pr_warn("crashkernel: Memory value expected\n");
1128 return -EINVAL;
1129 }
1130 cur = tmp;
1131 if (end <= start) {
1132 pr_warn("crashkernel: end <= start\n");
1133 return -EINVAL;
1134 }
1135 }
1136
1137 if (*cur != ':') {
1138 pr_warn("crashkernel: ':' expected\n");
1139 return -EINVAL;
1140 }
1141 cur++;
1142
1143 size = memparse(cur, &tmp);
1144 if (cur == tmp) {
1145 pr_warn("Memory value expected\n");
1146 return -EINVAL;
1147 }
1148 cur = tmp;
1149 if (size >= system_ram) {
1150 pr_warn("crashkernel: invalid size\n");
1151 return -EINVAL;
1152 }
1153
1154
1155 if (system_ram >= start && system_ram < end) {
1156 *crash_size = size;
1157 break;
1158 }
1159 } while (*cur++ == ',');
1160
1161 if (*crash_size > 0) {
1162 while (*cur && *cur != ' ' && *cur != '@')
1163 cur++;
1164 if (*cur == '@') {
1165 cur++;
1166 *crash_base = memparse(cur, &tmp);
1167 if (cur == tmp) {
1168 pr_warn("Memory value expected after '@'\n");
1169 return -EINVAL;
1170 }
1171 }
1172 }
1173
1174 return 0;
1175}
1176
1177
1178
1179
1180
1181
1182
1183
1184static int __init parse_crashkernel_simple(char *cmdline,
1185 unsigned long long *crash_size,
1186 unsigned long long *crash_base)
1187{
1188 char *cur = cmdline;
1189
1190 *crash_size = memparse(cmdline, &cur);
1191 if (cmdline == cur) {
1192 pr_warn("crashkernel: memory value expected\n");
1193 return -EINVAL;
1194 }
1195
1196 if (*cur == '@')
1197 *crash_base = memparse(cur+1, &cur);
1198 else if (*cur != ' ' && *cur != '\0') {
1199 pr_warn("crashkernel: unrecognized char: %c\n", *cur);
1200 return -EINVAL;
1201 }
1202
1203 return 0;
1204}
1205
1206#define SUFFIX_HIGH 0
1207#define SUFFIX_LOW 1
1208#define SUFFIX_NULL 2
1209static __initdata char *suffix_tbl[] = {
1210 [SUFFIX_HIGH] = ",high",
1211 [SUFFIX_LOW] = ",low",
1212 [SUFFIX_NULL] = NULL,
1213};
1214
1215
1216
1217
1218
1219
1220
1221
1222static int __init parse_crashkernel_suffix(char *cmdline,
1223 unsigned long long *crash_size,
1224 const char *suffix)
1225{
1226 char *cur = cmdline;
1227
1228 *crash_size = memparse(cmdline, &cur);
1229 if (cmdline == cur) {
1230 pr_warn("crashkernel: memory value expected\n");
1231 return -EINVAL;
1232 }
1233
1234
1235 if (strncmp(cur, suffix, strlen(suffix))) {
1236 pr_warn("crashkernel: unrecognized char: %c\n", *cur);
1237 return -EINVAL;
1238 }
1239 cur += strlen(suffix);
1240 if (*cur != ' ' && *cur != '\0') {
1241 pr_warn("crashkernel: unrecognized char: %c\n", *cur);
1242 return -EINVAL;
1243 }
1244
1245 return 0;
1246}
1247
1248static __init char *get_last_crashkernel(char *cmdline,
1249 const char *name,
1250 const char *suffix)
1251{
1252 char *p = cmdline, *ck_cmdline = NULL;
1253
1254
1255 p = strstr(p, name);
1256 while (p) {
1257 char *end_p = strchr(p, ' ');
1258 char *q;
1259
1260 if (!end_p)
1261 end_p = p + strlen(p);
1262
1263 if (!suffix) {
1264 int i;
1265
1266
1267 for (i = 0; suffix_tbl[i]; i++) {
1268 q = end_p - strlen(suffix_tbl[i]);
1269 if (!strncmp(q, suffix_tbl[i],
1270 strlen(suffix_tbl[i])))
1271 goto next;
1272 }
1273 ck_cmdline = p;
1274 } else {
1275 q = end_p - strlen(suffix);
1276 if (!strncmp(q, suffix, strlen(suffix)))
1277 ck_cmdline = p;
1278 }
1279next:
1280 p = strstr(p+1, name);
1281 }
1282
1283 if (!ck_cmdline)
1284 return NULL;
1285
1286 return ck_cmdline;
1287}
1288
1289static int __init __parse_crashkernel(char *cmdline,
1290 unsigned long long system_ram,
1291 unsigned long long *crash_size,
1292 unsigned long long *crash_base,
1293 const char *name,
1294 const char *suffix)
1295{
1296 char *first_colon, *first_space;
1297 char *ck_cmdline;
1298
1299 BUG_ON(!crash_size || !crash_base);
1300 *crash_size = 0;
1301 *crash_base = 0;
1302
1303 ck_cmdline = get_last_crashkernel(cmdline, name, suffix);
1304
1305 if (!ck_cmdline)
1306 return -EINVAL;
1307
1308 ck_cmdline += strlen(name);
1309
1310 if (suffix)
1311 return parse_crashkernel_suffix(ck_cmdline, crash_size,
1312 suffix);
1313
1314
1315
1316
1317 first_colon = strchr(ck_cmdline, ':');
1318 first_space = strchr(ck_cmdline, ' ');
1319 if (first_colon && (!first_space || first_colon < first_space))
1320 return parse_crashkernel_mem(ck_cmdline, system_ram,
1321 crash_size, crash_base);
1322
1323 return parse_crashkernel_simple(ck_cmdline, crash_size, crash_base);
1324}
1325
1326
1327
1328
1329
1330int __init parse_crashkernel(char *cmdline,
1331 unsigned long long system_ram,
1332 unsigned long long *crash_size,
1333 unsigned long long *crash_base)
1334{
1335 return __parse_crashkernel(cmdline, system_ram, crash_size, crash_base,
1336 "crashkernel=", NULL);
1337}
1338
1339int __init parse_crashkernel_high(char *cmdline,
1340 unsigned long long system_ram,
1341 unsigned long long *crash_size,
1342 unsigned long long *crash_base)
1343{
1344 return __parse_crashkernel(cmdline, system_ram, crash_size, crash_base,
1345 "crashkernel=", suffix_tbl[SUFFIX_HIGH]);
1346}
1347
1348int __init parse_crashkernel_low(char *cmdline,
1349 unsigned long long system_ram,
1350 unsigned long long *crash_size,
1351 unsigned long long *crash_base)
1352{
1353 return __parse_crashkernel(cmdline, system_ram, crash_size, crash_base,
1354 "crashkernel=", suffix_tbl[SUFFIX_LOW]);
1355}
1356
1357static void update_vmcoreinfo_note(void)
1358{
1359 u32 *buf = vmcoreinfo_note;
1360
1361 if (!vmcoreinfo_size)
1362 return;
1363 buf = append_elf_note(buf, VMCOREINFO_NOTE_NAME, 0, vmcoreinfo_data,
1364 vmcoreinfo_size);
1365 final_note(buf);
1366}
1367
1368void crash_save_vmcoreinfo(void)
1369{
1370 vmcoreinfo_append_str("CRASHTIME=%ld\n", get_seconds());
1371 update_vmcoreinfo_note();
1372}
1373
1374void vmcoreinfo_append_str(const char *fmt, ...)
1375{
1376 va_list args;
1377 char buf[0x50];
1378 size_t r;
1379
1380 va_start(args, fmt);
1381 r = vscnprintf(buf, sizeof(buf), fmt, args);
1382 va_end(args);
1383
1384 r = min(r, vmcoreinfo_max_size - vmcoreinfo_size);
1385
1386 memcpy(&vmcoreinfo_data[vmcoreinfo_size], buf, r);
1387
1388 vmcoreinfo_size += r;
1389}
1390
1391
1392
1393
1394
1395void __weak arch_crash_save_vmcoreinfo(void)
1396{}
1397
1398phys_addr_t __weak paddr_vmcoreinfo_note(void)
1399{
1400 return __pa((unsigned long)(char *)&vmcoreinfo_note);
1401}
1402
1403static int __init crash_save_vmcoreinfo_init(void)
1404{
1405 VMCOREINFO_OSRELEASE(init_uts_ns.name.release);
1406 VMCOREINFO_PAGESIZE(PAGE_SIZE);
1407
1408 VMCOREINFO_SYMBOL(init_uts_ns);
1409 VMCOREINFO_SYMBOL(node_online_map);
1410#ifdef CONFIG_MMU
1411 VMCOREINFO_SYMBOL(swapper_pg_dir);
1412#endif
1413 VMCOREINFO_SYMBOL(_stext);
1414 VMCOREINFO_SYMBOL(vmap_area_list);
1415
1416#ifndef CONFIG_NEED_MULTIPLE_NODES
1417 VMCOREINFO_SYMBOL(mem_map);
1418 VMCOREINFO_SYMBOL(contig_page_data);
1419#endif
1420#ifdef CONFIG_SPARSEMEM
1421 VMCOREINFO_SYMBOL(mem_section);
1422 VMCOREINFO_LENGTH(mem_section, NR_SECTION_ROOTS);
1423 VMCOREINFO_STRUCT_SIZE(mem_section);
1424 VMCOREINFO_OFFSET(mem_section, section_mem_map);
1425#endif
1426 VMCOREINFO_STRUCT_SIZE(page);
1427 VMCOREINFO_STRUCT_SIZE(pglist_data);
1428 VMCOREINFO_STRUCT_SIZE(zone);
1429 VMCOREINFO_STRUCT_SIZE(free_area);
1430 VMCOREINFO_STRUCT_SIZE(list_head);
1431 VMCOREINFO_SIZE(nodemask_t);
1432 VMCOREINFO_OFFSET(page, flags);
1433 VMCOREINFO_OFFSET(page, _refcount);
1434 VMCOREINFO_OFFSET(page, mapping);
1435 VMCOREINFO_OFFSET(page, lru);
1436 VMCOREINFO_OFFSET(page, _mapcount);
1437 VMCOREINFO_OFFSET(page, private);
1438 VMCOREINFO_OFFSET(page, compound_dtor);
1439 VMCOREINFO_OFFSET(page, compound_order);
1440 VMCOREINFO_OFFSET(page, compound_head);
1441 VMCOREINFO_OFFSET(pglist_data, node_zones);
1442 VMCOREINFO_OFFSET(pglist_data, nr_zones);
1443#ifdef CONFIG_FLAT_NODE_MEM_MAP
1444 VMCOREINFO_OFFSET(pglist_data, node_mem_map);
1445#endif
1446 VMCOREINFO_OFFSET(pglist_data, node_start_pfn);
1447 VMCOREINFO_OFFSET(pglist_data, node_spanned_pages);
1448 VMCOREINFO_OFFSET(pglist_data, node_id);
1449 VMCOREINFO_OFFSET(zone, free_area);
1450 VMCOREINFO_OFFSET(zone, vm_stat);
1451 VMCOREINFO_OFFSET(zone, spanned_pages);
1452 VMCOREINFO_OFFSET(free_area, free_list);
1453 VMCOREINFO_OFFSET(list_head, next);
1454 VMCOREINFO_OFFSET(list_head, prev);
1455 VMCOREINFO_OFFSET(vmap_area, va_start);
1456 VMCOREINFO_OFFSET(vmap_area, list);
1457 VMCOREINFO_LENGTH(zone.free_area, MAX_ORDER);
1458 log_buf_kexec_setup();
1459 VMCOREINFO_LENGTH(free_area.free_list, MIGRATE_TYPES);
1460 VMCOREINFO_NUMBER(NR_FREE_PAGES);
1461 VMCOREINFO_NUMBER(PG_lru);
1462 VMCOREINFO_NUMBER(PG_private);
1463 VMCOREINFO_NUMBER(PG_swapcache);
1464 VMCOREINFO_NUMBER(PG_slab);
1465#ifdef CONFIG_MEMORY_FAILURE
1466 VMCOREINFO_NUMBER(PG_hwpoison);
1467#endif
1468 VMCOREINFO_NUMBER(PG_head_mask);
1469 VMCOREINFO_NUMBER(PAGE_BUDDY_MAPCOUNT_VALUE);
1470#ifdef CONFIG_X86
1471 VMCOREINFO_NUMBER(KERNEL_IMAGE_SIZE);
1472#endif
1473#ifdef CONFIG_HUGETLB_PAGE
1474 VMCOREINFO_NUMBER(HUGETLB_PAGE_DTOR);
1475#endif
1476
1477 arch_crash_save_vmcoreinfo();
1478 update_vmcoreinfo_note();
1479
1480 return 0;
1481}
1482
1483subsys_initcall(crash_save_vmcoreinfo_init);
1484
1485
1486
1487
1488
1489int kernel_kexec(void)
1490{
1491 int error = 0;
1492
1493 if (!mutex_trylock(&kexec_mutex))
1494 return -EBUSY;
1495 if (!kexec_image) {
1496 error = -EINVAL;
1497 goto Unlock;
1498 }
1499
1500#ifdef CONFIG_KEXEC_JUMP
1501 if (kexec_image->preserve_context) {
1502 lock_system_sleep();
1503 pm_prepare_console();
1504 error = freeze_processes();
1505 if (error) {
1506 error = -EBUSY;
1507 goto Restore_console;
1508 }
1509 suspend_console();
1510 error = dpm_suspend_start(PMSG_FREEZE);
1511 if (error)
1512 goto Resume_console;
1513
1514
1515
1516
1517
1518
1519
1520 error = dpm_suspend_end(PMSG_FREEZE);
1521 if (error)
1522 goto Resume_devices;
1523 error = disable_nonboot_cpus();
1524 if (error)
1525 goto Enable_cpus;
1526 local_irq_disable();
1527 error = syscore_suspend();
1528 if (error)
1529 goto Enable_irqs;
1530 } else
1531#endif
1532 {
1533 kexec_in_progress = true;
1534 kernel_restart_prepare(NULL);
1535 migrate_to_reboot_cpu();
1536
1537
1538
1539
1540
1541
1542
1543 cpu_hotplug_enable();
1544 pr_emerg("Starting new kernel\n");
1545 machine_shutdown();
1546 }
1547
1548 machine_kexec(kexec_image);
1549
1550#ifdef CONFIG_KEXEC_JUMP
1551 if (kexec_image->preserve_context) {
1552 syscore_resume();
1553 Enable_irqs:
1554 local_irq_enable();
1555 Enable_cpus:
1556 enable_nonboot_cpus();
1557 dpm_resume_start(PMSG_RESTORE);
1558 Resume_devices:
1559 dpm_resume_end(PMSG_RESTORE);
1560 Resume_console:
1561 resume_console();
1562 thaw_processes();
1563 Restore_console:
1564 pm_restore_console();
1565 unlock_system_sleep();
1566 }
1567#endif
1568
1569 Unlock:
1570 mutex_unlock(&kexec_mutex);
1571 return error;
1572}
1573
1574
1575
1576
1577
1578
1579
1580
1581void __weak arch_kexec_protect_crashkres(void)
1582{}
1583
1584void __weak arch_kexec_unprotect_crashkres(void)
1585{}
1586