qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v6 16/19] softmmu/vl: defer backend init


From: Stefan Hajnoczi
Subject: Re: [PATCH v6 16/19] softmmu/vl: defer backend init
Date: Mon, 7 Mar 2022 10:48:17 +0000

On Thu, Feb 17, 2022 at 02:49:03AM -0500, Jagannathan Raman wrote:
> Allow deferred initialization of backends. TYPE_REMOTE_MACHINE is
> agnostic to QEMU's RUN_STATE. It's state is driven by the QEMU client

s/It's/Its/

> via the vfio-user protocol. Whereas, the backends presently defer
> initialization if QEMU is in RUN_STATE_INMIGRATE. Since the remote
> machine can't use RUN_STATE*, this commit allows it to ask for deferred
> initialization of backend device. It is primarily targeted towards block
> devices in this commit, but it needed not be limited to that.

What is the purpose of this commit? I don't understand the description.

> 
> Signed-off-by: Elena Ufimtseva <elena.ufimtseva@oracle.com>
> Signed-off-by: John G Johnson <john.g.johnson@oracle.com>
> Signed-off-by: Jagannathan Raman <jag.raman@oracle.com>
> ---
>  include/sysemu/sysemu.h    |  4 ++++
>  block/block-backend.c      |  3 ++-
>  blockdev.c                 |  2 +-
>  softmmu/vl.c               | 17 +++++++++++++++++
>  stubs/defer-backend-init.c |  7 +++++++
>  MAINTAINERS                |  1 +
>  stubs/meson.build          |  1 +
>  7 files changed, 33 insertions(+), 2 deletions(-)
>  create mode 100644 stubs/defer-backend-init.c
> 
> diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h
> index b9421e03ff..3179eb1857 100644
> --- a/include/sysemu/sysemu.h
> +++ b/include/sysemu/sysemu.h
> @@ -119,4 +119,8 @@ extern QemuOptsList qemu_net_opts;
>  extern QemuOptsList qemu_global_opts;
>  extern QemuOptsList qemu_semihosting_config_opts;
>  
> +bool deferred_backend_init(void);
> +void set_deferred_backend_init(void);
> +void clear_deferred_backend_init(void);
> +
>  #endif
> diff --git a/block/block-backend.c b/block/block-backend.c
> index 4ff6b4d785..e04f9b6469 100644
> --- a/block/block-backend.c
> +++ b/block/block-backend.c
> @@ -20,6 +20,7 @@
>  #include "sysemu/blockdev.h"
>  #include "sysemu/runstate.h"
>  #include "sysemu/replay.h"
> +#include "sysemu/sysemu.h"
>  #include "qapi/error.h"
>  #include "qapi/qapi-events-block.h"
>  #include "qemu/id.h"
> @@ -935,7 +936,7 @@ int blk_attach_dev(BlockBackend *blk, DeviceState *dev)
>      /* While migration is still incoming, we don't need to apply the
>       * permissions of guest device BlockBackends. We might still have a block
>       * job or NBD server writing to the image for storage migration. */
> -    if (runstate_check(RUN_STATE_INMIGRATE)) {
> +    if (runstate_check(RUN_STATE_INMIGRATE) || deferred_backend_init()) {
>          blk->disable_perm = true;
>      }

Why is this necessary for vfio-user? Disk images shouldn't be in use by
another process so we don't need to bypass permissions temporarily.

>  
> diff --git a/blockdev.c b/blockdev.c
> index 42e098b458..d495070679 100644
> --- a/blockdev.c
> +++ b/blockdev.c
> @@ -569,7 +569,7 @@ static BlockBackend *blockdev_init(const char *file, 
> QDict *bs_opts,
>          qdict_set_default_str(bs_opts, BDRV_OPT_AUTO_READ_ONLY, "on");
>          assert((bdrv_flags & BDRV_O_CACHE_MASK) == 0);
>  
> -        if (runstate_check(RUN_STATE_INMIGRATE)) {
> +        if (runstate_check(RUN_STATE_INMIGRATE) || deferred_backend_init()) {
>              bdrv_flags |= BDRV_O_INACTIVE;

Same here.

Attachment: signature.asc
Description: PGP signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]