On Tue, Sep 30, 2025 at 01:57:17PM +0200, Clément Chigot wrote:
> This helper will avoid repeating the MIN/MAX formula everytime the
> number of RPUs available is requested.
>
> Signed-off-by: Clément Chigot <chigot@adacore.com>
Reviewed-by: Edgar E. Iglesias <edgar.iglesias@amd.com>
> ---
> hw/arm/xlnx-zynqmp.c | 15 ++++++++++++---
> 1 file changed, 12 insertions(+), 3 deletions(-)
>
> diff --git a/hw/arm/xlnx-zynqmp.c b/hw/arm/xlnx-zynqmp.c
> index d7adc070f8..3d8c46986e 100644
> --- a/hw/arm/xlnx-zynqmp.c
> +++ b/hw/arm/xlnx-zynqmp.c
> @@ -207,14 +207,23 @@ static inline int arm_gic_ppi_index(int cpu_nr, int ppi_index)
> return XLNX_ZYNQMP_GIC_NUM_SPI_INTR + cpu_nr * GIC_INTERNAL + ppi_index;
> }
>
> +static unsigned int xlnx_zynqmp_get_rpu_number(MachineState *ms)
> +{
> + /*
> + * RPUs will be created only if "-smp" is higher than the maximum
> + * of APUs. Round it up to 0 to avoid dealing with negative values.
> + */
> + return MAX(0, MIN((int)(ms->smp.cpus - XLNX_ZYNQMP_NUM_APU_CPUS),
> + XLNX_ZYNQMP_NUM_RPU_CPUS));
> +}
> +
> static void xlnx_zynqmp_create_rpu(MachineState *ms, XlnxZynqMPState *s,
> const char *boot_cpu, Error **errp)
> {
> int i;
> - int num_rpus = MIN((int)(ms->smp.cpus - XLNX_ZYNQMP_NUM_APU_CPUS),
> - XLNX_ZYNQMP_NUM_RPU_CPUS);
> + int num_rpus = xlnx_zynqmp_get_rpu_number(ms);
>
> - if (num_rpus <= 0) {
> + if (!num_rpus) {
> /* Don't create rpu-cluster object if there's nothing to put in it */
> return;
> }
> --
> 2.34.1
>