Re: [PATCH v3 13/23] system/dirtylimit: Extract HMP code to dirtylimit-hmp-cmds.c

Hy Man <[email protected]>
Newsgroups gmane.comp.emulators.qemu
Message-ID <CAFWXh4yc+nFPTEe6m5uvgNq1kkkP7bie6N=VabjkTYnfzCYYfg@mail.gmail.com>
Reviewed-by: Hyman Huang <[email protected]>


On Thu, Aug 13, 2026 at 5:18 AM Philippe Mathieu-Daudé
<[email protected]> wrote:
>
> Signed-off-by: Philippe Mathieu-Daudé <[email protected]>
> Reviewed-by: Marc-André Lureau <[email protected]>
> ---
>  MAINTAINERS                  |  1 +
>  system/dirtylimit-hmp-cmds.c | 74 ++++++++++++++++++++++++++++++++++++
>  system/dirtylimit.c          | 60 -----------------------------
>  system/meson.build           |  1 +
>  4 files changed, 76 insertions(+), 60 deletions(-)
>  create mode 100644 system/dirtylimit-hmp-cmds.c
>
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 4628793dde6..a33fbeebf61 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -3858,6 +3858,7 @@ Migration dirty limit and dirty page rate
>  M: Hyman Huang <[email protected]>
>  S: Maintained
>  F: system/dirtylimit.c
> +F: system/dirtylimit-hmp-cmds.c
>  F: include/system/dirtylimit.h
>  F: migration/dirtyrate.c
>  F: migration/dirtyrate.h
> diff --git a/system/dirtylimit-hmp-cmds.c b/system/dirtylimit-hmp-cmds.c
> new file mode 100644
> index 00000000000..4928d57cc8e
> --- /dev/null
> +++ b/system/dirtylimit-hmp-cmds.c
> @@ -0,0 +1,74 @@
> +/*
> + * HMP commands related to migration dirty page rate limit
> + *
> + * Copyright (c) 2022 CHINA TELECOM CO.,LTD.
> + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
> + *
> + * SPDX-License-Identifier: GPL-2.0-or-later
> + */
> +
> +#include "qemu/osdep.h"
> +#include "qapi/error.h"
> +#include "qapi/qapi-commands-migration.h"
> +#include "qobject/qdict.h"
> +#include "monitor/hmp.h"
> +#include "monitor/monitor.h"
> +#include "system/dirtylimit.h"
> +
> +void hmp_cancel_vcpu_dirty_limit(Monitor *mon, const QDict *qdict)
> +{
> +    int64_t cpu_index = qdict_get_try_int(qdict, "cpu_index", -1);
> +    Error *err = NULL;
> +
> +    qmp_cancel_vcpu_dirty_limit(!!(cpu_index != -1), cpu_index, &err);
> +    if (err) {
> +        hmp_handle_error(mon, err);
> +        return;
> +    }
> +
> +    monitor_printf(mon, "[Please use 'info vcpu_dirty_limit' to query "
> +                   "dirty limit for virtual CPU]\n");
> +}
> +
> +void hmp_set_vcpu_dirty_limit(Monitor *mon, const QDict *qdict)
> +{
> +    int64_t dirty_rate = qdict_get_int(qdict, "dirty_rate");
> +    int64_t cpu_index = qdict_get_try_int(qdict, "cpu_index", -1);
> +    Error *err = NULL;
> +
> +    if (dirty_rate < 0) {
> +        error_setg(&err, "invalid dirty page limit %" PRId64, dirty_rate);
> +        goto out;
> +    }
> +
> +    qmp_set_vcpu_dirty_limit(!!(cpu_index != -1), cpu_index, dirty_rate, &err);
> +
> +out:
> +    hmp_handle_error(mon, err);
> +}
> +
> +void hmp_info_vcpu_dirty_limit(Monitor *mon, const QDict *qdict)
> +{
> +    DirtyLimitInfoList *info;
> +    g_autoptr(DirtyLimitInfoList) head = NULL;
> +    Error *err = NULL;
> +
> +    if (!dirtylimit_in_service()) {
> +        monitor_printf(mon, "Dirty page limit not enabled!\n");
> +        return;
> +    }
> +
> +    head = qmp_query_vcpu_dirty_limit(&err);
> +    if (err) {
> +        hmp_handle_error(mon, err);
> +        return;
> +    }
> +
> +    for (info = head; info != NULL; info = info->next) {
> +        monitor_printf(mon, "vcpu[%"PRIi64"], limit rate %"PRIi64 " (MB/s),"
> +                            " current rate %"PRIi64 " (MB/s)\n",
> +                            info->value->cpu_index,
> +                            info->value->limit_rate,
> +                            info->value->current_rate);
> +    }
> +}
> diff --git a/system/dirtylimit.c b/system/dirtylimit.c
> index 50fa67f3d6a..70bb7bac2d0 100644
> --- a/system/dirtylimit.c
> +++ b/system/dirtylimit.c
> @@ -17,8 +17,6 @@
>  #include "qapi/error.h"
>  #include "system/dirtyrate.h"
>  #include "system/dirtylimit.h"
> -#include "monitor/hmp.h"
> -#include "monitor/monitor.h"
>  #include "system/memory.h"
>  #include "exec/target_page.h"
>  #include "hw/core/boards.h"
> @@ -491,21 +489,6 @@ void qmp_cancel_vcpu_dirty_limit(bool has_cpu_index,
>      dirtylimit_state_unlock();
>  }
>
> -void hmp_cancel_vcpu_dirty_limit(Monitor *mon, const QDict *qdict)
> -{
> -    int64_t cpu_index = qdict_get_try_int(qdict, "cpu_index", -1);
> -    Error *err = NULL;
> -
> -    qmp_cancel_vcpu_dirty_limit(!!(cpu_index != -1), cpu_index, &err);
> -    if (err) {
> -        hmp_handle_error(mon, err);
> -        return;
> -    }
> -
> -    monitor_printf(mon, "[Please use 'info vcpu_dirty_limit' to query "
> -                   "dirty limit for virtual CPU]\n");
> -}
> -
>  void qmp_set_vcpu_dirty_limit(bool has_cpu_index,
>                                int64_t cpu_index,
>                                uint64_t dirty_rate,
> @@ -548,23 +531,6 @@ void qmp_set_vcpu_dirty_limit(bool has_cpu_index,
>      dirtylimit_state_unlock();
>  }
>
> -void hmp_set_vcpu_dirty_limit(Monitor *mon, const QDict *qdict)
> -{
> -    int64_t dirty_rate = qdict_get_int(qdict, "dirty_rate");
> -    int64_t cpu_index = qdict_get_try_int(qdict, "cpu_index", -1);
> -    Error *err = NULL;
> -
> -    if (dirty_rate < 0) {
> -        error_setg(&err, "invalid dirty page limit %" PRId64, dirty_rate);
> -        goto out;
> -    }
> -
> -    qmp_set_vcpu_dirty_limit(!!(cpu_index != -1), cpu_index, dirty_rate, &err);
> -
> -out:
> -    hmp_handle_error(mon, err);
> -}
> -
>  /* Return the max throttle time of each virtual CPU */
>  uint64_t dirtylimit_throttle_time_per_round(void)
>  {
> @@ -646,29 +612,3 @@ struct DirtyLimitInfoList *qmp_query_vcpu_dirty_limit(Error **errp)
>  {
>      return dirtylimit_query_all();
>  }
> -
> -void hmp_info_vcpu_dirty_limit(Monitor *mon, const QDict *qdict)
> -{
> -    DirtyLimitInfoList *info;
> -    g_autoptr(DirtyLimitInfoList) head = NULL;
> -    Error *err = NULL;
> -
> -    if (!dirtylimit_in_service()) {
> -        monitor_printf(mon, "Dirty page limit not enabled!\n");
> -        return;
> -    }
> -
> -    head = qmp_query_vcpu_dirty_limit(&err);
> -    if (err) {
> -        hmp_handle_error(mon, err);
> -        return;
> -    }
> -
> -    for (info = head; info != NULL; info = info->next) {
> -        monitor_printf(mon, "vcpu[%"PRIi64"], limit rate %"PRIi64 " (MB/s),"
> -                            " current rate %"PRIi64 " (MB/s)\n",
> -                            info->value->cpu_index,
> -                            info->value->limit_rate,
> -                            info->value->current_rate);
> -    }
> -}
> diff --git a/system/meson.build b/system/meson.build
> index cd3193d170b..377adce8035 100644
> --- a/system/meson.build
> +++ b/system/meson.build
> @@ -9,6 +9,7 @@ system_ss.add(files(
>    'cpus.c',
>    'cpu-timers.c',
>    'dirtylimit.c',
> +  'dirtylimit-hmp-cmds.c',
>    'dma-helpers.c',
>    'exit-with-parent.c',
>    'globals.c',
> --
> 2.53.0
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.