Error reporting patches for 2018-10-22
-----BEGIN PGP SIGNATURE----- iQIcBAABAgAGBQJbzcCHAAoJEDhwtADrkYZT3YsP/2qE4HNY/htj3IP6vNJuSaqw CLPRTz7zWmUBTE6FqSkvLsq3X2BMFFLeaIPA9EFcbyn2km6qPqBYgg9ElXXvPZBm 6hDeRIoC8FdRD0Apozd5MGC94/lE47PheDRV8V+4KrGLaaMXEPxMZ0wP4AfdS5pS 6Pt2xuF7nPu1+OWVxMk0fXadGjGLEuOQQmTh3B21J5RaynQ3gtd6h7XFC/LJyOGG LC/6GyPc0h7KU83VnvrRjH/EOpu1wENgrsvWsS0sem8op35Z+i9jU5BfCp4qFkDy gCHHUEyEeyexS+W+Tj87eBtK2gfrqQx9ovo8CIsWcUwpKbdD6AMK4FKGsDNMNHab Kg5u/M+O8nHCB7DuursF+3mqEbZHb05cfKe6JEtiq49EuORMV5hp4Ap966noSwTw UEU0NJNA1p8EdmXVudyyyYR7wpoSSmZpoenA+bJ3nthK8K0KcU4RUGk6ZEbxfJy+ 7ENl+3R2IxmxzgXv/x0tz0uFisaVW1rltTXtMte+ElQsO0qy74iHdfR7JHsmLxj9 CO/ABMVoYsWq2OJv8pWLrdKpT4v3HQLJdHhknyu0ZcJGDyICqX29ULLEhPrNEZvW rxVxAkiemlaqxlUjbrM46CDQQm+w03OCnk7aCYcV4oK+u5+o3mCag705gMPErapZ 6uOE3fAjiWw43sA31mek =kPZX -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/armbru/tags/pull-error-2018-10-22' into staging Error reporting patches for 2018-10-22 # gpg: Signature made Mon 22 Oct 2018 13:20:23 BST # gpg: using RSA key 3870B400EB918653 # gpg: Good signature from "Markus Armbruster <armbru@redhat.com>" # gpg: aka "Markus Armbruster <armbru@pond.sub.org>" # Primary key fingerprint: 354B C8B3 D7EB 2A6B 6867 4E5F 3870 B400 EB91 8653 * remotes/armbru/tags/pull-error-2018-10-22: (40 commits) error: Drop bogus "use error_setg() instead" admonitions vpc: Fail open on bad header checksum block: Clean up bdrv_img_create()'s error reporting vl: Simplify call of parse_name() vl: Fix exit status for -drive format=help blockdev: Convert drive_new() to Error vl: Assert drive_new() does not fail in default_drive() fsdev: Clean up error reporting in qemu_fsdev_add() spice: Clean up error reporting in add_channel() tpm: Clean up error reporting in tpm_init_tpmdev() numa: Clean up error reporting in parse_numa() vnc: Clean up error reporting in vnc_init_func() ui: Convert vnc_display_init(), init_keyboard_layout() to Error ui/keymaps: Fix handling of erroneous include files vl: Clean up error reporting in device_init_func() vl: Clean up error reporting in parse_fw_cfg() vl: Clean up error reporting in mon_init_func() vl: Clean up error reporting in machine_set_property() vl: Clean up error reporting in chardev_init_func() qom: Clean up error reporting in user_creatable_add_opts_foreach() ... Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
13399aad4f
9
block.c
9
block.c
@ -4697,9 +4697,9 @@ bool bdrv_op_is_blocked(BlockDriverState *bs, BlockOpType op, Error **errp)
|
||||
assert((int) op >= 0 && op < BLOCK_OP_TYPE_MAX);
|
||||
if (!QLIST_EMPTY(&bs->op_blockers[op])) {
|
||||
blocker = QLIST_FIRST(&bs->op_blockers[op]);
|
||||
error_propagate(errp, error_copy(blocker->reason));
|
||||
error_prepend(errp, "Node '%s' is busy: ",
|
||||
bdrv_get_device_or_node_name(bs));
|
||||
error_propagate_prepend(errp, error_copy(blocker->reason),
|
||||
"Node '%s' is busy: ",
|
||||
bdrv_get_device_or_node_name(bs));
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@ -4803,9 +4803,6 @@ void bdrv_img_create(const char *filename, const char *fmt,
|
||||
if (options) {
|
||||
qemu_opts_do_parse(opts, options, NULL, &local_err);
|
||||
if (local_err) {
|
||||
error_report_err(local_err);
|
||||
local_err = NULL;
|
||||
error_setg(errp, "Invalid options for file format '%s'", fmt);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
@ -1844,7 +1844,7 @@ static int iscsi_open(BlockDriverState *bs, QDict *options, int flags,
|
||||
iscsi_set_timeout(iscsi, timeout);
|
||||
#else
|
||||
if (timeout) {
|
||||
error_report("iSCSI: ignoring timeout value for libiscsi <1.15.0");
|
||||
warn_report("iSCSI: ignoring timeout value for libiscsi <1.15.0");
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -2208,8 +2208,8 @@ static void coroutine_fn qcow2_co_invalidate_cache(BlockDriverState *bs,
|
||||
qemu_co_mutex_unlock(&s->lock);
|
||||
qobject_unref(options);
|
||||
if (local_err) {
|
||||
error_propagate(errp, local_err);
|
||||
error_prepend(errp, "Could not reopen qcow2 layer: ");
|
||||
error_propagate_prepend(errp, local_err,
|
||||
"Could not reopen qcow2 layer: ");
|
||||
bs->drv = NULL;
|
||||
return;
|
||||
} else if (ret < 0) {
|
||||
|
@ -1606,8 +1606,8 @@ static void coroutine_fn bdrv_qed_co_invalidate_cache(BlockDriverState *bs,
|
||||
ret = bdrv_qed_do_open(bs, NULL, bs->open_flags, &local_err);
|
||||
qemu_co_mutex_unlock(&s->table_lock);
|
||||
if (local_err) {
|
||||
error_propagate(errp, local_err);
|
||||
error_prepend(errp, "Could not reopen qed layer: ");
|
||||
error_propagate_prepend(errp, local_err,
|
||||
"Could not reopen qed layer: ");
|
||||
return;
|
||||
} else if (ret < 0) {
|
||||
error_setg_errno(errp, -ret, "Could not reopen qed layer");
|
||||
|
@ -750,8 +750,8 @@ static int qemu_rbd_open(BlockDriverState *bs, QDict *options, int flags,
|
||||
/* Take care whenever deciding to actually deprecate; once this ability
|
||||
* is removed, we will not be able to open any images with legacy-styled
|
||||
* backing image strings. */
|
||||
error_report("RBD options encoded in the filename as keyvalue pairs "
|
||||
"is deprecated");
|
||||
warn_report("RBD options encoded in the filename as keyvalue pairs "
|
||||
"is deprecated");
|
||||
}
|
||||
|
||||
/* Remove the processed options from the QDict (the visitor processes
|
||||
|
@ -572,7 +572,7 @@ static int connect_to_sdog(BDRVSheepdogState *s, Error **errp)
|
||||
if (s->addr->type == SOCKET_ADDRESS_TYPE_INET && fd >= 0) {
|
||||
int ret = socket_set_nodelay(fd);
|
||||
if (ret < 0) {
|
||||
error_report("%s", strerror(errno));
|
||||
warn_report("can't set TCP_NODELAY: %s", strerror(errno));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -284,9 +284,11 @@ static int vpc_open(BlockDriverState *bs, QDict *options, int flags,
|
||||
|
||||
checksum = be32_to_cpu(footer->checksum);
|
||||
footer->checksum = 0;
|
||||
if (vpc_checksum(s->footer_buf, HEADER_SIZE) != checksum)
|
||||
fprintf(stderr, "block-vpc: The header checksum of '%s' is "
|
||||
"incorrect.\n", bs->filename);
|
||||
if (vpc_checksum(s->footer_buf, HEADER_SIZE) != checksum) {
|
||||
error_setg(errp, "Incorrect header checksum");
|
||||
ret = -EINVAL;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
/* Write 'checksum' back to footer, or else will leave it with zero. */
|
||||
footer->checksum = cpu_to_be32(checksum);
|
||||
|
27
blockdev.c
27
blockdev.c
@ -759,7 +759,8 @@ QemuOptsList qemu_legacy_drive_opts = {
|
||||
},
|
||||
};
|
||||
|
||||
DriveInfo *drive_new(QemuOpts *all_opts, BlockInterfaceType block_default_type)
|
||||
DriveInfo *drive_new(QemuOpts *all_opts, BlockInterfaceType block_default_type,
|
||||
Error **errp)
|
||||
{
|
||||
const char *value;
|
||||
BlockBackend *blk;
|
||||
@ -808,7 +809,7 @@ DriveInfo *drive_new(QemuOpts *all_opts, BlockInterfaceType block_default_type)
|
||||
qemu_opt_rename(all_opts, opt_renames[i].from, opt_renames[i].to,
|
||||
&local_err);
|
||||
if (local_err) {
|
||||
error_report_err(local_err);
|
||||
error_propagate(errp, local_err);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
@ -819,7 +820,7 @@ DriveInfo *drive_new(QemuOpts *all_opts, BlockInterfaceType block_default_type)
|
||||
bool writethrough;
|
||||
|
||||
if (bdrv_parse_cache_mode(value, &flags, &writethrough) != 0) {
|
||||
error_report("invalid cache option");
|
||||
error_setg(errp, "invalid cache option");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -847,7 +848,7 @@ DriveInfo *drive_new(QemuOpts *all_opts, BlockInterfaceType block_default_type)
|
||||
&error_abort);
|
||||
qemu_opts_absorb_qdict(legacy_opts, bs_opts, &local_err);
|
||||
if (local_err) {
|
||||
error_report_err(local_err);
|
||||
error_propagate(errp, local_err);
|
||||
goto fail;
|
||||
}
|
||||
|
||||
@ -860,7 +861,7 @@ DriveInfo *drive_new(QemuOpts *all_opts, BlockInterfaceType block_default_type)
|
||||
media = MEDIA_CDROM;
|
||||
read_only = true;
|
||||
} else {
|
||||
error_report("'%s' invalid media", value);
|
||||
error_setg(errp, "'%s' invalid media", value);
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
@ -885,7 +886,7 @@ DriveInfo *drive_new(QemuOpts *all_opts, BlockInterfaceType block_default_type)
|
||||
type++) {
|
||||
}
|
||||
if (type == IF_COUNT) {
|
||||
error_report("unsupported bus type '%s'", value);
|
||||
error_setg(errp, "unsupported bus type '%s'", value);
|
||||
goto fail;
|
||||
}
|
||||
} else {
|
||||
@ -902,7 +903,7 @@ DriveInfo *drive_new(QemuOpts *all_opts, BlockInterfaceType block_default_type)
|
||||
|
||||
if (index != -1) {
|
||||
if (bus_id != 0 || unit_id != -1) {
|
||||
error_report("index cannot be used with bus and unit");
|
||||
error_setg(errp, "index cannot be used with bus and unit");
|
||||
goto fail;
|
||||
}
|
||||
bus_id = drive_index_to_bus_id(type, index);
|
||||
@ -921,13 +922,13 @@ DriveInfo *drive_new(QemuOpts *all_opts, BlockInterfaceType block_default_type)
|
||||
}
|
||||
|
||||
if (max_devs && unit_id >= max_devs) {
|
||||
error_report("unit %d too big (max is %d)", unit_id, max_devs - 1);
|
||||
error_setg(errp, "unit %d too big (max is %d)", unit_id, max_devs - 1);
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (drive_get(type, bus_id, unit_id) != NULL) {
|
||||
error_report("drive with bus=%d, unit=%d (index=%d) exists",
|
||||
bus_id, unit_id, index);
|
||||
error_setg(errp, "drive with bus=%d, unit=%d (index=%d) exists",
|
||||
bus_id, unit_id, index);
|
||||
goto fail;
|
||||
}
|
||||
|
||||
@ -970,7 +971,7 @@ DriveInfo *drive_new(QemuOpts *all_opts, BlockInterfaceType block_default_type)
|
||||
if (werror != NULL) {
|
||||
if (type != IF_IDE && type != IF_SCSI && type != IF_VIRTIO &&
|
||||
type != IF_NONE) {
|
||||
error_report("werror is not supported by this bus type");
|
||||
error_setg(errp, "werror is not supported by this bus type");
|
||||
goto fail;
|
||||
}
|
||||
qdict_put_str(bs_opts, "werror", werror);
|
||||
@ -980,7 +981,7 @@ DriveInfo *drive_new(QemuOpts *all_opts, BlockInterfaceType block_default_type)
|
||||
if (rerror != NULL) {
|
||||
if (type != IF_IDE && type != IF_VIRTIO && type != IF_SCSI &&
|
||||
type != IF_NONE) {
|
||||
error_report("rerror is not supported by this bus type");
|
||||
error_setg(errp, "rerror is not supported by this bus type");
|
||||
goto fail;
|
||||
}
|
||||
qdict_put_str(bs_opts, "rerror", rerror);
|
||||
@ -991,7 +992,7 @@ DriveInfo *drive_new(QemuOpts *all_opts, BlockInterfaceType block_default_type)
|
||||
bs_opts = NULL;
|
||||
if (!blk) {
|
||||
if (local_err) {
|
||||
error_report_err(local_err);
|
||||
error_propagate(errp, local_err);
|
||||
}
|
||||
goto fail;
|
||||
} else {
|
||||
|
@ -259,7 +259,7 @@ static void char_pty_open(Chardev *chr,
|
||||
qemu_set_nonblock(master_fd);
|
||||
|
||||
chr->filename = g_strdup_printf("pty:%s", pty_name);
|
||||
error_report("char device redirected to %s (label %s)",
|
||||
error_printf("char device redirected to %s (label %s)\n",
|
||||
pty_name, chr->label);
|
||||
|
||||
s = PTY_CHARDEV(chr);
|
||||
|
@ -634,7 +634,7 @@ Chardev *qemu_chr_new_from_opts(QemuOpts *opts, Error **errp)
|
||||
|
||||
chardev_name_foreach(help_string_append, str);
|
||||
|
||||
error_report("Available chardev backend types: %s", str->str);
|
||||
error_printf("Available chardev backend types: %s\n", str->str);
|
||||
g_string_free(str, true);
|
||||
return NULL;
|
||||
}
|
||||
|
8
cpus.c
8
cpus.c
@ -211,12 +211,12 @@ void qemu_tcg_configure(QemuOpts *opts, Error **errp)
|
||||
error_setg(errp, "No MTTCG when icount is enabled");
|
||||
} else {
|
||||
#ifndef TARGET_SUPPORTS_MTTCG
|
||||
error_report("Guest not yet converted to MTTCG - "
|
||||
"you may get unexpected results");
|
||||
warn_report("Guest not yet converted to MTTCG - "
|
||||
"you may get unexpected results");
|
||||
#endif
|
||||
if (!check_tcg_memory_orders_compatible()) {
|
||||
error_report("Guest expects a stronger memory ordering "
|
||||
"than the host provides");
|
||||
warn_report("Guest expects a stronger memory ordering "
|
||||
"than the host provides");
|
||||
error_printf("This may cause strange/hard to debug errors\n");
|
||||
}
|
||||
mttcg_enabled = true;
|
||||
|
@ -28,6 +28,7 @@
|
||||
#include "sysemu/block-backend.h"
|
||||
#include "sysemu/blockdev.h"
|
||||
#include "qapi/qmp/qdict.h"
|
||||
#include "qapi/error.h"
|
||||
#include "qemu/config-file.h"
|
||||
#include "qemu/option.h"
|
||||
#include "sysemu/sysemu.h"
|
||||
@ -36,6 +37,7 @@
|
||||
|
||||
static DriveInfo *add_init_drive(const char *optstr)
|
||||
{
|
||||
Error *err = NULL;
|
||||
DriveInfo *dinfo;
|
||||
QemuOpts *opts;
|
||||
MachineClass *mc;
|
||||
@ -45,8 +47,9 @@ static DriveInfo *add_init_drive(const char *optstr)
|
||||
return NULL;
|
||||
|
||||
mc = MACHINE_GET_CLASS(current_machine);
|
||||
dinfo = drive_new(opts, mc->block_default_type);
|
||||
dinfo = drive_new(opts, mc->block_default_type, &err);
|
||||
if (!dinfo) {
|
||||
error_report_err(err);
|
||||
qemu_opts_del(opts);
|
||||
return NULL;
|
||||
}
|
||||
|
@ -15,7 +15,7 @@
|
||||
#include "qemu/config-file.h"
|
||||
#include "qemu/module.h"
|
||||
|
||||
int qemu_fsdev_add(QemuOpts *opts)
|
||||
int qemu_fsdev_add(QemuOpts *opts, Error **errp)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
@ -30,7 +30,7 @@ static FsDriverTable FsDrivers[] = {
|
||||
{ .name = "proxy", .ops = &proxy_ops},
|
||||
};
|
||||
|
||||
int qemu_fsdev_add(QemuOpts *opts)
|
||||
int qemu_fsdev_add(QemuOpts *opts, Error **errp)
|
||||
{
|
||||
int i;
|
||||
struct FsDriverListEntry *fsle;
|
||||
@ -38,10 +38,9 @@ int qemu_fsdev_add(QemuOpts *opts)
|
||||
const char *fsdriver = qemu_opt_get(opts, "fsdriver");
|
||||
const char *writeout = qemu_opt_get(opts, "writeout");
|
||||
bool ro = qemu_opt_get_bool(opts, "readonly", 0);
|
||||
Error *local_err = NULL;
|
||||
|
||||
if (!fsdev_id) {
|
||||
error_report("fsdev: No id specified");
|
||||
error_setg(errp, "fsdev: No id specified");
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -53,11 +52,11 @@ int qemu_fsdev_add(QemuOpts *opts)
|
||||
}
|
||||
|
||||
if (i == ARRAY_SIZE(FsDrivers)) {
|
||||
error_report("fsdev: fsdriver %s not found", fsdriver);
|
||||
error_setg(errp, "fsdev: fsdriver %s not found", fsdriver);
|
||||
return -1;
|
||||
}
|
||||
} else {
|
||||
error_report("fsdev: No fsdriver specified");
|
||||
error_setg(errp, "fsdev: No fsdriver specified");
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -76,8 +75,7 @@ int qemu_fsdev_add(QemuOpts *opts)
|
||||
}
|
||||
|
||||
if (fsle->fse.ops->parse_opts) {
|
||||
if (fsle->fse.ops->parse_opts(opts, &fsle->fse, &local_err)) {
|
||||
error_report_err(local_err);
|
||||
if (fsle->fse.ops->parse_opts(opts, &fsle->fse, errp)) {
|
||||
g_free(fsle->fse.fsdev_id);
|
||||
g_free(fsle);
|
||||
return -1;
|
||||
|
@ -38,7 +38,7 @@ typedef struct FsDriverListEntry {
|
||||
QTAILQ_ENTRY(FsDriverListEntry) next;
|
||||
} FsDriverListEntry;
|
||||
|
||||
int qemu_fsdev_add(QemuOpts *opts);
|
||||
int qemu_fsdev_add(QemuOpts *opts, Error **errp);
|
||||
FsDriverEntry *get_fsdev_fsentry(char *id);
|
||||
extern FileOperations local_ops;
|
||||
extern FileOperations handle_ops;
|
||||
|
@ -19,6 +19,7 @@
|
||||
#include <grp.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/un.h>
|
||||
#include "qapi/error.h"
|
||||
#include "qemu/xattr.h"
|
||||
#include "qemu/cutils.h"
|
||||
#include "qemu/error-report.h"
|
||||
@ -655,12 +656,13 @@ static int handle_parse_opts(QemuOpts *opts, FsDriverEntry *fse, Error **errp)
|
||||
warn_report("handle backend is deprecated");
|
||||
|
||||
if (sec_model) {
|
||||
error_report("Invalid argument security_model specified with handle fsdriver");
|
||||
error_setg(errp,
|
||||
"Invalid argument security_model specified with handle fsdriver");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!path) {
|
||||
error_report("fsdev: No path specified");
|
||||
error_setg(errp, "fsdev: No path specified");
|
||||
return -1;
|
||||
}
|
||||
fse->path = g_strdup(path);
|
||||
|
@ -1509,8 +1509,8 @@ static int local_parse_opts(QemuOpts *opts, FsDriverEntry *fse, Error **errp)
|
||||
|
||||
fsdev_throttle_parse_opts(opts, &fse->fst, &local_err);
|
||||
if (local_err) {
|
||||
error_propagate(errp, local_err);
|
||||
error_prepend(errp, "invalid throttle configuration: ");
|
||||
error_propagate_prepend(errp, local_err,
|
||||
"invalid throttle configuration: ");
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -14,6 +14,7 @@
|
||||
#include "hw/9pfs/9p.h"
|
||||
#include "hw/xen/xen_backend.h"
|
||||
#include "hw/9pfs/xen-9pfs.h"
|
||||
#include "qapi/error.h"
|
||||
#include "qemu/config-file.h"
|
||||
#include "qemu/option.h"
|
||||
#include "fsdev/qemu-fsdev.h"
|
||||
@ -355,6 +356,7 @@ static int xen_9pfs_free(struct XenDevice *xendev)
|
||||
|
||||
static int xen_9pfs_connect(struct XenDevice *xendev)
|
||||
{
|
||||
Error *err = NULL;
|
||||
int i;
|
||||
Xen9pfsDev *xen_9pdev = container_of(xendev, Xen9pfsDev, xendev);
|
||||
V9fsState *s = &xen_9pdev->state;
|
||||
@ -452,7 +454,10 @@ static int xen_9pfs_connect(struct XenDevice *xendev)
|
||||
qemu_opt_set(fsdev, "path", xen_9pdev->path, NULL);
|
||||
qemu_opt_set(fsdev, "security_model", xen_9pdev->security_model, NULL);
|
||||
qemu_opts_set_id(fsdev, s->fsconf.fsdev_id);
|
||||
qemu_fsdev_add(fsdev);
|
||||
qemu_fsdev_add(fsdev, &err);
|
||||
if (err) {
|
||||
error_report_err(err);
|
||||
}
|
||||
v9fs_device_realize_common(s, &xen_9p_transport, NULL);
|
||||
|
||||
return 0;
|
||||
|
@ -307,7 +307,7 @@ static void cg3_realizefn(DeviceState *dev, Error **errp)
|
||||
ret = load_image_mr(fcode_filename, &s->rom);
|
||||
g_free(fcode_filename);
|
||||
if (ret < 0 || ret > FCODE_MAX_ROM_SIZE) {
|
||||
error_report("cg3: could not load prom '%s'", CG3_ROM_FILE);
|
||||
warn_report("cg3: could not load prom '%s'", CG3_ROM_FILE);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -823,7 +823,7 @@ static void tcx_realizefn(DeviceState *dev, Error **errp)
|
||||
ret = load_image_mr(fcode_filename, &s->rom);
|
||||
g_free(fcode_filename);
|
||||
if (ret < 0 || ret > FCODE_MAX_ROM_SIZE) {
|
||||
error_report("tcx: could not load prom '%s'", TCX_ROM_FILE);
|
||||
warn_report("tcx: could not load prom '%s'", TCX_ROM_FILE);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2209,8 +2209,9 @@ static void pc_machine_set_nvdimm_persistence(Object *obj, const char *value,
|
||||
else if (strcmp(value, "mem-ctrl") == 0)
|
||||
nvdimm_state->persistence = 2;
|
||||
else {
|
||||
error_report("-machine nvdimm-persistence=%s: unsupported option", value);
|
||||
exit(EXIT_FAILURE);
|
||||
error_setg(errp, "-machine nvdimm-persistence=%s: unsupported option",
|
||||
value);
|
||||
return;
|
||||
}
|
||||
|
||||
g_free(nvdimm_state->persistence_string);
|
||||
|
@ -21,7 +21,7 @@
|
||||
*/
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "qapi/error.h"
|
||||
#include "monitor/monitor.h"
|
||||
#include "hw/hw.h"
|
||||
#include "hw/i386/pc.h"
|
||||
@ -393,9 +393,9 @@ static void ioapic_realize(DeviceState *dev, Error **errp)
|
||||
IOAPICCommonState *s = IOAPIC_COMMON(dev);
|
||||
|
||||
if (s->version != 0x11 && s->version != 0x20) {
|
||||
error_report("IOAPIC only supports version 0x11 or 0x20 "
|
||||
"(default: 0x%x).", IOAPIC_VER_DEF);
|
||||
exit(1);
|
||||
error_setg(errp, "IOAPIC only supports version 0x11 or 0x20 "
|
||||
"(default: 0x%x).", IOAPIC_VER_DEF);
|
||||
return;
|
||||
}
|
||||
|
||||
memory_region_init_io(&s->io_memory, OBJECT(s), &ioapic_io_ops, s,
|
||||
|
@ -320,8 +320,9 @@ static void icp_realize(DeviceState *dev, Error **errp)
|
||||
|
||||
obj = object_property_get_link(OBJECT(dev), ICP_PROP_XICS, &err);
|
||||
if (!obj) {
|
||||
error_propagate(errp, err);
|
||||
error_prepend(errp, "required link '" ICP_PROP_XICS "' not found: ");
|
||||
error_propagate_prepend(errp, err,
|
||||
"required link '" ICP_PROP_XICS
|
||||
"' not found: ");
|
||||
return;
|
||||
}
|
||||
|
||||
@ -329,8 +330,9 @@ static void icp_realize(DeviceState *dev, Error **errp)
|
||||
|
||||
obj = object_property_get_link(OBJECT(dev), ICP_PROP_CPU, &err);
|
||||
if (!obj) {
|
||||
error_propagate(errp, err);
|
||||
error_prepend(errp, "required link '" ICP_PROP_CPU "' not found: ");
|
||||
error_propagate_prepend(errp, err,
|
||||
"required link '" ICP_PROP_CPU
|
||||
"' not found: ");
|
||||
return;
|
||||
}
|
||||
|
||||
@ -624,8 +626,9 @@ static void ics_base_realize(DeviceState *dev, Error **errp)
|
||||
|
||||
obj = object_property_get_link(OBJECT(dev), ICS_PROP_XICS, &err);
|
||||
if (!obj) {
|
||||
error_propagate(errp, err);
|
||||
error_prepend(errp, "required link '" ICS_PROP_XICS "' not found: ");
|
||||
error_propagate_prepend(errp, err,
|
||||
"required link '" ICS_PROP_XICS
|
||||
"' not found: ");
|
||||
return;
|
||||
}
|
||||
ics->xics = XICS_FABRIC(obj);
|
||||
|
@ -198,17 +198,12 @@ static void ics_get_kvm_state(ICSState *ics)
|
||||
{
|
||||
uint64_t state;
|
||||
int i;
|
||||
Error *local_err = NULL;
|
||||
|
||||
for (i = 0; i < ics->nr_irqs; i++) {
|
||||
ICSIRQState *irq = &ics->irqs[i];
|
||||
|
||||
kvm_device_access(kernel_xics_fd, KVM_DEV_XICS_GRP_SOURCES,
|
||||
i + ics->offset, &state, false, &local_err);
|
||||
if (local_err) {
|
||||
error_report_err(local_err);
|
||||
exit(1);
|
||||
}
|
||||
i + ics->offset, &state, false, &error_fatal);
|
||||
|
||||
irq->server = state & KVM_XICS_DESTINATION_MASK;
|
||||
irq->saved_priority = (state >> KVM_XICS_PRIORITY_SHIFT)
|
||||
|
@ -1288,8 +1288,8 @@ static void ivshmem_realize(PCIDevice *dev, Error **errp)
|
||||
IVShmemState *s = IVSHMEM_COMMON(dev);
|
||||
|
||||
if (!qtest_enabled()) {
|
||||
error_report("ivshmem is deprecated, please use ivshmem-plain"
|
||||
" or ivshmem-doorbell instead");
|
||||
warn_report("ivshmem is deprecated, please use ivshmem-plain"
|
||||
" or ivshmem-doorbell instead");
|
||||
}
|
||||
|
||||
if (qemu_chr_fe_backend_connected(&s->server_chr) + !!s->shmobj != 1) {
|
||||
|
@ -2020,10 +2020,10 @@ static void virtio_net_device_realize(DeviceState *dev, Error **errp)
|
||||
|
||||
if (n->net_conf.tx && strcmp(n->net_conf.tx, "timer")
|
||||
&& strcmp(n->net_conf.tx, "bh")) {
|
||||
error_report("virtio-net: "
|
||||
"Unknown option tx=%s, valid options: \"timer\" \"bh\"",
|
||||
n->net_conf.tx);
|
||||
error_report("Defaulting to \"bh\"");
|
||||
warn_report("virtio-net: "
|
||||
"Unknown option tx=%s, valid options: \"timer\" \"bh\"",
|
||||
n->net_conf.tx);
|
||||
error_printf("Defaulting to \"bh\"");
|
||||
}
|
||||
|
||||
n->net_conf.tx_queue_size = MIN(virtio_net_max_tx_queue_size(n),
|
||||
|
@ -148,8 +148,8 @@ static void pnv_core_realize(DeviceState *dev, Error **errp)
|
||||
|
||||
chip = object_property_get_link(OBJECT(dev), "chip", &local_err);
|
||||
if (!chip) {
|
||||
error_propagate(errp, local_err);
|
||||
error_prepend(errp, "required link 'chip' not found: ");
|
||||
error_propagate_prepend(errp, local_err,
|
||||
"required link 'chip' not found: ");
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1724,16 +1724,15 @@ static void spapr_phb_realize(DeviceState *dev, Error **errp)
|
||||
if (smc->legacy_irq_allocation) {
|
||||
irq = spapr_irq_findone(spapr, &local_err);
|
||||
if (local_err) {
|
||||
error_propagate(errp, local_err);
|
||||
error_prepend(errp, "can't allocate LSIs: ");
|
||||
error_propagate_prepend(errp, local_err,
|
||||
"can't allocate LSIs: ");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
spapr_irq_claim(spapr, irq, true, &local_err);
|
||||
if (local_err) {
|
||||
error_propagate(errp, local_err);
|
||||
error_prepend(errp, "can't allocate LSIs: ");
|
||||
error_propagate_prepend(errp, local_err, "can't allocate LSIs: ");
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -950,6 +950,7 @@ static void save_opt_list(size_t *ndest, const char ***dest,
|
||||
|
||||
void smbios_entry_add(QemuOpts *opts, Error **errp)
|
||||
{
|
||||
Error *err = NULL;
|
||||
const char *val;
|
||||
|
||||
assert(!smbios_immutable);
|
||||
@ -960,12 +961,16 @@ void smbios_entry_add(QemuOpts *opts, Error **errp)
|
||||
int size;
|
||||
struct smbios_table *table; /* legacy mode only */
|
||||
|
||||
qemu_opts_validate(opts, qemu_smbios_file_opts, &error_fatal);
|
||||
qemu_opts_validate(opts, qemu_smbios_file_opts, &err);
|
||||
if (err) {
|
||||
error_propagate(errp, err);
|
||||
return;
|
||||
}
|
||||
|
||||
size = get_image_size(val);
|
||||
if (size == -1 || size < sizeof(struct smbios_structure_header)) {
|
||||
error_report("Cannot read SMBIOS file %s", val);
|
||||
exit(1);
|
||||
error_setg(errp, "Cannot read SMBIOS file %s", val);
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -978,14 +983,15 @@ void smbios_entry_add(QemuOpts *opts, Error **errp)
|
||||
smbios_tables_len);
|
||||
|
||||
if (load_image(val, (uint8_t *)header) != size) {
|
||||
error_report("Failed to load SMBIOS file %s", val);
|
||||
exit(1);
|
||||
error_setg(errp, "Failed to load SMBIOS file %s", val);
|
||||
return;
|
||||
}
|
||||
|
||||
if (test_bit(header->type, have_fields_bitmap)) {
|
||||
error_report("can't load type %d struct, fields already specified!",
|
||||
header->type);
|
||||
exit(1);
|
||||
error_setg(errp,
|
||||
"can't load type %d struct, fields already specified!",
|
||||
header->type);
|
||||
return;
|
||||
}
|
||||
set_bit(header->type, have_binfile_bitmap);
|
||||
|
||||
@ -1030,19 +1036,23 @@ void smbios_entry_add(QemuOpts *opts, Error **errp)
|
||||
unsigned long type = strtoul(val, NULL, 0);
|
||||
|
||||
if (type > SMBIOS_MAX_TYPE) {
|
||||
error_report("out of range!");
|
||||
exit(1);
|
||||
error_setg(errp, "out of range!");
|
||||
return;
|
||||
}
|
||||
|
||||
if (test_bit(type, have_binfile_bitmap)) {
|
||||
error_report("can't add fields, binary file already loaded!");
|
||||
exit(1);
|
||||
error_setg(errp, "can't add fields, binary file already loaded!");
|
||||
return;
|
||||
}
|
||||
set_bit(type, have_fields_bitmap);
|
||||
|
||||
switch (type) {
|
||||
case 0:
|
||||
qemu_opts_validate(opts, qemu_smbios_type0_opts, &error_fatal);
|
||||
qemu_opts_validate(opts, qemu_smbios_type0_opts, &err);
|
||||
if (err) {
|
||||
error_propagate(errp, err);
|
||||
return;
|
||||
}
|
||||
save_opt(&type0.vendor, opts, "vendor");
|
||||
save_opt(&type0.version, opts, "version");
|
||||
save_opt(&type0.date, opts, "date");
|
||||
@ -1051,14 +1061,18 @@ void smbios_entry_add(QemuOpts *opts, Error **errp)
|
||||
val = qemu_opt_get(opts, "release");
|
||||
if (val) {
|
||||
if (sscanf(val, "%hhu.%hhu", &type0.major, &type0.minor) != 2) {
|
||||
error_report("Invalid release");
|
||||
exit(1);
|
||||
error_setg(errp, "Invalid release");
|
||||
return;
|
||||
}
|
||||
type0.have_major_minor = true;
|
||||
}
|
||||
return;
|
||||
case 1:
|
||||
qemu_opts_validate(opts, qemu_smbios_type1_opts, &error_fatal);
|
||||
qemu_opts_validate(opts, qemu_smbios_type1_opts, &err);
|
||||
if (err) {
|
||||
error_propagate(errp, err);
|
||||
return;
|
||||
}
|
||||
save_opt(&type1.manufacturer, opts, "manufacturer");
|
||||
save_opt(&type1.product, opts, "product");
|
||||
save_opt(&type1.version, opts, "version");
|
||||
@ -1069,14 +1083,18 @@ void smbios_entry_add(QemuOpts *opts, Error **errp)
|
||||
val = qemu_opt_get(opts, "uuid");
|
||||
if (val) {
|
||||
if (qemu_uuid_parse(val, &qemu_uuid) != 0) {
|
||||
error_report("Invalid UUID");
|
||||
exit(1);
|
||||
error_setg(errp, "Invalid UUID");
|
||||
return;
|
||||
}
|
||||
qemu_uuid_set = true;
|
||||
}
|
||||
return;
|
||||
case 2:
|
||||
qemu_opts_validate(opts, qemu_smbios_type2_opts, &error_fatal);
|
||||
qemu_opts_validate(opts, qemu_smbios_type2_opts, &err);
|
||||
if (err) {
|
||||
error_propagate(errp, err);
|
||||
return;
|
||||
}
|
||||
save_opt(&type2.manufacturer, opts, "manufacturer");
|
||||
save_opt(&type2.product, opts, "product");
|
||||
save_opt(&type2.version, opts, "version");
|
||||
@ -1085,7 +1103,11 @@ void smbios_entry_add(QemuOpts *opts, Error **errp)
|
||||
save_opt(&type2.location, opts, "location");
|
||||
return;
|
||||
case 3:
|
||||
qemu_opts_validate(opts, qemu_smbios_type3_opts, &error_fatal);
|
||||
qemu_opts_validate(opts, qemu_smbios_type3_opts, &err);
|
||||
if (err) {
|
||||
error_propagate(errp, err);
|
||||
return;
|
||||
}
|
||||
save_opt(&type3.manufacturer, opts, "manufacturer");
|
||||
save_opt(&type3.version, opts, "version");
|
||||
save_opt(&type3.serial, opts, "serial");
|
||||
@ -1093,7 +1115,11 @@ void smbios_entry_add(QemuOpts *opts, Error **errp)
|
||||
save_opt(&type3.sku, opts, "sku");
|
||||
return;
|
||||
case 4:
|
||||
qemu_opts_validate(opts, qemu_smbios_type4_opts, &error_fatal);
|
||||
qemu_opts_validate(opts, qemu_smbios_type4_opts, &err);
|
||||
if (err) {
|
||||
error_propagate(errp, err);
|
||||
return;
|
||||
}
|
||||
save_opt(&type4.sock_pfx, opts, "sock_pfx");
|
||||
save_opt(&type4.manufacturer, opts, "manufacturer");
|
||||
save_opt(&type4.version, opts, "version");
|
||||
@ -1102,11 +1128,19 @@ void smbios_entry_add(QemuOpts *opts, Error **errp)
|
||||
save_opt(&type4.part, opts, "part");
|
||||
return;
|
||||
case 11:
|
||||
qemu_opts_validate(opts, qemu_smbios_type11_opts, &error_fatal);
|
||||
qemu_opts_validate(opts, qemu_smbios_type11_opts, &err);
|
||||
if (err) {
|
||||
error_propagate(errp, err);
|
||||
return;
|
||||
}
|
||||
save_opt_list(&type11.nvalues, &type11.values, opts, "value");
|
||||
return;
|
||||
case 17:
|
||||
qemu_opts_validate(opts, qemu_smbios_type17_opts, &error_fatal);
|
||||
qemu_opts_validate(opts, qemu_smbios_type17_opts, &err);
|
||||
if (err) {
|
||||
error_propagate(errp, err);
|
||||
return;
|
||||
}
|
||||
save_opt(&type17.loc_pfx, opts, "loc_pfx");
|
||||
save_opt(&type17.bank, opts, "bank");
|
||||
save_opt(&type17.manufacturer, opts, "manufacturer");
|
||||
@ -1116,12 +1150,12 @@ void smbios_entry_add(QemuOpts *opts, Error **errp)
|
||||
type17.speed = qemu_opt_get_number(opts, "speed", 0);
|
||||
return;
|
||||
default:
|
||||
error_report("Don't know how to build fields for SMBIOS type %ld",
|
||||
type);
|
||||
exit(1);
|
||||
error_setg(errp,
|
||||
"Don't know how to build fields for SMBIOS type %ld",
|
||||
type);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
error_report("Must specify type= or file=");
|
||||
exit(1);
|
||||
error_setg(errp, "Must specify type= or file=");
|
||||
}
|
||||
|
@ -454,8 +454,7 @@ static void aspeed_timer_realize(DeviceState *dev, Error **errp)
|
||||
|
||||
obj = object_property_get_link(OBJECT(dev), "scu", &err);
|
||||
if (!obj) {
|
||||
error_propagate(errp, err);
|
||||
error_prepend(errp, "required link 'scu' not found: ");
|
||||
error_propagate_prepend(errp, err, "required link 'scu' not found: ");
|
||||
return;
|
||||
}
|
||||
s->scu = ASPEED_SCU(obj);
|
||||
|
@ -340,8 +340,9 @@ static USBDevice *usb_try_create_simple(USBBus *bus, const char *name,
|
||||
}
|
||||
object_property_set_bool(OBJECT(dev), true, "realized", &err);
|
||||
if (err) {
|
||||
error_propagate(errp, err);
|
||||
error_prepend(errp, "Failed to initialize USB device '%s': ", name);
|
||||
error_propagate_prepend(errp, err,
|
||||
"Failed to initialize USB device '%s': ",
|
||||
name);
|
||||
return NULL;
|
||||
}
|
||||
return dev;
|
||||
|
@ -1670,7 +1670,7 @@ static void vfio_probe_igd_bar4_quirk(VFIOPCIDevice *vdev, int nr)
|
||||
* but also no point in us enabling VGA if disabled in hardware.
|
||||
*/
|
||||
if (!(gmch & 0x2) && !vdev->vga && vfio_populate_vga(vdev, &err)) {
|
||||
error_reportf_err(err, ERR_PREFIX, vdev->vbasedev.name);
|
||||
error_reportf_err(err, VFIO_MSG_PREFIX, vdev->vbasedev.name);
|
||||
error_report("IGD device %s failed to enable VGA access, "
|
||||
"legacy mode disabled", vdev->vbasedev.name);
|
||||
goto out;
|
||||
@ -1696,7 +1696,7 @@ static void vfio_probe_igd_bar4_quirk(VFIOPCIDevice *vdev, int nr)
|
||||
ret = vfio_pci_igd_opregion_init(vdev, opregion, &err);
|
||||
if (ret) {
|
||||
error_append_hint(&err, "IGD legacy mode disabled\n");
|
||||
error_reportf_err(err, ERR_PREFIX, vdev->vbasedev.name);
|
||||
error_reportf_err(err, VFIO_MSG_PREFIX, vdev->vbasedev.name);
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
@ -252,7 +252,7 @@ static void vfio_intx_update(PCIDevice *pdev)
|
||||
|
||||
vfio_intx_enable_kvm(vdev, &err);
|
||||
if (err) {
|
||||
error_reportf_err(err, WARN_PREFIX, vdev->vbasedev.name);
|
||||
warn_reportf_err(err, VFIO_MSG_PREFIX, vdev->vbasedev.name);
|
||||
}
|
||||
|
||||
/* Re-enable the interrupt in cased we missed an EOI */
|
||||
@ -317,7 +317,7 @@ static int vfio_intx_enable(VFIOPCIDevice *vdev, Error **errp)
|
||||
|
||||
vfio_intx_enable_kvm(vdev, &err);
|
||||
if (err) {
|
||||
error_reportf_err(err, WARN_PREFIX, vdev->vbasedev.name);
|
||||
warn_reportf_err(err, VFIO_MSG_PREFIX, vdev->vbasedev.name);
|
||||
}
|
||||
|
||||
vdev->interrupt = VFIO_INT_INTx;
|
||||
@ -745,7 +745,7 @@ static void vfio_msi_disable_common(VFIOPCIDevice *vdev)
|
||||
|
||||
vfio_intx_enable(vdev, &err);
|
||||
if (err) {
|
||||
error_reportf_err(err, ERR_PREFIX, vdev->vbasedev.name);
|
||||
error_reportf_err(err, VFIO_MSG_PREFIX, vdev->vbasedev.name);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1283,8 +1283,7 @@ static int vfio_msi_setup(VFIOPCIDevice *vdev, int pos, Error **errp)
|
||||
if (ret == -ENOTSUP) {
|
||||
return 0;
|
||||
}
|
||||
error_prepend(&err, "msi_init failed: ");
|
||||
error_propagate(errp, err);
|
||||
error_propagate_prepend(errp, err, "msi_init failed: ");
|
||||
return ret;
|
||||
}
|
||||
vdev->msi_cap_size = 0xa + (msi_maskbit ? 0xa : 0) + (msi_64bit ? 0x4 : 0);
|
||||
@ -1558,7 +1557,7 @@ static int vfio_msix_setup(VFIOPCIDevice *vdev, int pos, Error **errp)
|
||||
&err);
|
||||
if (ret < 0) {
|
||||
if (ret == -ENOTSUP) {
|
||||
error_report_err(err);
|
||||
warn_report_err(err);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -2197,7 +2196,7 @@ static void vfio_pci_post_reset(VFIOPCIDevice *vdev)
|
||||
|
||||
vfio_intx_enable(vdev, &err);
|
||||
if (err) {
|
||||
error_reportf_err(err, ERR_PREFIX, vdev->vbasedev.name);
|
||||
error_reportf_err(err, VFIO_MSG_PREFIX, vdev->vbasedev.name);
|
||||
}
|
||||
|
||||
for (nr = 0; nr < PCI_NUM_REGIONS - 1; ++nr) {
|
||||
@ -2591,9 +2590,9 @@ static void vfio_populate_device(VFIOPCIDevice *vdev, Error **errp)
|
||||
} else if (irq_info.count == 1) {
|
||||
vdev->pci_aer = true;
|
||||
} else {
|
||||
error_report(WARN_PREFIX
|
||||
"Could not enable error recovery for the device",
|
||||
vbasedev->name);
|
||||
warn_report(VFIO_MSG_PREFIX
|
||||
"Could not enable error recovery for the device",
|
||||
vbasedev->name);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2718,7 +2717,7 @@ static void vfio_req_notifier_handler(void *opaque)
|
||||
|
||||
qdev_unplug(&vdev->pdev.qdev, &err);
|
||||
if (err) {
|
||||
error_reportf_err(err, WARN_PREFIX, vdev->vbasedev.name);
|
||||
warn_reportf_err(err, VFIO_MSG_PREFIX, vdev->vbasedev.name);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2831,7 +2830,7 @@ static void vfio_realize(PCIDevice *pdev, Error **errp)
|
||||
|
||||
if (stat(vdev->vbasedev.sysfsdev, &st) < 0) {
|
||||
error_setg_errno(errp, errno, "no such host device");
|
||||
error_prepend(errp, ERR_PREFIX, vdev->vbasedev.sysfsdev);
|
||||
error_prepend(errp, VFIO_MSG_PREFIX, vdev->vbasedev.sysfsdev);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -3086,7 +3085,7 @@ out_teardown:
|
||||
vfio_teardown_msi(vdev);
|
||||
vfio_bars_exit(vdev);
|
||||
error:
|
||||
error_prepend(errp, ERR_PREFIX, vdev->vbasedev.name);
|
||||
error_prepend(errp, VFIO_MSG_PREFIX, vdev->vbasedev.name);
|
||||
}
|
||||
|
||||
static void vfio_instance_finalize(Object *obj)
|
||||
|
@ -679,8 +679,8 @@ static void vfio_platform_realize(DeviceState *dev, Error **errp)
|
||||
|
||||
for (i = 0; i < vbasedev->num_regions; i++) {
|
||||
if (vfio_region_mmap(vdev->regions[i])) {
|
||||
error_report("%s mmap unsupported. Performance may be slow",
|
||||
memory_region_name(vdev->regions[i]->mem));
|
||||
warn_report("%s mmap unsupported, performance may be slow",
|
||||
memory_region_name(vdev->regions[i]->mem));
|
||||
}
|
||||
sysbus_init_mmio(sbdev, vdev->regions[i]->mem);
|
||||
}
|
||||
@ -690,7 +690,7 @@ out:
|
||||
}
|
||||
|
||||
if (vdev->vbasedev.name) {
|
||||
error_prepend(errp, ERR_PREFIX, vdev->vbasedev.name);
|
||||
error_prepend(errp, VFIO_MSG_PREFIX, vdev->vbasedev.name);
|
||||
} else {
|
||||
error_prepend(errp, "vfio error: ");
|
||||
}
|
||||
|
@ -1683,8 +1683,8 @@ static void virtio_pci_device_plugged(DeviceState *d, Error **errp)
|
||||
if (err) {
|
||||
/* Notice when a system that supports MSIx can't initialize it */
|
||||
if (err != -ENOTSUP) {
|
||||
error_report("unable to init msix vectors to %" PRIu32,
|
||||
proxy->nvectors);
|
||||
warn_report("unable to init msix vectors to %" PRIu32,
|
||||
proxy->nvectors);
|
||||
}
|
||||
proxy->nvectors = 0;
|
||||
}
|
||||
|
@ -830,7 +830,7 @@ static void xen_pt_realize(PCIDevice *d, Error **errp)
|
||||
xen_pt_config_init(s, &err);
|
||||
if (err) {
|
||||
error_append_hint(&err, "PCI Config space initialisation failed");
|
||||
error_report_err(err);
|
||||
error_propagate(errp, err);
|
||||
rc = -1;
|
||||
goto err_out;
|
||||
}
|
||||
|
@ -31,8 +31,7 @@
|
||||
#include <linux/vfio.h>
|
||||
#endif
|
||||
|
||||
#define ERR_PREFIX "vfio error: %s: "
|
||||
#define WARN_PREFIX "vfio warning: %s: "
|
||||
#define VFIO_MSG_PREFIX "vfio %s: "
|
||||
|
||||
enum {
|
||||
VFIO_DEVICE_TYPE_PCI = 0,
|
||||
|
@ -52,8 +52,12 @@
|
||||
* where Error **errp is a parameter, by convention the last one.
|
||||
*
|
||||
* Pass an existing error to the caller with the message modified:
|
||||
* error_propagate_prepend(errp, err);
|
||||
*
|
||||
* Avoid
|
||||
* error_propagate(errp, err);
|
||||
* error_prepend(errp, "Could not frobnicate '%s': ", name);
|
||||
* because this fails to prepend when @errp is &error_fatal.
|
||||
*
|
||||
* Create a new error and pass it to the caller:
|
||||
* error_setg(errp, "situation normal, all fouled up");
|
||||
@ -215,6 +219,16 @@ void error_setg_win32_internal(Error **errp,
|
||||
*/
|
||||
void error_propagate(Error **dst_errp, Error *local_err);
|
||||
|
||||
|
||||
/*
|
||||
* Propagate error object (if any) with some text prepended.
|
||||
* Behaves like
|
||||
* error_prepend(&local_err, fmt, ...);
|
||||
* error_propagate(dst_errp, local_err);
|
||||
*/
|
||||
void error_propagate_prepend(Error **dst_errp, Error *local_err,
|
||||
const char *fmt, ...);
|
||||
|
||||
/*
|
||||
* Prepend some text to @errp's human-readable error message.
|
||||
* The text is made by formatting @fmt, @ap like vprintf().
|
||||
|
@ -79,6 +79,9 @@
|
||||
#define QERR_QGA_COMMAND_FAILED \
|
||||
"Guest agent command failed, error was '%s'"
|
||||
|
||||
#define QERR_REPLAY_NOT_SUPPORTED \
|
||||
"Record/replay feature is not supported for '%s'"
|
||||
|
||||
#define QERR_SET_PASSWD_FAILED \
|
||||
"Could not set password"
|
||||
|
||||
@ -88,7 +91,4 @@
|
||||
#define QERR_UNSUPPORTED \
|
||||
"this feature or command is not currently supported"
|
||||
|
||||
#define QERR_REPLAY_NOT_SUPPORTED \
|
||||
"Record/replay feature is not supported for '%s'"
|
||||
|
||||
#endif /* QERROR_H */
|
||||
|
@ -54,7 +54,8 @@ DriveInfo *drive_get_next(BlockInterfaceType type);
|
||||
QemuOpts *drive_def(const char *optstr);
|
||||
QemuOpts *drive_add(BlockInterfaceType type, int index, const char *file,
|
||||
const char *optstr);
|
||||
DriveInfo *drive_new(QemuOpts *arg, BlockInterfaceType block_default_type);
|
||||
DriveInfo *drive_new(QemuOpts *arg, BlockInterfaceType block_default_type,
|
||||
Error **errp);
|
||||
|
||||
/* device-hotplug */
|
||||
|
||||
|
@ -22,7 +22,6 @@ struct NumaNodeMem {
|
||||
};
|
||||
|
||||
extern NodeInfo numa_info[MAX_NODES];
|
||||
int parse_numa(void *opaque, QemuOpts *opts, Error **errp);
|
||||
void parse_numa_opts(MachineState *ms);
|
||||
void numa_complete_configuration(MachineState *ms);
|
||||
void query_numa_node_mem(NumaNodeMem node_mem[]);
|
||||
|
@ -16,7 +16,7 @@
|
||||
#include "qom/object.h"
|
||||
|
||||
int tpm_config_parse(QemuOptsList *opts_list, const char *optarg);
|
||||
int tpm_init(void);
|
||||
void tpm_init(void);
|
||||
void tpm_cleanup(void);
|
||||
|
||||
typedef enum TPMVersion {
|
||||
|
@ -453,7 +453,7 @@ void qemu_display_early_init(DisplayOptions *opts);
|
||||
void qemu_display_init(DisplayState *ds, DisplayOptions *opts);
|
||||
|
||||
/* vnc.c */
|
||||
void vnc_display_init(const char *id);
|
||||
void vnc_display_init(const char *id, Error **errp);
|
||||
void vnc_display_open(const char *id, Error **errp);
|
||||
void vnc_display_add_client(const char *id, int csock, bool skipauth);
|
||||
int vnc_display_password(const char *id, const char *password);
|
||||
|
@ -1577,9 +1577,9 @@ static GSList *migration_blockers;
|
||||
int migrate_add_blocker(Error *reason, Error **errp)
|
||||
{
|
||||
if (migrate_get_current()->only_migratable) {
|
||||
error_propagate(errp, error_copy(reason));
|
||||
error_prepend(errp, "disallowing migration blocker "
|
||||
"(--only_migratable) for: ");
|
||||
error_propagate_prepend(errp, error_copy(reason),
|
||||
"disallowing migration blocker "
|
||||
"(--only_migratable) for: ");
|
||||
return -EACCES;
|
||||
}
|
||||
|
||||
@ -1588,9 +1588,9 @@ int migrate_add_blocker(Error *reason, Error **errp)
|
||||
return 0;
|
||||
}
|
||||
|
||||
error_propagate(errp, error_copy(reason));
|
||||
error_prepend(errp, "disallowing migration blocker (migration in "
|
||||
"progress) for: ");
|
||||
error_propagate_prepend(errp, error_copy(reason),
|
||||
"disallowing migration blocker "
|
||||
"(migration in progress) for: ");
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
|
@ -2453,8 +2453,8 @@ int save_snapshot(const char *name, Error **errp)
|
||||
AioContext *aio_context;
|
||||
|
||||
if (!replay_can_snapshot()) {
|
||||
error_report("Record/replay does not allow making snapshot "
|
||||
"right now. Try once more later.");
|
||||
error_setg(errp, "Record/replay does not allow making snapshot "
|
||||
"right now. Try once more later.");
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -2650,8 +2650,8 @@ int load_snapshot(const char *name, Error **errp)
|
||||
MigrationIncomingState *mis = migration_incoming_get_current();
|
||||
|
||||
if (!replay_can_snapshot()) {
|
||||
error_report("Record/replay does not allow loading snapshot "
|
||||
"right now. Try once more later.");
|
||||
error_setg(errp, "Record/replay does not allow loading snapshot "
|
||||
"right now. Try once more later.");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
25
net/l2tpv3.c
25
net/l2tpv3.c
@ -28,6 +28,7 @@
|
||||
#include <netdb.h>
|
||||
#include "net/net.h"
|
||||
#include "clients.h"
|
||||
#include "qapi/error.h"
|
||||
#include "qemu-common.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "qemu/option.h"
|
||||
@ -528,7 +529,6 @@ int net_init_l2tpv3(const Netdev *netdev,
|
||||
const char *name,
|
||||
NetClientState *peer, Error **errp)
|
||||
{
|
||||
/* FIXME error_setg(errp, ...) on failure */
|
||||
const NetdevL2TPv3Options *l2tpv3;
|
||||
NetL2TPV3State *s;
|
||||
NetClientState *nc;
|
||||
@ -555,7 +555,7 @@ int net_init_l2tpv3(const Netdev *netdev,
|
||||
}
|
||||
|
||||
if ((l2tpv3->has_offset) && (l2tpv3->offset > 256)) {
|
||||
error_report("l2tpv3_open : offset must be less than 256 bytes");
|
||||
error_setg(errp, "offset must be less than 256 bytes");
|
||||
goto outerr;
|
||||
}
|
||||
|
||||
@ -563,6 +563,8 @@ int net_init_l2tpv3(const Netdev *netdev,
|
||||
if (l2tpv3->has_rxcookie && l2tpv3->has_txcookie) {
|
||||
s->cookie = true;
|
||||
} else {
|
||||
error_setg(errp,
|
||||
"require both 'rxcookie' and 'txcookie' or neither");
|
||||
goto outerr;
|
||||
}
|
||||
} else {
|
||||
@ -578,7 +580,7 @@ int net_init_l2tpv3(const Netdev *netdev,
|
||||
if (l2tpv3->has_udp && l2tpv3->udp) {
|
||||
s->udp = true;
|
||||
if (!(l2tpv3->has_srcport && l2tpv3->has_dstport)) {
|
||||
error_report("l2tpv3_open : need both src and dst port for udp");
|
||||
error_setg(errp, "need both src and dst port for udp");
|
||||
goto outerr;
|
||||
} else {
|
||||
srcport = l2tpv3->srcport;
|
||||
@ -639,20 +641,19 @@ int net_init_l2tpv3(const Netdev *netdev,
|
||||
gairet = getaddrinfo(l2tpv3->src, srcport, &hints, &result);
|
||||
|
||||
if ((gairet != 0) || (result == NULL)) {
|
||||
error_report(
|
||||
"l2tpv3_open : could not resolve src, errno = %s",
|
||||
gai_strerror(gairet)
|
||||
);
|
||||
error_setg(errp, "could not resolve src, errno = %s",
|
||||
gai_strerror(gairet));
|
||||
goto outerr;
|
||||
}
|
||||
fd = socket(result->ai_family, result->ai_socktype, result->ai_protocol);
|
||||
if (fd == -1) {
|
||||
fd = -errno;
|
||||
error_report("l2tpv3_open : socket creation failed, errno = %d", -fd);
|
||||
error_setg(errp, "socket creation failed, errno = %d",
|
||||
-fd);
|
||||
goto outerr;
|
||||
}
|
||||
if (bind(fd, (struct sockaddr *) result->ai_addr, result->ai_addrlen)) {
|
||||
error_report("l2tpv3_open : could not bind socket err=%i", errno);
|
||||
error_setg(errp, "could not bind socket err=%i", errno);
|
||||
goto outerr;
|
||||
}
|
||||
if (result) {
|
||||
@ -677,10 +678,8 @@ int net_init_l2tpv3(const Netdev *netdev,
|
||||
result = NULL;
|
||||
gairet = getaddrinfo(l2tpv3->dst, dstport, &hints, &result);
|
||||
if ((gairet != 0) || (result == NULL)) {
|
||||
error_report(
|
||||
"l2tpv3_open : could not resolve dst, error = %s",
|
||||
gai_strerror(gairet)
|
||||
);
|
||||
error_setg(errp, "could not resolve dst, error = %s",
|
||||
gai_strerror(gairet));
|
||||
goto outerr;
|
||||
}
|
||||
|
||||
|
@ -453,8 +453,8 @@ static NetSocketState *net_socket_fd_init(NetClientState *peer,
|
||||
case SOCK_STREAM:
|
||||
return net_socket_fd_init_stream(peer, model, name, fd, is_connected);
|
||||
default:
|
||||
error_report("socket type=%d for fd=%d must be either"
|
||||
" SOCK_DGRAM or SOCK_STREAM", so_type, fd);
|
||||
error_setg(errp, "socket type=%d for fd=%d must be either"
|
||||
" SOCK_DGRAM or SOCK_STREAM", so_type, fd);
|
||||
closesocket(fd);
|
||||
}
|
||||
return NULL;
|
||||
|
21
numa.c
21
numa.c
@ -60,6 +60,7 @@ NodeInfo numa_info[MAX_NODES];
|
||||
static void parse_numa_node(MachineState *ms, NumaNodeOptions *node,
|
||||
Error **errp)
|
||||
{
|
||||
Error *err = NULL;
|
||||
uint16_t nodenr;
|
||||
uint16List *cpus = NULL;
|
||||
MachineClass *mc = MACHINE_GET_CLASS(ms);
|
||||
@ -82,8 +83,8 @@ static void parse_numa_node(MachineState *ms, NumaNodeOptions *node,
|
||||
}
|
||||
|
||||
if (!mc->cpu_index_to_instance_props || !mc->get_default_cpu_node_id) {
|
||||
error_report("NUMA is not supported by this machine-type");
|
||||
exit(1);
|
||||
error_setg(errp, "NUMA is not supported by this machine-type");
|
||||
return;
|
||||
}
|
||||
for (cpus = node->cpus; cpus; cpus = cpus->next) {
|
||||
CpuInstanceProperties props;
|
||||
@ -97,7 +98,11 @@ static void parse_numa_node(MachineState *ms, NumaNodeOptions *node,
|
||||
props = mc->cpu_index_to_instance_props(ms, cpus->value);
|
||||
props.node_id = nodenr;
|
||||
props.has_node_id = true;
|
||||
machine_set_cpu_numa_node(ms, &props, &error_fatal);
|
||||
machine_set_cpu_numa_node(ms, &props, &err);
|
||||
if (err) {
|
||||
error_propagate(errp, err);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (node->has_mem && node->has_memdev) {
|
||||
@ -210,7 +215,7 @@ end:
|
||||
error_propagate(errp, err);
|
||||
}
|
||||
|
||||
int parse_numa(void *opaque, QemuOpts *opts, Error **errp)
|
||||
static int parse_numa(void *opaque, QemuOpts *opts, Error **errp)
|
||||
{
|
||||
NumaOptions *object = NULL;
|
||||
MachineState *ms = MACHINE(opaque);
|
||||
@ -234,7 +239,7 @@ int parse_numa(void *opaque, QemuOpts *opts, Error **errp)
|
||||
end:
|
||||
qapi_free_NumaOptions(object);
|
||||
if (err) {
|
||||
error_report_err(err);
|
||||
error_propagate(errp, err);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -367,7 +372,7 @@ void numa_complete_configuration(MachineState *ms)
|
||||
if (ms->ram_slots > 0 && nb_numa_nodes == 0 &&
|
||||
mc->auto_enable_numa_with_memhp) {
|
||||
NumaNodeOptions node = { };
|
||||
parse_numa_node(ms, &node, NULL);
|
||||
parse_numa_node(ms, &node, &error_abort);
|
||||
}
|
||||
|
||||
assert(max_numa_nodeid <= MAX_NODES);
|
||||
@ -439,9 +444,7 @@ void numa_complete_configuration(MachineState *ms)
|
||||
|
||||
void parse_numa_opts(MachineState *ms)
|
||||
{
|
||||
if (qemu_opts_foreach(qemu_find_opts("numa"), parse_numa, ms, NULL)) {
|
||||
exit(1);
|
||||
}
|
||||
qemu_opts_foreach(qemu_find_opts("numa"), parse_numa, ms, &error_fatal);
|
||||
}
|
||||
|
||||
void qmp_set_numa_node(NumaOptions *cmd, Error **errp)
|
||||
|
@ -620,11 +620,9 @@ int main(int argc, char **argv)
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (qemu_opts_foreach(&qemu_object_opts,
|
||||
user_creatable_add_opts_foreach,
|
||||
NULL, NULL)) {
|
||||
exit(1);
|
||||
}
|
||||
qemu_opts_foreach(&qemu_object_opts,
|
||||
user_creatable_add_opts_foreach,
|
||||
NULL, &error_fatal);
|
||||
|
||||
if (!trace_init_backends()) {
|
||||
exit(1);
|
||||
|
14
qemu-nbd.c
14
qemu-nbd.c
@ -766,11 +766,9 @@ int main(int argc, char **argv)
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
if (qemu_opts_foreach(&qemu_object_opts,
|
||||
user_creatable_add_opts_foreach,
|
||||
NULL, NULL)) {
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
qemu_opts_foreach(&qemu_object_opts,
|
||||
user_creatable_add_opts_foreach,
|
||||
NULL, &error_fatal);
|
||||
|
||||
if (!trace_init_backends()) {
|
||||
exit(1);
|
||||
@ -1002,11 +1000,7 @@ int main(int argc, char **argv)
|
||||
}
|
||||
|
||||
exp = nbd_export_new(bs, dev_offset, fd_size, nbdflags, nbd_export_closed,
|
||||
writethrough, NULL, &local_err);
|
||||
if (!exp) {
|
||||
error_report_err(local_err);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
writethrough, NULL, &error_fatal);
|
||||
nbd_export_set_name(exp, export_name);
|
||||
nbd_export_set_description(exp, export_description);
|
||||
|
||||
|
@ -12,11 +12,12 @@
|
||||
* Contributions after 2012-01-13 are licensed under the terms of the
|
||||
* GNU GPL, version 2 or (at your option) any later version.
|
||||
*/
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "qapi/error.h"
|
||||
#include "qemu/config-file.h"
|
||||
#include "qemu/option.h"
|
||||
#include "qemu/module.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include <sys/prctl.h>
|
||||
#include <seccomp.h>
|
||||
#include "sysemu/seccomp.h"
|
||||
@ -190,7 +191,7 @@ int parse_sandbox(void *opaque, QemuOpts *opts, Error **errp)
|
||||
* to provide a little bit of consistency for
|
||||
* the command line */
|
||||
} else {
|
||||
error_report("invalid argument for obsolete");
|
||||
error_setg(errp, "invalid argument for obsolete");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
@ -205,14 +206,13 @@ int parse_sandbox(void *opaque, QemuOpts *opts, Error **errp)
|
||||
/* calling prctl directly because we're
|
||||
* not sure if host has CAP_SYS_ADMIN set*/
|
||||
if (prctl(PR_SET_NO_NEW_PRIVS, 1)) {
|
||||
error_report("failed to set no_new_privs "
|
||||
"aborting");
|
||||
error_setg(errp, "failed to set no_new_privs aborting");
|
||||
return -1;
|
||||
}
|
||||
} else if (g_str_equal(value, "allow")) {
|
||||
/* default value */
|
||||
} else {
|
||||
error_report("invalid argument for elevateprivileges");
|
||||
error_setg(errp, "invalid argument for elevateprivileges");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
@ -224,7 +224,7 @@ int parse_sandbox(void *opaque, QemuOpts *opts, Error **errp)
|
||||
} else if (g_str_equal(value, "allow")) {
|
||||
/* default value */
|
||||
} else {
|
||||
error_report("invalid argument for spawn");
|
||||
error_setg(errp, "invalid argument for spawn");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
@ -236,14 +236,14 @@ int parse_sandbox(void *opaque, QemuOpts *opts, Error **errp)
|
||||
} else if (g_str_equal(value, "allow")) {
|
||||
/* default value */
|
||||
} else {
|
||||
error_report("invalid argument for resourcecontrol");
|
||||
error_setg(errp, "invalid argument for resourcecontrol");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
if (seccomp_start(seccomp_opts) < 0) {
|
||||
error_report("failed to install seccomp syscall filter "
|
||||
"in the kernel");
|
||||
error_setg(errp, "failed to install seccomp syscall filter "
|
||||
"in the kernel");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
@ -143,7 +143,6 @@ int user_creatable_add_opts_foreach(void *opaque, QemuOpts *opts, Error **errp)
|
||||
{
|
||||
bool (*type_opt_predicate)(const char *, QemuOpts *) = opaque;
|
||||
Object *obj = NULL;
|
||||
Error *err = NULL;
|
||||
const char *type;
|
||||
|
||||
type = qemu_opt_get(opts, "qom-type");
|
||||
@ -152,9 +151,8 @@ int user_creatable_add_opts_foreach(void *opaque, QemuOpts *opts, Error **errp)
|
||||
return 0;
|
||||
}
|
||||
|
||||
obj = user_creatable_add_opts(opts, &err);
|
||||
obj = user_creatable_add_opts(opts, errp);
|
||||
if (!obj) {
|
||||
error_report_err(err);
|
||||
return -1;
|
||||
}
|
||||
object_unref(obj);
|
||||
|
@ -1,22 +0,0 @@
|
||||
#!/bin/sh
|
||||
# This script verifies that qerror definitions and table entries are
|
||||
# alphabetically ordered.
|
||||
|
||||
check_order() {
|
||||
errmsg=$1
|
||||
shift
|
||||
|
||||
# sort -C verifies order but does not print a message. sort -c does print a
|
||||
# message. These options are both in POSIX.
|
||||
if ! "$@" | sort -C; then
|
||||
echo "$errmsg"
|
||||
"$@" | sort -c
|
||||
exit 1
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
check_order 'Definitions in qerror.h must be in alphabetical order:' \
|
||||
grep '^#define QERR_' qerror.h
|
||||
check_order 'Entries in qerror.c:qerror_table must be in alphabetical order:' \
|
||||
sed -n '/^static.*qerror_table\[\]/,/^};/s/QERR_/&/gp' qerror.c
|
20
scripts/coccinelle/use-error_fatal.cocci
Normal file
20
scripts/coccinelle/use-error_fatal.cocci
Normal file
@ -0,0 +1,20 @@
|
||||
@@
|
||||
type T;
|
||||
identifier FUN, RET;
|
||||
expression list ARGS;
|
||||
expression ERR, EC, FAIL;
|
||||
@@
|
||||
(
|
||||
- T RET = FUN(ARGS, &ERR);
|
||||
+ T RET = FUN(ARGS, &error_fatal);
|
||||
|
|
||||
- RET = FUN(ARGS, &ERR);
|
||||
+ RET = FUN(ARGS, &error_fatal);
|
||||
|
|
||||
- FUN(ARGS, &ERR);
|
||||
+ FUN(ARGS, &error_fatal);
|
||||
)
|
||||
- if (FAIL) {
|
||||
- error_report_err(ERR);
|
||||
- exit(EC);
|
||||
- }
|
@ -9,9 +9,8 @@
|
||||
#include "qapi/qapi-commands-tpm.h"
|
||||
#include "sysemu/tpm.h"
|
||||
|
||||
int tpm_init(void)
|
||||
void tpm_init(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void tpm_cleanup(void)
|
||||
|
@ -5123,14 +5123,15 @@ static void x86_cpu_realizefn(DeviceState *dev, Error **errp)
|
||||
* NOTE: the following code has to follow qemu_init_vcpu(). Otherwise
|
||||
* cs->nr_threads hasn't be populated yet and the checking is incorrect.
|
||||
*/
|
||||
if (IS_AMD_CPU(env) &&
|
||||
!(env->features[FEAT_8000_0001_ECX] & CPUID_EXT3_TOPOEXT) &&
|
||||
cs->nr_threads > 1 && !ht_warned) {
|
||||
error_report("This family of AMD CPU doesn't support "
|
||||
"hyperthreading(%d). Please configure -smp "
|
||||
"options properly or try enabling topoext feature.",
|
||||
cs->nr_threads);
|
||||
ht_warned = true;
|
||||
if (IS_AMD_CPU(env) &&
|
||||
!(env->features[FEAT_8000_0001_ECX] & CPUID_EXT3_TOPOEXT) &&
|
||||
cs->nr_threads > 1 && !ht_warned) {
|
||||
warn_report("This family of AMD CPU doesn't support "
|
||||
"hyperthreading(%d)",
|
||||
cs->nr_threads);
|
||||
error_printf("Please configure -smp options properly"
|
||||
" or try enabling topoext feature.\n");
|
||||
ht_warned = true;
|
||||
}
|
||||
|
||||
x86_cpu_apic_realize(cpu, &local_err);
|
||||
|
@ -8381,8 +8381,8 @@ static void getset_compat_deprecated(Object *obj, Visitor *v, const char *name,
|
||||
QNull *null = NULL;
|
||||
|
||||
if (!qtest_enabled()) {
|
||||
error_report("CPU 'compat' property is deprecated and has no effect; "
|
||||
"use max-cpu-compat machine property instead");
|
||||
warn_report("CPU 'compat' property is deprecated and has no effect; "
|
||||
"use max-cpu-compat machine property instead");
|
||||
}
|
||||
visit_type_null(v, name, &null, NULL);
|
||||
qobject_unref(null);
|
||||
|
@ -95,35 +95,31 @@ qemu-img create -f qcow2 TEST_DIR/t.qcow2 -- -1024
|
||||
qemu-img: Image size must be less than 8 EiB!
|
||||
|
||||
qemu-img create -f qcow2 -o size=-1024 TEST_DIR/t.qcow2
|
||||
qemu-img: Value '-1024' is out of range for parameter 'size'
|
||||
qemu-img: TEST_DIR/t.qcow2: Invalid options for file format 'qcow2'
|
||||
qemu-img: TEST_DIR/t.qcow2: Value '-1024' is out of range for parameter 'size'
|
||||
|
||||
qemu-img create -f qcow2 TEST_DIR/t.qcow2 -- -1k
|
||||
qemu-img: Image size must be less than 8 EiB!
|
||||
|
||||
qemu-img create -f qcow2 -o size=-1k TEST_DIR/t.qcow2
|
||||
qemu-img: Value '-1k' is out of range for parameter 'size'
|
||||
qemu-img: TEST_DIR/t.qcow2: Invalid options for file format 'qcow2'
|
||||
qemu-img: TEST_DIR/t.qcow2: Value '-1k' is out of range for parameter 'size'
|
||||
|
||||
qemu-img create -f qcow2 TEST_DIR/t.qcow2 -- 1kilobyte
|
||||
qemu-img: Invalid image size specified! You may use k, M, G, T, P or E suffixes for
|
||||
qemu-img: kilobytes, megabytes, gigabytes, terabytes, petabytes and exabytes.
|
||||
|
||||
qemu-img create -f qcow2 -o size=1kilobyte TEST_DIR/t.qcow2
|
||||
qemu-img: Parameter 'size' expects a non-negative number below 2^64
|
||||
qemu-img: TEST_DIR/t.qcow2: Parameter 'size' expects a non-negative number below 2^64
|
||||
Optional suffix k, M, G, T, P or E means kilo-, mega-, giga-, tera-, peta-
|
||||
and exabytes, respectively.
|
||||
qemu-img: TEST_DIR/t.qcow2: Invalid options for file format 'qcow2'
|
||||
|
||||
qemu-img create -f qcow2 TEST_DIR/t.qcow2 -- foobar
|
||||
qemu-img: Invalid image size specified! You may use k, M, G, T, P or E suffixes for
|
||||
qemu-img: kilobytes, megabytes, gigabytes, terabytes, petabytes and exabytes.
|
||||
|
||||
qemu-img create -f qcow2 -o size=foobar TEST_DIR/t.qcow2
|
||||
qemu-img: Parameter 'size' expects a non-negative number below 2^64
|
||||
qemu-img: TEST_DIR/t.qcow2: Parameter 'size' expects a non-negative number below 2^64
|
||||
Optional suffix k, M, G, T, P or E means kilo-, mega-, giga-, tera-, peta-
|
||||
and exabytes, respectively.
|
||||
qemu-img: TEST_DIR/t.qcow2: Invalid options for file format 'qcow2'
|
||||
|
||||
== Check correct interpretation of suffixes for cluster size ==
|
||||
|
||||
|
22
tpm.c
22
tpm.c
@ -89,19 +89,19 @@ static int tpm_init_tpmdev(void *dummy, QemuOpts *opts, Error **errp)
|
||||
int i;
|
||||
|
||||
if (!QLIST_EMPTY(&tpm_backends)) {
|
||||
error_report("Only one TPM is allowed.");
|
||||
error_setg(errp, "Only one TPM is allowed.");
|
||||
return 1;
|
||||
}
|
||||
|
||||
id = qemu_opts_id(opts);
|
||||
if (id == NULL) {
|
||||
error_report(QERR_MISSING_PARAMETER, "id");
|
||||
error_setg(errp, QERR_MISSING_PARAMETER, "id");
|
||||
return 1;
|
||||
}
|
||||
|
||||
value = qemu_opt_get(opts, "type");
|
||||
if (!value) {
|
||||
error_report(QERR_MISSING_PARAMETER, "type");
|
||||
error_setg(errp, QERR_MISSING_PARAMETER, "type");
|
||||
tpm_display_backend_drivers();
|
||||
return 1;
|
||||
}
|
||||
@ -109,8 +109,8 @@ static int tpm_init_tpmdev(void *dummy, QemuOpts *opts, Error **errp)
|
||||
i = qapi_enum_parse(&TpmType_lookup, value, -1, NULL);
|
||||
be = i >= 0 ? tpm_be_find_by_type(i) : NULL;
|
||||
if (be == NULL) {
|
||||
error_report(QERR_INVALID_PARAMETER_VALUE,
|
||||
"type", "a TPM backend type");
|
||||
error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "type",
|
||||
"a TPM backend type");
|
||||
tpm_display_backend_drivers();
|
||||
return 1;
|
||||
}
|
||||
@ -118,7 +118,7 @@ static int tpm_init_tpmdev(void *dummy, QemuOpts *opts, Error **errp)
|
||||
/* validate backend specific opts */
|
||||
qemu_opts_validate(opts, be->opts, &local_err);
|
||||
if (local_err) {
|
||||
error_report_err(local_err);
|
||||
error_propagate(errp, local_err);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -151,14 +151,10 @@ void tpm_cleanup(void)
|
||||
* Initialize the TPM. Process the tpmdev command line options describing the
|
||||
* TPM backend.
|
||||
*/
|
||||
int tpm_init(void)
|
||||
void tpm_init(void)
|
||||
{
|
||||
if (qemu_opts_foreach(qemu_find_opts("tpmdev"),
|
||||
tpm_init_tpmdev, NULL, NULL)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
qemu_opts_foreach(qemu_find_opts("tpmdev"),
|
||||
tpm_init_tpmdev, NULL, &error_fatal);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -28,6 +28,7 @@
|
||||
#include <termios.h>
|
||||
#endif
|
||||
|
||||
#include "qapi/error.h"
|
||||
#include "qemu-common.h"
|
||||
#include "ui/console.h"
|
||||
#include "ui/input.h"
|
||||
@ -421,9 +422,8 @@ static void curses_keyboard_setup(void)
|
||||
keyboard_layout = "en-us";
|
||||
#endif
|
||||
if(keyboard_layout) {
|
||||
kbd_layout = init_keyboard_layout(name2keysym, keyboard_layout);
|
||||
if (!kbd_layout)
|
||||
exit(1);
|
||||
kbd_layout = init_keyboard_layout(name2keysym, keyboard_layout,
|
||||
&error_fatal);
|
||||
}
|
||||
}
|
||||
|
||||
|
40
ui/keymaps.c
40
ui/keymaps.c
@ -27,6 +27,7 @@
|
||||
#include "sysemu/sysemu.h"
|
||||
#include "trace.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "qapi/error.h"
|
||||
|
||||
struct keysym2code {
|
||||
uint32_t count;
|
||||
@ -79,10 +80,11 @@ static void add_keysym(char *line, int keysym, int keycode, kbd_layout_t *k)
|
||||
trace_keymap_add(keysym, keycode, line);
|
||||
}
|
||||
|
||||
static kbd_layout_t *parse_keyboard_layout(const name2keysym_t *table,
|
||||
const char *language,
|
||||
kbd_layout_t *k)
|
||||
static int parse_keyboard_layout(kbd_layout_t *k,
|
||||
const name2keysym_t *table,
|
||||
const char *language, Error **errp)
|
||||
{
|
||||
int ret;
|
||||
FILE *f;
|
||||
char * filename;
|
||||
char line[1024];
|
||||
@ -94,13 +96,8 @@ static kbd_layout_t *parse_keyboard_layout(const name2keysym_t *table,
|
||||
f = filename ? fopen(filename, "r") : NULL;
|
||||
g_free(filename);
|
||||
if (!f) {
|
||||
fprintf(stderr, "Could not read keymap file: '%s'\n", language);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!k) {
|
||||
k = g_new0(kbd_layout_t, 1);
|
||||
k->hash = g_hash_table_new(NULL, NULL);
|
||||
error_setg(errp, "could not read keymap file: '%s'", language);
|
||||
return -1;
|
||||
}
|
||||
|
||||
for(;;) {
|
||||
@ -118,7 +115,10 @@ static kbd_layout_t *parse_keyboard_layout(const name2keysym_t *table,
|
||||
continue;
|
||||
}
|
||||
if (!strncmp(line, "include ", 8)) {
|
||||
parse_keyboard_layout(table, line + 8, k);
|
||||
if (parse_keyboard_layout(k, table, line + 8, errp) < 0) {
|
||||
ret = -1;
|
||||
goto out;
|
||||
}
|
||||
} else {
|
||||
int offset = 0;
|
||||
while (line[offset] != 0 &&
|
||||
@ -164,15 +164,27 @@ static kbd_layout_t *parse_keyboard_layout(const name2keysym_t *table,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
out:
|
||||
fclose(f);
|
||||
return k;
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
kbd_layout_t *init_keyboard_layout(const name2keysym_t *table,
|
||||
const char *language)
|
||||
const char *language, Error **errp)
|
||||
{
|
||||
return parse_keyboard_layout(table, language, NULL);
|
||||
kbd_layout_t *k;
|
||||
|
||||
k = g_new0(kbd_layout_t, 1);
|
||||
k->hash = g_hash_table_new(NULL, NULL);
|
||||
if (parse_keyboard_layout(k, table, language, errp) < 0) {
|
||||
g_hash_table_unref(k->hash);
|
||||
g_free(k);
|
||||
return NULL;
|
||||
}
|
||||
return k;
|
||||
}
|
||||
|
||||
|
||||
|
@ -53,7 +53,7 @@ typedef struct {
|
||||
typedef struct kbd_layout_t kbd_layout_t;
|
||||
|
||||
kbd_layout_t *init_keyboard_layout(const name2keysym_t *table,
|
||||
const char *language);
|
||||
const char *language, Error **errp);
|
||||
int keysym2scancode(kbd_layout_t *k, int keysym,
|
||||
bool shift, bool altgr, bool ctrl);
|
||||
int keycode_is_keypad(kbd_layout_t *k, int keycode);
|
||||
|
6
ui/sdl.c
6
ui/sdl.c
@ -29,6 +29,7 @@
|
||||
#include <SDL.h>
|
||||
#include <SDL_syswm.h>
|
||||
|
||||
#include "qapi/error.h"
|
||||
#include "qemu-common.h"
|
||||
#include "qemu/cutils.h"
|
||||
#include "ui/console.h"
|
||||
@ -917,9 +918,8 @@ static void sdl1_display_init(DisplayState *ds, DisplayOptions *o)
|
||||
keyboard_layout = "en-us";
|
||||
#endif
|
||||
if(keyboard_layout) {
|
||||
kbd_layout = init_keyboard_layout(name2keysym, keyboard_layout);
|
||||
if (!kbd_layout)
|
||||
exit(1);
|
||||
kbd_layout = init_keyboard_layout(name2keysym, keyboard_layout,
|
||||
&error_fatal);
|
||||
}
|
||||
|
||||
g_printerr("Running QEMU with SDL 1.2 is deprecated, and will be removed\n"
|
||||
|
@ -597,9 +597,9 @@ static int add_channel(void *opaque, const char *name, const char *value,
|
||||
if (strcmp(name, "tls-channel") == 0) {
|
||||
int *tls_port = opaque;
|
||||
if (!*tls_port) {
|
||||
error_report("spice: tried to setup tls-channel"
|
||||
" without specifying a TLS port");
|
||||
exit(1);
|
||||
error_setg(errp, "spice: tried to setup tls-channel"
|
||||
" without specifying a TLS port");
|
||||
return -1;
|
||||
}
|
||||
security = SPICE_CHANNEL_SECURITY_SSL;
|
||||
}
|
||||
@ -615,8 +615,9 @@ static int add_channel(void *opaque, const char *name, const char *value,
|
||||
rc = spice_server_set_channel_security(spice_server, value, security);
|
||||
}
|
||||
if (rc != 0) {
|
||||
error_report("spice: failed to set channel security for %s", value);
|
||||
exit(1);
|
||||
error_setg(errp, "spice: failed to set channel security for %s",
|
||||
value);
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@ -787,7 +788,7 @@ void qemu_spice_init(void)
|
||||
spice_server_set_playback_compression
|
||||
(spice_server, qemu_opt_get_bool(opts, "playback-compression", 1));
|
||||
|
||||
qemu_opt_foreach(opts, add_channel, &tls_port, NULL);
|
||||
qemu_opt_foreach(opts, add_channel, &tls_port, &error_fatal);
|
||||
|
||||
spice_server_set_name(spice_server, qemu_name);
|
||||
spice_server_set_uuid(spice_server, (unsigned char *)&qemu_uuid);
|
||||
|
19
ui/vnc.c
19
ui/vnc.c
@ -3205,7 +3205,7 @@ static const DisplayChangeListenerOps dcl_ops = {
|
||||
.dpy_cursor_define = vnc_dpy_cursor_define,
|
||||
};
|
||||
|
||||
void vnc_display_init(const char *id)
|
||||
void vnc_display_init(const char *id, Error **errp)
|
||||
{
|
||||
VncDisplay *vd;
|
||||
|
||||
@ -3222,13 +3222,14 @@ void vnc_display_init(const char *id)
|
||||
|
||||
if (keyboard_layout) {
|
||||
trace_vnc_key_map_init(keyboard_layout);
|
||||
vd->kbd_layout = init_keyboard_layout(name2keysym, keyboard_layout);
|
||||
vd->kbd_layout = init_keyboard_layout(name2keysym,
|
||||
keyboard_layout, errp);
|
||||
} else {
|
||||
vd->kbd_layout = init_keyboard_layout(name2keysym, "en-us");
|
||||
vd->kbd_layout = init_keyboard_layout(name2keysym, "en-us", errp);
|
||||
}
|
||||
|
||||
if (!vd->kbd_layout) {
|
||||
exit(1);
|
||||
return;
|
||||
}
|
||||
|
||||
vd->share_policy = VNC_SHARE_POLICY_ALLOW_EXCLUSIVE;
|
||||
@ -4079,11 +4080,15 @@ int vnc_init_func(void *opaque, QemuOpts *opts, Error **errp)
|
||||
char *id = (char *)qemu_opts_id(opts);
|
||||
|
||||
assert(id);
|
||||
vnc_display_init(id);
|
||||
vnc_display_init(id, &local_err);
|
||||
if (local_err) {
|
||||
error_propagate(errp, local_err);
|
||||
return -1;
|
||||
}
|
||||
vnc_display_open(id, &local_err);
|
||||
if (local_err != NULL) {
|
||||
error_reportf_err(local_err, "Failed to start VNC server: ");
|
||||
exit(1);
|
||||
error_propagate(errp, local_err);
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
13
util/error.c
13
util/error.c
@ -292,3 +292,16 @@ void error_propagate(Error **dst_errp, Error *local_err)
|
||||
error_free(local_err);
|
||||
}
|
||||
}
|
||||
|
||||
void error_propagate_prepend(Error **dst_errp, Error *err,
|
||||
const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
if (dst_errp && !*dst_errp) {
|
||||
va_start(ap, fmt);
|
||||
error_vprepend(&err, fmt, ap);
|
||||
va_end(ap);
|
||||
} /* else error is being ignored, don't bother with prepending */
|
||||
error_propagate(dst_errp, err);
|
||||
}
|
||||
|
@ -194,7 +194,6 @@ bool enable_timestamp_msg;
|
||||
* Format arguments like vsprintf(). The resulting message should be
|
||||
* a single phrase, with no newline or trailing punctuation.
|
||||
* Prepend the current location and append a newline.
|
||||
* It's wrong to call this in a QMP monitor. Use error_setg() there.
|
||||
*/
|
||||
static void vreport(report_type type, const char *fmt, va_list ap)
|
||||
{
|
||||
@ -242,7 +241,6 @@ void error_vreport(const char *fmt, va_list ap)
|
||||
* Format arguments like vsprintf(). The resulting message should be
|
||||
* a single phrase, with no newline or trailing punctuation.
|
||||
* Prepend the current location and append a newline.
|
||||
* It's wrong to call this in a QMP monitor. Use error_setg() there.
|
||||
*/
|
||||
void warn_vreport(const char *fmt, va_list ap)
|
||||
{
|
||||
@ -255,7 +253,6 @@ void warn_vreport(const char *fmt, va_list ap)
|
||||
* Format arguments like vsprintf(). The resulting message should be
|
||||
* a single phrase, with no newline or trailing punctuation.
|
||||
* Prepend the current location and append a newline.
|
||||
* It's wrong to call this in a QMP monitor. Use error_setg() there.
|
||||
*/
|
||||
void info_vreport(const char *fmt, va_list ap)
|
||||
{
|
||||
@ -283,7 +280,6 @@ void error_report(const char *fmt, ...)
|
||||
* Format arguments like sprintf(). The resulting message should be a
|
||||
* single phrase, with no newline or trailing punctuation.
|
||||
* Prepend the current location and append a newline.
|
||||
* It's wrong to call this in a QMP monitor. Use error_setg() there.
|
||||
*/
|
||||
void warn_report(const char *fmt, ...)
|
||||
{
|
||||
@ -300,7 +296,6 @@ void warn_report(const char *fmt, ...)
|
||||
* Format arguments like sprintf(). The resulting message should be a
|
||||
* single phrase, with no newline or trailing punctuation.
|
||||
* Prepend the current location and append a newline.
|
||||
* It's wrong to call this in a QMP monitor. Use error_setg() there.
|
||||
*/
|
||||
void info_report(const char *fmt, ...)
|
||||
{
|
||||
|
140
vl.c
140
vl.c
@ -1093,12 +1093,12 @@ static int parse_add_fd(void *opaque, QemuOpts *opts, Error **errp)
|
||||
fd_opaque = qemu_opt_get(opts, "opaque");
|
||||
|
||||
if (fd < 0) {
|
||||
error_report("fd option is required and must be non-negative");
|
||||
error_setg(errp, "fd option is required and must be non-negative");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (fd <= STDERR_FILENO) {
|
||||
error_report("fd cannot be a standard I/O stream");
|
||||
error_setg(errp, "fd cannot be a standard I/O stream");
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -1108,12 +1108,12 @@ static int parse_add_fd(void *opaque, QemuOpts *opts, Error **errp)
|
||||
*/
|
||||
flags = fcntl(fd, F_GETFD);
|
||||
if (flags == -1 || (flags & FD_CLOEXEC)) {
|
||||
error_report("fd is not valid or already in use");
|
||||
error_setg(errp, "fd is not valid or already in use");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (fdset_id < 0) {
|
||||
error_report("set option is required and must be non-negative");
|
||||
error_setg(errp, "set option is required and must be non-negative");
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -1126,7 +1126,7 @@ static int parse_add_fd(void *opaque, QemuOpts *opts, Error **errp)
|
||||
}
|
||||
#endif
|
||||
if (dupfd == -1) {
|
||||
error_report("error duplicating fd: %s", strerror(errno));
|
||||
error_setg(errp, "error duplicating fd: %s", strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -1163,7 +1163,7 @@ static int drive_init_func(void *opaque, QemuOpts *opts, Error **errp)
|
||||
{
|
||||
BlockInterfaceType *block_default_type = opaque;
|
||||
|
||||
return drive_new(opts, *block_default_type) == NULL;
|
||||
return drive_new(opts, *block_default_type, errp) == NULL;
|
||||
}
|
||||
|
||||
static int drive_enable_snapshot(void *opaque, QemuOpts *opts, Error **errp)
|
||||
@ -1189,10 +1189,7 @@ static void default_drive(int enable, int snapshot, BlockInterfaceType type,
|
||||
drive_enable_snapshot(NULL, opts, NULL);
|
||||
}
|
||||
|
||||
dinfo = drive_new(opts, type);
|
||||
if (!dinfo) {
|
||||
exit(1);
|
||||
}
|
||||
dinfo = drive_new(opts, type, &error_abort);
|
||||
dinfo->is_default = true;
|
||||
|
||||
}
|
||||
@ -2036,15 +2033,10 @@ static void select_vgahw(const char *p)
|
||||
|
||||
static void parse_display_qapi(const char *optarg)
|
||||
{
|
||||
Error *err = NULL;
|
||||
DisplayOptions *opts;
|
||||
Visitor *v;
|
||||
|
||||
v = qobject_input_visitor_new_str(optarg, "type", &err);
|
||||
if (!v) {
|
||||
error_report_err(err);
|
||||
exit(1);
|
||||
}
|
||||
v = qobject_input_visitor_new_str(optarg, "type", &error_fatal);
|
||||
|
||||
visit_type_DisplayOptions(v, NULL, &opts, &error_fatal);
|
||||
QAPI_CLONE_MEMBERS(DisplayOptions, &dpy, opts);
|
||||
@ -2213,7 +2205,7 @@ static int parse_fw_cfg(void *opaque, QemuOpts *opts, Error **errp)
|
||||
FWCfgState *fw_cfg = (FWCfgState *) opaque;
|
||||
|
||||
if (fw_cfg == NULL) {
|
||||
error_report("fw_cfg device not available");
|
||||
error_setg(errp, "fw_cfg device not available");
|
||||
return -1;
|
||||
}
|
||||
name = qemu_opt_get(opts, "name");
|
||||
@ -2222,15 +2214,16 @@ static int parse_fw_cfg(void *opaque, QemuOpts *opts, Error **errp)
|
||||
|
||||
/* we need name and either a file or the content string */
|
||||
if (!(nonempty_str(name) && (nonempty_str(file) || nonempty_str(str)))) {
|
||||
error_report("invalid argument(s)");
|
||||
error_setg(errp, "invalid argument(s)");
|
||||
return -1;
|
||||
}
|
||||
if (nonempty_str(file) && nonempty_str(str)) {
|
||||
error_report("file and string are mutually exclusive");
|
||||
error_setg(errp, "file and string are mutually exclusive");
|
||||
return -1;
|
||||
}
|
||||
if (strlen(name) > FW_CFG_MAX_FILE_PATH - 1) {
|
||||
error_report("name too long (max. %d char)", FW_CFG_MAX_FILE_PATH - 1);
|
||||
error_setg(errp, "name too long (max. %d char)",
|
||||
FW_CFG_MAX_FILE_PATH - 1);
|
||||
return -1;
|
||||
}
|
||||
if (strncmp(name, "opt/", 4) != 0) {
|
||||
@ -2242,7 +2235,7 @@ static int parse_fw_cfg(void *opaque, QemuOpts *opts, Error **errp)
|
||||
buf = g_memdup(str, size);
|
||||
} else {
|
||||
if (!g_file_get_contents(file, &buf, &size, NULL)) {
|
||||
error_report("can't load %s", file);
|
||||
error_setg(errp, "can't load %s", file);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
@ -2260,12 +2253,10 @@ static int device_help_func(void *opaque, QemuOpts *opts, Error **errp)
|
||||
|
||||
static int device_init_func(void *opaque, QemuOpts *opts, Error **errp)
|
||||
{
|
||||
Error *err = NULL;
|
||||
DeviceState *dev;
|
||||
|
||||
dev = qdev_device_add(opts, &err);
|
||||
dev = qdev_device_add(opts, errp);
|
||||
if (!dev) {
|
||||
error_report_err(err);
|
||||
return -1;
|
||||
}
|
||||
object_unref(OBJECT(dev));
|
||||
@ -2278,7 +2269,7 @@ static int chardev_init_func(void *opaque, QemuOpts *opts, Error **errp)
|
||||
|
||||
if (!qemu_chr_new_from_opts(opts, &local_err)) {
|
||||
if (local_err) {
|
||||
error_report_err(local_err);
|
||||
error_propagate(errp, local_err);
|
||||
return -1;
|
||||
}
|
||||
exit(0);
|
||||
@ -2289,7 +2280,7 @@ static int chardev_init_func(void *opaque, QemuOpts *opts, Error **errp)
|
||||
#ifdef CONFIG_VIRTFS
|
||||
static int fsdev_init_func(void *opaque, QemuOpts *opts, Error **errp)
|
||||
{
|
||||
return qemu_fsdev_add(opts);
|
||||
return qemu_fsdev_add(opts, errp);
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -2309,8 +2300,8 @@ static int mon_init_func(void *opaque, QemuOpts *opts, Error **errp)
|
||||
} else if (strcmp(mode, "control") == 0) {
|
||||
flags = MONITOR_USE_CONTROL;
|
||||
} else {
|
||||
error_report("unknown monitor mode \"%s\"", mode);
|
||||
exit(1);
|
||||
error_setg(errp, "unknown monitor mode \"%s\"", mode);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (qemu_opt_get_bool(opts, "pretty", 0))
|
||||
@ -2324,8 +2315,8 @@ static int mon_init_func(void *opaque, QemuOpts *opts, Error **errp)
|
||||
chardev = qemu_opt_get(opts, "chardev");
|
||||
chr = qemu_chr_find(chardev);
|
||||
if (chr == NULL) {
|
||||
error_report("chardev \"%s\" not found", chardev);
|
||||
exit(1);
|
||||
error_setg(errp, "chardev \"%s\" not found", chardev);
|
||||
return -1;
|
||||
}
|
||||
|
||||
monitor_init(chr, flags);
|
||||
@ -2500,6 +2491,7 @@ static int debugcon_parse(const char *devname)
|
||||
QemuOpts *opts;
|
||||
|
||||
if (!qemu_chr_new_mux_mon("debugcon", devname)) {
|
||||
error_report("invalid character backend '%s'", devname);
|
||||
exit(1);
|
||||
}
|
||||
opts = qemu_opts_create(qemu_find_opts("device"), "debugcon", 1, NULL);
|
||||
@ -2715,7 +2707,7 @@ static int machine_set_property(void *opaque,
|
||||
g_free(qom_name);
|
||||
|
||||
if (local_err) {
|
||||
error_report_err(local_err);
|
||||
error_propagate(errp, local_err);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -4011,26 +4003,20 @@ int main(int argc, char **argv, char **envp)
|
||||
|
||||
#ifdef CONFIG_SECCOMP
|
||||
olist = qemu_find_opts_err("sandbox", NULL);
|
||||
if (olist && qemu_opts_foreach(olist, parse_sandbox, NULL, NULL)) {
|
||||
exit(1);
|
||||
if (olist) {
|
||||
qemu_opts_foreach(olist, parse_sandbox, NULL, &error_fatal);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (qemu_opts_foreach(qemu_find_opts("name"),
|
||||
parse_name, NULL, NULL)) {
|
||||
exit(1);
|
||||
}
|
||||
qemu_opts_foreach(qemu_find_opts("name"),
|
||||
parse_name, NULL, &error_fatal);
|
||||
|
||||
#ifndef _WIN32
|
||||
if (qemu_opts_foreach(qemu_find_opts("add-fd"),
|
||||
parse_add_fd, NULL, NULL)) {
|
||||
exit(1);
|
||||
}
|
||||
qemu_opts_foreach(qemu_find_opts("add-fd"),
|
||||
parse_add_fd, NULL, &error_fatal);
|
||||
|
||||
if (qemu_opts_foreach(qemu_find_opts("add-fd"),
|
||||
cleanup_add_fd, NULL, NULL)) {
|
||||
exit(1);
|
||||
}
|
||||
qemu_opts_foreach(qemu_find_opts("add-fd"),
|
||||
cleanup_add_fd, NULL, &error_fatal);
|
||||
#endif
|
||||
|
||||
current_machine = MACHINE(object_new(object_class_get_name(
|
||||
@ -4271,22 +4257,16 @@ int main(int argc, char **argv, char **envp)
|
||||
page_size_init();
|
||||
socket_init();
|
||||
|
||||
if (qemu_opts_foreach(qemu_find_opts("object"),
|
||||
user_creatable_add_opts_foreach,
|
||||
object_create_initial, NULL)) {
|
||||
exit(1);
|
||||
}
|
||||
qemu_opts_foreach(qemu_find_opts("object"),
|
||||
user_creatable_add_opts_foreach,
|
||||
object_create_initial, &error_fatal);
|
||||
|
||||
if (qemu_opts_foreach(qemu_find_opts("chardev"),
|
||||
chardev_init_func, NULL, NULL)) {
|
||||
exit(1);
|
||||
}
|
||||
qemu_opts_foreach(qemu_find_opts("chardev"),
|
||||
chardev_init_func, NULL, &error_fatal);
|
||||
|
||||
#ifdef CONFIG_VIRTFS
|
||||
if (qemu_opts_foreach(qemu_find_opts("fsdev"),
|
||||
fsdev_init_func, NULL, NULL)) {
|
||||
exit(1);
|
||||
}
|
||||
qemu_opts_foreach(qemu_find_opts("fsdev"),
|
||||
fsdev_init_func, NULL, &error_fatal);
|
||||
#endif
|
||||
|
||||
if (qemu_opts_foreach(qemu_find_opts("device"),
|
||||
@ -4295,11 +4275,8 @@ int main(int argc, char **argv, char **envp)
|
||||
}
|
||||
|
||||
machine_opts = qemu_get_machine_opts();
|
||||
if (qemu_opt_foreach(machine_opts, machine_set_property, current_machine,
|
||||
NULL)) {
|
||||
object_unref(OBJECT(current_machine));
|
||||
exit(1);
|
||||
}
|
||||
qemu_opt_foreach(machine_opts, machine_set_property, current_machine,
|
||||
&error_fatal);
|
||||
|
||||
configure_accelerator(current_machine);
|
||||
|
||||
@ -4404,15 +4381,11 @@ int main(int argc, char **argv, char **envp)
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (qemu_opts_foreach(qemu_find_opts("object"),
|
||||
user_creatable_add_opts_foreach,
|
||||
object_create_delayed, NULL)) {
|
||||
exit(1);
|
||||
}
|
||||
qemu_opts_foreach(qemu_find_opts("object"),
|
||||
user_creatable_add_opts_foreach,
|
||||
object_create_delayed, &error_fatal);
|
||||
|
||||
if (tpm_init() < 0) {
|
||||
exit(1);
|
||||
}
|
||||
tpm_init();
|
||||
|
||||
/* init the bluetooth world */
|
||||
if (foreach_device_config(DEV_BT, bt_parse))
|
||||
@ -4453,8 +4426,9 @@ int main(int argc, char **argv, char **envp)
|
||||
NULL, NULL);
|
||||
}
|
||||
if (qemu_opts_foreach(qemu_find_opts("drive"), drive_init_func,
|
||||
&machine_class->block_default_type, NULL)) {
|
||||
exit(1);
|
||||
&machine_class->block_default_type, &error_fatal)) {
|
||||
/* We printed help */
|
||||
exit(0);
|
||||
}
|
||||
|
||||
default_drive(default_cdrom, snapshot, machine_class->block_default_type, 2,
|
||||
@ -4462,10 +4436,8 @@ int main(int argc, char **argv, char **envp)
|
||||
default_drive(default_floppy, snapshot, IF_FLOPPY, 0, FD_OPTS);
|
||||
default_drive(default_sdcard, snapshot, IF_SD, 0, SD_OPTS);
|
||||
|
||||
if (qemu_opts_foreach(qemu_find_opts("mon"),
|
||||
mon_init_func, NULL, NULL)) {
|
||||
exit(1);
|
||||
}
|
||||
qemu_opts_foreach(qemu_find_opts("mon"),
|
||||
mon_init_func, NULL, &error_fatal);
|
||||
|
||||
if (foreach_device_config(DEV_SERIAL, serial_parse) < 0)
|
||||
exit(1);
|
||||
@ -4528,10 +4500,8 @@ int main(int argc, char **argv, char **envp)
|
||||
hax_sync_vcpus();
|
||||
}
|
||||
|
||||
if (qemu_opts_foreach(qemu_find_opts("fw_cfg"),
|
||||
parse_fw_cfg, fw_cfg_find(), NULL) != 0) {
|
||||
exit(1);
|
||||
}
|
||||
qemu_opts_foreach(qemu_find_opts("fw_cfg"),
|
||||
parse_fw_cfg, fw_cfg_find(), &error_fatal);
|
||||
|
||||
/* init USB devices */
|
||||
if (machine_usb(current_machine)) {
|
||||
@ -4544,10 +4514,8 @@ int main(int argc, char **argv, char **envp)
|
||||
|
||||
/* init generic devices */
|
||||
rom_set_order_override(FW_CFG_ORDER_OVERRIDE_DEVICE);
|
||||
if (qemu_opts_foreach(qemu_find_opts("device"),
|
||||
device_init_func, NULL, NULL)) {
|
||||
exit(1);
|
||||
}
|
||||
qemu_opts_foreach(qemu_find_opts("device"),
|
||||
device_init_func, NULL, &error_fatal);
|
||||
|
||||
cpu_synchronize_all_post_init();
|
||||
|
||||
@ -4583,7 +4551,7 @@ int main(int argc, char **argv, char **envp)
|
||||
/* init remote displays */
|
||||
#ifdef CONFIG_VNC
|
||||
qemu_opts_foreach(qemu_find_opts("vnc"),
|
||||
vnc_init_func, NULL, NULL);
|
||||
vnc_init_func, NULL, &error_fatal);
|
||||
#endif
|
||||
|
||||
if (using_spice) {
|
||||
|
Loading…
Reference in New Issue
Block a user