All of lore.kernel.org
 help / color / mirror / Atom feed
From: Cornelia Huck <cohuck@redhat.com>
To: Jens Freimann <jfreimann@redhat.com>
Cc: pkrempa@redhat.com, berrange@redhat.com, ehabkost@redhat.com,
	mst@redhat.com, aadam@redhat.com, qemu-devel@nongnu.org,
	dgilbert@redhat.com, alex.williamson@redhat.com,
	laine@redhat.com, ailan@redhat.com, parav@mellanox.com
Subject: Re: [PATCH 11/11] vfio: unplug failover primary device before migration
Date: Mon, 21 Oct 2019 15:45:04 +0200	[thread overview]
Message-ID: <20191021154504.0fbebf39.cohuck@redhat.com> (raw)
In-Reply-To: <20191018202040.30349-12-jfreimann@redhat.com>

On Fri, 18 Oct 2019 22:20:40 +0200
Jens Freimann <jfreimann@redhat.com> wrote:

> As usual block all vfio-pci devices from being migrated, but make an
> exception for failover primary devices. This is achieved by setting
> unmigratable to 0 but also add a migration blocker for all vfio-pci
> devices except failover primary devices. These will be unplugged before
> migration happens by the migration handler of the corresponding
> virtio-net standby device.
> 
> Signed-off-by: Jens Freimann <jfreimann@redhat.com>
> ---
>  hw/vfio/pci.c | 31 +++++++++++++++++++++++++------
>  hw/vfio/pci.h |  1 +
>  2 files changed, 26 insertions(+), 6 deletions(-)
> 
> diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c
> index 12fac39804..a15b83c6b6 100644
> --- a/hw/vfio/pci.c
> +++ b/hw/vfio/pci.c
> @@ -40,6 +40,9 @@
>  #include "pci.h"
>  #include "trace.h"
>  #include "qapi/error.h"
> +#include "migration/blocker.h"
> +#include "qemu/option.h"
> +#include "qemu/option_int.h"
>  
>  #define TYPE_VFIO_PCI "vfio-pci"
>  #define PCI_VFIO(obj)    OBJECT_CHECK(VFIOPCIDevice, obj, TYPE_VFIO_PCI)
> @@ -2712,12 +2715,26 @@ static void vfio_realize(PCIDevice *pdev, Error **errp)
>      int i, ret;
>      bool is_mdev;
>  
> +    if (!pdev->net_failover_pair_id) {
> +        error_setg(&vdev->migration_blocker,
> +                "VFIO device doesn't support migration");
> +        ret = migrate_add_blocker(vdev->migration_blocker, &err);
> +        if (err) {
> +            error_propagate(errp, err);
> +            goto error;

This looks wrong, you haven't set up vbasedev.name yet.

> +        }
> +    } else {
> +            pdev->qdev.allow_unplug_during_migration = true;
> +    }
> +
>      if (!vdev->vbasedev.sysfsdev) {
>          if (!(~vdev->host.domain || ~vdev->host.bus ||
>                ~vdev->host.slot || ~vdev->host.function)) {
>              error_setg(errp, "No provided host device");
>              error_append_hint(errp, "Use -device vfio-pci,host=DDDD:BB:DD.F "
>                                "or -device vfio-pci,sysfsdev=PATH_TO_DEVICE\n");
> +            migrate_del_blocker(vdev->migration_blocker);
> +            error_free(vdev->migration_blocker);
>              return;
>          }
>          vdev->vbasedev.sysfsdev =
> @@ -2729,6 +2746,8 @@ static void vfio_realize(PCIDevice *pdev, Error **errp)
>      if (stat(vdev->vbasedev.sysfsdev, &st) < 0) {
>          error_setg_errno(errp, errno, "no such host device");
>          error_prepend(errp, VFIO_MSG_PREFIX, vdev->vbasedev.sysfsdev);
> +        migrate_del_blocker(vdev->migration_blocker);
> +        error_free(vdev->migration_blocker);
>          return;
>      }

Might be a bit easier cleanup-wise if you set up the blocker resp.
allow unplug during migration only here. The only difference is that
you'll get a different error message when trying to set up a
non-failover device with invalid specs on a migratable-only setup.

>  
> @@ -3008,6 +3027,8 @@ out_teardown:
>      vfio_bars_exit(vdev);
>  error:
>      error_prepend(errp, VFIO_MSG_PREFIX, vdev->vbasedev.name);
> +    migrate_del_blocker(vdev->migration_blocker);
> +    error_free(vdev->migration_blocker);

Shouldn't you check whether migration_block has been set up, like in
the finalize routine?

>  }
>  
>  static void vfio_instance_finalize(Object *obj)
> @@ -3019,6 +3040,10 @@ static void vfio_instance_finalize(Object *obj)
>      vfio_bars_finalize(vdev);
>      g_free(vdev->emulated_config_bits);
>      g_free(vdev->rom);
> +    if (vdev->migration_blocker) {
> +        migrate_del_blocker(vdev->migration_blocker);
> +        error_free(vdev->migration_blocker);
> +    }
>      /*
>       * XXX Leaking igd_opregion is not an oversight, we can't remove the
>       * fw_cfg entry therefore leaking this allocation seems like the safest



  reply	other threads:[~2019-10-21 13:47 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-10-18 20:20 [PATCH v4 0/11] add failover feature for assigned network devices Jens Freimann
2019-10-18 20:20 ` [PATCH 01/11] qdev/qbus: add hidden device support Jens Freimann
2019-10-21 12:44   ` Cornelia Huck
2019-10-21 12:52     ` Jens Freimann
2019-10-21 12:53   ` Peter Maydell
2019-10-21 13:00     ` Jens Freimann
2019-10-18 20:20 ` [PATCH 02/11] pci: add option for net failover Jens Freimann
2019-10-21 14:58   ` Alex Williamson
2019-10-21 18:45     ` Jens Freimann
2019-10-21 19:01       ` Alex Williamson
2019-10-21 20:28         ` Jens Freimann
2019-10-21 20:48           ` Alex Williamson
2019-10-18 20:20 ` [PATCH 03/11] pci: mark devices partially unplugged Jens Freimann
2019-10-18 20:20 ` [PATCH 04/11] pci: mark device having guest unplug request pending Jens Freimann
2019-10-18 20:20 ` [PATCH 05/11] qapi: add unplug primary event Jens Freimann
2019-10-18 20:28   ` Eric Blake
2019-10-21  7:23     ` Jens Freimann
2019-10-18 20:20 ` [PATCH 06/11] qapi: add failover negotiated event Jens Freimann
2019-10-18 20:20 ` [PATCH 07/11] migration: allow unplug during migration for failover devices Jens Freimann
2019-10-18 20:20 ` [PATCH 08/11] migration: add new migration state wait-unplug Jens Freimann
2019-10-18 20:20 ` [PATCH 09/11] libqos: tolerate wait-unplug migration state Jens Freimann
2019-10-18 20:20 ` [PATCH 10/11] net/virtio: add failover support Jens Freimann
2019-10-18 20:20 ` [PATCH 11/11] vfio: unplug failover primary device before migration Jens Freimann
2019-10-21 13:45   ` Cornelia Huck [this message]
2019-10-21 14:09     ` Jens Freimann
2019-10-21 15:19   ` Alex Williamson
2019-10-21 19:16     ` Jens Freimann
2019-10-19 15:12 ` [PATCH v4 0/11] add failover feature for assigned network devices no-reply
2019-10-21  7:30   ` Jens Freimann
2019-10-19 15:15 ` no-reply
2019-10-21 14:18 ` Cornelia Huck

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=20191021154504.0fbebf39.cohuck@redhat.com \
    --to=cohuck@redhat.com \
    --cc=aadam@redhat.com \
    --cc=ailan@redhat.com \
    --cc=alex.williamson@redhat.com \
    --cc=berrange@redhat.com \
    --cc=dgilbert@redhat.com \
    --cc=ehabkost@redhat.com \
    --cc=jfreimann@redhat.com \
    --cc=laine@redhat.com \
    --cc=mst@redhat.com \
    --cc=parav@mellanox.com \
    --cc=pkrempa@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.