From: Peter Xu <peterx@redhat.com>
To: Auger Eric <eric.auger@redhat.com>
Cc: quintela@redhat.com, qemu-devel@nongnu.org, dgilbert@redhat.com,
eric.auger.pro@gmail.com
Subject: Re: [PATCH v3] migration: Support gtree migration
Date: Thu, 10 Oct 2019 19:35:41 +0800 [thread overview]
Message-ID: <20191010113541.GG18958@xz-x1> (raw)
In-Reply-To: <27d37e80-31d8-006a-b2a8-c61c5129c7c4@redhat.com>
On Thu, Oct 10, 2019 at 09:57:01AM +0200, Auger Eric wrote:
> >> +static gboolean put_gtree_elem(gpointer key, gpointer value, gpointer data)
> >> +{
> >> + struct put_gtree_data *capsule = (struct put_gtree_data *)data;
> >> + QEMUFile *f = capsule->f;
> >> + int ret;
> >> +
> >> + qemu_put_byte(f, true);
> >> +
> >> + /* put the key */
> >> + if (!capsule->key_vmsd) {
> >> + qemu_put_be32(f, GPOINTER_TO_UINT(key)); /* direct key */
> >
> > This is special code path for direct key case. Can we simply define
> > VMSTATE_GTREE_DIRECT_KEY_V() somehow better so that it just uses the
> > VMSTATE_UINT32_V() as the key vmsd? Then iiuc vmstate_save_state()
> > could work well with that too.
> if the key_vmsd is a VMSTATE_UINT32_V then I understand
> vmstate_save_state(f, capsule->key_vmsd, key, capsule->vmdesc)
> expects key to be a pointer to a uint32. But in that case of direct key,
> it is a uint32. I don't figure out how to use vmstate_save_state in your
> proposal.
Ah I see the point. And indeed I can't think of a better way now
(e.g., maybe I will always try to use GTrees with malloc()ed keys to
be simple when I want to migrate a gtree, but yeah that's not a reason
to refuse this patch :).
Though we should be very careful on defining vmsds for GTrees in the
future with the help of this patch, and we must have the type (either
direct or not) to match the real usage of the tree otherwise QEMU can
potentially unreference the constant as a pointer.
>
> >
> > Also, should we avoid using UINT in all cases? But of course if we
> > start to use VMSTATE_UINT32_V then we don't have this issue.
> Depending on the clarification of above point, maybe I can rename
> VMSTATE_GTREE_DIRECT_KEY_V into VMSTATE_GTREE_DIRECT_UINT_KEY_V
>
> direct keys seem to be more common for hash tables actually.
> https://developer.gnome.org/glib/stable/glib-Hash-Tables.html#g-hash-table-new-full
>
> There are stand conversion macros to/from int, uint, size
> https://developer.gnome.org/glib/stable/glib-Type-Conversion-Macros.html
Yeh it's fine to use direct keys. Though my question was more about
"unsigned int" - here when we put, we cast a pointer into unsigned
int, which can be 2/4 bytes, IIUC. I'm thinking whether at least we
should use direct cast (e.g., (uint32_t)ptr) to replace
GPOINTER_TO_UINT() to make sure it's 4 bytes. Futher, maybe we should
start with uint64_t here in the migration stream, otherwise we should
probably drop the high 32 bits if we migrate a gtree whose key is 64
bits long (and since we're working with migration we won't be able to
change that in the future for compatibility reasons...).
Summary:
Maybe we can replace:
qemu_put_be32(f, GPOINTER_TO_UINT(key)); /* direct key */
To:
qemu_put_be64(f, (uint64_t)key); /* direct key */
And apply similar thing to get() side?
Thanks,
--
Peter Xu
next prev parent reply other threads:[~2019-10-10 11:42 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-10-04 11:20 [PATCH v3] migration: Support gtree migration Eric Auger
2019-10-04 22:34 ` Juan Quintela
2019-10-10 7:32 ` Auger Eric
2019-10-09 6:28 ` Peter Xu
2019-10-10 7:57 ` Auger Eric
2019-10-10 11:35 ` Peter Xu [this message]
2019-10-10 12:11 ` Auger Eric
2019-10-10 12:35 ` Peter Xu
2019-10-10 18:52 ` Auger Eric
2019-10-10 18:53 ` Dr. David Alan Gilbert
2019-10-10 19:42 ` Auger Eric
2019-10-09 9:57 ` Dr. David Alan Gilbert
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=20191010113541.GG18958@xz-x1 \
--to=peterx@redhat.com \
--cc=dgilbert@redhat.com \
--cc=eric.auger.pro@gmail.com \
--cc=eric.auger@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.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).