From: Fabiano Rosas <farosas@suse.de>
To: Peter Xu <peterx@redhat.com>, qemu-devel@nongnu.org
Cc: Peter Maydell <peter.maydell@linaro.org>,
peterx@redhat.com, Juraj Marcin <jmarcin@redhat.com>
Subject: Re: [PATCH v3] migration: Fix possible division by zero on calc expected downtime
Date: Tue, 12 May 2026 15:31:34 -0300 [thread overview]
Message-ID: <8733zwxywp.fsf@suse.de> (raw)
In-Reply-To: <20260511182432.1333467-1-peterx@redhat.com>
Peter Xu <peterx@redhat.com> writes:
> Commit dd4fe8844b changed the reporting of expected downtime behavior, so
> that the value will be calculated on-demand. One side effect on the change
> is QEMU will allow the calculation to happen anytime even if there's no
> transfer happening for a short while.
>
> PeterM reported an ubsan report from clang when running migration-test with
> aarch64 binary on x86_64 hosts. I can also reproduce if I run the test
> concurrently so some of the src QEMU may not get chance to push any data,
> causing mbps to be 0:
>
> ../migration/migration.c:1051:12: runtime error: -nan is outside the range of representable values of type 'long'
>
> Fix it by properly handle both Inf and Nan to return INT64_MAX.
>
> Add a rich comment, per PeterM's suggestion.
>
> Link: https://lore.kernel.org/r/CAFEAcA-MYH6C39xO0OLx4-M5pKurJpurwRsMqZe9q=W-NShAbw@mail.gmail.com
> Reported-by: Peter Maydell <peter.maydell@linaro.org>
> Fixes: dd4fe8844b ("migration: Calculate expected downtime on demand")
> Signed-off-by: Peter Xu <peterx@redhat.com>
> ---
> migration/migration.c | 20 +++++++++++++++++++-
> 1 file changed, 19 insertions(+), 1 deletion(-)
>
> diff --git a/migration/migration.c b/migration/migration.c
> index b6f78eb3ac..05f10e4576 100644
> --- a/migration/migration.c
> +++ b/migration/migration.c
> @@ -63,6 +63,7 @@
> #include "system/dirtylimit.h"
> #include "qemu/sockets.h"
> #include "system/kvm.h"
> +#include "math.h"
>
> #define NOTIFIER_ELEM_INIT(array, elem) \
> [elem] = NOTIFIER_WITH_RETURN_LIST_INITIALIZER((array)[elem])
> @@ -1044,12 +1045,29 @@ static bool migrate_show_downtime(MigrationState *s)
> /* Return expected downtime (unit: milliseconds) */
> int64_t migration_downtime_calc_expected(MigrationState *s)
> {
> + double expected_ms;
> +
> if (mig_stats.dirty_sync_count <= 1) {
> return migrate_downtime_limit();
> }
>
> - return mig_stats.dirty_bytes_last_sync /
> + expected_ms = mig_stats.dirty_bytes_last_sync /
> migration_get_switchover_bw(s) * 1000;
> +
> + /*
> + * If we haven't been able to transfer any data, the result here could
> + * be NaN (for 0 / 0) or infinity (something else / 0).
> + *
> + * Return INT64_MAX as our best approximation to "this will take
> + * forever to complete". If the problem is transient (e.g. we just
> + * haven't started to transfer yet) we'll recalculate to a more
> + * accurate figure later.
> + */
> + if (isnan(expected_ms) || expected_ms >= (double)INT64_MAX) {
> + return INT64_MAX;
> + }
> +
> + return (int64_t) expected_ms;
> }
>
> static void populate_time_info(MigrationInfo *info, MigrationState *s)
Reviewed-by: Fabiano Rosas <farosas@suse.de>
prev parent reply other threads:[~2026-05-12 18:32 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-11 18:24 [PATCH v3] migration: Fix possible division by zero on calc expected downtime Peter Xu
2026-05-12 8:42 ` Peter Maydell
2026-05-12 18:31 ` Fabiano Rosas [this message]
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=8733zwxywp.fsf@suse.de \
--to=farosas@suse.de \
--cc=jmarcin@redhat.com \
--cc=peter.maydell@linaro.org \
--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.