[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
Hi Oleksandr, 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). > + > +/* 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. > { > - 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. Regards, -- Julien Grall _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |