qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Peter Xu <peterx@redhat.com>
To: "Cédric Le Goater" <clg@redhat.com>
Cc: qemu-devel@nongnu.org, "Fabiano Rosas" <farosas@suse.de>,
	"Alex Williamson" <alex.williamson@redhat.com>,
	"Avihai Horon" <avihaih@nvidia.com>,
	"Philippe Mathieu-Daudé" <philmd@linaro.org>,
	"Markus Armbruster" <armbru@redhat.com>,
	"Stefano Stabellini" <sstabellini@kernel.org>,
	"Anthony Perard" <anthony.perard@citrix.com>,
	"Paul Durrant" <paul@xen.org>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	"Paolo Bonzini" <pbonzini@redhat.com>,
	"David Hildenbrand" <david@redhat.com>
Subject: Re: [PATCH v3 14/26] memory: Add Error** argument to .log_global*() handlers
Date: Tue, 5 Mar 2024 15:57:53 +0800	[thread overview]
Message-ID: <ZebQgd3uRuBNACRI@x1n> (raw)
In-Reply-To: <20240304122844.1888308-15-clg@redhat.com>

On Mon, Mar 04, 2024 at 01:28:32PM +0100, Cédric Le Goater wrote:
> @@ -2936,15 +2975,22 @@ void memory_global_dirty_log_start(unsigned int flags)
>      trace_global_dirty_changed(global_dirty_tracking);
>  
>      if (!old_flags) {
> -        MEMORY_LISTENER_CALL_GLOBAL(log_global_start, Forward);
> +        MEMORY_LISTENER_CALL_LOG_GLOBAL(log_global_start, Forward,
> +                                        &local_err);
> +        if (local_err) {
> +            error_report_err(local_err);
> +            return;

Returns here means global_dirty_tracking will keep the new value even if
it's not truly commited globally (in memory_region_transaction_commit()
later below).  I think it'll cause inconsistency: global_dirty_tracking
should reflect the global status of dirty tracking, and that should match
with the MR status cached in FlatViews (which is used in memory core to
reflect address space translations).

For some details on how that flag applied to each MR, feel free to have a
quick look in address_space_update_topology_pass() of the "else if (frold
&& frnew && flatrange_equal(frold, frnew))".

Here IIUC if to fully support a graceful failure (IIUC that is the goal for
VFIO.. and this op should be easily triggerable by the user), then we need
to do proper unwind on both:

  - Call proper log_global_stop() on those who has already been started
    successfully before the current failed log_global_start(), then,

  - Reset global_dirty_tracking to old_flags before return

We may want to make sure trace_global_dirty_changed() is only called when
all things succeeded.

I don't have a strong opinion on whether do we need similar error report
interfaces for _stop() and _log_sync().  I'd still suggest the same that we
drop them to make the patch simpler, but only add such error reports for
log_global_start().  If they never get triggered they're dead code anyway,
so I don't think "having errp for all APIs" is a must-to-have at least to me.

Thanks,

> +        }
>          memory_region_transaction_begin();
>          memory_region_update_pending = true;
>          memory_region_transaction_commit();
>      }
>  }

