hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/arch/s390/kernel/crash_dump.c
....@@ -13,10 +13,9 @@
1313 #include <linux/mm.h>
1414 #include <linux/gfp.h>
1515 #include <linux/slab.h>
16
-#include <linux/bootmem.h>
16
+#include <linux/memblock.h>
1717 #include <linux/elf.h>
1818 #include <asm/asm-offsets.h>
19
-#include <linux/memblock.h>
2019 #include <asm/os_info.h>
2120 #include <asm/elf.h>
2221 #include <asm/ipl.h>
....@@ -45,7 +44,7 @@
4544 u64 fprs[16];
4645 u32 fpc;
4746 u32 prefix;
48
- u64 todpreg;
47
+ u32 todpreg;
4948 u64 timer;
5049 u64 todcmp;
5150 u64 vxrs_low[16];
....@@ -61,7 +60,10 @@
6160 {
6261 struct save_area *sa;
6362
64
- sa = (void *) memblock_alloc(sizeof(*sa), 8);
63
+ sa = (void *) memblock_phys_alloc(sizeof(*sa), 8);
64
+ if (!sa)
65
+ panic("Failed to allocate save area\n");
66
+
6567 if (is_boot_cpu)
6668 list_add(&sa->list, &dump_save_areas);
6769 else
....@@ -139,7 +141,7 @@
139141 while (count) {
140142 from = __pa(src);
141143 if (!OLDMEM_BASE && from < sclp.hsa_size) {
142
- /* Copy from zfcpdump HSA area */
144
+ /* Copy from zfcp/nvme dump HSA area */
143145 len = min(count, sclp.hsa_size - from);
144146 rc = memcpy_hsa_kernel(dst, from, len);
145147 if (rc)
....@@ -182,7 +184,7 @@
182184 while (count) {
183185 from = __pa(src);
184186 if (!OLDMEM_BASE && from < sclp.hsa_size) {
185
- /* Copy from zfcpdump HSA area */
187
+ /* Copy from zfcp/nvme dump HSA area */
186188 len = min(count, sclp.hsa_size - from);
187189 rc = memcpy_hsa_user(dst, from, len);
188190 if (rc)
....@@ -256,7 +258,7 @@
256258 }
257259
258260 /*
259
- * Remap "oldmem" for zfcpdump
261
+ * Remap "oldmem" for zfcp/nvme dump
260262 *
261263 * We only map available memory above HSA size. Memory below HSA size
262264 * is read on demand using the copy_oldmem_page() function.
....@@ -281,7 +283,7 @@
281283 }
282284
283285 /*
284
- * Remap "oldmem" for kdump or zfcpdump
286
+ * Remap "oldmem" for kdump or zfcp/nvme dump
285287 */
286288 int remap_oldmem_pfn_range(struct vm_area_struct *vma, unsigned long from,
287289 unsigned long pfn, unsigned long size, pgprot_t prot)
....@@ -430,7 +432,7 @@
430432 Elf64_Nhdr note;
431433 void *addr;
432434
433
- if (copy_oldmem_kernel(&addr, &S390_lowcore.vmcore_info, sizeof(addr)))
435
+ if (copy_oldmem_kernel(&addr, (void *)__LC_VMCORE_INFO, sizeof(addr)))
434436 return NULL;
435437 memset(nt_name, 0, sizeof(nt_name));
436438 if (copy_oldmem_kernel(&note, addr, sizeof(note)))
....@@ -547,8 +549,7 @@
547549 int cnt = 0;
548550 u64 idx;
549551
550
- for_each_mem_range(idx, &memblock.physmem, &oldmem_type, NUMA_NO_NODE,
551
- MEMBLOCK_NONE, NULL, NULL, NULL)
552
+ for_each_physmem_range(idx, &oldmem_type, NULL, NULL)
552553 cnt++;
553554 return cnt;
554555 }
....@@ -561,8 +562,7 @@
561562 phys_addr_t start, end;
562563 u64 idx;
563564
564
- for_each_mem_range(idx, &memblock.physmem, &oldmem_type, NUMA_NO_NODE,
565
- MEMBLOCK_NONE, &start, &end, NULL) {
565
+ for_each_physmem_range(idx, &oldmem_type, &start, &end) {
566566 phdr->p_filesz = end - start;
567567 phdr->p_type = PT_LOAD;
568568 phdr->p_offset = start;
....@@ -632,11 +632,11 @@
632632 u32 alloc_size;
633633 u64 hdr_off;
634634
635
- /* If we are not in kdump or zfcpdump mode return */
636
- if (!OLDMEM_BASE && ipl_info.type != IPL_TYPE_FCP_DUMP)
635
+ /* If we are not in kdump or zfcp/nvme dump mode return */
636
+ if (!OLDMEM_BASE && !is_ipl_type_dump())
637637 return 0;
638
- /* If we cannot get HSA size for zfcpdump return error */
639
- if (ipl_info.type == IPL_TYPE_FCP_DUMP && !sclp.hsa_size)
638
+ /* If we cannot get HSA size for zfcp/nvme dump return error */
639
+ if (is_ipl_type_dump() && !sclp.hsa_size)
640640 return -ENODEV;
641641
642642 /* For kdump, exclude previous crashkernel memory */