From: Juan Quintela <quintela@redhat.com>
To: Peter Xu <peterx@redhat.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>,
"Dr . David Alan Gilbert" <dgilbert@redhat.com>,
qemu-devel@nongnu.org, Eduardo Habkost <ehabkost@redhat.com>,
Igor Mammedov <imammedo@redhat.com>
Subject: Re: [PATCH 1/2] migration: Boost SaveStateEntry.instance_id to 64 bits
Date: Tue, 15 Oct 2019 10:45:53 +0200 [thread overview]
Message-ID: <87lftmqtvi.fsf@trasno.org> (raw)
In-Reply-To: <20191015075444.10955-2-peterx@redhat.com> (Peter Xu's message of "Tue, 15 Oct 2019 15:54:43 +0800")
Peter Xu <peterx@redhat.com> wrote:
> It was "int" and used as 32bits fields (see save_section_header()).
> It's unsafe already because sizeof(int) could be 2 on i386, I think.
> So at least uint32_t would suite more. While it also uses "-1" as a
> placeholder of "we want to generate the instance ID automatically".
> Hence a more proper value should be int64_t.
>
> This will start to be useful after next patch in which we can start to
> convert a real uint32_t value as instance ID.
>
> Signed-off-by: Peter Xu <peterx@redhat.com>
Hi
Being more helpful, I think that it is better to just:
* change instance_id to be an uint32_t (notice that for all architectures
that we support, it is actually int32_t).
* export calculate_new_instance_id() and adjust callers that use -1.
or
* export a new function that just use the calculate_new_instance_id()
A fast search shows:
10 callers of vmstate_register() with -1
1 caller of vmstate_register_with_alias_id with -1 (but it is the one
that sets all qdev devices).
1 caller of vmstate_register_with_alias_id in apic, where it can be -1.
1 caller of register_savevm_live() with -1 (spapr)
And call it a day?
What do you think, Juan.
> ---
> include/migration/register.h | 2 +-
> include/migration/vmstate.h | 4 ++--
> migration/savevm.c | 10 +++++-----
> stubs/vmstate.c | 2 +-
> 4 files changed, 9 insertions(+), 9 deletions(-)
>
> diff --git a/include/migration/register.h b/include/migration/register.h
> index a13359a08d..54f42c7413 100644
> --- a/include/migration/register.h
> +++ b/include/migration/register.h
> @@ -69,7 +69,7 @@ typedef struct SaveVMHandlers {
> } SaveVMHandlers;
>
> int register_savevm_live(const char *idstr,
> - int instance_id,
> + int64_t instance_id,
> int version_id,
> const SaveVMHandlers *ops,
> void *opaque);
> diff --git a/include/migration/vmstate.h b/include/migration/vmstate.h
> index 1fbfd099dd..6a7498463c 100644
> --- a/include/migration/vmstate.h
> +++ b/include/migration/vmstate.h
> @@ -1114,14 +1114,14 @@ int vmstate_save_state_v(QEMUFile *f, const VMStateDescription *vmsd,
> bool vmstate_save_needed(const VMStateDescription *vmsd, void *opaque);
>
> /* Returns: 0 on success, -1 on failure */
> -int vmstate_register_with_alias_id(DeviceState *dev, int instance_id,
> +int vmstate_register_with_alias_id(DeviceState *dev, int64_t instance_id,
> const VMStateDescription *vmsd,
> void *base, int alias_id,
> int required_for_version,
> Error **errp);
>
> /* Returns: 0 on success, -1 on failure */
> -static inline int vmstate_register(DeviceState *dev, int instance_id,
> +static inline int vmstate_register(DeviceState *dev, int64_t instance_id,
> const VMStateDescription *vmsd,
> void *opaque)
> {
> diff --git a/migration/savevm.c b/migration/savevm.c
> index bb9462a54d..dc9281c897 100644
> --- a/migration/savevm.c
> +++ b/migration/savevm.c
> @@ -233,7 +233,7 @@ typedef struct CompatEntry {
> typedef struct SaveStateEntry {
> QTAILQ_ENTRY(SaveStateEntry) entry;
> char idstr[256];
> - int instance_id;
> + int64_t instance_id;
> int alias_id;
> int version_id;
> /* version id read from the stream */
> @@ -668,7 +668,7 @@ void dump_vmstate_json_to_file(FILE *out_file)
> static int calculate_new_instance_id(const char *idstr)
> {
> SaveStateEntry *se;
> - int instance_id = 0;
> + int64_t instance_id = 0;
>
> QTAILQ_FOREACH(se, &savevm_state.handlers, entry) {
> if (strcmp(idstr, se->idstr) == 0
> @@ -730,7 +730,7 @@ static void savevm_state_handler_insert(SaveStateEntry *nse)
> Meanwhile pass -1 as instance_id if you do not already have a clearly
> distinguishing id for all instances of your device class. */
> int register_savevm_live(const char *idstr,
> - int instance_id,
> + int64_t instance_id,
> int version_id,
> const SaveVMHandlers *ops,
> void *opaque)
> @@ -784,7 +784,7 @@ void unregister_savevm(DeviceState *dev, const char *idstr, void *opaque)
> }
> }
>
> -int vmstate_register_with_alias_id(DeviceState *dev, int instance_id,
> +int vmstate_register_with_alias_id(DeviceState *dev, int64_t instance_id,
> const VMStateDescription *vmsd,
> void *opaque, int alias_id,
> int required_for_version,
> @@ -1566,7 +1566,7 @@ int qemu_save_device_state(QEMUFile *f)
> return qemu_file_get_error(f);
> }
>
> -static SaveStateEntry *find_se(const char *idstr, int instance_id)
> +static SaveStateEntry *find_se(const char *idstr, int64_t instance_id)
> {
> SaveStateEntry *se;
>
> diff --git a/stubs/vmstate.c b/stubs/vmstate.c
> index e1e89b87f0..699003f3b0 100644
> --- a/stubs/vmstate.c
> +++ b/stubs/vmstate.c
> @@ -4,7 +4,7 @@
> const VMStateDescription vmstate_dummy = {};
>
> int vmstate_register_with_alias_id(DeviceState *dev,
> - int instance_id,
> + int64_t instance_id,
> const VMStateDescription *vmsd,
> void *base, int alias_id,
> int required_for_version,
next prev parent reply other threads:[~2019-10-15 8:48 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-10-15 7:54 [PATCH 0/2] apic: Fix migration breakage of >255 vcpus Peter Xu
2019-10-15 7:54 ` [PATCH 1/2] migration: Boost SaveStateEntry.instance_id to 64 bits Peter Xu
2019-10-15 8:34 ` Juan Quintela
2019-10-15 10:28 ` Peter Xu
2019-10-15 8:45 ` Juan Quintela [this message]
2019-10-15 8:57 ` Dr. David Alan Gilbert
2019-10-15 12:57 ` Juan Quintela
2019-10-15 10:23 ` Peter Xu
2019-10-15 7:54 ` [PATCH 2/2] apic: Use 32bit APIC ID for migration instance ID Peter Xu
2019-10-15 8:30 ` Juan Quintela
2019-10-15 9:22 ` Dr. David Alan Gilbert
2019-10-15 10:16 ` Peter Xu
2019-10-15 11:02 ` Dr. David Alan Gilbert
2019-10-15 19:49 ` Eduardo Habkost
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=87lftmqtvi.fsf@trasno.org \
--to=quintela@redhat.com \
--cc=dgilbert@redhat.com \
--cc=ehabkost@redhat.com \
--cc=imammedo@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peterx@redhat.com \
--cc=qemu-devel@nongnu.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.