[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v2 2/7] Implement drain_call_rcu and use it in hmp_device_del
From: |
Markus Armbruster |
Subject: |
Re: [PATCH v2 2/7] Implement drain_call_rcu and use it in hmp_device_del |
Date: |
Thu, 09 Jul 2020 13:42:23 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux) |
Maxim Levitsky <mlevitsk@redhat.com> writes:
> This allows to preserve the semantics of hmp_device_del,
> that the device is deleted immediatly which was changed by previos
> patch that delayed this to RCU callback
>
> Suggested-by: Stefan Hajnoczi <stefanha@gmail.com>
> Signed-off-by: Maxim Levitsky <mlevitsk@redhat.com>
> ---
> include/qemu/rcu.h | 1 +
> qdev-monitor.c | 3 +++
> util/rcu.c | 33 +++++++++++++++++++++++++++++++++
> 3 files changed, 37 insertions(+)
>
> diff --git a/include/qemu/rcu.h b/include/qemu/rcu.h
> index 570aa603eb..0e375ebe13 100644
> --- a/include/qemu/rcu.h
> +++ b/include/qemu/rcu.h
> @@ -133,6 +133,7 @@ struct rcu_head {
> };
>
> extern void call_rcu1(struct rcu_head *head, RCUCBFunc *func);
> +extern void drain_call_rcu(void);
>
> /* The operands of the minus operator must have the same type,
> * which must be the one that we specify in the cast.
> diff --git a/qdev-monitor.c b/qdev-monitor.c
> index 56cee1483f..70877840a2 100644
> --- a/qdev-monitor.c
> +++ b/qdev-monitor.c
> @@ -812,6 +812,8 @@ void qmp_device_add(QDict *qdict, QObject **ret_data,
> Error **errp)
> return;
> }
> dev = qdev_device_add(opts, &local_err);
> + drain_call_rcu();
> +
> if (!dev) {
> error_propagate(errp, local_err);
> qemu_opts_del(opts);
> @@ -904,6 +906,7 @@ void qmp_device_del(const char *id, Error **errp)
> }
>
> qdev_unplug(dev, errp);
> + drain_call_rcu();
> }
> }
>
Subject claims "in hmp_device_del", code has it in qmp_device_add() and
qmp_device_del(). Please advise.
[...]