On 01/28/2011 08:21 AM, Yoshiaki Tamura wrote:
+int qemu_savevm_trans_begin(Monitor *mon, QEMUFile *f, int init) +{ + SaveStateEntry *se; + int skipped = 0; + + QTAILQ_FOREACH(se,&savevm_handlers, entry) { + int len, stage, ret; + + if (se->save_live_state == NULL) { + continue; + } + + /* Section type */ + qemu_put_byte(f, QEMU_VM_SECTION_START); + qemu_put_be32(f, se->section_id); + + /* ID string */ + len = strlen(se->idstr); + qemu_put_byte(f, len); + qemu_put_buffer(f, (uint8_t *)se->idstr, len); + + qemu_put_be32(f, se->instance_id); + qemu_put_be32(f, se->version_id); + + stage = init ? QEMU_VM_SECTION_START : QEMU_VM_SECTION_PART; + ret = se->save_live_state(mon, f, stage, se->opaque); + if (!ret) { + skipped++; + } + } + + if (qemu_file_has_error(f)) { + return -EIO; + } + + return skipped; +} +
Right now, this is very similar to qemu_savevm_state_begin and _iterate, but not quite. Perhaps you could abstract it to a single function that could be used everywhere live handlers are used. For example,
/* section says which header to write; incremental == true forces to pass SECTION_PART instead of SECTION_START. In code: if (section == QEMU_VM_SECTION_START) { stage = incremental ? QEMU_VM_SECTION_PART : QEMU_VM_SECTION_START; } else { assert(incremental); stage = section; } */ int qemu_savevm_state_live(Monitor *mon, QEMUFile *f, int section, int incremental) Likewise,
+ QTAILQ_FOREACH(se, &savevm_handlers, entry) { + int len; + + if (se->save_state == NULL && se->vmsd == NULL) { + continue; + } + + /* Section type */ + qemu_put_byte(f, QEMU_VM_SECTION_FULL); + qemu_put_be32(f, se->section_id); + + /* ID string */ + len = strlen(se->idstr); + qemu_put_byte(f, len); + qemu_put_buffer(f, (uint8_t *)se->idstr, len); + + qemu_put_be32(f, se->instance_id); + qemu_put_be32(f, se->version_id); + + vmstate_save(f, se); + }
this code is straight from qemu_savevm_state_complete and should be moved into its own function.
Paolo -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html