GNU Linux-libre 4.4.288-gnu1
[releases.git] / arch / x86 / kernel / crash.c
1 /*
2  * Architecture specific (i386/x86_64) functions for kexec based crash dumps.
3  *
4  * Created by: Hariprasad Nellitheertha (hari@in.ibm.com)
5  *
6  * Copyright (C) IBM Corporation, 2004. All rights reserved.
7  * Copyright (C) Red Hat Inc., 2014. All rights reserved.
8  * Authors:
9  *      Vivek Goyal <vgoyal@redhat.com>
10  *
11  */
12
13 #define pr_fmt(fmt)     "kexec: " fmt
14
15 #include <linux/types.h>
16 #include <linux/kernel.h>
17 #include <linux/smp.h>
18 #include <linux/reboot.h>
19 #include <linux/kexec.h>
20 #include <linux/delay.h>
21 #include <linux/elf.h>
22 #include <linux/elfcore.h>
23 #include <linux/module.h>
24 #include <linux/slab.h>
25 #include <linux/vmalloc.h>
26 #include <linux/overflow.h>
27
28 #include <asm/processor.h>
29 #include <asm/hardirq.h>
30 #include <asm/nmi.h>
31 #include <asm/hw_irq.h>
32 #include <asm/apic.h>
33 #include <asm/io_apic.h>
34 #include <asm/hpet.h>
35 #include <linux/kdebug.h>
36 #include <asm/cpu.h>
37 #include <asm/reboot.h>
38 #include <asm/virtext.h>
39
40 /* Alignment required for elf header segment */
41 #define ELF_CORE_HEADER_ALIGN   4096
42
43 /* This primarily represents number of split ranges due to exclusion */
44 #define CRASH_MAX_RANGES        16
45
46 struct crash_mem_range {
47         u64 start, end;
48 };
49
50 struct crash_mem {
51         unsigned int nr_ranges;
52         struct crash_mem_range ranges[CRASH_MAX_RANGES];
53 };
54
55 /* Misc data about ram ranges needed to prepare elf headers */
56 struct crash_elf_data {
57         struct kimage *image;
58         /*
59          * Total number of ram ranges we have after various adjustments for
60          * GART, crash reserved region etc.
61          */
62         unsigned int max_nr_ranges;
63         unsigned long gart_start, gart_end;
64
65         /* Pointer to elf header */
66         void *ehdr;
67         /* Pointer to next phdr */
68         void *bufp;
69         struct crash_mem mem;
70 };
71
72 /* Used while preparing memory map entries for second kernel */
73 struct crash_memmap_data {
74         struct boot_params *params;
75         /* Type of memory */
76         unsigned int type;
77 };
78
79 /*
80  * This is used to VMCLEAR all VMCSs loaded on the
81  * processor. And when loading kvm_intel module, the
82  * callback function pointer will be assigned.
83  *
84  * protected by rcu.
85  */
86 crash_vmclear_fn __rcu *crash_vmclear_loaded_vmcss = NULL;
87 EXPORT_SYMBOL_GPL(crash_vmclear_loaded_vmcss);
88 unsigned long crash_zero_bytes;
89
90 static inline void cpu_crash_vmclear_loaded_vmcss(void)
91 {
92         crash_vmclear_fn *do_vmclear_operation = NULL;
93
94         rcu_read_lock();
95         do_vmclear_operation = rcu_dereference(crash_vmclear_loaded_vmcss);
96         if (do_vmclear_operation)
97                 do_vmclear_operation();
98         rcu_read_unlock();
99 }
100
101 #if defined(CONFIG_SMP) && defined(CONFIG_X86_LOCAL_APIC)
102
103 static void kdump_nmi_callback(int cpu, struct pt_regs *regs)
104 {
105 #ifdef CONFIG_X86_32
106         struct pt_regs fixed_regs;
107
108         if (!user_mode(regs)) {
109                 crash_fixup_ss_esp(&fixed_regs, regs);
110                 regs = &fixed_regs;
111         }
112 #endif
113         crash_save_cpu(regs, cpu);
114
115         /*
116          * VMCLEAR VMCSs loaded on all cpus if needed.
117          */
118         cpu_crash_vmclear_loaded_vmcss();
119
120         /* Disable VMX or SVM if needed.
121          *
122          * We need to disable virtualization on all CPUs.
123          * Having VMX or SVM enabled on any CPU may break rebooting
124          * after the kdump kernel has finished its task.
125          */
126         cpu_emergency_vmxoff();
127         cpu_emergency_svm_disable();
128
129         disable_local_APIC();
130 }
131
132 static void kdump_nmi_shootdown_cpus(void)
133 {
134         nmi_shootdown_cpus(kdump_nmi_callback);
135
136         disable_local_APIC();
137 }
138
139 #else
140 static void kdump_nmi_shootdown_cpus(void)
141 {
142         /* There are no cpus to shootdown */
143 }
144 #endif
145
146 void native_machine_crash_shutdown(struct pt_regs *regs)
147 {
148         /* This function is only called after the system
149          * has panicked or is otherwise in a critical state.
150          * The minimum amount of code to allow a kexec'd kernel
151          * to run successfully needs to happen here.
152          *
153          * In practice this means shooting down the other cpus in
154          * an SMP system.
155          */
156         /* The kernel is broken so disable interrupts */
157         local_irq_disable();
158
159         kdump_nmi_shootdown_cpus();
160
161         /*
162          * VMCLEAR VMCSs loaded on this cpu if needed.
163          */
164         cpu_crash_vmclear_loaded_vmcss();
165
166         /* Booting kdump kernel with VMX or SVM enabled won't work,
167          * because (among other limitations) we can't disable paging
168          * with the virt flags.
169          */
170         cpu_emergency_vmxoff();
171         cpu_emergency_svm_disable();
172
173 #ifdef CONFIG_X86_IO_APIC
174         /* Prevent crash_kexec() from deadlocking on ioapic_lock. */
175         ioapic_zap_locks();
176         disable_IO_APIC();
177 #endif
178         lapic_shutdown();
179 #ifdef CONFIG_HPET_TIMER
180         hpet_disable();
181 #endif
182         crash_save_cpu(regs, safe_smp_processor_id());
183 }
184
185 #ifdef CONFIG_KEXEC_FILE
186 static int get_nr_ram_ranges_callback(u64 start, u64 end, void *arg)
187 {
188         unsigned int *nr_ranges = arg;
189
190         (*nr_ranges)++;
191         return 0;
192 }
193
194 static int get_gart_ranges_callback(u64 start, u64 end, void *arg)
195 {
196         struct crash_elf_data *ced = arg;
197
198         ced->gart_start = start;
199         ced->gart_end = end;
200
201         /* Not expecting more than 1 gart aperture */
202         return 1;
203 }
204
205
206 /* Gather all the required information to prepare elf headers for ram regions */
207 static void fill_up_crash_elf_data(struct crash_elf_data *ced,
208                                    struct kimage *image)
209 {
210         unsigned int nr_ranges = 0;
211
212         ced->image = image;
213
214         walk_system_ram_res(0, -1, &nr_ranges,
215                                 get_nr_ram_ranges_callback);
216
217         ced->max_nr_ranges = nr_ranges;
218
219         /*
220          * We don't create ELF headers for GART aperture as an attempt
221          * to dump this memory in second kernel leads to hang/crash.
222          * If gart aperture is present, one needs to exclude that region
223          * and that could lead to need of extra phdr.
224          */
225         walk_iomem_res("GART", IORESOURCE_MEM, 0, -1,
226                                 ced, get_gart_ranges_callback);
227
228         /*
229          * If we have gart region, excluding that could potentially split
230          * a memory range, resulting in extra header. Account for  that.
231          */
232         if (ced->gart_end)
233                 ced->max_nr_ranges++;
234
235         /* Exclusion of crash region could split memory ranges */
236         ced->max_nr_ranges++;
237
238         /* If crashk_low_res is not 0, another range split possible */
239         if (crashk_low_res.end)
240                 ced->max_nr_ranges++;
241 }
242
243 static int exclude_mem_range(struct crash_mem *mem,
244                 unsigned long long mstart, unsigned long long mend)
245 {
246         int i, j;
247         unsigned long long start, end;
248         struct crash_mem_range temp_range = {0, 0};
249
250         for (i = 0; i < mem->nr_ranges; i++) {
251                 start = mem->ranges[i].start;
252                 end = mem->ranges[i].end;
253
254                 if (mstart > end || mend < start)
255                         continue;
256
257                 /* Truncate any area outside of range */
258                 if (mstart < start)
259                         mstart = start;
260                 if (mend > end)
261                         mend = end;
262
263                 /* Found completely overlapping range */
264                 if (mstart == start && mend == end) {
265                         mem->ranges[i].start = 0;
266                         mem->ranges[i].end = 0;
267                         if (i < mem->nr_ranges - 1) {
268                                 /* Shift rest of the ranges to left */
269                                 for (j = i; j < mem->nr_ranges - 1; j++) {
270                                         mem->ranges[j].start =
271                                                 mem->ranges[j+1].start;
272                                         mem->ranges[j].end =
273                                                         mem->ranges[j+1].end;
274                                 }
275                         }
276                         mem->nr_ranges--;
277                         return 0;
278                 }
279
280                 if (mstart > start && mend < end) {
281                         /* Split original range */
282                         mem->ranges[i].end = mstart - 1;
283                         temp_range.start = mend + 1;
284                         temp_range.end = end;
285                 } else if (mstart != start)
286                         mem->ranges[i].end = mstart - 1;
287                 else
288                         mem->ranges[i].start = mend + 1;
289                 break;
290         }
291
292         /* If a split happend, add the split to array */
293         if (!temp_range.end)
294                 return 0;
295
296         /* Split happened */
297         if (i == CRASH_MAX_RANGES - 1) {
298                 pr_err("Too many crash ranges after split\n");
299                 return -ENOMEM;
300         }
301
302         /* Location where new range should go */
303         j = i + 1;
304         if (j < mem->nr_ranges) {
305                 /* Move over all ranges one slot towards the end */
306                 for (i = mem->nr_ranges - 1; i >= j; i--)
307                         mem->ranges[i + 1] = mem->ranges[i];
308         }
309
310         mem->ranges[j].start = temp_range.start;
311         mem->ranges[j].end = temp_range.end;
312         mem->nr_ranges++;
313         return 0;
314 }
315
316 /*
317  * Look for any unwanted ranges between mstart, mend and remove them. This
318  * might lead to split and split ranges are put in ced->mem.ranges[] array
319  */
320 static int elf_header_exclude_ranges(struct crash_elf_data *ced,
321                 unsigned long long mstart, unsigned long long mend)
322 {
323         struct crash_mem *cmem = &ced->mem;
324         int ret = 0;
325
326         memset(cmem->ranges, 0, sizeof(cmem->ranges));
327
328         cmem->ranges[0].start = mstart;
329         cmem->ranges[0].end = mend;
330         cmem->nr_ranges = 1;
331
332         /* Exclude crashkernel region */
333         ret = exclude_mem_range(cmem, crashk_res.start, crashk_res.end);
334         if (ret)
335                 return ret;
336
337         if (crashk_low_res.end) {
338                 ret = exclude_mem_range(cmem, crashk_low_res.start, crashk_low_res.end);
339                 if (ret)
340                         return ret;
341         }
342
343         /* Exclude GART region */
344         if (ced->gart_end) {
345                 ret = exclude_mem_range(cmem, ced->gart_start, ced->gart_end);
346                 if (ret)
347                         return ret;
348         }
349
350         return ret;
351 }
352
353 static int prepare_elf64_ram_headers_callback(u64 start, u64 end, void *arg)
354 {
355         struct crash_elf_data *ced = arg;
356         Elf64_Ehdr *ehdr;
357         Elf64_Phdr *phdr;
358         unsigned long mstart, mend;
359         struct kimage *image = ced->image;
360         struct crash_mem *cmem;
361         int ret, i;
362
363         ehdr = ced->ehdr;
364
365         /* Exclude unwanted mem ranges */
366         ret = elf_header_exclude_ranges(ced, start, end);
367         if (ret)
368                 return ret;
369
370         /* Go through all the ranges in ced->mem.ranges[] and prepare phdr */
371         cmem = &ced->mem;
372
373         for (i = 0; i < cmem->nr_ranges; i++) {
374                 mstart = cmem->ranges[i].start;
375                 mend = cmem->ranges[i].end;
376
377                 phdr = ced->bufp;
378                 ced->bufp += sizeof(Elf64_Phdr);
379
380                 phdr->p_type = PT_LOAD;
381                 phdr->p_flags = PF_R|PF_W|PF_X;
382                 phdr->p_offset  = mstart;
383
384                 /*
385                  * If a range matches backup region, adjust offset to backup
386                  * segment.
387                  */
388                 if (mstart == image->arch.backup_src_start &&
389                     (mend - mstart + 1) == image->arch.backup_src_sz)
390                         phdr->p_offset = image->arch.backup_load_addr;
391
392                 phdr->p_paddr = mstart;
393                 phdr->p_vaddr = (unsigned long long) __va(mstart);
394                 phdr->p_filesz = phdr->p_memsz = mend - mstart + 1;
395                 phdr->p_align = 0;
396                 ehdr->e_phnum++;
397                 pr_debug("Crash PT_LOAD elf header. phdr=%p vaddr=0x%llx, paddr=0x%llx, sz=0x%llx e_phnum=%d p_offset=0x%llx\n",
398                         phdr, phdr->p_vaddr, phdr->p_paddr, phdr->p_filesz,
399                         ehdr->e_phnum, phdr->p_offset);
400         }
401
402         return ret;
403 }
404
405 static int prepare_elf64_headers(struct crash_elf_data *ced,
406                 void **addr, unsigned long *sz)
407 {
408         Elf64_Ehdr *ehdr;
409         Elf64_Phdr *phdr;
410         unsigned long nr_cpus = num_possible_cpus(), nr_phdr, elf_sz;
411         unsigned char *buf, *bufp;
412         unsigned int cpu;
413         unsigned long long notes_addr;
414         int ret;
415
416         /* extra phdr for vmcoreinfo elf note */
417         nr_phdr = nr_cpus + 1;
418         nr_phdr += ced->max_nr_ranges;
419
420         /*
421          * kexec-tools creates an extra PT_LOAD phdr for kernel text mapping
422          * area on x86_64 (ffffffff80000000 - ffffffffa0000000).
423          * I think this is required by tools like gdb. So same physical
424          * memory will be mapped in two elf headers. One will contain kernel
425          * text virtual addresses and other will have __va(physical) addresses.
426          */
427
428         nr_phdr++;
429         elf_sz = sizeof(Elf64_Ehdr) + nr_phdr * sizeof(Elf64_Phdr);
430         elf_sz = ALIGN(elf_sz, ELF_CORE_HEADER_ALIGN);
431
432         buf = vzalloc(elf_sz);
433         if (!buf)
434                 return -ENOMEM;
435
436         bufp = buf;
437         ehdr = (Elf64_Ehdr *)bufp;
438         bufp += sizeof(Elf64_Ehdr);
439         memcpy(ehdr->e_ident, ELFMAG, SELFMAG);
440         ehdr->e_ident[EI_CLASS] = ELFCLASS64;
441         ehdr->e_ident[EI_DATA] = ELFDATA2LSB;
442         ehdr->e_ident[EI_VERSION] = EV_CURRENT;
443         ehdr->e_ident[EI_OSABI] = ELF_OSABI;
444         memset(ehdr->e_ident + EI_PAD, 0, EI_NIDENT - EI_PAD);
445         ehdr->e_type = ET_CORE;
446         ehdr->e_machine = ELF_ARCH;
447         ehdr->e_version = EV_CURRENT;
448         ehdr->e_phoff = sizeof(Elf64_Ehdr);
449         ehdr->e_ehsize = sizeof(Elf64_Ehdr);
450         ehdr->e_phentsize = sizeof(Elf64_Phdr);
451
452         /* Prepare one phdr of type PT_NOTE for each present cpu */
453         for_each_present_cpu(cpu) {
454                 phdr = (Elf64_Phdr *)bufp;
455                 bufp += sizeof(Elf64_Phdr);
456                 phdr->p_type = PT_NOTE;
457                 notes_addr = per_cpu_ptr_to_phys(per_cpu_ptr(crash_notes, cpu));
458                 phdr->p_offset = phdr->p_paddr = notes_addr;
459                 phdr->p_filesz = phdr->p_memsz = sizeof(note_buf_t);
460                 (ehdr->e_phnum)++;
461         }
462
463         /* Prepare one PT_NOTE header for vmcoreinfo */
464         phdr = (Elf64_Phdr *)bufp;
465         bufp += sizeof(Elf64_Phdr);
466         phdr->p_type = PT_NOTE;
467         phdr->p_offset = phdr->p_paddr = paddr_vmcoreinfo_note();
468         phdr->p_filesz = phdr->p_memsz = sizeof(vmcoreinfo_note);
469         (ehdr->e_phnum)++;
470
471 #ifdef CONFIG_X86_64
472         /* Prepare PT_LOAD type program header for kernel text region */
473         phdr = (Elf64_Phdr *)bufp;
474         bufp += sizeof(Elf64_Phdr);
475         phdr->p_type = PT_LOAD;
476         phdr->p_flags = PF_R|PF_W|PF_X;
477         phdr->p_vaddr = (Elf64_Addr)_text;
478         phdr->p_filesz = phdr->p_memsz = _end - _text;
479         phdr->p_offset = phdr->p_paddr = __pa_symbol(_text);
480         (ehdr->e_phnum)++;
481 #endif
482
483         /* Prepare PT_LOAD headers for system ram chunks. */
484         ced->ehdr = ehdr;
485         ced->bufp = bufp;
486         ret = walk_system_ram_res(0, -1, ced,
487                         prepare_elf64_ram_headers_callback);
488         if (ret < 0)
489                 return ret;
490
491         *addr = buf;
492         *sz = elf_sz;
493         return 0;
494 }
495
496 /* Prepare elf headers. Return addr and size */
497 static int prepare_elf_headers(struct kimage *image, void **addr,
498                                         unsigned long *sz)
499 {
500         struct crash_elf_data *ced;
501         int ret;
502
503         ced = kzalloc(sizeof(*ced), GFP_KERNEL);
504         if (!ced)
505                 return -ENOMEM;
506
507         fill_up_crash_elf_data(ced, image);
508
509         /* By default prepare 64bit headers */
510         ret =  prepare_elf64_headers(ced, addr, sz);
511         kfree(ced);
512         return ret;
513 }
514
515 static int add_e820_entry(struct boot_params *params, struct e820entry *entry)
516 {
517         unsigned int nr_e820_entries;
518
519         nr_e820_entries = params->e820_entries;
520         if (nr_e820_entries >= E820MAX)
521                 return 1;
522
523         memcpy(&params->e820_map[nr_e820_entries], entry,
524                         sizeof(struct e820entry));
525         params->e820_entries++;
526         return 0;
527 }
528
529 static int memmap_entry_callback(u64 start, u64 end, void *arg)
530 {
531         struct crash_memmap_data *cmd = arg;
532         struct boot_params *params = cmd->params;
533         struct e820entry ei;
534
535         ei.addr = start;
536         ei.size = end - start + 1;
537         ei.type = cmd->type;
538         add_e820_entry(params, &ei);
539
540         return 0;
541 }
542
543 static int memmap_exclude_ranges(struct kimage *image, struct crash_mem *cmem,
544                                  unsigned long long mstart,
545                                  unsigned long long mend)
546 {
547         unsigned long start, end;
548         int ret = 0;
549
550         cmem->ranges[0].start = mstart;
551         cmem->ranges[0].end = mend;
552         cmem->nr_ranges = 1;
553
554         /* Exclude Backup region */
555         start = image->arch.backup_load_addr;
556         end = start + image->arch.backup_src_sz - 1;
557         ret = exclude_mem_range(cmem, start, end);
558         if (ret)
559                 return ret;
560
561         /* Exclude elf header region */
562         start = image->arch.elf_load_addr;
563         end = start + image->arch.elf_headers_sz - 1;
564         return exclude_mem_range(cmem, start, end);
565 }
566
567 /* Prepare memory map for crash dump kernel */
568 int crash_setup_memmap_entries(struct kimage *image, struct boot_params *params)
569 {
570         int i, ret = 0;
571         unsigned long flags;
572         struct e820entry ei;
573         struct crash_memmap_data cmd;
574         struct crash_mem *cmem;
575
576         cmem = vzalloc(struct_size(cmem, ranges, 1));
577         if (!cmem)
578                 return -ENOMEM;
579
580         memset(&cmd, 0, sizeof(struct crash_memmap_data));
581         cmd.params = params;
582
583         /* Add first 640K segment */
584         ei.addr = image->arch.backup_src_start;
585         ei.size = image->arch.backup_src_sz;
586         ei.type = E820_RAM;
587         add_e820_entry(params, &ei);
588
589         /* Add ACPI tables */
590         cmd.type = E820_ACPI;
591         flags = IORESOURCE_MEM | IORESOURCE_BUSY;
592         walk_iomem_res("ACPI Tables", flags, 0, -1, &cmd,
593                        memmap_entry_callback);
594
595         /* Add ACPI Non-volatile Storage */
596         cmd.type = E820_NVS;
597         walk_iomem_res("ACPI Non-volatile Storage", flags, 0, -1, &cmd,
598                         memmap_entry_callback);
599
600         /* Add crashk_low_res region */
601         if (crashk_low_res.end) {
602                 ei.addr = crashk_low_res.start;
603                 ei.size = crashk_low_res.end - crashk_low_res.start + 1;
604                 ei.type = E820_RAM;
605                 add_e820_entry(params, &ei);
606         }
607
608         /* Exclude some ranges from crashk_res and add rest to memmap */
609         ret = memmap_exclude_ranges(image, cmem, crashk_res.start,
610                                                 crashk_res.end);
611         if (ret)
612                 goto out;
613
614         for (i = 0; i < cmem->nr_ranges; i++) {
615                 ei.size = cmem->ranges[i].end - cmem->ranges[i].start + 1;
616
617                 /* If entry is less than a page, skip it */
618                 if (ei.size < PAGE_SIZE)
619                         continue;
620                 ei.addr = cmem->ranges[i].start;
621                 ei.type = E820_RAM;
622                 add_e820_entry(params, &ei);
623         }
624
625 out:
626         vfree(cmem);
627         return ret;
628 }
629
630 static int determine_backup_region(u64 start, u64 end, void *arg)
631 {
632         struct kimage *image = arg;
633
634         image->arch.backup_src_start = start;
635         image->arch.backup_src_sz = end - start + 1;
636
637         /* Expecting only one range for backup region */
638         return 1;
639 }
640
641 int crash_load_segments(struct kimage *image)
642 {
643         unsigned long src_start, src_sz, elf_sz;
644         void *elf_addr;
645         int ret;
646
647         /*
648          * Determine and load a segment for backup area. First 640K RAM
649          * region is backup source
650          */
651
652         ret = walk_system_ram_res(KEXEC_BACKUP_SRC_START, KEXEC_BACKUP_SRC_END,
653                                 image, determine_backup_region);
654
655         /* Zero or postive return values are ok */
656         if (ret < 0)
657                 return ret;
658
659         src_start = image->arch.backup_src_start;
660         src_sz = image->arch.backup_src_sz;
661
662         /* Add backup segment. */
663         if (src_sz) {
664                 /*
665                  * Ideally there is no source for backup segment. This is
666                  * copied in purgatory after crash. Just add a zero filled
667                  * segment for now to make sure checksum logic works fine.
668                  */
669                 ret = kexec_add_buffer(image, (char *)&crash_zero_bytes,
670                                        sizeof(crash_zero_bytes), src_sz,
671                                        PAGE_SIZE, 0, -1, 0,
672                                        &image->arch.backup_load_addr);
673                 if (ret)
674                         return ret;
675                 pr_debug("Loaded backup region at 0x%lx backup_start=0x%lx memsz=0x%lx\n",
676                          image->arch.backup_load_addr, src_start, src_sz);
677         }
678
679         /* Prepare elf headers and add a segment */
680         ret = prepare_elf_headers(image, &elf_addr, &elf_sz);
681         if (ret)
682                 return ret;
683
684         image->arch.elf_headers = elf_addr;
685         image->arch.elf_headers_sz = elf_sz;
686
687         ret = kexec_add_buffer(image, (char *)elf_addr, elf_sz, elf_sz,
688                         ELF_CORE_HEADER_ALIGN, 0, -1, 0,
689                         &image->arch.elf_load_addr);
690         if (ret) {
691                 vfree((void *)image->arch.elf_headers);
692                 return ret;
693         }
694         pr_debug("Loaded ELF headers at 0x%lx bufsz=0x%lx memsz=0x%lx\n",
695                  image->arch.elf_load_addr, elf_sz, elf_sz);
696
697         return ret;
698 }
699 #endif /* CONFIG_KEXEC_FILE */