cphp: remove deprecated cpu-add command(s)

These were deprecated since 4.0, remove both HMP and QMP variants.

Users should use device_add command 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@redhat.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Acked-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
Acked-by: Cornelia Huck <cohuck@redhat.com>
Message-Id: <20200915120403.1074579-1-imammedo@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
Igor Mammedov 2020-09-15 08:04:03 -04:00 committed by Michael S. Tsirkin
parent 892040dc8b
commit 63e79833c4
13 changed files with 21 additions and 211 deletions

View File

@ -272,13 +272,6 @@ The ``query-cpus`` command is replaced by the ``query-cpus-fast`` command.
The ``arch`` output member of the ``query-cpus-fast`` command is The ``arch`` output member of the ``query-cpus-fast`` command is
replaced by the ``target`` output member. 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) ``query-events`` (since 4.0)
'''''''''''''''''''''''''''' ''''''''''''''''''''''''''''
@ -294,12 +287,6 @@ the 'wait' field, which is only applicable to sockets in server mode
Human Monitor Protocol (HMP) commands 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) ``acl_show``, ``acl_reset``, ``acl_policy``, ``acl_add``, ``acl_remove`` (since 4.0.0)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
@ -517,6 +504,12 @@ QEMU Machine Protocol (QMP) commands
The "autoload" parameter has been ignored since 2.12.0. All bitmaps The "autoload" parameter has been ignored since 2.12.0. All bitmaps
are automatically loaded from qcow2 images. 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 Human Monitor Protocol (HMP) commands
------------------------------------- -------------------------------------
@ -526,6 +519,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 The ``[hub_id name]`` parameter tuple of the 'hostfwd_add' and
'hostfwd_remove' HMP commands has been replaced by ``netdev_id``. '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 Guest Emulator ISAs
------------------- -------------------

View File

@ -1761,21 +1761,6 @@ SRST
Executes a qemu-io command on the given block device. Executes a qemu-io command on the given block device.
ERST 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", .name = "qom-list",
.args_type = "path:s?", .args_type = "path:s?",

View File

@ -46,18 +46,6 @@ void hmp_info_cpus(Monitor *mon, const QDict *qdict)
qapi_free_CpuInfoFastList(cpu_list); 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) void hmp_hotpluggable_cpus(Monitor *mon, const QDict *qdict)
{ {
Error *err = NULL; Error *err = NULL;

View File

@ -284,18 +284,6 @@ HotpluggableCPUList *qmp_query_hotpluggable_cpus(Error **errp)
return machine_query_hotpluggable_cpus(ms); 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) void qmp_set_numa_node(NumaOptions *cmd, Error **errp)
{ {
if (!runstate_check(RUN_STATE_PRECONFIG)) { if (!runstate_check(RUN_STATE_PRECONFIG)) {

View File

@ -769,32 +769,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 static
void pc_machine_done(Notifier *notifier, void *data) void pc_machine_done(Notifier *notifier, void *data)
{ {
@ -1691,7 +1665,6 @@ static void pc_machine_class_init(ObjectClass *oc, void *data)
mc->auto_enable_numa_with_memdev = true; mc->auto_enable_numa_with_memdev = true;
mc->has_hotpluggable_cpus = true; mc->has_hotpluggable_cpus = true;
mc->default_boot_order = "cad"; mc->default_boot_order = "cad";
mc->hot_add_cpu = pc_hot_add_cpu;
mc->smp_parse = pc_smp_parse; mc->smp_parse = pc_smp_parse;
mc->block_default_type = IF_IDE; mc->block_default_type = IF_IDE;
mc->max_cpus = 255; mc->max_cpus = 255;

View File

@ -752,7 +752,6 @@ static void pc_i440fx_1_4_machine_options(MachineClass *m)
{ {
pc_i440fx_1_5_machine_options(m); pc_i440fx_1_5_machine_options(m);
m->hw_version = "1.4.0"; 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); compat_props_add(m->compat_props, pc_compat_1_4, pc_compat_1_4_len);
} }

View File

@ -553,17 +553,6 @@ static HotplugHandler *s390_get_hotplug_handler(MachineState *machine,
return NULL; 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) static void s390_nmi(NMIState *n, int cpu_index, Error **errp)
{ {
CPUState *cs = qemu_get_cpu(cpu_index); 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; s390mc->hpage_1m_allowed = true;
mc->init = ccw_init; mc->init = ccw_init;
mc->reset = s390_machine_reset; mc->reset = s390_machine_reset;
mc->hot_add_cpu = s390_hot_add_cpu;
mc->block_default_type = IF_VIRTIO; mc->block_default_type = IF_VIRTIO;
mc->no_cdrom = 1; mc->no_cdrom = 1;
mc->no_floppy = 1; mc->no_floppy = 1;

View File

@ -168,7 +168,6 @@ struct MachineClass {
void (*init)(MachineState *state); void (*init)(MachineState *state);
void (*reset)(MachineState *state); void (*reset)(MachineState *state);
void (*wakeup)(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); int (*kvm_type)(MachineState *machine, const char *arg);
void (*smp_parse)(MachineState *ms, QemuOpts *opts); void (*smp_parse)(MachineState *ms, QemuOpts *opts);

View File

@ -132,7 +132,6 @@ extern int fd_bootchk;
void pc_acpi_smi_interrupt(void *opaque, int irq, int level); 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_smp_parse(MachineState *ms, QemuOpts *opts);
void pc_guest_info_init(PCMachineState *pcms); void pc_guest_info_init(PCMachineState *pcms);

View File

@ -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_change(Monitor *mon, const QDict *qdict);
void hmp_chardev_remove(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_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_add(Monitor *mon, const QDict *qdict);
void hmp_object_del(Monitor *mon, const QDict *qdict); void hmp_object_del(Monitor *mon, const QDict *qdict);
void hmp_info_memdev(Monitor *mon, const QDict *qdict); void hmp_info_memdev(Monitor *mon, const QDict *qdict);

View File

@ -307,30 +307,6 @@
## ##
{ 'command': 'query-cpus-fast', 'returns': [ 'CpuInfoFast' ] } { '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: # @MachineInfo:
# #

View File

@ -25,54 +25,6 @@ struct PlugTestData {
}; };
typedef struct PlugTestData 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) static void test_plug_with_device_add(gconstpointer data)
{ {
const PlugTestData *td = data; const PlugTestData *td = data;
@ -144,36 +96,13 @@ static void add_pc_test_case(const char *mname)
data->cores = 3; data->cores = 3;
data->threads = 2; data->threads = 2;
data->maxcpus = data->sockets * data->cores * data->threads; 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); path = g_strdup_printf("cpu-plug/%s/device-add/%ux%ux%u&maxcpus=%u",
data2->device_model = g_strdup(data->device_model); mname, data->sockets, data->cores,
data->threads, data->maxcpus);
path = g_strdup_printf("cpu-plug/%s/cpu-add/%ux%ux%u&maxcpus=%u", qtest_add_data_func_full(path, data, test_plug_with_device_add,
mname, data->sockets, data->cores, test_data_free);
data->threads, data->maxcpus); g_free(path);
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);
}
} }
static void add_pseries_test_case(const char *mname) 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) static void add_s390x_test_case(const char *mname)
{ {
char *path; char *path;
PlugTestData *data, *data2; PlugTestData *data;
if (!g_str_has_prefix(mname, "s390-ccw-virtio-")) { if (!g_str_has_prefix(mname, "s390-ccw-virtio-")) {
return; return;
@ -220,21 +149,10 @@ static void add_s390x_test_case(const char *mname)
data->threads = 1; data->threads = 1;
data->maxcpus = data->sockets * data->cores * data->threads; data->maxcpus = data->sockets * data->cores * data->threads;
data2 = g_memdup(data, sizeof(PlugTestData)); path = g_strdup_printf("cpu-plug/%s/device-add/%ux%ux%u&maxcpus=%u",
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, mname, data->sockets, data->cores,
data->threads, data->maxcpus); data->threads, data->maxcpus);
qtest_add_data_func_full(path, data, test_plug_with_cpu_add, qtest_add_data_func_full(path, data, 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, data2->sockets, data2->cores,
data2->threads, data2->maxcpus);
qtest_add_data_func_full(path, data2, test_plug_with_device_add,
test_data_free); test_data_free);
g_free(path); g_free(path);
} }

View File

@ -27,7 +27,6 @@ static const char *hmp_cmds[] = {
"chardev-change testchardev1 ringbuf", "chardev-change testchardev1 ringbuf",
"chardev-remove testchardev1", "chardev-remove testchardev1",
"commit all", "commit all",
"cpu-add 1",
"cpu 0", "cpu 0",
"device_add ?", "device_add ?",
"device_add usb-mouse,id=mouse1", "device_add usb-mouse,id=mouse1",