From: Jianjun Duan <duanj@linux.vnet.ibm.com>
To: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
Cc: Sascha Silbe <silbe@linux.vnet.ibm.com>,
qemu-devel@nongnu.org, veroniabahaa@gmail.com,
peter.maydell@linaro.org, quintela@redhat.com, mst@redhat.com,
mark.cave-ayland@ilande.co.uk, mdroth@linux.vnet.ibm.com,
mreitz@redhat.com, blauwirbel@gmail.com, dmitry@daynix.com,
qemu-ppc@nongnu.org, kraxel@redhat.com, pbonzini@redhat.com,
amit.shah@redhat.com, kwolf@redhat.com,
david@gibson.dropbear.id.au, leon.alrae@imgtec.com,
aurelien@aurel32.net, rth@twiddle.net
Subject: Re: [Qemu-devel] [Qemu-ppc] [QEMU RFC PATCH v3 4/6] Migration: migrate QTAILQ
Date: Tue, 7 Jun 2016 09:43:06 -0700 [thread overview]
Message-ID: <5756F99A.3080204@linux.vnet.ibm.com> (raw)
In-Reply-To: <20160607144313.GC2257@work-vm>
On 06/07/2016 07:43 AM, Dr. David Alan Gilbert wrote:
> * Jianjun Duan (duanj@linux.vnet.ibm.com) wrote:
>> Hi Sascha,
>>
>> On 06/02/2016 08:01 AM, Sascha Silbe wrote:
>>> Dear Jianjun,
>>>
>>> Jianjun Duan <duanj@linux.vnet.ibm.com> writes:
>>>
>>> [include/migration/vmstate.h]
>>>> @@ -185,6 +185,8 @@ enum VMStateFlags {
>>>> * to determine the number of entries in the array. Only valid in
>>>> * combination with one of VMS_VARRAY*. */
>>>> VMS_MULTIPLY_ELEMENTS = 0x4000,
>>>> + /* For fields which need customized handling, such as QTAILQ in queue.h*/
>>>> + VMS_CSTM = 0x8000,
>>>
>>> Can you describe (in the comment) how this customised handling is
>>> performed, please? I.e. describe what exactly happens if the flag is
>>> set, from the point of view of an API consumer.
>>
>> I will add more comments. When this flag is set VMStateInfo.get/put will
>> be used in vmstate_load/save_state instead of recursive call. And the
>> user should implement VMStateInfo.get/put to handle the concerned data
>> structure.
>>> Also, why do you need this flag at all? The only change I can see is
>>> that you pass additional information to VMStateInfo.get() / .put(),
>>> using NULL if it's not set. Why don't you just always pass the
>>> additional information? If the additional information is not needed by
>>> get() / put() the parameter will be unused anyway.
>> You can do it without creating this flag. Instead just to check if info
>> is set in the field. However I think it is more readable and more robust
>> to check this flag in vmstate_load/get_state.
>
> Apologies for not getting around to this sooner; I was on holiday when you first
> sent it.
>
> But:
> a) Is there a reason to use the 'bool' between each element; can't you count the
> length of the queue, send the length and then send the contents? In that case
> it should look a lot more like an ARRAY case on the wire.
> b) I think you should really try and split it into two parts:
> 1) A VMSTATE_ARRAY_CUSTOM (?) - so it's an array of elements but we've got a special
> way of allocating/counting/reading the elements
> 2) A version of that which is for a QTAILQ.
> It's important that whatever ends up on the migration stream doesn't reflect
> that it happens to be implemented as a QTAILQ; so if you decide to change
> it later the migration compatibility doesn't break.
There are certainly more than one way to do this. I have thought about
the way you suggested and decided not to do it that way. We either need
to track its size, which means new element in the structure containing
the queue, or go through the queue and count it. I don't want to add an
element unless it is necessary. Counting and dumping the queue will go
through the queue twice. Current solution only goes through the queue
once. Besides, the queue is recursive and current solution is a natural
one.
> c) Use new trace_ names for get_qtailq rather than misusing trace_vmstate_load_state*
> d) Add a trace_ for put_qtailq as well - that way when it goes horribly wrong we can
> turn the tracing on on both sides :-)
> e) Is there anyway to make QTAILQ_RAW_INSERT_TAIL any more readable?
> I don't think I understand why you can't use the standard QTAILQ macros.
I agree with this one. Need to make the trace more specific.
> f) You might need to fix up Amit's scripts/vmstate-static-checker.py
Will check it.
>
> Dave
>
>>> Sascha
>>>
>>
>> Thanks,
>> Jianjun
>>
>>
> --
> Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
>
Thanks,
Jianjun
next prev parent reply other threads:[~2016-06-07 16:43 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-31 18:02 [Qemu-devel] [QEMU RFC PATCH v3 0/6]Migration: ensure hotplug and migration work together Jianjun Duan
2016-05-31 18:02 ` [Qemu-devel] [QEMU RFC PATCH v3 1/6] Migration: Defined VMStateDescription struct for spapr_drc Jianjun Duan
2016-06-02 4:07 ` David Gibson
2016-06-03 0:28 ` Jianjun Duan
2016-06-03 1:48 ` David Gibson
2016-05-31 18:02 ` [Qemu-devel] [QEMU RFC PATCH v3 2/6] vmstate: Define VARRAY with VMS_ALLOC Jianjun Duan
2016-05-31 18:02 ` [Qemu-devel] [QEMU RFC PATCH v3 3/6] Migration: extend VMStateInfo Jianjun Duan
2016-05-31 18:02 ` [Qemu-devel] [QEMU RFC PATCH v3 4/6] Migration: migrate QTAILQ Jianjun Duan
2016-05-31 19:54 ` Paolo Bonzini
2016-05-31 21:53 ` Jianjun Duan
2016-06-01 15:29 ` Paolo Bonzini
2016-06-01 17:06 ` Jianjun Duan
2016-06-01 18:32 ` Paolo Bonzini
2016-06-02 3:58 ` David Gibson
2016-06-02 15:01 ` Sascha Silbe
2016-06-02 16:11 ` Jianjun Duan
2016-06-07 14:43 ` Dr. David Alan Gilbert
2016-06-07 16:31 ` Paolo Bonzini
2016-06-07 16:33 ` Michael S. Tsirkin
2016-06-07 16:34 ` Dr. David Alan Gilbert
2016-06-07 16:35 ` Paolo Bonzini
2016-06-07 16:46 ` Dr. David Alan Gilbert
2016-06-07 16:43 ` Jianjun Duan [this message]
2016-06-03 17:12 ` Jianjun Duan
2016-06-06 13:47 ` Paolo Bonzini
2016-05-31 18:02 ` [Qemu-devel] [QEMU RFC PATCH v3 5/6] Migration: migrate ccs_list in spapr state Jianjun Duan
2016-05-31 18:02 ` [Qemu-devel] [QEMU RFC PATCH v3 6/6] Migration: migrate pending_events of " Jianjun Duan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5756F99A.3080204@linux.vnet.ibm.com \
--to=duanj@linux.vnet.ibm.com \
--cc=amit.shah@redhat.com \
--cc=aurelien@aurel32.net \
--cc=blauwirbel@gmail.com \
--cc=david@gibson.dropbear.id.au \
--cc=dgilbert@redhat.com \
--cc=dmitry@daynix.com \
--cc=kraxel@redhat.com \
--cc=kwolf@redhat.com \
--cc=leon.alrae@imgtec.com \
--cc=mark.cave-ayland@ilande.co.uk \
--cc=mdroth@linux.vnet.ibm.com \
--cc=mreitz@redhat.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
--cc=quintela@redhat.com \
--cc=rth@twiddle.net \
--cc=silbe@linux.vnet.ibm.com \
--cc=veroniabahaa@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).