[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v3 3/4] xen/arm: Don't crash domain on bad MMIO emulation
Hi, On 02/02/18 10:14, Julien Grall wrote: > Now the MMIO emulation is able to distinguish unhandled IO from aborted > one, there are no need to crash the domain when the region is access > with a bad width. > > Instead let Xen inject a data abort to the guest and decide what to do. Very nice! > Signed-off-by: Julien Grall <julien.grall@xxxxxxx> > Reviewed-by: Stefano Stabellini <sstabellini@xxxxxxxxxx> Reviewed-by: Andre Przywara <andre.przywara@xxxxxxx> Cheers, Andre. > --- > Changes in v2 > - Add Stefano's reviewed-by > --- > xen/arch/arm/vgic-v2.c | 2 -- > xen/arch/arm/vgic-v3-its.c | 3 --- > xen/arch/arm/vgic-v3.c | 8 -------- > xen/arch/arm/vpl011.c | 2 -- > 4 files changed, 15 deletions(-) > > diff --git a/xen/arch/arm/vgic-v2.c b/xen/arch/arm/vgic-v2.c > index 2bdb25261a..646d1f3d12 100644 > --- a/xen/arch/arm/vgic-v2.c > +++ b/xen/arch/arm/vgic-v2.c > @@ -348,7 +348,6 @@ static int vgic_v2_distr_mmio_read(struct vcpu *v, > mmio_info_t *info, > bad_width: > printk(XENLOG_G_ERR "%pv: vGICD: bad read width %d r%d offset %#08x\n", > v, dabt.size, dabt.reg, gicd_reg); > - domain_crash_synchronous(); > return 0; > > read_as_zero_32: > @@ -613,7 +612,6 @@ bad_width: > printk(XENLOG_G_ERR > "%pv: vGICD: bad write width %d r%d=%"PRIregister" offset > %#08x\n", > v, dabt.size, dabt.reg, r, gicd_reg); > - domain_crash_synchronous(); > return 0; > > write_ignore_32: > diff --git a/xen/arch/arm/vgic-v3-its.c b/xen/arch/arm/vgic-v3-its.c > index d8fa44258d..32061c6b03 100644 > --- a/xen/arch/arm/vgic-v3-its.c > +++ b/xen/arch/arm/vgic-v3-its.c > @@ -1136,7 +1136,6 @@ read_reserved: > bad_width: > printk(XENLOG_G_ERR "vGITS: bad read width %d r%d offset %#04lx\n", > info->dabt.size, info->dabt.reg, (unsigned long)info->gpa & > 0xffff); > - domain_crash_synchronous(); > > return 0; > } > @@ -1446,8 +1445,6 @@ bad_width: > printk(XENLOG_G_ERR "vGITS: bad write width %d r%d offset %#08lx\n", > info->dabt.size, info->dabt.reg, (unsigned long)info->gpa & > 0xffff); > > - domain_crash_synchronous(); > - > return 0; > } > > diff --git a/xen/arch/arm/vgic-v3.c b/xen/arch/arm/vgic-v3.c > index af16dfd005..2ad8a6be62 100644 > --- a/xen/arch/arm/vgic-v3.c > +++ b/xen/arch/arm/vgic-v3.c > @@ -328,7 +328,6 @@ static int __vgic_v3_rdistr_rd_mmio_read(struct vcpu *v, > mmio_info_t *info, > bad_width: > printk(XENLOG_G_ERR "%pv vGICR: bad read width %d r%d offset %#08x\n", > v, dabt.size, dabt.reg, gicr_reg); > - domain_crash_synchronous(); > return 0; > > read_as_zero_64: > @@ -648,7 +647,6 @@ bad_width: > printk(XENLOG_G_ERR > "%pv: vGICR: bad write width %d r%d=%"PRIregister" offset %#08x\n", > v, dabt.size, dabt.reg, r, gicr_reg); > - domain_crash_synchronous(); > return 0; > > write_ignore_64: > @@ -760,7 +758,6 @@ static int __vgic_v3_distr_common_mmio_read(const char > *name, struct vcpu *v, > bad_width: > printk(XENLOG_G_ERR "%pv: %s: bad read width %d r%d offset %#08x\n", > v, name, dabt.size, dabt.reg, reg); > - domain_crash_synchronous(); > return 0; > > read_as_zero: > @@ -876,7 +873,6 @@ bad_width: > printk(XENLOG_G_ERR > "%pv: %s: bad write width %d r%d=%"PRIregister" offset %#08x\n", > v, name, dabt.size, dabt.reg, r, reg); > - domain_crash_synchronous(); > return 0; > > write_ignore_32: > @@ -937,7 +933,6 @@ static int vgic_v3_rdistr_sgi_mmio_read(struct vcpu *v, > mmio_info_t *info, > bad_width: > printk(XENLOG_G_ERR "%pv: vGICR: SGI: bad read width %d r%d offset > %#08x\n", > v, dabt.size, dabt.reg, gicr_reg); > - domain_crash_synchronous(); > return 0; > > read_as_zero_32: > @@ -1017,7 +1012,6 @@ bad_width: > printk(XENLOG_G_ERR > "%pv: vGICR: SGI: bad write width %d r%d=%"PRIregister" offset > %#08x\n", > v, dabt.size, dabt.reg, r, gicr_reg); > - domain_crash_synchronous(); > return 0; > > write_ignore_32: > @@ -1268,7 +1262,6 @@ static int vgic_v3_distr_mmio_read(struct vcpu *v, > mmio_info_t *info, > bad_width: > printk(XENLOG_G_ERR "%pv: vGICD: bad read width %d r%d offset %#08x\n", > v, dabt.size, dabt.reg, gicd_reg); > - domain_crash_synchronous(); > return 0; > > read_as_zero_32: > @@ -1456,7 +1449,6 @@ bad_width: > printk(XENLOG_G_ERR > "%pv: vGICD: bad write width %d r%d=%"PRIregister" offset > %#08x\n", > v, dabt.size, dabt.reg, r, gicd_reg); > - domain_crash_synchronous(); > return 0; > > write_ignore_32: > diff --git a/xen/arch/arm/vpl011.c b/xen/arch/arm/vpl011.c > index 725b2e03ad..7788c2fc32 100644 > --- a/xen/arch/arm/vpl011.c > +++ b/xen/arch/arm/vpl011.c > @@ -296,7 +296,6 @@ static int vpl011_mmio_read(struct vcpu *v, > bad_width: > gprintk(XENLOG_ERR, "vpl011: bad read width %d r%d offset %#08x\n", > dabt.size, dabt.reg, vpl011_reg); > - domain_crash_synchronous(); > return 0; > > } > @@ -366,7 +365,6 @@ write_ignore: > bad_width: > gprintk(XENLOG_ERR, "vpl011: bad write width %d r%d offset %#08x\n", > dabt.size, dabt.reg, vpl011_reg); > - domain_crash_synchronous(); > return 0; > > } > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |