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

Re: [Xen-devel] [PATCH] xen: get GIC addresses from DT



At 12:08 +0000 on 30 Nov (1354277311), Stefano Stabellini wrote:
> arm: add few checks to gic_init
> 
> Check for:
> - uninitialized GIC interface addresses;
> - non-page aligned GIC interface addresses.
> 
> Return in both cases with an error message.
> Also remove the code from GICH and GICC to handle non-page aligned
> interfaces.
> 
> Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
> 
> diff --git a/xen/arch/arm/gic.c b/xen/arch/arm/gic.c
> index 8efbeb3..301d223 100644
> --- a/xen/arch/arm/gic.c
> +++ b/xen/arch/arm/gic.c
> @@ -34,10 +34,8 @@
>  
>  /* Access to the GIC Distributor registers through the fixmap */
>  #define GICD ((volatile uint32_t *) FIXMAP_ADDR(FIXMAP_GICD))
> -#define GICC ((volatile uint32_t *) (FIXMAP_ADDR(FIXMAP_GICC1)  \
> -                                     + ((uint32_t) gic.cbase & 0xfff)))
> -#define GICH ((volatile uint32_t *) (FIXMAP_ADDR(FIXMAP_GICH)  \
> -                                     + ((uint32_t) gic.hbase & 0xfff)))
> +#define GICC ((volatile uint32_t *) FIXMAP_ADDR(FIXMAP_GICC1)) 
> +#define GICH ((volatile uint32_t *) FIXMAP_ADDR(FIXMAP_GICH))
>  static void gic_restore_pending_irqs(struct vcpu *v);
>  
>  /* Global state */
> @@ -308,6 +306,23 @@ static void __cpuinit gic_hyp_disable(void)
>  /* Set up the GIC */
>  void __init gic_init(void)
>  {
> +     if ( !early_info.gic.gic_dist_addr ||

Some hard tabs have snuck in here.

> +                     !early_info.gic.gic_cpu_addr ||
> +                     !early_info.gic.gic_hyp_addr ||
> +                     !early_info.gic.gic_vcpu_addr )
> +     {
> +             printk("error: incorrect physical address of the GIC 
> interfaces.\n");
> +             return;

Maybe panic() here (and below) rather than printk?

> +     }
> +     if ( (early_info.gic.gic_dist_addr & ((1 << PAGE_SHIFT) - 1)) ||

(foo & ~PAGE_MASK) is usual for that.

Cheers,

Tim.

> +                     (early_info.gic.gic_cpu_addr & ((1 << PAGE_SHIFT) - 1)) 
> ||
> +                     (early_info.gic.gic_hyp_addr & ((1 << PAGE_SHIFT) - 1)) 
> ||
> +                     (early_info.gic.gic_vcpu_addr & ((1 << PAGE_SHIFT) - 
> 1)) )
> +     {
> +             printk("error: GIC interfaces not page aligned.\n");
> +             return;
> +     }
> +
>      gic.dbase = early_info.gic.gic_dist_addr;
>      gic.cbase = early_info.gic.gic_cpu_addr;
>      gic.hbase = early_info.gic.gic_hyp_addr;
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxx
> http://lists.xen.org/xen-devel

_______________________________________________
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®.