Lines Matching refs:vmsd
24 static int vmstate_subsection_save(QEMUFile *f, const VMStateDescription *vmsd,
27 static int vmstate_subsection_load(QEMUFile *f, const VMStateDescription *vmsd,
32 vmstate_field_exists(const VMStateDescription *vmsd, const VMStateField *field, in vmstate_field_exists() argument
40 trace_vmstate_field_exists(vmsd->name, field->name, field->version_id, in vmstate_field_exists()
104 int vmstate_load_state(QEMUFile *f, const VMStateDescription *vmsd, in vmstate_load_state() argument
107 const VMStateField *field = vmsd->fields; in vmstate_load_state()
110 trace_vmstate_load_state(vmsd->name, version_id); in vmstate_load_state()
111 if (version_id > vmsd->version_id) { in vmstate_load_state()
114 vmsd->name, version_id, vmsd->version_id); in vmstate_load_state()
115 trace_vmstate_load_state_end(vmsd->name, "too new", -EINVAL); in vmstate_load_state()
118 if (version_id < vmsd->minimum_version_id) { in vmstate_load_state()
121 vmsd->name, version_id, vmsd->minimum_version_id); in vmstate_load_state()
122 trace_vmstate_load_state_end(vmsd->name, "too old", -EINVAL); in vmstate_load_state()
125 if (vmsd->pre_load) { in vmstate_load_state()
126 ret = vmsd->pre_load(opaque); in vmstate_load_state()
132 bool exists = vmstate_field_exists(vmsd, field, opaque, version_id); in vmstate_load_state()
133 trace_vmstate_load_state_field(vmsd->name, field->name, exists); in vmstate_load_state()
155 ret = vmstate_load_state(f, field->vmsd, curr_elem, in vmstate_load_state()
156 field->vmsd->version_id); in vmstate_load_state()
158 ret = vmstate_load_state(f, field->vmsd, curr_elem, in vmstate_load_state()
168 error_report("Failed to load %s:%s", vmsd->name, in vmstate_load_state()
176 vmsd->name, field->name); in vmstate_load_state()
182 ret = vmstate_subsection_load(f, vmsd, opaque); in vmstate_load_state()
187 if (vmsd->post_load) { in vmstate_load_state()
188 ret = vmsd->post_load(opaque, version_id); in vmstate_load_state()
190 trace_vmstate_load_state_end(vmsd->name, "end", ret); in vmstate_load_state()
254 const VMStateField *sfield = field->vmsd->fields; in vmsd_can_compress()
263 if (field->vmsd->subsections) { in vmsd_can_compress()
272 static void vmsd_desc_field_start(const VMStateDescription *vmsd, in vmsd_desc_field_start() argument
287 if (!vmfield_name_is_unique(vmsd->fields, field)) { in vmsd_desc_field_start()
288 int num = vmfield_name_num(vmsd->fields, field); in vmsd_desc_field_start()
312 static void vmsd_desc_field_end(const VMStateDescription *vmsd, in vmsd_desc_field_end() argument
330 bool vmstate_section_needed(const VMStateDescription *vmsd, void *opaque) in vmstate_section_needed() argument
332 if (vmsd->needed && !vmsd->needed(opaque)) { in vmstate_section_needed()
340 int vmstate_save_state(QEMUFile *f, const VMStateDescription *vmsd, in vmstate_save_state() argument
343 return vmstate_save_state_v(f, vmsd, opaque, vmdesc_id, vmsd->version_id, NULL); in vmstate_save_state()
346 int vmstate_save_state_with_err(QEMUFile *f, const VMStateDescription *vmsd, in vmstate_save_state_with_err() argument
349 return vmstate_save_state_v(f, vmsd, opaque, vmdesc_id, vmsd->version_id, errp); in vmstate_save_state_with_err()
352 int vmstate_save_state_v(QEMUFile *f, const VMStateDescription *vmsd, in vmstate_save_state_v() argument
356 const VMStateField *field = vmsd->fields; in vmstate_save_state_v()
358 trace_vmstate_save_state_top(vmsd->name); in vmstate_save_state_v()
360 if (vmsd->pre_save) { in vmstate_save_state_v()
361 ret = vmsd->pre_save(opaque); in vmstate_save_state_v()
362 trace_vmstate_save_state_pre_save_res(vmsd->name, ret); in vmstate_save_state_v()
364 error_setg(errp, "pre-save failed: %s", vmsd->name); in vmstate_save_state_v()
370 json_writer_str(vmdesc, "vmsd_name", vmsd->name); in vmstate_save_state_v()
376 if (vmstate_field_exists(vmsd, field, opaque, version_id)) { in vmstate_save_state_v()
383 trace_vmstate_save_state_loop(vmsd->name, field->name, n_elems); in vmstate_save_state_v()
391 vmsd_desc_field_start(vmsd, vmdesc_loop, field, i, n_elems); in vmstate_save_state_v()
403 ret = vmstate_save_state(f, field->vmsd, curr_elem, in vmstate_save_state_v()
406 ret = vmstate_save_state_v(f, field->vmsd, curr_elem, in vmstate_save_state_v()
415 vmsd->name, field->name); in vmstate_save_state_v()
416 if (vmsd->post_save) { in vmstate_save_state_v()
417 vmsd->post_save(opaque); in vmstate_save_state_v()
423 vmsd_desc_field_end(vmsd, vmdesc_loop, field, written_bytes, i); in vmstate_save_state_v()
433 vmsd->name, field->name); in vmstate_save_state_v()
445 ret = vmstate_subsection_save(f, vmsd, opaque, vmdesc, errp); in vmstate_save_state_v()
447 if (vmsd->post_save) { in vmstate_save_state_v()
448 int ps_ret = vmsd->post_save(opaque); in vmstate_save_state_v()
451 error_setg(errp, "post-save failed: %s", vmsd->name); in vmstate_save_state_v()
471 static int vmstate_subsection_load(QEMUFile *f, const VMStateDescription *vmsd, in vmstate_subsection_load() argument
474 trace_vmstate_subsection_load(vmsd->name); in vmstate_subsection_load()
483 if (len < strlen(vmsd->name) + 1) { in vmstate_subsection_load()
485 trace_vmstate_subsection_load_bad(vmsd->name, "(short)", ""); in vmstate_subsection_load()
490 trace_vmstate_subsection_load_bad(vmsd->name, "(peek fail)", ""); in vmstate_subsection_load()
496 if (strncmp(vmsd->name, idstr, strlen(vmsd->name)) != 0) { in vmstate_subsection_load()
497 trace_vmstate_subsection_load_bad(vmsd->name, idstr, "(prefix)"); in vmstate_subsection_load()
501 sub_vmsd = vmstate_get_subsection(vmsd->subsections, idstr); in vmstate_subsection_load()
503 trace_vmstate_subsection_load_bad(vmsd->name, idstr, "(lookup)"); in vmstate_subsection_load()
513 trace_vmstate_subsection_load_bad(vmsd->name, idstr, "(child)"); in vmstate_subsection_load()
518 trace_vmstate_subsection_load_good(vmsd->name); in vmstate_subsection_load()
522 static int vmstate_subsection_save(QEMUFile *f, const VMStateDescription *vmsd, in vmstate_subsection_save() argument
526 const VMStateDescription * const *sub = vmsd->subsections; in vmstate_subsection_save()
530 trace_vmstate_subsection_save_top(vmsd->name); in vmstate_subsection_save()
536 trace_vmstate_subsection_save_loop(vmsd->name, vmsdsub->name); in vmstate_subsection_save()