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

Re: [Xen-devel] [PATCH v2] arm/timer: fix panic when booting with DT



On Fri, 4 Mar 2016, Shannon Zhao wrote:
> While to support ACPI, patch "arm/acpi: Parse GTDT to initialize timer"
> refactors the functions preinit_xen_time and init_xen_time. But it
> wrongly moves the platform_get_irq from init_xen_time to
> preinit_dt_xen_time and this will cause booting failure.
> 
> So move platform_get_irq back to init_xen_time to fix it.
> 
> Signed-off-by: Shannon Zhao <shannon.zhao@xxxxxxxxxx>
> ---
> v2: refactor the codes as a small function

Reviewed-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>


>  xen/arch/arm/time.c | 30 +++++++++++++++++++-----------
>  1 file changed, 19 insertions(+), 11 deletions(-)
> 
> diff --git a/xen/arch/arm/time.c b/xen/arch/arm/time.c
> index 5f8f974..7dae28b 100644
> --- a/xen/arch/arm/time.c
> +++ b/xen/arch/arm/time.c
> @@ -119,7 +119,6 @@ static void __init preinit_dt_xen_time(void)
>      };
>      int res;
>      u32 rate;
> -    unsigned int i;
>  
>      timer = dt_find_matching_node(NULL, timer_ids);
>      if ( !timer )
> @@ -133,16 +132,6 @@ static void __init preinit_dt_xen_time(void)
>          cpu_khz = rate / 1000;
>          timer_dt_clock_frequency = rate;
>      }
> -
> -    /* Retrieve all IRQs for the timer */
> -    for ( i = TIMER_PHYS_SECURE_PPI; i < MAX_TIMER_PPI; i++ )
> -    {
> -        res = platform_get_irq(timer, i);
> -
> -        if ( res < 0 )
> -            panic("Timer: Unable to retrieve IRQ %u from the device tree", 
> i);
> -        timer_irq[i] = res;
> -    }
>  }
>  
>  void __init preinit_xen_time(void)
> @@ -165,9 +154,28 @@ void __init preinit_xen_time(void)
>      boot_count = READ_SYSREG64(CNTPCT_EL0);
>  }
>  
> +static void __init init_dt_xen_time(void)
> +{
> +    int res;
> +    unsigned int i;
> +
> +    /* Retrieve all IRQs for the timer */
> +    for ( i = TIMER_PHYS_SECURE_PPI; i < MAX_TIMER_PPI; i++ )
> +    {
> +        res = platform_get_irq(timer, i);
> +
> +        if ( res < 0 )
> +            panic("Timer: Unable to retrieve IRQ %u from the device tree", 
> i);
> +        timer_irq[i] = res;
> +    }
> +}
> +
>  /* Set up the timer on the boot CPU (late init function) */
>  int __init init_xen_time(void)
>  {
> +    if ( acpi_disabled )
> +        init_dt_xen_time();
> +
>      /* Check that this CPU supports the Generic Timer interface */
>      if ( !cpu_has_gentimer )
>          panic("CPU does not support the Generic Timer v1 interface");
> -- 
> 2.1.0
> 

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.