|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [RFC PATCH v1] xen/arm: split the init_xen_time() in 2 parts
On Mon, Jan 26, 2015 at 3:32 PM, Julien Grall <julien.grall@xxxxxxxxxx> wrote:
> Hi Oleksandr,
Hi Julien
Thank you for your comments.
>
> Thank you for the patch. See few comments below.
>
> On 23/01/15 15:49, Oleksandr Tyshchenko wrote:
>> Create preinit_xen_time() and move to it minimum required
>> subset of operations needed to properly initialized
>> cpu_khz and boot_count vars. This is allow us to use udelay()
>> immediately after the call.
>>
>> Signed-off-by: Oleksandr Tyshchenko <oleksandr.tyshchenko@xxxxxxxxxxxxxxx>
>> CC: Julien Grall <julien.grall@xxxxxxxxxx>
>> ---
>> xen/arch/arm/setup.c | 2 ++
>> xen/arch/arm/time.c | 71
>> ++++++++++++++++++++++++++++++++------------------
>> xen/include/xen/time.h | 1 +
>> 3 files changed, 48 insertions(+), 26 deletions(-)
>>
>> diff --git a/xen/arch/arm/setup.c b/xen/arch/arm/setup.c
>> index f49569d..dbd7d5a 100644
>> --- a/xen/arch/arm/setup.c
>> +++ b/xen/arch/arm/setup.c
>> @@ -743,6 +743,8 @@ void __init start_xen(unsigned long boot_phys_offset,
>>
>> init_IRQ();
>>
>> + preinit_xen_time();
>> +
>> dt_uart_init();
>> console_init_preirq();
>> console_init_ring();
>> diff --git a/xen/arch/arm/time.c b/xen/arch/arm/time.c
>> index 455f217..b2560db 100644
>> --- a/xen/arch/arm/time.c
>> +++ b/xen/arch/arm/time.c
>> @@ -61,25 +61,56 @@ unsigned int timer_get_irq(enum timer_ppi ppi)
>> return muldiv64(ns, 1000 * cpu_khz, SECONDS(1));
>> }
>>
>> -/* Set up the timer on the boot CPU */
>> -int __init init_xen_time(void)
>> +static __init struct dt_device_node *find_timer_node(void)
>> +{
>> + static const struct dt_device_match timer_ids[] __initconst =
>> + {
>> + DT_MATCH_TIMER,
>> + { /* sentinel */ },
>> + };
>> +
>> + return dt_find_matching_node(NULL, timer_ids);
>> +}
>
> If you store the device tree pointer into a static variable, you won't
> able to look at twice the node (in preinit_xen_time and init_xen_time).
Agree.
>
>> +
>> +/* Set up the timer on the boot CPU (early init function) */
>> +int __init preinit_xen_time(void)
>
> You always return 0 and never check the return. Please use void.
ok
>
>> {
>> - static const struct dt_device_match timer_ids[] __initconst =
>> - {
>> - DT_MATCH_TIMER,
>> - { /* sentinel */ },
>> - };
>> struct dt_device_node *dev;
>> int res;
>> - unsigned int i;
>> u32 rate;
>>
>> - dev = dt_find_matching_node(NULL, timer_ids);
>> + dev = find_timer_node();
>> if ( !dev )
>> panic("Unable to find a compatible timer in the device tree");
>>
>> dt_device_set_used_by(dev, DOMID_XEN);
>>
>> + res = platform_init_time();
>
> If you move platform_init_time in preinit_xen_time, you also have to
> move platform_init before calling preinit_xen_time.
ok
>
> Regards,
>
> --
> Julien Grall
--
Oleksandr Tyshchenko | Embedded Dev
GlobalLogic
www.globallogic.com
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |