qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH for-4.1?] hw/arm/fsl-imx6ul.c: Remove dead SMP-r


From: Philippe Mathieu-Daudé
Subject: Re: [Qemu-devel] [PATCH for-4.1?] hw/arm/fsl-imx6ul.c: Remove dead SMP-related code
Date: Fri, 12 Jul 2019 19:28:47 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.7.0

On 7/12/19 1:50 PM, Peter Maydell wrote:
> The i.MX6UL always has a single Cortex-A7 CPU (we set FSL_IMX6UL_NUM_CPUS
> to 1 in line with this). This means that all the code in fsl-imx6ul.c to
> handle multiple CPUs is dead code, and Coverity is now complaining that
> it is unreachable (CID 1403008, 1403011).
> 
> Remove the unreachable code and the only-executes-once loops,
> and replace the single-entry cpu[] array in the FSLIMX6ULState
> with a simple cpu member.

The header says "Based on hw/arm/fsl-imx7.c" which has
FSL_IMX7_NUM_CPUS=2, makes sense.

Looking at the i.MX 6:

include/hw/arm/fsl-imx6.h:38:#define FSL_IMX6_NUM_CPUS 4

Ok, we can have 1/2/4 cpus in the family.

The UltraLite series is part of the i.MX 6 family, I wonder why we
needed a different FslIMX6ULState than FslIMX6State.

Anyway, not related to this cleanup patch, so meanwhile:

Reviewed-by: Philippe Mathieu-Daudé <address@hidden>
Tested-by: Philippe Mathieu-Daudé <address@hidden>

> Signed-off-by: Peter Maydell <address@hidden>
> ---
> The only real reason to put this into 4.1 is because it fixes
> some Coverity issues, and it would be nice to be able to get
> down to no Coverity issues for the release. I think that pre-rc1
> that's a reasonable reason to put this in.

Agreed.

