[PATCH] cphp: remove deprecated cpu-add command(s)

Dr. David Alan Gilbert dgilbert at redhat.com
Fri Sep 11 14:48:07 UTC 2020


* Igor Mammedov (imammedo at redhat.com) wrote:
> theses were deprecatedince since 4.0, remove both HMP and QMP variants.
> 
> Users should use device_add commnad instead. To get list of
> possible CPUs and options, use 'info hotpluggable-cpus' HMP
> or query-hotpluggable-cpus QMP command.
> 
> Signed-off-by: Igor Mammedov <imammedo at redhat.com>
> ---
>  include/hw/boards.h         |   1 -
>  include/hw/i386/pc.h        |   1 -
>  include/monitor/hmp.h       |   1 -
>  docs/system/deprecated.rst  |  25 +++++----
>  hmp-commands.hx             |  15 ------
>  hw/core/machine-hmp-cmds.c  |  12 -----
>  hw/core/machine-qmp-cmds.c  |  12 -----
>  hw/i386/pc.c                |  27 ----------
>  hw/i386/pc_piix.c           |   1 -
>  hw/s390x/s390-virtio-ccw.c  |  12 -----
>  qapi/machine.json           |  24 ---------
>  tests/qtest/cpu-plug-test.c | 100 ++++--------------------------------
>  tests/qtest/test-hmp.c      |   1 -
>  13 files changed, 21 insertions(+), 211 deletions(-)
> 
> diff --git a/include/hw/boards.h b/include/hw/boards.h
> index bc5b82ad20..2163843bdb 100644
> --- a/include/hw/boards.h
> +++ b/include/hw/boards.h
> @@ -173,7 +173,6 @@ struct MachineClass {
>      void (*init)(MachineState *state);
>      void (*reset)(MachineState *state);
>      void (*wakeup)(MachineState *state);
> -    void (*hot_add_cpu)(MachineState *state, const int64_t id, Error **errp);
>      int (*kvm_type)(MachineState *machine, const char *arg);
>      void (*smp_parse)(MachineState *ms, QemuOpts *opts);
>  
> diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
> index fe52e165b2..ca8ff6cd27 100644
> --- a/include/hw/i386/pc.h
> +++ b/include/hw/i386/pc.h
> @@ -137,7 +137,6 @@ extern int fd_bootchk;
>  
>  void pc_acpi_smi_interrupt(void *opaque, int irq, int level);
>  
> -void pc_hot_add_cpu(MachineState *ms, const int64_t id, Error **errp);
>  void pc_smp_parse(MachineState *ms, QemuOpts *opts);
>  
>  void pc_guest_info_init(PCMachineState *pcms);
> diff --git a/include/monitor/hmp.h b/include/monitor/hmp.h
> index c986cfd28b..642e9e91f9 100644
> --- a/include/monitor/hmp.h
> +++ b/include/monitor/hmp.h
> @@ -89,7 +89,6 @@ void hmp_chardev_add(Monitor *mon, const QDict *qdict);
>  void hmp_chardev_change(Monitor *mon, const QDict *qdict);
>  void hmp_chardev_remove(Monitor *mon, const QDict *qdict);
>  void hmp_chardev_send_break(Monitor *mon, const QDict *qdict);
> -void hmp_cpu_add(Monitor *mon, const QDict *qdict);
>  void hmp_object_add(Monitor *mon, const QDict *qdict);
>  void hmp_object_del(Monitor *mon, const QDict *qdict);
>  void hmp_info_memdev(Monitor *mon, const QDict *qdict);
> diff --git a/docs/system/deprecated.rst b/docs/system/deprecated.rst
> index 851dbdeb8a..122717cfee 100644
> --- a/docs/system/deprecated.rst
> +++ b/docs/system/deprecated.rst
> @@ -284,13 +284,6 @@ The ``query-cpus`` command is replaced by the ``query-cpus-fast`` command.
>  The ``arch`` output member of the ``query-cpus-fast`` command is
>  replaced by the ``target`` output member.
>  
> -``cpu-add`` (since 4.0)
> -'''''''''''''''''''''''
> -
> -Use ``device_add`` for hotplugging vCPUs instead of ``cpu-add``.  See
> -documentation of ``query-hotpluggable-cpus`` for additional
> -details.
> -
>  ``query-events`` (since 4.0)
>  ''''''''''''''''''''''''''''
>  
> @@ -306,12 +299,6 @@ the 'wait' field, which is only applicable to sockets in server mode
>  Human Monitor Protocol (HMP) commands
>  -------------------------------------
>  
> -``cpu-add`` (since 4.0)
> -'''''''''''''''''''''''
> -
> -Use ``device_add`` for hotplugging vCPUs instead of ``cpu-add``.  See
> -documentation of ``query-hotpluggable-cpus`` for additional details.
> -
>  ``acl_show``, ``acl_reset``, ``acl_policy``, ``acl_add``, ``acl_remove`` (since 4.0.0)
>  ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
>  
> @@ -514,6 +501,12 @@ QEMU Machine Protocol (QMP) commands
>  The "autoload" parameter has been ignored since 2.12.0. All bitmaps
>  are automatically loaded from qcow2 images.
>  
> +``cpu-add`` (removed in 5.2)
> +''''''''''''''''''''''''''''
> +
> +Use ``device_add`` for hotplugging vCPUs instead of ``cpu-add``.  See
> +documentation of ``query-hotpluggable-cpus`` for additional details.
> +
>  Human Monitor Protocol (HMP) commands
>  -------------------------------------
>  
> @@ -523,6 +516,12 @@ The ``hub_id`` parameter of ``hostfwd_add`` / ``hostfwd_remove`` (removed in 5.0
>  The ``[hub_id name]`` parameter tuple of the 'hostfwd_add' and
>  'hostfwd_remove' HMP commands has been replaced by ``netdev_id``.
>  
> +``cpu-add`` (removed in 5.2)
> +''''''''''''''''''''''''''''
> +
> +Use ``device_add`` for hotplugging vCPUs instead of ``cpu-add``.  See
> +documentation of ``query-hotpluggable-cpus`` for additional details.
> +
>  Guest Emulator ISAs
>  -------------------
>  
> diff --git a/hmp-commands.hx b/hmp-commands.hx
> index 60f395c276..d1e3e0e1c6 100644
> --- a/hmp-commands.hx
> +++ b/hmp-commands.hx
> @@ -1761,21 +1761,6 @@ SRST
>    Executes a qemu-io command on the given block device.
>  ERST
>  
> -    {
> -        .name       = "cpu-add",
> -        .args_type  = "id:i",
> -        .params     = "id",
> -        .help       = "add cpu (deprecated, use device_add instead)",
> -        .cmd        = hmp_cpu_add,
> -    },
> -
> -SRST
> -``cpu-add`` *id*
> -  Add CPU with id *id*.  This command is deprecated, please
> -  +use ``device_add`` instead. For details, refer to
> -  'docs/cpu-hotplug.rst'.
> -ERST
> -
>      {
>          .name       = "qom-list",
>          .args_type  = "path:s?",
> diff --git a/hw/core/machine-hmp-cmds.c b/hw/core/machine-hmp-cmds.c
> index 39999c47c5..f4092b98cc 100644
> --- a/hw/core/machine-hmp-cmds.c
> +++ b/hw/core/machine-hmp-cmds.c
> @@ -46,18 +46,6 @@ void hmp_info_cpus(Monitor *mon, const QDict *qdict)
>      qapi_free_CpuInfoFastList(cpu_list);
>  }
>  
> -void hmp_cpu_add(Monitor *mon, const QDict *qdict)
> -{
> -    int cpuid;
> -    Error *err = NULL;
> -
> -    error_report("cpu_add is deprecated, please use device_add instead");
> -
> -    cpuid = qdict_get_int(qdict, "id");
> -    qmp_cpu_add(cpuid, &err);
> -    hmp_handle_error(mon, err);
> -}
> -
>  void hmp_hotpluggable_cpus(Monitor *mon, const QDict *qdict)
>  {
>      Error *err = NULL;

For HMP:


Acked-by: Dr. David Alan Gilbert <dgilbert at redhat.com>

> diff --git a/hw/core/machine-qmp-cmds.c b/hw/core/machine-qmp-cmds.c
> index 21551221ad..5362c80a18 100644
> --- a/hw/core/machine-qmp-cmds.c
> +++ b/hw/core/machine-qmp-cmds.c
> @@ -284,18 +284,6 @@ HotpluggableCPUList *qmp_query_hotpluggable_cpus(Error **errp)
>      return machine_query_hotpluggable_cpus(ms);
>  }
>  
> -void qmp_cpu_add(int64_t id, Error **errp)
> -{
> -    MachineClass *mc;
> -
> -    mc = MACHINE_GET_CLASS(current_machine);
> -    if (mc->hot_add_cpu) {
> -        mc->hot_add_cpu(current_machine, id, errp);
> -    } else {
> -        error_setg(errp, "Not supported");
> -    }
> -}
> -
>  void qmp_set_numa_node(NumaOptions *cmd, Error **errp)
>  {
>      if (!runstate_check(RUN_STATE_PRECONFIG)) {
> diff --git a/hw/i386/pc.c b/hw/i386/pc.c
> index d11daacc23..d071da787b 100644
> --- a/hw/i386/pc.c
> +++ b/hw/i386/pc.c
> @@ -777,32 +777,6 @@ void pc_smp_parse(MachineState *ms, QemuOpts *opts)
>      }
>  }
>  
> -void pc_hot_add_cpu(MachineState *ms, const int64_t id, Error **errp)
> -{
> -    X86MachineState *x86ms = X86_MACHINE(ms);
> -    int64_t apic_id = x86_cpu_apic_id_from_index(x86ms, id);
> -    Error *local_err = NULL;
> -
> -    if (id < 0) {
> -        error_setg(errp, "Invalid CPU id: %" PRIi64, id);
> -        return;
> -    }
> -
> -    if (apic_id >= ACPI_CPU_HOTPLUG_ID_LIMIT) {
> -        error_setg(errp, "Unable to add CPU: %" PRIi64
> -                   ", resulting APIC ID (%" PRIi64 ") is too large",
> -                   id, apic_id);
> -        return;
> -    }
> -
> -
> -    x86_cpu_new(X86_MACHINE(ms), apic_id, &local_err);
> -    if (local_err) {
> -        error_propagate(errp, local_err);
> -        return;
> -    }
> -}
> -
>  static void rtc_set_cpus_count(ISADevice *rtc, uint16_t cpus_count)
>  {
>      if (cpus_count > 0xff) {
> @@ -1966,7 +1940,6 @@ static void pc_machine_class_init(ObjectClass *oc, void *data)
>      mc->auto_enable_numa_with_memdev = true;
>      mc->has_hotpluggable_cpus = true;
>      mc->default_boot_order = "cad";
> -    mc->hot_add_cpu = pc_hot_add_cpu;
>      mc->smp_parse = pc_smp_parse;
>      mc->block_default_type = IF_IDE;
>      mc->max_cpus = 255;
> diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
> index 32b1453e6a..a5d1a0693d 100644
> --- a/hw/i386/pc_piix.c
> +++ b/hw/i386/pc_piix.c
> @@ -752,7 +752,6 @@ static void pc_i440fx_1_4_machine_options(MachineClass *m)
>  {
>      pc_i440fx_1_5_machine_options(m);
>      m->hw_version = "1.4.0";
> -    m->hot_add_cpu = NULL;
>      compat_props_add(m->compat_props, pc_compat_1_4, pc_compat_1_4_len);
>  }
>  
> diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
> index 3106bbea33..28266a3a35 100644
> --- a/hw/s390x/s390-virtio-ccw.c
> +++ b/hw/s390x/s390-virtio-ccw.c
> @@ -553,17 +553,6 @@ static HotplugHandler *s390_get_hotplug_handler(MachineState *machine,
>      return NULL;
>  }
>  
> -static void s390_hot_add_cpu(MachineState *machine,
> -                             const int64_t id, Error **errp)
> -{
> -    ObjectClass *oc;
> -
> -    g_assert(machine->possible_cpus->cpus[0].cpu);
> -    oc = OBJECT_CLASS(CPU_GET_CLASS(machine->possible_cpus->cpus[0].cpu));
> -
> -    s390x_new_cpu(object_class_get_name(oc), id, errp);
> -}
> -
>  static void s390_nmi(NMIState *n, int cpu_index, Error **errp)
>  {
>      CPUState *cs = qemu_get_cpu(cpu_index);
> @@ -604,7 +593,6 @@ static void ccw_machine_class_init(ObjectClass *oc, void *data)
>      s390mc->hpage_1m_allowed = true;
>      mc->init = ccw_init;
>      mc->reset = s390_machine_reset;
> -    mc->hot_add_cpu = s390_hot_add_cpu;
>      mc->block_default_type = IF_VIRTIO;
>      mc->no_cdrom = 1;
>      mc->no_floppy = 1;
> diff --git a/qapi/machine.json b/qapi/machine.json
> index 0ac1880e4a..d8ed096e9a 100644
> --- a/qapi/machine.json
> +++ b/qapi/machine.json
> @@ -307,30 +307,6 @@
>  ##
>  { 'command': 'query-cpus-fast', 'returns': [ 'CpuInfoFast' ] }
>  
> -##
> -# @cpu-add:
> -#
> -# Adds CPU with specified ID.
> -#
> -# @id: ID of CPU to be created, valid values [0..max_cpus)
> -#
> -# Features:
> -# @deprecated: This command is deprecated.  Use `device_add` instead.
> -#              See the `query-hotpluggable-cpus` command for details.
> -#
> -# Returns: Nothing on success
> -#
> -# Since: 1.5
> -#
> -# Example:
> -#
> -# -> { "execute": "cpu-add", "arguments": { "id": 2 } }
> -# <- { "return": {} }
> -#
> -##
> -{ 'command': 'cpu-add', 'data': {'id': 'int'},
> -  'features': [ 'deprecated' ] }
> -
>  ##
>  # @MachineInfo:
>  #
> diff --git a/tests/qtest/cpu-plug-test.c b/tests/qtest/cpu-plug-test.c
> index e8ffbbce4b..a1c689414b 100644
> --- a/tests/qtest/cpu-plug-test.c
> +++ b/tests/qtest/cpu-plug-test.c
> @@ -25,54 +25,6 @@ struct PlugTestData {
>  };
>  typedef struct PlugTestData PlugTestData;
>  
> -static void test_plug_with_cpu_add(gconstpointer data)
> -{
> -    const PlugTestData *s = data;
> -    char *args;
> -    QDict *response;
> -    unsigned int i;
> -
> -    args = g_strdup_printf("-machine %s -cpu %s "
> -                           "-smp 1,sockets=%u,cores=%u,threads=%u,maxcpus=%u",
> -                           s->machine, s->cpu_model,
> -                           s->sockets, s->cores, s->threads, s->maxcpus);
> -    qtest_start(args);
> -
> -    for (i = 1; i < s->maxcpus; i++) {
> -        response = qmp("{ 'execute': 'cpu-add',"
> -                       "  'arguments': { 'id': %d } }", i);
> -        g_assert(response);
> -        g_assert(!qdict_haskey(response, "error"));
> -        qobject_unref(response);
> -    }
> -
> -    qtest_end();
> -    g_free(args);
> -}
> -
> -static void test_plug_without_cpu_add(gconstpointer data)
> -{
> -    const PlugTestData *s = data;
> -    char *args;
> -    QDict *response;
> -
> -    args = g_strdup_printf("-machine %s -cpu %s "
> -                           "-smp 1,sockets=%u,cores=%u,threads=%u,maxcpus=%u",
> -                           s->machine, s->cpu_model,
> -                           s->sockets, s->cores, s->threads, s->maxcpus);
> -    qtest_start(args);
> -
> -    response = qmp("{ 'execute': 'cpu-add',"
> -                   "  'arguments': { 'id': %d } }",
> -                   s->sockets * s->cores * s->threads);
> -    g_assert(response);
> -    g_assert(qdict_haskey(response, "error"));
> -    qobject_unref(response);
> -
> -    qtest_end();
> -    g_free(args);
> -}
> -
>  static void test_plug_with_device_add(gconstpointer data)
>  {
>      const PlugTestData *td = data;
> @@ -144,36 +96,13 @@ static void add_pc_test_case(const char *mname)
>      data->cores = 3;
>      data->threads = 2;
>      data->maxcpus = data->sockets * data->cores * data->threads;
> -    if (g_str_has_suffix(mname, "-1.4") ||
> -        (strcmp(mname, "pc-1.3") == 0) ||
> -        (strcmp(mname, "pc-1.2") == 0) ||
> -        (strcmp(mname, "pc-1.1") == 0) ||
> -        (strcmp(mname, "pc-1.0") == 0)) {
> -        path = g_strdup_printf("cpu-plug/%s/init/%ux%ux%u&maxcpus=%u",
> -                               mname, data->sockets, data->cores,
> -                               data->threads, data->maxcpus);
> -        qtest_add_data_func_full(path, data, test_plug_without_cpu_add,
> -                                 test_data_free);
> -        g_free(path);
> -    } else {
> -        PlugTestData *data2 = g_memdup(data, sizeof(PlugTestData));
> -
> -        data2->machine = g_strdup(data->machine);
> -        data2->device_model = g_strdup(data->device_model);
>  
> -        path = g_strdup_printf("cpu-plug/%s/cpu-add/%ux%ux%u&maxcpus=%u",
> -                               mname, data->sockets, data->cores,
> -                               data->threads, data->maxcpus);
> -        qtest_add_data_func_full(path, data, test_plug_with_cpu_add,
> -                                 test_data_free);
> -        g_free(path);
> -        path = g_strdup_printf("cpu-plug/%s/device-add/%ux%ux%u&maxcpus=%u",
> -                               mname, data2->sockets, data2->cores,
> -                               data2->threads, data2->maxcpus);
> -        qtest_add_data_func_full(path, data2, test_plug_with_device_add,
> -                                 test_data_free);
> -        g_free(path);
> -    }
> +    path = g_strdup_printf("cpu-plug/%s/device-add/%ux%ux%u&maxcpus=%u",
> +                           mname, data->sockets, data->cores,
> +                           data->threads, data->maxcpus);
> +    qtest_add_data_func_full(path, data, test_plug_with_device_add,
> +                             test_data_free);
> +    g_free(path);
>  }
>  
>  static void add_pseries_test_case(const char *mname)
> @@ -205,7 +134,7 @@ static void add_pseries_test_case(const char *mname)
>  static void add_s390x_test_case(const char *mname)
>  {
>      char *path;
> -    PlugTestData *data, *data2;
> +    PlugTestData *data;
>  
>      if (!g_str_has_prefix(mname, "s390-ccw-virtio-")) {
>          return;
> @@ -220,21 +149,10 @@ static void add_s390x_test_case(const char *mname)
>      data->threads = 1;
>      data->maxcpus = data->sockets * data->cores * data->threads;
>  
> -    data2 = g_memdup(data, sizeof(PlugTestData));
> -    data2->machine = g_strdup(data->machine);
> -    data2->device_model = g_strdup(data->device_model);
> -
> -    path = g_strdup_printf("cpu-plug/%s/cpu-add/%ux%ux%u&maxcpus=%u",
> +    path = g_strdup_printf("cpu-plug/%s/device-add/%ux%ux%u&maxcpus=%u",
>                             mname, data->sockets, data->cores,
>                             data->threads, data->maxcpus);
> -    qtest_add_data_func_full(path, data, test_plug_with_cpu_add,
> -                             test_data_free);
> -    g_free(path);
> -
> -    path = g_strdup_printf("cpu-plug/%s/device-add/%ux%ux%u&maxcpus=%u",
> -                           mname, data2->sockets, data2->cores,
> -                           data2->threads, data2->maxcpus);
> -    qtest_add_data_func_full(path, data2, test_plug_with_device_add,
> +    qtest_add_data_func_full(path, data, test_plug_with_device_add,
>                               test_data_free);
>      g_free(path);
>  }
> diff --git a/tests/qtest/test-hmp.c b/tests/qtest/test-hmp.c
> index aea1384bac..94a8023173 100644
> --- a/tests/qtest/test-hmp.c
> +++ b/tests/qtest/test-hmp.c
> @@ -27,7 +27,6 @@ static const char *hmp_cmds[] = {
>      "chardev-change testchardev1 ringbuf",
>      "chardev-remove testchardev1",
>      "commit all",
> -    "cpu-add 1",
>      "cpu 0",
>      "device_add ?",
>      "device_add usb-mouse,id=mouse1",
> -- 
> 2.27.0
> 
-- 
Dr. David Alan Gilbert / dgilbert at redhat.com / Manchester, UK




More information about the libvir-list mailing list