mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-08 18:23:57 -06:00
migration/next for 20170421
-----BEGIN PGP SIGNATURE----- iQIcBAABCAAGBQJY+d69AAoJEPSH7xhYctcj/4oQAIFFEyWaqrL9ve5ySiJgdtcY zYtiIhZQ+nPuy2i1oDSX+vbMcmkJDDyfO5qLovxyHGkZHniR8HtxNHP+MkZQa07p DiSIvd51HvcixIouhbGcoUCU63AYxqNL3o5/TyNpUI72nvsgwl3yfOot7PtutE/F r384j8DrOJ9VwC5GGPg27mJvRPvyfDQWfxDCyMYVw153HTuwVYtgiu/layWojJDV D2L1KV45ezBuGckZTHt9y6K4J5qz8qHb/dJc+whBBjj4j9T9XOILU9NPDAEuvjFZ gHbrUyxj7EiApjHcDZoQm9Raez422ALU30yc9Kn7ik7vSqTxk2Ejq6Gz7y9MJrDn KdMj75OETJNjBL+0T9MmbtWts28+aalpTUXtBpmi3eWQV5Hcox2NF1RP42jtD9Pa lkrM6jv0nsdNfBPlQ+ZmBTJxysWECcMqy487nrzmPNC8vZfokjXL5be12puho9fh ziU4gx9C6/k82S+/H6WD/AUtRiXJM7j4oTU2mnjrsSXQC1JNWqODBOFUo9zsDufl vtcrxfPhSD1DwOInFSIBHf/RylcgTkPCL0rPoJ8npNDly6rHFYJ+oIbsn84Z4uYY RWvH8xB9wgRlK9L1WdRgOd2q7PaeHQoSSdPOiS9YVEVMVvSW8Es5CRlhcAsw/M/T 1Tl65cNrjETAuZKL3dLH =EsZ5 -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/juanquintela/tags/migration/20170421' into staging migration/next for 20170421 # gpg: Signature made Fri 21 Apr 2017 11:28:13 BST # gpg: using RSA key 0xF487EF185872D723 # gpg: Good signature from "Juan Quintela <quintela@redhat.com>" # gpg: aka "Juan Quintela <quintela@trasno.org>" # Primary key fingerprint: 1899 FF8E DEBF 58CC EE03 4B82 F487 EF18 5872 D723 * remotes/juanquintela/tags/migration/20170421: (65 commits) hmp: info migrate_parameters format tunes hmp: info migrate_capability format tunes migration: rename max_size to threshold_size migration: set current_active_state once virtio-rng: stop virtqueue while the CPU is stopped migration: don't close a file descriptor while it can be in use ram: Remove migration_bitmap_extend() migration: Disable hotplug/unplug during migration qdev: Move qdev_unplug() to qdev-monitor.c qdev: Export qdev_hot_removed qdev: qdev_hotplug is really a bool migration: Remove MigrationState parameter from migration_is_idle() ram: Use RAMBitmap type for coherence ram: rename last_ram_offset() last_ram_pages() ram: Use ramblock and page offset instead of absolute offset ram: Change offset field in PageSearchStatus to page ram: Remember last_page instead of last_offset ram: Use page number instead of an address for the bitmap operations ram: reorganize last_sent_block ram: ram_discard_range() don't use the mis parameter ... Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
32c7e0ab75
18 changed files with 839 additions and 779 deletions
|
@ -11,8 +11,11 @@ virtio_set_status(void *vdev, uint8_t val) "vdev %p val %u"
|
|||
|
||||
# hw/virtio/virtio-rng.c
|
||||
virtio_rng_guest_not_ready(void *rng) "rng %p: guest not ready"
|
||||
virtio_rng_cpu_is_stopped(void *rng, int size) "rng %p: cpu is stopped, dropping %d bytes"
|
||||
virtio_rng_popped(void *rng) "rng %p: elem popped"
|
||||
virtio_rng_pushed(void *rng, size_t len) "rng %p: %zd bytes pushed"
|
||||
virtio_rng_request(void *rng, size_t size, unsigned quota) "rng %p: %zd bytes requested, %u bytes quota left"
|
||||
virtio_rng_vm_state_change(void *rng, int running, int state) "rng %p: state change to running %d state %d"
|
||||
|
||||
# hw/virtio/virtio-balloon.c
|
||||
#
|
||||
|
|
|
@ -53,6 +53,15 @@ static void chr_read(void *opaque, const void *buf, size_t size)
|
|||
return;
|
||||
}
|
||||
|
||||
/* we can't modify the virtqueue until
|
||||
* our state is fully synced
|
||||
*/
|
||||
|
||||
if (!runstate_check(RUN_STATE_RUNNING)) {
|
||||
trace_virtio_rng_cpu_is_stopped(vrng, size);
|
||||
return;
|
||||
}
|
||||
|
||||
vrng->quota_remaining -= size;
|
||||
|
||||
offset = 0;
|
||||
|
@ -61,6 +70,7 @@ static void chr_read(void *opaque, const void *buf, size_t size)
|
|||
if (!elem) {
|
||||
break;
|
||||
}
|
||||
trace_virtio_rng_popped(vrng);
|
||||
len = iov_from_buf(elem->in_sg, elem->in_num,
|
||||
0, buf + offset, size - offset);
|
||||
offset += len;
|
||||
|
@ -120,17 +130,21 @@ static uint64_t get_features(VirtIODevice *vdev, uint64_t f, Error **errp)
|
|||
return f;
|
||||
}
|
||||
|
||||
static int virtio_rng_post_load(void *opaque, int version_id)
|
||||
static void virtio_rng_vm_state_change(void *opaque, int running,
|
||||
RunState state)
|
||||
{
|
||||
VirtIORNG *vrng = opaque;
|
||||
|
||||
/* We may have an element ready but couldn't process it due to a quota
|
||||
* limit. Make sure to try again after live migration when the quota may
|
||||
* have been reset.
|
||||
*/
|
||||
virtio_rng_process(vrng);
|
||||
trace_virtio_rng_vm_state_change(vrng, running, state);
|
||||
|
||||
return 0;
|
||||
/* We may have an element ready but couldn't process it due to a quota
|
||||
* limit or because CPU was stopped. Make sure to try again when the
|
||||
* CPU restart.
|
||||
*/
|
||||
|
||||
if (running && is_guest_ready(vrng)) {
|
||||
virtio_rng_process(vrng);
|
||||
}
|
||||
}
|
||||
|
||||
static void check_rate_limit(void *opaque)
|
||||
|
@ -198,6 +212,9 @@ static void virtio_rng_device_realize(DeviceState *dev, Error **errp)
|
|||
vrng->rate_limit_timer = timer_new_ms(QEMU_CLOCK_VIRTUAL,
|
||||
check_rate_limit, vrng);
|
||||
vrng->activate_timer = true;
|
||||
|
||||
vrng->vmstate = qemu_add_vm_change_state_handler(virtio_rng_vm_state_change,
|
||||
vrng);
|
||||
}
|
||||
|
||||
static void virtio_rng_device_unrealize(DeviceState *dev, Error **errp)
|
||||
|
@ -205,6 +222,7 @@ static void virtio_rng_device_unrealize(DeviceState *dev, Error **errp)
|
|||
VirtIODevice *vdev = VIRTIO_DEVICE(dev);
|
||||
VirtIORNG *vrng = VIRTIO_RNG(dev);
|
||||
|
||||
qemu_del_vm_change_state_handler(vrng->vmstate);
|
||||
timer_del(vrng->rate_limit_timer);
|
||||
timer_free(vrng->rate_limit_timer);
|
||||
virtio_cleanup(vdev);
|
||||
|
@ -218,7 +236,6 @@ static const VMStateDescription vmstate_virtio_rng = {
|
|||
VMSTATE_VIRTIO_DEVICE,
|
||||
VMSTATE_END_OF_LIST()
|
||||
},
|
||||
.post_load = virtio_rng_post_load,
|
||||
};
|
||||
|
||||
static Property virtio_rng_properties[] = {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue