[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] xen/arm: gic-v3: Implement correctly the callback send_SGI
On Mon, 27 Apr 2015, Julien Grall wrote: > Currently, the GICv3 drivers is only able to send an SGI when the cpumask > is provided. Although with the modes SGI_TARGET_OTHERS and SGI_TARGET_SELF, > no cpumask is provided. Any usage of those modes will crash the hypersivor. > > Move the rename gicv3_send_sgi to gicv3_send_sgi_list and implement the > different modes: > - SGI_TARGET_OTHERS: Set the Interrupt Routing Mode (bit 40) to 1 > (see Table 4 on Section 4.2.6 PRD03-GENC-010745 24.0) > - SGI_TARGET_SELF: Contrawise GICv2, the SGI registers doesn't provide > a specific field. So use gicv3_send_sgi_list and pass the cpumask of > the current CPU > - SGI_TARGET_LIST: Directly call gicv3_send_sgi_list with the given > cpumask > > Reported-by: Chen Baozi <baozich@xxxxxxxxx> > Signed-off-by: Julien Grall <julien.grall@xxxxxxxxxx> > --- > xen/arch/arm/gic-v3.c | 25 +++++++++++++++++++++++-- > xen/include/asm-arm/gic_v3_defs.h | 2 +- > 2 files changed, 24 insertions(+), 3 deletions(-) > > diff --git a/xen/arch/arm/gic-v3.c b/xen/arch/arm/gic-v3.c > index b0f498e..e1574d8 100644 > --- a/xen/arch/arm/gic-v3.c > +++ b/xen/arch/arm/gic-v3.c > @@ -808,8 +808,7 @@ out: > return tlist; > } > > -static void gicv3_send_sgi(enum gic_sgi sgi, enum gic_sgi_mode mode, > - const cpumask_t *cpumask) > +static void gicv3_send_sgi_list(enum gic_sgi sgi, const cpumask_t *cpumask) > { > int cpu = 0; > uint64_t val; > @@ -839,6 +838,28 @@ static void gicv3_send_sgi(enum gic_sgi sgi, enum > gic_sgi_mode mode, > isb(); > } > > +static void gicv3_send_sgi(enum gic_sgi sgi, enum gic_sgi_mode mode, > + const cpumask_t *cpumask) > +{ > + switch ( mode ) > + { > + case SGI_TARGET_OTHERS: > + WRITE_SYSREG(ICH_SGI_TARGET_OTHERS << ICH_SGI_IRQMODE_SHIFT | > + (register_t)sgi << ICH_SGI_IRQ_SHIFT, > + ICC_SGI1R_EL1); > + isb(); > + break; > + case SGI_TARGET_SELF: > + gicv3_send_sgi_list(sgi, cpumask_of(smp_processor_id())); > + break; > + case SGI_TARGET_LIST: > + gicv3_send_sgi_list(sgi, cpumask); > + break; > + default: > + BUG(); > + } > +} > + > /* Shut down the per-CPU GIC interface */ > static void gicv3_disable_interface(void) > { > diff --git a/xen/include/asm-arm/gic_v3_defs.h > b/xen/include/asm-arm/gic_v3_defs.h > index b8a1c2e..556f114 100644 > --- a/xen/include/asm-arm/gic_v3_defs.h > +++ b/xen/include/asm-arm/gic_v3_defs.h > @@ -147,7 +147,7 @@ > > #define ICH_SGI_IRQMODE_SHIFT 40 > #define ICH_SGI_IRQMODE_MASK 0x1 > -#define ICH_SGI_TARGET_OTHERS 1 > +#define ICH_SGI_TARGET_OTHERS 1UL Spurious change? Aside from this: Acked-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx> > #define ICH_SGI_TARGET_LIST 0 > #define ICH_SGI_IRQ_SHIFT 24 > #define ICH_SGI_IRQ_MASK 0xf > -- > 2.1.4 > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |