* Igor Mammedov (imammedo@xxxxxxxxxx) 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@xxxxxxxxxx> > --- > 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@xxxxxxxxxx> > 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@xxxxxxxxxx / Manchester, UK