On 10/07/2016 09:32 AM, Paolo Bonzini wrote: > > > On 07/10/2016 18:31, Jianjun Duan wrote: >> >> >> On 10/07/2016 07:34 AM, Dr. David Alan Gilbert wrote: >>> * Paolo Bonzini (pbonz...@redhat.com) wrote: >>>> >>>> >>>> On 06/10/2016 21:01, Dr. David Alan Gilbert wrote: >>>>>>>> + } else if (field->flags & VMS_LINKED) { >>>>>>>> + ret = field->info->get(f, addr, size, field); >>>>>>>> } else { >>>>>>>> ret = field->info->get(f, addr, size, NULL); >>>>>>>> >>>>>>>> @@ -193,6 +197,8 @@ static const char >>>>>>>> *vmfield_get_type_name(VMStateField *field) >>>>>>>> >>>>>>>> if (field->flags & VMS_STRUCT) { >>>>>>>> type = "struct"; >>>>>>>> + } else if (field->flags & VMS_LINKED) { >>>>>>>> + type = "linked"; >>>>>>>> } else if (field->info->name) { >>>>>>>> type = field->info->name; >>>>>>>> } >>>>>>>> @@ -327,6 +333,8 @@ void vmstate_save_state(QEMUFile *f, const >>>>>>>> VMStateDescription *vmsd, >>>>>>>> } >>>>>>>> if (field->flags & VMS_STRUCT) { >>>>>>>> vmstate_save_state(f, field->vmsd, addr, >>>>>>>> vmdesc_loop); >>>>>>>> + } else if (field->flags & VMS_LINKED) { >>>>>>>> + field->info->put(f, addr, size, field, >>>>>>>> vmdesc_loop); >>>>>>>> } else { >>>>>>>> field->info->put(f, addr, size, NULL, NULL); >>>>>>>> } >>>> >>>> Is VMS_LINKED needed at all, since the fields are unused for every >>>> VMStateInfo except qtailq? >>> >>> No, I think you could easily drop the VMS_LINKED and just always pass them >>> in. >> >> It is needed if we want to use vmdesc_loop. > > Just always pass it in, can't you? > Could that lead to repetition of array elements? I know it depends on individual put details.
Thanks, Jianjun > Paolo >