On 25/10/23 02:38PM, Sourabh Jain wrote:
> 
> 
> On 21/10/25 19:18, Aditya Gupta wrote:
> > With all support in place for preserving memory regions, enable fadump by
> > exporting the "ibm,kernel-dump" property in the device tree, representing
> > the fadump dump information, in case of a crash.
> > 
> > Currently "ibm,configure-kernel-dump" RTAS call is already registered,
> > which tells the kernel that the platform (QEMU) supports fadump.
> > 
> > Now, in case of a crash, if fadump was registered, we also pass
> > "ibm,kernel-dump" in device tree, which tells the kernel that the fadump
> > dump is active.
> > 
> > Pass "fadump=on" to enable Linux to use firmware assisted dump.
> > 
> > Logs of a linux boot with firmware assisted dump:
> > 
> >      $ ./build/qemu-system-ppc64 -M pseries,x-vof=on --cpu power10 --smp 4 
> > -m 4G -kernel some-vmlinux -initrd some-initrd -append "debug fadump=on 
> > crashkernel=1G" -nographic
> > 
> >      [    0.000000] fadump: Reserved 1024MB of memory at 0x00000040000000 
> > (System RAM: 4096MB)
> >      [    0.000000] fadump: Initialized 0x40000000 bytes cma area at 1024MB 
> > from 0x400102a8 bytes of memory reserved for firmware-assisted dump
> >      ...
> >      [    1.084686] rtas fadump: Registration is successful!
> >      ...
> >      # cat /sys/kernel/debug/powerpc/fadump_region
> >      CPU :[0x00000040000000-0x000000400013df] 0x13e0 bytes, Dumped: 0x0
> >      HPTE:[0x000000400013e0-0x000000400013df] 0x0 bytes, Dumped: 0x0
> >      DUMP: Src: 0x00000000000000, Dest: 0x00000040010000, Size: 0x40000000, 
> > Dumped: 0x0 bytes
> > 
> >      [0x0000000921a000-0x0000000921a7ff]: cmdline append: ''
> >      # echo c > /proc/sysrq-trigger
> > 
> > The fadump boot after crash:
> > 
> >      [    0.000000] rtas fadump: Firmware-assisted dump is active.
> >      [    0.000000] fadump: Updated cmdline: debug fadump=on crashkernel=1G
> >      [    0.000000] fadump: Firmware-assisted dump is active.
> >      [    0.000000] fadump: Reserving 3072MB of memory at 0x00000040000000 
> > for preserving crash data
> >      ....
> >      # file /proc/vmcore
> >      /proc/vmcore: ELF 64-bit LSB core file, 64-bit PowerPC or cisco 7500, 
> > OpenPOWER ELF V2 ABI, version 1 (SYSV), SVR4-style
> > 
> > Analysing the vmcore with crash-utility:
> > 
> >            KERNEL: vmlinux-6.14-rc2
> >          DUMPFILE: vmcore-fc92fb373aa0
> >              CPUS: 4
> >              DATE: Wed Mar 12 23:39:23 CDT 2025
> >            UPTIME: 00:00:22
> >      LOAD AVERAGE: 0.13, 0.03, 0.01
> >             TASKS: 95
> >          NODENAME: buildroot
> >           RELEASE: 6.12.0-rc4+
> >           VERSION: #1 SMP Fri Jan  3 00:15:17 IST 2025
> >           MACHINE: ppc64le  (1000 Mhz)
> >            MEMORY: 4 GB
> >             PANIC: "Kernel panic - not syncing: sysrq triggered crash"
> >               PID: 269
> >           COMMAND: "sh"
> >              TASK: c00000000a050b00  [THREAD_INFO: c00000000a050b00]
> >               CPU: 0
> >             STATE: TASK_RUNNING (PANIC)
> > 
> > Signed-off-by: Aditya Gupta <[email protected]>
> > ---
> >   hw/ppc/spapr.c | 12 ++++++++++++
> >   1 file changed, 12 insertions(+)
> > 
> > diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
> > index d40d5a9dcde5..77da8c1b02f5 100644
> > --- a/hw/ppc/spapr.c
> > +++ b/hw/ppc/spapr.c
> > @@ -904,6 +904,8 @@ static void spapr_dt_rtas_fadump(SpaprMachineState 
> > *spapr, void *fdt, int rtas)
> >   {
> >       MachineState *ms = MACHINE(spapr);
> >       MachineClass *mc = MACHINE_GET_CLASS(ms);
> > +    FadumpMemStruct *fdm = &spapr->registered_fdm;
> > +    uint16_t dump_status_flag;
> >       uint32_t max_possible_cpus = mc->possible_cpu_arch_ids(ms)->len;
> >       uint64_t fadump_cpu_state_size = 0;
> > @@ -953,6 +955,16 @@ static void spapr_dt_rtas_fadump(SpaprMachineState 
> > *spapr, void *fdt, int rtas)
> >                       fadump_versions, sizeof(fadump_versions))));
> >       _FDT((fdt_setprop(fdt, rtas, "ibm,configure-kernel-dump-sizes",
> >                       fadump_rgn_sizes, sizeof(fadump_rgn_sizes))));
> > +
> > +    dump_status_flag = be16_to_cpu(fdm->header.dump_status_flag);
> > +    if (dump_status_flag & FADUMP_STATUS_DUMP_TRIGGERED) {
> > +        uint64_t fdm_size =
> > +            sizeof(struct FadumpSectionHeader) +
> > +            (be16_to_cpu(fdm->header.dump_num_sections) *
> > +            sizeof(struct FadumpSection));
> > +
> > +        _FDT((fdt_setprop(fdt, rtas, "ibm,kernel-dump", fdm, fdm_size)));
> > +    }
> >   }
> >   static void spapr_dt_rtas(SpaprMachineState *spapr, void *fdt)
> 
> LGTM
> Reviewed-by: Sourabh Jain <[email protected]>

Thanks for all your reviews Sourabh !


Reply via email to