> Disclaimer: tested with "make check" as I have no test image for
> this board.
> 
>  include/hw/arm/fsl-imx6ul.h |  2 +-
>  hw/arm/fsl-imx6ul.c         | 62 +++++++++++--------------------------
>  hw/arm/mcimx6ul-evk.c       |  2 +-
>  3 files changed, 20 insertions(+), 46 deletions(-)
> 
> diff --git a/include/hw/arm/fsl-imx6ul.h b/include/hw/arm/fsl-imx6ul.h
> index 9e94e98f8ee..eda389aec7d 100644
> --- a/include/hw/arm/fsl-imx6ul.h
> +++ b/include/hw/arm/fsl-imx6ul.h
> @@ -61,7 +61,7 @@ typedef struct FslIMX6ULState {
>      DeviceState    parent_obj;
>  
>      /*< public >*/
> -    ARMCPU             cpu[FSL_IMX6UL_NUM_CPUS];
> +    ARMCPU             cpu;
>      A15MPPrivState     a7mpcore;
>      IMXGPTState        gpt[FSL_IMX6UL_NUM_GPTS];
>      IMXEPITState       epit[FSL_IMX6UL_NUM_EPITS];
> diff --git a/hw/arm/fsl-imx6ul.c b/hw/arm/fsl-imx6ul.c
> index f8601654388..b074177a71d 100644
> --- a/hw/arm/fsl-imx6ul.c
> +++ b/hw/arm/fsl-imx6ul.c
> @@ -29,16 +29,12 @@
>  
>  static void fsl_imx6ul_init(Object *obj)
>  {
> -    MachineState *ms = MACHINE(qdev_get_machine());
>      FslIMX6ULState *s = FSL_IMX6UL(obj);
>      char name[NAME_SIZE];
>      int i;
>  
> -    for (i = 0; i < MIN(ms->smp.cpus, FSL_IMX6UL_NUM_CPUS); i++) {
> -        snprintf(name, NAME_SIZE, "cpu%d", i);
> -        object_initialize_child(obj, name, &s->cpu[i], sizeof(s->cpu[i]),
> -                                "cortex-a7-" TYPE_ARM_CPU, &error_abort, 
> NULL);
> -    }
> +    object_initialize_child(obj, "cpu0", &s->cpu, sizeof(s->cpu),
> +                            "cortex-a7-" TYPE_ARM_CPU, &error_abort, NULL);
>  
>      /*
>       * A7MPCORE
> @@ -161,42 +157,25 @@ static void fsl_imx6ul_realize(DeviceState *dev, Error 
> **errp)
>      MachineState *ms = MACHINE(qdev_get_machine());
>      FslIMX6ULState *s = FSL_IMX6UL(dev);
>      int i;
> -    qemu_irq irq;
>      char name[NAME_SIZE];
> -    unsigned int smp_cpus = ms->smp.cpus;
> +    SysBusDevice *sbd;
> +    DeviceState *d;
>  
> -    if (smp_cpus > FSL_IMX6UL_NUM_CPUS) {
> -        error_setg(errp, "%s: Only %d CPUs are supported (%d requested)",
> -                   TYPE_FSL_IMX6UL, FSL_IMX6UL_NUM_CPUS, smp_cpus);
> +    if (ms->smp.cpus > 1) {
> +        error_setg(errp, "%s: Only a single CPU is supported (%d requested)",
> +                   TYPE_FSL_IMX6UL, ms->smp.cpus);
>          return;
>      }
>  
> -    for (i = 0; i < smp_cpus; i++) {
> -        Object *o = OBJECT(&s->cpu[i]);
> -
> -        object_property_set_int(o, QEMU_PSCI_CONDUIT_SMC,
> -                                "psci-conduit", &error_abort);
> -
> -        /* On uniprocessor, the CBAR is set to 0 */
> -        if (smp_cpus > 1) {
> -            object_property_set_int(o, FSL_IMX6UL_A7MPCORE_ADDR,
> -                                    "reset-cbar", &error_abort);
> -        }
> -
> -        if (i) {
> -            /* Secondary CPUs start in PSCI powered-down state */
> -            object_property_set_bool(o, true,
> -                                     "start-powered-off", &error_abort);
> -        }
> -
> -        object_property_set_bool(o, true, "realized", &error_abort);
> -    }
> +    object_property_set_int(OBJECT(&s->cpu), QEMU_PSCI_CONDUIT_SMC,
> +                            "psci-conduit", &error_abort);
> +    object_property_set_bool(OBJECT(&s->cpu), true,
> +                             "realized", &error_abort);
>  
>      /*
>       * A7MPCORE
>       */
> -    object_property_set_int(OBJECT(&s->a7mpcore), smp_cpus, "num-cpu",
> -                            &error_abort);
> +    object_property_set_int(OBJECT(&s->a7mpcore), 1, "num-cpu", 
> &error_abort);
>      object_property_set_int(OBJECT(&s->a7mpcore),
>                              FSL_IMX6UL_MAX_IRQ + GIC_INTERNAL,
>                              "num-irq", &error_abort);
> @@ -204,18 +183,13 @@ static void fsl_imx6ul_realize(DeviceState *dev, Error 
> **errp)
>                               &error_abort);
>      sysbus_mmio_map(SYS_BUS_DEVICE(&s->a7mpcore), 0, 
> FSL_IMX6UL_A7MPCORE_ADDR);
>  
> -    for (i = 0; i < smp_cpus; i++) {
> -        SysBusDevice *sbd = SYS_BUS_DEVICE(&s->a7mpcore);
> -        DeviceState  *d   = DEVICE(qemu_get_cpu(i));
> +    sbd = SYS_BUS_DEVICE(&s->a7mpcore);
> +    d = DEVICE(&s->cpu);
>  
> -        irq = qdev_get_gpio_in(d, ARM_CPU_IRQ);
> -        sysbus_connect_irq(sbd, i, irq);
> -        sysbus_connect_irq(sbd, i + smp_cpus, qdev_get_gpio_in(d, 
> ARM_CPU_FIQ));
> -        sysbus_connect_irq(sbd, i + 2 * smp_cpus,
> -                           qdev_get_gpio_in(d, ARM_CPU_VIRQ));
> -        sysbus_connect_irq(sbd, i + 3 * smp_cpus,
> -                           qdev_get_gpio_in(d, ARM_CPU_VFIQ));
> -    }
> +    sysbus_connect_irq(sbd, 0, qdev_get_gpio_in(d, ARM_CPU_IRQ));
> +    sysbus_connect_irq(sbd, 1, qdev_get_gpio_in(d, ARM_CPU_FIQ));
> +    sysbus_connect_irq(sbd, 2, qdev_get_gpio_in(d, ARM_CPU_VIRQ));
> +    sysbus_connect_irq(sbd, 3, qdev_get_gpio_in(d, ARM_CPU_VFIQ));
>  
>      /*
>       * A7MPCORE DAP
> diff --git a/hw/arm/mcimx6ul-evk.c b/hw/arm/mcimx6ul-evk.c
> index bbffb11c2a8..1f6f4aed97c 100644
> --- a/hw/arm/mcimx6ul-evk.c
> +++ b/hw/arm/mcimx6ul-evk.c
> @@ -71,7 +71,7 @@ static void mcimx6ul_evk_init(MachineState *machine)
>      }
>  
>      if (!qtest_enabled()) {
> -        arm_load_kernel(&s->soc.cpu[0], &boot_info);
> +        arm_load_kernel(&s->soc.cpu, &boot_info);
>      }
>  }
>  
> 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]