-- 
Peter Xu



  reply	other threads:[~2024-03-05  7:58 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-04 12:28 [PATCH v3 00/26] migration: Improve error reporting Cédric Le Goater
2024-03-04 12:28 ` [PATCH v3 01/26] s390/stattrib: Add Error** argument to set_migrationmode() handler Cédric Le Goater
2024-03-04 20:49   ` Fabiano Rosas
2024-03-05  7:12     ` Cédric Le Goater
2024-03-05 14:54   ` Avihai Horon
2024-03-04 12:28 ` [PATCH v3 02/26] vfio: Always report an error in vfio_save_setup() Cédric Le Goater
2024-03-04 20:51   ` Fabiano Rosas
2024-03-06  9:56   ` Avihai Horon
2024-03-06 10:16     ` Avihai Horon
2024-03-06 10:51       ` Cédric Le Goater
2024-03-06 10:49     ` Cédric Le Goater
2024-03-04 12:28 ` [PATCH v3 03/26] migration: Always report an error in block_save_setup() Cédric Le Goater
2024-03-04 21:04   ` Fabiano Rosas
2024-03-05  8:23     ` Cédric Le Goater
2024-03-04 12:28 ` [PATCH v3 04/26] migration: Always report an error in ram_save_setup() Cédric Le Goater
2024-03-04 21:30   ` Fabiano Rosas
2024-03-05  8:52     ` Cédric Le Goater
2024-03-05  5:29   ` Prasad Pandit
2024-03-05  8:53     ` Cédric Le Goater
2024-03-04 12:28 ` [PATCH v3 05/26] migration: Add Error** argument to vmstate_save() Cédric Le Goater
2024-03-05  7:44   ` Prasad Pandit
2024-03-04 12:28 ` [PATCH v3 06/26] migration: Report error when shutdown fails Cédric Le Goater
2024-03-04 12:28 ` [PATCH v3 07/26] migration: Remove SaveStateHandler and LoadStateHandler typedefs Cédric Le Goater
2024-03-04 12:28 ` [PATCH v3 08/26] migration: Add documentation for SaveVMHandlers Cédric Le Goater
2024-03-04 12:28 ` [PATCH v3 09/26] migration: Do not call PRECOPY_NOTIFY_SETUP notifiers in case of error Cédric Le Goater
2024-03-04 12:28 ` [PATCH v3 10/26] migration: Move cleanup after after error reporting in qemu_savevm_state_setup() Cédric Le Goater
2024-03-05  3:32   ` Peter Xu
2024-03-05  7:57     ` Cédric Le Goater
2024-03-04 12:28 ` [PATCH v3 11/26] migration: Add Error** argument to qemu_savevm_state_setup() Cédric Le Goater
2024-03-04 12:28 ` [PATCH v3 12/26] migration: Add Error** argument to .save_setup() handler Cédric Le Goater
2024-03-05  8:54   ` Thomas Huth
2024-03-04 12:28 ` [PATCH v3 13/26] migration: Add Error** argument to .load_setup() handler Cédric Le Goater
2024-03-04 12:28 ` [PATCH v3 14/26] memory: Add Error** argument to .log_global*() handlers Cédric Le Goater
2024-03-05  7:57   ` Peter Xu [this message]
2024-03-05 14:25     ` Cédric Le Goater
2024-03-04 12:28 ` [PATCH v3 15/26] memory: Add Error** argument to the global_dirty_log routines Cédric Le Goater
2024-03-05  1:58   ` Yong Huang
2024-03-04 12:28 ` [PATCH v3 16/26] migration: Modify ram_init_bitmaps() to report dirty tracking errors Cédric Le Goater
2024-03-04 12:28 ` [PATCH v3 17/26] vfio: Add Error** argument to .set_dirty_page_tracking() handler Cédric Le Goater
2024-03-04 12:28 ` [PATCH v3 18/26] vfio: Add Error** argument to vfio_devices_dma_logging_start() Cédric Le Goater
2024-03-04 12:28 ` [PATCH v3 19/26] vfio: Add Error** argument to vfio_devices_dma_logging_stop() Cédric Le Goater
2024-03-04 12:28 ` [PATCH v3 20/26] vfio: Use new Error** argument in vfio_save_setup() Cédric Le Goater
2024-03-04 12:28 ` [PATCH v3 21/26] vfio: Add Error** argument to .vfio_save_config() handler Cédric Le Goater
2024-03-04 12:28 ` [PATCH v3 22/26] vfio: Reverse test on vfio_get_dirty_bitmap() Cédric Le Goater
2024-03-04 12:28 ` [PATCH v3 23/26] memory: Add Error** argument to memory_get_xlat_addr() Cédric Le Goater
2024-03-04 12:28 ` [PATCH v3 24/26] vfio: Add Error** argument to .get_dirty_bitmap() handler Cédric Le Goater
2024-03-04 12:28 ` [PATCH v3 25/26] vfio: Also trace event failures in vfio_save_complete_precopy() Cédric Le Goater
2024-03-04 12:28 ` [PATCH v3 26/26] vfio: Extend vfio_set_migration_error() with Error* argument Cédric Le Goater
2024-03-05  8:06 ` [PATCH v3 00/26] migration: Improve error reporting Peter Xu
2024-03-05  8:30   ` Cédric Le Goater

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=ZebQgd3uRuBNACRI@x1n \
    --to=peterx@redhat.com \
    --cc=alex.williamson@redhat.com \
    --cc=anthony.perard@citrix.com \
    --cc=armbru@redhat.com \
    --cc=avihaih@nvidia.com \
    --cc=clg@redhat.com \
    --cc=david@redhat.com \
    --cc=farosas@suse.de \
    --cc=mst@redhat.com \
    --cc=paul@xen.org \
    --cc=pbonzini@redhat.com \
    --cc=philmd@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=sstabellini@kernel.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 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).