On 25/10/23 02:35PM, Sourabh Jain wrote:
>
>
> > <...snip...>
> > + /*
> > + * CPUSTRT and CPUEND register entries follow this format:
> > + *
> > + * 8 Bytes Reg ID (BE) | 4 Bytes (0x0) | 4 Bytes Logical CPU ID (BE)
> > + */
> > + curr_reg_entry->reg_id =
> > + cpu_to_be64(fadump_str_to_u64("CPUSTRT"));
> > + curr_reg_entry->reg_value = cpu_to_be64(
> > + ppc_cpu->vcpu_id & FADUMP_CPU_ID_MASK);
>
> Seems like converting full 64 bit CPU ID to 64 bit BE value will not bring
> reg
> entry in below format. Isn't it?
>
> 8 Bytes Identifier (BE) | 4 Bytes Reserved (0x0) | 4 Bytes Logical CPU ID
> (BE)
>
> > <...snip...>
> > + /* End the registers for this CPU with "CPUEND" reg entry */
> > + curr_reg_entry->reg_id =
> > + cpu_to_be64(fadump_str_to_u64("CPUEND"));
> > + curr_reg_entry->reg_value = cpu_to_be64(
> > + ppc_cpu->vcpu_id & FADUMP_CPU_ID_MASK);
>
> Same here.
It will be in the same format, since even with storing 8 bytes at once,
we do a 8 byte swap on the CPU ID, thus bringing the cpu id in the
higher 4 bytes only (considering CPU ID fits in 4 bytes as ensured by
the FADUMP_CPU_ID_MASK).
So, it still follows the above format, just that it does not explicitly
use 4 byte blocks.
This is also consistent with how the Linux kernel reads this field:
/* Lower 4 bytes of reg_value contains logical cpu id */
cpu = (be64_to_cpu(reg_entry->reg_value) &
RTAS_FADUMP_CPU_ID_MASK);
Thanks,
- Aditya G