On 1 August 2017 at 09:10, KONRAD Frederic <frederic.kon...@adacore.com> wrote: > This adds a migration blocker when mmio_execution has been used. > > Signed-off-by: KONRAD Frederic <frederic.kon...@adacore.com> > --- > hw/ssi/xilinx_spips.c | 11 +++++++++++ > 1 file changed, 11 insertions(+) > > diff --git a/hw/ssi/xilinx_spips.c b/hw/ssi/xilinx_spips.c > index e833028..d46491f 100644 > --- a/hw/ssi/xilinx_spips.c > +++ b/hw/ssi/xilinx_spips.c > @@ -31,6 +31,8 @@ > #include "hw/ssi/ssi.h" > #include "qemu/bitops.h" > #include "hw/ssi/xilinx_spips.h" > +#include "qapi/error.h" > +#include "migration/blocker.h" > > #ifndef XILINX_SPIPS_ERR_DEBUG > #define XILINX_SPIPS_ERR_DEBUG 0 > @@ -139,6 +141,7 @@ typedef struct { > > uint8_t lqspi_buf[LQSPI_CACHE_SIZE]; > hwaddr lqspi_cached_addr; > + Error *migration_blocker; > } XilinxQSPIPS; > > typedef struct XilinxSPIPSClass { > @@ -603,6 +606,14 @@ static void *lqspi_request_mmio_ptr(void *opaque, hwaddr > addr, unsigned *size, > XilinxQSPIPS *q = opaque; > hwaddr offset_within_the_region = addr & ~(LQSPI_CACHE_SIZE - 1); > > + /* mmio_execution breaks migration better aborting than having strange > + * bugs. > + */ > + if (!q->migration_blocker) { > + error_setg(&q->migration_blocker, "booting from SPI breaks > migration"); > + migrate_add_blocker(q->migration_blocker, &error_fatal); > + } > +
This doesn't handle the case when migration is already in progress and this function is called (which will cause migrate_add_blocker to fail). thanks -- PMM