mirror of
https://github.com/ibm-s390-linux/s390-tools.git
synced 2026-08-05 02:14:52 +00:00
802c7db50e
Since V!=R kernel introduction, HSA memory can be contained in/spread over more than one ELF LOAD segment of /proc/vmcore simultaneously. Therefore, the old HSA release logic is no longer valid because it assumes that HSA memory is fully contained in exactly one ELF LOAD segment of /proc/vmcore. This resulted in zfcpdump releasing HSA memory too soon and by that making parts of /proc/vmcore which cover HSA memory unreadable by user space. To correct this problem on V!=R kernel, we need first to find all ELF LOAD segments containing HSA memory, write those /proc/vmcore parts first and only then release HSA memory. The new HSA release logic must be able to handle both V!=R and V==R kernels to be backwards compatible. ==================== Tests of V!=R kernel ==================== Output of test run (KASLR on) ============================= Writing dump: TRACE: Read: /sys/kernel/debug/zcore/hsa: TRACE: '2ffff000' TRACE: ELF LOAD segment: p_offset=0x0000000000009000 p_filesz=0x0000000001cb0000 p_paddr=0x00000002f1e30000 p_vaddr=0x000002c609044000 TRACE: ELF LOAD segment: p_offset=0x0000000001cb9000 p_filesz=0x0000000040000000 p_paddr=0x0000000000000000 p_vaddr=0x000001bd00000000 TRACE: ELF LOAD segment: p_offset=0x0000000041cb9000 p_filesz=0x0000000300000000 p_paddr=0x0000000100000000 p_vaddr=0x000001be00000000 TRACE: Write copy table entry 0: off=0x0000000001cb9000 size=0x000000002ffff000 hsa=1 TRACE: Write copy table entry 1: off=0x0000000000001000 size=0x0000000001cb8000 hsa=0 TRACE: Release HSA memory TRACE: Write copy table entry 2: off=0x0000000031cb8000 size=0x0000000310001000 hsa=0 TRACE: Write copy table entry 3: off=0x0000000000000000 size=0x0000000000001000 hsa=0 Dump successful Output of test run (KASLR off) ============================== Writing dump: TRACE: Read: /sys/kernel/debug/zcore/hsa: TRACE: '2ffff000' TRACE: ELF LOAD segment: p_offset=0x0000000000009000 p_filesz=0x0000000001cb0000 p_paddr=0x0000000000c21000 p_vaddr=0x000003ffe0000000 TRACE: ELF LOAD segment: p_offset=0x0000000001cb9000 p_filesz=0x0000000040000000 p_paddr=0x0000000000000000 p_vaddr=0x000002f200000000 TRACE: ELF LOAD segment: p_offset=0x0000000041cb9000 p_filesz=0x0000000300000000 p_paddr=0x0000000100000000 p_vaddr=0x000002f300000000 TRACE: Write copy table entry 0: off=0x0000000000009000 size=0x0000000001cb0000 hsa=1 TRACE: Write copy table entry 1: off=0x0000000001cb9000 size=0x000000002ffff000 hsa=1 TRACE: Write copy table entry 2: off=0x0000000000001000 size=0x0000000000008000 hsa=0 TRACE: Release HSA memory TRACE: Write copy table entry 3: off=0x0000000031cb8000 size=0x0000000310001000 hsa=0 TRACE: Write copy table entry 4: off=0x0000000000000000 size=0x0000000000001000 hsa=0 Dump successful ==================== Tests of V==R kernel ==================== Output of test run (KASLR on) ============================= Writing dump: TRACE: Read: /sys/kernel/debug/zcore/hsa: TRACE: '2ffff000' TRACE: ELF LOAD segment: p_offset=0x0000000000009000 p_filesz=0x0000000000000000 p_paddr=0x0000000000000000 p_vaddr=0x0000000000000000 TRACE: ELF LOAD segment: p_offset=0x0000000000009000 p_filesz=0x0000000040000000 p_paddr=0x0000000000000000 p_vaddr=0x0000000000000000 TRACE: ELF LOAD segment: p_offset=0x0000000040009000 p_filesz=0x0000000300000000 p_paddr=0x0000000100000000 p_vaddr=0x0000000100000000 TRACE: Write copy table entry 0: off=0x0000000000009000 size=0x000000002ffff000 hsa=1 TRACE: Write copy table entry 1: off=0x0000000000001000 size=0x0000000000008000 hsa=0 TRACE: Release HSA memory TRACE: Write copy table entry 2: off=0x0000000030008000 size=0x0000000310001000 hsa=0 TRACE: Write copy table entry 3: off=0x0000000000000000 size=0x0000000000001000 hsa=0 Dump successful Output of test run (KASLR off) ============================== Writing dump: TRACE: Read: /sys/kernel/debug/zcore/hsa: TRACE: '2ffff000' TRACE: ELF LOAD segment: p_offset=0x0000000000009000 p_filesz=0x0000000000000000 p_paddr=0x0000000000000000 p_vaddr=0x0000000000000000 TRACE: ELF LOAD segment: p_offset=0x0000000000009000 p_filesz=0x0000000040000000 p_paddr=0x0000000000000000 p_vaddr=0x0000000000000000 TRACE: ELF LOAD segment: p_offset=0x0000000040009000 p_filesz=0x0000000300000000 p_paddr=0x0000000100000000 p_vaddr=0x0000000100000000 TRACE: Write copy table entry 0: off=0x0000000000009000 size=0x000000002ffff000 hsa=1 TRACE: Write copy table entry 1: off=0x0000000000001000 size=0x0000000000008000 hsa=0 TRACE: Release HSA memory TRACE: Write copy table entry 2: off=0x0000000030008000 size=0x0000000310001000 hsa=0 TRACE: Write copy table entry 3: off=0x0000000000000000 size=0x0000000000001000 hsa=0 Dump successful Signed-off-by: Alexander Egorenkov <egorenar@linux.ibm.com> Reviewed-by: Mikhail Zaslonko <zaslonko@linux.ibm.com> Signed-off-by: Steffen Eiden <seiden@linux.ibm.com>
14 KiB
14 KiB