Skip to content

Commit

Permalink
s390x/flic: fail migration on source already
Browse files Browse the repository at this point in the history
Current code puts a 'FLIC_FAILED' marker into the migration stream
to indicate something went wrong while saving flic state and fails
load if it encounters that marker. VMState's put routine recently
gained the ability to return error codes (but did not wire it up
yet).

In order to be able to reap the benefits of returning an error and
failing migration on the source already once this gets wired up
in core, return an error in addition to storing 'FLIC_FAILED'.

Suggested-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Reviewed-by: Jens Freimann <jfrei@linux.vnet.ibm.com>
Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com>
  • Loading branch information
cohuck committed Feb 24, 2017
1 parent 409422c commit ba690c7
Showing 1 changed file with 4 additions and 2 deletions.
6 changes: 4 additions & 2 deletions hw/intc/s390_flic_kvm.c
Expand Up @@ -293,6 +293,7 @@ static int kvm_flic_save(QEMUFile *f, void *opaque, size_t size,
int len = FLIC_SAVE_INITIAL_SIZE;
void *buf;
int count;
int r = 0;

flic_disable_wait_pfault((struct KVMS390FLICState *) opaque);

Expand All @@ -303,7 +304,7 @@ static int kvm_flic_save(QEMUFile *f, void *opaque, size_t size,
* migration state */
error_report("flic: couldn't allocate memory");
qemu_put_be64(f, FLIC_FAILED);
return 0;
return -ENOMEM;
}

count = __get_all_irqs(flic, &buf, len);
Expand All @@ -314,14 +315,15 @@ static int kvm_flic_save(QEMUFile *f, void *opaque, size_t size,
* target system to fail when attempting to load irqs from the
* migration state */
qemu_put_be64(f, FLIC_FAILED);
r = count;
} else {
qemu_put_be64(f, count);
qemu_put_buffer(f, (uint8_t *) buf,
count * sizeof(struct kvm_s390_irq));
}
g_free(buf);

return 0;
return r;
}

/**
Expand Down

0 comments on commit ba690c7

Please sign in to comment.