QAPI patches patches for 2022-12-14
-----BEGIN PGP SIGNATURE----- iQJGBAABCAAwFiEENUvIs9frKmtoZ05fOHC0AOuRhlMFAmOaIJoSHGFybWJydUBy ZWRoYXQuY29tAAoJEDhwtADrkYZTViMP/228DvzS8KBbEFUoCRbgxpnx2zk+05lk 4TpbVohS3k25bgT86PR8d4PgVxItrKjXmx7v4ubm4hEtPk5YC/PADWwyZfJKzrst ogvGVIl++ccR1S0REonlSCmAxxUH6V2gYBE1XRs0vYRWGZefOqyINJ7i9W9FUhv8 27V26dNtFel/z6aqPrRn2PXT+Y50DfLTAg+A+KpG6GdNR6zeAxGX6DCegWeZwZW4 Kod3TfC6ZvYKxGhl46qpQwBvYUBCtO5ffxrbRLbmcKMYDMyIO7sfMQTQWBJ8pgwj AkiIjV/J2cPuHGyPDOFjC/Q6kaEz0L+wITPodflLyX+qYJGpr4q6L82fpZD7piV7 9KoEppocdcJZxI/qrDwk03UH0UavPoqnCgpCzZ6+zOPhoUM8fP6qhPdSNxP2TkJz YstjWdWd39Nd5YnKMz6rRwBXuXSx4RiNFiBjnLahNZ0LkdFlWV5D54/7q1/YXoGK jnmcbmhyaVPmgCBBOEdHgzafP71qRQJqCnQeX11WJyA5bCb09sQTDXHJnhx0FDfz Zxgw+8Mc98fDQm5vx0t4zQQJZqiqEoIKxNKdgMn+JI61Wu0i8XsgrDnjIPy13EfI AuCmiCi9HcU5Jde823tF0kRl4XL1hp2AylTJyv3qwqlbUyEyKh0G6Aepfp4axguI HAsQ2UiVnjj8 =fMjR -----END PGP SIGNATURE----- Merge tag 'pull-qapi-2022-12-14-v2' of https://repo.or.cz/qemu/armbru into staging QAPI patches patches for 2022-12-14 # gpg: Signature made Wed 14 Dec 2022 19:14:34 GMT # gpg: using RSA key 354BC8B3D7EB2A6B68674E5F3870B400EB918653 # gpg: issuer "armbru@redhat.com" # gpg: Good signature from "Markus Armbruster <armbru@redhat.com>" [full] # gpg: aka "Markus Armbruster <armbru@pond.sub.org>" [full] # Primary key fingerprint: 354B C8B3 D7EB 2A6B 6867 4E5F 3870 B400 EB91 8653 * tag 'pull-qapi-2022-12-14-v2' of https://repo.or.cz/qemu/armbru: (30 commits) qapi: Drop temporary logic to support conversion step by step qapi qga: Elide redundant has_FOO in generated C qapi virtio: Elide redundant has_FOO in generated C qapi ui: Elide redundant has_FOO in generated C qapi transaction: Elide redundant has_FOO in generated C qapi tpm: Elide redundant has_FOO in generated C qapi stats: Elide redundant has_FOO in generated C qapi run-state: Elide redundant has_FOO in generated C qapi rocker: Elide redundant has_FOO in generated C qapi replay: Elide redundant has_FOO in generated C qapi qdev qom: Elide redundant has_FOO in generated C qapi pci: Elide redundant has_FOO in generated C qapi net: Elide redundant has_FOO in generated C qapi misc: Elide redundant has_FOO in generated C qapi migration: Elide redundant has_FOO in generated C qapi machine: Elide redundant has_FOO in generated C qapi job: Elide redundant has_FOO in generated C qapi dump: Elide redundant has_FOO in generated C qapi crypto: Elide redundant has_FOO in generated C qapi chardev: Elide redundant has_FOO in generated C ... Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
ae2b87341b
@ -449,7 +449,7 @@ static int alsa_open(bool in, struct alsa_params_req *req,
|
||||
snd_pcm_hw_params_t *hw_params;
|
||||
int err;
|
||||
unsigned int freq, nchannels;
|
||||
const char *pcm_name = apdo->has_dev ? apdo->dev : "default";
|
||||
const char *pcm_name = apdo->dev ?: "default";
|
||||
snd_pcm_uframes_t obt_buffer_size;
|
||||
const char *typ = in ? "ADC" : "DAC";
|
||||
snd_pcm_format_t obtfmt;
|
||||
|
@ -2035,15 +2035,13 @@ void audio_create_pdos(Audiodev *dev)
|
||||
switch (dev->driver) {
|
||||
#define CASE(DRIVER, driver, pdo_name) \
|
||||
case AUDIODEV_DRIVER_##DRIVER: \
|
||||
if (!dev->u.driver.has_in) { \
|
||||
if (!dev->u.driver.in) { \
|
||||
dev->u.driver.in = g_malloc0( \
|
||||
sizeof(Audiodev##pdo_name##PerDirectionOptions)); \
|
||||
dev->u.driver.has_in = true; \
|
||||
} \
|
||||
if (!dev->u.driver.has_out) { \
|
||||
if (!dev->u.driver.out) { \
|
||||
dev->u.driver.out = g_malloc0( \
|
||||
sizeof(Audiodev##pdo_name##PerDirectionOptions)); \
|
||||
dev->u.driver.has_out = true; \
|
||||
} \
|
||||
break
|
||||
|
||||
|
@ -62,15 +62,12 @@ static void get_int(const char *env, uint32_t *dst, bool *has_dst)
|
||||
}
|
||||
}
|
||||
|
||||
static void get_str(const char *env, char **dst, bool *has_dst)
|
||||
static void get_str(const char *env, char **dst)
|
||||
{
|
||||
const char *val = getenv(env);
|
||||
if (val) {
|
||||
if (*has_dst) {
|
||||
g_free(*dst);
|
||||
}
|
||||
g_free(*dst);
|
||||
*dst = g_strdup(val);
|
||||
*has_dst = true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -169,7 +166,7 @@ static void handle_alsa_per_direction(
|
||||
get_bool(buf, &apdo->try_poll, &apdo->has_try_poll);
|
||||
|
||||
strcpy(buf + len, "DEV");
|
||||
get_str(buf, &apdo->dev, &apdo->has_dev);
|
||||
get_str(buf, &apdo->dev);
|
||||
|
||||
strcpy(buf + len, "SIZE_IN_USEC");
|
||||
get_bool(buf, &size_in_usecs, &dummy);
|
||||
@ -235,7 +232,7 @@ static void handle_oss_per_direction(
|
||||
const char *dev_env)
|
||||
{
|
||||
get_bool(try_poll_env, &opdo->try_poll, &opdo->has_try_poll);
|
||||
get_str(dev_env, &opdo->dev, &opdo->has_dev);
|
||||
get_str(dev_env, &opdo->dev);
|
||||
|
||||
get_bytes_to_usecs("QEMU_OSS_FRAGSIZE",
|
||||
&opdo->buffer_length, &opdo->has_buffer_length,
|
||||
@ -261,7 +258,7 @@ static void handle_oss(Audiodev *dev)
|
||||
static void handle_pa_per_direction(
|
||||
AudiodevPaPerDirectionOptions *ppdo, const char *env)
|
||||
{
|
||||
get_str(env, &ppdo->name, &ppdo->has_name);
|
||||
get_str(env, &ppdo->name);
|
||||
}
|
||||
|
||||
static void handle_pa(Audiodev *dev)
|
||||
@ -278,7 +275,7 @@ static void handle_pa(Audiodev *dev)
|
||||
&dev->u.pa.out->has_buffer_length,
|
||||
qapi_AudiodevPaPerDirectionOptions_base(dev->u.pa.out));
|
||||
|
||||
get_str("QEMU_PA_SERVER", &dev->u.pa.server, &dev->u.pa.has_server);
|
||||
get_str("QEMU_PA_SERVER", &dev->u.pa.server);
|
||||
}
|
||||
|
||||
/* SDL */
|
||||
@ -299,7 +296,7 @@ static void handle_wav(Audiodev *dev)
|
||||
&dev->u.wav.out->has_format);
|
||||
get_int("QEMU_WAV_DAC_FIXED_CHANNELS",
|
||||
&dev->u.wav.out->channels, &dev->u.wav.out->has_channels);
|
||||
get_str("QEMU_WAV_PATH", &dev->u.wav.path, &dev->u.wav.has_path);
|
||||
get_str("QEMU_WAV_PATH", &dev->u.wav.path);
|
||||
}
|
||||
|
||||
/* general */
|
||||
|
@ -252,7 +252,7 @@ static int oss_open(int in, struct oss_params *req, audsettings *as,
|
||||
audio_buf_info abinfo;
|
||||
int fmt, freq, nchannels;
|
||||
int setfragment = 1;
|
||||
const char *dspname = opdo->has_dev ? opdo->dev : "/dev/dsp";
|
||||
const char *dspname = opdo->dev ?: "/dev/dsp";
|
||||
const char *typ = in ? "ADC" : "DAC";
|
||||
#ifdef USE_DSP_POLICY
|
||||
int policy = oopts->has_dsp_policy ? oopts->dsp_policy : 5;
|
||||
@ -745,10 +745,8 @@ static void *oss_audio_init(Audiodev *dev)
|
||||
oss_init_per_direction(oopts->in);
|
||||
oss_init_per_direction(oopts->out);
|
||||
|
||||
if (access(oopts->in->has_dev ? oopts->in->dev : "/dev/dsp",
|
||||
R_OK | W_OK) < 0 ||
|
||||
access(oopts->out->has_dev ? oopts->out->dev : "/dev/dsp",
|
||||
R_OK | W_OK) < 0) {
|
||||
if (access(oopts->in->dev ?: "/dev/dsp", R_OK | W_OK) < 0 ||
|
||||
access(oopts->out->dev ?: "/dev/dsp", R_OK | W_OK) < 0) {
|
||||
return NULL;
|
||||
}
|
||||
return dev;
|
||||
|
@ -536,9 +536,9 @@ static int qpa_init_out(HWVoiceOut *hw, struct audsettings *as,
|
||||
|
||||
pa->stream = qpa_simple_new (
|
||||
c,
|
||||
ppdo->has_stream_name ? ppdo->stream_name : g->dev->id,
|
||||
ppdo->stream_name ?: g->dev->id,
|
||||
PA_STREAM_PLAYBACK,
|
||||
ppdo->has_name ? ppdo->name : NULL,
|
||||
ppdo->name,
|
||||
&ss,
|
||||
&ba, /* buffering attributes */
|
||||
&error
|
||||
@ -585,9 +585,9 @@ static int qpa_init_in(HWVoiceIn *hw, struct audsettings *as, void *drv_opaque)
|
||||
|
||||
pa->stream = qpa_simple_new (
|
||||
c,
|
||||
ppdo->has_stream_name ? ppdo->stream_name : g->dev->id,
|
||||
ppdo->stream_name ?: g->dev->id,
|
||||
PA_STREAM_RECORD,
|
||||
ppdo->has_name ? ppdo->name : NULL,
|
||||
ppdo->name,
|
||||
&ss,
|
||||
&ba, /* buffering attributes */
|
||||
&error
|
||||
@ -827,7 +827,7 @@ static void *qpa_audio_init(Audiodev *dev)
|
||||
|
||||
assert(dev->driver == AUDIODEV_DRIVER_PA);
|
||||
|
||||
if (!popts->has_server) {
|
||||
if (!popts->server) {
|
||||
char pidfile[64];
|
||||
char *runtime;
|
||||
struct stat st;
|
||||
@ -850,7 +850,7 @@ static void *qpa_audio_init(Audiodev *dev)
|
||||
}
|
||||
|
||||
g = g_new0(paaudio, 1);
|
||||
server = popts->has_server ? popts->server : NULL;
|
||||
server = popts->server;
|
||||
|
||||
g->dev = dev;
|
||||
|
||||
|
@ -333,7 +333,7 @@ static int sndio_init(SndioVoice *self,
|
||||
unsigned int nch;
|
||||
int i, nfds;
|
||||
|
||||
dev_name = opts->has_dev ? opts->dev : SIO_DEVANY;
|
||||
dev_name = opts->dev ?: SIO_DEVANY;
|
||||
latency = opts->has_latency ? opts->latency : SNDIO_LATENCY_US;
|
||||
|
||||
/* open the device in non-blocking mode */
|
||||
|
@ -78,7 +78,7 @@ static int wav_init_out(HWVoiceOut *hw, struct audsettings *as,
|
||||
Audiodev *dev = drv_opaque;
|
||||
AudiodevWavOptions *wopts = &dev->u.wav;
|
||||
struct audsettings wav_as = audiodev_to_audsettings(dev->u.wav.out);
|
||||
const char *wav_path = wopts->has_path ? wopts->path : "qemu.wav";
|
||||
const char *wav_path = wopts->path ?: "qemu.wav";
|
||||
|
||||
stereo = wav_as.nchannels == 2;
|
||||
switch (wav_as.fmt) {
|
||||
|
@ -259,12 +259,10 @@ tpm_passthrough_handle_device_opts(TPMPassthruState *tpm_pt, QemuOpts *opts)
|
||||
value = qemu_opt_get(opts, "cancel-path");
|
||||
if (value) {
|
||||
tpm_pt->options->cancel_path = g_strdup(value);
|
||||
tpm_pt->options->has_cancel_path = true;
|
||||
}
|
||||
|
||||
value = qemu_opt_get(opts, "path");
|
||||
if (value) {
|
||||
tpm_pt->options->has_path = true;
|
||||
tpm_pt->options->path = g_strdup(value);
|
||||
}
|
||||
|
||||
|
@ -1860,7 +1860,7 @@ static void send_qmp_error_event(BlockBackend *blk,
|
||||
BlockDriverState *bs = blk_bs(blk);
|
||||
|
||||
optype = is_read ? IO_OPERATION_TYPE_READ : IO_OPERATION_TYPE_WRITE;
|
||||
qapi_event_send_block_io_error(blk_name(blk), !!bs,
|
||||
qapi_event_send_block_io_error(blk_name(blk),
|
||||
bs ? bdrv_get_node_name(bs) : NULL, optype,
|
||||
action, blk_iostatus_is_enabled(blk),
|
||||
error == ENOSPC, strerror(error));
|
||||
|
@ -432,7 +432,7 @@ static int cbw_open(BlockDriverState *bs, QDict *options, int flags,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (opts->has_bitmap) {
|
||||
if (opts->bitmap) {
|
||||
bitmap = block_dirty_bitmap_lookup(opts->bitmap->node,
|
||||
opts->bitmap->name, NULL, errp);
|
||||
if (!bitmap) {
|
||||
|
@ -541,7 +541,6 @@ BlockDirtyInfoList *bdrv_query_dirty_bitmaps(BlockDriverState *bs)
|
||||
|
||||
info->count = bdrv_get_dirty_count(bm);
|
||||
info->granularity = bdrv_dirty_bitmap_granularity(bm);
|
||||
info->has_name = !!bm->name;
|
||||
info->name = g_strdup(bm->name);
|
||||
info->recording = bdrv_dirty_bitmap_recording(bm);
|
||||
info->busy = bdrv_dirty_bitmap_busy(bm);
|
||||
|
@ -114,7 +114,7 @@ BlockExport *blk_exp_add(BlockExportOptions *export, Error **errp)
|
||||
ctx = bdrv_get_aio_context(bs);
|
||||
aio_context_acquire(ctx);
|
||||
|
||||
if (export->has_iothread) {
|
||||
if (export->iothread) {
|
||||
IOThread *iothread;
|
||||
AioContext *new_ctx;
|
||||
Error **set_context_errp;
|
||||
|
@ -265,8 +265,7 @@ static int vduse_blk_exp_create(BlockExport *exp, BlockExportOptions *opts,
|
||||
}
|
||||
vblk_exp->num_queues = num_queues;
|
||||
vblk_exp->handler.blk = exp->blk;
|
||||
vblk_exp->handler.serial = g_strdup(vblk_opts->has_serial ?
|
||||
vblk_opts->serial : "");
|
||||
vblk_exp->handler.serial = g_strdup(vblk_opts->serial ?: "");
|
||||
vblk_exp->handler.logical_block_size = logical_block_size;
|
||||
vblk_exp->handler.writable = opts->writable;
|
||||
|
||||
|
@ -830,7 +830,6 @@ static int qemu_gluster_open(BlockDriverState *bs, QDict *options,
|
||||
s->logfile = g_strdup(logfile ? logfile : GLUSTER_LOGFILE_DEFAULT);
|
||||
|
||||
gconf->logfile = g_strdup(s->logfile);
|
||||
gconf->has_logfile = true;
|
||||
|
||||
s->glfs = qemu_gluster_init(gconf, filename, options, errp);
|
||||
if (!s->glfs) {
|
||||
@ -917,7 +916,6 @@ static int qemu_gluster_reopen_prepare(BDRVReopenState *state,
|
||||
gconf->debug = s->debug;
|
||||
gconf->has_debug = true;
|
||||
gconf->logfile = g_strdup(s->logfile);
|
||||
gconf->has_logfile = true;
|
||||
|
||||
/*
|
||||
* If 'state->bs->exact_filename' is empty, 'state->options' should contain
|
||||
@ -1162,7 +1160,6 @@ static int coroutine_fn qemu_gluster_co_create_opts(BlockDriver *drv,
|
||||
if (!gconf->logfile) {
|
||||
gconf->logfile = g_strdup(GLUSTER_LOGFILE_DEFAULT);
|
||||
}
|
||||
gconf->has_logfile = true;
|
||||
|
||||
ret = qemu_gluster_parse(gconf, filename, NULL, errp);
|
||||
if (ret < 0) {
|
||||
|
@ -241,7 +241,6 @@ void hmp_drive_mirror(Monitor *mon, const QDict *qdict)
|
||||
DriveMirror mirror = {
|
||||
.device = (char *)qdict_get_str(qdict, "device"),
|
||||
.target = (char *)filename,
|
||||
.has_format = !!format,
|
||||
.format = (char *)format,
|
||||
.sync = full ? MIRROR_SYNC_MODE_FULL : MIRROR_SYNC_MODE_TOP,
|
||||
.has_mode = true,
|
||||
@ -270,7 +269,6 @@ void hmp_drive_backup(Monitor *mon, const QDict *qdict)
|
||||
DriveBackup backup = {
|
||||
.device = (char *)device,
|
||||
.target = (char *)filename,
|
||||
.has_format = !!format,
|
||||
.format = (char *)format,
|
||||
.sync = full ? MIRROR_SYNC_MODE_FULL : MIRROR_SYNC_MODE_TOP,
|
||||
.has_mode = true,
|
||||
@ -360,9 +358,7 @@ void hmp_snapshot_blkdev(Monitor *mon, const QDict *qdict)
|
||||
}
|
||||
|
||||
mode = reuse ? NEW_IMAGE_MODE_EXISTING : NEW_IMAGE_MODE_ABSOLUTE_PATHS;
|
||||
qmp_blockdev_snapshot_sync(true, device, false, NULL,
|
||||
filename, false, NULL,
|
||||
!!format, format,
|
||||
qmp_blockdev_snapshot_sync(device, NULL, filename, NULL, format,
|
||||
true, mode, &err);
|
||||
end:
|
||||
hmp_handle_error(mon, err);
|
||||
@ -385,8 +381,7 @@ void hmp_snapshot_delete_blkdev_internal(Monitor *mon, const QDict *qdict)
|
||||
const char *id = qdict_get_try_str(qdict, "id");
|
||||
Error *err = NULL;
|
||||
|
||||
qmp_blockdev_snapshot_delete_internal_sync(device, !!id, id,
|
||||
true, name, &err);
|
||||
qmp_blockdev_snapshot_delete_internal_sync(device, id, name, &err);
|
||||
hmp_handle_error(mon, err);
|
||||
}
|
||||
|
||||
@ -427,7 +422,7 @@ void hmp_nbd_server_start(Monitor *mon, const QDict *qdict)
|
||||
block_list = qmp_query_block(NULL);
|
||||
|
||||
for (info = block_list; info; info = info->next) {
|
||||
if (!info->value->has_inserted) {
|
||||
if (!info->value->inserted) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -460,7 +455,6 @@ void hmp_nbd_server_add(Monitor *mon, const QDict *qdict)
|
||||
|
||||
NbdServerAddOptions export = {
|
||||
.device = (char *) device,
|
||||
.has_name = !!name,
|
||||
.name = (char *) name,
|
||||
.has_writable = true,
|
||||
.writable = writable,
|
||||
@ -495,7 +489,7 @@ void coroutine_fn hmp_block_resize(Monitor *mon, const QDict *qdict)
|
||||
int64_t size = qdict_get_int(qdict, "size");
|
||||
Error *err = NULL;
|
||||
|
||||
qmp_block_resize(true, device, false, NULL, size, &err);
|
||||
qmp_block_resize(device, NULL, size, &err);
|
||||
hmp_handle_error(mon, err);
|
||||
}
|
||||
|
||||
@ -506,11 +500,10 @@ void hmp_block_stream(Monitor *mon, const QDict *qdict)
|
||||
const char *base = qdict_get_try_str(qdict, "base");
|
||||
int64_t speed = qdict_get_try_int(qdict, "speed", 0);
|
||||
|
||||
qmp_block_stream(true, device, device, base != NULL, base, false, NULL,
|
||||
false, NULL, false, NULL,
|
||||
qdict_haskey(qdict, "speed"), speed, true,
|
||||
BLOCKDEV_ON_ERROR_REPORT, false, NULL, false, false, false,
|
||||
false, &error);
|
||||
qmp_block_stream(device, device, base, NULL, NULL, NULL,
|
||||
qdict_haskey(qdict, "speed"), speed,
|
||||
true, BLOCKDEV_ON_ERROR_REPORT, NULL,
|
||||
false, false, false, false, &error);
|
||||
|
||||
hmp_handle_error(mon, error);
|
||||
}
|
||||
@ -534,10 +527,8 @@ void hmp_block_set_io_throttle(Monitor *mon, const QDict *qdict)
|
||||
* version has only one, so we must decide which one to pass.
|
||||
*/
|
||||
if (blk_by_name(device)) {
|
||||
throttle.has_device = true;
|
||||
throttle.device = device;
|
||||
} else {
|
||||
throttle.has_id = true;
|
||||
throttle.id = device;
|
||||
}
|
||||
|
||||
@ -551,7 +542,7 @@ void hmp_eject(Monitor *mon, const QDict *qdict)
|
||||
const char *device = qdict_get_str(qdict, "device");
|
||||
Error *err = NULL;
|
||||
|
||||
qmp_eject(true, device, false, NULL, true, force, &err);
|
||||
qmp_eject(device, NULL, true, force, &err);
|
||||
hmp_handle_error(mon, err);
|
||||
}
|
||||
|
||||
@ -635,18 +626,18 @@ static void print_block_info(Monitor *mon, BlockInfo *info,
|
||||
{
|
||||
ImageInfo *image_info;
|
||||
|
||||
assert(!info || !info->has_inserted || info->inserted == inserted);
|
||||
assert(!info || !info->inserted || info->inserted == inserted);
|
||||
|
||||
if (info && *info->device) {
|
||||
monitor_puts(mon, info->device);
|
||||
if (inserted && inserted->has_node_name) {
|
||||
if (inserted && inserted->node_name) {
|
||||
monitor_printf(mon, " (%s)", inserted->node_name);
|
||||
}
|
||||
} else {
|
||||
assert(info || inserted);
|
||||
monitor_puts(mon,
|
||||
inserted && inserted->has_node_name ? inserted->node_name
|
||||
: info && info->has_qdev ? info->qdev
|
||||
inserted && inserted->node_name ? inserted->node_name
|
||||
: info && info->qdev ? info->qdev
|
||||
: "<anonymous>");
|
||||
}
|
||||
|
||||
@ -661,7 +652,7 @@ static void print_block_info(Monitor *mon, BlockInfo *info,
|
||||
}
|
||||
|
||||
if (info) {
|
||||
if (info->has_qdev) {
|
||||
if (info->qdev) {
|
||||
monitor_printf(mon, " Attached to: %s\n", info->qdev);
|
||||
}
|
||||
if (info->has_io_status && info->io_status != BLOCK_DEVICE_IO_STATUS_OK) {
|
||||
@ -686,7 +677,7 @@ static void print_block_info(Monitor *mon, BlockInfo *info,
|
||||
inserted->cache->direct ? ", direct" : "",
|
||||
inserted->cache->no_flush ? ", ignore flushes" : "");
|
||||
|
||||
if (inserted->has_backing_file) {
|
||||
if (inserted->backing_file) {
|
||||
monitor_printf(mon,
|
||||
" Backing file: %s "
|
||||
"(chain depth: %" PRId64 ")\n",
|
||||
@ -735,7 +726,7 @@ static void print_block_info(Monitor *mon, BlockInfo *info,
|
||||
image_info = inserted->image;
|
||||
while (1) {
|
||||
bdrv_image_info_dump(image_info);
|
||||
if (image_info->has_backing_image) {
|
||||
if (image_info->backing_image) {
|
||||
image_info = image_info->backing_image;
|
||||
} else {
|
||||
break;
|
||||
@ -769,8 +760,7 @@ void hmp_info_block(Monitor *mon, const QDict *qdict)
|
||||
monitor_printf(mon, "\n");
|
||||
}
|
||||
|
||||
print_block_info(mon, info->value, info->value->has_inserted
|
||||
? info->value->inserted : NULL,
|
||||
print_block_info(mon, info->value, info->value->inserted,
|
||||
verbose);
|
||||
printed = true;
|
||||
}
|
||||
@ -784,7 +774,7 @@ void hmp_info_block(Monitor *mon, const QDict *qdict)
|
||||
/* Print node information */
|
||||
blockdev_list = qmp_query_named_block_nodes(false, false, NULL);
|
||||
for (blockdev = blockdev_list; blockdev; blockdev = blockdev->next) {
|
||||
assert(blockdev->value->has_node_name);
|
||||
assert(blockdev->value->node_name);
|
||||
if (device && strcmp(device, blockdev->value->node_name)) {
|
||||
continue;
|
||||
}
|
||||
@ -805,7 +795,7 @@ void hmp_info_blockstats(Monitor *mon, const QDict *qdict)
|
||||
stats_list = qmp_query_blockstats(false, false, NULL);
|
||||
|
||||
for (stats = stats_list; stats; stats = stats->next) {
|
||||
if (!stats->value->has_device) {
|
||||
if (!stats->value->device) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -116,8 +116,8 @@ static int do_open_tray(const char *blk_name, const char *qdev_id,
|
||||
return 0;
|
||||
}
|
||||
|
||||
void qmp_blockdev_open_tray(bool has_device, const char *device,
|
||||
bool has_id, const char *id,
|
||||
void qmp_blockdev_open_tray(const char *device,
|
||||
const char *id,
|
||||
bool has_force, bool force,
|
||||
Error **errp)
|
||||
{
|
||||
@ -127,9 +127,7 @@ void qmp_blockdev_open_tray(bool has_device, const char *device,
|
||||
if (!has_force) {
|
||||
force = false;
|
||||
}
|
||||
rc = do_open_tray(has_device ? device : NULL,
|
||||
has_id ? id : NULL,
|
||||
force, &local_err);
|
||||
rc = do_open_tray(device, id, force, &local_err);
|
||||
if (rc && rc != -ENOSYS && rc != -EINPROGRESS) {
|
||||
error_propagate(errp, local_err);
|
||||
return;
|
||||
@ -137,16 +135,13 @@ void qmp_blockdev_open_tray(bool has_device, const char *device,
|
||||
error_free(local_err);
|
||||
}
|
||||
|
||||
void qmp_blockdev_close_tray(bool has_device, const char *device,
|
||||
bool has_id, const char *id,
|
||||
void qmp_blockdev_close_tray(const char *device,
|
||||
const char *id,
|
||||
Error **errp)
|
||||
{
|
||||
BlockBackend *blk;
|
||||
Error *local_err = NULL;
|
||||
|
||||
device = has_device ? device : NULL;
|
||||
id = has_id ? id : NULL;
|
||||
|
||||
blk = qmp_get_blk(device, id, errp);
|
||||
if (!blk) {
|
||||
return;
|
||||
@ -173,17 +168,14 @@ void qmp_blockdev_close_tray(bool has_device, const char *device,
|
||||
}
|
||||
}
|
||||
|
||||
static void blockdev_remove_medium(bool has_device, const char *device,
|
||||
bool has_id, const char *id, Error **errp)
|
||||
static void blockdev_remove_medium(const char *device, const char *id,
|
||||
Error **errp)
|
||||
{
|
||||
BlockBackend *blk;
|
||||
BlockDriverState *bs;
|
||||
AioContext *aio_context;
|
||||
bool has_attached_device;
|
||||
|
||||
device = has_device ? device : NULL;
|
||||
id = has_id ? id : NULL;
|
||||
|
||||
blk = qmp_get_blk(device, id, errp);
|
||||
if (!blk) {
|
||||
return;
|
||||
@ -232,7 +224,7 @@ out:
|
||||
|
||||
void qmp_blockdev_remove_medium(const char *id, Error **errp)
|
||||
{
|
||||
blockdev_remove_medium(false, NULL, true, id, errp);
|
||||
blockdev_remove_medium(NULL, id, errp);
|
||||
}
|
||||
|
||||
static void qmp_blockdev_insert_anon_medium(BlockBackend *blk,
|
||||
@ -280,16 +272,13 @@ static void qmp_blockdev_insert_anon_medium(BlockBackend *blk,
|
||||
}
|
||||
}
|
||||
|
||||
static void blockdev_insert_medium(bool has_device, const char *device,
|
||||
bool has_id, const char *id,
|
||||
static void blockdev_insert_medium(const char *device, const char *id,
|
||||
const char *node_name, Error **errp)
|
||||
{
|
||||
BlockBackend *blk;
|
||||
BlockDriverState *bs;
|
||||
|
||||
blk = qmp_get_blk(has_device ? device : NULL,
|
||||
has_id ? id : NULL,
|
||||
errp);
|
||||
blk = qmp_get_blk(device, id, errp);
|
||||
if (!blk) {
|
||||
return;
|
||||
}
|
||||
@ -311,13 +300,13 @@ static void blockdev_insert_medium(bool has_device, const char *device,
|
||||
void qmp_blockdev_insert_medium(const char *id, const char *node_name,
|
||||
Error **errp)
|
||||
{
|
||||
blockdev_insert_medium(false, NULL, true, id, node_name, errp);
|
||||
blockdev_insert_medium(NULL, id, node_name, errp);
|
||||
}
|
||||
|
||||
void qmp_blockdev_change_medium(bool has_device, const char *device,
|
||||
bool has_id, const char *id,
|
||||
void qmp_blockdev_change_medium(const char *device,
|
||||
const char *id,
|
||||
const char *filename,
|
||||
bool has_format, const char *format,
|
||||
const char *format,
|
||||
bool has_force, bool force,
|
||||
bool has_read_only,
|
||||
BlockdevChangeReadOnlyMode read_only,
|
||||
@ -331,9 +320,7 @@ void qmp_blockdev_change_medium(bool has_device, const char *device,
|
||||
QDict *options = NULL;
|
||||
Error *err = NULL;
|
||||
|
||||
blk = qmp_get_blk(has_device ? device : NULL,
|
||||
has_id ? id : NULL,
|
||||
errp);
|
||||
blk = qmp_get_blk(device, id, errp);
|
||||
if (!blk) {
|
||||
goto fail;
|
||||
}
|
||||
@ -370,7 +357,7 @@ void qmp_blockdev_change_medium(bool has_device, const char *device,
|
||||
detect_zeroes = blk_get_detect_zeroes_from_root_state(blk);
|
||||
qdict_put_str(options, "detect-zeroes", detect_zeroes ? "on" : "off");
|
||||
|
||||
if (has_format) {
|
||||
if (format) {
|
||||
qdict_put_str(options, "driver", format);
|
||||
}
|
||||
|
||||
@ -379,9 +366,7 @@ void qmp_blockdev_change_medium(bool has_device, const char *device,
|
||||
goto fail;
|
||||
}
|
||||
|
||||
rc = do_open_tray(has_device ? device : NULL,
|
||||
has_id ? id : NULL,
|
||||
force, &err);
|
||||
rc = do_open_tray(device, id, force, &err);
|
||||
if (rc && rc != -ENOSYS) {
|
||||
error_propagate(errp, err);
|
||||
goto fail;
|
||||
@ -389,7 +374,7 @@ void qmp_blockdev_change_medium(bool has_device, const char *device,
|
||||
error_free(err);
|
||||
err = NULL;
|
||||
|
||||
blockdev_remove_medium(has_device, device, has_id, id, &err);
|
||||
blockdev_remove_medium(device, id, &err);
|
||||
if (err) {
|
||||
error_propagate(errp, err);
|
||||
goto fail;
|
||||
@ -401,7 +386,7 @@ void qmp_blockdev_change_medium(bool has_device, const char *device,
|
||||
goto fail;
|
||||
}
|
||||
|
||||
qmp_blockdev_close_tray(has_device, device, has_id, id, errp);
|
||||
qmp_blockdev_close_tray(device, id, errp);
|
||||
|
||||
fail:
|
||||
/* If the medium has been inserted, the device has its own reference, so
|
||||
@ -410,8 +395,7 @@ fail:
|
||||
bdrv_unref(medium_bs);
|
||||
}
|
||||
|
||||
void qmp_eject(bool has_device, const char *device,
|
||||
bool has_id, const char *id,
|
||||
void qmp_eject(const char *device, const char *id,
|
||||
bool has_force, bool force, Error **errp)
|
||||
{
|
||||
Error *local_err = NULL;
|
||||
@ -421,16 +405,14 @@ void qmp_eject(bool has_device, const char *device,
|
||||
force = false;
|
||||
}
|
||||
|
||||
rc = do_open_tray(has_device ? device : NULL,
|
||||
has_id ? id : NULL,
|
||||
force, &local_err);
|
||||
rc = do_open_tray(device, id, force, &local_err);
|
||||
if (rc && rc != -ENOSYS) {
|
||||
error_propagate(errp, local_err);
|
||||
return;
|
||||
}
|
||||
error_free(local_err);
|
||||
|
||||
blockdev_remove_medium(has_device, device, has_id, id, errp);
|
||||
blockdev_remove_medium(device, id, errp);
|
||||
}
|
||||
|
||||
/* throttling disk I/O limits */
|
||||
@ -441,9 +423,7 @@ void qmp_block_set_io_throttle(BlockIOThrottle *arg, Error **errp)
|
||||
BlockBackend *blk;
|
||||
AioContext *aio_context;
|
||||
|
||||
blk = qmp_get_blk(arg->has_device ? arg->device : NULL,
|
||||
arg->has_id ? arg->id : NULL,
|
||||
errp);
|
||||
blk = qmp_get_blk(arg->device, arg->id, errp);
|
||||
if (!blk) {
|
||||
return;
|
||||
}
|
||||
@ -516,11 +496,8 @@ void qmp_block_set_io_throttle(BlockIOThrottle *arg, Error **errp)
|
||||
/* Enable I/O limits if they're not enabled yet, otherwise
|
||||
* just update the throttling group. */
|
||||
if (!blk_get_public(blk)->throttle_group_member.throttle_state) {
|
||||
blk_io_limits_enable(blk,
|
||||
arg->has_group ? arg->group :
|
||||
arg->has_device ? arg->device :
|
||||
arg->id);
|
||||
} else if (arg->has_group) {
|
||||
blk_io_limits_enable(blk, arg->group ?: arg->device ?: arg->id);
|
||||
} else if (arg->group) {
|
||||
blk_io_limits_update_group(blk, arg->group);
|
||||
}
|
||||
/* Set the new throttling configuration */
|
||||
|
62
block/qapi.c
62
block/qapi.c
@ -71,13 +71,11 @@ BlockDeviceInfo *bdrv_block_device_info(BlockBackend *blk,
|
||||
};
|
||||
|
||||
if (bs->node_name[0]) {
|
||||
info->has_node_name = true;
|
||||
info->node_name = g_strdup(bs->node_name);
|
||||
}
|
||||
|
||||
backing = bdrv_cow_bs(bs);
|
||||
if (backing) {
|
||||
info->has_backing_file = true;
|
||||
info->backing_file = g_strdup(backing->filename);
|
||||
}
|
||||
|
||||
@ -139,7 +137,6 @@ BlockDeviceInfo *bdrv_block_device_info(BlockBackend *blk,
|
||||
info->has_iops_size = cfg.op_size;
|
||||
info->iops_size = cfg.op_size;
|
||||
|
||||
info->has_group = true;
|
||||
info->group =
|
||||
g_strdup(throttle_group_get_name(&blkp->throttle_group_member));
|
||||
}
|
||||
@ -170,7 +167,6 @@ BlockDeviceInfo *bdrv_block_device_info(BlockBackend *blk,
|
||||
*/
|
||||
info->backing_file_depth++;
|
||||
bs0 = bdrv_filter_or_cow_bs(bs0);
|
||||
(*p_image_info)->has_backing_image = true;
|
||||
p_image_info = &((*p_image_info)->backing_image);
|
||||
} else {
|
||||
break;
|
||||
@ -301,26 +297,21 @@ void bdrv_query_image_info(BlockDriverState *bs,
|
||||
qapi_free_ImageInfo(info);
|
||||
goto out;
|
||||
}
|
||||
info->has_format_specific = info->format_specific != NULL;
|
||||
|
||||
backing_filename = bs->backing_file;
|
||||
if (backing_filename[0] != '\0') {
|
||||
char *backing_filename2;
|
||||
|
||||
info->backing_filename = g_strdup(backing_filename);
|
||||
info->has_backing_filename = true;
|
||||
backing_filename2 = bdrv_get_full_backing_filename(bs, NULL);
|
||||
|
||||
/* Always report the full_backing_filename if present, even if it's the
|
||||
* same as backing_filename. That they are same is useful info. */
|
||||
if (backing_filename2) {
|
||||
info->full_backing_filename = g_strdup(backing_filename2);
|
||||
info->has_full_backing_filename = true;
|
||||
}
|
||||
|
||||
if (bs->backing_format[0]) {
|
||||
info->backing_filename_format = g_strdup(bs->backing_format);
|
||||
info->has_backing_filename_format = true;
|
||||
}
|
||||
g_free(backing_filename2);
|
||||
}
|
||||
@ -367,7 +358,6 @@ static void bdrv_query_info(BlockBackend *blk, BlockInfo **p_info,
|
||||
|
||||
qdev = blk_get_attached_dev_id(blk);
|
||||
if (qdev && *qdev) {
|
||||
info->has_qdev = true;
|
||||
info->qdev = qdev;
|
||||
} else {
|
||||
g_free(qdev);
|
||||
@ -384,7 +374,6 @@ static void bdrv_query_info(BlockBackend *blk, BlockInfo **p_info,
|
||||
}
|
||||
|
||||
if (bs && bs->drv) {
|
||||
info->has_inserted = true;
|
||||
info->inserted = bdrv_block_device_info(blk, bs, false, errp);
|
||||
if (info->inserted == NULL) {
|
||||
goto err;
|
||||
@ -411,23 +400,26 @@ static uint64List *uint64_list(uint64_t *list, int size)
|
||||
return out_list;
|
||||
}
|
||||
|
||||
static void bdrv_latency_histogram_stats(BlockLatencyHistogram *hist,
|
||||
bool *not_null,
|
||||
BlockLatencyHistogramInfo **info)
|
||||
static BlockLatencyHistogramInfo *
|
||||
bdrv_latency_histogram_stats(BlockLatencyHistogram *hist)
|
||||
{
|
||||
*not_null = hist->bins != NULL;
|
||||
if (*not_null) {
|
||||
*info = g_new0(BlockLatencyHistogramInfo, 1);
|
||||
BlockLatencyHistogramInfo *info;
|
||||
|
||||
(*info)->boundaries = uint64_list(hist->boundaries, hist->nbins - 1);
|
||||
(*info)->bins = uint64_list(hist->bins, hist->nbins);
|
||||
if (!hist->bins) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
info = g_new0(BlockLatencyHistogramInfo, 1);
|
||||
info->boundaries = uint64_list(hist->boundaries, hist->nbins - 1);
|
||||
info->bins = uint64_list(hist->bins, hist->nbins);
|
||||
return info;
|
||||
}
|
||||
|
||||
static void bdrv_query_blk_stats(BlockDeviceStats *ds, BlockBackend *blk)
|
||||
{
|
||||
BlockAcctStats *stats = blk_get_stats(blk);
|
||||
BlockAcctTimedStats *ts = NULL;
|
||||
BlockLatencyHistogram *hgram;
|
||||
|
||||
ds->rd_bytes = stats->nr_bytes[BLOCK_ACCT_READ];
|
||||
ds->wr_bytes = stats->nr_bytes[BLOCK_ACCT_WRITE];
|
||||
@ -493,15 +485,13 @@ static void bdrv_query_blk_stats(BlockDeviceStats *ds, BlockBackend *blk)
|
||||
QAPI_LIST_PREPEND(ds->timed_stats, dev_stats);
|
||||
}
|
||||
|
||||
bdrv_latency_histogram_stats(&stats->latency_histogram[BLOCK_ACCT_READ],
|
||||
&ds->has_rd_latency_histogram,
|
||||
&ds->rd_latency_histogram);
|
||||
bdrv_latency_histogram_stats(&stats->latency_histogram[BLOCK_ACCT_WRITE],
|
||||
&ds->has_wr_latency_histogram,
|
||||
&ds->wr_latency_histogram);
|
||||
bdrv_latency_histogram_stats(&stats->latency_histogram[BLOCK_ACCT_FLUSH],
|
||||
&ds->has_flush_latency_histogram,
|
||||
&ds->flush_latency_histogram);
|
||||
hgram = stats->latency_histogram;
|
||||
ds->rd_latency_histogram
|
||||
= bdrv_latency_histogram_stats(&hgram[BLOCK_ACCT_READ]);
|
||||
ds->wr_latency_histogram
|
||||
= bdrv_latency_histogram_stats(&hgram[BLOCK_ACCT_WRITE]);
|
||||
ds->flush_latency_histogram
|
||||
= bdrv_latency_histogram_stats(&hgram[BLOCK_ACCT_FLUSH]);
|
||||
}
|
||||
|
||||
static BlockStats *bdrv_query_bds_stats(BlockDriverState *bs,
|
||||
@ -526,16 +516,12 @@ static BlockStats *bdrv_query_bds_stats(BlockDriverState *bs,
|
||||
}
|
||||
|
||||
if (bdrv_get_node_name(bs)[0]) {
|
||||
s->has_node_name = true;
|
||||
s->node_name = g_strdup(bdrv_get_node_name(bs));
|
||||
}
|
||||
|
||||
s->stats->wr_highest_offset = stat64_get(&bs->wr_highest_offset);
|
||||
|
||||
s->driver_specific = bdrv_get_specific_stats(bs);
|
||||
if (s->driver_specific) {
|
||||
s->has_driver_specific = true;
|
||||
}
|
||||
|
||||
parent_child = bdrv_primary_child(bs);
|
||||
if (!parent_child ||
|
||||
@ -564,7 +550,6 @@ static BlockStats *bdrv_query_bds_stats(BlockDriverState *bs,
|
||||
}
|
||||
}
|
||||
if (parent_child) {
|
||||
s->has_parent = true;
|
||||
s->parent = bdrv_query_bds_stats(parent_child->bs, blk_level);
|
||||
}
|
||||
|
||||
@ -575,7 +560,6 @@ static BlockStats *bdrv_query_bds_stats(BlockDriverState *bs,
|
||||
* compatibility to when we put bs0->backing here, which might
|
||||
* be either)
|
||||
*/
|
||||
s->has_backing = true;
|
||||
s->backing = bdrv_query_bds_stats(filter_or_cow_bs, blk_level);
|
||||
}
|
||||
|
||||
@ -640,12 +624,10 @@ BlockStatsList *qmp_query_blockstats(bool has_query_nodes,
|
||||
|
||||
aio_context_acquire(ctx);
|
||||
s = bdrv_query_bds_stats(blk_bs(blk), true);
|
||||
s->has_device = true;
|
||||
s->device = g_strdup(blk_name(blk));
|
||||
|
||||
qdev = blk_get_attached_dev_id(blk);
|
||||
if (qdev && *qdev) {
|
||||
s->has_qdev = true;
|
||||
s->qdev = qdev;
|
||||
} else {
|
||||
g_free(qdev);
|
||||
@ -822,16 +804,16 @@ void bdrv_image_info_dump(ImageInfo *info)
|
||||
qemu_printf("cleanly shut down: no\n");
|
||||
}
|
||||
|
||||
if (info->has_backing_filename) {
|
||||
if (info->backing_filename) {
|
||||
qemu_printf("backing file: %s", info->backing_filename);
|
||||
if (!info->has_full_backing_filename) {
|
||||
if (!info->full_backing_filename) {
|
||||
qemu_printf(" (cannot determine actual path)");
|
||||
} else if (strcmp(info->backing_filename,
|
||||
info->full_backing_filename) != 0) {
|
||||
qemu_printf(" (actual path: %s)", info->full_backing_filename);
|
||||
}
|
||||
qemu_printf("\n");
|
||||
if (info->has_backing_filename_format) {
|
||||
if (info->backing_filename_format) {
|
||||
qemu_printf("backing file format: %s\n",
|
||||
info->backing_filename_format);
|
||||
}
|
||||
@ -865,7 +847,7 @@ void bdrv_image_info_dump(ImageInfo *info)
|
||||
}
|
||||
}
|
||||
|
||||
if (info->has_format_specific) {
|
||||
if (info->format_specific) {
|
||||
qemu_printf("Format specific information:\n");
|
||||
bdrv_image_info_specific_dump(info->format_specific);
|
||||
}
|
||||
|
10
block/qcow.c
10
block/qcow.c
@ -825,7 +825,7 @@ static int coroutine_fn qcow_co_create(BlockdevCreateOptions *opts,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (qcow_opts->has_encrypt &&
|
||||
if (qcow_opts->encrypt &&
|
||||
qcow_opts->encrypt->format != Q_CRYPTO_BLOCK_FORMAT_QCOW)
|
||||
{
|
||||
error_setg(errp, "Unsupported encryption format");
|
||||
@ -853,7 +853,7 @@ static int coroutine_fn qcow_co_create(BlockdevCreateOptions *opts,
|
||||
header.size = cpu_to_be64(total_size);
|
||||
header_size = sizeof(header);
|
||||
backing_filename_len = 0;
|
||||
if (qcow_opts->has_backing_file) {
|
||||
if (qcow_opts->backing_file) {
|
||||
if (strcmp(qcow_opts->backing_file, "fat:")) {
|
||||
header.backing_file_offset = cpu_to_be64(header_size);
|
||||
backing_filename_len = strlen(qcow_opts->backing_file);
|
||||
@ -861,7 +861,7 @@ static int coroutine_fn qcow_co_create(BlockdevCreateOptions *opts,
|
||||
header_size += backing_filename_len;
|
||||
} else {
|
||||
/* special backing file for vvfat */
|
||||
qcow_opts->has_backing_file = false;
|
||||
qcow_opts->backing_file = NULL;
|
||||
}
|
||||
header.cluster_bits = 9; /* 512 byte cluster to avoid copying
|
||||
unmodified sectors */
|
||||
@ -876,7 +876,7 @@ static int coroutine_fn qcow_co_create(BlockdevCreateOptions *opts,
|
||||
|
||||
header.l1_table_offset = cpu_to_be64(header_size);
|
||||
|
||||
if (qcow_opts->has_encrypt) {
|
||||
if (qcow_opts->encrypt) {
|
||||
header.crypt_method = cpu_to_be32(QCOW_CRYPT_AES);
|
||||
|
||||
crypto = qcrypto_block_create(qcow_opts->encrypt, "encrypt.",
|
||||
@ -895,7 +895,7 @@ static int coroutine_fn qcow_co_create(BlockdevCreateOptions *opts,
|
||||
goto exit;
|
||||
}
|
||||
|
||||
if (qcow_opts->has_backing_file) {
|
||||
if (qcow_opts->backing_file) {
|
||||
ret = blk_co_pwrite(qcow_blk, sizeof(header), backing_filename_len,
|
||||
qcow_opts->backing_file, 0);
|
||||
if (ret < 0) {
|
||||
|
@ -3508,7 +3508,7 @@ qcow2_co_create(BlockdevCreateOptions *create_options, Error **errp)
|
||||
if (!qcow2_opts->has_preallocation) {
|
||||
qcow2_opts->preallocation = PREALLOC_MODE_OFF;
|
||||
}
|
||||
if (qcow2_opts->has_backing_file &&
|
||||
if (qcow2_opts->backing_file &&
|
||||
qcow2_opts->preallocation != PREALLOC_MODE_OFF &&
|
||||
!qcow2_opts->extended_l2)
|
||||
{
|
||||
@ -3517,7 +3517,7 @@ qcow2_co_create(BlockdevCreateOptions *create_options, Error **errp)
|
||||
ret = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
if (qcow2_opts->has_backing_fmt && !qcow2_opts->has_backing_file) {
|
||||
if (qcow2_opts->has_backing_fmt && !qcow2_opts->backing_file) {
|
||||
error_setg(errp, "Backing format cannot be used without backing file");
|
||||
ret = -EINVAL;
|
||||
goto out;
|
||||
@ -3558,7 +3558,7 @@ qcow2_co_create(BlockdevCreateOptions *create_options, Error **errp)
|
||||
ret = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
if (qcow2_opts->data_file_raw && qcow2_opts->has_backing_file) {
|
||||
if (qcow2_opts->data_file_raw && qcow2_opts->backing_file) {
|
||||
error_setg(errp, "Backing file and data-file-raw cannot be used at "
|
||||
"the same time");
|
||||
ret = -EINVAL;
|
||||
@ -3584,7 +3584,7 @@ qcow2_co_create(BlockdevCreateOptions *create_options, Error **errp)
|
||||
* backing file when specifying data_file_raw is an error
|
||||
* anyway.
|
||||
*/
|
||||
assert(!qcow2_opts->has_backing_file);
|
||||
assert(!qcow2_opts->backing_file);
|
||||
}
|
||||
|
||||
if (qcow2_opts->data_file) {
|
||||
@ -3752,7 +3752,7 @@ qcow2_co_create(BlockdevCreateOptions *create_options, Error **errp)
|
||||
}
|
||||
|
||||
/* Want a backing file? There you go. */
|
||||
if (qcow2_opts->has_backing_file) {
|
||||
if (qcow2_opts->backing_file) {
|
||||
const char *backing_format = NULL;
|
||||
|
||||
if (qcow2_opts->has_backing_fmt) {
|
||||
@ -3770,7 +3770,7 @@ qcow2_co_create(BlockdevCreateOptions *create_options, Error **errp)
|
||||
}
|
||||
|
||||
/* Want encryption? There you go. */
|
||||
if (qcow2_opts->has_encrypt) {
|
||||
if (qcow2_opts->encrypt) {
|
||||
ret = qcow2_set_up_encryption(blk_bs(blk), qcow2_opts->encrypt, errp);
|
||||
if (ret < 0) {
|
||||
goto out;
|
||||
@ -5195,7 +5195,6 @@ static ImageInfoSpecific *qcow2_get_specific_info(BlockDriverState *bs,
|
||||
.refcount_bits = s->refcount_bits,
|
||||
.has_bitmaps = !!bitmaps,
|
||||
.bitmaps = bitmaps,
|
||||
.has_data_file = !!s->image_data_file,
|
||||
.data_file = g_strdup(s->image_data_file),
|
||||
.has_data_file_raw = has_data_file(bs),
|
||||
.data_file_raw = data_file_is_raw(bs),
|
||||
@ -5226,7 +5225,6 @@ static ImageInfoSpecific *qcow2_get_specific_info(BlockDriverState *bs,
|
||||
memset(&encrypt_info->u, 0, sizeof(encrypt_info->u));
|
||||
qapi_free_QCryptoBlockInfo(encrypt_info);
|
||||
|
||||
spec_info->u.qcow2.data->has_encrypt = true;
|
||||
spec_info->u.qcow2.data->encrypt = qencrypt;
|
||||
}
|
||||
|
||||
@ -5846,7 +5844,7 @@ static int coroutine_fn qcow2_co_amend(BlockDriverState *bs,
|
||||
BDRVQcow2State *s = bs->opaque;
|
||||
int ret = 0;
|
||||
|
||||
if (qopts->has_encrypt) {
|
||||
if (qopts->encrypt) {
|
||||
if (!s->crypto) {
|
||||
error_setg(errp, "image is not encrypted, can't amend");
|
||||
return -EOPNOTSUPP;
|
||||
@ -5911,7 +5909,7 @@ void qcow2_signal_corruption(BlockDriverState *bs, bool fatal, int64_t offset,
|
||||
|
||||
node_name = bdrv_get_node_name(bs);
|
||||
qapi_event_send_block_image_corrupted(bdrv_get_device_name(bs),
|
||||
*node_name != '\0', node_name,
|
||||
*node_name ? node_name : NULL,
|
||||
message, offset >= 0, offset,
|
||||
size >= 0, size,
|
||||
fatal);
|
||||
|
@ -698,7 +698,7 @@ static int coroutine_fn bdrv_qed_co_create(BlockdevCreateOptions *opts,
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (qed_opts->has_backing_file) {
|
||||
if (qed_opts->backing_file) {
|
||||
header.features |= QED_F_BACKING_FILE;
|
||||
header.backing_filename_offset = sizeof(le_header);
|
||||
header.backing_filename_size = strlen(qed_opts->backing_file);
|
||||
|
@ -202,7 +202,7 @@ static void quorum_report_bad(QuorumOpType type, uint64_t offset,
|
||||
msg = strerror(-ret);
|
||||
}
|
||||
|
||||
qapi_event_send_quorum_report_bad(type, !!msg, msg, node_name, start_sector,
|
||||
qapi_event_send_quorum_report_bad(type, msg, node_name, start_sector,
|
||||
end_sector - start_sector);
|
||||
}
|
||||
|
||||
|
17
block/rbd.c
17
block/rbd.c
@ -536,13 +536,13 @@ static int qemu_rbd_do_create(BlockdevCreateOptions *options,
|
||||
int ret;
|
||||
|
||||
assert(options->driver == BLOCKDEV_DRIVER_RBD);
|
||||
if (opts->location->has_snapshot) {
|
||||
if (opts->location->snapshot) {
|
||||
error_setg(errp, "Can't use snapshot name for image creation");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
#ifndef LIBRBD_SUPPORTS_ENCRYPTION
|
||||
if (opts->has_encrypt) {
|
||||
if (opts->encrypt) {
|
||||
error_setg(errp, "RBD library does not support image encryption");
|
||||
return -ENOTSUP;
|
||||
}
|
||||
@ -574,7 +574,7 @@ static int qemu_rbd_do_create(BlockdevCreateOptions *options,
|
||||
}
|
||||
|
||||
#ifdef LIBRBD_SUPPORTS_ENCRYPTION
|
||||
if (opts->has_encrypt) {
|
||||
if (opts->encrypt) {
|
||||
rbd_image_t image;
|
||||
|
||||
ret = rbd_open(io_ctx, opts->location->image, &image, NULL);
|
||||
@ -686,7 +686,6 @@ static int coroutine_fn qemu_rbd_co_create_opts(BlockDriver *drv,
|
||||
goto exit;
|
||||
}
|
||||
rbd_opts->encrypt = encrypt;
|
||||
rbd_opts->has_encrypt = !!encrypt;
|
||||
|
||||
/*
|
||||
* Caution: while qdict_get_try_str() is fine, getting non-string
|
||||
@ -697,11 +696,8 @@ static int coroutine_fn qemu_rbd_co_create_opts(BlockDriver *drv,
|
||||
loc = rbd_opts->location;
|
||||
loc->pool = g_strdup(qdict_get_try_str(options, "pool"));
|
||||
loc->conf = g_strdup(qdict_get_try_str(options, "conf"));
|
||||
loc->has_conf = !!loc->conf;
|
||||
loc->user = g_strdup(qdict_get_try_str(options, "user"));
|
||||
loc->has_user = !!loc->user;
|
||||
loc->q_namespace = g_strdup(qdict_get_try_str(options, "namespace"));
|
||||
loc->has_q_namespace = !!loc->q_namespace;
|
||||
loc->image = g_strdup(qdict_get_try_str(options, "image"));
|
||||
keypairs = qdict_get_try_str(options, "=keyvalue-pairs");
|
||||
|
||||
@ -767,7 +763,6 @@ static int qemu_rbd_connect(rados_t *cluster, rados_ioctx_t *io_ctx,
|
||||
return -EINVAL;
|
||||
}
|
||||
opts->key_secret = g_strdup(secretid);
|
||||
opts->has_key_secret = true;
|
||||
}
|
||||
|
||||
mon_host = qemu_rbd_mon_host(opts, &local_err);
|
||||
@ -785,7 +780,7 @@ static int qemu_rbd_connect(rados_t *cluster, rados_ioctx_t *io_ctx,
|
||||
|
||||
/* try default location when conf=NULL, but ignore failure */
|
||||
r = rados_conf_read_file(*cluster, opts->conf);
|
||||
if (opts->has_conf && r < 0) {
|
||||
if (opts->conf && r < 0) {
|
||||
error_setg_errno(errp, -r, "error reading conf file %s", opts->conf);
|
||||
goto failed_shutdown;
|
||||
}
|
||||
@ -833,7 +828,7 @@ static int qemu_rbd_connect(rados_t *cluster, rados_ioctx_t *io_ctx,
|
||||
}
|
||||
|
||||
#ifdef HAVE_RBD_NAMESPACE_EXISTS
|
||||
if (opts->has_q_namespace && strlen(opts->q_namespace) > 0) {
|
||||
if (opts->q_namespace && strlen(opts->q_namespace) > 0) {
|
||||
bool exists;
|
||||
|
||||
r = rbd_namespace_exists(*io_ctx, opts->q_namespace, &exists);
|
||||
@ -991,7 +986,7 @@ static int qemu_rbd_open(BlockDriverState *bs, QDict *options, int flags,
|
||||
goto failed_open;
|
||||
}
|
||||
|
||||
if (opts->has_encrypt) {
|
||||
if (opts->encrypt) {
|
||||
#ifdef LIBRBD_SUPPORTS_ENCRYPTION
|
||||
r = qemu_rbd_encryption_load(s->image, opts->encrypt, errp);
|
||||
if (r < 0) {
|
||||
|
@ -643,7 +643,7 @@ static int connect_to_ssh(BDRVSSHState *s, BlockdevOptionsSsh *opts,
|
||||
unsigned int port = 0;
|
||||
int new_sock = -1;
|
||||
|
||||
if (opts->has_user) {
|
||||
if (opts->user) {
|
||||
s->user = g_strdup(opts->user);
|
||||
} else {
|
||||
s->user = g_strdup(g_get_user_name());
|
||||
|
@ -173,8 +173,8 @@ void nbd_server_start_options(NbdServerOptions *arg, Error **errp)
|
||||
}
|
||||
|
||||
void qmp_nbd_server_start(SocketAddressLegacy *addr,
|
||||
bool has_tls_creds, const char *tls_creds,
|
||||
bool has_tls_authz, const char *tls_authz,
|
||||
const char *tls_creds,
|
||||
const char *tls_authz,
|
||||
bool has_max_connections, uint32_t max_connections,
|
||||
Error **errp)
|
||||
{
|
||||
@ -200,8 +200,7 @@ void qmp_nbd_server_add(NbdServerAddOptions *arg, Error **errp)
|
||||
* block-export-add would default to the node-name, but we may have to use
|
||||
* the device name as a default here for compatibility.
|
||||
*/
|
||||
if (!arg->has_name) {
|
||||
arg->has_name = true;
|
||||
if (!arg->name) {
|
||||
arg->name = g_strdup(arg->device);
|
||||
}
|
||||
|
||||
@ -215,7 +214,7 @@ void qmp_nbd_server_add(NbdServerAddOptions *arg, Error **errp)
|
||||
};
|
||||
QAPI_CLONE_MEMBERS(BlockExportOptionsNbdBase, &export_opts->u.nbd,
|
||||
qapi_NbdServerAddOptions_base(arg));
|
||||
if (arg->has_bitmap) {
|
||||
if (arg->bitmap) {
|
||||
BlockDirtyBitmapOrStr *el = g_new(BlockDirtyBitmapOrStr, 1);
|
||||
|
||||
*el = (BlockDirtyBitmapOrStr) {
|
||||
|
185
blockdev.c
185
blockdev.c
@ -1048,26 +1048,20 @@ static void blockdev_do_action(TransactionAction *action, Error **errp)
|
||||
|
||||
list.value = action;
|
||||
list.next = NULL;
|
||||
qmp_transaction(&list, false, NULL, errp);
|
||||
qmp_transaction(&list, NULL, errp);
|
||||
}
|
||||
|
||||
void qmp_blockdev_snapshot_sync(bool has_device, const char *device,
|
||||
bool has_node_name, const char *node_name,
|
||||
void qmp_blockdev_snapshot_sync(const char *device, const char *node_name,
|
||||
const char *snapshot_file,
|
||||
bool has_snapshot_node_name,
|
||||
const char *snapshot_node_name,
|
||||
bool has_format, const char *format,
|
||||
const char *format,
|
||||
bool has_mode, NewImageMode mode, Error **errp)
|
||||
{
|
||||
BlockdevSnapshotSync snapshot = {
|
||||
.has_device = has_device,
|
||||
.device = (char *) device,
|
||||
.has_node_name = has_node_name,
|
||||
.node_name = (char *) node_name,
|
||||
.snapshot_file = (char *) snapshot_file,
|
||||
.has_snapshot_node_name = has_snapshot_node_name,
|
||||
.snapshot_node_name = (char *) snapshot_node_name,
|
||||
.has_format = has_format,
|
||||
.format = (char *) format,
|
||||
.has_mode = has_mode,
|
||||
.mode = mode,
|
||||
@ -1109,9 +1103,7 @@ void qmp_blockdev_snapshot_internal_sync(const char *device,
|
||||
}
|
||||
|
||||
SnapshotInfo *qmp_blockdev_snapshot_delete_internal_sync(const char *device,
|
||||
bool has_id,
|
||||
const char *id,
|
||||
bool has_name,
|
||||
const char *name,
|
||||
Error **errp)
|
||||
{
|
||||
@ -1129,14 +1121,6 @@ SnapshotInfo *qmp_blockdev_snapshot_delete_internal_sync(const char *device,
|
||||
aio_context = bdrv_get_aio_context(bs);
|
||||
aio_context_acquire(aio_context);
|
||||
|
||||
if (!has_id) {
|
||||
id = NULL;
|
||||
}
|
||||
|
||||
if (!has_name) {
|
||||
name = NULL;
|
||||
}
|
||||
|
||||
if (!id && !name) {
|
||||
error_setg(errp, "Name or id must be provided");
|
||||
goto out_aio_context;
|
||||
@ -1450,8 +1434,8 @@ static void external_snapshot_prepare(BlkActionState *common,
|
||||
case TRANSACTION_ACTION_KIND_BLOCKDEV_SNAPSHOT_SYNC:
|
||||
{
|
||||
BlockdevSnapshotSync *s = action->u.blockdev_snapshot_sync.data;
|
||||
device = s->has_device ? s->device : NULL;
|
||||
node_name = s->has_node_name ? s->node_name : NULL;
|
||||
device = s->device;
|
||||
node_name = s->node_name;
|
||||
new_image_file = s->snapshot_file;
|
||||
snapshot_ref = NULL;
|
||||
}
|
||||
@ -1495,10 +1479,9 @@ static void external_snapshot_prepare(BlkActionState *common,
|
||||
|
||||
if (action->type == TRANSACTION_ACTION_KIND_BLOCKDEV_SNAPSHOT_SYNC) {
|
||||
BlockdevSnapshotSync *s = action->u.blockdev_snapshot_sync.data;
|
||||
const char *format = s->has_format ? s->format : "qcow2";
|
||||
const char *format = s->format ?: "qcow2";
|
||||
enum NewImageMode mode;
|
||||
const char *snapshot_node_name =
|
||||
s->has_snapshot_node_name ? s->snapshot_node_name : NULL;
|
||||
const char *snapshot_node_name = s->snapshot_node_name;
|
||||
|
||||
if (node_name && !snapshot_node_name) {
|
||||
error_setg(errp, "New overlay node-name missing");
|
||||
@ -1686,6 +1669,7 @@ static void drive_backup_prepare(BlkActionState *common, Error **errp)
|
||||
BlockDriverState *source = NULL;
|
||||
AioContext *aio_context;
|
||||
AioContext *old_context;
|
||||
const char *format;
|
||||
QDict *options;
|
||||
Error *local_err = NULL;
|
||||
int flags;
|
||||
@ -1717,9 +1701,9 @@ static void drive_backup_prepare(BlkActionState *common, Error **errp)
|
||||
/* Paired with .clean() */
|
||||
bdrv_drained_begin(bs);
|
||||
|
||||
if (!backup->has_format) {
|
||||
backup->format = backup->mode == NEW_IMAGE_MODE_EXISTING ?
|
||||
NULL : (char *) bs->drv->format_name;
|
||||
format = backup->format;
|
||||
if (!format && backup->mode != NEW_IMAGE_MODE_EXISTING) {
|
||||
format = bs->drv->format_name;
|
||||
}
|
||||
|
||||
/* Early check to avoid creating target */
|
||||
@ -1758,19 +1742,19 @@ static void drive_backup_prepare(BlkActionState *common, Error **errp)
|
||||
}
|
||||
|
||||
if (backup->mode != NEW_IMAGE_MODE_EXISTING) {
|
||||
assert(backup->format);
|
||||
assert(format);
|
||||
if (source) {
|
||||
/* Implicit filters should not appear in the filename */
|
||||
BlockDriverState *explicit_backing =
|
||||
bdrv_skip_implicit_filters(source);
|
||||
|
||||
bdrv_refresh_filename(explicit_backing);
|
||||
bdrv_img_create(backup->target, backup->format,
|
||||
bdrv_img_create(backup->target, format,
|
||||
explicit_backing->filename,
|
||||
explicit_backing->drv->format_name, NULL,
|
||||
size, flags, false, &local_err);
|
||||
} else {
|
||||
bdrv_img_create(backup->target, backup->format, NULL, NULL, NULL,
|
||||
bdrv_img_create(backup->target, format, NULL, NULL, NULL,
|
||||
size, flags, false, &local_err);
|
||||
}
|
||||
}
|
||||
@ -1783,8 +1767,8 @@ static void drive_backup_prepare(BlkActionState *common, Error **errp)
|
||||
options = qdict_new();
|
||||
qdict_put_str(options, "discard", "unmap");
|
||||
qdict_put_str(options, "detect-zeroes", "unmap");
|
||||
if (backup->format) {
|
||||
qdict_put_str(options, "driver", backup->format);
|
||||
if (format) {
|
||||
qdict_put_str(options, "driver", format);
|
||||
}
|
||||
|
||||
target_bs = bdrv_open(backup->target, NULL, options, flags, errp);
|
||||
@ -2305,11 +2289,11 @@ static TransactionProperties *get_transaction_properties(
|
||||
* Always run under BQL.
|
||||
*/
|
||||
void qmp_transaction(TransactionActionList *dev_list,
|
||||
bool has_props,
|
||||
struct TransactionProperties *props,
|
||||
Error **errp)
|
||||
{
|
||||
TransactionActionList *dev_entry = dev_list;
|
||||
bool has_props = !!props;
|
||||
JobTxn *block_job_txn = NULL;
|
||||
BlkActionState *state, *next;
|
||||
Error *local_err = NULL;
|
||||
@ -2411,8 +2395,7 @@ BlockDirtyBitmapSha256 *qmp_x_debug_block_dirty_bitmap_sha256(const char *node,
|
||||
return ret;
|
||||
}
|
||||
|
||||
void coroutine_fn qmp_block_resize(bool has_device, const char *device,
|
||||
bool has_node_name, const char *node_name,
|
||||
void coroutine_fn qmp_block_resize(const char *device, const char *node_name,
|
||||
int64_t size, Error **errp)
|
||||
{
|
||||
Error *local_err = NULL;
|
||||
@ -2420,9 +2403,7 @@ void coroutine_fn qmp_block_resize(bool has_device, const char *device,
|
||||
BlockDriverState *bs;
|
||||
AioContext *old_ctx;
|
||||
|
||||
bs = bdrv_lookup_bs(has_device ? device : NULL,
|
||||
has_node_name ? node_name : NULL,
|
||||
&local_err);
|
||||
bs = bdrv_lookup_bs(device, node_name, &local_err);
|
||||
if (local_err) {
|
||||
error_propagate(errp, local_err);
|
||||
return;
|
||||
@ -2457,14 +2438,14 @@ void coroutine_fn qmp_block_resize(bool has_device, const char *device,
|
||||
bdrv_co_unlock(bs);
|
||||
}
|
||||
|
||||
void qmp_block_stream(bool has_job_id, const char *job_id, const char *device,
|
||||
bool has_base, const char *base,
|
||||
bool has_base_node, const char *base_node,
|
||||
bool has_backing_file, const char *backing_file,
|
||||
bool has_bottom, const char *bottom,
|
||||
void qmp_block_stream(const char *job_id, const char *device,
|
||||
const char *base,
|
||||
const char *base_node,
|
||||
const char *backing_file,
|
||||
const char *bottom,
|
||||
bool has_speed, int64_t speed,
|
||||
bool has_on_error, BlockdevOnError on_error,
|
||||
bool has_filter_node_name, const char *filter_node_name,
|
||||
const char *filter_node_name,
|
||||
bool has_auto_finalize, bool auto_finalize,
|
||||
bool has_auto_dismiss, bool auto_dismiss,
|
||||
Error **errp)
|
||||
@ -2476,19 +2457,19 @@ void qmp_block_stream(bool has_job_id, const char *job_id, const char *device,
|
||||
Error *local_err = NULL;
|
||||
int job_flags = JOB_DEFAULT;
|
||||
|
||||
if (has_base && has_base_node) {
|
||||
if (base && base_node) {
|
||||
error_setg(errp, "'base' and 'base-node' cannot be specified "
|
||||
"at the same time");
|
||||
return;
|
||||
}
|
||||
|
||||
if (has_base && has_bottom) {
|
||||
if (base && bottom) {
|
||||
error_setg(errp, "'base' and 'bottom' cannot be specified "
|
||||
"at the same time");
|
||||
return;
|
||||
}
|
||||
|
||||
if (has_bottom && has_base_node) {
|
||||
if (bottom && base_node) {
|
||||
error_setg(errp, "'bottom' and 'base-node' cannot be specified "
|
||||
"at the same time");
|
||||
return;
|
||||
@ -2506,7 +2487,7 @@ void qmp_block_stream(bool has_job_id, const char *job_id, const char *device,
|
||||
aio_context = bdrv_get_aio_context(bs);
|
||||
aio_context_acquire(aio_context);
|
||||
|
||||
if (has_base) {
|
||||
if (base) {
|
||||
base_bs = bdrv_find_backing_image(bs, base);
|
||||
if (base_bs == NULL) {
|
||||
error_setg(errp, "Can't find '%s' in the backing chain", base);
|
||||
@ -2515,7 +2496,7 @@ void qmp_block_stream(bool has_job_id, const char *job_id, const char *device,
|
||||
assert(bdrv_get_aio_context(base_bs) == aio_context);
|
||||
}
|
||||
|
||||
if (has_base_node) {
|
||||
if (base_node) {
|
||||
base_bs = bdrv_lookup_bs(NULL, base_node, errp);
|
||||
if (!base_bs) {
|
||||
goto out;
|
||||
@ -2529,7 +2510,7 @@ void qmp_block_stream(bool has_job_id, const char *job_id, const char *device,
|
||||
bdrv_refresh_filename(base_bs);
|
||||
}
|
||||
|
||||
if (has_bottom) {
|
||||
if (bottom) {
|
||||
bottom_bs = bdrv_lookup_bs(NULL, bottom, errp);
|
||||
if (!bottom_bs) {
|
||||
goto out;
|
||||
@ -2554,7 +2535,7 @@ void qmp_block_stream(bool has_job_id, const char *job_id, const char *device,
|
||||
/*
|
||||
* Check for op blockers in the whole chain between bs and base (or bottom)
|
||||
*/
|
||||
iter_end = has_bottom ? bdrv_filter_or_cow_bs(bottom_bs) : base_bs;
|
||||
iter_end = bottom ? bdrv_filter_or_cow_bs(bottom_bs) : base_bs;
|
||||
for (iter = bs; iter && iter != iter_end;
|
||||
iter = bdrv_filter_or_cow_bs(iter))
|
||||
{
|
||||
@ -2565,7 +2546,7 @@ void qmp_block_stream(bool has_job_id, const char *job_id, const char *device,
|
||||
|
||||
/* if we are streaming the entire chain, the result will have no backing
|
||||
* file, and specifying one is therefore an error */
|
||||
if (base_bs == NULL && has_backing_file) {
|
||||
if (!base_bs && backing_file) {
|
||||
error_setg(errp, "backing file specified, but streaming the "
|
||||
"entire chain");
|
||||
goto out;
|
||||
@ -2578,7 +2559,7 @@ void qmp_block_stream(bool has_job_id, const char *job_id, const char *device,
|
||||
job_flags |= JOB_MANUAL_DISMISS;
|
||||
}
|
||||
|
||||
stream_start(has_job_id ? job_id : NULL, bs, base_bs, backing_file,
|
||||
stream_start(job_id, bs, base_bs, backing_file,
|
||||
bottom_bs, job_flags, has_speed ? speed : 0, on_error,
|
||||
filter_node_name, &local_err);
|
||||
if (local_err) {
|
||||
@ -2592,15 +2573,15 @@ out:
|
||||
aio_context_release(aio_context);
|
||||
}
|
||||
|
||||
void qmp_block_commit(bool has_job_id, const char *job_id, const char *device,
|
||||
bool has_base_node, const char *base_node,
|
||||
bool has_base, const char *base,
|
||||
bool has_top_node, const char *top_node,
|
||||
bool has_top, const char *top,
|
||||
bool has_backing_file, const char *backing_file,
|
||||
void qmp_block_commit(const char *job_id, const char *device,
|
||||
const char *base_node,
|
||||
const char *base,
|
||||
const char *top_node,
|
||||
const char *top,
|
||||
const char *backing_file,
|
||||
bool has_speed, int64_t speed,
|
||||
bool has_on_error, BlockdevOnError on_error,
|
||||
bool has_filter_node_name, const char *filter_node_name,
|
||||
const char *filter_node_name,
|
||||
bool has_auto_finalize, bool auto_finalize,
|
||||
bool has_auto_dismiss, bool auto_dismiss,
|
||||
Error **errp)
|
||||
@ -2619,9 +2600,6 @@ void qmp_block_commit(bool has_job_id, const char *job_id, const char *device,
|
||||
if (!has_on_error) {
|
||||
on_error = BLOCKDEV_ON_ERROR_REPORT;
|
||||
}
|
||||
if (!has_filter_node_name) {
|
||||
filter_node_name = NULL;
|
||||
}
|
||||
if (has_auto_finalize && !auto_finalize) {
|
||||
job_flags |= JOB_MANUAL_FINALIZE;
|
||||
}
|
||||
@ -2657,10 +2635,10 @@ void qmp_block_commit(bool has_job_id, const char *job_id, const char *device,
|
||||
/* default top_bs is the active layer */
|
||||
top_bs = bs;
|
||||
|
||||
if (has_top_node && has_top) {
|
||||
if (top_node && top) {
|
||||
error_setg(errp, "'top-node' and 'top' are mutually exclusive");
|
||||
goto out;
|
||||
} else if (has_top_node) {
|
||||
} else if (top_node) {
|
||||
top_bs = bdrv_lookup_bs(NULL, top_node, errp);
|
||||
if (top_bs == NULL) {
|
||||
goto out;
|
||||
@ -2670,7 +2648,7 @@ void qmp_block_commit(bool has_job_id, const char *job_id, const char *device,
|
||||
top_node);
|
||||
goto out;
|
||||
}
|
||||
} else if (has_top && top) {
|
||||
} else if (top) {
|
||||
/* This strcmp() is just a shortcut, there is no need to
|
||||
* refresh @bs's filename. If it mismatches,
|
||||
* bdrv_find_backing_image() will do the refresh and may still
|
||||
@ -2687,10 +2665,10 @@ void qmp_block_commit(bool has_job_id, const char *job_id, const char *device,
|
||||
|
||||
assert(bdrv_get_aio_context(top_bs) == aio_context);
|
||||
|
||||
if (has_base_node && has_base) {
|
||||
if (base_node && base) {
|
||||
error_setg(errp, "'base-node' and 'base' are mutually exclusive");
|
||||
goto out;
|
||||
} else if (has_base_node) {
|
||||
} else if (base_node) {
|
||||
base_bs = bdrv_lookup_bs(NULL, base_node, errp);
|
||||
if (base_bs == NULL) {
|
||||
goto out;
|
||||
@ -2700,7 +2678,7 @@ void qmp_block_commit(bool has_job_id, const char *job_id, const char *device,
|
||||
base_node);
|
||||
goto out;
|
||||
}
|
||||
} else if (has_base && base) {
|
||||
} else if (base) {
|
||||
base_bs = bdrv_find_backing_image(top_bs, base);
|
||||
if (base_bs == NULL) {
|
||||
error_setg(errp, "Can't find '%s' in the backing chain", base);
|
||||
@ -2742,7 +2720,7 @@ void qmp_block_commit(bool has_job_id, const char *job_id, const char *device,
|
||||
if (top_perm & BLK_PERM_WRITE ||
|
||||
bdrv_skip_filters(top_bs) == bdrv_skip_filters(bs))
|
||||
{
|
||||
if (has_backing_file) {
|
||||
if (backing_file) {
|
||||
if (bdrv_skip_filters(top_bs) == bdrv_skip_filters(bs)) {
|
||||
error_setg(errp, "'backing-file' specified,"
|
||||
" but 'top' is the active layer");
|
||||
@ -2752,7 +2730,7 @@ void qmp_block_commit(bool has_job_id, const char *job_id, const char *device,
|
||||
}
|
||||
goto out;
|
||||
}
|
||||
if (!has_job_id) {
|
||||
if (!job_id) {
|
||||
/*
|
||||
* Emulate here what block_job_create() does, because it
|
||||
* is possible that @bs != @top_bs (the block job should
|
||||
@ -2768,8 +2746,8 @@ void qmp_block_commit(bool has_job_id, const char *job_id, const char *device,
|
||||
if (bdrv_op_is_blocked(overlay_bs, BLOCK_OP_TYPE_COMMIT_TARGET, errp)) {
|
||||
goto out;
|
||||
}
|
||||
commit_start(has_job_id ? job_id : NULL, bs, base_bs, top_bs, job_flags,
|
||||
speed, on_error, has_backing_file ? backing_file : NULL,
|
||||
commit_start(job_id, bs, base_bs, top_bs, job_flags,
|
||||
speed, on_error, backing_file,
|
||||
filter_node_name, &local_err);
|
||||
}
|
||||
if (local_err != NULL) {
|
||||
@ -2802,9 +2780,6 @@ static BlockJob *do_backup_common(BackupCommon *backup,
|
||||
if (!backup->has_on_target_error) {
|
||||
backup->on_target_error = BLOCKDEV_ON_ERROR_REPORT;
|
||||
}
|
||||
if (!backup->has_job_id) {
|
||||
backup->job_id = NULL;
|
||||
}
|
||||
if (!backup->has_auto_finalize) {
|
||||
backup->auto_finalize = true;
|
||||
}
|
||||
@ -2830,7 +2805,7 @@ static BlockJob *do_backup_common(BackupCommon *backup,
|
||||
if ((backup->sync == MIRROR_SYNC_MODE_BITMAP) ||
|
||||
(backup->sync == MIRROR_SYNC_MODE_INCREMENTAL)) {
|
||||
/* done before desugaring 'incremental' to print the right message */
|
||||
if (!backup->has_bitmap) {
|
||||
if (!backup->bitmap) {
|
||||
error_setg(errp, "must provide a valid bitmap name for "
|
||||
"'%s' sync mode", MirrorSyncMode_str(backup->sync));
|
||||
return NULL;
|
||||
@ -2851,7 +2826,7 @@ static BlockJob *do_backup_common(BackupCommon *backup,
|
||||
backup->bitmap_mode = BITMAP_SYNC_MODE_ON_SUCCESS;
|
||||
}
|
||||
|
||||
if (backup->has_bitmap) {
|
||||
if (backup->bitmap) {
|
||||
bmap = bdrv_find_dirty_bitmap(bs, backup->bitmap);
|
||||
if (!bmap) {
|
||||
error_setg(errp, "Bitmap '%s' could not be found", backup->bitmap);
|
||||
@ -2884,7 +2859,7 @@ static BlockJob *do_backup_common(BackupCommon *backup,
|
||||
}
|
||||
}
|
||||
|
||||
if (!backup->has_bitmap && backup->has_bitmap_mode) {
|
||||
if (!backup->bitmap && backup->has_bitmap_mode) {
|
||||
error_setg(errp, "Cannot specify bitmap sync mode without a bitmap");
|
||||
return NULL;
|
||||
}
|
||||
@ -2944,7 +2919,7 @@ void qmp_blockdev_backup(BlockdevBackup *backup, Error **errp)
|
||||
**/
|
||||
static void blockdev_mirror_common(const char *job_id, BlockDriverState *bs,
|
||||
BlockDriverState *target,
|
||||
bool has_replaces, const char *replaces,
|
||||
const char *replaces,
|
||||
enum MirrorSyncMode sync,
|
||||
BlockMirrorBackingMode backing_mode,
|
||||
bool zero_target,
|
||||
@ -2956,7 +2931,6 @@ static void blockdev_mirror_common(const char *job_id, BlockDriverState *bs,
|
||||
bool has_on_target_error,
|
||||
BlockdevOnError on_target_error,
|
||||
bool has_unmap, bool unmap,
|
||||
bool has_filter_node_name,
|
||||
const char *filter_node_name,
|
||||
bool has_copy_mode, MirrorCopyMode copy_mode,
|
||||
bool has_auto_finalize, bool auto_finalize,
|
||||
@ -2984,9 +2958,6 @@ static void blockdev_mirror_common(const char *job_id, BlockDriverState *bs,
|
||||
if (!has_unmap) {
|
||||
unmap = true;
|
||||
}
|
||||
if (!has_filter_node_name) {
|
||||
filter_node_name = NULL;
|
||||
}
|
||||
if (!has_copy_mode) {
|
||||
copy_mode = MIRROR_COPY_MODE_BACKGROUND;
|
||||
}
|
||||
@ -3019,16 +2990,15 @@ static void blockdev_mirror_common(const char *job_id, BlockDriverState *bs,
|
||||
sync = MIRROR_SYNC_MODE_FULL;
|
||||
}
|
||||
|
||||
if (!has_replaces) {
|
||||
if (!replaces) {
|
||||
/* We want to mirror from @bs, but keep implicit filters on top */
|
||||
unfiltered_bs = bdrv_skip_implicit_filters(bs);
|
||||
if (unfiltered_bs != bs) {
|
||||
replaces = unfiltered_bs->node_name;
|
||||
has_replaces = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (has_replaces) {
|
||||
if (replaces) {
|
||||
BlockDriverState *to_replace_bs;
|
||||
AioContext *replace_aio_context;
|
||||
int64_t bs_size, replace_size;
|
||||
@ -3065,7 +3035,7 @@ static void blockdev_mirror_common(const char *job_id, BlockDriverState *bs,
|
||||
* and will allow to check whether the node still exist at mirror completion
|
||||
*/
|
||||
mirror_start(job_id, bs, target,
|
||||
has_replaces ? replaces : NULL, job_flags,
|
||||
replaces, job_flags,
|
||||
speed, granularity, buf_size, sync, backing_mode, zero_target,
|
||||
on_source_error, on_target_error, unmap, filter_node_name,
|
||||
copy_mode, errp);
|
||||
@ -3103,7 +3073,7 @@ void qmp_drive_mirror(DriveMirror *arg, Error **errp)
|
||||
arg->mode = NEW_IMAGE_MODE_ABSOLUTE_PATHS;
|
||||
}
|
||||
|
||||
if (!arg->has_format) {
|
||||
if (!arg->format) {
|
||||
format = (arg->mode == NEW_IMAGE_MODE_EXISTING
|
||||
? NULL : bs->drv->format_name);
|
||||
}
|
||||
@ -3123,8 +3093,8 @@ void qmp_drive_mirror(DriveMirror *arg, Error **errp)
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (arg->has_replaces) {
|
||||
if (!arg->has_node_name) {
|
||||
if (arg->replaces) {
|
||||
if (!arg->node_name) {
|
||||
error_setg(errp, "a node-name must be provided when replacing a"
|
||||
" named node of the graph");
|
||||
goto out;
|
||||
@ -3174,7 +3144,7 @@ void qmp_drive_mirror(DriveMirror *arg, Error **errp)
|
||||
}
|
||||
|
||||
options = qdict_new();
|
||||
if (arg->has_node_name) {
|
||||
if (arg->node_name) {
|
||||
qdict_put_str(options, "node-name", arg->node_name);
|
||||
}
|
||||
if (format) {
|
||||
@ -3209,8 +3179,8 @@ void qmp_drive_mirror(DriveMirror *arg, Error **errp)
|
||||
aio_context_release(old_context);
|
||||
aio_context_acquire(aio_context);
|
||||
|
||||
blockdev_mirror_common(arg->has_job_id ? arg->job_id : NULL, bs, target_bs,
|
||||
arg->has_replaces, arg->replaces, arg->sync,
|
||||
blockdev_mirror_common(arg->job_id, bs, target_bs,
|
||||
arg->replaces, arg->sync,
|
||||
backing_mode, zero_target,
|
||||
arg->has_speed, arg->speed,
|
||||
arg->has_granularity, arg->granularity,
|
||||
@ -3218,7 +3188,7 @@ void qmp_drive_mirror(DriveMirror *arg, Error **errp)
|
||||
arg->has_on_source_error, arg->on_source_error,
|
||||
arg->has_on_target_error, arg->on_target_error,
|
||||
arg->has_unmap, arg->unmap,
|
||||
false, NULL,
|
||||
NULL,
|
||||
arg->has_copy_mode, arg->copy_mode,
|
||||
arg->has_auto_finalize, arg->auto_finalize,
|
||||
arg->has_auto_dismiss, arg->auto_dismiss,
|
||||
@ -3228,9 +3198,9 @@ out:
|
||||
aio_context_release(aio_context);
|
||||
}
|
||||
|
||||
void qmp_blockdev_mirror(bool has_job_id, const char *job_id,
|
||||
void qmp_blockdev_mirror(const char *job_id,
|
||||
const char *device, const char *target,
|
||||
bool has_replaces, const char *replaces,
|
||||
const char *replaces,
|
||||
MirrorSyncMode sync,
|
||||
bool has_speed, int64_t speed,
|
||||
bool has_granularity, uint32_t granularity,
|
||||
@ -3239,7 +3209,6 @@ void qmp_blockdev_mirror(bool has_job_id, const char *job_id,
|
||||
BlockdevOnError on_source_error,
|
||||
bool has_on_target_error,
|
||||
BlockdevOnError on_target_error,
|
||||
bool has_filter_node_name,
|
||||
const char *filter_node_name,
|
||||
bool has_copy_mode, MirrorCopyMode copy_mode,
|
||||
bool has_auto_finalize, bool auto_finalize,
|
||||
@ -3280,15 +3249,14 @@ void qmp_blockdev_mirror(bool has_job_id, const char *job_id,
|
||||
goto out;
|
||||
}
|
||||
|
||||
blockdev_mirror_common(has_job_id ? job_id : NULL, bs, target_bs,
|
||||
has_replaces, replaces, sync, backing_mode,
|
||||
blockdev_mirror_common(job_id, bs, target_bs,
|
||||
replaces, sync, backing_mode,
|
||||
zero_target, has_speed, speed,
|
||||
has_granularity, granularity,
|
||||
has_buf_size, buf_size,
|
||||
has_on_source_error, on_source_error,
|
||||
has_on_target_error, on_target_error,
|
||||
true, true,
|
||||
has_filter_node_name, filter_node_name,
|
||||
true, true, filter_node_name,
|
||||
has_copy_mode, copy_mode,
|
||||
has_auto_finalize, auto_finalize,
|
||||
has_auto_dismiss, auto_dismiss,
|
||||
@ -3560,7 +3528,7 @@ void qmp_blockdev_reopen(BlockdevOptionsList *reopen_list, Error **errp)
|
||||
QDict *qdict;
|
||||
|
||||
/* Check for the selected node name */
|
||||
if (!options->has_node_name) {
|
||||
if (!options->node_name) {
|
||||
error_setg(errp, "node-name not specified");
|
||||
goto fail;
|
||||
}
|
||||
@ -3665,8 +3633,7 @@ static BdrvChild *bdrv_find_child(BlockDriverState *parent_bs,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void qmp_x_blockdev_change(const char *parent, bool has_child,
|
||||
const char *child, bool has_node,
|
||||
void qmp_x_blockdev_change(const char *parent, const char *child,
|
||||
const char *node, Error **errp)
|
||||
{
|
||||
BlockDriverState *parent_bs, *new_bs = NULL;
|
||||
@ -3677,8 +3644,8 @@ void qmp_x_blockdev_change(const char *parent, bool has_child,
|
||||
return;
|
||||
}
|
||||
|
||||
if (has_child == has_node) {
|
||||
if (has_child) {
|
||||
if (!child == !node) {
|
||||
if (child) {
|
||||
error_setg(errp, "The parameters child and node are in conflict");
|
||||
} else {
|
||||
error_setg(errp, "Either child or node must be specified");
|
||||
@ -3686,7 +3653,7 @@ void qmp_x_blockdev_change(const char *parent, bool has_child,
|
||||
return;
|
||||
}
|
||||
|
||||
if (has_child) {
|
||||
if (child) {
|
||||
p_child = bdrv_find_child(parent_bs, child);
|
||||
if (!p_child) {
|
||||
error_setg(errp, "Node '%s' does not have child '%s'",
|
||||
@ -3696,7 +3663,7 @@ void qmp_x_blockdev_change(const char *parent, bool has_child,
|
||||
bdrv_del_child(parent_bs, p_child, errp);
|
||||
}
|
||||
|
||||
if (has_node) {
|
||||
if (node) {
|
||||
new_bs = bdrv_find_node(node);
|
||||
if (!new_bs) {
|
||||
error_setg(errp, "Node '%s' not found", node);
|
||||
|
@ -354,7 +354,6 @@ BlockJobInfo *block_job_query_locked(BlockJob *job, Error **errp)
|
||||
info->auto_finalize = job->job.auto_finalize;
|
||||
info->auto_dismiss = job->job.auto_dismiss;
|
||||
if (job->job.ret) {
|
||||
info->has_error = true;
|
||||
info->error = job->job.err ?
|
||||
g_strdup(error_get_pretty(job->job.err)) :
|
||||
g_strdup(strerror(-job->job.ret));
|
||||
@ -414,7 +413,6 @@ static void block_job_event_completed_locked(Notifier *n, void *opaque)
|
||||
progress_total,
|
||||
progress_current,
|
||||
job->speed,
|
||||
!!msg,
|
||||
msg);
|
||||
}
|
||||
|
||||
|
@ -45,7 +45,7 @@ static void qmp_chardev_open_file(Chardev *chr,
|
||||
DWORD accessmode;
|
||||
DWORD flags;
|
||||
|
||||
if (file->has_in) {
|
||||
if (file->in) {
|
||||
error_setg(errp, "input file not supported");
|
||||
return;
|
||||
}
|
||||
@ -83,7 +83,7 @@ static void qmp_chardev_open_file(Chardev *chr,
|
||||
return;
|
||||
}
|
||||
|
||||
if (file->has_in) {
|
||||
if (file->in) {
|
||||
flags = O_RDONLY;
|
||||
in = qmp_chardev_open_file_source(file->in, flags, errp);
|
||||
if (in < 0) {
|
||||
|
@ -1251,7 +1251,7 @@ static bool qmp_chardev_validate_socket(ChardevSocket *sock,
|
||||
"'fd' address type");
|
||||
return false;
|
||||
}
|
||||
if (sock->has_tls_creds &&
|
||||
if (sock->tls_creds &&
|
||||
!(sock->has_server && sock->server)) {
|
||||
error_setg(errp,
|
||||
"'tls_creds' option is incompatible with "
|
||||
@ -1261,7 +1261,7 @@ static bool qmp_chardev_validate_socket(ChardevSocket *sock,
|
||||
break;
|
||||
|
||||
case SOCKET_ADDRESS_TYPE_UNIX:
|
||||
if (sock->has_tls_creds) {
|
||||
if (sock->tls_creds) {
|
||||
error_setg(errp,
|
||||
"'tls_creds' option is incompatible with "
|
||||
"'unix' address type");
|
||||
@ -1273,7 +1273,7 @@ static bool qmp_chardev_validate_socket(ChardevSocket *sock,
|
||||
break;
|
||||
|
||||
case SOCKET_ADDRESS_TYPE_VSOCK:
|
||||
if (sock->has_tls_creds) {
|
||||
if (sock->tls_creds) {
|
||||
error_setg(errp,
|
||||
"'tls_creds' option is incompatible with "
|
||||
"'vsock' address type");
|
||||
@ -1284,7 +1284,7 @@ static bool qmp_chardev_validate_socket(ChardevSocket *sock,
|
||||
break;
|
||||
}
|
||||
|
||||
if (sock->has_tls_authz && !sock->has_tls_creds) {
|
||||
if (sock->tls_authz && !sock->tls_creds) {
|
||||
error_setg(errp, "'tls_authz' option requires 'tls_creds' option");
|
||||
return false;
|
||||
}
|
||||
@ -1465,9 +1465,7 @@ static void qemu_chr_parse_socket(QemuOpts *opts, ChardevBackend *backend,
|
||||
sock->wait = qemu_opt_get_bool(opts, "wait", true);
|
||||
sock->has_reconnect = qemu_opt_find(opts, "reconnect");
|
||||
sock->reconnect = qemu_opt_get_number(opts, "reconnect", 0);
|
||||
sock->has_tls_creds = qemu_opt_get(opts, "tls-creds");
|
||||
sock->tls_creds = g_strdup(qemu_opt_get(opts, "tls-creds"));
|
||||
sock->has_tls_authz = qemu_opt_get(opts, "tls-authz");
|
||||
sock->tls_authz = g_strdup(qemu_opt_get(opts, "tls-authz"));
|
||||
|
||||
addr = g_new0(SocketAddressLegacy, 1);
|
||||
|
@ -178,7 +178,6 @@ static void qemu_chr_parse_udp(QemuOpts *opts, ChardevBackend *backend,
|
||||
udp->remote = addr;
|
||||
|
||||
if (has_local) {
|
||||
udp->has_local = true;
|
||||
addr = g_new0(SocketAddressLegacy, 1);
|
||||
addr->type = SOCKET_ADDRESS_TYPE_INET;
|
||||
addr->u.inet.data = g_new(InetSocketAddress, 1);
|
||||
|
@ -240,7 +240,7 @@ static void qemu_char_open(Chardev *chr, ChardevBackend *backend,
|
||||
/* Any ChardevCommon member would work */
|
||||
ChardevCommon *common = backend ? backend->u.null.data : NULL;
|
||||
|
||||
if (common && common->has_logfile) {
|
||||
if (common && common->logfile) {
|
||||
int flags = O_WRONLY;
|
||||
if (common->has_logappend &&
|
||||
common->logappend) {
|
||||
@ -496,9 +496,7 @@ void qemu_chr_parse_common(QemuOpts *opts, ChardevCommon *backend)
|
||||
{
|
||||
const char *logfile = qemu_opt_get(opts, "logfile");
|
||||
|
||||
backend->has_logfile = logfile != NULL;
|
||||
backend->logfile = g_strdup(logfile);
|
||||
|
||||
backend->has_logappend = true;
|
||||
backend->logappend = qemu_opt_get_bool(opts, "logappend", false);
|
||||
}
|
||||
@ -1057,7 +1055,6 @@ ChardevReturn *qmp_chardev_add(const char *id, ChardevBackend *backend,
|
||||
ret = g_new0(ChardevReturn, 1);
|
||||
if (CHARDEV_IS_PTY(chr)) {
|
||||
ret->pty = g_strdup(chr->filename + 4);
|
||||
ret->has_pty = true;
|
||||
}
|
||||
|
||||
return ret;
|
||||
@ -1160,7 +1157,6 @@ ChardevReturn *qmp_chardev_change(const char *id, ChardevBackend *backend,
|
||||
ret = g_new0(ChardevReturn, 1);
|
||||
if (CHARDEV_IS_PTY(chr_new)) {
|
||||
ret->pty = g_strdup(chr_new->filename + 4);
|
||||
ret->has_pty = true;
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
@ -1597,13 +1597,13 @@ qcrypto_block_luks_amend_add_keyslot(QCryptoBlock *block,
|
||||
g_autofree char *new_password = NULL;
|
||||
g_autofree uint8_t *master_key = NULL;
|
||||
|
||||
char *secret = opts_luks->has_secret ? opts_luks->secret : luks->secret;
|
||||
char *secret = opts_luks->secret ?: luks->secret;
|
||||
|
||||
if (!opts_luks->has_new_secret) {
|
||||
if (!opts_luks->new_secret) {
|
||||
error_setg(errp, "'new-secret' is required to activate a keyslot");
|
||||
return -1;
|
||||
}
|
||||
if (opts_luks->has_old_secret) {
|
||||
if (opts_luks->old_secret) {
|
||||
error_setg(errp,
|
||||
"'old-secret' must not be given when activating keyslots");
|
||||
return -1;
|
||||
@ -1677,7 +1677,7 @@ qcrypto_block_luks_amend_erase_keyslots(QCryptoBlock *block,
|
||||
g_autofree uint8_t *tmpkey = NULL;
|
||||
g_autofree char *old_password = NULL;
|
||||
|
||||
if (opts_luks->has_new_secret) {
|
||||
if (opts_luks->new_secret) {
|
||||
error_setg(errp,
|
||||
"'new-secret' must not be given when erasing keyslots");
|
||||
return -1;
|
||||
@ -1687,14 +1687,14 @@ qcrypto_block_luks_amend_erase_keyslots(QCryptoBlock *block,
|
||||
"'iter-time' must not be given when erasing keyslots");
|
||||
return -1;
|
||||
}
|
||||
if (opts_luks->has_secret) {
|
||||
if (opts_luks->secret) {
|
||||
error_setg(errp,
|
||||
"'secret' must not be given when erasing keyslots");
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Load the old password if given */
|
||||
if (opts_luks->has_old_secret) {
|
||||
if (opts_luks->old_secret) {
|
||||
old_password = qcrypto_secret_lookup_as_utf8(opts_luks->old_secret,
|
||||
errp);
|
||||
if (!old_password) {
|
||||
@ -1719,7 +1719,7 @@ qcrypto_block_luks_amend_erase_keyslots(QCryptoBlock *block,
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (opts_luks->has_old_secret) {
|
||||
if (opts_luks->old_secret) {
|
||||
int rv = qcrypto_block_luks_load_key(block,
|
||||
keyslot,
|
||||
old_password,
|
||||
@ -1761,7 +1761,7 @@ qcrypto_block_luks_amend_erase_keyslots(QCryptoBlock *block,
|
||||
}
|
||||
|
||||
/* Erase all keyslots that match the given old password */
|
||||
} else if (opts_luks->has_old_secret) {
|
||||
} else if (opts_luks->old_secret) {
|
||||
|
||||
unsigned long slots_to_erase_bitmap = 0;
|
||||
size_t i;
|
||||
|
@ -1357,7 +1357,7 @@ qmp_my_command(); everything else is produced by the generator. ::
|
||||
|
||||
$ cat example-schema.json
|
||||
{ 'struct': 'UserDefOne',
|
||||
'data': { 'integer': 'int', '*string': 'str' } }
|
||||
'data': { 'integer': 'int', '*string': 'str', '*flag': 'bool' } }
|
||||
|
||||
{ 'command': 'my-command',
|
||||
'data': { 'arg1': ['UserDefOne'] },
|
||||
@ -1410,8 +1410,9 @@ Example::
|
||||
|
||||
struct UserDefOne {
|
||||
int64_t integer;
|
||||
bool has_string;
|
||||
char *string;
|
||||
bool has_flag;
|
||||
bool flag;
|
||||
};
|
||||
|
||||
void qapi_free_UserDefOne(UserDefOne *obj);
|
||||
@ -1523,14 +1524,21 @@ Example::
|
||||
|
||||
bool visit_type_UserDefOne_members(Visitor *v, UserDefOne *obj, Error **errp)
|
||||
{
|
||||
bool has_string = !!obj->string;
|
||||
|
||||
if (!visit_type_int(v, "integer", &obj->integer, errp)) {
|
||||
return false;
|
||||
}
|
||||
if (visit_optional(v, "string", &obj->has_string)) {
|
||||
if (visit_optional(v, "string", &has_string)) {
|
||||
if (!visit_type_str(v, "string", &obj->string, errp)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (visit_optional(v, "flag", &obj->has_flag)) {
|
||||
if (!visit_type_bool(v, "flag", &obj->flag, errp)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -1664,7 +1672,6 @@ Example::
|
||||
$ cat qapi-generated/example-qapi-commands.c
|
||||
[Uninteresting stuff omitted...]
|
||||
|
||||
|
||||
static void qmp_marshal_output_UserDefOne(UserDefOne *ret_in,
|
||||
QObject **ret_out, Error **errp)
|
||||
{
|
||||
@ -1748,7 +1755,7 @@ Example::
|
||||
QTAILQ_INIT(cmds);
|
||||
|
||||
qmp_register_command(cmds, "my-command",
|
||||
qmp_marshal_my_command, QCO_NO_OPTIONS);
|
||||
qmp_marshal_my_command, 0, 0);
|
||||
}
|
||||
[Uninteresting stuff omitted...]
|
||||
|
||||
@ -1917,6 +1924,12 @@ Example::
|
||||
{ "type", QLIT_QSTR("str"), },
|
||||
{}
|
||||
})),
|
||||
QLIT_QDICT(((QLitDictEntry[]) {
|
||||
{ "default", QLIT_QNULL, },
|
||||
{ "name", QLIT_QSTR("flag"), },
|
||||
{ "type", QLIT_QSTR("bool"), },
|
||||
{}
|
||||
})),
|
||||
{}
|
||||
})), },
|
||||
{ "meta-type", QLIT_QSTR("object"), },
|
||||
@ -1950,6 +1963,12 @@ Example::
|
||||
{ "name", QLIT_QSTR("str"), },
|
||||
{}
|
||||
})),
|
||||
QLIT_QDICT(((QLitDictEntry[]) {
|
||||
{ "json-type", QLIT_QSTR("boolean"), },
|
||||
{ "meta-type", QLIT_QSTR("builtin"), },
|
||||
{ "name", QLIT_QSTR("bool"), },
|
||||
{}
|
||||
})),
|
||||
{}
|
||||
}));
|
||||
|
||||
|
@ -166,9 +166,9 @@ and user defined types.
|
||||
|
||||
Now, let's update our C implementation in monitor/qmp-cmds.c::
|
||||
|
||||
void qmp_hello_world(bool has_message, const char *message, Error **errp)
|
||||
void qmp_hello_world(const char *message, Error **errp)
|
||||
{
|
||||
if (has_message) {
|
||||
if (message) {
|
||||
printf("%s\n", message);
|
||||
} else {
|
||||
printf("Hello, world\n");
|
||||
@ -210,9 +210,9 @@ file. Basically, most errors are set by calling the error_setg() function.
|
||||
Let's say we don't accept the string "message" to contain the word "love". If
|
||||
it does contain it, we want the "hello-world" command to return an error::
|
||||
|
||||
void qmp_hello_world(bool has_message, const char *message, Error **errp)
|
||||
void qmp_hello_world(const char *message, Error **errp)
|
||||
{
|
||||
if (has_message) {
|
||||
if (message) {
|
||||
if (strstr(message, "love")) {
|
||||
error_setg(errp, "the word 'love' is not allowed");
|
||||
return;
|
||||
@ -467,9 +467,9 @@ There are a number of things to be noticed:
|
||||
allocated by the regular g_malloc0() function. Note that we chose to
|
||||
initialize the memory to zero. This is recommended for all QAPI types, as
|
||||
it helps avoiding bad surprises (specially with booleans)
|
||||
4. Remember that "next_deadline" is optional? All optional members have a
|
||||
'has_TYPE_NAME' member that should be properly set by the implementation,
|
||||
as shown above
|
||||
4. Remember that "next_deadline" is optional? Non-pointer optional
|
||||
members have a 'has_TYPE_NAME' member that should be properly set
|
||||
by the implementation, as shown above
|
||||
5. Even static strings, such as "alarm_timer->name", should be dynamically
|
||||
allocated by the implementation. This is so because the QAPI also generates
|
||||
a function to free its types and it cannot distinguish between dynamically
|
||||
|
@ -2044,8 +2044,8 @@ static void dump_process(DumpState *s, Error **errp)
|
||||
result = qmp_query_dump(NULL);
|
||||
/* should never fail */
|
||||
assert(result);
|
||||
qapi_event_send_dump_completed(result, !!*errp, (*errp ?
|
||||
error_get_pretty(*errp) : NULL));
|
||||
qapi_event_send_dump_completed(result,
|
||||
*errp ? error_get_pretty(*errp) : NULL);
|
||||
qapi_free_DumpQueryResult(result);
|
||||
|
||||
dump_cleanup(s);
|
||||
|
@ -185,7 +185,7 @@ static void acpi_table_install(const char unsigned *blob, size_t bloblen,
|
||||
changed_fields = 0;
|
||||
ext_hdr->_length = cpu_to_le16(acpi_payload_size);
|
||||
|
||||
if (hdrs->has_sig) {
|
||||
if (hdrs->sig) {
|
||||
strncpy(ext_hdr->sig, hdrs->sig, sizeof ext_hdr->sig);
|
||||
++changed_fields;
|
||||
}
|
||||
@ -204,11 +204,11 @@ static void acpi_table_install(const char unsigned *blob, size_t bloblen,
|
||||
|
||||
ext_hdr->checksum = 0;
|
||||
|
||||
if (hdrs->has_oem_id) {
|
||||
if (hdrs->oem_id) {
|
||||
strncpy(ext_hdr->oem_id, hdrs->oem_id, sizeof ext_hdr->oem_id);
|
||||
++changed_fields;
|
||||
}
|
||||
if (hdrs->has_oem_table_id) {
|
||||
if (hdrs->oem_table_id) {
|
||||
strncpy(ext_hdr->oem_table_id, hdrs->oem_table_id,
|
||||
sizeof ext_hdr->oem_table_id);
|
||||
++changed_fields;
|
||||
@ -217,7 +217,7 @@ static void acpi_table_install(const char unsigned *blob, size_t bloblen,
|
||||
ext_hdr->oem_revision = cpu_to_le32(hdrs->oem_rev);
|
||||
++changed_fields;
|
||||
}
|
||||
if (hdrs->has_asl_compiler_id) {
|
||||
if (hdrs->asl_compiler_id) {
|
||||
strncpy(ext_hdr->asl_compiler_id, hdrs->asl_compiler_id,
|
||||
sizeof ext_hdr->asl_compiler_id);
|
||||
++changed_fields;
|
||||
@ -255,12 +255,12 @@ void acpi_table_add(const QemuOpts *opts, Error **errp)
|
||||
if (!hdrs) {
|
||||
goto out;
|
||||
}
|
||||
if (hdrs->has_file == hdrs->has_data) {
|
||||
if (!hdrs->file == !hdrs->data) {
|
||||
error_setg(errp, "'-acpitable' requires one of 'data' or 'file'");
|
||||
goto out;
|
||||
}
|
||||
|
||||
pathnames = g_strsplit(hdrs->has_file ? hdrs->file : hdrs->data, ":", 0);
|
||||
pathnames = g_strsplit(hdrs->file ?: hdrs->data, ":", 0);
|
||||
if (pathnames == NULL || pathnames[0] == NULL) {
|
||||
error_setg(errp, "'-acpitable' requires at least one pathname");
|
||||
goto out;
|
||||
@ -297,7 +297,7 @@ void acpi_table_add(const QemuOpts *opts, Error **errp)
|
||||
close(fd);
|
||||
}
|
||||
|
||||
acpi_table_install(blob, bloblen, hdrs->has_file, hdrs, errp);
|
||||
acpi_table_install(blob, bloblen, !!hdrs->file, hdrs, errp);
|
||||
|
||||
out:
|
||||
g_free(blob);
|
||||
|
@ -35,7 +35,6 @@ static ACPIOSTInfo *acpi_cpu_device_status(int idx, AcpiCpuStatus *cdev)
|
||||
DeviceState *dev = DEVICE(cdev->cpu);
|
||||
if (dev->id) {
|
||||
info->device = g_strdup(dev->id);
|
||||
info->has_device = true;
|
||||
}
|
||||
}
|
||||
return info;
|
||||
|
@ -44,7 +44,6 @@ static ACPIOSTInfo *acpi_memory_device_status(int slot, MemStatus *mdev)
|
||||
DeviceState *dev = DEVICE(mdev->dimm);
|
||||
if (dev->id) {
|
||||
info->device = g_strdup(dev->id);
|
||||
info->has_device = true;
|
||||
}
|
||||
}
|
||||
return info;
|
||||
@ -186,7 +185,7 @@ static void acpi_memory_hotplug_write(void *opaque, hwaddr addr, uint64_t data,
|
||||
*/
|
||||
qapi_event_send_mem_unplug_error(dev->id ? : "",
|
||||
error_get_pretty(local_err));
|
||||
qapi_event_send_device_unplug_guest_error(!!dev->id, dev->id,
|
||||
qapi_event_send_device_unplug_guest_error(dev->id,
|
||||
dev->canonical_path);
|
||||
error_free(local_err);
|
||||
break;
|
||||
|
@ -62,7 +62,7 @@ void hmp_hotpluggable_cpus(Monitor *mon, const QDict *qdict)
|
||||
monitor_printf(mon, " type: \"%s\"\n", l->value->type);
|
||||
monitor_printf(mon, " vcpus_count: \"%" PRIu64 "\"\n",
|
||||
l->value->vcpus_count);
|
||||
if (l->value->has_qom_path) {
|
||||
if (l->value->qom_path) {
|
||||
monitor_printf(mon, " qom_path: \"%s\"\n", l->value->qom_path);
|
||||
}
|
||||
|
||||
|
@ -55,8 +55,7 @@ CpuInfoFastList *qmp_query_cpus_fast(Error **errp)
|
||||
value->qom_path = object_get_canonical_path(OBJECT(cpu));
|
||||
value->thread_id = cpu->thread_id;
|
||||
|
||||
value->has_props = !!mc->cpu_index_to_instance_props;
|
||||
if (value->has_props) {
|
||||
if (mc->cpu_index_to_instance_props) {
|
||||
CpuInstanceProperties *props;
|
||||
props = g_malloc0(sizeof(*props));
|
||||
*props = mc->cpu_index_to_instance_props(ms, cpu->cpu_index);
|
||||
@ -90,7 +89,6 @@ MachineInfoList *qmp_query_machines(Error **errp)
|
||||
}
|
||||
|
||||
if (mc->alias) {
|
||||
info->has_alias = true;
|
||||
info->alias = g_strdup(mc->alias);
|
||||
}
|
||||
|
||||
@ -101,11 +99,9 @@ MachineInfoList *qmp_query_machines(Error **errp)
|
||||
info->deprecated = !!mc->deprecation_reason;
|
||||
if (mc->default_cpu_type) {
|
||||
info->default_cpu_type = g_strdup(mc->default_cpu_type);
|
||||
info->has_default_cpu_type = true;
|
||||
}
|
||||
if (mc->default_ram_id) {
|
||||
info->default_ram_id = g_strdup(mc->default_ram_id);
|
||||
info->has_default_ram_id = true;
|
||||
}
|
||||
|
||||
QAPI_LIST_PREPEND(mach_list, info);
|
||||
@ -168,7 +164,6 @@ static int query_memdev(Object *obj, void *opaque)
|
||||
m = g_malloc0(sizeof(*m));
|
||||
|
||||
m->id = g_strdup(object_get_canonical_path_component(obj));
|
||||
m->has_id = !!m->id;
|
||||
|
||||
m->size = object_property_get_uint(obj, "size", &error_abort);
|
||||
m->merge = object_property_get_bool(obj, "merge", &error_abort);
|
||||
@ -227,7 +222,7 @@ HumanReadableText *qmp_x_query_numa(Error **errp)
|
||||
for (i = 0; i < nb_numa_nodes; i++) {
|
||||
g_string_append_printf(buf, "node %d cpus:", i);
|
||||
for (cpu = cpu_list; cpu; cpu = cpu->next) {
|
||||
if (cpu->value->has_props && cpu->value->props->has_node_id &&
|
||||
if (cpu->value->props && cpu->value->props->has_node_id &&
|
||||
cpu->value->props->node_id == i) {
|
||||
g_string_append_printf(buf, " %" PRIi64, cpu->value->cpu_index);
|
||||
}
|
||||
|
@ -684,7 +684,6 @@ HotpluggableCPUList *machine_query_hotpluggable_cpus(MachineState *machine)
|
||||
|
||||
cpu = machine->possible_cpus->cpus[i].cpu;
|
||||
if (cpu) {
|
||||
cpu_item->has_qom_path = true;
|
||||
cpu_item->qom_path = object_get_canonical_path(cpu);
|
||||
}
|
||||
QAPI_LIST_PREPEND(head, cpu_item);
|
||||
@ -873,8 +872,7 @@ static void machine_copy_boot_config(MachineState *ms, BootConfiguration *config
|
||||
|
||||
machine_free_boot_config(ms);
|
||||
ms->boot_config = *config;
|
||||
if (!config->has_order) {
|
||||
ms->boot_config.has_order = true;
|
||||
if (!config->order) {
|
||||
ms->boot_config.order = g_strdup(machine_class->default_boot_order);
|
||||
}
|
||||
}
|
||||
@ -889,13 +887,13 @@ static void machine_set_boot(Object *obj, Visitor *v, const char *name,
|
||||
if (!visit_type_BootConfiguration(v, name, &config, errp)) {
|
||||
return;
|
||||
}
|
||||
if (config->has_order) {
|
||||
if (config->order) {
|
||||
validate_bootdevices(config->order, errp);
|
||||
if (*errp) {
|
||||
goto out_free;
|
||||
}
|
||||
}
|
||||
if (config->has_once) {
|
||||
if (config->once) {
|
||||
validate_bootdevices(config->once, errp);
|
||||
if (*errp) {
|
||||
goto out_free;
|
||||
@ -1424,7 +1422,7 @@ void qdev_machine_creation_done(void)
|
||||
{
|
||||
cpu_synchronize_all_post_init();
|
||||
|
||||
if (current_machine->boot_config.has_once) {
|
||||
if (current_machine->boot_config.once) {
|
||||
qemu_boot_set(current_machine->boot_config.once, &error_fatal);
|
||||
qemu_register_reset(restore_boot_order, g_strdup(current_machine->boot_config.order));
|
||||
}
|
||||
|
@ -130,9 +130,9 @@ static void parse_numa_node(MachineState *ms, NumaNodeOptions *node,
|
||||
}
|
||||
}
|
||||
|
||||
have_memdevs = have_memdevs ? : node->has_memdev;
|
||||
have_mem = have_mem ? : node->has_mem;
|
||||
if ((node->has_mem && have_memdevs) || (node->has_memdev && have_mem)) {
|
||||
have_memdevs = have_memdevs || node->memdev;
|
||||
have_mem = have_mem || node->has_mem;
|
||||
if ((node->has_mem && have_memdevs) || (node->memdev && have_mem)) {
|
||||
error_setg(errp, "numa configuration should use either mem= or memdev=,"
|
||||
"mixing both is not allowed");
|
||||
return;
|
||||
@ -152,7 +152,7 @@ static void parse_numa_node(MachineState *ms, NumaNodeOptions *node,
|
||||
" use -numa node,memdev instead");
|
||||
}
|
||||
}
|
||||
if (node->has_memdev) {
|
||||
if (node->memdev) {
|
||||
Object *o;
|
||||
o = object_resolve_path_type(node->memdev, TYPE_MEMORY_BACKEND, NULL);
|
||||
if (!o) {
|
||||
|
@ -757,7 +757,7 @@ static void device_finalize(Object *obj)
|
||||
if (dev->pending_deleted_event) {
|
||||
g_assert(dev->canonical_path);
|
||||
|
||||
qapi_event_send_device_deleted(!!dev->id, dev->id, dev->canonical_path);
|
||||
qapi_event_send_device_deleted(dev->id, dev->canonical_path);
|
||||
g_free(dev->canonical_path);
|
||||
dev->canonical_path = NULL;
|
||||
}
|
||||
|
@ -252,7 +252,6 @@ static void pc_dimm_md_fill_device_info(const MemoryDeviceState *md,
|
||||
const DeviceState *dev = DEVICE(md);
|
||||
|
||||
if (dev->id) {
|
||||
di->has_id = true;
|
||||
di->id = g_strdup(dev->id);
|
||||
}
|
||||
di->hotplugged = dev->hotplugged;
|
||||
|
@ -2348,23 +2348,19 @@ static void of_dpa_flow_fill(void *cookie, void *value, void *user_data)
|
||||
|
||||
if (memcmp(key->eth.src.a, zero_mac.a, ETH_ALEN) ||
|
||||
memcmp(mask->eth.src.a, zero_mac.a, ETH_ALEN)) {
|
||||
nkey->has_eth_src = true;
|
||||
nkey->eth_src = qemu_mac_strdup_printf(key->eth.src.a);
|
||||
}
|
||||
|
||||
if (nkey->has_eth_src && memcmp(mask->eth.src.a, ff_mac.a, ETH_ALEN)) {
|
||||
nmask->has_eth_src = true;
|
||||
if (nkey->eth_src && memcmp(mask->eth.src.a, ff_mac.a, ETH_ALEN)) {
|
||||
nmask->eth_src = qemu_mac_strdup_printf(mask->eth.src.a);
|
||||
}
|
||||
|
||||
if (memcmp(key->eth.dst.a, zero_mac.a, ETH_ALEN) ||
|
||||
memcmp(mask->eth.dst.a, zero_mac.a, ETH_ALEN)) {
|
||||
nkey->has_eth_dst = true;
|
||||
nkey->eth_dst = qemu_mac_strdup_printf(key->eth.dst.a);
|
||||
}
|
||||
|
||||
if (nkey->has_eth_dst && memcmp(mask->eth.dst.a, ff_mac.a, ETH_ALEN)) {
|
||||
nmask->has_eth_dst = true;
|
||||
if (nkey->eth_dst && memcmp(mask->eth.dst.a, ff_mac.a, ETH_ALEN)) {
|
||||
nmask->eth_dst = qemu_mac_strdup_printf(mask->eth.dst.a);
|
||||
}
|
||||
|
||||
@ -2400,7 +2396,6 @@ static void of_dpa_flow_fill(void *cookie, void *value, void *user_data)
|
||||
if (key->ipv4.addr.dst || mask->ipv4.addr.dst) {
|
||||
char *dst = inet_ntoa(*(struct in_addr *)&key->ipv4.addr.dst);
|
||||
int dst_len = of_dpa_mask2prefix(mask->ipv4.addr.dst);
|
||||
nkey->has_ip_dst = true;
|
||||
nkey->ip_dst = g_strdup_printf("%s/%d", dst, dst_len);
|
||||
}
|
||||
break;
|
||||
@ -2501,12 +2496,10 @@ static void of_dpa_group_fill(void *key, void *value, void *user_data)
|
||||
ngroup->set_vlan_id = ntohs(group->l2_rewrite.vlan_id);
|
||||
}
|
||||
if (memcmp(group->l2_rewrite.src_mac.a, zero_mac.a, ETH_ALEN)) {
|
||||
ngroup->has_set_eth_src = true;
|
||||
ngroup->set_eth_src =
|
||||
qemu_mac_strdup_printf(group->l2_rewrite.src_mac.a);
|
||||
}
|
||||
if (memcmp(group->l2_rewrite.dst_mac.a, zero_mac.a, ETH_ALEN)) {
|
||||
ngroup->has_set_eth_dst = true;
|
||||
ngroup->set_eth_dst =
|
||||
qemu_mac_strdup_printf(group->l2_rewrite.dst_mac.a);
|
||||
}
|
||||
@ -2532,12 +2525,10 @@ static void of_dpa_group_fill(void *key, void *value, void *user_data)
|
||||
ngroup->set_vlan_id = ntohs(group->l3_unicast.vlan_id);
|
||||
}
|
||||
if (memcmp(group->l3_unicast.src_mac.a, zero_mac.a, ETH_ALEN)) {
|
||||
ngroup->has_set_eth_src = true;
|
||||
ngroup->set_eth_src =
|
||||
qemu_mac_strdup_printf(group->l3_unicast.src_mac.a);
|
||||
}
|
||||
if (memcmp(group->l3_unicast.dst_mac.a, zero_mac.a, ETH_ALEN)) {
|
||||
ngroup->has_set_eth_dst = true;
|
||||
ngroup->set_eth_dst =
|
||||
qemu_mac_strdup_printf(group->l3_unicast.dst_mac.a);
|
||||
}
|
||||
|
@ -457,8 +457,7 @@ static void rxfilter_notify(NetClientState *nc)
|
||||
|
||||
if (nc->rxfilter_notify_enabled) {
|
||||
char *path = object_get_canonical_path(OBJECT(n->qdev));
|
||||
qapi_event_send_nic_rx_filter_changed(!!n->netclient_name,
|
||||
n->netclient_name, path);
|
||||
qapi_event_send_nic_rx_filter_changed(n->netclient_name, path);
|
||||
g_free(path);
|
||||
|
||||
/* disable event notification to avoid events flooding */
|
||||
|
@ -201,7 +201,7 @@ static void fw_cfg_bootsplash(FWCfgState *s)
|
||||
}
|
||||
|
||||
/* insert splash file if user configurated */
|
||||
if (current_machine->boot_config.has_splash) {
|
||||
if (current_machine->boot_config.splash) {
|
||||
const char *boot_splash_filename = current_machine->boot_config.splash;
|
||||
filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, boot_splash_filename);
|
||||
if (filename == NULL) {
|
||||
|
@ -1879,7 +1879,6 @@ static PciDeviceInfo *qmp_query_pci_device(PCIDevice *dev, PCIBus *bus,
|
||||
info->class_info->q_class = class;
|
||||
desc = get_class_desc(class);
|
||||
if (desc->desc) {
|
||||
info->class_info->has_desc = true;
|
||||
info->class_info->desc = g_strdup(desc->desc);
|
||||
}
|
||||
|
||||
@ -1897,7 +1896,6 @@ static PciDeviceInfo *qmp_query_pci_device(PCIDevice *dev, PCIBus *bus,
|
||||
|
||||
type = dev->config[PCI_HEADER_TYPE] & ~PCI_HEADER_TYPE_MULTI_FUNCTION;
|
||||
if (type == PCI_HEADER_TYPE_BRIDGE) {
|
||||
info->has_pci_bridge = true;
|
||||
info->pci_bridge = qmp_query_pci_bridge(dev, bus, bus_num);
|
||||
} else if (type == PCI_HEADER_TYPE_NORMAL) {
|
||||
info->id->has_subsystem = info->id->has_subsystem_vendor = true;
|
||||
|
@ -3728,7 +3728,7 @@ void spapr_memory_unplug_rollback(SpaprMachineState *spapr, DeviceState *dev)
|
||||
|
||||
qapi_event_send_mem_unplug_error(dev->id ? : "", qapi_error);
|
||||
|
||||
qapi_event_send_device_unplug_guest_error(!!dev->id, dev->id,
|
||||
qapi_event_send_device_unplug_guest_error(dev->id,
|
||||
dev->canonical_path);
|
||||
}
|
||||
|
||||
|
@ -175,8 +175,7 @@ static uint32_t drc_unisolate_logical(SpaprDrc *drc)
|
||||
"for device %s", drc->dev->id);
|
||||
}
|
||||
|
||||
qapi_event_send_device_unplug_guest_error(!!drc->dev->id,
|
||||
drc->dev->id,
|
||||
qapi_event_send_device_unplug_guest_error(drc->dev->id,
|
||||
drc->dev->canonical_path);
|
||||
}
|
||||
|
||||
|
@ -65,7 +65,6 @@ static void virtio_mem_pci_fill_device_info(const MemoryDeviceState *md,
|
||||
DeviceState *dev = DEVICE(md);
|
||||
|
||||
if (dev->id) {
|
||||
vi->has_id = true;
|
||||
vi->id = g_strdup(dev->id);
|
||||
}
|
||||
|
||||
@ -90,8 +89,7 @@ static void virtio_mem_pci_size_change_notify(Notifier *notifier, void *data)
|
||||
char *qom_path = object_get_canonical_path(OBJECT(dev));
|
||||
const uint64_t * const size_p = data;
|
||||
|
||||
qapi_event_send_memory_device_size_change(!!dev->id, dev->id, *size_p,
|
||||
qom_path);
|
||||
qapi_event_send_memory_device_size_change(dev->id, *size_p, qom_path);
|
||||
g_free(qom_path);
|
||||
}
|
||||
|
||||
|
@ -70,7 +70,6 @@ static void virtio_pmem_pci_fill_device_info(const MemoryDeviceState *md,
|
||||
DeviceState *dev = DEVICE(md);
|
||||
|
||||
if (dev->id) {
|
||||
vi->has_id = true;
|
||||
vi->id = g_strdup(dev->id);
|
||||
}
|
||||
|
||||
|
@ -4701,7 +4701,6 @@ VirtioStatus *qmp_x_query_virtio_status(const char *path, Error **errp)
|
||||
status->disable_legacy_check = vdev->disable_legacy_check;
|
||||
status->bus_name = g_strdup(vdev->bus_name);
|
||||
status->use_guest_notifier_mask = vdev->use_guest_notifier_mask;
|
||||
status->has_vhost_dev = vdev->vhost_started;
|
||||
|
||||
if (vdev->vhost_started) {
|
||||
VirtioDeviceClass *vdc = VIRTIO_DEVICE_GET_CLASS(vdev);
|
||||
|
@ -46,8 +46,7 @@ int monitor_read_password(MonitorHMP *mon, ReadLineFunc *readline_func,
|
||||
void *opaque);
|
||||
|
||||
AddfdInfo *monitor_fdset_add_fd(int fd, bool has_fdset_id, int64_t fdset_id,
|
||||
bool has_opaque, const char *opaque,
|
||||
Error **errp);
|
||||
const char *opaque, Error **errp);
|
||||
int monitor_fdset_dup_fd_add(int64_t fdset_id, int flags);
|
||||
void monitor_fdset_dup_fd_remove(int dup_fd);
|
||||
int64_t monitor_fdset_dup_fd_find(int dup_fd);
|
||||
|
@ -156,8 +156,7 @@ static JobInfo *job_query_single_locked(Job *job, Error **errp)
|
||||
.status = job->status,
|
||||
.current_progress = progress_current,
|
||||
.total_progress = progress_total,
|
||||
.has_error = !!job->err,
|
||||
.error = job->err ? \
|
||||
.error = job->err ?
|
||||
g_strdup(error_get_pretty(job->err)) : NULL,
|
||||
};
|
||||
|
||||
|
@ -551,7 +551,7 @@ static int add_bitmaps_to_list(DBMSaveState *s, BlockDriverState *bs,
|
||||
}
|
||||
|
||||
bitmap_alias = bmap_inner->alias;
|
||||
if (bmap_inner->has_transform) {
|
||||
if (bmap_inner->transform) {
|
||||
bitmap_transform = bmap_inner->transform;
|
||||
}
|
||||
} else {
|
||||
@ -821,7 +821,7 @@ static int dirty_bitmap_load_start(QEMUFile *f, DBMLoadState *s)
|
||||
}
|
||||
|
||||
if (s->bmap_inner &&
|
||||
s->bmap_inner->has_transform &&
|
||||
s->bmap_inner->transform &&
|
||||
s->bmap_inner->transform->has_persistent) {
|
||||
persistent = s->bmap_inner->transform->persistent;
|
||||
} else {
|
||||
|
@ -250,7 +250,6 @@ ReplicationStatus *qmp_query_xen_replication_status(Error **errp)
|
||||
replication_get_error_all(&err);
|
||||
if (err) {
|
||||
s->error = true;
|
||||
s->has_desc = true;
|
||||
s->desc = g_strdup(error_get_pretty(err));
|
||||
} else {
|
||||
s->error = false;
|
||||
|
@ -918,11 +918,8 @@ MigrationParameters *qmp_query_migrate_parameters(Error **errp)
|
||||
params->cpu_throttle_increment = s->parameters.cpu_throttle_increment;
|
||||
params->has_cpu_throttle_tailslow = true;
|
||||
params->cpu_throttle_tailslow = s->parameters.cpu_throttle_tailslow;
|
||||
params->has_tls_creds = true;
|
||||
params->tls_creds = g_strdup(s->parameters.tls_creds);
|
||||
params->has_tls_hostname = true;
|
||||
params->tls_hostname = g_strdup(s->parameters.tls_hostname);
|
||||
params->has_tls_authz = true;
|
||||
params->tls_authz = g_strdup(s->parameters.tls_authz ?
|
||||
s->parameters.tls_authz : "");
|
||||
params->has_max_bandwidth = true;
|
||||
@ -1047,7 +1044,6 @@ static void populate_ram_info(MigrationInfo *info, MigrationState *s)
|
||||
{
|
||||
size_t page_size = qemu_target_page_size();
|
||||
|
||||
info->has_ram = true;
|
||||
info->ram = g_malloc0(sizeof(*info->ram));
|
||||
info->ram->transferred = ram_counters.transferred;
|
||||
info->ram->total = ram_bytes_total();
|
||||
@ -1069,7 +1065,6 @@ static void populate_ram_info(MigrationInfo *info, MigrationState *s)
|
||||
info->ram->postcopy_bytes = ram_counters.postcopy_bytes;
|
||||
|
||||
if (migrate_use_xbzrle()) {
|
||||
info->has_xbzrle_cache = true;
|
||||
info->xbzrle_cache = g_malloc0(sizeof(*info->xbzrle_cache));
|
||||
info->xbzrle_cache->cache_size = migrate_xbzrle_cache_size();
|
||||
info->xbzrle_cache->bytes = xbzrle_counters.bytes;
|
||||
@ -1081,7 +1076,6 @@ static void populate_ram_info(MigrationInfo *info, MigrationState *s)
|
||||
}
|
||||
|
||||
if (migrate_use_compression()) {
|
||||
info->has_compression = true;
|
||||
info->compression = g_malloc0(sizeof(*info->compression));
|
||||
info->compression->pages = compression_counters.pages;
|
||||
info->compression->busy = compression_counters.busy;
|
||||
@ -1106,7 +1100,6 @@ static void populate_ram_info(MigrationInfo *info, MigrationState *s)
|
||||
static void populate_disk_info(MigrationInfo *info)
|
||||
{
|
||||
if (blk_mig_active()) {
|
||||
info->has_disk = true;
|
||||
info->disk = g_malloc0(sizeof(*info->disk));
|
||||
info->disk->transferred = blk_mig_bytes_transferred();
|
||||
info->disk->remaining = blk_mig_bytes_remaining();
|
||||
@ -1171,7 +1164,6 @@ static void fill_source_migration_info(MigrationInfo *info)
|
||||
case MIGRATION_STATUS_FAILED:
|
||||
info->has_status = true;
|
||||
if (s->error) {
|
||||
info->has_error_desc = true;
|
||||
info->error_desc = g_strdup(error_get_pretty(s->error));
|
||||
}
|
||||
break;
|
||||
@ -1575,7 +1567,7 @@ static bool migrate_params_check(MigrationParameters *params, Error **errp)
|
||||
#ifdef CONFIG_LINUX
|
||||
if (migrate_use_zero_copy_send() &&
|
||||
((params->has_multifd_compression && params->multifd_compression) ||
|
||||
(params->has_tls_creds && params->tls_creds && *params->tls_creds))) {
|
||||
(params->tls_creds && *params->tls_creds))) {
|
||||
error_setg(errp,
|
||||
"Zero copy only available for non-compressed non-TLS multifd migration");
|
||||
return false;
|
||||
@ -1624,12 +1616,12 @@ static void migrate_params_test_apply(MigrateSetParameters *params,
|
||||
dest->cpu_throttle_tailslow = params->cpu_throttle_tailslow;
|
||||
}
|
||||
|
||||
if (params->has_tls_creds) {
|
||||
if (params->tls_creds) {
|
||||
assert(params->tls_creds->type == QTYPE_QSTRING);
|
||||
dest->tls_creds = params->tls_creds->u.s;
|
||||
}
|
||||
|
||||
if (params->has_tls_hostname) {
|
||||
if (params->tls_hostname) {
|
||||
assert(params->tls_hostname->type == QTYPE_QSTRING);
|
||||
dest->tls_hostname = params->tls_hostname->u.s;
|
||||
}
|
||||
@ -1721,19 +1713,19 @@ static void migrate_params_apply(MigrateSetParameters *params, Error **errp)
|
||||
s->parameters.cpu_throttle_tailslow = params->cpu_throttle_tailslow;
|
||||
}
|
||||
|
||||
if (params->has_tls_creds) {
|
||||
if (params->tls_creds) {
|
||||
g_free(s->parameters.tls_creds);
|
||||
assert(params->tls_creds->type == QTYPE_QSTRING);
|
||||
s->parameters.tls_creds = g_strdup(params->tls_creds->u.s);
|
||||
}
|
||||
|
||||
if (params->has_tls_hostname) {
|
||||
if (params->tls_hostname) {
|
||||
g_free(s->parameters.tls_hostname);
|
||||
assert(params->tls_hostname->type == QTYPE_QSTRING);
|
||||
s->parameters.tls_hostname = g_strdup(params->tls_hostname->u.s);
|
||||
}
|
||||
|
||||
if (params->has_tls_authz) {
|
||||
if (params->tls_authz) {
|
||||
g_free(s->parameters.tls_authz);
|
||||
assert(params->tls_authz->type == QTYPE_QSTRING);
|
||||
s->parameters.tls_authz = g_strdup(params->tls_authz->u.s);
|
||||
@ -1810,14 +1802,14 @@ void qmp_migrate_set_parameters(MigrateSetParameters *params, Error **errp)
|
||||
MigrationParameters tmp;
|
||||
|
||||
/* TODO Rewrite "" to null instead */
|
||||
if (params->has_tls_creds
|
||||
if (params->tls_creds
|
||||
&& params->tls_creds->type == QTYPE_QNULL) {
|
||||
qobject_unref(params->tls_creds->u.n);
|
||||
params->tls_creds->type = QTYPE_QSTRING;
|
||||
params->tls_creds->u.s = strdup("");
|
||||
}
|
||||
/* TODO Rewrite "" to null instead */
|
||||
if (params->has_tls_hostname
|
||||
if (params->tls_hostname
|
||||
&& params->tls_hostname->type == QTYPE_QNULL) {
|
||||
qobject_unref(params->tls_hostname->u.n);
|
||||
params->tls_hostname->type = QTYPE_QSTRING;
|
||||
@ -4492,9 +4484,6 @@ static void migration_instance_init(Object *obj)
|
||||
params->has_announce_max = true;
|
||||
params->has_announce_rounds = true;
|
||||
params->has_announce_step = true;
|
||||
params->has_tls_creds = true;
|
||||
params->has_tls_hostname = true;
|
||||
params->has_tls_authz = true;
|
||||
|
||||
qemu_sem_init(&ms->postcopy_pause_sem, 0);
|
||||
qemu_sem_init(&ms->postcopy_pause_rp_sem, 0);
|
||||
|
@ -104,7 +104,7 @@ void hmp_info_name(Monitor *mon, const QDict *qdict)
|
||||
NameInfo *info;
|
||||
|
||||
info = qmp_query_name(NULL);
|
||||
if (info->has_name) {
|
||||
if (info->name) {
|
||||
monitor_printf(mon, "%s\n", info->name);
|
||||
}
|
||||
qapi_free_NameInfo(info);
|
||||
@ -219,8 +219,7 @@ void hmp_info_migrate(Monitor *mon, const QDict *qdict)
|
||||
if (info->has_status) {
|
||||
monitor_printf(mon, "Migration status: %s",
|
||||
MigrationStatus_str(info->status));
|
||||
if (info->status == MIGRATION_STATUS_FAILED &&
|
||||
info->has_error_desc) {
|
||||
if (info->status == MIGRATION_STATUS_FAILED && info->error_desc) {
|
||||
monitor_printf(mon, " (%s)\n", info->error_desc);
|
||||
} else {
|
||||
monitor_printf(mon, "\n");
|
||||
@ -242,7 +241,7 @@ void hmp_info_migrate(Monitor *mon, const QDict *qdict)
|
||||
}
|
||||
}
|
||||
|
||||
if (info->has_ram) {
|
||||
if (info->ram) {
|
||||
monitor_printf(mon, "transferred ram: %" PRIu64 " kbytes\n",
|
||||
info->ram->transferred >> 10);
|
||||
monitor_printf(mon, "throughput: %0.2f mbps\n",
|
||||
@ -295,7 +294,7 @@ void hmp_info_migrate(Monitor *mon, const QDict *qdict)
|
||||
}
|
||||
}
|
||||
|
||||
if (info->has_disk) {
|
||||
if (info->disk) {
|
||||
monitor_printf(mon, "transferred disk: %" PRIu64 " kbytes\n",
|
||||
info->disk->transferred >> 10);
|
||||
monitor_printf(mon, "remaining disk: %" PRIu64 " kbytes\n",
|
||||
@ -304,7 +303,7 @@ void hmp_info_migrate(Monitor *mon, const QDict *qdict)
|
||||
info->disk->total >> 10);
|
||||
}
|
||||
|
||||
if (info->has_xbzrle_cache) {
|
||||
if (info->xbzrle_cache) {
|
||||
monitor_printf(mon, "cache size: %" PRIu64 " bytes\n",
|
||||
info->xbzrle_cache->cache_size);
|
||||
monitor_printf(mon, "xbzrle transferred: %" PRIu64 " kbytes\n",
|
||||
@ -321,7 +320,7 @@ void hmp_info_migrate(Monitor *mon, const QDict *qdict)
|
||||
info->xbzrle_cache->overflow);
|
||||
}
|
||||
|
||||
if (info->has_compression) {
|
||||
if (info->compression) {
|
||||
monitor_printf(mon, "compression pages: %" PRIu64 " pages\n",
|
||||
info->compression->pages);
|
||||
monitor_printf(mon, "compression busy: %" PRIu64 "\n",
|
||||
@ -368,7 +367,7 @@ void hmp_info_migrate(Monitor *mon, const QDict *qdict)
|
||||
monitor_printf(mon, "]\n");
|
||||
}
|
||||
|
||||
if (info->has_vfio) {
|
||||
if (info->vfio) {
|
||||
monitor_printf(mon, "vfio device transferred: %" PRIu64 " kbytes\n",
|
||||
info->vfio->transferred >> 10);
|
||||
}
|
||||
@ -448,11 +447,11 @@ void hmp_info_migrate_parameters(Monitor *mon, const QDict *qdict)
|
||||
monitor_printf(mon, "%s: %u\n",
|
||||
MigrationParameter_str(MIGRATION_PARAMETER_MAX_CPU_THROTTLE),
|
||||
params->max_cpu_throttle);
|
||||
assert(params->has_tls_creds);
|
||||
assert(params->tls_creds);
|
||||
monitor_printf(mon, "%s: '%s'\n",
|
||||
MigrationParameter_str(MIGRATION_PARAMETER_TLS_CREDS),
|
||||
params->tls_creds);
|
||||
assert(params->has_tls_hostname);
|
||||
assert(params->tls_hostname);
|
||||
monitor_printf(mon, "%s: '%s'\n",
|
||||
MigrationParameter_str(MIGRATION_PARAMETER_TLS_HOSTNAME),
|
||||
params->tls_hostname);
|
||||
@ -549,11 +548,9 @@ static void hmp_info_vnc_clients(Monitor *mon, VncClientInfoList *client)
|
||||
|
||||
hmp_info_VncBasicInfo(mon, qapi_VncClientInfo_base(cinfo), "Client");
|
||||
monitor_printf(mon, " x509_dname: %s\n",
|
||||
cinfo->has_x509_dname ?
|
||||
cinfo->x509_dname : "none");
|
||||
cinfo->x509_dname ?: "none");
|
||||
monitor_printf(mon, " sasl_username: %s\n",
|
||||
cinfo->has_sasl_username ?
|
||||
cinfo->sasl_username : "none");
|
||||
cinfo->sasl_username ?: "none");
|
||||
|
||||
client = client->next;
|
||||
}
|
||||
@ -598,7 +595,7 @@ void hmp_info_vnc(Monitor *mon, const QDict *qdict)
|
||||
hmp_info_vnc_authcrypt(mon, " ", info->auth,
|
||||
info->has_vencrypt ? &info->vencrypt : NULL);
|
||||
}
|
||||
if (info->has_display) {
|
||||
if (info->display) {
|
||||
monitor_printf(mon, " Display: %s\n", info->display);
|
||||
}
|
||||
info2l = info2l->next;
|
||||
@ -710,7 +707,7 @@ static void hmp_info_pci_device(Monitor *mon, const PciDeviceInfo *dev)
|
||||
dev->slot, dev->function);
|
||||
monitor_printf(mon, " ");
|
||||
|
||||
if (dev->class_info->has_desc) {
|
||||
if (dev->class_info->desc) {
|
||||
monitor_puts(mon, dev->class_info->desc);
|
||||
} else {
|
||||
monitor_printf(mon, "Class %04" PRId64, dev->class_info->q_class);
|
||||
@ -728,7 +725,7 @@ static void hmp_info_pci_device(Monitor *mon, const PciDeviceInfo *dev)
|
||||
dev->irq, (char)('A' + dev->irq_pin - 1));
|
||||
}
|
||||
|
||||
if (dev->has_pci_bridge) {
|
||||
if (dev->pci_bridge) {
|
||||
monitor_printf(mon, " BUS %" PRId64 ".\n",
|
||||
dev->pci_bridge->bus->number);
|
||||
monitor_printf(mon, " secondary bus %" PRId64 ".\n",
|
||||
@ -774,7 +771,7 @@ static void hmp_info_pci_device(Monitor *mon, const PciDeviceInfo *dev)
|
||||
|
||||
monitor_printf(mon, " id \"%s\"\n", dev->qdev_id);
|
||||
|
||||
if (dev->has_pci_bridge) {
|
||||
if (dev->pci_bridge) {
|
||||
if (dev->pci_bridge->has_devices) {
|
||||
PciDeviceInfoList *cdev;
|
||||
for (cdev = dev->pci_bridge->devices; cdev; cdev = cdev->next) {
|
||||
@ -865,10 +862,10 @@ void hmp_info_tpm(Monitor *mon, const QDict *qdict)
|
||||
case TPM_TYPE_PASSTHROUGH:
|
||||
tpo = ti->options->u.passthrough.data;
|
||||
monitor_printf(mon, "%s%s%s%s",
|
||||
tpo->has_path ? ",path=" : "",
|
||||
tpo->has_path ? tpo->path : "",
|
||||
tpo->has_cancel_path ? ",cancel-path=" : "",
|
||||
tpo->has_cancel_path ? tpo->cancel_path : "");
|
||||
tpo->path ? ",path=" : "",
|
||||
tpo->path ?: "",
|
||||
tpo->cancel_path ? ",cancel-path=" : "",
|
||||
tpo->cancel_path ?: "");
|
||||
break;
|
||||
case TPM_TYPE_EMULATOR:
|
||||
teo = ti->options->u.emulator.data;
|
||||
@ -1105,7 +1102,6 @@ void hmp_announce_self(Monitor *mon, const QDict *qdict)
|
||||
params->interfaces = strList_from_comma_list(interfaces_str);
|
||||
params->has_interfaces = params->interfaces != NULL;
|
||||
params->id = g_strdup(id);
|
||||
params->has_id = !!params->id;
|
||||
qmp_announce_self(params, NULL);
|
||||
qapi_free_AnnounceParameters(params);
|
||||
}
|
||||
@ -1237,19 +1233,16 @@ void hmp_migrate_set_parameter(Monitor *mon, const QDict *qdict)
|
||||
visit_type_uint8(v, param, &p->max_cpu_throttle, &err);
|
||||
break;
|
||||
case MIGRATION_PARAMETER_TLS_CREDS:
|
||||
p->has_tls_creds = true;
|
||||
p->tls_creds = g_new0(StrOrNull, 1);
|
||||
p->tls_creds->type = QTYPE_QSTRING;
|
||||
visit_type_str(v, param, &p->tls_creds->u.s, &err);
|
||||
break;
|
||||
case MIGRATION_PARAMETER_TLS_HOSTNAME:
|
||||
p->has_tls_hostname = true;
|
||||
p->tls_hostname = g_new0(StrOrNull, 1);
|
||||
p->tls_hostname->type = QTYPE_QSTRING;
|
||||
visit_type_str(v, param, &p->tls_hostname->u.s, &err);
|
||||
break;
|
||||
case MIGRATION_PARAMETER_TLS_AUTHZ:
|
||||
p->has_tls_authz = true;
|
||||
p->tls_authz = g_new0(StrOrNull, 1);
|
||||
p->tls_authz->type = QTYPE_QSTRING;
|
||||
visit_type_str(v, param, &p->tls_authz->u.s, &err);
|
||||
@ -1361,7 +1354,7 @@ void hmp_client_migrate_info(Monitor *mon, const QDict *qdict)
|
||||
|
||||
qmp_client_migrate_info(protocol, hostname,
|
||||
has_port, port, has_tls_port, tls_port,
|
||||
!!cert_subject, cert_subject, &err);
|
||||
cert_subject, &err);
|
||||
hmp_handle_error(mon, err);
|
||||
}
|
||||
|
||||
@ -1406,7 +1399,6 @@ void hmp_set_password(Monitor *mon, const QDict *qdict)
|
||||
}
|
||||
|
||||
if (opts.protocol == DISPLAY_PROTOCOL_VNC) {
|
||||
opts.u.vnc.has_display = !!display;
|
||||
opts.u.vnc.display = (char *)display;
|
||||
}
|
||||
|
||||
@ -1434,7 +1426,6 @@ void hmp_expire_password(Monitor *mon, const QDict *qdict)
|
||||
}
|
||||
|
||||
if (opts.protocol == DISPLAY_PROTOCOL_VNC) {
|
||||
opts.u.vnc.has_display = !!display;
|
||||
opts.u.vnc.display = (char *)display;
|
||||
}
|
||||
|
||||
@ -1496,8 +1487,7 @@ void hmp_change(Monitor *mon, const QDict *qdict)
|
||||
}
|
||||
}
|
||||
|
||||
qmp_blockdev_change_medium(true, device, false, NULL, target,
|
||||
!!arg, arg, true, force,
|
||||
qmp_blockdev_change_medium(device, NULL, target, arg, true, force,
|
||||
!!read_only, read_only_mode,
|
||||
&err);
|
||||
}
|
||||
@ -1520,7 +1510,7 @@ static void hmp_migrate_status_cb(void *opaque)
|
||||
info = qmp_query_migrate(NULL);
|
||||
if (!info->has_status || info->status == MIGRATION_STATUS_ACTIVE ||
|
||||
info->status == MIGRATION_STATUS_SETUP) {
|
||||
if (info->has_disk) {
|
||||
if (info->disk) {
|
||||
int progress;
|
||||
|
||||
if (info->disk->remaining) {
|
||||
@ -1538,7 +1528,7 @@ static void hmp_migrate_status_cb(void *opaque)
|
||||
if (status->is_block_migration) {
|
||||
monitor_printf(status->mon, "\n");
|
||||
}
|
||||
if (info->has_error_desc) {
|
||||
if (info->error_desc) {
|
||||
error_report("%s", info->error_desc);
|
||||
}
|
||||
monitor_resume(status->mon);
|
||||
@ -1720,7 +1710,7 @@ hmp_screendump(Monitor *mon, const QDict *qdict)
|
||||
goto end;
|
||||
}
|
||||
|
||||
qmp_screendump(filename, id != NULL, id, id != NULL, head,
|
||||
qmp_screendump(filename, id, id != NULL, head,
|
||||
input_format != NULL, format, &err);
|
||||
end:
|
||||
hmp_handle_error(mon, err);
|
||||
@ -2016,35 +2006,35 @@ void hmp_rocker_of_dpa_flows(Monitor *mon, const QDict *qdict)
|
||||
}
|
||||
}
|
||||
|
||||
if (key->has_eth_src) {
|
||||
if (key->eth_src) {
|
||||
if ((strcmp(key->eth_src, "01:00:00:00:00:00") == 0) &&
|
||||
(mask->has_eth_src) &&
|
||||
mask->eth_src &&
|
||||
(strcmp(mask->eth_src, "01:00:00:00:00:00") == 0)) {
|
||||
monitor_printf(mon, " src <any mcast/bcast>");
|
||||
} else if ((strcmp(key->eth_src, "00:00:00:00:00:00") == 0) &&
|
||||
(mask->has_eth_src) &&
|
||||
mask->eth_src &&
|
||||
(strcmp(mask->eth_src, "01:00:00:00:00:00") == 0)) {
|
||||
monitor_printf(mon, " src <any ucast>");
|
||||
} else {
|
||||
monitor_printf(mon, " src %s", key->eth_src);
|
||||
if (mask->has_eth_src) {
|
||||
if (mask->eth_src) {
|
||||
monitor_printf(mon, "(%s)", mask->eth_src);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (key->has_eth_dst) {
|
||||
if (key->eth_dst) {
|
||||
if ((strcmp(key->eth_dst, "01:00:00:00:00:00") == 0) &&
|
||||
(mask->has_eth_dst) &&
|
||||
mask->eth_dst &&
|
||||
(strcmp(mask->eth_dst, "01:00:00:00:00:00") == 0)) {
|
||||
monitor_printf(mon, " dst <any mcast/bcast>");
|
||||
} else if ((strcmp(key->eth_dst, "00:00:00:00:00:00") == 0) &&
|
||||
(mask->has_eth_dst) &&
|
||||
mask->eth_dst &&
|
||||
(strcmp(mask->eth_dst, "01:00:00:00:00:00") == 0)) {
|
||||
monitor_printf(mon, " dst <any ucast>");
|
||||
} else {
|
||||
monitor_printf(mon, " dst %s", key->eth_dst);
|
||||
if (mask->has_eth_dst) {
|
||||
if (mask->eth_dst) {
|
||||
monitor_printf(mon, "(%s)", mask->eth_dst);
|
||||
}
|
||||
}
|
||||
@ -2064,7 +2054,7 @@ void hmp_rocker_of_dpa_flows(Monitor *mon, const QDict *qdict)
|
||||
}
|
||||
}
|
||||
|
||||
if (key->has_ip_dst) {
|
||||
if (key->ip_dst) {
|
||||
monitor_printf(mon, " dst %s", key->ip_dst);
|
||||
}
|
||||
|
||||
@ -2143,7 +2133,7 @@ void hmp_rocker_of_dpa_groups(Monitor *mon, const QDict *qdict)
|
||||
group->set_vlan_id & VLAN_VID_MASK);
|
||||
}
|
||||
|
||||
if (group->has_set_eth_src) {
|
||||
if (group->set_eth_src) {
|
||||
if (!set) {
|
||||
set = true;
|
||||
monitor_printf(mon, " set");
|
||||
@ -2151,7 +2141,7 @@ void hmp_rocker_of_dpa_groups(Monitor *mon, const QDict *qdict)
|
||||
monitor_printf(mon, " src %s", group->set_eth_src);
|
||||
}
|
||||
|
||||
if (group->has_set_eth_dst) {
|
||||
if (group->set_eth_dst) {
|
||||
if (!set) {
|
||||
monitor_printf(mon, " set");
|
||||
}
|
||||
@ -2559,7 +2549,7 @@ void hmp_virtio_status(Monitor *mon, const QDict *qdict)
|
||||
|
||||
monitor_printf(mon, "%s:\n", path);
|
||||
monitor_printf(mon, " device_name: %s %s\n",
|
||||
s->name, s->has_vhost_dev ? "(vhost)" : "");
|
||||
s->name, s->vhost_dev ? "(vhost)" : "");
|
||||
monitor_printf(mon, " device_id: %d\n", s->device_id);
|
||||
monitor_printf(mon, " vhost_started: %s\n",
|
||||
s->vhost_started ? "true" : "false");
|
||||
@ -2595,7 +2585,7 @@ void hmp_virtio_status(Monitor *mon, const QDict *qdict)
|
||||
monitor_printf(mon, " Backend features:\n");
|
||||
hmp_virtio_dump_features(mon, s->backend_features);
|
||||
|
||||
if (s->has_vhost_dev) {
|
||||
if (s->vhost_dev) {
|
||||
monitor_printf(mon, " VHost:\n");
|
||||
monitor_printf(mon, " nvqs: %d\n",
|
||||
s->vhost_dev->nvqs);
|
||||
|
@ -398,7 +398,7 @@ static void hmp_info_trace_events(Monitor *mon, const QDict *qdict)
|
||||
void qmp_client_migrate_info(const char *protocol, const char *hostname,
|
||||
bool has_port, int64_t port,
|
||||
bool has_tls_port, int64_t tls_port,
|
||||
bool has_cert_subject, const char *cert_subject,
|
||||
const char *cert_subject,
|
||||
Error **errp)
|
||||
{
|
||||
if (strcmp(protocol, "spice") == 0) {
|
||||
@ -1132,7 +1132,7 @@ void monitor_fdsets_cleanup(void)
|
||||
}
|
||||
}
|
||||
|
||||
AddfdInfo *qmp_add_fd(bool has_fdset_id, int64_t fdset_id, bool has_opaque,
|
||||
AddfdInfo *qmp_add_fd(bool has_fdset_id, int64_t fdset_id,
|
||||
const char *opaque, Error **errp)
|
||||
{
|
||||
int fd;
|
||||
@ -1145,8 +1145,7 @@ AddfdInfo *qmp_add_fd(bool has_fdset_id, int64_t fdset_id, bool has_opaque,
|
||||
goto error;
|
||||
}
|
||||
|
||||
fdinfo = monitor_fdset_add_fd(fd, has_fdset_id, fdset_id,
|
||||
has_opaque, opaque, errp);
|
||||
fdinfo = monitor_fdset_add_fd(fd, has_fdset_id, fdset_id, opaque, errp);
|
||||
if (fdinfo) {
|
||||
return fdinfo;
|
||||
}
|
||||
@ -1214,12 +1213,7 @@ FdsetInfoList *qmp_query_fdsets(Error **errp)
|
||||
|
||||
fdsetfd_info = g_malloc0(sizeof(*fdsetfd_info));
|
||||
fdsetfd_info->fd = mon_fdset_fd->fd;
|
||||
if (mon_fdset_fd->opaque) {
|
||||
fdsetfd_info->has_opaque = true;
|
||||
fdsetfd_info->opaque = g_strdup(mon_fdset_fd->opaque);
|
||||
} else {
|
||||
fdsetfd_info->has_opaque = false;
|
||||
}
|
||||
fdsetfd_info->opaque = g_strdup(mon_fdset_fd->opaque);
|
||||
|
||||
QAPI_LIST_PREPEND(fdset_info->fds, fdsetfd_info);
|
||||
}
|
||||
@ -1231,8 +1225,7 @@ FdsetInfoList *qmp_query_fdsets(Error **errp)
|
||||
}
|
||||
|
||||
AddfdInfo *monitor_fdset_add_fd(int fd, bool has_fdset_id, int64_t fdset_id,
|
||||
bool has_opaque, const char *opaque,
|
||||
Error **errp)
|
||||
const char *opaque, Error **errp)
|
||||
{
|
||||
MonFdset *mon_fdset = NULL;
|
||||
MonFdsetFd *mon_fdset_fd;
|
||||
@ -1300,9 +1293,7 @@ AddfdInfo *monitor_fdset_add_fd(int fd, bool has_fdset_id, int64_t fdset_id,
|
||||
mon_fdset_fd = g_malloc0(sizeof(*mon_fdset_fd));
|
||||
mon_fdset_fd->fd = fd;
|
||||
mon_fdset_fd->removed = false;
|
||||
if (has_opaque) {
|
||||
mon_fdset_fd->opaque = g_strdup(opaque);
|
||||
}
|
||||
mon_fdset_fd->opaque = g_strdup(opaque);
|
||||
QLIST_INSERT_HEAD(&mon_fdset->fds, mon_fdset_fd, next);
|
||||
|
||||
fdinfo = g_malloc0(sizeof(*fdinfo));
|
||||
|
@ -50,11 +50,7 @@ NameInfo *qmp_query_name(Error **errp)
|
||||
{
|
||||
NameInfo *info = g_malloc0(sizeof(*info));
|
||||
|
||||
if (qemu_name) {
|
||||
info->has_name = true;
|
||||
info->name = g_strdup(qemu_name);
|
||||
}
|
||||
|
||||
info->name = g_strdup(qemu_name);
|
||||
return info;
|
||||
}
|
||||
|
||||
@ -564,10 +560,7 @@ void add_stats_entry(StatsResultList **stats_results, StatsProvider provider,
|
||||
StatsResult *entry = g_new0(StatsResult, 1);
|
||||
|
||||
entry->provider = provider;
|
||||
if (qom_path) {
|
||||
entry->has_qom_path = true;
|
||||
entry->qom_path = g_strdup(qom_path);
|
||||
}
|
||||
entry->qom_path = g_strdup(qom_path);
|
||||
entry->stats = stats_list;
|
||||
|
||||
QAPI_LIST_PREPEND(*stats_results, entry);
|
||||
|
15
nbd/server.c
15
nbd/server.c
@ -1638,6 +1638,7 @@ static int nbd_export_create(BlockExport *blk_exp, BlockExportOptions *exp_args,
|
||||
{
|
||||
NBDExport *exp = container_of(blk_exp, NBDExport, common);
|
||||
BlockExportOptionsNbd *arg = &exp_args->u.nbd;
|
||||
const char *name = arg->name ?: exp_args->node_name;
|
||||
BlockBackend *blk = blk_exp->blk;
|
||||
int64_t size;
|
||||
uint64_t perm, shared_perm;
|
||||
@ -1653,12 +1654,8 @@ static int nbd_export_create(BlockExport *blk_exp, BlockExportOptions *exp_args,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (!arg->has_name) {
|
||||
arg->name = exp_args->node_name;
|
||||
}
|
||||
|
||||
if (strlen(arg->name) > NBD_MAX_STRING_SIZE) {
|
||||
error_setg(errp, "export name '%s' too long", arg->name);
|
||||
if (strlen(name) > NBD_MAX_STRING_SIZE) {
|
||||
error_setg(errp, "export name '%s' too long", name);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
@ -1667,8 +1664,8 @@ static int nbd_export_create(BlockExport *blk_exp, BlockExportOptions *exp_args,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (nbd_export_find(arg->name)) {
|
||||
error_setg(errp, "NBD server already has export named '%s'", arg->name);
|
||||
if (nbd_export_find(name)) {
|
||||
error_setg(errp, "NBD server already has export named '%s'", name);
|
||||
return -EEXIST;
|
||||
}
|
||||
|
||||
@ -1688,7 +1685,7 @@ static int nbd_export_create(BlockExport *blk_exp, BlockExportOptions *exp_args,
|
||||
}
|
||||
|
||||
QTAILQ_INIT(&exp->clients);
|
||||
exp->name = g_strdup(arg->name);
|
||||
exp->name = g_strdup(name);
|
||||
exp->description = g_strdup(arg->description);
|
||||
exp->nbdflags = (NBD_FLAG_HAS_FLAGS | NBD_FLAG_SEND_FLUSH |
|
||||
NBD_FLAG_SEND_FUA | NBD_FLAG_SEND_CACHE);
|
||||
|
@ -46,7 +46,7 @@ void qemu_announce_timer_del(AnnounceTimer *timer, bool free_named)
|
||||
}
|
||||
qapi_free_strList(timer->params.interfaces);
|
||||
timer->params.interfaces = NULL;
|
||||
if (free_named && timer->params.has_id) {
|
||||
if (free_named && timer->params.id) {
|
||||
AnnounceTimer *list_timer;
|
||||
/*
|
||||
* Sanity check: There should only be one timer on the list with
|
||||
@ -157,7 +157,7 @@ static void qemu_announce_self_iter(NICState *nic, void *opaque)
|
||||
skip = false;
|
||||
}
|
||||
|
||||
trace_qemu_announce_self_iter(timer->params.has_id ? timer->params.id : "_",
|
||||
trace_qemu_announce_self_iter(timer->params.id ?: "_",
|
||||
nic->ncs->name,
|
||||
qemu_ether_ntoa(&nic->conf->macaddr), skip);
|
||||
|
||||
@ -199,9 +199,9 @@ void qemu_announce_self(AnnounceTimer *timer, AnnounceParameters *params)
|
||||
void qmp_announce_self(AnnounceParameters *params, Error **errp)
|
||||
{
|
||||
AnnounceTimer *named_timer;
|
||||
if (!params->has_id) {
|
||||
|
||||
if (!params->id) {
|
||||
params->id = g_strdup("");
|
||||
params->has_id = true;
|
||||
}
|
||||
|
||||
named_timer = g_datalist_get_data(&named_timers, params->id);
|
||||
|
@ -274,7 +274,7 @@ int net_init_hubport(const Netdev *netdev, const char *name,
|
||||
assert(!peer);
|
||||
hubport = &netdev->u.hubport;
|
||||
|
||||
if (hubport->has_netdev) {
|
||||
if (hubport->netdev) {
|
||||
hubpeer = qemu_find_netdev(hubport->netdev);
|
||||
if (!hubpeer) {
|
||||
error_setg(errp, "netdev '%s' not found", hubport->netdev);
|
||||
|
@ -578,7 +578,7 @@ int net_init_l2tpv3(const Netdev *netdev,
|
||||
|
||||
if (l2tpv3->has_udp && l2tpv3->udp) {
|
||||
s->udp = true;
|
||||
if (!(l2tpv3->has_srcport && l2tpv3->has_dstport)) {
|
||||
if (!(l2tpv3->srcport && l2tpv3->dstport)) {
|
||||
error_setg(errp, "need both src and dst port for udp");
|
||||
goto outerr;
|
||||
} else {
|
||||
|
25
net/net.c
25
net/net.c
@ -964,7 +964,7 @@ static int net_init_nic(const Netdev *netdev, const char *name,
|
||||
|
||||
memset(nd, 0, sizeof(*nd));
|
||||
|
||||
if (nic->has_netdev) {
|
||||
if (nic->netdev) {
|
||||
nd->netdev = qemu_find_netdev(nic->netdev);
|
||||
if (!nd->netdev) {
|
||||
error_setg(errp, "netdev '%s' not found", nic->netdev);
|
||||
@ -975,19 +975,19 @@ static int net_init_nic(const Netdev *netdev, const char *name,
|
||||
nd->netdev = peer;
|
||||
}
|
||||
nd->name = g_strdup(name);
|
||||
if (nic->has_model) {
|
||||
if (nic->model) {
|
||||
nd->model = g_strdup(nic->model);
|
||||
}
|
||||
if (nic->has_addr) {
|
||||
if (nic->addr) {
|
||||
nd->devaddr = g_strdup(nic->addr);
|
||||
}
|
||||
|
||||
if (nic->has_macaddr &&
|
||||
if (nic->macaddr &&
|
||||
net_parse_macaddr(nd->macaddr.a, nic->macaddr) < 0) {
|
||||
error_setg(errp, "invalid syntax for ethernet address");
|
||||
return -1;
|
||||
}
|
||||
if (nic->has_macaddr &&
|
||||
if (nic->macaddr &&
|
||||
is_multicast_ether_addr(nd->macaddr.a)) {
|
||||
error_setg(errp,
|
||||
"NIC cannot have multicast MAC address (odd 1st byte)");
|
||||
@ -1081,7 +1081,7 @@ static int net_client_init1(const Netdev *netdev, bool is_netdev, Error **errp)
|
||||
|
||||
/* Do not add to a hub if it's a nic with a netdev= parameter. */
|
||||
if (netdev->type != NET_CLIENT_DRIVER_NIC ||
|
||||
!netdev->u.nic.has_netdev) {
|
||||
!netdev->u.nic.netdev) {
|
||||
peer = net_hub_add_port(0, NULL, NULL);
|
||||
}
|
||||
}
|
||||
@ -1295,8 +1295,7 @@ void print_net_client(Monitor *mon, NetClientState *nc)
|
||||
}
|
||||
}
|
||||
|
||||
RxFilterInfoList *qmp_query_rx_filter(bool has_name, const char *name,
|
||||
Error **errp)
|
||||
RxFilterInfoList *qmp_query_rx_filter(const char *name, Error **errp)
|
||||
{
|
||||
NetClientState *nc;
|
||||
RxFilterInfoList *filter_list = NULL, **tail = &filter_list;
|
||||
@ -1304,13 +1303,13 @@ RxFilterInfoList *qmp_query_rx_filter(bool has_name, const char *name,
|
||||
QTAILQ_FOREACH(nc, &net_clients, next) {
|
||||
RxFilterInfo *info;
|
||||
|
||||
if (has_name && strcmp(nc->name, name) != 0) {
|
||||
if (name && strcmp(nc->name, name) != 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
/* only query rx-filter information of NIC */
|
||||
if (nc->info->type != NET_CLIENT_DRIVER_NIC) {
|
||||
if (has_name) {
|
||||
if (name) {
|
||||
error_setg(errp, "net client(%s) isn't a NIC", name);
|
||||
assert(!filter_list);
|
||||
return NULL;
|
||||
@ -1327,19 +1326,19 @@ RxFilterInfoList *qmp_query_rx_filter(bool has_name, const char *name,
|
||||
if (nc->info->query_rx_filter) {
|
||||
info = nc->info->query_rx_filter(nc);
|
||||
QAPI_LIST_APPEND(tail, info);
|
||||
} else if (has_name) {
|
||||
} else if (name) {
|
||||
error_setg(errp, "net client(%s) doesn't support"
|
||||
" rx-filter querying", name);
|
||||
assert(!filter_list);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (has_name) {
|
||||
if (name) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (filter_list == NULL && has_name) {
|
||||
if (filter_list == NULL && name) {
|
||||
error_setg(errp, "invalid net client name: %s", name);
|
||||
}
|
||||
|
||||
|
@ -1153,8 +1153,8 @@ int net_init_slirp(const Netdev *netdev, const char *name,
|
||||
ipv6 = 0;
|
||||
}
|
||||
|
||||
vnet = user->has_net ? g_strdup(user->net) :
|
||||
user->has_ip ? g_strdup_printf("%s/24", user->ip) :
|
||||
vnet = user->net ? g_strdup(user->net) :
|
||||
user->ip ? g_strdup_printf("%s/24", user->ip) :
|
||||
NULL;
|
||||
|
||||
dnssearch = slirp_dnssearch(user->dnssearch);
|
||||
|
18
net/socket.c
18
net/socket.c
@ -705,19 +705,19 @@ int net_init_socket(const Netdev *netdev, const char *name,
|
||||
assert(netdev->type == NET_CLIENT_DRIVER_SOCKET);
|
||||
sock = &netdev->u.socket;
|
||||
|
||||
if (sock->has_fd + sock->has_listen + sock->has_connect + sock->has_mcast +
|
||||
sock->has_udp != 1) {
|
||||
if (!!sock->fd + !!sock->listen + !!sock->connect + !!sock->mcast +
|
||||
!!sock->udp != 1) {
|
||||
error_setg(errp, "exactly one of listen=, connect=, mcast= or udp="
|
||||
" is required");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (sock->has_localaddr && !sock->has_mcast && !sock->has_udp) {
|
||||
if (sock->localaddr && !sock->mcast && !sock->udp) {
|
||||
error_setg(errp, "localaddr= is only valid with mcast= or udp=");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (sock->has_fd) {
|
||||
if (sock->fd) {
|
||||
int fd, ret;
|
||||
|
||||
fd = monitor_fd_param(monitor_cur(), sock->fd, errp);
|
||||
@ -737,7 +737,7 @@ int net_init_socket(const Netdev *netdev, const char *name,
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (sock->has_listen) {
|
||||
if (sock->listen) {
|
||||
if (net_socket_listen_init(peer, "socket", name, sock->listen, errp)
|
||||
< 0) {
|
||||
return -1;
|
||||
@ -745,7 +745,7 @@ int net_init_socket(const Netdev *netdev, const char *name,
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (sock->has_connect) {
|
||||
if (sock->connect) {
|
||||
if (net_socket_connect_init(peer, "socket", name, sock->connect, errp)
|
||||
< 0) {
|
||||
return -1;
|
||||
@ -753,7 +753,7 @@ int net_init_socket(const Netdev *netdev, const char *name,
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (sock->has_mcast) {
|
||||
if (sock->mcast) {
|
||||
/* if sock->localaddr is missing, it has been initialized to "all bits
|
||||
* zero" */
|
||||
if (net_socket_mcast_init(peer, "socket", name, sock->mcast,
|
||||
@ -763,8 +763,8 @@ int net_init_socket(const Netdev *netdev, const char *name,
|
||||
return 0;
|
||||
}
|
||||
|
||||
assert(sock->has_udp);
|
||||
if (!sock->has_localaddr) {
|
||||
assert(sock->udp);
|
||||
if (!sock->localaddr) {
|
||||
error_setg(errp, "localaddr= is mandatory with udp=");
|
||||
return -1;
|
||||
}
|
||||
|
@ -807,7 +807,7 @@ int net_init_tap(const Netdev *netdev, const char *name,
|
||||
assert(netdev->type == NET_CLIENT_DRIVER_TAP);
|
||||
tap = &netdev->u.tap;
|
||||
|
||||
if (!tap->has_ifname) {
|
||||
if (!tap->ifname) {
|
||||
error_report("tap: no interface name");
|
||||
return -1;
|
||||
}
|
||||
|
51
net/tap.c
51
net/tap.c
@ -611,8 +611,8 @@ int net_init_bridge(const Netdev *netdev, const char *name,
|
||||
|
||||
assert(netdev->type == NET_CLIENT_DRIVER_BRIDGE);
|
||||
bridge = &netdev->u.bridge;
|
||||
helper = bridge->has_helper ? bridge->helper : NULL;
|
||||
br = bridge->has_br ? bridge->br : DEFAULT_BRIDGE_INTERFACE;
|
||||
helper = bridge->helper;
|
||||
br = bridge->br ?: DEFAULT_BRIDGE_INTERFACE;
|
||||
|
||||
fd = net_bridge_run_helper(helper, br, errp);
|
||||
if (fd == -1) {
|
||||
@ -688,9 +688,9 @@ static void net_init_tap_one(const NetdevTapOptions *tap, NetClientState *peer,
|
||||
goto failed;
|
||||
}
|
||||
|
||||
if (tap->has_fd || tap->has_fds) {
|
||||
if (tap->fd || tap->fds) {
|
||||
qemu_set_info_str(&s->nc, "fd=%d", fd);
|
||||
} else if (tap->has_helper) {
|
||||
} else if (tap->helper) {
|
||||
qemu_set_info_str(&s->nc, "helper=%s", tap->helper);
|
||||
} else {
|
||||
qemu_set_info_str(&s->nc, "ifname=%s,script=%s,downscript=%s", ifname,
|
||||
@ -812,21 +812,21 @@ int net_init_tap(const Netdev *netdev, const char *name,
|
||||
assert(netdev->type == NET_CLIENT_DRIVER_TAP);
|
||||
tap = &netdev->u.tap;
|
||||
queues = tap->has_queues ? tap->queues : 1;
|
||||
vhostfdname = tap->has_vhostfd ? tap->vhostfd : NULL;
|
||||
script = tap->has_script ? tap->script : NULL;
|
||||
downscript = tap->has_downscript ? tap->downscript : NULL;
|
||||
vhostfdname = tap->vhostfd;
|
||||
script = tap->script;
|
||||
downscript = tap->downscript;
|
||||
|
||||
/* QEMU hubs do not support multiqueue tap, in this case peer is set.
|
||||
* For -netdev, peer is always NULL. */
|
||||
if (peer && (tap->has_queues || tap->has_fds || tap->has_vhostfds)) {
|
||||
if (peer && (tap->has_queues || tap->fds || tap->vhostfds)) {
|
||||
error_setg(errp, "Multiqueue tap cannot be used with hubs");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (tap->has_fd) {
|
||||
if (tap->has_ifname || tap->has_script || tap->has_downscript ||
|
||||
tap->has_vnet_hdr || tap->has_helper || tap->has_queues ||
|
||||
tap->has_fds || tap->has_vhostfds) {
|
||||
if (tap->fd) {
|
||||
if (tap->ifname || tap->script || tap->downscript ||
|
||||
tap->has_vnet_hdr || tap->helper || tap->has_queues ||
|
||||
tap->fds || tap->vhostfds) {
|
||||
error_setg(errp, "ifname=, script=, downscript=, vnet_hdr=, "
|
||||
"helper=, queues=, fds=, and vhostfds= "
|
||||
"are invalid with fd=");
|
||||
@ -859,14 +859,14 @@ int net_init_tap(const Netdev *netdev, const char *name,
|
||||
close(fd);
|
||||
return -1;
|
||||
}
|
||||
} else if (tap->has_fds) {
|
||||
} else if (tap->fds) {
|
||||
char **fds;
|
||||
char **vhost_fds;
|
||||
int nfds = 0, nvhosts = 0;
|
||||
|
||||
if (tap->has_ifname || tap->has_script || tap->has_downscript ||
|
||||
tap->has_vnet_hdr || tap->has_helper || tap->has_queues ||
|
||||
tap->has_vhostfd) {
|
||||
if (tap->ifname || tap->script || tap->downscript ||
|
||||
tap->has_vnet_hdr || tap->helper || tap->has_queues ||
|
||||
tap->vhostfd) {
|
||||
error_setg(errp, "ifname=, script=, downscript=, vnet_hdr=, "
|
||||
"helper=, queues=, and vhostfd= "
|
||||
"are invalid with fds=");
|
||||
@ -877,7 +877,7 @@ int net_init_tap(const Netdev *netdev, const char *name,
|
||||
vhost_fds = g_new0(char *, MAX_TAP_QUEUES);
|
||||
|
||||
nfds = get_fds(tap->fds, fds, MAX_TAP_QUEUES);
|
||||
if (tap->has_vhostfds) {
|
||||
if (tap->vhostfds) {
|
||||
nvhosts = get_fds(tap->vhostfds, vhost_fds, MAX_TAP_QUEUES);
|
||||
if (nfds != nvhosts) {
|
||||
error_setg(errp, "The number of fds passed does not match "
|
||||
@ -916,7 +916,7 @@ int net_init_tap(const Netdev *netdev, const char *name,
|
||||
|
||||
net_init_tap_one(tap, peer, "tap", name, ifname,
|
||||
script, downscript,
|
||||
tap->has_vhostfds ? vhost_fds[i] : NULL,
|
||||
tap->vhostfds ? vhost_fds[i] : NULL,
|
||||
vnet_hdr, fd, &err);
|
||||
if (err) {
|
||||
error_propagate(errp, err);
|
||||
@ -935,17 +935,16 @@ free_fail:
|
||||
g_free(fds);
|
||||
g_free(vhost_fds);
|
||||
return ret;
|
||||
} else if (tap->has_helper) {
|
||||
if (tap->has_ifname || tap->has_script || tap->has_downscript ||
|
||||
tap->has_vnet_hdr || tap->has_queues || tap->has_vhostfds) {
|
||||
} else if (tap->helper) {
|
||||
if (tap->ifname || tap->script || tap->downscript ||
|
||||
tap->has_vnet_hdr || tap->has_queues || tap->vhostfds) {
|
||||
error_setg(errp, "ifname=, script=, downscript=, vnet_hdr=, "
|
||||
"queues=, and vhostfds= are invalid with helper=");
|
||||
return -1;
|
||||
}
|
||||
|
||||
fd = net_bridge_run_helper(tap->helper,
|
||||
tap->has_br ?
|
||||
tap->br : DEFAULT_BRIDGE_INTERFACE,
|
||||
tap->br ?: DEFAULT_BRIDGE_INTERFACE,
|
||||
errp);
|
||||
if (fd == -1) {
|
||||
return -1;
|
||||
@ -972,7 +971,7 @@ free_fail:
|
||||
} else {
|
||||
g_autofree char *default_script = NULL;
|
||||
g_autofree char *default_downscript = NULL;
|
||||
if (tap->has_vhostfds) {
|
||||
if (tap->vhostfds) {
|
||||
error_setg(errp, "vhostfds= is invalid if fds= wasn't specified");
|
||||
return -1;
|
||||
}
|
||||
@ -985,7 +984,7 @@ free_fail:
|
||||
get_relocated_path(DEFAULT_NETWORK_DOWN_SCRIPT);
|
||||
}
|
||||
|
||||
if (tap->has_ifname) {
|
||||
if (tap->ifname) {
|
||||
pstrcpy(ifname, sizeof ifname, tap->ifname);
|
||||
} else {
|
||||
ifname[0] = '\0';
|
||||
@ -998,7 +997,7 @@ free_fail:
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (queues > 1 && i == 0 && !tap->has_ifname) {
|
||||
if (queues > 1 && i == 0 && !tap->ifname) {
|
||||
if (tap_fd_get_ifname(fd, ifname)) {
|
||||
error_setg(errp, "Fail to get ifname");
|
||||
close(fd);
|
||||
|
@ -635,19 +635,19 @@ int net_init_vhost_vdpa(const Netdev *netdev, const char *name,
|
||||
|
||||
assert(netdev->type == NET_CLIENT_DRIVER_VHOST_VDPA);
|
||||
opts = &netdev->u.vhost_vdpa;
|
||||
if (!opts->has_vhostdev && !opts->has_vhostfd) {
|
||||
if (!opts->vhostdev && !opts->vhostfd) {
|
||||
error_setg(errp,
|
||||
"vhost-vdpa: neither vhostdev= nor vhostfd= was specified");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (opts->has_vhostdev && opts->has_vhostfd) {
|
||||
if (opts->vhostdev && opts->vhostfd) {
|
||||
error_setg(errp,
|
||||
"vhost-vdpa: vhostdev= and vhostfd= are mutually exclusive");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (opts->has_vhostdev) {
|
||||
if (opts->vhostdev) {
|
||||
vdpa_device_fd = qemu_open(opts->vhostdev, O_RDWR, errp);
|
||||
if (vdpa_device_fd == -1) {
|
||||
return -errno;
|
||||
|
@ -26,7 +26,7 @@ static bool validate_options(const Netdev *netdev, Error **errp)
|
||||
MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_VERSION_11_0
|
||||
|
||||
QemuUUID net_uuid;
|
||||
if (options->has_net_uuid &&
|
||||
if (options->net_uuid &&
|
||||
qemu_uuid_parse(options->net_uuid, &net_uuid) < 0) {
|
||||
error_setg(errp, "Invalid UUID provided in 'net-uuid'");
|
||||
return false;
|
||||
@ -39,7 +39,7 @@ static bool validate_options(const Netdev *netdev, Error **errp)
|
||||
return false;
|
||||
}
|
||||
|
||||
if (options->has_net_uuid) {
|
||||
if (options->net_uuid) {
|
||||
error_setg(errp,
|
||||
"vmnet-host.net-uuid feature is "
|
||||
"unavailable: outdated vmnet.framework API");
|
||||
@ -47,12 +47,12 @@ static bool validate_options(const Netdev *netdev, Error **errp)
|
||||
}
|
||||
#endif
|
||||
|
||||
if ((options->has_start_address ||
|
||||
options->has_end_address ||
|
||||
options->has_subnet_mask) &&
|
||||
!(options->has_start_address &&
|
||||
options->has_end_address &&
|
||||
options->has_subnet_mask)) {
|
||||
if ((options->start_address ||
|
||||
options->end_address ||
|
||||
options->subnet_mask) &&
|
||||
!(options->start_address &&
|
||||
options->end_address &&
|
||||
options->subnet_mask)) {
|
||||
error_setg(errp,
|
||||
"'start-address', 'end-address', 'subnet-mask' "
|
||||
"should be provided together");
|
||||
@ -79,7 +79,7 @@ static xpc_object_t build_if_desc(const Netdev *netdev)
|
||||
options->isolated);
|
||||
|
||||
QemuUUID net_uuid;
|
||||
if (options->has_net_uuid) {
|
||||
if (options->net_uuid) {
|
||||
qemu_uuid_parse(options->net_uuid, &net_uuid);
|
||||
xpc_dictionary_set_uuid(if_desc,
|
||||
vmnet_network_identifier_key,
|
||||
@ -87,7 +87,7 @@ static xpc_object_t build_if_desc(const Netdev *netdev)
|
||||
}
|
||||
#endif
|
||||
|
||||
if (options->has_start_address) {
|
||||
if (options->start_address) {
|
||||
xpc_dictionary_set_string(if_desc,
|
||||
vmnet_start_address_key,
|
||||
options->start_address);
|
||||
|
@ -31,12 +31,12 @@ static bool validate_options(const Netdev *netdev, Error **errp)
|
||||
}
|
||||
#endif
|
||||
|
||||
if ((options->has_start_address ||
|
||||
options->has_end_address ||
|
||||
options->has_subnet_mask) &&
|
||||
!(options->has_start_address &&
|
||||
options->has_end_address &&
|
||||
options->has_subnet_mask)) {
|
||||
if ((options->start_address ||
|
||||
options->end_address ||
|
||||
options->subnet_mask) &&
|
||||
!(options->start_address &&
|
||||
options->end_address &&
|
||||
options->subnet_mask)) {
|
||||
error_setg(errp,
|
||||
"'start-address', 'end-address', 'subnet-mask' "
|
||||
"should be provided together"
|
||||
@ -58,13 +58,13 @@ static xpc_object_t build_if_desc(const Netdev *netdev)
|
||||
VMNET_SHARED_MODE
|
||||
);
|
||||
|
||||
if (options->has_nat66_prefix) {
|
||||
if (options->nat66_prefix) {
|
||||
xpc_dictionary_set_string(if_desc,
|
||||
vmnet_nat66_prefix_key,
|
||||
options->nat66_prefix);
|
||||
}
|
||||
|
||||
if (options->has_start_address) {
|
||||
if (options->start_address) {
|
||||
xpc_dictionary_set_string(if_desc,
|
||||
vmnet_start_address_key,
|
||||
options->start_address);
|
||||
|
13
qemu-img.c
13
qemu-img.c
@ -2915,15 +2915,15 @@ static ImageInfoList *collect_image_info_list(bool image_opts,
|
||||
image_opts = false;
|
||||
|
||||
if (chain) {
|
||||
if (info->has_full_backing_filename) {
|
||||
if (info->full_backing_filename) {
|
||||
filename = info->full_backing_filename;
|
||||
} else if (info->has_backing_filename) {
|
||||
} else if (info->backing_filename) {
|
||||
error_report("Could not determine absolute backing filename,"
|
||||
" but backing filename '%s' present",
|
||||
info->backing_filename);
|
||||
goto err;
|
||||
}
|
||||
if (info->has_backing_filename_format) {
|
||||
if (info->backing_filename_format) {
|
||||
fmt = info->backing_filename_format;
|
||||
}
|
||||
}
|
||||
@ -3046,7 +3046,7 @@ static int dump_map_entry(OutputFormat output_format, MapEntry *e,
|
||||
printf("%#-16"PRIx64"%#-16"PRIx64"%#-16"PRIx64"%s\n",
|
||||
e->start, e->length,
|
||||
e->has_offset ? e->offset : 0,
|
||||
e->has_filename ? e->filename : "");
|
||||
e->filename ?: "");
|
||||
}
|
||||
/* This format ignores the distinction between 0, ZERO and ZERO|DATA.
|
||||
* Modify the flags here to allow more coalescing.
|
||||
@ -3127,7 +3127,6 @@ static int get_block_status(BlockDriverState *bs, int64_t offset,
|
||||
.has_offset = has_offset,
|
||||
.depth = depth,
|
||||
.present = !!(ret & BDRV_BLOCK_ALLOCATED),
|
||||
.has_filename = filename,
|
||||
.filename = filename,
|
||||
};
|
||||
|
||||
@ -3143,11 +3142,11 @@ static inline bool entry_mergeable(const MapEntry *curr, const MapEntry *next)
|
||||
curr->data != next->data ||
|
||||
curr->depth != next->depth ||
|
||||
curr->present != next->present ||
|
||||
curr->has_filename != next->has_filename ||
|
||||
!curr->filename != !next->filename ||
|
||||
curr->has_offset != next->has_offset) {
|
||||
return false;
|
||||
}
|
||||
if (curr->has_filename && strcmp(curr->filename, next->filename)) {
|
||||
if (curr->filename && strcmp(curr->filename, next->filename)) {
|
||||
return false;
|
||||
}
|
||||
if (curr->has_offset && curr->offset + curr->length != next->offset) {
|
||||
|
@ -1107,9 +1107,7 @@ int main(int argc, char **argv)
|
||||
.has_writable = true,
|
||||
.writable = !readonly,
|
||||
.u.nbd = {
|
||||
.has_name = true,
|
||||
.name = g_strdup(export_name),
|
||||
.has_description = !!export_description,
|
||||
.description = g_strdup(export_description),
|
||||
.has_bitmaps = !!bitmaps,
|
||||
.bitmaps = bitmaps,
|
||||
|
@ -71,7 +71,7 @@ static void ga_wait_child(pid_t pid, int *status, Error **errp)
|
||||
g_assert(rpid == pid);
|
||||
}
|
||||
|
||||
void qmp_guest_shutdown(bool has_mode, const char *mode, Error **errp)
|
||||
void qmp_guest_shutdown(const char *mode, Error **errp)
|
||||
{
|
||||
const char *shutdown_flag;
|
||||
Error *local_err = NULL;
|
||||
@ -93,7 +93,7 @@ void qmp_guest_shutdown(bool has_mode, const char *mode, Error **errp)
|
||||
#endif
|
||||
|
||||
slog("guest-shutdown called, mode: %s", mode);
|
||||
if (!has_mode || strcmp(mode, "powerdown") == 0) {
|
||||
if (!mode || strcmp(mode, "powerdown") == 0) {
|
||||
shutdown_flag = powerdown_flag;
|
||||
} else if (strcmp(mode, "halt") == 0) {
|
||||
shutdown_flag = halt_flag;
|
||||
@ -404,14 +404,14 @@ end:
|
||||
return f;
|
||||
}
|
||||
|
||||
int64_t qmp_guest_file_open(const char *path, bool has_mode, const char *mode,
|
||||
int64_t qmp_guest_file_open(const char *path, const char *mode,
|
||||
Error **errp)
|
||||
{
|
||||
FILE *fh;
|
||||
Error *local_err = NULL;
|
||||
int64_t handle;
|
||||
|
||||
if (!has_mode) {
|
||||
if (!mode) {
|
||||
mode = "r";
|
||||
}
|
||||
slog("guest-file-open called, filepath: %s, mode: %s", path, mode);
|
||||
@ -1037,7 +1037,6 @@ static bool build_guest_fsinfo_for_ccw_dev(char const *syspath,
|
||||
return false;
|
||||
}
|
||||
|
||||
disk->has_ccw_address = true;
|
||||
disk->ccw_address = g_new0(GuestCCWAddress, 1);
|
||||
disk->ccw_address->cssid = cssid;
|
||||
disk->ccw_address->ssid = ssid;
|
||||
@ -1084,12 +1083,10 @@ static void build_guest_fsinfo_for_real_device(char const *syspath,
|
||||
devnode = udev_device_get_devnode(udevice);
|
||||
if (devnode != NULL) {
|
||||
disk->dev = g_strdup(devnode);
|
||||
disk->has_dev = true;
|
||||
}
|
||||
serial = udev_device_get_property_value(udevice, "ID_SERIAL");
|
||||
if (serial != NULL && *serial != 0) {
|
||||
disk->serial = g_strdup(serial);
|
||||
disk->has_serial = true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1108,7 +1105,7 @@ static void build_guest_fsinfo_for_real_device(char const *syspath,
|
||||
has_hwinf = false;
|
||||
}
|
||||
|
||||
if (has_hwinf || disk->has_dev || disk->has_serial) {
|
||||
if (has_hwinf || disk->dev || disk->serial) {
|
||||
QAPI_LIST_PREPEND(fs->disk, disk);
|
||||
} else {
|
||||
qapi_free_GuestDiskAddress(disk);
|
||||
@ -1411,7 +1408,6 @@ static void get_nvme_smart(GuestDiskInfo *disk)
|
||||
return;
|
||||
}
|
||||
|
||||
disk->has_smart = true;
|
||||
disk->smart = g_new0(GuestDiskSmart, 1);
|
||||
disk->smart->type = GUEST_DISK_BUS_TYPE_NVME;
|
||||
|
||||
@ -1449,7 +1445,7 @@ static void get_nvme_smart(GuestDiskInfo *disk)
|
||||
|
||||
static void get_disk_smart(GuestDiskInfo *disk)
|
||||
{
|
||||
if (disk->has_address
|
||||
if (disk->address
|
||||
&& (disk->address->bus_type == GUEST_DISK_BUS_TYPE_NVME)) {
|
||||
get_nvme_smart(disk);
|
||||
}
|
||||
@ -1502,7 +1498,6 @@ GuestDiskInfoList *qmp_guest_get_disks(Error **errp)
|
||||
disk->name = dev_name;
|
||||
disk->partition = false;
|
||||
disk->alias = get_alias_for_syspath(disk_dir);
|
||||
disk->has_alias = (disk->alias != NULL);
|
||||
QAPI_LIST_PREPEND(ret, disk);
|
||||
|
||||
/* Get address for non-virtual devices */
|
||||
@ -1522,8 +1517,6 @@ GuestDiskInfoList *qmp_guest_get_disks(Error **errp)
|
||||
error_get_pretty(local_err));
|
||||
error_free(local_err);
|
||||
local_err = NULL;
|
||||
} else if (disk->address != NULL) {
|
||||
disk->has_address = true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1641,7 +1634,6 @@ qmp_guest_fstrim(bool has_minimum, int64_t minimum, Error **errp)
|
||||
if (fd == -1) {
|
||||
result->error = g_strdup_printf("failed to open: %s",
|
||||
strerror(errno));
|
||||
result->has_error = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -1656,7 +1648,6 @@ qmp_guest_fstrim(bool has_minimum, int64_t minimum, Error **errp)
|
||||
r.minlen = has_minimum ? minimum : 0;
|
||||
ret = ioctl(fd, FITRIM, &r);
|
||||
if (ret == -1) {
|
||||
result->has_error = true;
|
||||
if (errno == ENOTTY || errno == EOPNOTSUPP) {
|
||||
result->error = g_strdup("trim not supported");
|
||||
} else {
|
||||
@ -2967,7 +2958,7 @@ GuestNetworkInterfaceList *qmp_guest_network_get_interfaces(Error **errp)
|
||||
QAPI_LIST_APPEND(tail, info);
|
||||
}
|
||||
|
||||
if (!info->has_hardware_address) {
|
||||
if (!info->hardware_address) {
|
||||
if (!guest_get_hw_addr(ifa, mac_addr, &obtained, errp)) {
|
||||
goto error;
|
||||
}
|
||||
@ -2977,7 +2968,6 @@ GuestNetworkInterfaceList *qmp_guest_network_get_interfaces(Error **errp)
|
||||
(int) mac_addr[0], (int) mac_addr[1],
|
||||
(int) mac_addr[2], (int) mac_addr[3],
|
||||
(int) mac_addr[4], (int) mac_addr[5]);
|
||||
info->has_hardware_address = true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -3037,14 +3027,12 @@ GuestNetworkInterfaceList *qmp_guest_network_get_interfaces(Error **errp)
|
||||
|
||||
info->has_ip_addresses = true;
|
||||
|
||||
if (!info->has_statistics) {
|
||||
if (!info->statistics) {
|
||||
interface_stat = g_malloc0(sizeof(*interface_stat));
|
||||
if (guest_get_network_stats(info->name, interface_stat) == -1) {
|
||||
info->has_statistics = false;
|
||||
g_free(interface_stat);
|
||||
} else {
|
||||
info->statistics = interface_stat;
|
||||
info->has_statistics = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -3351,11 +3339,8 @@ GuestOSInfo *qmp_guest_get_osinfo(Error **errp)
|
||||
if (uname(&kinfo) != 0) {
|
||||
error_setg_errno(errp, errno, "uname failed");
|
||||
} else {
|
||||
info->has_kernel_version = true;
|
||||
info->kernel_version = g_strdup(kinfo.version);
|
||||
info->has_kernel_release = true;
|
||||
info->kernel_release = g_strdup(kinfo.release);
|
||||
info->has_machine = true;
|
||||
info->machine = g_strdup(kinfo.machine);
|
||||
}
|
||||
|
||||
@ -3375,7 +3360,6 @@ GuestOSInfo *qmp_guest_get_osinfo(Error **errp)
|
||||
value = g_key_file_get_value(osrelease, "os-release", osfield, NULL); \
|
||||
if (value != NULL) { \
|
||||
ga_osrelease_replace_special(value); \
|
||||
info->has_ ## field = true; \
|
||||
info->field = value; \
|
||||
} \
|
||||
} while (0)
|
||||
|
@ -193,8 +193,7 @@ static void handle_set_nonblocking(HANDLE fh)
|
||||
SetNamedPipeHandleState(fh, &pipe_state, NULL, NULL);
|
||||
}
|
||||
|
||||
int64_t qmp_guest_file_open(const char *path, bool has_mode,
|
||||
const char *mode, Error **errp)
|
||||
int64_t qmp_guest_file_open(const char *path, const char *mode, Error **errp)
|
||||
{
|
||||
int64_t fd = -1;
|
||||
HANDLE fh;
|
||||
@ -206,7 +205,7 @@ int64_t qmp_guest_file_open(const char *path, bool has_mode,
|
||||
GError *gerr = NULL;
|
||||
wchar_t *w_path = NULL;
|
||||
|
||||
if (!has_mode) {
|
||||
if (!mode) {
|
||||
mode = "r";
|
||||
}
|
||||
slog("guest-file-open called, filepath: %s, mode: %s", path, mode);
|
||||
@ -317,14 +316,14 @@ static void execute_async(DWORD WINAPI (*func)(LPVOID), LPVOID opaque,
|
||||
}
|
||||
}
|
||||
|
||||
void qmp_guest_shutdown(bool has_mode, const char *mode, Error **errp)
|
||||
void qmp_guest_shutdown(const char *mode, Error **errp)
|
||||
{
|
||||
Error *local_err = NULL;
|
||||
UINT shutdown_flag = EWX_FORCE;
|
||||
|
||||
slog("guest-shutdown called, mode: %s", mode);
|
||||
|
||||
if (!has_mode || strcmp(mode, "powerdown") == 0) {
|
||||
if (!mode || strcmp(mode, "powerdown") == 0) {
|
||||
shutdown_flag |= EWX_POWEROFF;
|
||||
} else if (strcmp(mode, "halt") == 0) {
|
||||
shutdown_flag |= EWX_SHUTDOWN;
|
||||
@ -833,7 +832,6 @@ static void get_disk_properties(HANDLE vol_h, GuestDiskAddress *disk,
|
||||
g_debug("serial number \"%s\"", serial);
|
||||
if (*serial != 0) {
|
||||
disk->serial = g_strndup(serial, len);
|
||||
disk->has_serial = true;
|
||||
}
|
||||
}
|
||||
out_free:
|
||||
@ -951,7 +949,6 @@ static GuestDiskAddressList *build_guest_disk_info(char *guid, Error **errp)
|
||||
/* Possibly CD-ROM or a shared drive. Try to pass the volume */
|
||||
g_debug("volume not on disk");
|
||||
disk = g_new0(GuestDiskAddress, 1);
|
||||
disk->has_dev = true;
|
||||
disk->dev = g_strdup(name);
|
||||
get_single_disk_info(0xffffffff, disk, &local_err);
|
||||
if (local_err) {
|
||||
@ -983,7 +980,6 @@ static GuestDiskAddressList *build_guest_disk_info(char *guid, Error **errp)
|
||||
* See also Naming Files, Paths and Namespaces:
|
||||
* https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file#win32-device-namespaces
|
||||
*/
|
||||
disk->has_dev = true;
|
||||
disk->dev = g_strdup_printf("\\\\.\\PhysicalDrive%lu",
|
||||
extents->Extents[i].DiskNumber);
|
||||
|
||||
@ -1078,7 +1074,6 @@ GuestDiskInfoList *qmp_guest_get_disks(Error **errp)
|
||||
|
||||
g_debug(" number: %lu", sdn.DeviceNumber);
|
||||
address = g_new0(GuestDiskAddress, 1);
|
||||
address->has_dev = true;
|
||||
address->dev = g_strdup(disk->name);
|
||||
get_single_disk_info(sdn.DeviceNumber, address, &local_err);
|
||||
if (local_err) {
|
||||
@ -1089,7 +1084,6 @@ GuestDiskInfoList *qmp_guest_get_disks(Error **errp)
|
||||
address = NULL;
|
||||
} else {
|
||||
disk->address = address;
|
||||
disk->has_address = true;
|
||||
}
|
||||
|
||||
QAPI_LIST_PREPEND(ret, disk);
|
||||
@ -1369,7 +1363,6 @@ qmp_guest_fstrim(bool has_minimum, int64_t minimum, Error **errp)
|
||||
g_free(uc_path);
|
||||
|
||||
if (!path) {
|
||||
res->has_error = true;
|
||||
res->error = g_strdup(gerr->message);
|
||||
g_error_free(gerr);
|
||||
break;
|
||||
@ -1387,7 +1380,6 @@ qmp_guest_fstrim(bool has_minimum, int64_t minimum, Error **errp)
|
||||
if (!g_spawn_sync(NULL, argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL,
|
||||
&out /* stdout */, NULL /* stdin */,
|
||||
NULL, &gerr)) {
|
||||
res->has_error = true;
|
||||
res->error = g_strdup(gerr->message);
|
||||
g_error_free(gerr);
|
||||
} else {
|
||||
@ -1403,7 +1395,6 @@ qmp_guest_fstrim(bool has_minimum, int64_t minimum, Error **errp)
|
||||
if (g_strstr_len(lines[i], -1, "(0x") == NULL) {
|
||||
continue;
|
||||
}
|
||||
res->has_error = true;
|
||||
res->error = g_strdup(lines[i]);
|
||||
break;
|
||||
}
|
||||
@ -1683,8 +1674,6 @@ GuestNetworkInterfaceList *qmp_guest_network_get_interfaces(Error **errp)
|
||||
(int) mac_addr[0], (int) mac_addr[1],
|
||||
(int) mac_addr[2], (int) mac_addr[3],
|
||||
(int) mac_addr[4], (int) mac_addr[5]);
|
||||
|
||||
info->has_hardware_address = true;
|
||||
}
|
||||
|
||||
head_addr = NULL;
|
||||
@ -1713,15 +1702,13 @@ GuestNetworkInterfaceList *qmp_guest_network_get_interfaces(Error **errp)
|
||||
info->has_ip_addresses = true;
|
||||
info->ip_addresses = head_addr;
|
||||
}
|
||||
if (!info->has_statistics) {
|
||||
if (!info->statistics) {
|
||||
interface_stat = g_malloc0(sizeof(*interface_stat));
|
||||
if (guest_get_network_stats(addr->AdapterName,
|
||||
interface_stat) == -1) {
|
||||
info->has_statistics = false;
|
||||
if (guest_get_network_stats(addr->AdapterName, interface_stat)
|
||||
== -1) {
|
||||
g_free(interface_stat);
|
||||
} else {
|
||||
info->statistics = interface_stat;
|
||||
info->has_statistics = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2113,7 +2100,6 @@ GuestUserList *qmp_guest_get_users(Error **errp)
|
||||
|
||||
user->user = g_strdup(info->UserName);
|
||||
user->domain = g_strdup(info->Domain);
|
||||
user->has_domain = true;
|
||||
|
||||
user->login_time = login_time;
|
||||
|
||||
@ -2332,29 +2318,19 @@ GuestOSInfo *qmp_guest_get_osinfo(Error **errp)
|
||||
|
||||
info = g_new0(GuestOSInfo, 1);
|
||||
|
||||
info->has_kernel_version = true;
|
||||
info->kernel_version = g_strdup_printf("%lu.%lu",
|
||||
os_version.dwMajorVersion,
|
||||
os_version.dwMinorVersion);
|
||||
info->has_kernel_release = true;
|
||||
info->kernel_release = g_strdup_printf("%lu",
|
||||
os_version.dwBuildNumber);
|
||||
info->has_machine = true;
|
||||
info->machine = ga_get_current_arch();
|
||||
|
||||
info->has_id = true;
|
||||
info->id = g_strdup("mswindows");
|
||||
info->has_name = true;
|
||||
info->name = g_strdup("Microsoft Windows");
|
||||
info->has_pretty_name = true;
|
||||
info->pretty_name = product_name;
|
||||
info->has_version = true;
|
||||
info->version = ga_get_win_name(&os_version, false);
|
||||
info->has_version_id = true;
|
||||
info->version_id = ga_get_win_name(&os_version, true);
|
||||
info->has_variant = true;
|
||||
info->variant = g_strdup(server ? "server" : "client");
|
||||
info->has_variant_id = true;
|
||||
info->variant_id = g_strdup(server ? "server" : "client");
|
||||
|
||||
return info;
|
||||
@ -2478,7 +2454,6 @@ GuestDeviceInfoList *qmp_guest_get_devices(Error **errp)
|
||||
device_id = g_match_info_fetch(match_info, 2);
|
||||
|
||||
device->id = g_new0(GuestDeviceId, 1);
|
||||
device->has_id = true;
|
||||
device->id->type = GUEST_DEVICE_TYPE_PCI;
|
||||
id = &device->id->u.pci;
|
||||
id->vendor_id = g_ascii_strtoull(vendor_id, NULL, 16);
|
||||
@ -2502,7 +2477,6 @@ GuestDeviceInfoList *qmp_guest_get_devices(Error **errp)
|
||||
error_setg(errp, "conversion to utf8 failed (driver version)");
|
||||
return NULL;
|
||||
}
|
||||
device->has_driver_version = true;
|
||||
|
||||
date = (LPFILETIME)cm_get_property(dev_info_data.DevInst,
|
||||
&qga_DEVPKEY_Device_DriverDate, &cm_type);
|
||||
|
@ -206,14 +206,12 @@ GuestExecStatus *qmp_guest_exec_status(int64_t pid, Error **errp)
|
||||
}
|
||||
#endif
|
||||
if (gei->out.length > 0) {
|
||||
ges->has_out_data = true;
|
||||
ges->out_data = g_base64_encode(gei->out.data, gei->out.length);
|
||||
g_free(gei->out.data);
|
||||
ges->has_out_truncated = gei->out.truncated;
|
||||
}
|
||||
|
||||
if (gei->err.length > 0) {
|
||||
ges->has_err_data = true;
|
||||
ges->err_data = g_base64_encode(gei->err.data, gei->err.length);
|
||||
g_free(gei->err.data);
|
||||
ges->has_err_truncated = gei->err.truncated;
|
||||
@ -385,7 +383,7 @@ close:
|
||||
GuestExec *qmp_guest_exec(const char *path,
|
||||
bool has_arg, strList *arg,
|
||||
bool has_env, strList *env,
|
||||
bool has_input_data, const char *input_data,
|
||||
const char *input_data,
|
||||
bool has_capture_output, bool capture_output,
|
||||
Error **errp)
|
||||
{
|
||||
@ -406,7 +404,7 @@ GuestExec *qmp_guest_exec(const char *path,
|
||||
arglist.value = (char *)path;
|
||||
arglist.next = has_arg ? arg : NULL;
|
||||
|
||||
if (has_input_data) {
|
||||
if (input_data) {
|
||||
input = qbase64_decode(input_data, -1, &ninput, errp);
|
||||
if (!input) {
|
||||
return NULL;
|
||||
@ -423,7 +421,7 @@ GuestExec *qmp_guest_exec(const char *path,
|
||||
}
|
||||
|
||||
ret = g_spawn_async_with_pipes(NULL, argv, envp, flags,
|
||||
guest_exec_task_setup, NULL, &pid, has_input_data ? &in_fd : NULL,
|
||||
guest_exec_task_setup, NULL, &pid, input_data ? &in_fd : NULL,
|
||||
has_output ? &out_fd : NULL, has_output ? &err_fd : NULL, &gerr);
|
||||
if (!ret) {
|
||||
error_setg(errp, QERR_QGA_COMMAND_FAILED, gerr->message);
|
||||
@ -438,7 +436,7 @@ GuestExec *qmp_guest_exec(const char *path,
|
||||
gei->has_output = has_output;
|
||||
g_child_watch_add(pid, guest_exec_child_watch, gei);
|
||||
|
||||
if (has_input_data) {
|
||||
if (input_data) {
|
||||
gei->in.data = g_steal_pointer(&input);
|
||||
gei->in.size = ninput;
|
||||
#ifdef G_OS_WIN32
|
||||
@ -547,7 +545,6 @@ GuestTimezone *qmp_guest_get_timezone(Error **errp)
|
||||
info->offset = g_time_zone_get_offset(tz, intv);
|
||||
name = g_time_zone_get_abbreviation(tz, intv);
|
||||
if (name != NULL) {
|
||||
info->has_zone = true;
|
||||
info->zone = g_strdup(name);
|
||||
}
|
||||
g_time_zone_unref(tz);
|
||||
|
@ -99,15 +99,13 @@ static void qom_list_types_tramp(ObjectClass *klass, void *data)
|
||||
info->name = g_strdup(object_class_get_name(klass));
|
||||
info->has_abstract = info->abstract = object_class_is_abstract(klass);
|
||||
if (parent) {
|
||||
info->has_parent = true;
|
||||
info->parent = g_strdup(object_class_get_name(parent));
|
||||
}
|
||||
|
||||
QAPI_LIST_PREPEND(*pret, info);
|
||||
}
|
||||
|
||||
ObjectTypeInfoList *qmp_qom_list_types(bool has_implements,
|
||||
const char *implements,
|
||||
ObjectTypeInfoList *qmp_qom_list_types(const char *implements,
|
||||
bool has_abstract,
|
||||
bool abstract,
|
||||
Error **errp)
|
||||
@ -168,10 +166,8 @@ ObjectPropertyInfoList *qmp_device_list_properties(const char *typename,
|
||||
info = g_new0(ObjectPropertyInfo, 1);
|
||||
info->name = g_strdup(prop->name);
|
||||
info->type = g_strdup(prop->type);
|
||||
info->has_description = !!prop->description;
|
||||
info->description = g_strdup(prop->description);
|
||||
info->default_value = qobject_ref(prop->defval);
|
||||
info->has_default_value = !!info->default_value;
|
||||
|
||||
QAPI_LIST_PREPEND(prop_list, info);
|
||||
}
|
||||
@ -215,7 +211,6 @@ ObjectPropertyInfoList *qmp_qom_list_properties(const char *typename,
|
||||
info = g_malloc0(sizeof(*info));
|
||||
info->name = g_strdup(prop->name);
|
||||
info->type = g_strdup(prop->type);
|
||||
info->has_description = !!prop->description;
|
||||
info->description = g_strdup(prop->description);
|
||||
|
||||
QAPI_LIST_PREPEND(prop_list, info);
|
||||
|
@ -50,7 +50,6 @@ ReplayInfo *qmp_query_replay(Error **errp)
|
||||
retval->mode = replay_mode;
|
||||
if (replay_get_filename()) {
|
||||
retval->filename = g_strdup(replay_get_filename());
|
||||
retval->has_filename = true;
|
||||
}
|
||||
retval->icount = replay_get_current_icount();
|
||||
return retval;
|
||||
|
@ -64,7 +64,7 @@ def gen_call(name: str,
|
||||
elif arg_type:
|
||||
assert not arg_type.variants
|
||||
for memb in arg_type.members:
|
||||
if memb.optional:
|
||||
if memb.need_has():
|
||||
argstr += 'arg.has_%s, ' % c_name(memb.name)
|
||||
argstr += 'arg.%s, ' % c_name(memb.name)
|
||||
|
||||
@ -83,7 +83,7 @@ def gen_call(name: str,
|
||||
|
||||
trace_qmp_enter_%(name)s(req_json->str);
|
||||
}
|
||||
''',
|
||||
''',
|
||||
upper=upper, name=name)
|
||||
|
||||
ret += mcgen('''
|
||||
@ -124,13 +124,13 @@ def gen_call(name: str,
|
||||
|
||||
trace_qmp_exit_%(name)s(ret_json->str, true);
|
||||
}
|
||||
''',
|
||||
''',
|
||||
upper=upper, name=name)
|
||||
else:
|
||||
ret += mcgen('''
|
||||
|
||||
trace_qmp_exit_%(name)s("{}", true);
|
||||
''',
|
||||
''',
|
||||
name=name)
|
||||
|
||||
return ret
|
||||
@ -316,7 +316,6 @@ class QAPISchemaGenCommandVisitor(QAPISchemaModularCVisitor):
|
||||
#include "qapi/error.h"
|
||||
#include "%(visit)s.h"
|
||||
#include "%(commands)s.h"
|
||||
|
||||
''',
|
||||
commands=commands, visit=visit))
|
||||
|
||||
|
@ -60,7 +60,7 @@ def gen_param_var(typ: QAPISchemaObjectType) -> str:
|
||||
for memb in typ.members:
|
||||
ret += sep
|
||||
sep = ', '
|
||||
if memb.optional:
|
||||
if memb.need_has():
|
||||
ret += 'has_' + c_name(memb.name) + sep
|
||||
if memb.type.name == 'str':
|
||||
# Cast away const added in build_params()
|
||||
@ -196,7 +196,6 @@ class QAPISchemaGenEventVisitor(QAPISchemaModularCVisitor):
|
||||
#include "qapi/error.h"
|
||||
#include "qapi/qmp/qdict.h"
|
||||
#include "qapi/qmp-event.h"
|
||||
|
||||
''',
|
||||
events=events, visit=visit,
|
||||
prefix=self._prefix))
|
||||
|
@ -121,7 +121,7 @@ def build_params(arg_type: Optional[QAPISchemaObjectType],
|
||||
for memb in arg_type.members:
|
||||
ret += sep
|
||||
sep = ', '
|
||||
if memb.optional:
|
||||
if memb.need_has():
|
||||
ret += 'bool has_%s, ' % c_name(memb.name)
|
||||
ret += '%s %s' % (memb.type.c_param_type(),
|
||||
c_name(memb.name))
|
||||
|
@ -253,6 +253,11 @@ class QAPISchemaType(QAPISchemaEntity):
|
||||
return None
|
||||
return self.name
|
||||
|
||||
def need_has_if_optional(self):
|
||||
# When FOO is a pointer, has_FOO == !!FOO, i.e. has_FOO is redundant.
|
||||
# Except for arrays; see QAPISchemaArrayType.need_has_if_optional().
|
||||
return not self.c_type().endswith(POINTER_SUFFIX)
|
||||
|
||||
def check(self, schema):
|
||||
QAPISchemaEntity.check(self, schema)
|
||||
for feat in self.features:
|
||||
@ -352,6 +357,11 @@ class QAPISchemaArrayType(QAPISchemaType):
|
||||
self._element_type_name = element_type
|
||||
self.element_type = None
|
||||
|
||||
def need_has_if_optional(self):
|
||||
# When FOO is an array, we still need has_FOO to distinguish
|
||||
# absent (!has_FOO) from present and empty (has_FOO && !FOO).
|
||||
return True
|
||||
|
||||
def check(self, schema):
|
||||
super().check(schema)
|
||||
self.element_type = schema.resolve_type(
|
||||
@ -745,6 +755,10 @@ class QAPISchemaObjectTypeMember(QAPISchemaMember):
|
||||
self.optional = optional
|
||||
self.features = features or []
|
||||
|
||||
def need_has(self):
|
||||
assert self.type
|
||||
return self.optional and self.type.need_has_if_optional()
|
||||
|
||||
def check(self, schema):
|
||||
assert self.defined_in
|
||||
self.type = schema.resolve_type(self._type_name, self.info,
|
||||
|
@ -142,7 +142,7 @@ def gen_struct_members(members: List[QAPISchemaObjectTypeMember]) -> str:
|
||||
ret = ''
|
||||
for memb in members:
|
||||
ret += memb.ifcond.gen_if()
|
||||
if memb.optional:
|
||||
if memb.need_has():
|
||||
ret += mcgen('''
|
||||
bool has_%(c_name)s;
|
||||
''',
|
||||
|
@ -71,6 +71,16 @@ bool visit_type_%(c_name)s_members(Visitor *v, %(c_name)s *obj, Error **errp)
|
||||
''',
|
||||
c_name=c_name(name))
|
||||
|
||||
sep = ''
|
||||
for memb in members:
|
||||
if memb.optional and not memb.need_has():
|
||||
ret += mcgen('''
|
||||
bool has_%(c_name)s = !!obj->%(c_name)s;
|
||||
''',
|
||||
c_name=c_name(memb.name))
|
||||
sep = '\n'
|
||||
ret += sep
|
||||
|
||||
if base:
|
||||
ret += mcgen('''
|
||||
if (!visit_type_%(c_type)s_members(v, (%(c_type)s *)obj, errp)) {
|
||||
@ -82,10 +92,13 @@ bool visit_type_%(c_name)s_members(Visitor *v, %(c_name)s *obj, Error **errp)
|
||||
for memb in members:
|
||||
ret += memb.ifcond.gen_if()
|
||||
if memb.optional:
|
||||
has = 'has_' + c_name(memb.name)
|
||||
if memb.need_has():
|
||||
has = 'obj->' + has
|
||||
ret += mcgen('''
|
||||
if (visit_optional(v, "%(name)s", &obj->has_%(c_name)s)) {
|
||||
if (visit_optional(v, "%(name)s", &%(has)s)) {
|
||||
''',
|
||||
name=memb.name, c_name=c_name(memb.name))
|
||||
name=memb.name, has=has)
|
||||
indent.increase()
|
||||
special_features = gen_special_features(memb.features)
|
||||
if special_features != '0':
|
||||
|
@ -484,18 +484,15 @@ void qemu_system_guest_panicked(GuestPanicInformation *info)
|
||||
*/
|
||||
if (panic_action == PANIC_ACTION_PAUSE
|
||||
|| (panic_action == PANIC_ACTION_SHUTDOWN && shutdown_action == SHUTDOWN_ACTION_PAUSE)) {
|
||||
qapi_event_send_guest_panicked(GUEST_PANIC_ACTION_PAUSE,
|
||||
!!info, info);
|
||||
qapi_event_send_guest_panicked(GUEST_PANIC_ACTION_PAUSE, info);
|
||||
vm_stop(RUN_STATE_GUEST_PANICKED);
|
||||
} else if (panic_action == PANIC_ACTION_SHUTDOWN ||
|
||||
panic_action == PANIC_ACTION_EXIT_FAILURE) {
|
||||
qapi_event_send_guest_panicked(GUEST_PANIC_ACTION_POWEROFF,
|
||||
!!info, info);
|
||||
qapi_event_send_guest_panicked(GUEST_PANIC_ACTION_POWEROFF, info);
|
||||
vm_stop(RUN_STATE_GUEST_PANICKED);
|
||||
qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_PANIC);
|
||||
} else {
|
||||
qapi_event_send_guest_panicked(GUEST_PANIC_ACTION_RUN,
|
||||
!!info, info);
|
||||
qapi_event_send_guest_panicked(GUEST_PANIC_ACTION_RUN, info);
|
||||
}
|
||||
|
||||
if (info) {
|
||||
@ -522,13 +519,8 @@ void qemu_system_guest_panicked(GuestPanicInformation *info)
|
||||
void qemu_system_guest_crashloaded(GuestPanicInformation *info)
|
||||
{
|
||||
qemu_log_mask(LOG_GUEST_ERROR, "Guest crash loaded");
|
||||
|
||||
qapi_event_send_guest_crashloaded(GUEST_PANIC_ACTION_RUN,
|
||||
!!info, info);
|
||||
|
||||
if (info) {
|
||||
qapi_free_GuestPanicInformation(info);
|
||||
}
|
||||
qapi_event_send_guest_crashloaded(GUEST_PANIC_ACTION_RUN, info);
|
||||
qapi_free_GuestPanicInformation(info);
|
||||
}
|
||||
|
||||
void qemu_system_reset_request(ShutdownCause reason)
|
||||
|
@ -611,7 +611,7 @@ static int parse_add_fd(void *opaque, QemuOpts *opts, Error **errp)
|
||||
}
|
||||
|
||||
/* add the duplicate fd, and optionally the opaque string, to the fd set */
|
||||
fdinfo = monitor_fdset_add_fd(dupfd, true, fdset_id, !!fd_opaque, fd_opaque,
|
||||
fdinfo = monitor_fdset_add_fd(dupfd, true, fdset_id, fd_opaque,
|
||||
&error_abort);
|
||||
g_free(fdinfo);
|
||||
|
||||
|
@ -15,15 +15,13 @@
|
||||
#include "qemu/osdep.h"
|
||||
#include "qapi/qapi-events-qdev.h"
|
||||
|
||||
void qapi_event_send_device_deleted(bool has_device,
|
||||
const char *device,
|
||||
void qapi_event_send_device_deleted(const char *device,
|
||||
const char *path)
|
||||
{
|
||||
/* Nothing to do. */
|
||||
}
|
||||
|
||||
void qapi_event_send_device_unplug_guest_error(bool has_device,
|
||||
const char *device,
|
||||
void qapi_event_send_device_unplug_guest_error(const char *device,
|
||||
const char *path)
|
||||
{
|
||||
/* Nothing to do. */
|
||||
|
@ -221,7 +221,6 @@ CpuModelExpansionInfo *qmp_query_cpu_model_expansion(CpuModelExpansionType type,
|
||||
qobject_unref(qdict_out);
|
||||
} else {
|
||||
expansion_info->model->props = QOBJECT(qdict_out);
|
||||
expansion_info->model->has_props = true;
|
||||
}
|
||||
|
||||
object_unref(obj);
|
||||
|
@ -187,10 +187,8 @@ qmp_query_cpu_model_expansion(CpuModelExpansionType type,
|
||||
QDict *props = NULL;
|
||||
const char *base_name;
|
||||
|
||||
xc = x86_cpu_from_model(model->name,
|
||||
model->has_props ?
|
||||
qobject_to(QDict, model->props) :
|
||||
NULL, &err);
|
||||
xc = x86_cpu_from_model(model->name, qobject_to(QDict, model->props),
|
||||
&err);
|
||||
if (err) {
|
||||
goto out;
|
||||
}
|
||||
@ -198,7 +196,6 @@ qmp_query_cpu_model_expansion(CpuModelExpansionType type,
|
||||
props = qdict_new();
|
||||
ret->model = g_new0(CpuModelInfo, 1);
|
||||
ret->model->props = QOBJECT(props);
|
||||
ret->model->has_props = true;
|
||||
|
||||
switch (type) {
|
||||
case CPU_MODEL_EXPANSION_TYPE_STATIC:
|
||||
|
@ -4901,7 +4901,6 @@ static void x86_cpu_definition_entry(gpointer data, gpointer user_data)
|
||||
*/
|
||||
if (default_cpu_version != CPU_VERSION_LEGACY) {
|
||||
info->alias_of = x86_cpu_class_get_alias_of(cc);
|
||||
info->has_alias_of = !!info->alias_of;
|
||||
}
|
||||
|
||||
QAPI_LIST_PREPEND(*cpu_list, info);
|
||||
|
@ -210,7 +210,6 @@ static void cpu_info_from_model(CpuModelInfo *info, const S390CPUModel *model,
|
||||
qobject_unref(qdict);
|
||||
} else {
|
||||
info->props = QOBJECT(qdict);
|
||||
info->has_props = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -50,8 +50,7 @@ static void qos_set_machines_devices_available(void)
|
||||
machines_apply_to_node(mach_info);
|
||||
qapi_free_MachineInfoList(mach_info);
|
||||
|
||||
type_info = qmp_qom_list_types(true, "device", true, true,
|
||||
&error_abort);
|
||||
type_info = qmp_qom_list_types("device", true, true, &error_abort);
|
||||
types_apply_to_node(type_info);
|
||||
qapi_free_ObjectTypeInfoList(type_info);
|
||||
}
|
||||
|
@ -174,7 +174,7 @@ static bool object_type_has_mandatory_members(SchemaInfo *type)
|
||||
g_assert(type->meta_type == SCHEMA_META_TYPE_OBJECT);
|
||||
|
||||
for (tail = type->u.object.members; tail; tail = tail->next) {
|
||||
if (!tail->value->has_q_default) {
|
||||
if (!tail->value->q_default) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -1212,7 +1212,6 @@ static void char_file_fifo_test(void)
|
||||
char *fifo = g_build_filename(tmp_path, "fifo", NULL);
|
||||
char *out = g_build_filename(tmp_path, "out", NULL);
|
||||
ChardevFile file = { .in = fifo,
|
||||
.has_in = true,
|
||||
.out = out };
|
||||
ChardevBackend backend = { .type = CHARDEV_BACKEND_KIND_FILE,
|
||||
.u.file.data = &file };
|
||||
|
@ -41,7 +41,6 @@
|
||||
static QCryptoBlockCreateOptions qcow_create_opts = {
|
||||
.format = Q_CRYPTO_BLOCK_FORMAT_QCOW,
|
||||
.u.qcow = {
|
||||
.has_key_secret = true,
|
||||
.key_secret = (char *)"sec0",
|
||||
},
|
||||
};
|
||||
@ -49,7 +48,6 @@ static QCryptoBlockCreateOptions qcow_create_opts = {
|
||||
static QCryptoBlockOpenOptions qcow_open_opts = {
|
||||
.format = Q_CRYPTO_BLOCK_FORMAT_QCOW,
|
||||
.u.qcow = {
|
||||
.has_key_secret = true,
|
||||
.key_secret = (char *)"sec0",
|
||||
},
|
||||
};
|
||||
@ -59,7 +57,6 @@ static QCryptoBlockOpenOptions qcow_open_opts = {
|
||||
static QCryptoBlockOpenOptions luks_open_opts = {
|
||||
.format = Q_CRYPTO_BLOCK_FORMAT_LUKS,
|
||||
.u.luks = {
|
||||
.has_key_secret = true,
|
||||
.key_secret = (char *)"sec0",
|
||||
},
|
||||
};
|
||||
@ -69,7 +66,6 @@ static QCryptoBlockOpenOptions luks_open_opts = {
|
||||
static QCryptoBlockCreateOptions luks_create_opts_default = {
|
||||
.format = Q_CRYPTO_BLOCK_FORMAT_LUKS,
|
||||
.u.luks = {
|
||||
.has_key_secret = true,
|
||||
.key_secret = (char *)"sec0",
|
||||
},
|
||||
};
|
||||
@ -79,7 +75,6 @@ static QCryptoBlockCreateOptions luks_create_opts_default = {
|
||||
static QCryptoBlockCreateOptions luks_create_opts_aes256_cbc_plain64 = {
|
||||
.format = Q_CRYPTO_BLOCK_FORMAT_LUKS,
|
||||
.u.luks = {
|
||||
.has_key_secret = true,
|
||||
.key_secret = (char *)"sec0",
|
||||
.has_cipher_alg = true,
|
||||
.cipher_alg = QCRYPTO_CIPHER_ALG_AES_256,
|
||||
@ -94,7 +89,6 @@ static QCryptoBlockCreateOptions luks_create_opts_aes256_cbc_plain64 = {
|
||||
static QCryptoBlockCreateOptions luks_create_opts_aes256_cbc_essiv = {
|
||||
.format = Q_CRYPTO_BLOCK_FORMAT_LUKS,
|
||||
.u.luks = {
|
||||
.has_key_secret = true,
|
||||
.key_secret = (char *)"sec0",
|
||||
.has_cipher_alg = true,
|
||||
.cipher_alg = QCRYPTO_CIPHER_ALG_AES_256,
|
||||
|
@ -43,15 +43,15 @@ void qmp_user_def_cmd1(UserDefOne * ud1, Error **errp)
|
||||
{
|
||||
}
|
||||
|
||||
FeatureStruct1 *qmp_test_features0(bool has_fs0, FeatureStruct0 *fs0,
|
||||
bool has_fs1, FeatureStruct1 *fs1,
|
||||
bool has_fs2, FeatureStruct2 *fs2,
|
||||
bool has_fs3, FeatureStruct3 *fs3,
|
||||
bool has_fs4, FeatureStruct4 *fs4,
|
||||
bool has_cfs1, CondFeatureStruct1 *cfs1,
|
||||
bool has_cfs2, CondFeatureStruct2 *cfs2,
|
||||
bool has_cfs3, CondFeatureStruct3 *cfs3,
|
||||
bool has_cfs4, CondFeatureStruct4 *cfs4,
|
||||
FeatureStruct1 *qmp_test_features0(FeatureStruct0 *fs0,
|
||||
FeatureStruct1 *fs1,
|
||||
FeatureStruct2 *fs2,
|
||||
FeatureStruct3 *fs3,
|
||||
FeatureStruct4 *fs4,
|
||||
CondFeatureStruct1 *cfs1,
|
||||
CondFeatureStruct2 *cfs2,
|
||||
CondFeatureStruct3 *cfs3,
|
||||
CondFeatureStruct4 *cfs4,
|
||||
Error **errp)
|
||||
{
|
||||
return g_new0(FeatureStruct1, 1);
|
||||
@ -77,8 +77,7 @@ void qmp_test_command_cond_features3(Error **errp)
|
||||
{
|
||||
}
|
||||
|
||||
UserDefTwo *qmp_user_def_cmd2(UserDefOne *ud1a,
|
||||
bool has_udb1, UserDefOne *ud1b,
|
||||
UserDefTwo *qmp_user_def_cmd2(UserDefOne *ud1a, UserDefOne *ud1b,
|
||||
Error **errp)
|
||||
{
|
||||
UserDefTwo *ret;
|
||||
@ -87,8 +86,8 @@ UserDefTwo *qmp_user_def_cmd2(UserDefOne *ud1a,
|
||||
|
||||
ud1c->string = strdup(ud1a->string);
|
||||
ud1c->integer = ud1a->integer;
|
||||
ud1d->string = strdup(has_udb1 ? ud1b->string : "blah0");
|
||||
ud1d->integer = has_udb1 ? ud1b->integer : 0;
|
||||
ud1d->string = strdup(ud1b ? ud1b->string : "blah0");
|
||||
ud1d->integer = ud1b ? ud1b->integer : 0;
|
||||
|
||||
ret = g_new0(UserDefTwo, 1);
|
||||
ret->string0 = strdup("blah1");
|
||||
@ -98,7 +97,6 @@ UserDefTwo *qmp_user_def_cmd2(UserDefOne *ud1a,
|
||||
ret->dict1->dict2->userdef = ud1c;
|
||||
ret->dict1->dict2->string = strdup("blah3");
|
||||
ret->dict1->dict3 = g_new0(UserDefTwoDictDict, 1);
|
||||
ret->dict1->has_dict3 = true;
|
||||
ret->dict1->dict3->userdef = ud1d;
|
||||
ret->dict1->dict3->string = strdup("blah4");
|
||||
|
||||
|
@ -109,7 +109,7 @@ static void test_event_c(TestEventData *data,
|
||||
data->expect = qdict_from_jsonf_nofail(
|
||||
"{ 'event': 'EVENT_C', 'data': {"
|
||||
" 'a': 1, 'b': { 'integer': 2, 'string': 'test1' }, 'c': 'test2' } }");
|
||||
qapi_event_send_event_c(true, 1, true, &b, "test2");
|
||||
qapi_event_send_event_c(true, 1, &b, "test2");
|
||||
g_assert(data->emitted);
|
||||
qobject_unref(data->expect);
|
||||
}
|
||||
@ -135,7 +135,7 @@ static void test_event_d(TestEventData *data,
|
||||
" 'struct1': { 'integer': 2, 'string': 'test1', 'enum1': 'value1' },"
|
||||
" 'string': 'test2', 'enum2': 'value2' },"
|
||||
" 'b': 'test3', 'enum3': 'value3' } }");
|
||||
qapi_event_send_event_d(&a, "test3", false, NULL, true, ENUM_ONE_VALUE3);
|
||||
qapi_event_send_event_d(&a, "test3", NULL, true, ENUM_ONE_VALUE3);
|
||||
g_assert(data->emitted);
|
||||
qobject_unref(data->expect);
|
||||
}
|
||||
|
@ -431,7 +431,7 @@ static void test_visitor_in_struct_nested(TestInputVisitorData *data,
|
||||
g_assert_cmpint(udp->dict1->dict2->userdef->integer, ==, 42);
|
||||
g_assert_cmpstr(udp->dict1->dict2->userdef->string, ==, "string");
|
||||
g_assert_cmpstr(udp->dict1->dict2->string, ==, "string2");
|
||||
g_assert(udp->dict1->has_dict3 == false);
|
||||
g_assert(!udp->dict1->dict3);
|
||||
}
|
||||
|
||||
static void test_visitor_in_list(TestInputVisitorData *data,
|
||||
|
@ -182,7 +182,6 @@ static void test_visitor_out_struct_nested(TestOutputVisitorData *data,
|
||||
ud2->dict1->dict2->string = g_strdup(strings[2]);
|
||||
|
||||
ud2->dict1->dict3 = g_malloc0(sizeof(*ud2->dict1->dict3));
|
||||
ud2->dict1->has_dict3 = true;
|
||||
ud2->dict1->dict3->userdef = g_new0(UserDefOne, 1);
|
||||
ud2->dict1->dict3->userdef->string = g_strdup(string);
|
||||
ud2->dict1->dict3->userdef->integer = value;
|
||||
@ -284,7 +283,6 @@ static void test_visitor_out_list_qapi_free(TestOutputVisitorData *data,
|
||||
value->dict1->dict2->userdef->string = g_strdup(string);
|
||||
value->dict1->dict2->userdef->integer = 42;
|
||||
value->dict1->dict2->string = g_strdup(string);
|
||||
value->dict1->has_dict3 = false;
|
||||
|
||||
QAPI_LIST_PREPEND(head, value);
|
||||
}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user