Lines Matching refs:field

31 vmstate_field_exists(const VMStateDescription *vmsd, const VMStateField *field,  in vmstate_field_exists()  argument
36 if (field->field_exists) { in vmstate_field_exists()
38 result = field->field_exists(opaque, version_id); in vmstate_field_exists()
39 trace_vmstate_field_exists(vmsd->name, field->name, field->version_id, in vmstate_field_exists()
47 result = field->version_id <= version_id; in vmstate_field_exists()
53 static int vmstate_n_elems(void *opaque, const VMStateField *field) in vmstate_n_elems() argument
57 if (field->flags & VMS_ARRAY) { in vmstate_n_elems()
58 n_elems = field->num; in vmstate_n_elems()
59 } else if (field->flags & VMS_VARRAY_INT32) { in vmstate_n_elems()
60 n_elems = *(int32_t *)(opaque + field->num_offset); in vmstate_n_elems()
61 } else if (field->flags & VMS_VARRAY_UINT32) { in vmstate_n_elems()
62 n_elems = *(uint32_t *)(opaque + field->num_offset); in vmstate_n_elems()
63 } else if (field->flags & VMS_VARRAY_UINT16) { in vmstate_n_elems()
64 n_elems = *(uint16_t *)(opaque + field->num_offset); in vmstate_n_elems()
65 } else if (field->flags & VMS_VARRAY_UINT8) { in vmstate_n_elems()
66 n_elems = *(uint8_t *)(opaque + field->num_offset); in vmstate_n_elems()
69 if (field->flags & VMS_MULTIPLY_ELEMENTS) { in vmstate_n_elems()
70 n_elems *= field->num; in vmstate_n_elems()
73 trace_vmstate_n_elems(field->name, n_elems); in vmstate_n_elems()
77 static int vmstate_size(void *opaque, const VMStateField *field) in vmstate_size() argument
79 int size = field->size; in vmstate_size()
81 if (field->flags & VMS_VBUFFER) { in vmstate_size()
82 size = *(int32_t *)(opaque + field->size_offset); in vmstate_size()
83 if (field->flags & VMS_MULTIPLY) { in vmstate_size()
84 size *= field->size; in vmstate_size()
91 static void vmstate_handle_alloc(void *ptr, const VMStateField *field, in vmstate_handle_alloc() argument
94 if (field->flags & VMS_POINTER && field->flags & VMS_ALLOC) { in vmstate_handle_alloc()
95 gsize size = vmstate_size(opaque, field); in vmstate_handle_alloc()
96 size *= vmstate_n_elems(opaque, field); in vmstate_handle_alloc()
106 const VMStateField *field = vmsd->fields; in vmstate_load_state() local
130 while (field->name) { in vmstate_load_state()
131 trace_vmstate_load_state_field(vmsd->name, field->name); in vmstate_load_state()
132 if (vmstate_field_exists(vmsd, field, opaque, version_id)) { in vmstate_load_state()
133 void *first_elem = opaque + field->offset; in vmstate_load_state()
134 int i, n_elems = vmstate_n_elems(opaque, field); in vmstate_load_state()
135 int size = vmstate_size(opaque, field); in vmstate_load_state()
137 vmstate_handle_alloc(first_elem, field, opaque); in vmstate_load_state()
138 if (field->flags & VMS_POINTER) { in vmstate_load_state()
145 if (field->flags & VMS_ARRAY_OF_POINTER) { in vmstate_load_state()
150 assert(field->flags & VMS_ARRAY_OF_POINTER); in vmstate_load_state()
152 } else if (field->flags & VMS_STRUCT) { in vmstate_load_state()
153 ret = vmstate_load_state(f, field->vmsd, curr_elem, in vmstate_load_state()
154 field->vmsd->version_id); in vmstate_load_state()
155 } else if (field->flags & VMS_VSTRUCT) { in vmstate_load_state()
156 ret = vmstate_load_state(f, field->vmsd, curr_elem, in vmstate_load_state()
157 field->struct_version_id); in vmstate_load_state()
159 ret = field->info->get(f, curr_elem, size, field); in vmstate_load_state()
167 field->name); in vmstate_load_state()
168 trace_vmstate_load_field_error(field->name, ret); in vmstate_load_state()
172 } else if (field->flags & VMS_MUST_EXIST) { in vmstate_load_state()
174 vmsd->name, field->name); in vmstate_load_state()
177 field++; in vmstate_load_state()
179 assert(field->flags == VMS_END); in vmstate_load_state()
195 const VMStateField *field; in vmfield_name_num() local
198 for (field = start; field->name; field++) { in vmfield_name_num()
199 if (!strcmp(field->name, search->name)) { in vmfield_name_num()
200 if (field == search) { in vmfield_name_num()
213 const VMStateField *field; in vmfield_name_is_unique() local
216 for (field = start; field->name; field++) { in vmfield_name_is_unique()
217 if (!strcmp(field->name, search->name)) { in vmfield_name_is_unique()
229 static const char *vmfield_get_type_name(const VMStateField *field) in vmfield_get_type_name() argument
233 if (field->flags & VMS_STRUCT) { in vmfield_get_type_name()
235 } else if (field->flags & VMS_VSTRUCT) { in vmfield_get_type_name()
237 } else if (field->info->name) { in vmfield_get_type_name()
238 type = field->info->name; in vmfield_get_type_name()
244 static bool vmsd_can_compress(const VMStateField *field) in vmsd_can_compress() argument
246 if (field->field_exists) { in vmsd_can_compress()
251 if (field->flags & VMS_STRUCT) { in vmsd_can_compress()
252 const VMStateField *sfield = field->vmsd->fields; in vmsd_can_compress()
261 if (field->vmsd->subsections) { in vmsd_can_compress()
272 const VMStateField *field, int i, int max) in vmsd_desc_field_start() argument
276 bool can_compress = vmsd_can_compress(field); in vmsd_desc_field_start()
282 name = g_strdup(field->name); in vmsd_desc_field_start()
285 if (!vmfield_name_is_unique(vmsd->fields, field)) { in vmsd_desc_field_start()
286 int num = vmfield_name_num(vmsd->fields, field); in vmsd_desc_field_start()
301 json_writer_str(vmdesc, "type", vmfield_get_type_name(field)); in vmsd_desc_field_start()
303 if (field->flags & VMS_STRUCT) { in vmsd_desc_field_start()
312 const VMStateField *field, size_t size, int i) in vmsd_desc_field_end() argument
318 if (field->flags & VMS_STRUCT) { in vmsd_desc_field_end()
354 const VMStateField *field = vmsd->fields; in vmstate_save_state_v() local
373 while (field->name) { in vmstate_save_state_v()
374 if (vmstate_field_exists(vmsd, field, opaque, version_id)) { in vmstate_save_state_v()
375 void *first_elem = opaque + field->offset; in vmstate_save_state_v()
376 int i, n_elems = vmstate_n_elems(opaque, field); in vmstate_save_state_v()
377 int size = vmstate_size(opaque, field); in vmstate_save_state_v()
381 trace_vmstate_save_state_loop(vmsd->name, field->name, n_elems); in vmstate_save_state_v()
382 if (field->flags & VMS_POINTER) { in vmstate_save_state_v()
389 vmsd_desc_field_start(vmsd, vmdesc_loop, field, i, n_elems); in vmstate_save_state_v()
391 if (field->flags & VMS_ARRAY_OF_POINTER) { in vmstate_save_state_v()
397 assert(field->flags & VMS_ARRAY_OF_POINTER); in vmstate_save_state_v()
400 } else if (field->flags & VMS_STRUCT) { in vmstate_save_state_v()
401 ret = vmstate_save_state(f, field->vmsd, curr_elem, in vmstate_save_state_v()
403 } else if (field->flags & VMS_VSTRUCT) { in vmstate_save_state_v()
404 ret = vmstate_save_state_v(f, field->vmsd, curr_elem, in vmstate_save_state_v()
406 field->struct_version_id, errp); in vmstate_save_state_v()
408 ret = field->info->put(f, curr_elem, size, field, in vmstate_save_state_v()
413 vmsd->name, field->name); in vmstate_save_state_v()
421 vmsd_desc_field_end(vmsd, vmdesc_loop, field, written_bytes, i); in vmstate_save_state_v()
424 if (vmdesc_loop && vmsd_can_compress(field)) { in vmstate_save_state_v()
429 if (field->flags & VMS_MUST_EXIST) { in vmstate_save_state_v()
431 vmsd->name, field->name); in vmstate_save_state_v()
432 assert(!(field->flags & VMS_MUST_EXIST)); in vmstate_save_state_v()
435 field++; in vmstate_save_state_v()
437 assert(field->flags == VMS_END); in vmstate_save_state_v()