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:
parent
892040dc8b
commit
63e79833c4
@ -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
|
||||
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)
|
||||
''''''''''''''''''''''''''''
|
||||
|
||||
@ -294,12 +287,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)
|
||||
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
|
||||
|
||||
@ -517,6 +504,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
|
||||
-------------------------------------
|
||||
|
||||
@ -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
|
||||
'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
|
||||
-------------------
|
||||
|
||||
|
@ -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?",
|
||||
|
@ -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;
|
||||
|
@ -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)) {
|
||||
|
27
hw/i386/pc.c
27
hw/i386/pc.c
@ -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
|
||||
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->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;
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -168,7 +168,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);
|
||||
|
||||
|
@ -132,7 +132,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);
|
||||
|
@ -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);
|
||||
|
@ -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:
|
||||
#
|
||||
|
@ -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,
|
||||
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);
|
||||
}
|
||||
|
@ -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",
|
||||
|
Loading…
Reference in New Issue
Block a user