diff --git a/xen/arch/arm/include/asm/vgic.h b/xen/arch/arm/include/asm/vgic.h index 6901a05c06..922779ce14 100644 --- a/xen/arch/arm/include/asm/vgic.h +++ b/xen/arch/arm/include/asm/vgic.h @@ -252,7 +252,7 @@ struct vgic_ops { * Rank containing GICD_ for GICD_ with * -bits-per-interrupt */ -static inline int REG_RANK_NR(int b, uint32_t n) +static inline unsigned int REG_RANK_NR(unsigned int b, unsigned int n) { switch ( b ) { @@ -297,10 +297,13 @@ extern void gic_remove_from_lr_pending(struct vcpu *v, struct pending_irq *p); extern void vgic_init_pending_irq(struct pending_irq *p, unsigned int virq); extern struct pending_irq *irq_to_pending(struct vcpu *v, unsigned int irq); extern struct pending_irq *spi_to_pending(struct domain *d, unsigned int irq); -extern struct vgic_irq_rank *vgic_rank_offset(struct vcpu *v, int b, int n, int s); +extern struct vgic_irq_rank *vgic_rank_offset(struct vcpu *v, + unsigned int b, + unsigned int n, + unsigned int s); extern struct vgic_irq_rank *vgic_rank_irq(struct vcpu *v, unsigned int irq); -extern void vgic_disable_irqs(struct vcpu *v, uint32_t r, int n); -extern void vgic_enable_irqs(struct vcpu *v, uint32_t r, int n); +extern void vgic_disable_irqs(struct vcpu *v, uint32_t r, unsigned int n); +extern void vgic_enable_irqs(struct vcpu *v, uint32_t r, unsigned int n); extern void vgic_set_irqs_pending(struct vcpu *v, uint32_t r, unsigned int rank); extern void register_vgic_ops(struct domain *d, const struct vgic_ops *ops); diff --git a/xen/arch/arm/vgic-v2.c b/xen/arch/arm/vgic-v2.c index 2a2eda2e6f..0aa10fff0f 100644 --- a/xen/arch/arm/vgic-v2.c +++ b/xen/arch/arm/vgic-v2.c @@ -161,7 +161,11 @@ static int vgic_v2_distr_mmio_read(struct vcpu *v, mmio_info_t *info, { struct hsr_dabt dabt = info->dabt; struct vgic_irq_rank *rank; - int gicd_reg = (int)(info->gpa - v->domain->arch.vgic.dbase); + /* + * gpa/dbase are paddr_t which size may be higher than 32-bit. Yet + * the difference will always be smaller than 32-bit. + */ + unsigned int gicd_reg = info->gpa - v->domain->arch.vgic.dbase; unsigned long flags; perfc_incr(vgicd_reads); @@ -403,7 +407,11 @@ static int vgic_v2_distr_mmio_write(struct vcpu *v, mmio_info_t *info, { struct hsr_dabt dabt = info->dabt; struct vgic_irq_rank *rank; - int gicd_reg = (int)(info->gpa - v->domain->arch.vgic.dbase); + /* + * gpa/dbase are paddr_t which size may be higher than 32-bit. Yet + * the difference will always be smaller than 32-bit. + */ + unsigned int gicd_reg = info->gpa - v->domain->arch.vgic.dbase; uint32_t tr; unsigned long flags; diff --git a/xen/arch/arm/vgic.c b/xen/arch/arm/vgic.c index afcac791fe..f6b49766f9 100644 --- a/xen/arch/arm/vgic.c +++ b/xen/arch/arm/vgic.c @@ -24,7 +24,8 @@ #include #include -static inline struct vgic_irq_rank *vgic_get_rank(struct vcpu *v, int rank) +static inline struct vgic_irq_rank *vgic_get_rank(struct vcpu *v, + unsigned int rank) { if ( rank == 0 ) return v->arch.vgic.private_irqs; @@ -38,17 +39,17 @@ static inline struct vgic_irq_rank *vgic_get_rank(struct vcpu *v, int rank) * Returns rank corresponding to a GICD_ register for * GICD_ with -bits-per-interrupt. */ -struct vgic_irq_rank *vgic_rank_offset(struct vcpu *v, int b, int n, - int s) +struct vgic_irq_rank *vgic_rank_offset(struct vcpu *v, unsigned int b, + unsigned int n, unsigned int s) { - int rank = REG_RANK_NR(b, (n >> s)); + unsigned int rank = REG_RANK_NR(b, (n >> s)); return vgic_get_rank(v, rank); } struct vgic_irq_rank *vgic_rank_irq(struct vcpu *v, unsigned int irq) { - int rank = irq/32; + unsigned int rank = irq / 32; return vgic_get_rank(v, rank); } @@ -324,14 +325,14 @@ void arch_move_irqs(struct vcpu *v) } } -void vgic_disable_irqs(struct vcpu *v, uint32_t r, int n) +void vgic_disable_irqs(struct vcpu *v, uint32_t r, unsigned int n) { const unsigned long mask = r; struct pending_irq *p; struct irq_desc *desc; unsigned int irq; unsigned long flags; - int i = 0; + unsigned int i = 0; struct vcpu *v_target; /* LPIs will never be disabled via this function. */ @@ -361,7 +362,9 @@ void vgic_disable_irqs(struct vcpu *v, uint32_t r, int n) #define VGIC_ICFG_MASK(intr) (1U << ((2 * ((intr) % 16)) + 1)) /* The function should be called with the rank lock taken */ -static inline unsigned int vgic_get_virq_type(struct vcpu *v, int n, int index) +static inline unsigned int vgic_get_virq_type(struct vcpu *v, + unsigned int n, + unsigned int index) { struct vgic_irq_rank *r = vgic_get_rank(v, n); uint32_t tr = r->icfg[index >> 4]; @@ -374,13 +377,13 @@ static inline unsigned int vgic_get_virq_type(struct vcpu *v, int n, int index) return IRQ_TYPE_LEVEL_HIGH; } -void vgic_enable_irqs(struct vcpu *v, uint32_t r, int n) +void vgic_enable_irqs(struct vcpu *v, uint32_t r, unsigned int n) { const unsigned long mask = r; struct pending_irq *p; unsigned int irq; unsigned long flags; - int i = 0; + unsigned int i = 0; struct vcpu *v_target; struct domain *d = v->domain;