On 9/30/25 01:06, Michael Tokarev wrote:
> On 9/28/25 22:26, Harsh Prateek Bora wrote:
>> lrdr-capacity contains phys field which communicates the maximum address
>> in bytes and therefore, the most memory that can be allocated to this
>> partition. This is usually populated when maxmem is provided alongwith
>> memory size on qemu command line. However since maxmem is an optional
>> param, this leads to bits being set to 0 in absence of maxmem param.
>> Fix this by initializing the respective bits as per total mem size in
>> such case.
>>
>> Reported-by: Gaurav Batra <gbatra@us.ibm.com>
>> Tested-by: David Christensen <drc@linux.ibm.com>
>> Signed-off-by: Harsh Prateek Bora <harshpb@linux.ibm.com>
>> Reviewed-by: Shivaprasad G Bhat <sbhat@linux.ibm.com>
>> Link:
>> https://lore.kernel.org/r/20250506042903.76250-1-harshpb@linux.ibm.com
>> Message-ID: <20250506042903.76250-1-harshpb@linux.ibm.com>
>
> This feels like a qemu-stable matherial (for 10.0 & 10.1 series).
> Please let me know if it isn't.
Yes, it can be picked for stable releases as well. Thanks.
regards,
Harsh
>
> Thanks,
>
> /mjt
>
>> ---
>> hw/ppc/spapr.c | 11 +++++++----
>> 1 file changed, 7 insertions(+), 4 deletions(-)
>>
>> diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
>> index eb22333404..82fb23beaa 100644
>> --- a/hw/ppc/spapr.c
>> +++ b/hw/ppc/spapr.c
>> @@ -907,6 +907,7 @@ static void spapr_dt_rtas(SpaprMachineState
>> *spapr, void *fdt)
>> int rtas;
>> GString *hypertas = g_string_sized_new(256);
>> GString *qemu_hypertas = g_string_sized_new(256);
>> + uint64_t max_device_addr = 0;
>> uint32_t lrdr_capacity[] = {
>> 0,
>> 0,
>> @@ -917,13 +918,15 @@ static void spapr_dt_rtas(SpaprMachineState
>> *spapr, void *fdt)
>> /* Do we have device memory? */
>> if (MACHINE(spapr)->device_memory) {
>> - uint64_t max_device_addr = MACHINE(spapr)->device_memory->base +
>> + max_device_addr = MACHINE(spapr)->device_memory->base +
>> memory_region_size(&MACHINE(spapr)->device_memory->mr);
>> -
>> - lrdr_capacity[0] = cpu_to_be32(max_device_addr >> 32);
>> - lrdr_capacity[1] = cpu_to_be32(max_device_addr & 0xffffffff);
>> + } else if (ms->ram_size == ms->maxram_size) {
>> + max_device_addr = ms->ram_size;
>> }
>> + lrdr_capacity[0] = cpu_to_be32(max_device_addr >> 32);
>> + lrdr_capacity[1] = cpu_to_be32(max_device_addr & 0xffffffff);
>> +
>> _FDT(rtas = fdt_add_subnode(fdt, 0, "rtas"));
>> /* hypertas */
>
>