Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package makedumpfile for openSUSE:Factory checked in at 2024-05-16 17:13:35 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/makedumpfile (Old) and /work/SRC/openSUSE:Factory/.makedumpfile.new.1880 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "makedumpfile" Thu May 16 17:13:35 2024 rev:92 rq:1174380 version:1.7.5 Changes: -------- --- /work/SRC/openSUSE:Factory/makedumpfile/makedumpfile.changes 2023-11-16 20:27:24.325811660 +0100 +++ /work/SRC/openSUSE:Factory/.makedumpfile.new.1880/makedumpfile.changes 2024-05-16 17:15:09.107871109 +0200 @@ -1,0 +2,15 @@ +Tue May 14 07:21:57 UTC 2024 - ming li <m...@suse.com> + +- Update to 1.7.5: + * Support for kernels up to v6.8 (x86_64) + * Support for printk caller_id by --dump-dmesg option + * [PATCH] ppc64: get vmalloc start address from vmcoreinfo + * [PATCH] ppc64: read cur_mmu_type from vmcoreinfo + * [PATCH] add PRINTK_CALLER id support to --dump-dmesg option + * [PATCH v2 2/2] s390x: uncouple virtual and physical address spaces + * [PATCH 1/2] s390x: fix virtual vs physical address confusion + + Regenerated the content of the makedumpfile-ppc64-VA-range-SUSE.patch + file based on version 1.7.5 of the code + +------------------------------------------------------------------- Old: ---- makedumpfile-1.7.4.tar.gz New: ---- makedumpfile-1.7.5.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ makedumpfile.spec ++++++ --- /var/tmp/diff_new_pack.QoFAQB/_old 2024-05-16 17:15:10.319915038 +0200 +++ /var/tmp/diff_new_pack.QoFAQB/_new 2024-05-16 17:15:10.319915038 +0200 @@ -1,7 +1,7 @@ # # spec file for package makedumpfile # -# Copyright (c) 2023 SUSE LLC +# Copyright (c) 2024 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -28,7 +28,7 @@ %endif Name: makedumpfile -Version: 1.7.4 +Version: 1.7.5 Release: 0 Summary: Partial kernel dump License: GPL-2.0-only @@ -71,6 +71,8 @@ %autosetup -p1 %endif +%check + %build export CFLAGS="%{optflags} -fcommon" export USESNAPPY=on ++++++ makedumpfile-1.7.4.tar.gz -> makedumpfile-1.7.5.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/makedumpfile-1.7.4/Makefile new/makedumpfile-1.7.5/Makefile --- old/makedumpfile-1.7.4/Makefile 2023-11-06 01:25:04.000000000 +0100 +++ new/makedumpfile-1.7.5/Makefile 2024-04-12 07:09:09.000000000 +0200 @@ -1,7 +1,7 @@ # makedumpfile -VERSION=1.7.4 -DATE=6 Nov 2023 +VERSION=1.7.5 +DATE=12 Apr 2024 # Honour the environment variable CC ifeq ($(strip $CC),) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/makedumpfile-1.7.4/README new/makedumpfile-1.7.5/README --- old/makedumpfile-1.7.4/README 2023-11-06 01:25:04.000000000 +0100 +++ new/makedumpfile-1.7.5/README 2024-04-12 07:09:09.000000000 +0200 @@ -172,6 +172,8 @@ 6.4 | | ** | | | | ** | | -- | | OK | | | 6.5 | | ** | | | | ** | | -- | | OK | | | 6.6 | | ** | | | | ** | | -- | | OK | | | + 6.7 | | ** | | | | ** | | -- | | OK | | | + 6.8 | | ** | | | | ** | | -- | | OK | | | OK : Support. -- : Not support. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/makedumpfile-1.7.4/arch/ppc64.c new/makedumpfile-1.7.5/arch/ppc64.c --- old/makedumpfile-1.7.4/arch/ppc64.c 2023-11-06 01:25:04.000000000 +0100 +++ new/makedumpfile-1.7.5/arch/ppc64.c 2024-04-12 07:09:09.000000000 +0200 @@ -250,7 +250,7 @@ /* * 64K pagesize */ - if (info->cur_mmu_type & RADIX_MMU) { + if (info->cur_mmu_type & MMU_TYPE_RADIX) { info->l1_index_size = PTE_INDEX_SIZE_RADIX_64K; info->l2_index_size = PMD_INDEX_SIZE_RADIX_64K; info->l3_index_size = PUD_INDEX_SIZE_RADIX_64K; @@ -300,7 +300,7 @@ /* * 4K pagesize */ - if (info->cur_mmu_type & RADIX_MMU) { + if (info->cur_mmu_type & MMU_TYPE_RADIX) { info->l1_index_size = PTE_INDEX_SIZE_RADIX_4K; info->l2_index_size = PMD_INDEX_SIZE_RADIX_4K; info->l3_index_size = PUD_INDEX_SIZE_RADIX_4K; @@ -568,7 +568,9 @@ /* * Get vmalloc_start value from either vmap_area_list or vmlist. */ - if ((SYMBOL(vmap_area_list) != NOT_FOUND_SYMBOL) + if (NUMBER(vmalloc_start) != NOT_FOUND_NUMBER) { + vmalloc_start = NUMBER(vmalloc_start); + } else if ((SYMBOL(vmap_area_list) != NOT_FOUND_SYMBOL) && (OFFSET(vmap_area.va_start) != NOT_FOUND_STRUCTURE) && (OFFSET(vmap_area.list) != NOT_FOUND_STRUCTURE)) { if (!readmem(VADDR, SYMBOL(vmap_area_list) + OFFSET(list_head.next), @@ -635,14 +637,19 @@ * On PowerISA 3.0 based server processors, a kernel can run with * radix MMU or standard MMU. Get the current MMU type. */ - info->cur_mmu_type = STD_MMU; - if ((SYMBOL(cur_cpu_spec) != NOT_FOUND_SYMBOL) + info->cur_mmu_type = MMU_TYPE_STD; + + if (NUMBER(RADIX_MMU) != NOT_FOUND_SYMBOL) { + if (NUMBER(RADIX_MMU) == 1) { + info->cur_mmu_type = MMU_TYPE_RADIX; + } + } else if ((SYMBOL(cur_cpu_spec) != NOT_FOUND_SYMBOL) && (OFFSET(cpu_spec.mmu_features) != NOT_FOUND_STRUCTURE)) { if (readmem(VADDR, SYMBOL(cur_cpu_spec), &cur_cpu_spec, sizeof(cur_cpu_spec))) { if (readmem(VADDR, cur_cpu_spec + OFFSET(cpu_spec.mmu_features), &mmu_features, sizeof(mmu_features))) - info->cur_mmu_type = mmu_features & RADIX_MMU; + info->cur_mmu_type = mmu_features & MMU_TYPE_RADIX; } } @@ -684,11 +691,16 @@ if ((SYMBOL(vmap_area_list) == NOT_FOUND_SYMBOL) || (OFFSET(vmap_area.va_start) == NOT_FOUND_STRUCTURE) || (OFFSET(vmap_area.list) == NOT_FOUND_STRUCTURE)) { - if ((SYMBOL(vmlist) == NOT_FOUND_SYMBOL) - || (OFFSET(vm_struct.addr) == NOT_FOUND_STRUCTURE)) { - ERRMSG("Can't get info for vmalloc translation.\n"); - return NOT_PADDR; - } + /* + * Don't depend on vmap_area_list/vmlist if vmalloc_start is set in + * vmcoreinfo, in that case proceed without error + */ + if (NUMBER(vmalloc_start) == NOT_FOUND_NUMBER) + if ((SYMBOL(vmlist) == NOT_FOUND_SYMBOL) + || (OFFSET(vm_struct.addr) == NOT_FOUND_STRUCTURE)) { + ERRMSG("Can't get info for vmalloc translation.\n"); + return NOT_PADDR; + } } return ppc64_vtop_level4(vaddr); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/makedumpfile-1.7.4/arch/s390x.c new/makedumpfile-1.7.5/arch/s390x.c --- old/makedumpfile-1.7.4/arch/s390x.c 2023-11-06 01:25:04.000000000 +0100 +++ new/makedumpfile-1.7.5/arch/s390x.c 2024-04-12 07:09:09.000000000 +0200 @@ -59,6 +59,69 @@ #define rsg_offset(x, y) (rsg_index( x, y) * sizeof(unsigned long)) #define pte_offset(x) (pte_index(x) * sizeof(unsigned long)) +#define LOWCORE_SIZE 0x2000 + +#define OS_INFO_VERSION_MAJOR 1 +#define OS_INFO_VERSION_MINOR 1 + +#define OS_INFO_VMCOREINFO 0 +#define OS_INFO_REIPL_BLOCK 1 +#define OS_INFO_FLAGS_ENTRY 2 +#define OS_INFO_RESERVED 3 +#define OS_INFO_IDENTITY_BASE 4 +#define OS_INFO_KASLR_OFFSET 5 +#define OS_INFO_KASLR_OFF_PHYS 6 +#define OS_INFO_VMEMMAP 7 +#define OS_INFO_AMODE31_START 8 +#define OS_INFO_AMODE31_END 9 + +struct os_info_entry { + union { + uint64_t addr; + uint64_t val; + }; + uint64_t size; + uint32_t csum; +} __attribute__((packed)); + +struct os_info { + uint64_t magic; + uint32_t csum; + uint16_t version_major; + uint16_t version_minor; + uint64_t crashkernel_addr; + uint64_t crashkernel_size; + struct os_info_entry entry[10]; + uint8_t reserved[3864]; +} __attribute__((packed)); + +#define S390X_LC_OS_INFO 0x0e18 + +struct s390_ops { + unsigned long long (*virt_to_phys)(unsigned long vaddr); + unsigned long (*phys_to_virt)(unsigned long long paddr); +}; + +static unsigned long long vaddr_to_paddr_s390x_legacy(unsigned long vaddr); +static unsigned long long vaddr_to_paddr_s390x_vr(unsigned long vaddr); +static unsigned long paddr_to_vaddr_s390x_legacy(unsigned long long paddr); +static unsigned long paddr_to_vaddr_s390x_vr(unsigned long long paddr); + +struct s390_ops s390_ops = { + .virt_to_phys = vaddr_to_paddr_s390x_legacy, + .phys_to_virt = paddr_to_vaddr_s390x_legacy, +}; + +unsigned long long vaddr_to_paddr_s390x(unsigned long vaddr) +{ + return s390_ops.virt_to_phys(vaddr); +} + +unsigned long paddr_to_vaddr_s390x(unsigned long long paddr) +{ + return s390_ops.phys_to_virt(paddr); +} + int set_s390x_max_physmem_bits(void) { @@ -88,12 +151,53 @@ return FALSE; } +static int s390x_init_vm(void) +{ + struct os_info os_info; + ulong addr; + + if (!readmem(PADDR, S390X_LC_OS_INFO, &addr, + sizeof(addr)) || !addr) { + ERRMSG("Can't get s390x os_info ptr.\n"); + return FALSE; + } + + if (addr == 0) + return TRUE; + + if (!readmem(PADDR, addr, &os_info, offsetof(struct os_info, reserved))) { + ERRMSG("Can't get os_info header.\n"); + return FALSE; + } + + if (!os_info.entry[OS_INFO_KASLR_OFFSET].val) + return TRUE; + + MSG("The -vr kernel detected.\n"); + + info->identity_map_base = os_info.entry[OS_INFO_IDENTITY_BASE].val; + info->kvbase = os_info.entry[OS_INFO_KASLR_OFFSET].val; + info->__kaslr_offset_phys = os_info.entry[OS_INFO_KASLR_OFF_PHYS].val; + info->vmemmap_start = os_info.entry[OS_INFO_VMEMMAP].val; + info->amode31_start = os_info.entry[OS_INFO_AMODE31_START].val; + info->amode31_end = os_info.entry[OS_INFO_AMODE31_END].val; + + s390_ops.virt_to_phys = vaddr_to_paddr_s390x_vr; + s390_ops.phys_to_virt = paddr_to_vaddr_s390x_vr; + + return TRUE; +} + + int get_machdep_info_s390x(void) { unsigned long vmalloc_start; char *term_str = getenv("TERM"); + if (!s390x_init_vm()) + return FALSE; + if (term_str && strcmp(term_str, "dumb") == 0) /* '\r' control character is ignored on "dumb" terminal. */ flag_ignore_r_char = 1; @@ -167,7 +271,7 @@ return 0; } - if (!readmem(VADDR, table + offset, &entry, sizeof(entry))) { + if (!readmem(PADDR, table + offset, &entry, sizeof(entry))) { if (level) ERRMSG("Can't read region table %d entry\n", level); else @@ -201,7 +305,7 @@ unsigned long offset, entry; offset = pte_offset(vaddr); - readmem(VADDR, table + offset, &entry, sizeof(entry)); + readmem(PADDR, table + offset, &entry, sizeof(entry)); /* * Check if the page table entry could be read and doesn't have * the reserved bit set. @@ -227,17 +331,22 @@ vtop_s390x(unsigned long vaddr) { unsigned long long paddr = NOT_PADDR; + unsigned long long swapper_pg_dir; unsigned long table, entry; int level, len; - if (SYMBOL(swapper_pg_dir) == NOT_FOUND_SYMBOL) { + swapper_pg_dir = SYMBOL(swapper_pg_dir); + if (swapper_pg_dir == NOT_FOUND_SYMBOL) { ERRMSG("Can't get the symbol of swapper_pg_dir.\n"); return NOT_PADDR; } - table = SYMBOL(swapper_pg_dir); + table = vaddr_to_paddr(swapper_pg_dir); /* Read the first entry to find the number of page table levels. */ - readmem(VADDR, table, &entry, sizeof(entry)); + if (!readmem(PADDR, table, &entry, sizeof(entry))) { + ERRMSG("Can't read swapper_pg_dir entry.\n"); + return NOT_PADDR; + } level = TABLE_LEVEL(entry); len = TABLE_LENGTH(entry); @@ -290,8 +399,8 @@ return paddr; } -unsigned long long -vaddr_to_paddr_s390x(unsigned long vaddr) +static unsigned long long +vaddr_to_paddr_s390x_legacy(unsigned long vaddr) { unsigned long long paddr; @@ -315,6 +424,32 @@ return paddr; } +static unsigned long long +vaddr_to_paddr_s390x_vr(unsigned long vaddr) +{ + if (vaddr < LOWCORE_SIZE) + return vaddr; + if ((vaddr < info->amode31_end) && (vaddr >= info->amode31_start)) + return vaddr; + if (vaddr < info->vmemmap_start) + return vaddr - info->identity_map_base; + if (vaddr >= info->kvbase) + return vaddr - info->kvbase + info->__kaslr_offset_phys; + return vtop_s390x(vaddr); +} + +unsigned long +paddr_to_vaddr_s390x_legacy(unsigned long long paddr) +{ + return (unsigned long)paddr_to_vaddr_general(paddr); +} + +unsigned long +paddr_to_vaddr_s390x_vr(unsigned long long paddr) +{ + return info->identity_map_base + (unsigned long)paddr; +} + struct addr_check { unsigned long addr; int found; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/makedumpfile-1.7.4/makedumpfile.c new/makedumpfile-1.7.5/makedumpfile.c --- old/makedumpfile-1.7.4/makedumpfile.c 2023-11-06 01:25:04.000000000 +0100 +++ new/makedumpfile-1.7.5/makedumpfile.c 2024-04-12 07:09:09.000000000 +0200 @@ -2118,6 +2118,7 @@ SIZE_INIT(printk_info, "printk_info"); OFFSET_INIT(printk_info.ts_nsec, "printk_info", "ts_nsec"); OFFSET_INIT(printk_info.text_len, "printk_info", "text_len"); + OFFSET_INIT(printk_info.caller_id, "printk_info", "caller_id"); OFFSET_INIT(atomic_long_t.counter, "atomic_long_t", "counter"); @@ -2133,6 +2134,7 @@ OFFSET_INIT(printk_log.ts_nsec, "printk_log", "ts_nsec"); OFFSET_INIT(printk_log.len, "printk_log", "len"); OFFSET_INIT(printk_log.text_len, "printk_log", "text_len"); + OFFSET_INIT(printk_log.caller_id, "printk_log", "caller_id"); } else { info->flag_use_printk_ringbuffer = FALSE; info->flag_use_printk_log = FALSE; @@ -2462,6 +2464,7 @@ WRITE_MEMBER_OFFSET("printk_info.ts_nsec", printk_info.ts_nsec); WRITE_MEMBER_OFFSET("printk_info.text_len", printk_info.text_len); + WRITE_MEMBER_OFFSET("printk_info.caller_id", printk_info.caller_id); WRITE_MEMBER_OFFSET("atomic_long_t.counter", atomic_long_t.counter); @@ -2470,6 +2473,7 @@ WRITE_MEMBER_OFFSET("printk_log.ts_nsec", printk_log.ts_nsec); WRITE_MEMBER_OFFSET("printk_log.len", printk_log.len); WRITE_MEMBER_OFFSET("printk_log.text_len", printk_log.text_len); + WRITE_MEMBER_OFFSET("printk_log.caller_id", printk_log.caller_id); } else { /* Compatibility with pre-3.11-rc4 */ WRITE_MEMBER_OFFSET("log.ts_nsec", printk_log.ts_nsec); @@ -2921,6 +2925,7 @@ READ_STRUCTURE_SIZE("printk_info", printk_info); READ_MEMBER_OFFSET("printk_info.ts_nsec", printk_info.ts_nsec); READ_MEMBER_OFFSET("printk_info.text_len", printk_info.text_len); + READ_MEMBER_OFFSET("printk_info.caller_id", printk_info.caller_id); READ_MEMBER_OFFSET("atomic_long_t.counter", atomic_long_t.counter); @@ -2932,6 +2937,7 @@ READ_MEMBER_OFFSET("printk_log.ts_nsec", printk_log.ts_nsec); READ_MEMBER_OFFSET("printk_log.len", printk_log.len); READ_MEMBER_OFFSET("printk_log.text_len", printk_log.text_len); + READ_MEMBER_OFFSET("printk_log.caller_id", printk_log.caller_id); } else { info->flag_use_printk_ringbuffer = FALSE; info->flag_use_printk_log = FALSE; @@ -2972,6 +2978,8 @@ READ_NUMBER("PAGE_OFFLINE_MAPCOUNT_VALUE", PAGE_OFFLINE_MAPCOUNT_VALUE); READ_NUMBER("phys_base", phys_base); READ_NUMBER("KERNEL_IMAGE_SIZE", KERNEL_IMAGE_SIZE); + + READ_NUMBER_UNSIGNED("VMALLOC_START", vmalloc_start); #ifdef __aarch64__ READ_NUMBER("VA_BITS", VA_BITS); READ_NUMBER("TCR_EL1_T1SZ", TCR_EL1_T1SZ); @@ -2983,7 +2991,6 @@ READ_NUMBER("VA_BITS", va_bits); READ_NUMBER_UNSIGNED("phys_ram_base", phys_ram_base); READ_NUMBER_UNSIGNED("PAGE_OFFSET", page_offset); - READ_NUMBER_UNSIGNED("VMALLOC_START", vmalloc_start); READ_NUMBER_UNSIGNED("VMALLOC_END", vmalloc_end); READ_NUMBER_UNSIGNED("VMEMMAP_START", vmemmap_start); READ_NUMBER_UNSIGNED("VMEMMAP_END", vmemmap_end); @@ -2994,6 +3001,7 @@ #endif READ_NUMBER("HUGETLB_PAGE_DTOR", HUGETLB_PAGE_DTOR); + READ_NUMBER("RADIX_MMU", RADIX_MMU); return TRUE; } @@ -5604,6 +5612,18 @@ bufp = buf; bufp += sprintf(buf, "[%5lld.%06ld] ", nanos, rem/1000); + + if (OFFSET(printk_log.caller_id) != NOT_FOUND_STRUCTURE) { + const unsigned int cpuid = 0x80000000; + char cidbuf[PID_CHARS_MAX]; + unsigned int cid; + + /* Get id type, isolate id value in cid for print */ + cid = UINT(logptr + OFFSET(printk_log.caller_id)); + sprintf(cidbuf, "%c%u", (cid & cpuid) ? 'C' : 'T', cid & ~cpuid); + bufp += sprintf(bufp, "[%*s] ", PID_CHARS_DEFAULT, cidbuf); + } + indent_len = strlen(buf); /* How much buffer space is needed in the worst case */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/makedumpfile-1.7.4/makedumpfile.h new/makedumpfile-1.7.5/makedumpfile.h --- old/makedumpfile-1.7.4/makedumpfile.h 2023-11-06 01:25:04.000000000 +0100 +++ new/makedumpfile-1.7.5/makedumpfile.h 2024-04-12 07:09:09.000000000 +0200 @@ -498,7 +498,13 @@ #define KVER_MIN_SHIFT 16 #define KERNEL_VERSION(x,y,z) (((x) << KVER_MAJ_SHIFT) | ((y) << KVER_MIN_SHIFT) | (z)) #define OLDEST_VERSION KERNEL_VERSION(2, 6, 15) /* linux-2.6.15 */ -#define LATEST_VERSION KERNEL_VERSION(6, 6, 0) /* linux-6.6.0 */ +#define LATEST_VERSION KERNEL_VERSION(6, 8, 4) /* linux-6.8.4 */ + +/* + * for printk caller_id support + */ +#define PID_CHARS_MAX 16 /* Max Number of PID characters */ +#define PID_CHARS_DEFAULT 8 /* Default number of PID characters */ /* * vmcoreinfo in /proc/vmcore @@ -535,8 +541,6 @@ * The value of dependence on machine */ #define PAGE_OFFSET (info->page_offset) -#define VMALLOC_START (info->vmalloc_start) -#define VMALLOC_END (info->vmalloc_end) #define VMEMMAP_START (info->vmemmap_start) #define VMEMMAP_END (info->vmemmap_end) #define PMASK (0x7ffffffffffff000UL) @@ -747,12 +751,13 @@ /* * Supported MMU types */ -#define STD_MMU 0x0 +#define MMU_TYPE_STD 0x0 /* * The flag bit for radix MMU in cpu_spec.mmu_features - * in the kernel. Use the same flag here. + * in the kernel (MMU_FTR_TYPE_RADIX). + * Use the same flag here. */ -#define RADIX_MMU 0x40 +#define MMU_TYPE_RADIX 0x40 #define PGD_MASK_L4 \ @@ -1235,6 +1240,7 @@ #ifdef __s390x__ /* s390x */ int get_machdep_info_s390x(void); unsigned long long vaddr_to_paddr_s390x(unsigned long vaddr); +unsigned long paddr_to_vaddr_s390x(unsigned long long paddr); int is_iomem_phys_addr_s390x(unsigned long addr); #define find_vmemmap() stub_false() #define get_phys_base() stub_true() @@ -1242,7 +1248,7 @@ #define get_versiondep_info() stub_true() #define get_kaslr_offset(X) get_kaslr_offset_general(X) #define vaddr_to_paddr(X) vaddr_to_paddr_s390x(X) -#define paddr_to_vaddr(X) paddr_to_vaddr_general(X) +#define paddr_to_vaddr(X) paddr_to_vaddr_s390x(X) #define is_phys_addr(X) is_iomem_phys_addr_s390x(X) #define arch_crashkernel_mem_size() stub_false() #endif /* s390x */ @@ -1760,6 +1766,14 @@ pthread_mutex_t current_pfn_mutex; pthread_mutex_t page_data_mutex; pthread_mutex_t filter_mutex; + +#ifdef __s390x__ /* s390x */ + unsigned long identity_map_base; + unsigned long kvbase; + unsigned long __kaslr_offset_phys; + unsigned long amode31_start; + unsigned long amode31_end; +#endif }; extern struct DumpInfo *info; @@ -2107,10 +2121,17 @@ long p_memsz; } elf64_phdr; + /* + * The caller_id was added by the Linux 5.1 Kernel to hold + * the Thread id or CPU id of the caller adding a printk + * dmesg to the ring buffer. As such older versions of the + * kernel can ignore this field as it won't be filled in. + */ struct printk_log_s { long ts_nsec; long len; long text_len; + long caller_id; } printk_log; /* @@ -2240,6 +2261,9 @@ long HUGETLB_PAGE_DTOR; long phys_base; long KERNEL_IMAGE_SIZE; + + unsigned long vmalloc_start; + #ifdef __aarch64__ long VA_BITS; long TCR_EL1_T1SZ; @@ -2250,7 +2274,6 @@ long va_bits; unsigned long phys_ram_base; unsigned long page_offset; - unsigned long vmalloc_start; unsigned long vmalloc_end; unsigned long vmemmap_start; unsigned long vmemmap_end; @@ -2259,6 +2282,8 @@ unsigned long kernel_link_addr; unsigned long va_kernel_pa_offset; #endif + + unsigned long RADIX_MMU; }; struct srcfile_table { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/makedumpfile-1.7.4/makedumpfile.spec new/makedumpfile-1.7.5/makedumpfile.spec --- old/makedumpfile-1.7.4/makedumpfile.spec 2023-11-06 01:25:04.000000000 +0100 +++ new/makedumpfile-1.7.5/makedumpfile.spec 2024-04-12 07:09:09.000000000 +0200 @@ -1,6 +1,6 @@ Name: makedumpfile Summary: makedumpfile package -Version: 1.7.4 +Version: 1.7.5 Release: 1 Group: Applications/Text License: GPL diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/makedumpfile-1.7.4/printk.c new/makedumpfile-1.7.5/printk.c --- old/makedumpfile-1.7.4/printk.c 2023-11-06 01:25:04.000000000 +0100 +++ new/makedumpfile-1.7.5/printk.c 2024-04-12 07:09:09.000000000 +0200 @@ -114,6 +114,18 @@ bufp = buf; bufp += sprintf(buf, "[%5lld.%06ld] ", nanos, rem/1000); + + if (OFFSET(printk_info.caller_id) != NOT_FOUND_STRUCTURE) { + const unsigned int cpuid = 0x80000000; + char cidbuf[PID_CHARS_MAX]; + unsigned int cid; + + /* Get id type, isolate id value in cid for print */ + cid = UINT(inf + OFFSET(printk_info.caller_id)); + sprintf(cidbuf, "%c%u", (cid & cpuid) ? 'C' : 'T', cid & ~cpuid); + bufp += sprintf(bufp, "[%*s] ", PID_CHARS_DEFAULT, cidbuf); + } + indent_len = strlen(buf); /* How much buffer space is needed in the worst case */ ++++++ makedumpfile-ppc64-VA-range-SUSE.patch ++++++ --- /var/tmp/diff_new_pack.QoFAQB/_old 2024-05-16 17:15:10.427918952 +0200 +++ /var/tmp/diff_new_pack.QoFAQB/_new 2024-05-16 17:15:10.431919097 +0200 @@ -5,18 +5,10 @@ SLE 15 SP1 backported commit c2b4d8b7417a ("powerpc/mm/hash64: Increase the VA range"), to Linux 4.12, so let's check SUSE_PRODUCT_CODE. - -Signed-off-by: Petr Tesarik <ptesa...@suse.cz> ---- - arch/ppc64.c | 3 ++- - makedumpfile.c | 4 ++++ - makedumpfile.h | 3 +++ - 3 files changed, 9 insertions(+), 1 deletion(-) -Index: makedumpfile-1.7.1/arch/ppc64.c -=================================================================== ---- makedumpfile-1.7.1.orig/arch/ppc64.c -+++ makedumpfile-1.7.1/arch/ppc64.c -@@ -248,7 +248,9 @@ ppc64_vmalloc_init(void) +diff -uprN makedumpfile-1.7.5.orig/arch/ppc64.c makedumpfile-1.7.5/arch/ppc64.c +--- makedumpfile-1.7.5.orig/arch/ppc64.c 2024-04-12 13:09:09.000000000 +0800 ++++ makedumpfile-1.7.5/arch/ppc64.c 2024-05-16 14:19:46.846209221 +0800 +@@ -261,7 +261,9 @@ ppc64_vmalloc_init(void) if (info->kernel_version >= KERNEL_VERSION(4, 12, 0)) { info->l2_index_size = PMD_INDEX_SIZE_L4_64K_4_12; @@ -27,40 +19,36 @@ info->l3_index_size = PUD_INDEX_SIZE_L4_64K_4_17; else info->l3_index_size = PUD_INDEX_SIZE_L4_64K_4_12; -Index: makedumpfile-1.7.1/makedumpfile.c -=================================================================== ---- makedumpfile-1.7.1.orig/makedumpfile.c -+++ makedumpfile-1.7.1/makedumpfile.c -@@ -2491,6 +2491,8 @@ write_vmcoreinfo_data(void) +diff -uprN makedumpfile-1.7.5.orig/makedumpfile.c makedumpfile-1.7.5/makedumpfile.c +--- makedumpfile-1.7.5.orig/makedumpfile.c 2024-04-12 13:09:09.000000000 +0800 ++++ makedumpfile-1.7.5/makedumpfile.c 2024-05-16 14:16:42.897988141 +0800 +@@ -2531,6 +2531,7 @@ write_vmcoreinfo_data(void) + WRITE_NUMBER_UNSIGNED("PHYS_OFFSET", PHYS_OFFSET); WRITE_NUMBER_UNSIGNED("kimage_voffset", kimage_voffset); #endif ++ WRITE_NUMBER("SUSE_PRODUCT_CODE", SUSE_PRODUCT_CODE); -+ WRITE_NUMBER("SUSE_PRODUCT_CODE", SUSE_PRODUCT_CODE); -+ if (info->phys_base) fprintf(info->file_vmcoreinfo, "%s%lu\n", STR_NUMBER("phys_base"), - info->phys_base); -@@ -2939,6 +2941,8 @@ read_vmcoreinfo(void) +@@ -3002,6 +3003,7 @@ read_vmcoreinfo(void) READ_NUMBER("HUGETLB_PAGE_DTOR", HUGETLB_PAGE_DTOR); - + READ_NUMBER("RADIX_MMU", RADIX_MMU); + READ_NUMBER("SUSE_PRODUCT_CODE", SUSE_PRODUCT_CODE); -+ + return TRUE; } - -Index: makedumpfile-1.7.1/makedumpfile.h -=================================================================== ---- makedumpfile-1.7.1.orig/makedumpfile.h -+++ makedumpfile-1.7.1/makedumpfile.h -@@ -2069,6 +2069,9 @@ struct number_table { - unsigned long kernel_link_addr; +diff -uprN makedumpfile-1.7.5.orig/makedumpfile.h makedumpfile-1.7.5/makedumpfile.h +--- makedumpfile-1.7.5.orig/makedumpfile.h 2024-04-12 13:09:09.000000000 +0800 ++++ makedumpfile-1.7.5/makedumpfile.h 2024-05-16 14:18:08.275376258 +0800 +@@ -2283,6 +2283,9 @@ struct number_table { unsigned long va_kernel_pa_offset; #endif -+ + + /* Distro-specific */ + long SUSE_PRODUCT_CODE; ++ + unsigned long RADIX_MMU; }; - struct srcfile_table {