It's not a sensible thing to do, and it is easier than auditing all
state save/restore functions for safety (most importantly, racing
against domain_relinquish_resources).
Also place a spin_barrier on domain_lock after asserting d->is_dying,
allowing critical regions under the domain_lock to safely check
is_dying and avoid races with domain_relinquish_resources().
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
case DOMDYING_alive:
domain_pause(d);
d->is_dying = DOMDYING_dying;
+ spin_barrier(&d->domain_lock);
evtchn_destroy(d);
gnttab_release_mappings(d);
/* fallthrough */
hvm_save_handler handler;
uint16_t i;
+ if ( d->is_dying )
+ return -EINVAL;
+
hdr.magic = HVM_FILE_MAGIC;
hdr.version = HVM_FILE_VERSION;
hvm_load_handler handler;
struct vcpu *v;
+ if ( d->is_dying )
+ return -EINVAL;
+
/* Read the save header, which must be first */
if ( hvm_load_entry(HEADER, h, &hdr) != 0 )
return -1;