Error reporting patches for 2016-01-13
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABAgAGBQJWll18AAoJEDhwtADrkYZTLL8QAKB2zTF8/9QwIA46T/nNuQKV ZckiADC6Aeh0Ksu5DAS7fZmfgPDmlwYYCN3x5KGeKGKIIPiVrddEYwyHqa6eTCOu pbJBu5WeVamre8/9SH7u2VC/RMU0OZ+OhhJJf174Fc2mTALDtK1JJO4kXCzSUA5V Iop04YtliH5dnDhCdIHH2tByDLMf1Iaq8NYJ0xWb3btNGX6iIT8F3EsbD9rGiE1m c+F0qPRFDIrE+OseafrTHeKy/4D9biWnP9CmOGv49m+OxqYs33B26DhaIq41TvYv /1sECCz2GmIFbpL1B0MvxNjKtj08btrz4EkpU4YBHxK+8EhOX2nJdfrZEhcone7A c92esN8ATFbsG3AP1Vnt/dxG0YzQB8/azGP/MgVczYaj0m7WZ89etqendj1GeYAZ 2xXewICcmexBeMOodxthHxyQaUQ9oZyk8+sK5T9O6JKvb3uCHKJ6MeRwurHUEtL8 rzPLzKw8Tdalfa7AhQevVquH0QCmm4IEUC7xalHmfsFuqqTU95zfLa+DbdhzdIG+ KdRkCv4+yX8//kUM5LwiqSd7ruMDEMQPQz3pbegrKrUJDCcTt5TccZ6NxiccCpC3 6YXaUG2HqBNH5hznhR1Lf+gRdLeCW8WjI3fWHsAuyTGvl6z8qHm5/Q944UrIlJ8A Ea1BUSMwgFqx5xp6KYjB =OVhB -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/armbru/tags/pull-error-2016-01-13' into staging Error reporting patches for 2016-01-13 # gpg: Signature made Wed 13 Jan 2016 14:21:48 GMT using RSA key ID EB918653 # gpg: Good signature from "Markus Armbruster <armbru@redhat.com>" # gpg: aka "Markus Armbruster <armbru@pond.sub.org>" * remotes/armbru/tags/pull-error-2016-01-13: (41 commits) checkpatch: Detect newlines in error_report and other error functions error: Consistently name Error * objects err, and not errp s390/sclp: Simplify control flow in sclp_realize() hw/s390x: Rename local variables Error *l_err to just err error: Clean up errors with embedded newlines (again) vhdx: Fix "log that needs to be replayed" error message pci-assign: Clean up "Failed to assign" error messages vmdk: Clean up "Invalid extent lines" error message vmdk: Clean up control flow in vmdk_parse_extents() a bit error: Strip trailing '\n' from error string arguments (again) qemu-io qemu-nbd: Use error_report() etc. instead of fprintf() migration: Use error_reportf_err() instead of monitor_printf() spapr: Use error_reportf_err() error: Use error_prepend() where it makes obvious sense error: Use error_reportf_err() where it makes obvious sense error: Don't decorate original error message when adding to it error: New error_prepend(), error_reportf_err() test-throttle: Simplify qemu_init_main_loop() error handling qemu-nbd: Clean up "Failed to load snapshot" error message block: Clean up "Could not create temporary overlay" error message ... Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
17c8a21978
|
@ -258,9 +258,7 @@ void do_acpitable_option(const QemuOpts *opts)
|
||||||
|
|
||||||
acpi_table_add(opts, &err);
|
acpi_table_add(opts, &err);
|
||||||
if (err) {
|
if (err) {
|
||||||
error_report("Wrong acpi table provided: %s",
|
error_reportf_err(err, "Wrong acpi table provided: ");
|
||||||
error_get_pretty(err));
|
|
||||||
error_free(err);
|
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1806,9 +1806,6 @@ static void audio_init (void)
|
||||||
atexit (audio_atexit);
|
atexit (audio_atexit);
|
||||||
|
|
||||||
s->ts = timer_new_ns(QEMU_CLOCK_VIRTUAL, audio_timer, s);
|
s->ts = timer_new_ns(QEMU_CLOCK_VIRTUAL, audio_timer, s);
|
||||||
if (!s->ts) {
|
|
||||||
hw_error("Could not create audio timer\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
audio_process_options ("AUDIO", audio_options);
|
audio_process_options ("AUDIO", audio_options);
|
||||||
|
|
||||||
|
@ -1859,13 +1856,9 @@ static void audio_init (void)
|
||||||
|
|
||||||
if (!done) {
|
if (!done) {
|
||||||
done = !audio_driver_init (s, &no_audio_driver);
|
done = !audio_driver_init (s, &no_audio_driver);
|
||||||
if (!done) {
|
assert(done);
|
||||||
hw_error("Could not initialize audio subsystem\n");
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
dolog("warning: Using timer based audio emulation\n");
|
dolog("warning: Using timer based audio emulation\n");
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (conf.period.hertz <= 0) {
|
if (conf.period.hertz <= 0) {
|
||||||
if (conf.period.hertz < 0) {
|
if (conf.period.hertz < 0) {
|
||||||
|
|
20
block.c
20
block.c
|
@ -1349,12 +1349,10 @@ int bdrv_open_backing_file(BlockDriverState *bs, QDict *parent_options,
|
||||||
ret = bdrv_open_inherit(&backing_hd,
|
ret = bdrv_open_inherit(&backing_hd,
|
||||||
*backing_filename ? backing_filename : NULL,
|
*backing_filename ? backing_filename : NULL,
|
||||||
reference, options, 0, bs, &child_backing,
|
reference, options, 0, bs, &child_backing,
|
||||||
&local_err);
|
errp);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
bs->open_flags |= BDRV_O_NO_BACKING;
|
bs->open_flags |= BDRV_O_NO_BACKING;
|
||||||
error_setg(errp, "Could not open backing file: %s",
|
error_prepend(errp, "Could not open backing file: ");
|
||||||
error_get_pretty(local_err));
|
|
||||||
error_free(local_err);
|
|
||||||
goto free_exit;
|
goto free_exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1460,13 +1458,11 @@ int bdrv_append_temp_snapshot(BlockDriverState *bs, int flags, Error **errp)
|
||||||
opts = qemu_opts_create(bdrv_qcow2.create_opts, NULL, 0,
|
opts = qemu_opts_create(bdrv_qcow2.create_opts, NULL, 0,
|
||||||
&error_abort);
|
&error_abort);
|
||||||
qemu_opt_set_number(opts, BLOCK_OPT_SIZE, total_size, &error_abort);
|
qemu_opt_set_number(opts, BLOCK_OPT_SIZE, total_size, &error_abort);
|
||||||
ret = bdrv_create(&bdrv_qcow2, tmp_filename, opts, &local_err);
|
ret = bdrv_create(&bdrv_qcow2, tmp_filename, opts, errp);
|
||||||
qemu_opts_del(opts);
|
qemu_opts_del(opts);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
error_setg_errno(errp, -ret, "Could not create temporary overlay "
|
error_prepend(errp, "Could not create temporary overlay '%s': ",
|
||||||
"'%s': %s", tmp_filename,
|
tmp_filename);
|
||||||
error_get_pretty(local_err));
|
|
||||||
error_free(local_err);
|
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3730,9 +3726,9 @@ bool bdrv_op_is_blocked(BlockDriverState *bs, BlockOpType op, Error **errp)
|
||||||
if (!QLIST_EMPTY(&bs->op_blockers[op])) {
|
if (!QLIST_EMPTY(&bs->op_blockers[op])) {
|
||||||
blocker = QLIST_FIRST(&bs->op_blockers[op]);
|
blocker = QLIST_FIRST(&bs->op_blockers[op]);
|
||||||
if (errp) {
|
if (errp) {
|
||||||
error_setg(errp, "Node '%s' is busy: %s",
|
*errp = error_copy(blocker->reason);
|
||||||
bdrv_get_device_or_node_name(bs),
|
error_prepend(errp, "Node '%s' is busy: ",
|
||||||
error_get_pretty(blocker->reason));
|
bdrv_get_device_or_node_name(bs));
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1762,9 +1762,8 @@ static void qcow2_invalidate_cache(BlockDriverState *bs, Error **errp)
|
||||||
ret = qcow2_open(bs, options, flags, &local_err);
|
ret = qcow2_open(bs, options, flags, &local_err);
|
||||||
QDECREF(options);
|
QDECREF(options);
|
||||||
if (local_err) {
|
if (local_err) {
|
||||||
error_setg(errp, "Could not reopen qcow2 layer: %s",
|
error_propagate(errp, local_err);
|
||||||
error_get_pretty(local_err));
|
error_prepend(errp, "Could not reopen qcow2 layer: ");
|
||||||
error_free(local_err);
|
|
||||||
return;
|
return;
|
||||||
} else if (ret < 0) {
|
} else if (ret < 0) {
|
||||||
error_setg_errno(errp, -ret, "Could not reopen qcow2 layer");
|
error_setg_errno(errp, -ret, "Could not reopen qcow2 layer");
|
||||||
|
|
|
@ -1611,9 +1611,8 @@ static void bdrv_qed_invalidate_cache(BlockDriverState *bs, Error **errp)
|
||||||
memset(s, 0, sizeof(BDRVQEDState));
|
memset(s, 0, sizeof(BDRVQEDState));
|
||||||
ret = bdrv_qed_open(bs, NULL, bs->open_flags, &local_err);
|
ret = bdrv_qed_open(bs, NULL, bs->open_flags, &local_err);
|
||||||
if (local_err) {
|
if (local_err) {
|
||||||
error_setg(errp, "Could not reopen qed layer: %s",
|
error_propagate(errp, local_err);
|
||||||
error_get_pretty(local_err));
|
error_prepend(errp, "Could not reopen qed layer: ");
|
||||||
error_free(local_err);
|
|
||||||
return;
|
return;
|
||||||
} else if (ret < 0) {
|
} else if (ret < 0) {
|
||||||
error_setg_errno(errp, -ret, "Could not reopen qed layer");
|
error_setg_errno(errp, -ret, "Could not reopen qed layer");
|
||||||
|
|
|
@ -1861,8 +1861,7 @@ static int sd_create(const char *filename, QemuOpts *opts,
|
||||||
|
|
||||||
fd = connect_to_sdog(s, &local_err);
|
fd = connect_to_sdog(s, &local_err);
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
error_report("%s", error_get_pretty(local_err));
|
error_report_err(local_err);
|
||||||
error_free(local_err);
|
|
||||||
ret = -EIO;
|
ret = -EIO;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
@ -2406,9 +2405,8 @@ static int sd_snapshot_create(BlockDriverState *bs, QEMUSnapshotInfo *sn_info)
|
||||||
|
|
||||||
ret = do_sd_create(s, &new_vid, 1, &local_err);
|
ret = do_sd_create(s, &new_vid, 1, &local_err);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
error_report("failed to create inode for snapshot: %s",
|
error_reportf_err(local_err,
|
||||||
error_get_pretty(local_err));
|
"failed to create inode for snapshot: ");
|
||||||
error_free(local_err);
|
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -784,12 +784,13 @@ int vhdx_parse_log(BlockDriverState *bs, BDRVVHDXState *s, bool *flushed,
|
||||||
if (logs.valid) {
|
if (logs.valid) {
|
||||||
if (bs->read_only) {
|
if (bs->read_only) {
|
||||||
ret = -EPERM;
|
ret = -EPERM;
|
||||||
error_setg_errno(errp, EPERM,
|
error_setg(errp,
|
||||||
"VHDX image file '%s' opened read-only, but "
|
"VHDX image file '%s' opened read-only, but "
|
||||||
"contains a log that needs to be replayed. To "
|
"contains a log that needs to be replayed",
|
||||||
"replay the log, execute:\n qemu-img check -r "
|
bs->filename);
|
||||||
"all '%s'",
|
error_append_hint(errp, "To replay the log, run:\n"
|
||||||
bs->filename, bs->filename);
|
"qemu-img check -r all '%s'\n",
|
||||||
|
bs->filename);
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
/* now flush the log */
|
/* now flush the log */
|
||||||
|
|
48
block/vmdk.c
48
block/vmdk.c
|
@ -760,6 +760,17 @@ static int vmdk_open_sparse(BlockDriverState *bs, BdrvChild *file, int flags,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char *next_line(const char *s)
|
||||||
|
{
|
||||||
|
while (*s) {
|
||||||
|
if (*s == '\n') {
|
||||||
|
return s + 1;
|
||||||
|
}
|
||||||
|
s++;
|
||||||
|
}
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
static int vmdk_parse_extents(const char *desc, BlockDriverState *bs,
|
static int vmdk_parse_extents(const char *desc, BlockDriverState *bs,
|
||||||
const char *desc_file_path, QDict *options,
|
const char *desc_file_path, QDict *options,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
|
@ -769,7 +780,7 @@ static int vmdk_parse_extents(const char *desc, BlockDriverState *bs,
|
||||||
char access[11];
|
char access[11];
|
||||||
char type[11];
|
char type[11];
|
||||||
char fname[512];
|
char fname[512];
|
||||||
const char *p = desc;
|
const char *p, *np;
|
||||||
int64_t sectors = 0;
|
int64_t sectors = 0;
|
||||||
int64_t flat_offset;
|
int64_t flat_offset;
|
||||||
char *extent_path;
|
char *extent_path;
|
||||||
|
@ -779,7 +790,7 @@ static int vmdk_parse_extents(const char *desc, BlockDriverState *bs,
|
||||||
char extent_opt_prefix[32];
|
char extent_opt_prefix[32];
|
||||||
Error *local_err = NULL;
|
Error *local_err = NULL;
|
||||||
|
|
||||||
while (*p) {
|
for (p = desc; *p; p = next_line(p)) {
|
||||||
/* parse extent line in one of below formats:
|
/* parse extent line in one of below formats:
|
||||||
*
|
*
|
||||||
* RW [size in sectors] FLAT "file-name.vmdk" OFFSET
|
* RW [size in sectors] FLAT "file-name.vmdk" OFFSET
|
||||||
|
@ -791,29 +802,26 @@ static int vmdk_parse_extents(const char *desc, BlockDriverState *bs,
|
||||||
matches = sscanf(p, "%10s %" SCNd64 " %10s \"%511[^\n\r\"]\" %" SCNd64,
|
matches = sscanf(p, "%10s %" SCNd64 " %10s \"%511[^\n\r\"]\" %" SCNd64,
|
||||||
access, §ors, type, fname, &flat_offset);
|
access, §ors, type, fname, &flat_offset);
|
||||||
if (matches < 4 || strcmp(access, "RW")) {
|
if (matches < 4 || strcmp(access, "RW")) {
|
||||||
goto next_line;
|
continue;
|
||||||
} else if (!strcmp(type, "FLAT")) {
|
} else if (!strcmp(type, "FLAT")) {
|
||||||
if (matches != 5 || flat_offset < 0) {
|
if (matches != 5 || flat_offset < 0) {
|
||||||
error_setg(errp, "Invalid extent lines: \n%s", p);
|
goto invalid;
|
||||||
return -EINVAL;
|
|
||||||
}
|
}
|
||||||
} else if (!strcmp(type, "VMFS")) {
|
} else if (!strcmp(type, "VMFS")) {
|
||||||
if (matches == 4) {
|
if (matches == 4) {
|
||||||
flat_offset = 0;
|
flat_offset = 0;
|
||||||
} else {
|
} else {
|
||||||
error_setg(errp, "Invalid extent lines:\n%s", p);
|
goto invalid;
|
||||||
return -EINVAL;
|
|
||||||
}
|
}
|
||||||
} else if (matches != 4) {
|
} else if (matches != 4) {
|
||||||
error_setg(errp, "Invalid extent lines:\n%s", p);
|
goto invalid;
|
||||||
return -EINVAL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sectors <= 0 ||
|
if (sectors <= 0 ||
|
||||||
(strcmp(type, "FLAT") && strcmp(type, "SPARSE") &&
|
(strcmp(type, "FLAT") && strcmp(type, "SPARSE") &&
|
||||||
strcmp(type, "VMFS") && strcmp(type, "VMFSSPARSE")) ||
|
strcmp(type, "VMFS") && strcmp(type, "VMFSSPARSE")) ||
|
||||||
(strcmp(access, "RW"))) {
|
(strcmp(access, "RW"))) {
|
||||||
goto next_line;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!path_is_absolute(fname) && !path_has_protocol(fname) &&
|
if (!path_is_absolute(fname) && !path_has_protocol(fname) &&
|
||||||
|
@ -870,17 +878,17 @@ static int vmdk_parse_extents(const char *desc, BlockDriverState *bs,
|
||||||
return -ENOTSUP;
|
return -ENOTSUP;
|
||||||
}
|
}
|
||||||
extent->type = g_strdup(type);
|
extent->type = g_strdup(type);
|
||||||
next_line:
|
|
||||||
/* move to next line */
|
|
||||||
while (*p) {
|
|
||||||
if (*p == '\n') {
|
|
||||||
p++;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
p++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
invalid:
|
||||||
|
np = next_line(p);
|
||||||
|
assert(np != p);
|
||||||
|
if (np[-1] == '\n') {
|
||||||
|
np--;
|
||||||
|
}
|
||||||
|
error_setg(errp, "Invalid extent line: %.*s", (int)(np - p), p);
|
||||||
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int vmdk_open_desc_file(BlockDriverState *bs, int flags, char *buf,
|
static int vmdk_open_desc_file(BlockDriverState *bs, int flags, char *buf,
|
||||||
|
@ -1494,7 +1502,7 @@ static int vmdk_write(BlockDriverState *bs, int64_t sector_num,
|
||||||
|
|
||||||
if (sector_num > bs->total_sectors) {
|
if (sector_num > bs->total_sectors) {
|
||||||
error_report("Wrong offset: sector_num=0x%" PRIx64
|
error_report("Wrong offset: sector_num=0x%" PRIx64
|
||||||
" total_sectors=0x%" PRIx64 "\n",
|
" total_sectors=0x%" PRIx64,
|
||||||
sector_num, bs->total_sectors);
|
sector_num, bs->total_sectors);
|
||||||
return -EIO;
|
return -EIO;
|
||||||
}
|
}
|
||||||
|
|
12
blockdev.c
12
blockdev.c
|
@ -1582,13 +1582,11 @@ static void internal_snapshot_abort(BlkActionState *common)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bdrv_snapshot_delete(bs, sn->id_str, sn->name, &local_error) < 0) {
|
if (bdrv_snapshot_delete(bs, sn->id_str, sn->name, &local_error) < 0) {
|
||||||
error_report("Failed to delete snapshot with id '%s' and name '%s' on "
|
error_reportf_err(local_error,
|
||||||
"device '%s' in abort: %s",
|
"Failed to delete snapshot with id '%s' and "
|
||||||
sn->id_str,
|
"name '%s' on device '%s' in abort: ",
|
||||||
sn->name,
|
sn->id_str, sn->name,
|
||||||
bdrv_get_device_name(bs),
|
bdrv_get_device_name(bs));
|
||||||
error_get_pretty(local_error));
|
|
||||||
error_free(local_error);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -65,7 +65,7 @@ ivshmem_server_parse_args(IvshmemServerArgs *args, int argc, char *argv[])
|
||||||
{
|
{
|
||||||
int c;
|
int c;
|
||||||
unsigned long long v;
|
unsigned long long v;
|
||||||
Error *errp = NULL;
|
Error *err = NULL;
|
||||||
|
|
||||||
while ((c = getopt(argc, argv,
|
while ((c = getopt(argc, argv,
|
||||||
"h" /* help */
|
"h" /* help */
|
||||||
|
@ -104,11 +104,9 @@ ivshmem_server_parse_args(IvshmemServerArgs *args, int argc, char *argv[])
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'l': /* shm_size */
|
case 'l': /* shm_size */
|
||||||
parse_option_size("shm_size", optarg, &args->shm_size, &errp);
|
parse_option_size("shm_size", optarg, &args->shm_size, &err);
|
||||||
if (errp) {
|
if (err) {
|
||||||
fprintf(stderr, "cannot parse shm size: %s\n",
|
error_report_err(err);
|
||||||
error_get_pretty(errp));
|
|
||||||
error_free(errp);
|
|
||||||
ivshmem_server_usage(argv[0], 1);
|
ivshmem_server_usage(argv[0], 1);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
61
hmp.c
61
hmp.c
|
@ -41,8 +41,7 @@ static void hmp_handle_error(Monitor *mon, Error **errp)
|
||||||
{
|
{
|
||||||
assert(errp);
|
assert(errp);
|
||||||
if (*errp) {
|
if (*errp) {
|
||||||
monitor_printf(mon, "%s\n", error_get_pretty(*errp));
|
error_report_err(*errp);
|
||||||
error_free(*errp);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -556,8 +555,7 @@ void hmp_info_vnc(Monitor *mon, const QDict *qdict)
|
||||||
|
|
||||||
info = qmp_query_vnc(&err);
|
info = qmp_query_vnc(&err);
|
||||||
if (err) {
|
if (err) {
|
||||||
monitor_printf(mon, "%s\n", error_get_pretty(err));
|
error_report_err(err);
|
||||||
error_free(err);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -679,8 +677,7 @@ void hmp_info_balloon(Monitor *mon, const QDict *qdict)
|
||||||
|
|
||||||
info = qmp_query_balloon(&err);
|
info = qmp_query_balloon(&err);
|
||||||
if (err) {
|
if (err) {
|
||||||
monitor_printf(mon, "%s\n", error_get_pretty(err));
|
error_report_err(err);
|
||||||
error_free(err);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -948,8 +945,7 @@ void hmp_ringbuf_read(Monitor *mon, const QDict *qdict)
|
||||||
|
|
||||||
data = qmp_ringbuf_read(chardev, size, false, 0, &err);
|
data = qmp_ringbuf_read(chardev, size, false, 0, &err);
|
||||||
if (err) {
|
if (err) {
|
||||||
monitor_printf(mon, "%s\n", error_get_pretty(err));
|
error_report_err(err);
|
||||||
error_free(err);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1042,8 +1038,7 @@ void hmp_balloon(Monitor *mon, const QDict *qdict)
|
||||||
|
|
||||||
qmp_balloon(value, &err);
|
qmp_balloon(value, &err);
|
||||||
if (err) {
|
if (err) {
|
||||||
monitor_printf(mon, "balloon: %s\n", error_get_pretty(err));
|
error_report_err(err);
|
||||||
error_free(err);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1191,8 +1186,7 @@ void hmp_migrate_set_cache_size(Monitor *mon, const QDict *qdict)
|
||||||
|
|
||||||
qmp_migrate_set_cache_size(value, &err);
|
qmp_migrate_set_cache_size(value, &err);
|
||||||
if (err) {
|
if (err) {
|
||||||
monitor_printf(mon, "%s\n", error_get_pretty(err));
|
error_report_err(err);
|
||||||
error_free(err);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1229,9 +1223,7 @@ void hmp_migrate_set_capability(Monitor *mon, const QDict *qdict)
|
||||||
qapi_free_MigrationCapabilityStatusList(caps);
|
qapi_free_MigrationCapabilityStatusList(caps);
|
||||||
|
|
||||||
if (err) {
|
if (err) {
|
||||||
monitor_printf(mon, "migrate_set_capability: %s\n",
|
error_report_err(err);
|
||||||
error_get_pretty(err));
|
|
||||||
error_free(err);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1281,9 +1273,7 @@ void hmp_migrate_set_parameter(Monitor *mon, const QDict *qdict)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (err) {
|
if (err) {
|
||||||
monitor_printf(mon, "migrate_set_parameter: %s\n",
|
error_report_err(err);
|
||||||
error_get_pretty(err));
|
|
||||||
error_free(err);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1544,8 +1534,7 @@ void hmp_migrate(Monitor *mon, const QDict *qdict)
|
||||||
|
|
||||||
qmp_migrate(uri, !!blk, blk, !!inc, inc, false, false, &err);
|
qmp_migrate(uri, !!blk, blk, !!inc, inc, false, false, &err);
|
||||||
if (err) {
|
if (err) {
|
||||||
monitor_printf(mon, "migrate: %s\n", error_get_pretty(err));
|
error_report_err(err);
|
||||||
error_free(err);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2089,11 +2078,11 @@ void hmp_rocker(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
const char *name = qdict_get_str(qdict, "name");
|
const char *name = qdict_get_str(qdict, "name");
|
||||||
RockerSwitch *rocker;
|
RockerSwitch *rocker;
|
||||||
Error *errp = NULL;
|
Error *err = NULL;
|
||||||
|
|
||||||
rocker = qmp_query_rocker(name, &errp);
|
rocker = qmp_query_rocker(name, &err);
|
||||||
if (errp != NULL) {
|
if (err != NULL) {
|
||||||
hmp_handle_error(mon, &errp);
|
hmp_handle_error(mon, &err);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2108,11 +2097,11 @@ void hmp_rocker_ports(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
RockerPortList *list, *port;
|
RockerPortList *list, *port;
|
||||||
const char *name = qdict_get_str(qdict, "name");
|
const char *name = qdict_get_str(qdict, "name");
|
||||||
Error *errp = NULL;
|
Error *err = NULL;
|
||||||
|
|
||||||
list = qmp_query_rocker_ports(name, &errp);
|
list = qmp_query_rocker_ports(name, &err);
|
||||||
if (errp != NULL) {
|
if (err != NULL) {
|
||||||
hmp_handle_error(mon, &errp);
|
hmp_handle_error(mon, &err);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2137,11 +2126,11 @@ void hmp_rocker_of_dpa_flows(Monitor *mon, const QDict *qdict)
|
||||||
RockerOfDpaFlowList *list, *info;
|
RockerOfDpaFlowList *list, *info;
|
||||||
const char *name = qdict_get_str(qdict, "name");
|
const char *name = qdict_get_str(qdict, "name");
|
||||||
uint32_t tbl_id = qdict_get_try_int(qdict, "tbl_id", -1);
|
uint32_t tbl_id = qdict_get_try_int(qdict, "tbl_id", -1);
|
||||||
Error *errp = NULL;
|
Error *err = NULL;
|
||||||
|
|
||||||
list = qmp_query_rocker_of_dpa_flows(name, tbl_id != -1, tbl_id, &errp);
|
list = qmp_query_rocker_of_dpa_flows(name, tbl_id != -1, tbl_id, &err);
|
||||||
if (errp != NULL) {
|
if (err != NULL) {
|
||||||
hmp_handle_error(mon, &errp);
|
hmp_handle_error(mon, &err);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2287,12 +2276,12 @@ void hmp_rocker_of_dpa_groups(Monitor *mon, const QDict *qdict)
|
||||||
RockerOfDpaGroupList *list, *g;
|
RockerOfDpaGroupList *list, *g;
|
||||||
const char *name = qdict_get_str(qdict, "name");
|
const char *name = qdict_get_str(qdict, "name");
|
||||||
uint8_t type = qdict_get_try_int(qdict, "type", 9);
|
uint8_t type = qdict_get_try_int(qdict, "type", 9);
|
||||||
Error *errp = NULL;
|
Error *err = NULL;
|
||||||
bool set = false;
|
bool set = false;
|
||||||
|
|
||||||
list = qmp_query_rocker_of_dpa_groups(name, type != 9, type, &errp);
|
list = qmp_query_rocker_of_dpa_groups(name, type != 9, type, &err);
|
||||||
if (errp != NULL) {
|
if (err != NULL) {
|
||||||
hmp_handle_error(mon, &errp);
|
hmp_handle_error(mon, &err);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
#include "hw/loader.h"
|
#include "hw/loader.h"
|
||||||
#include "hw/boards.h"
|
#include "hw/boards.h"
|
||||||
#include "alpha_sys.h"
|
#include "alpha_sys.h"
|
||||||
|
#include "qemu/error-report.h"
|
||||||
#include "sysemu/sysemu.h"
|
#include "sysemu/sysemu.h"
|
||||||
#include "hw/timer/mc146818rtc.h"
|
#include "hw/timer/mc146818rtc.h"
|
||||||
#include "hw/ide.h"
|
#include "hw/ide.h"
|
||||||
|
@ -104,14 +105,14 @@ static void clipper_init(MachineState *machine)
|
||||||
palcode_filename = qemu_find_file(QEMU_FILE_TYPE_BIOS,
|
palcode_filename = qemu_find_file(QEMU_FILE_TYPE_BIOS,
|
||||||
bios_name ? bios_name : "palcode-clipper");
|
bios_name ? bios_name : "palcode-clipper");
|
||||||
if (palcode_filename == NULL) {
|
if (palcode_filename == NULL) {
|
||||||
hw_error("no palcode provided\n");
|
error_report("no palcode provided");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
size = load_elf(palcode_filename, cpu_alpha_superpage_to_phys,
|
size = load_elf(palcode_filename, cpu_alpha_superpage_to_phys,
|
||||||
NULL, &palcode_entry, &palcode_low, &palcode_high,
|
NULL, &palcode_entry, &palcode_low, &palcode_high,
|
||||||
0, EM_ALPHA, 0);
|
0, EM_ALPHA, 0);
|
||||||
if (size < 0) {
|
if (size < 0) {
|
||||||
hw_error("could not load palcode '%s'\n", palcode_filename);
|
error_report("could not load palcode '%s'", palcode_filename);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
g_free(palcode_filename);
|
g_free(palcode_filename);
|
||||||
|
@ -131,7 +132,7 @@ static void clipper_init(MachineState *machine)
|
||||||
NULL, &kernel_entry, &kernel_low, &kernel_high,
|
NULL, &kernel_entry, &kernel_low, &kernel_high,
|
||||||
0, EM_ALPHA, 0);
|
0, EM_ALPHA, 0);
|
||||||
if (size < 0) {
|
if (size < 0) {
|
||||||
hw_error("could not load kernel '%s'\n", kernel_filename);
|
error_report("could not load kernel '%s'", kernel_filename);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -148,7 +149,7 @@ static void clipper_init(MachineState *machine)
|
||||||
|
|
||||||
initrd_size = get_image_size(initrd_filename);
|
initrd_size = get_image_size(initrd_filename);
|
||||||
if (initrd_size < 0) {
|
if (initrd_size < 0) {
|
||||||
hw_error("could not load initial ram disk '%s'\n",
|
error_report("could not load initial ram disk '%s'",
|
||||||
initrd_filename);
|
initrd_filename);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
|
@ -920,7 +920,8 @@ PCIBus *typhoon_init(ram_addr_t ram_size, ISABus **isa_bus,
|
||||||
{
|
{
|
||||||
qemu_irq *isa_irqs;
|
qemu_irq *isa_irqs;
|
||||||
|
|
||||||
*isa_bus = isa_bus_new(NULL, get_system_memory(), &s->pchip.reg_io);
|
*isa_bus = isa_bus_new(NULL, get_system_memory(), &s->pchip.reg_io,
|
||||||
|
&error_abort);
|
||||||
isa_irqs = i8259_init(*isa_bus,
|
isa_irqs = i8259_init(*isa_bus,
|
||||||
qemu_allocate_irq(typhoon_set_isa_irq, s, 0));
|
qemu_allocate_irq(typhoon_set_isa_irq, s, 0));
|
||||||
isa_bus_irqs(*isa_bus, isa_irqs);
|
isa_bus_irqs(*isa_bus, isa_irqs);
|
||||||
|
|
|
@ -39,27 +39,26 @@ static void cubieboard_init(MachineState *machine)
|
||||||
|
|
||||||
object_property_set_int(OBJECT(&s->a10->emac), 1, "phy-addr", &err);
|
object_property_set_int(OBJECT(&s->a10->emac), 1, "phy-addr", &err);
|
||||||
if (err != NULL) {
|
if (err != NULL) {
|
||||||
error_report("Couldn't set phy address: %s", error_get_pretty(err));
|
error_reportf_err(err, "Couldn't set phy address: ");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
object_property_set_int(OBJECT(&s->a10->timer), 32768, "clk0-freq", &err);
|
object_property_set_int(OBJECT(&s->a10->timer), 32768, "clk0-freq", &err);
|
||||||
if (err != NULL) {
|
if (err != NULL) {
|
||||||
error_report("Couldn't set clk0 frequency: %s", error_get_pretty(err));
|
error_reportf_err(err, "Couldn't set clk0 frequency: ");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
object_property_set_int(OBJECT(&s->a10->timer), 24000000, "clk1-freq",
|
object_property_set_int(OBJECT(&s->a10->timer), 24000000, "clk1-freq",
|
||||||
&err);
|
&err);
|
||||||
if (err != NULL) {
|
if (err != NULL) {
|
||||||
error_report("Couldn't set clk1 frequency: %s", error_get_pretty(err));
|
error_reportf_err(err, "Couldn't set clk1 frequency: ");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
object_property_set_bool(OBJECT(s->a10), true, "realized", &err);
|
object_property_set_bool(OBJECT(s->a10), true, "realized", &err);
|
||||||
if (err != NULL) {
|
if (err != NULL) {
|
||||||
error_report("Couldn't realize Allwinner A10: %s",
|
error_reportf_err(err, "Couldn't realize Allwinner A10: ");
|
||||||
error_get_pretty(err));
|
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -64,8 +64,7 @@ static void digic4_board_init(DigicBoard *board)
|
||||||
s->digic = DIGIC(object_new(TYPE_DIGIC));
|
s->digic = DIGIC(object_new(TYPE_DIGIC));
|
||||||
object_property_set_bool(OBJECT(s->digic), true, "realized", &err);
|
object_property_set_bool(OBJECT(s->digic), true, "realized", &err);
|
||||||
if (err != NULL) {
|
if (err != NULL) {
|
||||||
error_report("Couldn't realize DIGIC SoC: %s",
|
error_reportf_err(err, "Couldn't realize DIGIC SoC: ");
|
||||||
error_get_pretty(err));
|
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -150,27 +150,18 @@ Exynos4210State *exynos4210_init(MemoryRegion *system_mem,
|
||||||
|
|
||||||
for (n = 0; n < EXYNOS4210_NCPUS; n++) {
|
for (n = 0; n < EXYNOS4210_NCPUS; n++) {
|
||||||
Object *cpuobj = object_new(object_class_get_name(cpu_oc));
|
Object *cpuobj = object_new(object_class_get_name(cpu_oc));
|
||||||
Error *err = NULL;
|
|
||||||
|
|
||||||
/* By default A9 CPUs have EL3 enabled. This board does not currently
|
/* By default A9 CPUs have EL3 enabled. This board does not currently
|
||||||
* support EL3 so the CPU EL3 property is disabled before realization.
|
* support EL3 so the CPU EL3 property is disabled before realization.
|
||||||
*/
|
*/
|
||||||
if (object_property_find(cpuobj, "has_el3", NULL)) {
|
if (object_property_find(cpuobj, "has_el3", NULL)) {
|
||||||
object_property_set_bool(cpuobj, false, "has_el3", &err);
|
object_property_set_bool(cpuobj, false, "has_el3", &error_fatal);
|
||||||
if (err) {
|
|
||||||
error_report_err(err);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
s->cpu[n] = ARM_CPU(cpuobj);
|
s->cpu[n] = ARM_CPU(cpuobj);
|
||||||
object_property_set_int(cpuobj, EXYNOS4210_SMP_PRIVATE_BASE_ADDR,
|
object_property_set_int(cpuobj, EXYNOS4210_SMP_PRIVATE_BASE_ADDR,
|
||||||
"reset-cbar", &error_abort);
|
"reset-cbar", &error_abort);
|
||||||
object_property_set_bool(cpuobj, true, "realized", &err);
|
object_property_set_bool(cpuobj, true, "realized", &error_fatal);
|
||||||
if (err) {
|
|
||||||
error_report_err(err);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*** IRQs ***/
|
/*** IRQs ***/
|
||||||
|
|
|
@ -279,7 +279,6 @@ static void calxeda_init(MachineState *machine, enum cxmachines machine_id)
|
||||||
ObjectClass *oc = cpu_class_by_name(TYPE_ARM_CPU, cpu_model);
|
ObjectClass *oc = cpu_class_by_name(TYPE_ARM_CPU, cpu_model);
|
||||||
Object *cpuobj;
|
Object *cpuobj;
|
||||||
ARMCPU *cpu;
|
ARMCPU *cpu;
|
||||||
Error *err = NULL;
|
|
||||||
|
|
||||||
cpuobj = object_new(object_class_get_name(oc));
|
cpuobj = object_new(object_class_get_name(oc));
|
||||||
cpu = ARM_CPU(cpuobj);
|
cpu = ARM_CPU(cpuobj);
|
||||||
|
@ -297,11 +296,7 @@ static void calxeda_init(MachineState *machine, enum cxmachines machine_id)
|
||||||
object_property_set_int(cpuobj, MPCORE_PERIPHBASE,
|
object_property_set_int(cpuobj, MPCORE_PERIPHBASE,
|
||||||
"reset-cbar", &error_abort);
|
"reset-cbar", &error_abort);
|
||||||
}
|
}
|
||||||
object_property_set_bool(cpuobj, true, "realized", &err);
|
object_property_set_bool(cpuobj, true, "realized", &error_fatal);
|
||||||
if (err) {
|
|
||||||
error_report_err(err);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
cpu_irq[n] = qdev_get_gpio_in(DEVICE(cpu), ARM_CPU_IRQ);
|
cpu_irq[n] = qdev_get_gpio_in(DEVICE(cpu), ARM_CPU_IRQ);
|
||||||
cpu_fiq[n] = qdev_get_gpio_in(DEVICE(cpu), ARM_CPU_FIQ);
|
cpu_fiq[n] = qdev_get_gpio_in(DEVICE(cpu), ARM_CPU_FIQ);
|
||||||
}
|
}
|
||||||
|
@ -320,11 +315,13 @@ static void calxeda_init(MachineState *machine, enum cxmachines machine_id)
|
||||||
sysboot_filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name);
|
sysboot_filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name);
|
||||||
if (sysboot_filename != NULL) {
|
if (sysboot_filename != NULL) {
|
||||||
if (load_image_targphys(sysboot_filename, 0xfff88000, 0x8000) < 0) {
|
if (load_image_targphys(sysboot_filename, 0xfff88000, 0x8000) < 0) {
|
||||||
hw_error("Unable to load %s\n", bios_name);
|
error_report("Unable to load %s", bios_name);
|
||||||
|
exit(1);
|
||||||
}
|
}
|
||||||
g_free(sysboot_filename);
|
g_free(sysboot_filename);
|
||||||
} else {
|
} else {
|
||||||
hw_error("Unable to find %s\n", bios_name);
|
error_report("Unable to find %s", bios_name);
|
||||||
|
exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -75,7 +75,7 @@ static void imx25_pdk_init(MachineState *machine)
|
||||||
|
|
||||||
object_property_set_bool(OBJECT(&s->soc), true, "realized", &err);
|
object_property_set_bool(OBJECT(&s->soc), true, "realized", &err);
|
||||||
if (err != NULL) {
|
if (err != NULL) {
|
||||||
error_report("%s", error_get_pretty(err));
|
error_report_err(err);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -533,7 +533,6 @@ static void integratorcp_init(MachineState *machine)
|
||||||
qemu_irq pic[32];
|
qemu_irq pic[32];
|
||||||
DeviceState *dev, *sic, *icp;
|
DeviceState *dev, *sic, *icp;
|
||||||
int i;
|
int i;
|
||||||
Error *err = NULL;
|
|
||||||
|
|
||||||
if (!cpu_model) {
|
if (!cpu_model) {
|
||||||
cpu_model = "arm926";
|
cpu_model = "arm926";
|
||||||
|
@ -552,18 +551,10 @@ static void integratorcp_init(MachineState *machine)
|
||||||
* realization.
|
* realization.
|
||||||
*/
|
*/
|
||||||
if (object_property_find(cpuobj, "has_el3", NULL)) {
|
if (object_property_find(cpuobj, "has_el3", NULL)) {
|
||||||
object_property_set_bool(cpuobj, false, "has_el3", &err);
|
object_property_set_bool(cpuobj, false, "has_el3", &error_fatal);
|
||||||
if (err) {
|
|
||||||
error_report_err(err);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
object_property_set_bool(cpuobj, true, "realized", &err);
|
object_property_set_bool(cpuobj, true, "realized", &error_fatal);
|
||||||
if (err) {
|
|
||||||
error_report_err(err);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
cpu = ARM_CPU(cpuobj);
|
cpu = ARM_CPU(cpuobj);
|
||||||
|
|
||||||
|
|
|
@ -74,7 +74,7 @@ static void kzm_init(MachineState *machine)
|
||||||
|
|
||||||
object_property_set_bool(OBJECT(&s->soc), true, "realized", &err);
|
object_property_set_bool(OBJECT(&s->soc), true, "realized", &err);
|
||||||
if (err != NULL) {
|
if (err != NULL) {
|
||||||
error_report("%s", error_get_pretty(err));
|
error_report_err(err);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -38,7 +38,7 @@ static void netduino2_init(MachineState *machine)
|
||||||
qdev_prop_set_string(dev, "cpu-model", "cortex-m3");
|
qdev_prop_set_string(dev, "cpu-model", "cortex-m3");
|
||||||
object_property_set_bool(OBJECT(dev), true, "realized", &err);
|
object_property_set_bool(OBJECT(dev), true, "realized", &err);
|
||||||
if (err != NULL) {
|
if (err != NULL) {
|
||||||
error_report("%s", error_get_pretty(err));
|
error_report_err(err);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -172,8 +172,8 @@ static void n8x0_nand_setup(struct n800_s *s)
|
||||||
qdev_prop_set_int32(s->nand, "shift", 1);
|
qdev_prop_set_int32(s->nand, "shift", 1);
|
||||||
dinfo = drive_get(IF_MTD, 0, 0);
|
dinfo = drive_get(IF_MTD, 0, 0);
|
||||||
if (dinfo) {
|
if (dinfo) {
|
||||||
qdev_prop_set_drive_nofail(s->nand, "drive",
|
qdev_prop_set_drive(s->nand, "drive", blk_by_legacy_dinfo(dinfo),
|
||||||
blk_by_legacy_dinfo(dinfo));
|
&error_fatal);
|
||||||
}
|
}
|
||||||
qdev_init_nofail(s->nand);
|
qdev_init_nofail(s->nand);
|
||||||
sysbus_connect_irq(SYS_BUS_DEVICE(s->nand), 0,
|
sysbus_connect_irq(SYS_BUS_DEVICE(s->nand), 0,
|
||||||
|
|
|
@ -99,33 +99,21 @@ static void realview_init(MachineState *machine,
|
||||||
|
|
||||||
for (n = 0; n < smp_cpus; n++) {
|
for (n = 0; n < smp_cpus; n++) {
|
||||||
Object *cpuobj = object_new(object_class_get_name(cpu_oc));
|
Object *cpuobj = object_new(object_class_get_name(cpu_oc));
|
||||||
Error *err = NULL;
|
|
||||||
|
|
||||||
/* By default A9,A15 and ARM1176 CPUs have EL3 enabled. This board
|
/* By default A9,A15 and ARM1176 CPUs have EL3 enabled. This board
|
||||||
* does not currently support EL3 so the CPU EL3 property is disabled
|
* does not currently support EL3 so the CPU EL3 property is disabled
|
||||||
* before realization.
|
* before realization.
|
||||||
*/
|
*/
|
||||||
if (object_property_find(cpuobj, "has_el3", NULL)) {
|
if (object_property_find(cpuobj, "has_el3", NULL)) {
|
||||||
object_property_set_bool(cpuobj, false, "has_el3", &err);
|
object_property_set_bool(cpuobj, false, "has_el3", &error_fatal);
|
||||||
if (err) {
|
|
||||||
error_report_err(err);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_pb && is_mpcore) {
|
if (is_pb && is_mpcore) {
|
||||||
object_property_set_int(cpuobj, periphbase, "reset-cbar", &err);
|
object_property_set_int(cpuobj, periphbase, "reset-cbar",
|
||||||
if (err) {
|
&error_fatal);
|
||||||
error_report_err(err);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
object_property_set_bool(cpuobj, true, "realized", &err);
|
object_property_set_bool(cpuobj, true, "realized", &error_fatal);
|
||||||
if (err) {
|
|
||||||
error_report_err(err);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
cpu_irq[n] = qdev_get_gpio_in(DEVICE(cpuobj), ARM_CPU_IRQ);
|
cpu_irq[n] = qdev_get_gpio_in(DEVICE(cpuobj), ARM_CPU_IRQ);
|
||||||
}
|
}
|
||||||
|
|
|
@ -192,7 +192,6 @@ static void versatile_init(MachineState *machine, int board_id)
|
||||||
int n;
|
int n;
|
||||||
int done_smc = 0;
|
int done_smc = 0;
|
||||||
DriveInfo *dinfo;
|
DriveInfo *dinfo;
|
||||||
Error *err = NULL;
|
|
||||||
|
|
||||||
if (!machine->cpu_model) {
|
if (!machine->cpu_model) {
|
||||||
machine->cpu_model = "arm926";
|
machine->cpu_model = "arm926";
|
||||||
|
@ -211,18 +210,10 @@ static void versatile_init(MachineState *machine, int board_id)
|
||||||
* realization.
|
* realization.
|
||||||
*/
|
*/
|
||||||
if (object_property_find(cpuobj, "has_el3", NULL)) {
|
if (object_property_find(cpuobj, "has_el3", NULL)) {
|
||||||
object_property_set_bool(cpuobj, false, "has_el3", &err);
|
object_property_set_bool(cpuobj, false, "has_el3", &error_fatal);
|
||||||
if (err) {
|
|
||||||
error_report_err(err);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
object_property_set_bool(cpuobj, true, "realized", &err);
|
object_property_set_bool(cpuobj, true, "realized", &error_fatal);
|
||||||
if (err) {
|
|
||||||
error_report_err(err);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
cpu = ARM_CPU(cpuobj);
|
cpu = ARM_CPU(cpuobj);
|
||||||
|
|
||||||
|
|
|
@ -211,7 +211,6 @@ static void init_cpus(const char *cpu_model, const char *privdev,
|
||||||
/* Create the actual CPUs */
|
/* Create the actual CPUs */
|
||||||
for (n = 0; n < smp_cpus; n++) {
|
for (n = 0; n < smp_cpus; n++) {
|
||||||
Object *cpuobj = object_new(object_class_get_name(cpu_oc));
|
Object *cpuobj = object_new(object_class_get_name(cpu_oc));
|
||||||
Error *err = NULL;
|
|
||||||
|
|
||||||
if (!secure) {
|
if (!secure) {
|
||||||
object_property_set_bool(cpuobj, false, "has_el3", NULL);
|
object_property_set_bool(cpuobj, false, "has_el3", NULL);
|
||||||
|
@ -221,11 +220,7 @@ static void init_cpus(const char *cpu_model, const char *privdev,
|
||||||
object_property_set_int(cpuobj, periphbase,
|
object_property_set_int(cpuobj, periphbase,
|
||||||
"reset-cbar", &error_abort);
|
"reset-cbar", &error_abort);
|
||||||
}
|
}
|
||||||
object_property_set_bool(cpuobj, true, "realized", &err);
|
object_property_set_bool(cpuobj, true, "realized", &error_fatal);
|
||||||
if (err) {
|
|
||||||
error_report_err(err);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Create the private peripheral devices (including the GIC);
|
/* Create the private peripheral devices (including the GIC);
|
||||||
|
|
|
@ -1200,9 +1200,8 @@ static void virt_set_gic_version(Object *obj, const char *value, Error **errp)
|
||||||
} else if (!strcmp(value, "host")) {
|
} else if (!strcmp(value, "host")) {
|
||||||
vms->gic_version = 0; /* Will probe later */
|
vms->gic_version = 0; /* Will probe later */
|
||||||
} else {
|
} else {
|
||||||
error_report("Invalid gic-version option value");
|
error_setg(errp, "Invalid gic-version value");
|
||||||
error_printf("Allowed gic-version values are: 3, 2, host\n");
|
error_append_hint(errp, "Valid values are 3, 2, host.\n");
|
||||||
exit(1);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -156,7 +156,6 @@ static void zynq_init(MachineState *machine)
|
||||||
DeviceState *dev;
|
DeviceState *dev;
|
||||||
SysBusDevice *busdev;
|
SysBusDevice *busdev;
|
||||||
qemu_irq pic[64];
|
qemu_irq pic[64];
|
||||||
Error *err = NULL;
|
|
||||||
int n;
|
int n;
|
||||||
|
|
||||||
if (!cpu_model) {
|
if (!cpu_model) {
|
||||||
|
@ -171,29 +170,14 @@ static void zynq_init(MachineState *machine)
|
||||||
* realization.
|
* realization.
|
||||||
*/
|
*/
|
||||||
if (object_property_find(OBJECT(cpu), "has_el3", NULL)) {
|
if (object_property_find(OBJECT(cpu), "has_el3", NULL)) {
|
||||||
object_property_set_bool(OBJECT(cpu), false, "has_el3", &err);
|
object_property_set_bool(OBJECT(cpu), false, "has_el3", &error_fatal);
|
||||||
if (err) {
|
|
||||||
error_report_err(err);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
object_property_set_int(OBJECT(cpu), ZYNQ_BOARD_MIDR, "midr", &err);
|
object_property_set_int(OBJECT(cpu), ZYNQ_BOARD_MIDR, "midr",
|
||||||
if (err) {
|
&error_fatal);
|
||||||
error_report_err(err);
|
object_property_set_int(OBJECT(cpu), MPCORE_PERIPHBASE, "reset-cbar",
|
||||||
exit(1);
|
&error_fatal);
|
||||||
}
|
object_property_set_bool(OBJECT(cpu), true, "realized", &error_fatal);
|
||||||
|
|
||||||
object_property_set_int(OBJECT(cpu), MPCORE_PERIPHBASE, "reset-cbar", &err);
|
|
||||||
if (err) {
|
|
||||||
error_report_err(err);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
object_property_set_bool(OBJECT(cpu), true, "realized", &err);
|
|
||||||
if (err) {
|
|
||||||
error_report_err(err);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* max 2GB ram */
|
/* max 2GB ram */
|
||||||
if (ram_size > 0x80000000) {
|
if (ram_size > 0x80000000) {
|
||||||
|
|
|
@ -41,7 +41,7 @@ static void xlnx_ep108_init(MachineState *machine)
|
||||||
|
|
||||||
object_property_set_bool(OBJECT(&s->soc), true, "realized", &err);
|
object_property_set_bool(OBJECT(&s->soc), true, "realized", &err);
|
||||||
if (err) {
|
if (err) {
|
||||||
error_report("%s", error_get_pretty(err));
|
error_report_err(err);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -227,7 +227,7 @@ static void xlnx_zynqmp_realize(DeviceState *dev, Error **errp)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!s->boot_cpu_ptr) {
|
if (!s->boot_cpu_ptr) {
|
||||||
error_setg(errp, "ZynqMP Boot cpu %s not found\n", boot_cpu);
|
error_setg(errp, "ZynqMP Boot cpu %s not found", boot_cpu);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -142,7 +142,6 @@ void virtio_blk_data_plane_create(VirtIODevice *vdev, VirtIOBlkConf *conf,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
VirtIOBlockDataPlane *s;
|
VirtIOBlockDataPlane *s;
|
||||||
Error *local_err = NULL;
|
|
||||||
BusState *qbus = BUS(qdev_get_parent_bus(DEVICE(vdev)));
|
BusState *qbus = BUS(qdev_get_parent_bus(DEVICE(vdev)));
|
||||||
VirtioBusClass *k = VIRTIO_BUS_GET_CLASS(qbus);
|
VirtioBusClass *k = VIRTIO_BUS_GET_CLASS(qbus);
|
||||||
|
|
||||||
|
@ -163,11 +162,8 @@ void virtio_blk_data_plane_create(VirtIODevice *vdev, VirtIOBlkConf *conf,
|
||||||
/* If dataplane is (re-)enabled while the guest is running there could be
|
/* If dataplane is (re-)enabled while the guest is running there could be
|
||||||
* block jobs that can conflict.
|
* block jobs that can conflict.
|
||||||
*/
|
*/
|
||||||
if (blk_op_is_blocked(conf->conf.blk, BLOCK_OP_TYPE_DATAPLANE,
|
if (blk_op_is_blocked(conf->conf.blk, BLOCK_OP_TYPE_DATAPLANE, errp)) {
|
||||||
&local_err)) {
|
error_prepend(errp, "cannot start dataplane thread: ");
|
||||||
error_setg(errp, "cannot start dataplane thread: %s",
|
|
||||||
error_get_pretty(local_err));
|
|
||||||
error_free(local_err);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2245,10 +2245,12 @@ ISADevice *fdctrl_init_isa(ISABus *bus, DriveInfo **fds)
|
||||||
dev = DEVICE(isadev);
|
dev = DEVICE(isadev);
|
||||||
|
|
||||||
if (fds[0]) {
|
if (fds[0]) {
|
||||||
qdev_prop_set_drive_nofail(dev, "driveA", blk_by_legacy_dinfo(fds[0]));
|
qdev_prop_set_drive(dev, "driveA", blk_by_legacy_dinfo(fds[0]),
|
||||||
|
&error_fatal);
|
||||||
}
|
}
|
||||||
if (fds[1]) {
|
if (fds[1]) {
|
||||||
qdev_prop_set_drive_nofail(dev, "driveB", blk_by_legacy_dinfo(fds[1]));
|
qdev_prop_set_drive(dev, "driveB", blk_by_legacy_dinfo(fds[1]),
|
||||||
|
&error_fatal);
|
||||||
}
|
}
|
||||||
qdev_init_nofail(dev);
|
qdev_init_nofail(dev);
|
||||||
|
|
||||||
|
@ -2268,10 +2270,12 @@ void fdctrl_init_sysbus(qemu_irq irq, int dma_chann,
|
||||||
fdctrl = &sys->state;
|
fdctrl = &sys->state;
|
||||||
fdctrl->dma_chann = dma_chann; /* FIXME */
|
fdctrl->dma_chann = dma_chann; /* FIXME */
|
||||||
if (fds[0]) {
|
if (fds[0]) {
|
||||||
qdev_prop_set_drive_nofail(dev, "driveA", blk_by_legacy_dinfo(fds[0]));
|
qdev_prop_set_drive(dev, "driveA", blk_by_legacy_dinfo(fds[0]),
|
||||||
|
&error_fatal);
|
||||||
}
|
}
|
||||||
if (fds[1]) {
|
if (fds[1]) {
|
||||||
qdev_prop_set_drive_nofail(dev, "driveB", blk_by_legacy_dinfo(fds[1]));
|
qdev_prop_set_drive(dev, "driveB", blk_by_legacy_dinfo(fds[1]),
|
||||||
|
&error_fatal);
|
||||||
}
|
}
|
||||||
qdev_init_nofail(dev);
|
qdev_init_nofail(dev);
|
||||||
sbd = SYS_BUS_DEVICE(dev);
|
sbd = SYS_BUS_DEVICE(dev);
|
||||||
|
@ -2287,7 +2291,8 @@ void sun4m_fdctrl_init(qemu_irq irq, hwaddr io_base,
|
||||||
|
|
||||||
dev = qdev_create(NULL, "SUNW,fdtwo");
|
dev = qdev_create(NULL, "SUNW,fdtwo");
|
||||||
if (fds[0]) {
|
if (fds[0]) {
|
||||||
qdev_prop_set_drive_nofail(dev, "drive", blk_by_legacy_dinfo(fds[0]));
|
qdev_prop_set_drive(dev, "drive", blk_by_legacy_dinfo(fds[0]),
|
||||||
|
&error_fatal);
|
||||||
}
|
}
|
||||||
qdev_init_nofail(dev);
|
qdev_init_nofail(dev);
|
||||||
sys = SYSBUS_FDC(dev);
|
sys = SYSBUS_FDC(dev);
|
||||||
|
|
|
@ -635,7 +635,7 @@ DeviceState *nand_init(BlockBackend *blk, int manf_id, int chip_id)
|
||||||
qdev_prop_set_uint8(dev, "manufacturer_id", manf_id);
|
qdev_prop_set_uint8(dev, "manufacturer_id", manf_id);
|
||||||
qdev_prop_set_uint8(dev, "chip_id", chip_id);
|
qdev_prop_set_uint8(dev, "chip_id", chip_id);
|
||||||
if (blk) {
|
if (blk) {
|
||||||
qdev_prop_set_drive_nofail(dev, "drive", blk);
|
qdev_prop_set_drive(dev, "drive", blk, &error_fatal);
|
||||||
}
|
}
|
||||||
|
|
||||||
qdev_init_nofail(dev);
|
qdev_init_nofail(dev);
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "hw/sysbus.h"
|
#include "hw/sysbus.h"
|
||||||
|
#include "qemu/error-report.h"
|
||||||
#include "sysemu/sysemu.h"
|
#include "sysemu/sysemu.h"
|
||||||
#include "sysemu/char.h"
|
#include "sysemu/char.h"
|
||||||
|
|
||||||
|
@ -595,15 +596,17 @@ DeviceState *exynos4210_uart_create(hwaddr addr,
|
||||||
|
|
||||||
if (!chr) {
|
if (!chr) {
|
||||||
if (channel >= MAX_SERIAL_PORTS) {
|
if (channel >= MAX_SERIAL_PORTS) {
|
||||||
hw_error("Only %d serial ports are supported by QEMU.\n",
|
error_report("Only %d serial ports are supported by QEMU",
|
||||||
MAX_SERIAL_PORTS);
|
MAX_SERIAL_PORTS);
|
||||||
|
exit(1);
|
||||||
}
|
}
|
||||||
chr = serial_hds[channel];
|
chr = serial_hds[channel];
|
||||||
if (!chr) {
|
if (!chr) {
|
||||||
snprintf(label, ARRAY_SIZE(label), "%s%d", chr_name, channel);
|
snprintf(label, ARRAY_SIZE(label), "%s%d", chr_name, channel);
|
||||||
chr = qemu_chr_new(label, "null", NULL);
|
chr = qemu_chr_new(label, "null", NULL);
|
||||||
if (!(chr)) {
|
if (!(chr)) {
|
||||||
hw_error("Can't assign serial port to UART%d.\n", channel);
|
error_report("Can't assign serial port to UART%d", channel);
|
||||||
|
exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -888,18 +888,13 @@ SerialState *serial_init(int base, qemu_irq irq, int baudbase,
|
||||||
CharDriverState *chr, MemoryRegion *system_io)
|
CharDriverState *chr, MemoryRegion *system_io)
|
||||||
{
|
{
|
||||||
SerialState *s;
|
SerialState *s;
|
||||||
Error *err = NULL;
|
|
||||||
|
|
||||||
s = g_malloc0(sizeof(SerialState));
|
s = g_malloc0(sizeof(SerialState));
|
||||||
|
|
||||||
s->irq = irq;
|
s->irq = irq;
|
||||||
s->baudbase = baudbase;
|
s->baudbase = baudbase;
|
||||||
s->chr = chr;
|
s->chr = chr;
|
||||||
serial_realize_core(s, &err);
|
serial_realize_core(s, &error_fatal);
|
||||||
if (err != NULL) {
|
|
||||||
error_report_err(err);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
vmstate_register(NULL, base, &vmstate_serial, s);
|
vmstate_register(NULL, base, &vmstate_serial, s);
|
||||||
|
|
||||||
|
@ -949,7 +944,6 @@ SerialState *serial_mm_init(MemoryRegion *address_space,
|
||||||
CharDriverState *chr, enum device_endian end)
|
CharDriverState *chr, enum device_endian end)
|
||||||
{
|
{
|
||||||
SerialState *s;
|
SerialState *s;
|
||||||
Error *err = NULL;
|
|
||||||
|
|
||||||
s = g_malloc0(sizeof(SerialState));
|
s = g_malloc0(sizeof(SerialState));
|
||||||
|
|
||||||
|
@ -958,11 +952,7 @@ SerialState *serial_mm_init(MemoryRegion *address_space,
|
||||||
s->baudbase = baudbase;
|
s->baudbase = baudbase;
|
||||||
s->chr = chr;
|
s->chr = chr;
|
||||||
|
|
||||||
serial_realize_core(s, &err);
|
serial_realize_core(s, &error_fatal);
|
||||||
if (err != NULL) {
|
|
||||||
error_report_err(err);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
vmstate_register(NULL, base, &vmstate_serial, s);
|
vmstate_register(NULL, base, &vmstate_serial, s);
|
||||||
|
|
||||||
memory_region_init_io(&s->io, NULL, &serial_mm_ops[end], s,
|
memory_region_init_io(&s->io, NULL, &serial_mm_ops[end], s,
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
|
|
||||||
struct do_nmi_s {
|
struct do_nmi_s {
|
||||||
int cpu_index;
|
int cpu_index;
|
||||||
Error *errp;
|
Error *err;
|
||||||
bool handled;
|
bool handled;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -40,8 +40,8 @@ static int do_nmi(Object *o, void *opaque)
|
||||||
NMIClass *nc = NMI_GET_CLASS(n);
|
NMIClass *nc = NMI_GET_CLASS(n);
|
||||||
|
|
||||||
ns->handled = true;
|
ns->handled = true;
|
||||||
nc->nmi_monitor_handler(n, ns->cpu_index, &ns->errp);
|
nc->nmi_monitor_handler(n, ns->cpu_index, &ns->err);
|
||||||
if (ns->errp) {
|
if (ns->err) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -59,13 +59,13 @@ void nmi_monitor_handle(int cpu_index, Error **errp)
|
||||||
{
|
{
|
||||||
struct do_nmi_s ns = {
|
struct do_nmi_s ns = {
|
||||||
.cpu_index = cpu_index,
|
.cpu_index = cpu_index,
|
||||||
.errp = NULL,
|
.err = NULL,
|
||||||
.handled = false
|
.handled = false
|
||||||
};
|
};
|
||||||
|
|
||||||
nmi_children(object_get_root(), &ns);
|
nmi_children(object_get_root(), &ns);
|
||||||
if (ns.handled) {
|
if (ns.handled) {
|
||||||
error_propagate(errp, ns.errp);
|
error_propagate(errp, ns.err);
|
||||||
} else {
|
} else {
|
||||||
error_setg(errp, QERR_UNSUPPORTED);
|
error_setg(errp, QERR_UNSUPPORTED);
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
|
|
||||||
#include "hw/platform-bus.h"
|
#include "hw/platform-bus.h"
|
||||||
#include "exec/address-spaces.h"
|
#include "exec/address-spaces.h"
|
||||||
|
#include "qemu/error-report.h"
|
||||||
#include "sysemu/sysemu.h"
|
#include "sysemu/sysemu.h"
|
||||||
|
|
||||||
|
|
||||||
|
@ -106,7 +107,7 @@ static void plaform_bus_refresh_irqs(PlatformBusDevice *pbus)
|
||||||
pbus->done_gathering = true;
|
pbus->done_gathering = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int platform_bus_map_irq(PlatformBusDevice *pbus, SysBusDevice *sbdev,
|
static void platform_bus_map_irq(PlatformBusDevice *pbus, SysBusDevice *sbdev,
|
||||||
int n)
|
int n)
|
||||||
{
|
{
|
||||||
int max_irqs = pbus->num_irqs;
|
int max_irqs = pbus->num_irqs;
|
||||||
|
@ -114,22 +115,20 @@ static int platform_bus_map_irq(PlatformBusDevice *pbus, SysBusDevice *sbdev,
|
||||||
|
|
||||||
if (sysbus_is_irq_connected(sbdev, n)) {
|
if (sysbus_is_irq_connected(sbdev, n)) {
|
||||||
/* IRQ is already mapped, nothing to do */
|
/* IRQ is already mapped, nothing to do */
|
||||||
return 0;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
irqn = find_first_zero_bit(pbus->used_irqs, max_irqs);
|
irqn = find_first_zero_bit(pbus->used_irqs, max_irqs);
|
||||||
if (irqn >= max_irqs) {
|
if (irqn >= max_irqs) {
|
||||||
hw_error("Platform Bus: Can not fit IRQ line");
|
error_report("Platform Bus: Can not fit IRQ line");
|
||||||
return -1;
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
set_bit(irqn, pbus->used_irqs);
|
set_bit(irqn, pbus->used_irqs);
|
||||||
sysbus_connect_irq(sbdev, n, pbus->irqs[irqn]);
|
sysbus_connect_irq(sbdev, n, pbus->irqs[irqn]);
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int platform_bus_map_mmio(PlatformBusDevice *pbus, SysBusDevice *sbdev,
|
static void platform_bus_map_mmio(PlatformBusDevice *pbus, SysBusDevice *sbdev,
|
||||||
int n)
|
int n)
|
||||||
{
|
{
|
||||||
MemoryRegion *sbdev_mr = sysbus_mmio_get_region(sbdev, n);
|
MemoryRegion *sbdev_mr = sysbus_mmio_get_region(sbdev, n);
|
||||||
|
@ -140,7 +139,7 @@ static int platform_bus_map_mmio(PlatformBusDevice *pbus, SysBusDevice *sbdev,
|
||||||
|
|
||||||
if (memory_region_is_mapped(sbdev_mr)) {
|
if (memory_region_is_mapped(sbdev_mr)) {
|
||||||
/* Region is already mapped, nothing to do */
|
/* Region is already mapped, nothing to do */
|
||||||
return 0;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -155,13 +154,13 @@ static int platform_bus_map_mmio(PlatformBusDevice *pbus, SysBusDevice *sbdev,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!found_region) {
|
if (!found_region) {
|
||||||
hw_error("Platform Bus: Can not fit MMIO region of size %"PRIx64, size);
|
error_report("Platform Bus: Can not fit MMIO region of size %"PRIx64,
|
||||||
|
size);
|
||||||
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Map the device's region into our Platform Bus MMIO space */
|
/* Map the device's region into our Platform Bus MMIO space */
|
||||||
memory_region_add_subregion(&pbus->mmio, off, sbdev_mr);
|
memory_region_add_subregion(&pbus->mmio, off, sbdev_mr);
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -364,18 +364,6 @@ void qdev_prop_set_drive(DeviceState *dev, const char *name,
|
||||||
name, errp);
|
name, errp);
|
||||||
}
|
}
|
||||||
|
|
||||||
void qdev_prop_set_drive_nofail(DeviceState *dev, const char *name,
|
|
||||||
BlockBackend *value)
|
|
||||||
{
|
|
||||||
Error *err = NULL;
|
|
||||||
|
|
||||||
qdev_prop_set_drive(dev, name, value, &err);
|
|
||||||
if (err) {
|
|
||||||
error_report_err(err);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void qdev_prop_set_chr(DeviceState *dev, const char *name,
|
void qdev_prop_set_chr(DeviceState *dev, const char *name,
|
||||||
CharDriverState *value)
|
CharDriverState *value)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1063,10 +1063,8 @@ static void qdev_prop_set_globals_for_type(DeviceState *dev,
|
||||||
object_property_parse(OBJECT(dev), prop->value, prop->property, &err);
|
object_property_parse(OBJECT(dev), prop->value, prop->property, &err);
|
||||||
if (err != NULL) {
|
if (err != NULL) {
|
||||||
assert(prop->user_provided);
|
assert(prop->user_provided);
|
||||||
error_report("Warning: global %s.%s=%s ignored (%s)",
|
error_reportf_err(err, "Warning: global %s.%s=%s ignored: ",
|
||||||
prop->driver, prop->property, prop->value,
|
prop->driver, prop->property, prop->value);
|
||||||
error_get_pretty(err));
|
|
||||||
error_free(err);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -370,9 +370,8 @@ void qdev_init_nofail(DeviceState *dev)
|
||||||
|
|
||||||
object_property_set_bool(OBJECT(dev), true, "realized", &err);
|
object_property_set_bool(OBJECT(dev), true, "realized", &err);
|
||||||
if (err) {
|
if (err) {
|
||||||
error_report("Initialization of device %s failed: %s",
|
error_reportf_err(err, "Initialization of device %s failed: ",
|
||||||
object_get_typename(OBJECT(dev)),
|
object_get_typename(OBJECT(dev)));
|
||||||
error_get_pretty(err));
|
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
#include "hw/hw.h"
|
#include "hw/hw.h"
|
||||||
#include "hw/arm/omap.h"
|
#include "hw/arm/omap.h"
|
||||||
#include "hw/sysbus.h"
|
#include "hw/sysbus.h"
|
||||||
|
#include "qemu/error-report.h"
|
||||||
|
|
||||||
struct omap_gpio_s {
|
struct omap_gpio_s {
|
||||||
qemu_irq irq;
|
qemu_irq irq;
|
||||||
|
@ -682,7 +683,8 @@ static int omap_gpio_init(SysBusDevice *sbd)
|
||||||
struct omap_gpif_s *s = OMAP1_GPIO(dev);
|
struct omap_gpif_s *s = OMAP1_GPIO(dev);
|
||||||
|
|
||||||
if (!s->clk) {
|
if (!s->clk) {
|
||||||
hw_error("omap-gpio: clk not connected\n");
|
error_report("omap-gpio: clk not connected");
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
qdev_init_gpio_in(dev, omap_gpio_set, 16);
|
qdev_init_gpio_in(dev, omap_gpio_set, 16);
|
||||||
qdev_init_gpio_out(dev, s->omap1.handler, 16);
|
qdev_init_gpio_out(dev, s->omap1.handler, 16);
|
||||||
|
@ -700,25 +702,35 @@ static int omap2_gpio_init(SysBusDevice *sbd)
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (!s->iclk) {
|
if (!s->iclk) {
|
||||||
hw_error("omap2-gpio: iclk not connected\n");
|
error_report("omap2-gpio: iclk not connected");
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
s->modulecount = s->mpu_model < omap2430 ? 4
|
||||||
|
: s->mpu_model < omap3430 ? 5
|
||||||
|
: 6;
|
||||||
|
|
||||||
|
for (i = 0; i < s->modulecount; i++) {
|
||||||
|
if (!s->fclk[i]) {
|
||||||
|
error_report("omap2-gpio: fclk%d not connected", i);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (s->mpu_model < omap3430) {
|
if (s->mpu_model < omap3430) {
|
||||||
s->modulecount = (s->mpu_model < omap2430) ? 4 : 5;
|
|
||||||
memory_region_init_io(&s->iomem, OBJECT(s), &omap2_gpif_top_ops, s,
|
memory_region_init_io(&s->iomem, OBJECT(s), &omap2_gpif_top_ops, s,
|
||||||
"omap2.gpio", 0x1000);
|
"omap2.gpio", 0x1000);
|
||||||
sysbus_init_mmio(sbd, &s->iomem);
|
sysbus_init_mmio(sbd, &s->iomem);
|
||||||
} else {
|
|
||||||
s->modulecount = 6;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
s->modules = g_new0(struct omap2_gpio_s, s->modulecount);
|
s->modules = g_new0(struct omap2_gpio_s, s->modulecount);
|
||||||
s->handler = g_new0(qemu_irq, s->modulecount * 32);
|
s->handler = g_new0(qemu_irq, s->modulecount * 32);
|
||||||
qdev_init_gpio_in(dev, omap2_gpio_set, s->modulecount * 32);
|
qdev_init_gpio_in(dev, omap2_gpio_set, s->modulecount * 32);
|
||||||
qdev_init_gpio_out(dev, s->handler, s->modulecount * 32);
|
qdev_init_gpio_out(dev, s->handler, s->modulecount * 32);
|
||||||
|
|
||||||
for (i = 0; i < s->modulecount; i++) {
|
for (i = 0; i < s->modulecount; i++) {
|
||||||
struct omap2_gpio_s *m = &s->modules[i];
|
struct omap2_gpio_s *m = &s->modules[i];
|
||||||
if (!s->fclk[i]) {
|
|
||||||
hw_error("omap2-gpio: fclk%d not connected\n", i);
|
|
||||||
}
|
|
||||||
m->revision = (s->mpu_model < omap3430) ? 0x18 : 0x25;
|
m->revision = (s->mpu_model < omap3430) ? 0x18 : 0x25;
|
||||||
m->handler = &s->handler[i * 32];
|
m->handler = &s->handler[i * 32];
|
||||||
sysbus_init_irq(sbd, &m->irq[0]); /* mpu irq */
|
sysbus_init_irq(sbd, &m->irq[0]); /* mpu irq */
|
||||||
|
@ -728,6 +740,7 @@ static int omap2_gpio_init(SysBusDevice *sbd)
|
||||||
"omap.gpio-module", 0x1000);
|
"omap.gpio-module", 0x1000);
|
||||||
sysbus_init_mmio(sbd, &m->iomem);
|
sysbus_init_mmio(sbd, &m->iomem);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
#include "hw/i2c/i2c.h"
|
#include "hw/i2c/i2c.h"
|
||||||
#include "hw/arm/omap.h"
|
#include "hw/arm/omap.h"
|
||||||
#include "hw/sysbus.h"
|
#include "hw/sysbus.h"
|
||||||
|
#include "qemu/error-report.h"
|
||||||
|
|
||||||
#define TYPE_OMAP_I2C "omap_i2c"
|
#define TYPE_OMAP_I2C "omap_i2c"
|
||||||
#define OMAP_I2C(obj) OBJECT_CHECK(OMAPI2CState, (obj), TYPE_OMAP_I2C)
|
#define OMAP_I2C(obj) OBJECT_CHECK(OMAPI2CState, (obj), TYPE_OMAP_I2C)
|
||||||
|
@ -449,12 +450,15 @@ static int omap_i2c_init(SysBusDevice *sbd)
|
||||||
OMAPI2CState *s = OMAP_I2C(dev);
|
OMAPI2CState *s = OMAP_I2C(dev);
|
||||||
|
|
||||||
if (!s->fclk) {
|
if (!s->fclk) {
|
||||||
hw_error("omap_i2c: fclk not connected\n");
|
error_report("omap_i2c: fclk not connected");
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
if (s->revision >= OMAP2_INTR_REV && !s->iclk) {
|
if (s->revision >= OMAP2_INTR_REV && !s->iclk) {
|
||||||
/* Note that OMAP1 doesn't have a separate interface clock */
|
/* Note that OMAP1 doesn't have a separate interface clock */
|
||||||
hw_error("omap_i2c: iclk not connected\n");
|
error_report("omap_i2c: iclk not connected");
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
sysbus_init_irq(sbd, &s->irq);
|
sysbus_init_irq(sbd, &s->irq);
|
||||||
sysbus_init_irq(sbd, &s->drq[0]);
|
sysbus_init_irq(sbd, &s->drq[0]);
|
||||||
sysbus_init_irq(sbd, &s->drq[1]);
|
sysbus_init_irq(sbd, &s->drq[1]);
|
||||||
|
|
|
@ -770,7 +770,7 @@ static char *assign_failed_examine(const AssignedDevice *dev)
|
||||||
"*** $ echo \"%04x:%02x:%02x.%x\" > /sys/bus/pci/drivers/"
|
"*** $ echo \"%04x:%02x:%02x.%x\" > /sys/bus/pci/drivers/"
|
||||||
"pci-stub/bind\n"
|
"pci-stub/bind\n"
|
||||||
"*** $ echo \"%04x %04x\" > /sys/bus/pci/drivers/pci-stub/remove_id\n"
|
"*** $ echo \"%04x %04x\" > /sys/bus/pci/drivers/pci-stub/remove_id\n"
|
||||||
"***",
|
"***\n",
|
||||||
ns, dev->host.domain, dev->host.bus, dev->host.slot,
|
ns, dev->host.domain, dev->host.bus, dev->host.slot,
|
||||||
dev->host.function, vendor_id, device_id,
|
dev->host.function, vendor_id, device_id,
|
||||||
dev->host.domain, dev->host.bus, dev->host.slot, dev->host.function,
|
dev->host.domain, dev->host.bus, dev->host.slot, dev->host.function,
|
||||||
|
@ -778,7 +778,7 @@ static char *assign_failed_examine(const AssignedDevice *dev)
|
||||||
dev->host.function, vendor_id, device_id);
|
dev->host.function, vendor_id, device_id);
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
return g_strdup("Couldn't find out why.");
|
return g_strdup("Couldn't find out why.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void assign_device(AssignedDevice *dev, Error **errp)
|
static void assign_device(AssignedDevice *dev, Error **errp)
|
||||||
|
@ -812,8 +812,9 @@ static void assign_device(AssignedDevice *dev, Error **errp)
|
||||||
char *cause;
|
char *cause;
|
||||||
|
|
||||||
cause = assign_failed_examine(dev);
|
cause = assign_failed_examine(dev);
|
||||||
error_setg_errno(errp, -r, "Failed to assign device \"%s\"\n%s",
|
error_setg_errno(errp, -r, "Failed to assign device \"%s\"",
|
||||||
dev->dev.qdev.id, cause);
|
dev->dev.qdev.id);
|
||||||
|
error_append_hint(errp, "%s", cause);
|
||||||
g_free(cause);
|
g_free(cause);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -912,11 +913,10 @@ retry:
|
||||||
dev->features |= ASSIGNED_DEVICE_PREFER_MSI_MASK;
|
dev->features |= ASSIGNED_DEVICE_PREFER_MSI_MASK;
|
||||||
goto retry;
|
goto retry;
|
||||||
}
|
}
|
||||||
error_setg_errno(errp, -r,
|
error_setg_errno(errp, -r, "Failed to assign irq for \"%s\"",
|
||||||
"Failed to assign irq for \"%s\"\n"
|
|
||||||
"Perhaps you are assigning a device "
|
|
||||||
"that shares an IRQ with another device?",
|
|
||||||
dev->dev.qdev.id);
|
dev->dev.qdev.id);
|
||||||
|
error_append_hint(errp, "Perhaps you are assigning a device "
|
||||||
|
"that shares an IRQ with another device?\n");
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
23
hw/i386/pc.c
23
hw/i386/pc.c
|
@ -377,8 +377,8 @@ ISADevice *pc_find_fdc0(void)
|
||||||
|
|
||||||
if (state.multiple) {
|
if (state.multiple) {
|
||||||
error_report("warning: multiple floppy disk controllers with "
|
error_report("warning: multiple floppy disk controllers with "
|
||||||
"iobase=0x3f0 have been found;\n"
|
"iobase=0x3f0 have been found");
|
||||||
"the one being picked for CMOS setup might not reflect "
|
error_printf("the one being picked for CMOS setup might not reflect "
|
||||||
"your intent");
|
"your intent");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -433,7 +433,6 @@ void pc_cmos_init(PCMachineState *pcms,
|
||||||
{
|
{
|
||||||
int val;
|
int val;
|
||||||
static pc_cmos_init_late_arg arg;
|
static pc_cmos_init_late_arg arg;
|
||||||
Error *local_err = NULL;
|
|
||||||
|
|
||||||
/* various important CMOS locations needed by PC/Bochs bios */
|
/* various important CMOS locations needed by PC/Bochs bios */
|
||||||
|
|
||||||
|
@ -481,11 +480,7 @@ void pc_cmos_init(PCMachineState *pcms,
|
||||||
object_property_set_link(OBJECT(pcms), OBJECT(s),
|
object_property_set_link(OBJECT(pcms), OBJECT(s),
|
||||||
"rtc_state", &error_abort);
|
"rtc_state", &error_abort);
|
||||||
|
|
||||||
set_boot_dev(s, MACHINE(pcms)->boot_order, &local_err);
|
set_boot_dev(s, MACHINE(pcms)->boot_order, &error_fatal);
|
||||||
if (local_err) {
|
|
||||||
error_report_err(local_err);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
val = 0;
|
val = 0;
|
||||||
val |= 0x02; /* FPU is there */
|
val |= 0x02; /* FPU is there */
|
||||||
|
@ -1123,7 +1118,6 @@ void pc_cpus_init(PCMachineState *pcms)
|
||||||
int i;
|
int i;
|
||||||
X86CPU *cpu = NULL;
|
X86CPU *cpu = NULL;
|
||||||
MachineState *machine = MACHINE(pcms);
|
MachineState *machine = MACHINE(pcms);
|
||||||
Error *error = NULL;
|
|
||||||
unsigned long apic_id_limit;
|
unsigned long apic_id_limit;
|
||||||
|
|
||||||
/* init CPUs */
|
/* init CPUs */
|
||||||
|
@ -1144,11 +1138,7 @@ void pc_cpus_init(PCMachineState *pcms)
|
||||||
|
|
||||||
for (i = 0; i < smp_cpus; i++) {
|
for (i = 0; i < smp_cpus; i++) {
|
||||||
cpu = pc_new_cpu(machine->cpu_model, x86_cpu_apic_id_from_index(i),
|
cpu = pc_new_cpu(machine->cpu_model, x86_cpu_apic_id_from_index(i),
|
||||||
&error);
|
&error_fatal);
|
||||||
if (error) {
|
|
||||||
error_report_err(error);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
object_unref(OBJECT(cpu));
|
object_unref(OBJECT(cpu));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1263,9 +1253,8 @@ void pc_acpi_init(const char *default_dsdt)
|
||||||
|
|
||||||
acpi_table_add_builtin(opts, &err);
|
acpi_table_add_builtin(opts, &err);
|
||||||
if (err) {
|
if (err) {
|
||||||
error_report("WARNING: failed to load %s: %s", filename,
|
error_reportf_err(err, "WARNING: failed to load %s: ",
|
||||||
error_get_pretty(err));
|
filename);
|
||||||
error_free(err);
|
|
||||||
}
|
}
|
||||||
g_free(filename);
|
g_free(filename);
|
||||||
}
|
}
|
||||||
|
|
|
@ -189,7 +189,8 @@ static void pc_init1(MachineState *machine,
|
||||||
} else {
|
} else {
|
||||||
pci_bus = NULL;
|
pci_bus = NULL;
|
||||||
i440fx_state = NULL;
|
i440fx_state = NULL;
|
||||||
isa_bus = isa_bus_new(NULL, get_system_memory(), system_io);
|
isa_bus = isa_bus_new(NULL, get_system_memory(), system_io,
|
||||||
|
&error_abort);
|
||||||
no_hpet = 1;
|
no_hpet = 1;
|
||||||
}
|
}
|
||||||
isa_bus_irqs(isa_bus, gsi);
|
isa_bus_irqs(isa_bus, gsi);
|
||||||
|
|
|
@ -118,7 +118,8 @@ IDEDevice *ide_create_drive(IDEBus *bus, int unit, DriveInfo *drive)
|
||||||
|
|
||||||
dev = qdev_create(&bus->qbus, drive->media_cd ? "ide-cd" : "ide-hd");
|
dev = qdev_create(&bus->qbus, drive->media_cd ? "ide-cd" : "ide-hd");
|
||||||
qdev_prop_set_uint32(dev, "unit", unit);
|
qdev_prop_set_uint32(dev, "unit", unit);
|
||||||
qdev_prop_set_drive_nofail(dev, "drive", blk_by_legacy_dinfo(drive));
|
qdev_prop_set_drive(dev, "drive", blk_by_legacy_dinfo(drive),
|
||||||
|
&error_fatal);
|
||||||
qdev_init_nofail(dev);
|
qdev_init_nofail(dev);
|
||||||
return DO_UPCAST(IDEDevice, qdev, dev);
|
return DO_UPCAST(IDEDevice, qdev, dev);
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
#include "hw/hw.h"
|
#include "hw/hw.h"
|
||||||
#include "hw/arm/omap.h"
|
#include "hw/arm/omap.h"
|
||||||
#include "hw/sysbus.h"
|
#include "hw/sysbus.h"
|
||||||
|
#include "qemu/error-report.h"
|
||||||
|
|
||||||
/* Interrupt Handlers */
|
/* Interrupt Handlers */
|
||||||
struct omap_intr_handler_bank_s {
|
struct omap_intr_handler_bank_s {
|
||||||
|
@ -367,7 +368,8 @@ static int omap_intc_init(SysBusDevice *sbd)
|
||||||
struct omap_intr_handler_s *s = OMAP_INTC(dev);
|
struct omap_intr_handler_s *s = OMAP_INTC(dev);
|
||||||
|
|
||||||
if (!s->iclk) {
|
if (!s->iclk) {
|
||||||
hw_error("omap-intc: clk not connected\n");
|
error_report("omap-intc: clk not connected");
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
s->nbanks = 1;
|
s->nbanks = 1;
|
||||||
sysbus_init_irq(sbd, &s->parent_intr[0]);
|
sysbus_init_irq(sbd, &s->parent_intr[0]);
|
||||||
|
@ -608,10 +610,12 @@ static int omap2_intc_init(SysBusDevice *sbd)
|
||||||
struct omap_intr_handler_s *s = OMAP_INTC(dev);
|
struct omap_intr_handler_s *s = OMAP_INTC(dev);
|
||||||
|
|
||||||
if (!s->iclk) {
|
if (!s->iclk) {
|
||||||
hw_error("omap2-intc: iclk not connected\n");
|
error_report("omap2-intc: iclk not connected");
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
if (!s->fclk) {
|
if (!s->fclk) {
|
||||||
hw_error("omap2-intc: fclk not connected\n");
|
error_report("omap2-intc: fclk not connected");
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
s->level_only = 1;
|
s->level_only = 1;
|
||||||
s->nbanks = 3;
|
s->nbanks = 3;
|
||||||
|
|
|
@ -75,7 +75,10 @@ static void i82378_realize(PCIDevice *pci, Error **errp)
|
||||||
pci_config_set_interrupt_pin(pci_conf, 1); /* interrupt pin 0 */
|
pci_config_set_interrupt_pin(pci_conf, 1); /* interrupt pin 0 */
|
||||||
|
|
||||||
isabus = isa_bus_new(dev, get_system_memory(),
|
isabus = isa_bus_new(dev, get_system_memory(),
|
||||||
pci_address_space_io(pci));
|
pci_address_space_io(pci), errp);
|
||||||
|
if (!isabus) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* This device has:
|
/* This device has:
|
||||||
2 82C59 (irq)
|
2 82C59 (irq)
|
||||||
|
|
|
@ -44,10 +44,10 @@ static const TypeInfo isa_bus_info = {
|
||||||
};
|
};
|
||||||
|
|
||||||
ISABus *isa_bus_new(DeviceState *dev, MemoryRegion* address_space,
|
ISABus *isa_bus_new(DeviceState *dev, MemoryRegion* address_space,
|
||||||
MemoryRegion *address_space_io)
|
MemoryRegion *address_space_io, Error **errp)
|
||||||
{
|
{
|
||||||
if (isabus) {
|
if (isabus) {
|
||||||
fprintf(stderr, "Can't create a second ISA bus\n");
|
error_setg(errp, "Can't create a second ISA bus");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
if (!dev) {
|
if (!dev) {
|
||||||
|
@ -63,9 +63,6 @@ ISABus *isa_bus_new(DeviceState *dev, MemoryRegion* address_space,
|
||||||
|
|
||||||
void isa_bus_irqs(ISABus *bus, qemu_irq *irqs)
|
void isa_bus_irqs(ISABus *bus, qemu_irq *irqs)
|
||||||
{
|
{
|
||||||
if (!bus) {
|
|
||||||
hw_error("Can't set isa irqs with no isa bus present.");
|
|
||||||
}
|
|
||||||
bus->irqs = irqs;
|
bus->irqs = irqs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -137,10 +134,6 @@ ISADevice *isa_create(ISABus *bus, const char *name)
|
||||||
{
|
{
|
||||||
DeviceState *dev;
|
DeviceState *dev;
|
||||||
|
|
||||||
if (!bus) {
|
|
||||||
hw_error("Tried to create isa device %s with no isa bus present.",
|
|
||||||
name);
|
|
||||||
}
|
|
||||||
dev = qdev_create(BUS(bus), name);
|
dev = qdev_create(BUS(bus), name);
|
||||||
return ISA_DEVICE(dev);
|
return ISA_DEVICE(dev);
|
||||||
}
|
}
|
||||||
|
@ -149,10 +142,6 @@ ISADevice *isa_try_create(ISABus *bus, const char *name)
|
||||||
{
|
{
|
||||||
DeviceState *dev;
|
DeviceState *dev;
|
||||||
|
|
||||||
if (!bus) {
|
|
||||||
hw_error("Tried to create isa device %s with no isa bus present.",
|
|
||||||
name);
|
|
||||||
}
|
|
||||||
dev = qdev_try_create(BUS(bus), name);
|
dev = qdev_try_create(BUS(bus), name);
|
||||||
return ISA_DEVICE(dev);
|
return ISA_DEVICE(dev);
|
||||||
}
|
}
|
||||||
|
|
|
@ -602,12 +602,16 @@ static void ich9_lpc_initfn(Object *obj)
|
||||||
ich9_lpc_add_properties(lpc);
|
ich9_lpc_add_properties(lpc);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ich9_lpc_init(PCIDevice *d)
|
static void ich9_lpc_realize(PCIDevice *d, Error **errp)
|
||||||
{
|
{
|
||||||
ICH9LPCState *lpc = ICH9_LPC_DEVICE(d);
|
ICH9LPCState *lpc = ICH9_LPC_DEVICE(d);
|
||||||
ISABus *isa_bus;
|
ISABus *isa_bus;
|
||||||
|
|
||||||
isa_bus = isa_bus_new(DEVICE(d), get_system_memory(), get_system_io());
|
isa_bus = isa_bus_new(DEVICE(d), get_system_memory(), get_system_io(),
|
||||||
|
errp);
|
||||||
|
if (!isa_bus) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
pci_set_long(d->wmask + ICH9_LPC_PMBASE,
|
pci_set_long(d->wmask + ICH9_LPC_PMBASE,
|
||||||
ICH9_LPC_PMBASE_BASE_ADDRESS_MASK);
|
ICH9_LPC_PMBASE_BASE_ADDRESS_MASK);
|
||||||
|
@ -628,7 +632,6 @@ static int ich9_lpc_init(PCIDevice *d)
|
||||||
memory_region_add_subregion_overlap(pci_address_space_io(d),
|
memory_region_add_subregion_overlap(pci_address_space_io(d),
|
||||||
ICH9_RST_CNT_IOPORT, &lpc->rst_cnt_mem,
|
ICH9_RST_CNT_IOPORT, &lpc->rst_cnt_mem,
|
||||||
1);
|
1);
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ich9_device_plug_cb(HotplugHandler *hotplug_dev,
|
static void ich9_device_plug_cb(HotplugHandler *hotplug_dev,
|
||||||
|
@ -706,7 +709,7 @@ static void ich9_lpc_class_init(ObjectClass *klass, void *data)
|
||||||
|
|
||||||
set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories);
|
set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories);
|
||||||
dc->reset = ich9_lpc_reset;
|
dc->reset = ich9_lpc_reset;
|
||||||
k->init = ich9_lpc_init;
|
k->realize = ich9_lpc_realize;
|
||||||
dc->vmsd = &vmstate_ich9_lpc;
|
dc->vmsd = &vmstate_ich9_lpc;
|
||||||
dc->props = ich9_lpc_properties;
|
dc->props = ich9_lpc_properties;
|
||||||
k->config_write = ich9_lpc_config_write;
|
k->config_write = ich9_lpc_config_write;
|
||||||
|
|
|
@ -324,14 +324,14 @@ static void pc87312_realize(DeviceState *dev, Error **errp)
|
||||||
/* FIXME use a qdev drive property instead of drive_get() */
|
/* FIXME use a qdev drive property instead of drive_get() */
|
||||||
drive = drive_get(IF_FLOPPY, 0, 0);
|
drive = drive_get(IF_FLOPPY, 0, 0);
|
||||||
if (drive != NULL) {
|
if (drive != NULL) {
|
||||||
qdev_prop_set_drive_nofail(d, "driveA",
|
qdev_prop_set_drive(d, "driveA", blk_by_legacy_dinfo(drive),
|
||||||
blk_by_legacy_dinfo(drive));
|
&error_fatal);
|
||||||
}
|
}
|
||||||
/* FIXME use a qdev drive property instead of drive_get() */
|
/* FIXME use a qdev drive property instead of drive_get() */
|
||||||
drive = drive_get(IF_FLOPPY, 0, 1);
|
drive = drive_get(IF_FLOPPY, 0, 1);
|
||||||
if (drive != NULL) {
|
if (drive != NULL) {
|
||||||
qdev_prop_set_drive_nofail(d, "driveB",
|
qdev_prop_set_drive(d, "driveB", blk_by_legacy_dinfo(drive),
|
||||||
blk_by_legacy_dinfo(drive));
|
&error_fatal);
|
||||||
}
|
}
|
||||||
qdev_init_nofail(d);
|
qdev_init_nofail(d);
|
||||||
s->fdc.dev = isa;
|
s->fdc.dev = isa;
|
||||||
|
|
|
@ -90,8 +90,10 @@ static void piix4_realize(PCIDevice *dev, Error **errp)
|
||||||
{
|
{
|
||||||
PIIX4State *d = PIIX4_PCI_DEVICE(dev);
|
PIIX4State *d = PIIX4_PCI_DEVICE(dev);
|
||||||
|
|
||||||
isa_bus_new(DEVICE(d), pci_address_space(dev),
|
if (!isa_bus_new(DEVICE(d), pci_address_space(dev),
|
||||||
pci_address_space_io(dev));
|
pci_address_space_io(dev), errp)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
piix4_dev = &d->dev;
|
piix4_dev = &d->dev;
|
||||||
qemu_register_reset(piix4_reset, d);
|
qemu_register_reset(piix4_reset, d);
|
||||||
}
|
}
|
||||||
|
|
|
@ -440,7 +440,10 @@ static void vt82c686b_realize(PCIDevice *d, Error **errp)
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
isa_bus = isa_bus_new(DEVICE(d), get_system_memory(),
|
isa_bus = isa_bus_new(DEVICE(d), get_system_memory(),
|
||||||
pci_address_space_io(d));
|
pci_address_space_io(d), errp);
|
||||||
|
if (!isa_bus) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
pci_conf = d->config;
|
pci_conf = d->config;
|
||||||
pci_config_set_prog_interface(pci_conf, 0x0);
|
pci_config_set_prog_interface(pci_conf, 0x0);
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
#include "hw/loader.h"
|
#include "hw/loader.h"
|
||||||
#include "elf.h"
|
#include "elf.h"
|
||||||
#include "exec/address-spaces.h"
|
#include "exec/address-spaces.h"
|
||||||
|
#include "qemu/error-report.h"
|
||||||
#include "sysemu/qtest.h"
|
#include "sysemu/qtest.h"
|
||||||
|
|
||||||
#define KERNEL_LOAD_ADDR 0x10000
|
#define KERNEL_LOAD_ADDR 0x10000
|
||||||
|
@ -39,7 +40,8 @@ static void an5206_init(MachineState *machine)
|
||||||
}
|
}
|
||||||
cpu = cpu_m68k_init(cpu_model);
|
cpu = cpu_m68k_init(cpu_model);
|
||||||
if (!cpu) {
|
if (!cpu) {
|
||||||
hw_error("Unable to find m68k CPU definition\n");
|
error_report("Unable to find m68k CPU definition");
|
||||||
|
exit(1);
|
||||||
}
|
}
|
||||||
env = &cpu->env;
|
env = &cpu->env;
|
||||||
|
|
||||||
|
|
|
@ -219,7 +219,7 @@ static void mips_jazz_init(MachineState *machine,
|
||||||
memory_region_init(isa_mem, NULL, "isa-mem", 0x01000000);
|
memory_region_init(isa_mem, NULL, "isa-mem", 0x01000000);
|
||||||
memory_region_add_subregion(address_space, 0x90000000, isa_io);
|
memory_region_add_subregion(address_space, 0x90000000, isa_io);
|
||||||
memory_region_add_subregion(address_space, 0x91000000, isa_mem);
|
memory_region_add_subregion(address_space, 0x91000000, isa_mem);
|
||||||
isa_bus = isa_bus_new(NULL, isa_mem, isa_io);
|
isa_bus = isa_bus_new(NULL, isa_mem, isa_io, &error_abort);
|
||||||
|
|
||||||
/* ISA devices */
|
/* ISA devices */
|
||||||
i8259 = i8259_init(isa_bus, env->irq[4]);
|
i8259 = i8259_init(isa_bus, env->irq[4]);
|
||||||
|
|
|
@ -272,7 +272,7 @@ void mips_r4k_init(MachineState *machine)
|
||||||
memory_region_init(isa_mem, NULL, "isa-mem", 0x01000000);
|
memory_region_init(isa_mem, NULL, "isa-mem", 0x01000000);
|
||||||
memory_region_add_subregion(get_system_memory(), 0x14000000, isa_io);
|
memory_region_add_subregion(get_system_memory(), 0x14000000, isa_io);
|
||||||
memory_region_add_subregion(get_system_memory(), 0x10000000, isa_mem);
|
memory_region_add_subregion(get_system_memory(), 0x10000000, isa_mem);
|
||||||
isa_bus = isa_bus_new(NULL, isa_mem, get_system_io());
|
isa_bus = isa_bus_new(NULL, isa_mem, get_system_io(), &error_abort);
|
||||||
|
|
||||||
/* The PIC is attached to the MIPS CPU INT0 pin */
|
/* The PIC is attached to the MIPS CPU INT0 pin */
|
||||||
i8259 = i8259_init(isa_bus, env->irq[2]);
|
i8259 = i8259_init(isa_bus, env->irq[2]);
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
#include "hw/sysbus.h"
|
#include "hw/sysbus.h"
|
||||||
#include "net/net.h"
|
#include "net/net.h"
|
||||||
#include "hw/cris/etraxfs.h"
|
#include "hw/cris/etraxfs.h"
|
||||||
|
#include "qemu/error-report.h"
|
||||||
|
|
||||||
#define D(x)
|
#define D(x)
|
||||||
|
|
||||||
|
@ -589,7 +590,8 @@ static int fs_eth_init(SysBusDevice *sbd)
|
||||||
ETRAXFSEthState *s = ETRAX_FS_ETH(dev);
|
ETRAXFSEthState *s = ETRAX_FS_ETH(dev);
|
||||||
|
|
||||||
if (!s->dma_out || !s->dma_in) {
|
if (!s->dma_out || !s->dma_in) {
|
||||||
hw_error("Unconnected ETRAX-FS Ethernet MAC.\n");
|
error_report("Unconnected ETRAX-FS Ethernet MAC");
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
s->dma_out->client.push = eth_tx_push;
|
s->dma_out->client.push = eth_tx_push;
|
||||||
|
|
|
@ -651,8 +651,10 @@ static void piix3_realize(PCIDevice *dev, Error **errp)
|
||||||
{
|
{
|
||||||
PIIX3State *d = PIIX3_PCI_DEVICE(dev);
|
PIIX3State *d = PIIX3_PCI_DEVICE(dev);
|
||||||
|
|
||||||
isa_bus_new(DEVICE(d), get_system_memory(),
|
if (!isa_bus_new(DEVICE(d), get_system_memory(),
|
||||||
pci_address_space_io(dev));
|
pci_address_space_io(dev), errp)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
memory_region_init_io(&d->rcr_mem, OBJECT(dev), &rcr_ops, d,
|
memory_region_init_io(&d->rcr_mem, OBJECT(dev), &rcr_ops, d,
|
||||||
"piix3-reset-control", 1);
|
"piix3-reset-control", 1);
|
||||||
|
|
|
@ -326,6 +326,7 @@ static void raven_realize(PCIDevice *d, Error **errp)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (bios_size < 0 || bios_size > BIOS_SIZE) {
|
if (bios_size < 0 || bios_size > BIOS_SIZE) {
|
||||||
|
/* FIXME should error_setg() */
|
||||||
hw_error("qemu: could not load bios image '%s'\n", s->bios_name);
|
hw_error("qemu: could not load bios image '%s'\n", s->bios_name);
|
||||||
}
|
}
|
||||||
g_free(filename);
|
g_free(filename);
|
||||||
|
@ -355,8 +356,9 @@ static void raven_class_init(ObjectClass *klass, void *data)
|
||||||
dc->desc = "PReP Host Bridge - Motorola Raven";
|
dc->desc = "PReP Host Bridge - Motorola Raven";
|
||||||
dc->vmsd = &vmstate_raven;
|
dc->vmsd = &vmstate_raven;
|
||||||
/*
|
/*
|
||||||
* PCI-facing part of the host bridge, not usable without the
|
* Reason: PCI-facing part of the host bridge, not usable without
|
||||||
* host-facing part, which can't be device_add'ed, yet.
|
* the host-facing part, which can't be device_add'ed, yet.
|
||||||
|
* Reason: realize() method uses hw_error().
|
||||||
*/
|
*/
|
||||||
dc->cannot_instantiate_with_device_add_yet = true;
|
dc->cannot_instantiate_with_device_add_yet = true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -751,8 +751,8 @@ static qemu_irq *ppce500_init_mpic(MachineState *machine, PPCE500Params *params,
|
||||||
dev = ppce500_init_mpic_kvm(params, irqs, &err);
|
dev = ppce500_init_mpic_kvm(params, irqs, &err);
|
||||||
}
|
}
|
||||||
if (machine_kernel_irqchip_required(machine) && !dev) {
|
if (machine_kernel_irqchip_required(machine) && !dev) {
|
||||||
error_report("kernel_irqchip requested but unavailable: %s",
|
error_reportf_err(err,
|
||||||
error_get_pretty(err));
|
"kernel_irqchip requested but unavailable: ");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,6 +62,7 @@
|
||||||
#include "hw/ide.h"
|
#include "hw/ide.h"
|
||||||
#include "hw/loader.h"
|
#include "hw/loader.h"
|
||||||
#include "elf.h"
|
#include "elf.h"
|
||||||
|
#include "qemu/error-report.h"
|
||||||
#include "sysemu/kvm.h"
|
#include "sysemu/kvm.h"
|
||||||
#include "kvm_ppc.h"
|
#include "kvm_ppc.h"
|
||||||
#include "hw/usb.h"
|
#include "hw/usb.h"
|
||||||
|
@ -226,7 +227,7 @@ static void ppc_core99_init(MachineState *machine)
|
||||||
bios_size = -1;
|
bios_size = -1;
|
||||||
}
|
}
|
||||||
if (bios_size < 0 || bios_size > BIOS_SIZE) {
|
if (bios_size < 0 || bios_size > BIOS_SIZE) {
|
||||||
hw_error("qemu: could not load PowerPC bios '%s'\n", bios_name);
|
error_report("could not load PowerPC bios '%s'", bios_name);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -252,7 +253,7 @@ static void ppc_core99_init(MachineState *machine)
|
||||||
kernel_base,
|
kernel_base,
|
||||||
ram_size - kernel_base);
|
ram_size - kernel_base);
|
||||||
if (kernel_size < 0) {
|
if (kernel_size < 0) {
|
||||||
hw_error("qemu: could not load kernel '%s'\n", kernel_filename);
|
error_report("could not load kernel '%s'", kernel_filename);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
/* load initrd */
|
/* load initrd */
|
||||||
|
@ -261,7 +262,7 @@ static void ppc_core99_init(MachineState *machine)
|
||||||
initrd_size = load_image_targphys(initrd_filename, initrd_base,
|
initrd_size = load_image_targphys(initrd_filename, initrd_base,
|
||||||
ram_size - initrd_base);
|
ram_size - initrd_base);
|
||||||
if (initrd_size < 0) {
|
if (initrd_size < 0) {
|
||||||
hw_error("qemu: could not load initial ram disk '%s'\n",
|
error_report("could not load initial ram disk '%s'",
|
||||||
initrd_filename);
|
initrd_filename);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
@ -344,7 +345,7 @@ static void ppc_core99_init(MachineState *machine)
|
||||||
break;
|
break;
|
||||||
#endif /* defined(TARGET_PPC64) */
|
#endif /* defined(TARGET_PPC64) */
|
||||||
default:
|
default:
|
||||||
hw_error("Bus model not supported on mac99 machine\n");
|
error_report("Bus model not supported on mac99 machine");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,6 +38,7 @@
|
||||||
#include "hw/ide.h"
|
#include "hw/ide.h"
|
||||||
#include "hw/loader.h"
|
#include "hw/loader.h"
|
||||||
#include "elf.h"
|
#include "elf.h"
|
||||||
|
#include "qemu/error-report.h"
|
||||||
#include "sysemu/kvm.h"
|
#include "sysemu/kvm.h"
|
||||||
#include "kvm_ppc.h"
|
#include "kvm_ppc.h"
|
||||||
#include "sysemu/block-backend.h"
|
#include "sysemu/block-backend.h"
|
||||||
|
@ -153,7 +154,7 @@ static void ppc_heathrow_init(MachineState *machine)
|
||||||
bios_size = -1;
|
bios_size = -1;
|
||||||
}
|
}
|
||||||
if (bios_size < 0 || bios_size > BIOS_SIZE) {
|
if (bios_size < 0 || bios_size > BIOS_SIZE) {
|
||||||
hw_error("qemu: could not load PowerPC bios '%s'\n", bios_name);
|
error_report("could not load PowerPC bios '%s'", bios_name);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -178,8 +179,7 @@ static void ppc_heathrow_init(MachineState *machine)
|
||||||
kernel_base,
|
kernel_base,
|
||||||
ram_size - kernel_base);
|
ram_size - kernel_base);
|
||||||
if (kernel_size < 0) {
|
if (kernel_size < 0) {
|
||||||
hw_error("qemu: could not load kernel '%s'\n",
|
error_report("could not load kernel '%s'", kernel_filename);
|
||||||
kernel_filename);
|
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
/* load initrd */
|
/* load initrd */
|
||||||
|
@ -188,7 +188,7 @@ static void ppc_heathrow_init(MachineState *machine)
|
||||||
initrd_size = load_image_targphys(initrd_filename, initrd_base,
|
initrd_size = load_image_targphys(initrd_filename, initrd_base,
|
||||||
ram_size - initrd_base);
|
ram_size - initrd_base);
|
||||||
if (initrd_size < 0) {
|
if (initrd_size < 0) {
|
||||||
hw_error("qemu: could not load initial ram disk '%s'\n",
|
error_report("could not load initial ram disk '%s'",
|
||||||
initrd_filename);
|
initrd_filename);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
@ -246,7 +246,8 @@ static void ppc_heathrow_init(MachineState *machine)
|
||||||
((qemu_irq *)env->irq_inputs)[PPC6xx_INPUT_INT];
|
((qemu_irq *)env->irq_inputs)[PPC6xx_INPUT_INT];
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
hw_error("Bus model not supported on OldWorld Mac machine\n");
|
error_report("Bus model not supported on OldWorld Mac machine");
|
||||||
|
exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -259,7 +260,8 @@ static void ppc_heathrow_init(MachineState *machine)
|
||||||
|
|
||||||
/* init basic PC hardware */
|
/* init basic PC hardware */
|
||||||
if (PPC_INPUT(env) != PPC_FLAGS_INPUT_6xx) {
|
if (PPC_INPUT(env) != PPC_FLAGS_INPUT_6xx) {
|
||||||
hw_error("Only 6xx bus is supported on heathrow machine\n");
|
error_report("Only 6xx bus is supported on heathrow machine");
|
||||||
|
exit(1);
|
||||||
}
|
}
|
||||||
pic = heathrow_pic_init(&pic_mem, 1, heathrow_irqs);
|
pic = heathrow_pic_init(&pic_mem, 1, heathrow_irqs);
|
||||||
pci_bus = pci_grackle_init(0xfec00000, pic,
|
pci_bus = pci_grackle_init(0xfec00000, pic,
|
||||||
|
|
|
@ -33,6 +33,7 @@
|
||||||
#include "hw/pci/pci_host.h"
|
#include "hw/pci/pci_host.h"
|
||||||
#include "hw/ppc/ppc.h"
|
#include "hw/ppc/ppc.h"
|
||||||
#include "hw/boards.h"
|
#include "hw/boards.h"
|
||||||
|
#include "qemu/error-report.h"
|
||||||
#include "qemu/log.h"
|
#include "qemu/log.h"
|
||||||
#include "hw/ide.h"
|
#include "hw/ide.h"
|
||||||
#include "hw/loader.h"
|
#include "hw/loader.h"
|
||||||
|
@ -532,7 +533,7 @@ static void ppc_prep_init(MachineState *machine)
|
||||||
kernel_size = load_image_targphys(kernel_filename, kernel_base,
|
kernel_size = load_image_targphys(kernel_filename, kernel_base,
|
||||||
ram_size - kernel_base);
|
ram_size - kernel_base);
|
||||||
if (kernel_size < 0) {
|
if (kernel_size < 0) {
|
||||||
hw_error("qemu: could not load kernel '%s'\n", kernel_filename);
|
error_report("could not load kernel '%s'", kernel_filename);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
/* load initrd */
|
/* load initrd */
|
||||||
|
@ -541,8 +542,9 @@ static void ppc_prep_init(MachineState *machine)
|
||||||
initrd_size = load_image_targphys(initrd_filename, initrd_base,
|
initrd_size = load_image_targphys(initrd_filename, initrd_base,
|
||||||
ram_size - initrd_base);
|
ram_size - initrd_base);
|
||||||
if (initrd_size < 0) {
|
if (initrd_size < 0) {
|
||||||
hw_error("qemu: could not load initial ram disk '%s'\n",
|
error_report("could not load initial ram disk '%s'",
|
||||||
initrd_filename);
|
initrd_filename);
|
||||||
|
exit(1);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
initrd_base = 0;
|
initrd_base = 0;
|
||||||
|
@ -569,7 +571,8 @@ static void ppc_prep_init(MachineState *machine)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PPC_INPUT(env) != PPC_FLAGS_INPUT_6xx) {
|
if (PPC_INPUT(env) != PPC_FLAGS_INPUT_6xx) {
|
||||||
hw_error("Only 6xx bus is supported on PREP machine\n");
|
error_report("Only 6xx bus is supported on PREP machine");
|
||||||
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
dev = qdev_create(NULL, "raven-pcihost");
|
dev = qdev_create(NULL, "raven-pcihost");
|
||||||
|
|
|
@ -122,11 +122,12 @@ static XICSState *xics_system_init(MachineState *machine,
|
||||||
icp = try_create_xics(TYPE_KVM_XICS, nr_servers, nr_irqs, &err);
|
icp = try_create_xics(TYPE_KVM_XICS, nr_servers, nr_irqs, &err);
|
||||||
}
|
}
|
||||||
if (machine_kernel_irqchip_required(machine) && !icp) {
|
if (machine_kernel_irqchip_required(machine) && !icp) {
|
||||||
error_report("kernel_irqchip requested but unavailable: %s",
|
error_reportf_err(err,
|
||||||
error_get_pretty(err));
|
"kernel_irqchip requested but unavailable: ");
|
||||||
}
|
} else {
|
||||||
error_free(err);
|
error_free(err);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!icp) {
|
if (!icp) {
|
||||||
icp = try_create_xics(TYPE_XICS, nr_servers, nr_irqs, &error_abort);
|
icp = try_create_xics(TYPE_XICS, nr_servers, nr_irqs, &error_abort);
|
||||||
|
@ -1216,7 +1217,8 @@ static void spapr_create_nvram(sPAPRMachineState *spapr)
|
||||||
DriveInfo *dinfo = drive_get(IF_PFLASH, 0, 0);
|
DriveInfo *dinfo = drive_get(IF_PFLASH, 0, 0);
|
||||||
|
|
||||||
if (dinfo) {
|
if (dinfo) {
|
||||||
qdev_prop_set_drive_nofail(dev, "drive", blk_by_legacy_dinfo(dinfo));
|
qdev_prop_set_drive(dev, "drive", blk_by_legacy_dinfo(dinfo),
|
||||||
|
&error_fatal);
|
||||||
}
|
}
|
||||||
|
|
||||||
qdev_init_nofail(dev);
|
qdev_init_nofail(dev);
|
||||||
|
@ -1834,7 +1836,8 @@ static void ppc_spapr_init(MachineState *machine)
|
||||||
ram_addr_t hotplug_mem_size = machine->maxram_size - machine->ram_size;
|
ram_addr_t hotplug_mem_size = machine->maxram_size - machine->ram_size;
|
||||||
|
|
||||||
if (machine->ram_slots > SPAPR_MAX_RAM_SLOTS) {
|
if (machine->ram_slots > SPAPR_MAX_RAM_SLOTS) {
|
||||||
error_report("Specified number of memory slots %"PRIu64" exceeds max supported %d\n",
|
error_report("Specified number of memory slots %" PRIu64
|
||||||
|
" exceeds max supported %d",
|
||||||
machine->ram_slots, SPAPR_MAX_RAM_SLOTS);
|
machine->ram_slots, SPAPR_MAX_RAM_SLOTS);
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
|
@ -465,8 +465,7 @@ static void realize(DeviceState *d, Error **errp)
|
||||||
object_property_add_alias(root_container, link_name,
|
object_property_add_alias(root_container, link_name,
|
||||||
drc->owner, child_name, &err);
|
drc->owner, child_name, &err);
|
||||||
if (err) {
|
if (err) {
|
||||||
error_report("%s", error_get_pretty(err));
|
error_report_err(err);
|
||||||
error_free(err);
|
|
||||||
object_unref(OBJECT(drc));
|
object_unref(OBJECT(drc));
|
||||||
}
|
}
|
||||||
g_free(child_name);
|
g_free(child_name);
|
||||||
|
@ -486,8 +485,7 @@ static void unrealize(DeviceState *d, Error **errp)
|
||||||
snprintf(name, sizeof(name), "%x", drck->get_index(drc));
|
snprintf(name, sizeof(name), "%x", drck->get_index(drc));
|
||||||
object_property_del(root_container, name, &err);
|
object_property_del(root_container, name, &err);
|
||||||
if (err) {
|
if (err) {
|
||||||
error_report("%s", error_get_pretty(err));
|
error_report_err(err);
|
||||||
error_free(err);
|
|
||||||
object_unref(OBJECT(drc));
|
object_unref(OBJECT(drc));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -76,7 +76,7 @@ static void s390_ipl_realize(DeviceState *dev, Error **errp)
|
||||||
S390IPLState *ipl = S390_IPL(dev);
|
S390IPLState *ipl = S390_IPL(dev);
|
||||||
uint64_t pentry = KERN_IMAGE_START;
|
uint64_t pentry = KERN_IMAGE_START;
|
||||||
int kernel_size;
|
int kernel_size;
|
||||||
Error *l_err = NULL;
|
Error *err = NULL;
|
||||||
|
|
||||||
int bios_size;
|
int bios_size;
|
||||||
char *bios_filename;
|
char *bios_filename;
|
||||||
|
@ -94,7 +94,7 @@ static void s390_ipl_realize(DeviceState *dev, Error **errp)
|
||||||
|
|
||||||
bios_filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name);
|
bios_filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name);
|
||||||
if (bios_filename == NULL) {
|
if (bios_filename == NULL) {
|
||||||
error_setg(&l_err, "could not find stage1 bootloader\n");
|
error_setg(&err, "could not find stage1 bootloader");
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -113,7 +113,7 @@ static void s390_ipl_realize(DeviceState *dev, Error **errp)
|
||||||
g_free(bios_filename);
|
g_free(bios_filename);
|
||||||
|
|
||||||
if (bios_size == -1) {
|
if (bios_size == -1) {
|
||||||
error_setg(&l_err, "could not load bootloader '%s'\n", bios_name);
|
error_setg(&err, "could not load bootloader '%s'", bios_name);
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -128,7 +128,7 @@ static void s390_ipl_realize(DeviceState *dev, Error **errp)
|
||||||
kernel_size = load_image_targphys(ipl->kernel, 0, ram_size);
|
kernel_size = load_image_targphys(ipl->kernel, 0, ram_size);
|
||||||
}
|
}
|
||||||
if (kernel_size < 0) {
|
if (kernel_size < 0) {
|
||||||
error_setg(&l_err, "could not load kernel '%s'\n", ipl->kernel);
|
error_setg(&err, "could not load kernel '%s'", ipl->kernel);
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
|
@ -156,7 +156,7 @@ static void s390_ipl_realize(DeviceState *dev, Error **errp)
|
||||||
initrd_size = load_image_targphys(ipl->initrd, initrd_offset,
|
initrd_size = load_image_targphys(ipl->initrd, initrd_offset,
|
||||||
ram_size - initrd_offset);
|
ram_size - initrd_offset);
|
||||||
if (initrd_size == -1) {
|
if (initrd_size == -1) {
|
||||||
error_setg(&l_err, "could not load initrd '%s'\n", ipl->initrd);
|
error_setg(&err, "could not load initrd '%s'", ipl->initrd);
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -170,7 +170,7 @@ static void s390_ipl_realize(DeviceState *dev, Error **errp)
|
||||||
}
|
}
|
||||||
qemu_register_reset(qdev_reset_all_fn, dev);
|
qemu_register_reset(qdev_reset_all_fn, dev);
|
||||||
error:
|
error:
|
||||||
error_propagate(errp, l_err);
|
error_propagate(errp, err);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Property s390_ipl_properties[] = {
|
static Property s390_ipl_properties[] = {
|
||||||
|
|
|
@ -21,7 +21,7 @@ static int kvm_s390_skeys_enabled(S390SKeysState *ss)
|
||||||
|
|
||||||
r = skeyclass->get_skeys(ss, 0, 1, &single_key);
|
r = skeyclass->get_skeys(ss, 0, 1, &single_key);
|
||||||
if (r != 0 && r != KVM_S390_GET_SKEYS_NONE) {
|
if (r != 0 && r != KVM_S390_GET_SKEYS_NONE) {
|
||||||
error_report("S390_GET_KEYS error %d\n", r);
|
error_report("S390_GET_KEYS error %d", r);
|
||||||
}
|
}
|
||||||
return (r == 0);
|
return (r == 0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -100,8 +100,7 @@ void hmp_dump_skeys(Monitor *mon, const QDict *qdict)
|
||||||
|
|
||||||
qmp_dump_skeys(filename, &err);
|
qmp_dump_skeys(filename, &err);
|
||||||
if (err) {
|
if (err) {
|
||||||
monitor_printf(mon, "%s\n", error_get_pretty(err));
|
error_report_err(err);
|
||||||
error_free(err);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -192,8 +191,8 @@ static int qemu_s390_skeys_set(S390SKeysState *ss, uint64_t start_gfn,
|
||||||
/* Check for uint64 overflow and access beyond end of key data */
|
/* Check for uint64 overflow and access beyond end of key data */
|
||||||
if (start_gfn + count > skeydev->key_count || start_gfn + count < count) {
|
if (start_gfn + count > skeydev->key_count || start_gfn + count < count) {
|
||||||
error_report("Error: Setting storage keys for page beyond the end "
|
error_report("Error: Setting storage keys for page beyond the end "
|
||||||
"of memory: gfn=%" PRIx64 " count=%" PRId64 "\n", start_gfn,
|
"of memory: gfn=%" PRIx64 " count=%" PRId64,
|
||||||
count);
|
start_gfn, count);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -212,8 +211,8 @@ static int qemu_s390_skeys_get(S390SKeysState *ss, uint64_t start_gfn,
|
||||||
/* Check for uint64 overflow and access beyond end of key data */
|
/* Check for uint64 overflow and access beyond end of key data */
|
||||||
if (start_gfn + count > skeydev->key_count || start_gfn + count < count) {
|
if (start_gfn + count > skeydev->key_count || start_gfn + count < count) {
|
||||||
error_report("Error: Getting storage keys for page beyond the end "
|
error_report("Error: Getting storage keys for page beyond the end "
|
||||||
"of memory: gfn=%" PRIx64 " count=%" PRId64 "\n", start_gfn,
|
"of memory: gfn=%" PRIx64 " count=%" PRId64,
|
||||||
count);
|
start_gfn, count);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -257,7 +256,7 @@ static void s390_storage_keys_save(QEMUFile *f, void *opaque)
|
||||||
|
|
||||||
buf = g_try_malloc(S390_SKEYS_BUFFER_SIZE);
|
buf = g_try_malloc(S390_SKEYS_BUFFER_SIZE);
|
||||||
if (!buf) {
|
if (!buf) {
|
||||||
error_report("storage key save could not allocate memory\n");
|
error_report("storage key save could not allocate memory");
|
||||||
goto end_stream;
|
goto end_stream;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -277,7 +276,7 @@ static void s390_storage_keys_save(QEMUFile *f, void *opaque)
|
||||||
* use S390_SKEYS_SAVE_FLAG_ERROR to indicate failure to the
|
* use S390_SKEYS_SAVE_FLAG_ERROR to indicate failure to the
|
||||||
* reading side.
|
* reading side.
|
||||||
*/
|
*/
|
||||||
error_report("S390_GET_KEYS error %d\n", error);
|
error_report("S390_GET_KEYS error %d", error);
|
||||||
memset(buf, 0, S390_SKEYS_BUFFER_SIZE);
|
memset(buf, 0, S390_SKEYS_BUFFER_SIZE);
|
||||||
eos = S390_SKEYS_SAVE_FLAG_ERROR;
|
eos = S390_SKEYS_SAVE_FLAG_ERROR;
|
||||||
}
|
}
|
||||||
|
@ -315,7 +314,7 @@ static int s390_storage_keys_load(QEMUFile *f, void *opaque, int version_id)
|
||||||
uint8_t *buf = g_try_malloc(S390_SKEYS_BUFFER_SIZE);
|
uint8_t *buf = g_try_malloc(S390_SKEYS_BUFFER_SIZE);
|
||||||
|
|
||||||
if (!buf) {
|
if (!buf) {
|
||||||
error_report("storage key load could not allocate memory\n");
|
error_report("storage key load could not allocate memory");
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -327,7 +326,7 @@ static int s390_storage_keys_load(QEMUFile *f, void *opaque, int version_id)
|
||||||
|
|
||||||
ret = skeyclass->set_skeys(ss, cur_gfn, cur_count, buf);
|
ret = skeyclass->set_skeys(ss, cur_gfn, cur_count, buf);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
error_report("S390_SET_KEYS error %d\n", ret);
|
error_report("S390_SET_KEYS error %d", ret);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
handled_count += cur_count;
|
handled_count += cur_count;
|
||||||
|
|
|
@ -456,29 +456,26 @@ static void sclp_realize(DeviceState *dev, Error **errp)
|
||||||
{
|
{
|
||||||
MachineState *machine = MACHINE(qdev_get_machine());
|
MachineState *machine = MACHINE(qdev_get_machine());
|
||||||
SCLPDevice *sclp = SCLP(dev);
|
SCLPDevice *sclp = SCLP(dev);
|
||||||
Error *l_err = NULL;
|
Error *err = NULL;
|
||||||
uint64_t hw_limit;
|
uint64_t hw_limit;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
object_property_set_bool(OBJECT(sclp->event_facility), true, "realized",
|
object_property_set_bool(OBJECT(sclp->event_facility), true, "realized",
|
||||||
&l_err);
|
&err);
|
||||||
if (l_err) {
|
if (err) {
|
||||||
goto error;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = s390_set_memory_limit(machine->maxram_size, &hw_limit);
|
ret = s390_set_memory_limit(machine->maxram_size, &hw_limit);
|
||||||
if (ret == -E2BIG) {
|
if (ret == -E2BIG) {
|
||||||
error_setg(&l_err, "qemu: host supports a maximum of %" PRIu64 " GB",
|
error_setg(&err, "qemu: host supports a maximum of %" PRIu64 " GB",
|
||||||
hw_limit >> 30);
|
hw_limit >> 30);
|
||||||
goto error;
|
|
||||||
} else if (ret) {
|
} else if (ret) {
|
||||||
error_setg(&l_err, "qemu: setting the guest size failed");
|
error_setg(&err, "qemu: setting the guest size failed");
|
||||||
goto error;
|
|
||||||
}
|
}
|
||||||
return;
|
|
||||||
error:
|
out:
|
||||||
assert(l_err);
|
error_propagate(errp, err);
|
||||||
error_propagate(errp, l_err);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sclp_memory_init(SCLPDevice *sclp)
|
static void sclp_memory_init(SCLPDevice *sclp)
|
||||||
|
|
|
@ -217,11 +217,9 @@ static void vhost_scsi_realize(DeviceState *dev, Error **errp)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vs->conf.vhostfd) {
|
if (vs->conf.vhostfd) {
|
||||||
vhostfd = monitor_fd_param(cur_mon, vs->conf.vhostfd, &err);
|
vhostfd = monitor_fd_param(cur_mon, vs->conf.vhostfd, errp);
|
||||||
if (vhostfd == -1) {
|
if (vhostfd == -1) {
|
||||||
error_setg(errp, "vhost-scsi: unable to parse vhostfd: %s",
|
error_prepend(errp, "vhost-scsi: unable to parse vhostfd: ");
|
||||||
error_get_pretty(err));
|
|
||||||
error_free(err);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -937,7 +937,6 @@ static void save_opt(const char **dest, QemuOpts *opts, const char *name)
|
||||||
|
|
||||||
void smbios_entry_add(QemuOpts *opts)
|
void smbios_entry_add(QemuOpts *opts)
|
||||||
{
|
{
|
||||||
Error *local_err = NULL;
|
|
||||||
const char *val;
|
const char *val;
|
||||||
|
|
||||||
assert(!smbios_immutable);
|
assert(!smbios_immutable);
|
||||||
|
@ -948,11 +947,7 @@ void smbios_entry_add(QemuOpts *opts)
|
||||||
int size;
|
int size;
|
||||||
struct smbios_table *table; /* legacy mode only */
|
struct smbios_table *table; /* legacy mode only */
|
||||||
|
|
||||||
qemu_opts_validate(opts, qemu_smbios_file_opts, &local_err);
|
qemu_opts_validate(opts, qemu_smbios_file_opts, &error_fatal);
|
||||||
if (local_err) {
|
|
||||||
error_report_err(local_err);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
size = get_image_size(val);
|
size = get_image_size(val);
|
||||||
if (size == -1 || size < sizeof(struct smbios_structure_header)) {
|
if (size == -1 || size < sizeof(struct smbios_structure_header)) {
|
||||||
|
@ -1034,11 +1029,7 @@ void smbios_entry_add(QemuOpts *opts)
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case 0:
|
case 0:
|
||||||
qemu_opts_validate(opts, qemu_smbios_type0_opts, &local_err);
|
qemu_opts_validate(opts, qemu_smbios_type0_opts, &error_fatal);
|
||||||
if (local_err) {
|
|
||||||
error_report_err(local_err);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
save_opt(&type0.vendor, opts, "vendor");
|
save_opt(&type0.vendor, opts, "vendor");
|
||||||
save_opt(&type0.version, opts, "version");
|
save_opt(&type0.version, opts, "version");
|
||||||
save_opt(&type0.date, opts, "date");
|
save_opt(&type0.date, opts, "date");
|
||||||
|
@ -1054,11 +1045,7 @@ void smbios_entry_add(QemuOpts *opts)
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
case 1:
|
case 1:
|
||||||
qemu_opts_validate(opts, qemu_smbios_type1_opts, &local_err);
|
qemu_opts_validate(opts, qemu_smbios_type1_opts, &error_fatal);
|
||||||
if (local_err) {
|
|
||||||
error_report_err(local_err);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
save_opt(&type1.manufacturer, opts, "manufacturer");
|
save_opt(&type1.manufacturer, opts, "manufacturer");
|
||||||
save_opt(&type1.product, opts, "product");
|
save_opt(&type1.product, opts, "product");
|
||||||
save_opt(&type1.version, opts, "version");
|
save_opt(&type1.version, opts, "version");
|
||||||
|
@ -1076,11 +1063,7 @@ void smbios_entry_add(QemuOpts *opts)
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
case 2:
|
case 2:
|
||||||
qemu_opts_validate(opts, qemu_smbios_type2_opts, &local_err);
|
qemu_opts_validate(opts, qemu_smbios_type2_opts, &error_fatal);
|
||||||
if (local_err) {
|
|
||||||
error_report_err(local_err);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
save_opt(&type2.manufacturer, opts, "manufacturer");
|
save_opt(&type2.manufacturer, opts, "manufacturer");
|
||||||
save_opt(&type2.product, opts, "product");
|
save_opt(&type2.product, opts, "product");
|
||||||
save_opt(&type2.version, opts, "version");
|
save_opt(&type2.version, opts, "version");
|
||||||
|
@ -1089,11 +1072,7 @@ void smbios_entry_add(QemuOpts *opts)
|
||||||
save_opt(&type2.location, opts, "location");
|
save_opt(&type2.location, opts, "location");
|
||||||
return;
|
return;
|
||||||
case 3:
|
case 3:
|
||||||
qemu_opts_validate(opts, qemu_smbios_type3_opts, &local_err);
|
qemu_opts_validate(opts, qemu_smbios_type3_opts, &error_fatal);
|
||||||
if (local_err) {
|
|
||||||
error_report_err(local_err);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
save_opt(&type3.manufacturer, opts, "manufacturer");
|
save_opt(&type3.manufacturer, opts, "manufacturer");
|
||||||
save_opt(&type3.version, opts, "version");
|
save_opt(&type3.version, opts, "version");
|
||||||
save_opt(&type3.serial, opts, "serial");
|
save_opt(&type3.serial, opts, "serial");
|
||||||
|
@ -1101,11 +1080,7 @@ void smbios_entry_add(QemuOpts *opts)
|
||||||
save_opt(&type3.sku, opts, "sku");
|
save_opt(&type3.sku, opts, "sku");
|
||||||
return;
|
return;
|
||||||
case 4:
|
case 4:
|
||||||
qemu_opts_validate(opts, qemu_smbios_type4_opts, &local_err);
|
qemu_opts_validate(opts, qemu_smbios_type4_opts, &error_fatal);
|
||||||
if (local_err) {
|
|
||||||
error_report_err(local_err);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
save_opt(&type4.sock_pfx, opts, "sock_pfx");
|
save_opt(&type4.sock_pfx, opts, "sock_pfx");
|
||||||
save_opt(&type4.manufacturer, opts, "manufacturer");
|
save_opt(&type4.manufacturer, opts, "manufacturer");
|
||||||
save_opt(&type4.version, opts, "version");
|
save_opt(&type4.version, opts, "version");
|
||||||
|
@ -1114,11 +1089,7 @@ void smbios_entry_add(QemuOpts *opts)
|
||||||
save_opt(&type4.part, opts, "part");
|
save_opt(&type4.part, opts, "part");
|
||||||
return;
|
return;
|
||||||
case 17:
|
case 17:
|
||||||
qemu_opts_validate(opts, qemu_smbios_type17_opts, &local_err);
|
qemu_opts_validate(opts, qemu_smbios_type17_opts, &error_fatal);
|
||||||
if (local_err) {
|
|
||||||
error_report_err(local_err);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
save_opt(&type17.loc_pfx, opts, "loc_pfx");
|
save_opt(&type17.loc_pfx, opts, "loc_pfx");
|
||||||
save_opt(&type17.bank, opts, "bank");
|
save_opt(&type17.bank, opts, "bank");
|
||||||
save_opt(&type17.manufacturer, opts, "manufacturer");
|
save_opt(&type17.manufacturer, opts, "manufacturer");
|
||||||
|
|
|
@ -600,13 +600,14 @@ pci_ebus_init(PCIBus *bus, int devfn, qemu_irq *irqs)
|
||||||
return isa_bus;
|
return isa_bus;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static void pci_ebus_realize(PCIDevice *pci_dev, Error **errp)
|
||||||
pci_ebus_init1(PCIDevice *pci_dev)
|
|
||||||
{
|
{
|
||||||
EbusState *s = DO_UPCAST(EbusState, pci_dev, pci_dev);
|
EbusState *s = DO_UPCAST(EbusState, pci_dev, pci_dev);
|
||||||
|
|
||||||
isa_bus_new(DEVICE(pci_dev), get_system_memory(),
|
if (!isa_bus_new(DEVICE(pci_dev), get_system_memory(),
|
||||||
pci_address_space_io(pci_dev));
|
pci_address_space_io(pci_dev), errp)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
pci_dev->config[0x04] = 0x06; // command = bus master, pci mem
|
pci_dev->config[0x04] = 0x06; // command = bus master, pci mem
|
||||||
pci_dev->config[0x05] = 0x00;
|
pci_dev->config[0x05] = 0x00;
|
||||||
|
@ -621,14 +622,13 @@ pci_ebus_init1(PCIDevice *pci_dev)
|
||||||
memory_region_init_alias(&s->bar1, OBJECT(s), "bar1", get_system_io(),
|
memory_region_init_alias(&s->bar1, OBJECT(s), "bar1", get_system_io(),
|
||||||
0, 0x4000);
|
0, 0x4000);
|
||||||
pci_register_bar(pci_dev, 1, PCI_BASE_ADDRESS_SPACE_IO, &s->bar1);
|
pci_register_bar(pci_dev, 1, PCI_BASE_ADDRESS_SPACE_IO, &s->bar1);
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ebus_class_init(ObjectClass *klass, void *data)
|
static void ebus_class_init(ObjectClass *klass, void *data)
|
||||||
{
|
{
|
||||||
PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
|
PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
|
||||||
|
|
||||||
k->init = pci_ebus_init1;
|
k->realize = pci_ebus_realize;
|
||||||
k->vendor_id = PCI_VENDOR_ID_SUN;
|
k->vendor_id = PCI_VENDOR_ID_SUN;
|
||||||
k->device_id = PCI_DEVICE_ID_SUN_EBUS;
|
k->device_id = PCI_DEVICE_ID_SUN_EBUS;
|
||||||
k->revision = 0x01;
|
k->revision = 0x01;
|
||||||
|
|
|
@ -220,8 +220,9 @@ static void arm_mptimer_realize(DeviceState *dev, Error **errp)
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (s->num_cpu < 1 || s->num_cpu > ARM_MPTIMER_MAX_CPUS) {
|
if (s->num_cpu < 1 || s->num_cpu > ARM_MPTIMER_MAX_CPUS) {
|
||||||
hw_error("%s: num-cpu must be between 1 and %d\n",
|
error_setg(errp, "num-cpu must be between 1 and %d",
|
||||||
__func__, ARM_MPTIMER_MAX_CPUS);
|
ARM_MPTIMER_MAX_CPUS);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
/* We implement one timer block per CPU, and expose multiple MMIO regions:
|
/* We implement one timer block per CPU, and expose multiple MMIO regions:
|
||||||
* * region 0 is "timer for this core"
|
* * region 0 is "timer for this core"
|
||||||
|
|
|
@ -1051,7 +1051,7 @@ static void tpm_tis_realizefn(DeviceState *dev, Error **errp)
|
||||||
|
|
||||||
if (tis->irq_num > 15) {
|
if (tis->irq_num > 15) {
|
||||||
error_setg(errp, "tpm_tis: IRQ %d for TPM TIS is outside valid range "
|
error_setg(errp, "tpm_tis: IRQ %d for TPM TIS is outside valid range "
|
||||||
"of 0 to 15.\n", tis->irq_num);
|
"of 0 to 15", tis->irq_num);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
#include "hw/boards.h"
|
#include "hw/boards.h"
|
||||||
#include "hw/loader.h"
|
#include "hw/loader.h"
|
||||||
#include "hw/i386/pc.h"
|
#include "hw/i386/pc.h"
|
||||||
|
#include "qemu/error-report.h"
|
||||||
#include "sysemu/qtest.h"
|
#include "sysemu/qtest.h"
|
||||||
|
|
||||||
#undef DEBUG_PUV3
|
#undef DEBUG_PUV3
|
||||||
|
@ -95,7 +96,8 @@ static void puv3_load_kernel(const char *kernel_filename)
|
||||||
size = load_image_targphys(kernel_filename, KERNEL_LOAD_ADDR,
|
size = load_image_targphys(kernel_filename, KERNEL_LOAD_ADDR,
|
||||||
KERNEL_MAX_SIZE);
|
KERNEL_MAX_SIZE);
|
||||||
if (size < 0) {
|
if (size < 0) {
|
||||||
hw_error("Load kernel error: '%s'\n", kernel_filename);
|
error_report("Load kernel error: '%s'", kernel_filename);
|
||||||
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* cheat curses that we have a graphic console, only under ocd console */
|
/* cheat curses that we have a graphic console, only under ocd console */
|
||||||
|
@ -112,7 +114,8 @@ static void puv3_init(MachineState *machine)
|
||||||
UniCore32CPU *cpu;
|
UniCore32CPU *cpu;
|
||||||
|
|
||||||
if (initrd_filename) {
|
if (initrd_filename) {
|
||||||
hw_error("Please use kernel built-in initramdisk.\n");
|
error_report("Please use kernel built-in initramdisk");
|
||||||
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!cpu_model) {
|
if (!cpu_model) {
|
||||||
|
@ -121,7 +124,8 @@ static void puv3_init(MachineState *machine)
|
||||||
|
|
||||||
cpu = uc32_cpu_init(cpu_model);
|
cpu = uc32_cpu_init(cpu_model);
|
||||||
if (!cpu) {
|
if (!cpu) {
|
||||||
hw_error("Unable to find CPU definition\n");
|
error_report("Unable to find CPU definition");
|
||||||
|
exit(1);
|
||||||
}
|
}
|
||||||
env = &cpu->env;
|
env = &cpu->env;
|
||||||
|
|
||||||
|
|
11
hw/usb/bus.c
11
hw/usb/bus.c
|
@ -329,9 +329,9 @@ static USBDevice *usb_try_create_simple(USBBus *bus, const char *name,
|
||||||
}
|
}
|
||||||
object_property_set_bool(OBJECT(dev), true, "realized", &err);
|
object_property_set_bool(OBJECT(dev), true, "realized", &err);
|
||||||
if (err) {
|
if (err) {
|
||||||
error_setg(errp, "Failed to initialize USB device '%s': %s",
|
error_propagate(errp, err);
|
||||||
name, error_get_pretty(err));
|
error_prepend(errp, "Failed to initialize USB device '%s': ",
|
||||||
error_free(err);
|
name);
|
||||||
object_unparent(OBJECT(dev));
|
object_unparent(OBJECT(dev));
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -725,9 +725,8 @@ USBDevice *usbdevice_create(const char *cmdline)
|
||||||
}
|
}
|
||||||
object_property_set_bool(OBJECT(dev), true, "realized", &err);
|
object_property_set_bool(OBJECT(dev), true, "realized", &err);
|
||||||
if (err) {
|
if (err) {
|
||||||
error_report("Failed to initialize USB device '%s': %s",
|
error_reportf_err(err, "Failed to initialize USB device '%s': ",
|
||||||
f->name, error_get_pretty(err));
|
f->name);
|
||||||
error_free(err);
|
|
||||||
object_unparent(OBJECT(dev));
|
object_unparent(OBJECT(dev));
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -59,7 +59,7 @@ struct ISADevice {
|
||||||
};
|
};
|
||||||
|
|
||||||
ISABus *isa_bus_new(DeviceState *dev, MemoryRegion *address_space,
|
ISABus *isa_bus_new(DeviceState *dev, MemoryRegion *address_space,
|
||||||
MemoryRegion *address_space_io);
|
MemoryRegion *address_space_io, Error **errp);
|
||||||
void isa_bus_irqs(ISABus *bus, qemu_irq *irqs);
|
void isa_bus_irqs(ISABus *bus, qemu_irq *irqs);
|
||||||
qemu_irq isa_get_irq(ISADevice *dev, int isairq);
|
qemu_irq isa_get_irq(ISADevice *dev, int isairq);
|
||||||
void isa_init_irq(ISADevice *dev, qemu_irq *p, int isairq);
|
void isa_init_irq(ISADevice *dev, qemu_irq *p, int isairq);
|
||||||
|
|
|
@ -180,8 +180,6 @@ void qdev_prop_set_chr(DeviceState *dev, const char *name, CharDriverState *valu
|
||||||
void qdev_prop_set_netdev(DeviceState *dev, const char *name, NetClientState *value);
|
void qdev_prop_set_netdev(DeviceState *dev, const char *name, NetClientState *value);
|
||||||
void qdev_prop_set_drive(DeviceState *dev, const char *name,
|
void qdev_prop_set_drive(DeviceState *dev, const char *name,
|
||||||
BlockBackend *value, Error **errp);
|
BlockBackend *value, Error **errp);
|
||||||
void qdev_prop_set_drive_nofail(DeviceState *dev, const char *name,
|
|
||||||
BlockBackend *value);
|
|
||||||
void qdev_prop_set_macaddr(DeviceState *dev, const char *name, uint8_t *value);
|
void qdev_prop_set_macaddr(DeviceState *dev, const char *name, uint8_t *value);
|
||||||
void qdev_prop_set_enum(DeviceState *dev, const char *name, int value);
|
void qdev_prop_set_enum(DeviceState *dev, const char *name, int value);
|
||||||
/* FIXME: Remove opaque pointer properties. */
|
/* FIXME: Remove opaque pointer properties. */
|
||||||
|
|
|
@ -18,14 +18,27 @@
|
||||||
* Create an error:
|
* Create an error:
|
||||||
* error_setg(&err, "situation normal, all fouled up");
|
* error_setg(&err, "situation normal, all fouled up");
|
||||||
*
|
*
|
||||||
|
* Create an error and add additional explanation:
|
||||||
|
* error_setg(&err, "invalid quark");
|
||||||
|
* error_append_hint(&err, "Valid quarks are up, down, strange, "
|
||||||
|
* "charm, top, bottom.\n");
|
||||||
|
*
|
||||||
|
* Do *not* contract this to
|
||||||
|
* error_setg(&err, "invalid quark\n"
|
||||||
|
* "Valid quarks are up, down, strange, charm, top, bottom.");
|
||||||
|
*
|
||||||
* Report an error to stderr:
|
* Report an error to stderr:
|
||||||
* error_report_err(err);
|
* error_report_err(err);
|
||||||
* This frees the error object.
|
* This frees the error object.
|
||||||
*
|
*
|
||||||
|
* Report an error to stderr with additional text prepended:
|
||||||
|
* error_reportf_err(err, "Could not frobnicate '%s': ", name);
|
||||||
|
*
|
||||||
* Report an error somewhere else:
|
* Report an error somewhere else:
|
||||||
* const char *msg = error_get_pretty(err);
|
* const char *msg = error_get_pretty(err);
|
||||||
* do with msg what needs to be done...
|
* do with msg what needs to be done...
|
||||||
* error_free(err);
|
* error_free(err);
|
||||||
|
* Note that this loses hints added with error_append_hint().
|
||||||
*
|
*
|
||||||
* Handle an error without reporting it (just for completeness):
|
* Handle an error without reporting it (just for completeness):
|
||||||
* error_free(err);
|
* error_free(err);
|
||||||
|
@ -38,6 +51,10 @@
|
||||||
* error_propagate(errp, err);
|
* error_propagate(errp, err);
|
||||||
* where Error **errp is a parameter, by convention the last one.
|
* where Error **errp is a parameter, by convention the last one.
|
||||||
*
|
*
|
||||||
|
* Pass an existing error to the caller with the message modified:
|
||||||
|
* error_propagate(errp, err);
|
||||||
|
* error_prepend(errp, "Could not frobnicate '%s': ", name);
|
||||||
|
*
|
||||||
* Create a new error and pass it to the caller:
|
* Create a new error and pass it to the caller:
|
||||||
* error_setg(errp, "situation normal, all fouled up");
|
* error_setg(errp, "situation normal, all fouled up");
|
||||||
*
|
*
|
||||||
|
@ -76,14 +93,32 @@
|
||||||
* But when all you do with the error is pass it on, please use
|
* But when all you do with the error is pass it on, please use
|
||||||
* foo(arg, errp);
|
* foo(arg, errp);
|
||||||
* for readability.
|
* for readability.
|
||||||
|
*
|
||||||
|
* Receive and accumulate multiple errors (first one wins):
|
||||||
|
* Error *err = NULL, *local_err = NULL;
|
||||||
|
* foo(arg, &err);
|
||||||
|
* bar(arg, &local_err);
|
||||||
|
* error_propagate(&err, local_err);
|
||||||
|
* if (err) {
|
||||||
|
* handle the error...
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* Do *not* "optimize" this to
|
||||||
|
* foo(arg, &err);
|
||||||
|
* bar(arg, &err); // WRONG!
|
||||||
|
* if (err) {
|
||||||
|
* handle the error...
|
||||||
|
* }
|
||||||
|
* because this may pass a non-null err to bar().
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef ERROR_H
|
#ifndef ERROR_H
|
||||||
#define ERROR_H
|
#define ERROR_H
|
||||||
|
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <stdbool.h>
|
||||||
#include "qemu/compiler.h"
|
#include "qemu/compiler.h"
|
||||||
#include "qapi-types.h"
|
#include "qapi-types.h"
|
||||||
#include <stdbool.h>
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Opaque error object.
|
* Opaque error object.
|
||||||
|
@ -125,6 +160,8 @@ ErrorClass error_get_class(const Error *err);
|
||||||
* If @errp is anything else, *@errp must be NULL.
|
* If @errp is anything else, *@errp must be NULL.
|
||||||
* The new error's class is ERROR_CLASS_GENERIC_ERROR, and its
|
* The new error's class is ERROR_CLASS_GENERIC_ERROR, and its
|
||||||
* human-readable error message is made from printf-style @fmt, ...
|
* human-readable error message is made from printf-style @fmt, ...
|
||||||
|
* The resulting message should be a single phrase, with no newline or
|
||||||
|
* trailing punctuation.
|
||||||
*/
|
*/
|
||||||
#define error_setg(errp, fmt, ...) \
|
#define error_setg(errp, fmt, ...) \
|
||||||
error_setg_internal((errp), __FILE__, __LINE__, __func__, \
|
error_setg_internal((errp), __FILE__, __LINE__, __func__, \
|
||||||
|
@ -179,9 +216,26 @@ void error_setg_win32_internal(Error **errp,
|
||||||
*/
|
*/
|
||||||
void error_propagate(Error **dst_errp, Error *local_err);
|
void error_propagate(Error **dst_errp, Error *local_err);
|
||||||
|
|
||||||
/**
|
/*
|
||||||
|
* Prepend some text to @errp's human-readable error message.
|
||||||
|
* The text is made by formatting @fmt, @ap like vprintf().
|
||||||
|
*/
|
||||||
|
void error_vprepend(Error **errp, const char *fmt, va_list ap);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Prepend some text to @errp's human-readable error message.
|
||||||
|
* The text is made by formatting @fmt, ... like printf().
|
||||||
|
*/
|
||||||
|
void error_prepend(Error **errp, const char *fmt, ...)
|
||||||
|
GCC_FMT_ATTR(2, 3);
|
||||||
|
|
||||||
|
/*
|
||||||
* Append a printf-style human-readable explanation to an existing error.
|
* Append a printf-style human-readable explanation to an existing error.
|
||||||
* May be called multiple times, and safe if @errp is NULL.
|
* @errp may be NULL, but not &error_fatal or &error_abort.
|
||||||
|
* Trivially the case if you call it only after error_setg() or
|
||||||
|
* error_propagate().
|
||||||
|
* May be called multiple times. The resulting hint should end with a
|
||||||
|
* newline.
|
||||||
*/
|
*/
|
||||||
void error_append_hint(Error **errp, const char *fmt, ...)
|
void error_append_hint(Error **errp, const char *fmt, ...)
|
||||||
GCC_FMT_ATTR(2, 3);
|
GCC_FMT_ATTR(2, 3);
|
||||||
|
@ -215,7 +269,13 @@ void error_free_or_abort(Error **errp);
|
||||||
/*
|
/*
|
||||||
* Convenience function to error_report() and free @err.
|
* Convenience function to error_report() and free @err.
|
||||||
*/
|
*/
|
||||||
void error_report_err(Error *);
|
void error_report_err(Error *err);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Convenience function to error_prepend(), error_report() and free @err.
|
||||||
|
*/
|
||||||
|
void error_reportf_err(Error *err, const char *fmt, ...)
|
||||||
|
GCC_FMT_ATTR(2, 3);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Just like error_setg(), except you get to specify the error class.
|
* Just like error_setg(), except you get to specify the error class.
|
||||||
|
|
|
@ -53,7 +53,7 @@ int recv_all(int fd, void *buf, int len1, bool single_read);
|
||||||
/* callback function for nonblocking connect
|
/* callback function for nonblocking connect
|
||||||
* valid fd on success, negative error code on failure
|
* valid fd on success, negative error code on failure
|
||||||
*/
|
*/
|
||||||
typedef void NonBlockingConnectHandler(int fd, Error *errp, void *opaque);
|
typedef void NonBlockingConnectHandler(int fd, Error *err, void *opaque);
|
||||||
|
|
||||||
InetSocketAddress *inet_parse(const char *str, Error **errp);
|
InetSocketAddress *inet_parse(const char *str, Error **errp);
|
||||||
int inet_listen_opts(QemuOpts *opts, int port_offset, Error **errp);
|
int inet_listen_opts(QemuOpts *opts, int port_offset, Error **errp);
|
||||||
|
|
|
@ -2063,9 +2063,9 @@ void kvm_device_access(int fd, int group, uint64_t attr,
|
||||||
write ? KVM_SET_DEVICE_ATTR : KVM_GET_DEVICE_ATTR,
|
write ? KVM_SET_DEVICE_ATTR : KVM_GET_DEVICE_ATTR,
|
||||||
&kvmattr);
|
&kvmattr);
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
error_report("KVM_%s_DEVICE_ATTR failed: %s\n"
|
error_report("KVM_%s_DEVICE_ATTR failed: %s",
|
||||||
"Group %d attr 0x%016" PRIx64, write ? "SET" : "GET",
|
write ? "SET" : "GET", strerror(-err));
|
||||||
strerror(-err), group, attr);
|
error_printf("Group %d attr 0x%016" PRIx64, group, attr);
|
||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2325,7 +2325,7 @@ static int ram_load_postcopy(QEMUFile *f)
|
||||||
} else {
|
} else {
|
||||||
/* not the 1st TP within the HP */
|
/* not the 1st TP within the HP */
|
||||||
if (host != (last_host + TARGET_PAGE_SIZE)) {
|
if (host != (last_host + TARGET_PAGE_SIZE)) {
|
||||||
error_report("Non-sequential target page %p/%p\n",
|
error_report("Non-sequential target page %p/%p",
|
||||||
host, last_host);
|
host, last_host);
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -1571,7 +1571,7 @@ static int loadvm_handle_cmd_packaged(MigrationIncomingState *mis)
|
||||||
ret = qemu_get_buffer(mis->from_src_file, buffer, (int)length);
|
ret = qemu_get_buffer(mis->from_src_file, buffer, (int)length);
|
||||||
if (ret != length) {
|
if (ret != length) {
|
||||||
g_free(buffer);
|
g_free(buffer);
|
||||||
error_report("CMD_PACKAGED: Buffer receive fail ret=%d length=%d\n",
|
error_report("CMD_PACKAGED: Buffer receive fail ret=%d length=%d",
|
||||||
ret, length);
|
ret, length);
|
||||||
return (ret < 0) ? ret : -EAGAIN;
|
return (ret < 0) ? ret : -EAGAIN;
|
||||||
}
|
}
|
||||||
|
@ -1935,10 +1935,9 @@ void hmp_savevm(Monitor *mon, const QDict *qdict)
|
||||||
|
|
||||||
/* Delete old snapshots of the same name */
|
/* Delete old snapshots of the same name */
|
||||||
if (name && bdrv_all_delete_snapshot(name, &bs1, &local_err) < 0) {
|
if (name && bdrv_all_delete_snapshot(name, &bs1, &local_err) < 0) {
|
||||||
monitor_printf(mon,
|
error_reportf_err(local_err,
|
||||||
"Error while deleting snapshot on device '%s': %s\n",
|
"Error while deleting snapshot on device '%s': ",
|
||||||
bdrv_get_device_name(bs1), error_get_pretty(local_err));
|
bdrv_get_device_name(bs1));
|
||||||
error_free(local_err);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1992,8 +1991,7 @@ void hmp_savevm(Monitor *mon, const QDict *qdict)
|
||||||
vm_state_size = qemu_ftell(f);
|
vm_state_size = qemu_ftell(f);
|
||||||
qemu_fclose(f);
|
qemu_fclose(f);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
monitor_printf(mon, "%s\n", error_get_pretty(local_err));
|
error_report_err(local_err);
|
||||||
error_free(local_err);
|
|
||||||
goto the_end;
|
goto the_end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2117,10 +2115,9 @@ void hmp_delvm(Monitor *mon, const QDict *qdict)
|
||||||
const char *name = qdict_get_str(qdict, "name");
|
const char *name = qdict_get_str(qdict, "name");
|
||||||
|
|
||||||
if (bdrv_all_delete_snapshot(name, &bs, &err) < 0) {
|
if (bdrv_all_delete_snapshot(name, &bs, &err) < 0) {
|
||||||
monitor_printf(mon,
|
error_reportf_err(err,
|
||||||
"Error while deleting snapshot on device '%s': %s\n",
|
"Error while deleting snapshot on device '%s': ",
|
||||||
bdrv_get_device_name(bs), error_get_pretty(err));
|
bdrv_get_device_name(bs));
|
||||||
error_free(err);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1464,8 +1464,7 @@ static void hmp_boot_set(Monitor *mon, const QDict *qdict)
|
||||||
|
|
||||||
qemu_boot_set(bootdevice, &local_err);
|
qemu_boot_set(bootdevice, &local_err);
|
||||||
if (local_err) {
|
if (local_err) {
|
||||||
monitor_printf(mon, "%s\n", error_get_pretty(local_err));
|
error_report_err(local_err);
|
||||||
error_free(local_err);
|
|
||||||
} else {
|
} else {
|
||||||
monitor_printf(mon, "boot device list now set to %s\n", bootdevice);
|
monitor_printf(mon, "boot device list now set to %s\n", bootdevice);
|
||||||
}
|
}
|
||||||
|
@ -4149,8 +4148,7 @@ static void bdrv_password_cb(void *opaque, const char *password,
|
||||||
|
|
||||||
bdrv_add_key(bs, password, &local_err);
|
bdrv_add_key(bs, password, &local_err);
|
||||||
if (local_err) {
|
if (local_err) {
|
||||||
monitor_printf(mon, "%s\n", error_get_pretty(local_err));
|
error_report_err(local_err);
|
||||||
error_free(local_err);
|
|
||||||
ret = -EPERM;
|
ret = -EPERM;
|
||||||
}
|
}
|
||||||
if (mon->password_completion_cb)
|
if (mon->password_completion_cb)
|
||||||
|
|
|
@ -82,15 +82,15 @@ static int vhost_user_start(int queues, NetClientState *ncs[])
|
||||||
options.opaque = s->chr;
|
options.opaque = s->chr;
|
||||||
s->vhost_net = vhost_net_init(&options);
|
s->vhost_net = vhost_net_init(&options);
|
||||||
if (!s->vhost_net) {
|
if (!s->vhost_net) {
|
||||||
error_report("failed to init vhost_net for queue %d\n", i);
|
error_report("failed to init vhost_net for queue %d", i);
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i == 0) {
|
if (i == 0) {
|
||||||
max_queues = vhost_net_get_max_queues(s->vhost_net);
|
max_queues = vhost_net_get_max_queues(s->vhost_net);
|
||||||
if (queues > max_queues) {
|
if (queues > max_queues) {
|
||||||
error_report("you are asking more queues than "
|
error_report("you are asking more queues than supported: %d",
|
||||||
"supported: %d\n", max_queues);
|
max_queues);
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
8
numa.c
8
numa.c
|
@ -450,17 +450,13 @@ void memory_region_allocate_system_memory(MemoryRegion *mr, Object *owner,
|
||||||
|
|
||||||
memory_region_init(mr, owner, name, ram_size);
|
memory_region_init(mr, owner, name, ram_size);
|
||||||
for (i = 0; i < MAX_NODES; i++) {
|
for (i = 0; i < MAX_NODES; i++) {
|
||||||
Error *local_err = NULL;
|
|
||||||
uint64_t size = numa_info[i].node_mem;
|
uint64_t size = numa_info[i].node_mem;
|
||||||
HostMemoryBackend *backend = numa_info[i].node_memdev;
|
HostMemoryBackend *backend = numa_info[i].node_memdev;
|
||||||
if (!backend) {
|
if (!backend) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
MemoryRegion *seg = host_memory_backend_get_memory(backend, &local_err);
|
MemoryRegion *seg = host_memory_backend_get_memory(backend,
|
||||||
if (local_err) {
|
&error_fatal);
|
||||||
error_report_err(local_err);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (memory_region_is_mapped(seg)) {
|
if (memory_region_is_mapped(seg)) {
|
||||||
char *path = object_get_canonical_path_component(OBJECT(backend));
|
char *path = object_get_canonical_path_component(OBJECT(backend));
|
||||||
|
|
|
@ -266,8 +266,7 @@ int qdev_device_help(QemuOpts *opts)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
error_printf("%s\n", error_get_pretty(local_err));
|
error_report_err(local_err);
|
||||||
error_free(local_err);
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -304,6 +303,7 @@ static void qbus_list_bus(DeviceState *dev, Error **errp)
|
||||||
error_append_hint(errp, "%s\"%s\"", sep, child->name);
|
error_append_hint(errp, "%s\"%s\"", sep, child->name);
|
||||||
sep = ", ";
|
sep = ", ";
|
||||||
}
|
}
|
||||||
|
error_append_hint(errp, "\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void qbus_list_dev(BusState *bus, Error **errp)
|
static void qbus_list_dev(BusState *bus, Error **errp)
|
||||||
|
@ -321,6 +321,7 @@ static void qbus_list_dev(BusState *bus, Error **errp)
|
||||||
}
|
}
|
||||||
sep = ", ";
|
sep = ", ";
|
||||||
}
|
}
|
||||||
|
error_append_hint(errp, "\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static BusState *qbus_find_bus(DeviceState *dev, char *elem)
|
static BusState *qbus_find_bus(DeviceState *dev, char *elem)
|
||||||
|
|
33
qemu-img.c
33
qemu-img.c
|
@ -213,9 +213,7 @@ static BlockBackend *img_open(const char *id, const char *filename,
|
||||||
|
|
||||||
blk = blk_new_open(id, filename, NULL, options, flags, &local_err);
|
blk = blk_new_open(id, filename, NULL, options, flags, &local_err);
|
||||||
if (!blk) {
|
if (!blk) {
|
||||||
error_report("Could not open '%s': %s", filename,
|
error_reportf_err(local_err, "Could not open '%s': ", filename);
|
||||||
error_get_pretty(local_err));
|
|
||||||
error_free(local_err);
|
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -360,8 +358,7 @@ static int img_create(int argc, char **argv)
|
||||||
bdrv_img_create(filename, fmt, base_filename, base_fmt,
|
bdrv_img_create(filename, fmt, base_filename, base_fmt,
|
||||||
options, img_size, BDRV_O_FLAGS, &local_err, quiet);
|
options, img_size, BDRV_O_FLAGS, &local_err, quiet);
|
||||||
if (local_err) {
|
if (local_err) {
|
||||||
error_report("%s: %s", filename, error_get_pretty(local_err));
|
error_reportf_err(local_err, "%s: ", filename);
|
||||||
error_free(local_err);
|
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1711,9 +1708,7 @@ static int img_convert(int argc, char **argv)
|
||||||
bdrv_snapshot_load_tmp_by_id_or_name(bs[0], snapshot_name, &local_err);
|
bdrv_snapshot_load_tmp_by_id_or_name(bs[0], snapshot_name, &local_err);
|
||||||
}
|
}
|
||||||
if (local_err) {
|
if (local_err) {
|
||||||
error_report("Failed to load snapshot: %s",
|
error_reportf_err(local_err, "Failed to load snapshot: ");
|
||||||
error_get_pretty(local_err));
|
|
||||||
error_free(local_err);
|
|
||||||
ret = -1;
|
ret = -1;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
@ -1809,9 +1804,8 @@ static int img_convert(int argc, char **argv)
|
||||||
/* Create the new image */
|
/* Create the new image */
|
||||||
ret = bdrv_create(drv, out_filename, opts, &local_err);
|
ret = bdrv_create(drv, out_filename, opts, &local_err);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
error_report("%s: error while converting %s: %s",
|
error_reportf_err(local_err, "%s: error while converting %s: ",
|
||||||
out_filename, out_fmt, error_get_pretty(local_err));
|
out_filename, out_fmt);
|
||||||
error_free(local_err);
|
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2439,9 +2433,8 @@ static int img_snapshot(int argc, char **argv)
|
||||||
case SNAPSHOT_DELETE:
|
case SNAPSHOT_DELETE:
|
||||||
bdrv_snapshot_delete_by_id_or_name(bs, snapshot_name, &err);
|
bdrv_snapshot_delete_by_id_or_name(bs, snapshot_name, &err);
|
||||||
if (err) {
|
if (err) {
|
||||||
error_report("Could not delete snapshot '%s': (%s)",
|
error_reportf_err(err, "Could not delete snapshot '%s': ",
|
||||||
snapshot_name, error_get_pretty(err));
|
snapshot_name);
|
||||||
error_free(err);
|
|
||||||
ret = 1;
|
ret = 1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -2574,9 +2567,9 @@ static int img_rebase(int argc, char **argv)
|
||||||
blk_old_backing = blk_new_open("old_backing", backing_name, NULL,
|
blk_old_backing = blk_new_open("old_backing", backing_name, NULL,
|
||||||
options, src_flags, &local_err);
|
options, src_flags, &local_err);
|
||||||
if (!blk_old_backing) {
|
if (!blk_old_backing) {
|
||||||
error_report("Could not open old backing file '%s': %s",
|
error_reportf_err(local_err,
|
||||||
backing_name, error_get_pretty(local_err));
|
"Could not open old backing file '%s': ",
|
||||||
error_free(local_err);
|
backing_name);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2591,9 +2584,9 @@ static int img_rebase(int argc, char **argv)
|
||||||
blk_new_backing = blk_new_open("new_backing", out_baseimg, NULL,
|
blk_new_backing = blk_new_open("new_backing", out_baseimg, NULL,
|
||||||
options, src_flags, &local_err);
|
options, src_flags, &local_err);
|
||||||
if (!blk_new_backing) {
|
if (!blk_new_backing) {
|
||||||
error_report("Could not open new backing file '%s': %s",
|
error_reportf_err(local_err,
|
||||||
out_baseimg, error_get_pretty(local_err));
|
"Could not open new backing file '%s': ",
|
||||||
error_free(local_err);
|
out_baseimg);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,17 +57,15 @@ static int openfile(char *name, int flags, QDict *opts)
|
||||||
BlockDriverState *bs;
|
BlockDriverState *bs;
|
||||||
|
|
||||||
if (qemuio_blk) {
|
if (qemuio_blk) {
|
||||||
fprintf(stderr, "file open already, try 'help close'\n");
|
error_report("file open already, try 'help close'");
|
||||||
QDECREF(opts);
|
QDECREF(opts);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
qemuio_blk = blk_new_open("hda", name, NULL, opts, flags, &local_err);
|
qemuio_blk = blk_new_open("hda", name, NULL, opts, flags, &local_err);
|
||||||
if (!qemuio_blk) {
|
if (!qemuio_blk) {
|
||||||
fprintf(stderr, "%s: can't open%s%s: %s\n", progname,
|
error_reportf_err(local_err, "can't open%s%s: ",
|
||||||
name ? " device " : "", name ?: "",
|
name ? " device " : "", name ?: "");
|
||||||
error_get_pretty(local_err));
|
|
||||||
error_free(local_err);
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
122
qemu-nbd.c
122
qemu-nbd.c
|
@ -30,7 +30,6 @@
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
#include <err.h>
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
|
@ -157,8 +156,8 @@ static int find_partition(BlockBackend *blk, int partition,
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if ((ret = blk_read(blk, 0, data, 1)) < 0) {
|
if ((ret = blk_read(blk, 0, data, 1)) < 0) {
|
||||||
errno = -ret;
|
error_report("error while reading: %s", strerror(-ret));
|
||||||
err(EXIT_FAILURE, "error while reading");
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data[510] != 0x55 || data[511] != 0xaa) {
|
if (data[510] != 0x55 || data[511] != 0xaa) {
|
||||||
|
@ -178,8 +177,8 @@ static int find_partition(BlockBackend *blk, int partition,
|
||||||
int j;
|
int j;
|
||||||
|
|
||||||
if ((ret = blk_read(blk, mbr[i].start_sector_abs, data1, 1)) < 0) {
|
if ((ret = blk_read(blk, mbr[i].start_sector_abs, data1, 1)) < 0) {
|
||||||
errno = -ret;
|
error_report("error while reading: %s", strerror(-ret));
|
||||||
err(EXIT_FAILURE, "error while reading");
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (j = 0; j < 4; j++) {
|
for (j = 0; j < 4; j++) {
|
||||||
|
@ -250,8 +249,7 @@ static void *nbd_client_thread(void *arg)
|
||||||
&size, &local_error);
|
&size, &local_error);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
if (local_error) {
|
if (local_error) {
|
||||||
fprintf(stderr, "%s\n", error_get_pretty(local_error));
|
error_report_err(local_error);
|
||||||
error_free(local_error);
|
|
||||||
}
|
}
|
||||||
goto out_socket;
|
goto out_socket;
|
||||||
}
|
}
|
||||||
|
@ -259,7 +257,7 @@ static void *nbd_client_thread(void *arg)
|
||||||
fd = open(device, O_RDWR);
|
fd = open(device, O_RDWR);
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
/* Linux-only, we can use %m in printf. */
|
/* Linux-only, we can use %m in printf. */
|
||||||
fprintf(stderr, "Failed to open %s: %m\n", device);
|
error_report("Failed to open %s: %m", device);
|
||||||
goto out_socket;
|
goto out_socket;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -454,16 +452,19 @@ int main(int argc, char **argv)
|
||||||
/* fallthrough */
|
/* fallthrough */
|
||||||
case QEMU_NBD_OPT_CACHE:
|
case QEMU_NBD_OPT_CACHE:
|
||||||
if (seen_cache) {
|
if (seen_cache) {
|
||||||
errx(EXIT_FAILURE, "-n and --cache can only be specified once");
|
error_report("-n and --cache can only be specified once");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
seen_cache = true;
|
seen_cache = true;
|
||||||
if (bdrv_parse_cache_flags(optarg, &flags) == -1) {
|
if (bdrv_parse_cache_flags(optarg, &flags) == -1) {
|
||||||
errx(EXIT_FAILURE, "Invalid cache mode `%s'", optarg);
|
error_report("Invalid cache mode `%s'", optarg);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case QEMU_NBD_OPT_AIO:
|
case QEMU_NBD_OPT_AIO:
|
||||||
if (seen_aio) {
|
if (seen_aio) {
|
||||||
errx(EXIT_FAILURE, "--aio can only be specified once");
|
error_report("--aio can only be specified once");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
seen_aio = true;
|
seen_aio = true;
|
||||||
if (!strcmp(optarg, "native")) {
|
if (!strcmp(optarg, "native")) {
|
||||||
|
@ -471,16 +472,19 @@ int main(int argc, char **argv)
|
||||||
} else if (!strcmp(optarg, "threads")) {
|
} else if (!strcmp(optarg, "threads")) {
|
||||||
/* this is the default */
|
/* this is the default */
|
||||||
} else {
|
} else {
|
||||||
errx(EXIT_FAILURE, "invalid aio mode `%s'", optarg);
|
error_report("invalid aio mode `%s'", optarg);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case QEMU_NBD_OPT_DISCARD:
|
case QEMU_NBD_OPT_DISCARD:
|
||||||
if (seen_discard) {
|
if (seen_discard) {
|
||||||
errx(EXIT_FAILURE, "--discard can only be specified once");
|
error_report("--discard can only be specified once");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
seen_discard = true;
|
seen_discard = true;
|
||||||
if (bdrv_parse_discard_flags(optarg, &flags) == -1) {
|
if (bdrv_parse_discard_flags(optarg, &flags) == -1) {
|
||||||
errx(EXIT_FAILURE, "Invalid discard mode `%s'", optarg);
|
error_report("Invalid discard mode `%s'", optarg);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case QEMU_NBD_OPT_DETECT_ZEROES:
|
case QEMU_NBD_OPT_DETECT_ZEROES:
|
||||||
|
@ -491,13 +495,15 @@ int main(int argc, char **argv)
|
||||||
BLOCKDEV_DETECT_ZEROES_OPTIONS_OFF,
|
BLOCKDEV_DETECT_ZEROES_OPTIONS_OFF,
|
||||||
&local_err);
|
&local_err);
|
||||||
if (local_err) {
|
if (local_err) {
|
||||||
errx(EXIT_FAILURE, "Failed to parse detect_zeroes mode: %s",
|
error_reportf_err(local_err,
|
||||||
error_get_pretty(local_err));
|
"Failed to parse detect_zeroes mode: ");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
if (detect_zeroes == BLOCKDEV_DETECT_ZEROES_OPTIONS_UNMAP &&
|
if (detect_zeroes == BLOCKDEV_DETECT_ZEROES_OPTIONS_UNMAP &&
|
||||||
!(flags & BDRV_O_UNMAP)) {
|
!(flags & BDRV_O_UNMAP)) {
|
||||||
errx(EXIT_FAILURE, "setting detect-zeroes to unmap is not allowed "
|
error_report("setting detect-zeroes to unmap is not allowed "
|
||||||
"without setting discard operation to unmap");
|
"without setting discard operation to unmap");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'b':
|
case 'b':
|
||||||
|
@ -509,10 +515,12 @@ int main(int argc, char **argv)
|
||||||
case 'o':
|
case 'o':
|
||||||
dev_offset = strtoll (optarg, &end, 0);
|
dev_offset = strtoll (optarg, &end, 0);
|
||||||
if (*end) {
|
if (*end) {
|
||||||
errx(EXIT_FAILURE, "Invalid offset `%s'", optarg);
|
error_report("Invalid offset `%s'", optarg);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
if (dev_offset < 0) {
|
if (dev_offset < 0) {
|
||||||
errx(EXIT_FAILURE, "Offset must be positive `%s'", optarg);
|
error_report("Offset must be positive `%s'", optarg);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'l':
|
case 'l':
|
||||||
|
@ -520,8 +528,9 @@ int main(int argc, char **argv)
|
||||||
sn_opts = qemu_opts_parse_noisily(&internal_snapshot_opts,
|
sn_opts = qemu_opts_parse_noisily(&internal_snapshot_opts,
|
||||||
optarg, false);
|
optarg, false);
|
||||||
if (!sn_opts) {
|
if (!sn_opts) {
|
||||||
errx(EXIT_FAILURE, "Failed in parsing snapshot param `%s'",
|
error_report("Failed in parsing snapshot param `%s'",
|
||||||
optarg);
|
optarg);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
sn_id_or_name = optarg;
|
sn_id_or_name = optarg;
|
||||||
|
@ -534,16 +543,19 @@ int main(int argc, char **argv)
|
||||||
case 'P':
|
case 'P':
|
||||||
partition = strtol(optarg, &end, 0);
|
partition = strtol(optarg, &end, 0);
|
||||||
if (*end) {
|
if (*end) {
|
||||||
errx(EXIT_FAILURE, "Invalid partition `%s'", optarg);
|
error_report("Invalid partition `%s'", optarg);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
if (partition < 1 || partition > 8) {
|
if (partition < 1 || partition > 8) {
|
||||||
errx(EXIT_FAILURE, "Invalid partition %d", partition);
|
error_report("Invalid partition %d", partition);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'k':
|
case 'k':
|
||||||
sockpath = optarg;
|
sockpath = optarg;
|
||||||
if (sockpath[0] != '/') {
|
if (sockpath[0] != '/') {
|
||||||
errx(EXIT_FAILURE, "socket path must be absolute\n");
|
error_report("socket path must be absolute");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'd':
|
case 'd':
|
||||||
|
@ -555,10 +567,12 @@ int main(int argc, char **argv)
|
||||||
case 'e':
|
case 'e':
|
||||||
shared = strtol(optarg, &end, 0);
|
shared = strtol(optarg, &end, 0);
|
||||||
if (*end) {
|
if (*end) {
|
||||||
errx(EXIT_FAILURE, "Invalid shared device number '%s'", optarg);
|
error_report("Invalid shared device number '%s'", optarg);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
if (shared < 1) {
|
if (shared < 1) {
|
||||||
errx(EXIT_FAILURE, "Shared device number must be greater than 0\n");
|
error_report("Shared device number must be greater than 0");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'f':
|
case 'f':
|
||||||
|
@ -579,21 +593,23 @@ int main(int argc, char **argv)
|
||||||
exit(0);
|
exit(0);
|
||||||
break;
|
break;
|
||||||
case '?':
|
case '?':
|
||||||
errx(EXIT_FAILURE, "Try `%s --help' for more information.",
|
error_report("Try `%s --help' for more information.", argv[0]);
|
||||||
argv[0]);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((argc - optind) != 1) {
|
if ((argc - optind) != 1) {
|
||||||
errx(EXIT_FAILURE, "Invalid number of argument.\n"
|
error_report("Invalid number of arguments");
|
||||||
"Try `%s --help' for more information.",
|
error_printf("Try `%s --help' for more information.\n", argv[0]);
|
||||||
argv[0]);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (disconnect) {
|
if (disconnect) {
|
||||||
fd = open(argv[optind], O_RDWR);
|
fd = open(argv[optind], O_RDWR);
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
err(EXIT_FAILURE, "Cannot open %s", argv[optind]);
|
error_report("Cannot open %s: %s", argv[optind],
|
||||||
|
strerror(errno));
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
nbd_disconnect(fd);
|
nbd_disconnect(fd);
|
||||||
|
|
||||||
|
@ -610,7 +626,9 @@ int main(int argc, char **argv)
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (qemu_pipe(stderr_fd) < 0) {
|
if (qemu_pipe(stderr_fd) < 0) {
|
||||||
err(EXIT_FAILURE, "Error setting up communication pipe");
|
error_report("Error setting up communication pipe: %s",
|
||||||
|
strerror(errno));
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Now daemonize, but keep a communication channel open to
|
/* Now daemonize, but keep a communication channel open to
|
||||||
|
@ -618,7 +636,8 @@ int main(int argc, char **argv)
|
||||||
*/
|
*/
|
||||||
pid = fork();
|
pid = fork();
|
||||||
if (pid < 0) {
|
if (pid < 0) {
|
||||||
err(EXIT_FAILURE, "Failed to fork");
|
error_report("Failed to fork: %s", strerror(errno));
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
} else if (pid == 0) {
|
} else if (pid == 0) {
|
||||||
close(stderr_fd[0]);
|
close(stderr_fd[0]);
|
||||||
ret = qemu_daemon(1, 0);
|
ret = qemu_daemon(1, 0);
|
||||||
|
@ -626,7 +645,8 @@ int main(int argc, char **argv)
|
||||||
/* Temporarily redirect stderr to the parent's pipe... */
|
/* Temporarily redirect stderr to the parent's pipe... */
|
||||||
dup2(stderr_fd[1], STDERR_FILENO);
|
dup2(stderr_fd[1], STDERR_FILENO);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
err(EXIT_FAILURE, "Failed to daemonize");
|
error_report("Failed to daemonize: %s", strerror(errno));
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ... close the descriptor we inherited and go on. */
|
/* ... close the descriptor we inherited and go on. */
|
||||||
|
@ -648,7 +668,9 @@ int main(int argc, char **argv)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
err(EXIT_FAILURE, "Cannot read from daemon");
|
error_report("Cannot read from daemon: %s",
|
||||||
|
strerror(errno));
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Usually the daemon should not print any message.
|
/* Usually the daemon should not print any message.
|
||||||
|
@ -680,8 +702,9 @@ int main(int argc, char **argv)
|
||||||
srcpath = argv[optind];
|
srcpath = argv[optind];
|
||||||
blk = blk_new_open("hda", srcpath, NULL, options, flags, &local_err);
|
blk = blk_new_open("hda", srcpath, NULL, options, flags, &local_err);
|
||||||
if (!blk) {
|
if (!blk) {
|
||||||
errx(EXIT_FAILURE, "Failed to blk_new_open '%s': %s", argv[optind],
|
error_reportf_err(local_err, "Failed to blk_new_open '%s': ",
|
||||||
error_get_pretty(local_err));
|
argv[optind]);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
bs = blk_bs(blk);
|
bs = blk_bs(blk);
|
||||||
|
|
||||||
|
@ -695,31 +718,32 @@ int main(int argc, char **argv)
|
||||||
&local_err);
|
&local_err);
|
||||||
}
|
}
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
errno = -ret;
|
error_reportf_err(local_err, "Failed to load snapshot: ");
|
||||||
err(EXIT_FAILURE,
|
exit(EXIT_FAILURE);
|
||||||
"Failed to load snapshot: %s",
|
|
||||||
error_get_pretty(local_err));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bs->detect_zeroes = detect_zeroes;
|
bs->detect_zeroes = detect_zeroes;
|
||||||
fd_size = blk_getlength(blk);
|
fd_size = blk_getlength(blk);
|
||||||
if (fd_size < 0) {
|
if (fd_size < 0) {
|
||||||
errx(EXIT_FAILURE, "Failed to determine the image length: %s",
|
error_report("Failed to determine the image length: %s",
|
||||||
strerror(-fd_size));
|
strerror(-fd_size));
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (partition != -1) {
|
if (partition != -1) {
|
||||||
ret = find_partition(blk, partition, &dev_offset, &fd_size);
|
ret = find_partition(blk, partition, &dev_offset, &fd_size);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
errno = -ret;
|
error_report("Could not find partition %d: %s", partition,
|
||||||
err(EXIT_FAILURE, "Could not find partition %d", partition);
|
strerror(-ret));
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
exp = nbd_export_new(blk, dev_offset, fd_size, nbdflags, nbd_export_closed,
|
exp = nbd_export_new(blk, dev_offset, fd_size, nbdflags, nbd_export_closed,
|
||||||
&local_err);
|
&local_err);
|
||||||
if (!exp) {
|
if (!exp) {
|
||||||
errx(EXIT_FAILURE, "%s", error_get_pretty(local_err));
|
error_report_err(local_err);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
fd = socket_listen(saddr, &local_err);
|
fd = socket_listen(saddr, &local_err);
|
||||||
|
@ -733,8 +757,8 @@ int main(int argc, char **argv)
|
||||||
|
|
||||||
ret = pthread_create(&client_thread, NULL, nbd_client_thread, device);
|
ret = pthread_create(&client_thread, NULL, nbd_client_thread, device);
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
errx(EXIT_FAILURE, "Failed to create client thread: %s",
|
error_report("Failed to create client thread: %s", strerror(ret));
|
||||||
strerror(ret));
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/* Shut up GCC warnings. */
|
/* Shut up GCC warnings. */
|
||||||
|
@ -747,7 +771,9 @@ int main(int argc, char **argv)
|
||||||
/* now when the initialization is (almost) complete, chdir("/")
|
/* now when the initialization is (almost) complete, chdir("/")
|
||||||
* to free any busy filesystems */
|
* to free any busy filesystems */
|
||||||
if (chdir("/") < 0) {
|
if (chdir("/") < 0) {
|
||||||
err(EXIT_FAILURE, "Could not chdir to root directory");
|
error_report("Could not chdir to root directory: %s",
|
||||||
|
strerror(errno));
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
state = RUNNING;
|
state = RUNNING;
|
||||||
|
|
|
@ -2254,7 +2254,7 @@ GuestMemoryBlockList *qmp_guest_get_memory_blocks(Error **errp)
|
||||||
*/
|
*/
|
||||||
if (errno != ENOENT) {
|
if (errno != ENOENT) {
|
||||||
error_setg_errno(errp, errno, "Can't open directory"
|
error_setg_errno(errp, errno, "Can't open directory"
|
||||||
"\"/sys/devices/system/memory/\"\n");
|
"\"/sys/devices/system/memory/\"");
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -291,8 +291,7 @@ void replay_start(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (replay_blockers) {
|
if (replay_blockers) {
|
||||||
error_report("Record/replay: %s",
|
error_reportf_err(replay_blockers->data, "Record/replay: ");
|
||||||
error_get_pretty(replay_blockers->data));
|
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
if (!use_icount) {
|
if (!use_icount) {
|
||||||
|
|
|
@ -2498,6 +2498,42 @@ sub process {
|
||||||
WARN("use QEMU instead of Qemu or QEmu\n" . $herecurr);
|
WARN("use QEMU instead of Qemu or QEmu\n" . $herecurr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Qemu error function tests
|
||||||
|
|
||||||
|
# Find newlines in error messages
|
||||||
|
my $qemu_error_funcs = qr{error_setg|
|
||||||
|
error_setg_errno|
|
||||||
|
error_setg_win32|
|
||||||
|
error_set|
|
||||||
|
error_vreport|
|
||||||
|
error_report}x;
|
||||||
|
|
||||||
|
if ($rawline =~ /\b(?:$qemu_error_funcs)\s*\(\s*\".*\\n/) {
|
||||||
|
WARN("Error messages should not contain newlines\n" . $herecurr);
|
||||||
|
}
|
||||||
|
|
||||||
|
# Continue checking for error messages that contains newlines. This
|
||||||
|
# check handles cases where string literals are spread over multiple lines.
|
||||||
|
# Example:
|
||||||
|
# error_report("Error msg line #1"
|
||||||
|
# "Error msg line #2\n");
|
||||||
|
my $quoted_newline_regex = qr{\+\s*\".*\\n.*\"};
|
||||||
|
my $continued_str_literal = qr{\+\s*\".*\"};
|
||||||
|
|
||||||
|
if ($rawline =~ /$quoted_newline_regex/) {
|
||||||
|
# Backtrack to first line that does not contain only a quoted literal
|
||||||
|
# and assume that it is the start of the statement.
|
||||||
|
my $i = $linenr - 2;
|
||||||
|
|
||||||
|
while (($i >= 0) & $rawlines[$i] =~ /$continued_str_literal/) {
|
||||||
|
$i--;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($rawlines[$i] =~ /\b(?:$qemu_error_funcs)\s*\(/) {
|
||||||
|
WARN("Error messages should not contain newlines\n" . $herecurr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
# check for non-portable ffs() calls that have portable alternatives in QEMU
|
# check for non-portable ffs() calls that have portable alternatives in QEMU
|
||||||
if ($line =~ /\bffs\(/) {
|
if ($line =~ /\bffs\(/) {
|
||||||
ERROR("use ctz32() instead of ffs()\n" . $herecurr);
|
ERROR("use ctz32() instead of ffs()\n" . $herecurr);
|
||||||
|
|
|
@ -649,7 +649,7 @@ static void arm_cpu_realizefn(DeviceState *dev, Error **errp)
|
||||||
uint32_t nr = cpu->pmsav7_dregion;
|
uint32_t nr = cpu->pmsav7_dregion;
|
||||||
|
|
||||||
if (nr > 0xff) {
|
if (nr > 0xff) {
|
||||||
error_setg(errp, "PMSAv7 MPU #regions invalid %" PRIu32 "\n", nr);
|
error_setg(errp, "PMSAv7 MPU #regions invalid %" PRIu32, nr);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -337,11 +337,11 @@ const char *gicv3_class_name(void)
|
||||||
return "kvm-arm-gicv3";
|
return "kvm-arm-gicv3";
|
||||||
#else
|
#else
|
||||||
error_report("KVM GICv3 acceleration is not supported on this "
|
error_report("KVM GICv3 acceleration is not supported on this "
|
||||||
"platform\n");
|
"platform");
|
||||||
#endif
|
#endif
|
||||||
} else {
|
} else {
|
||||||
/* TODO: Software emulation is not implemented yet */
|
/* TODO: Software emulation is not implemented yet */
|
||||||
error_report("KVM is currently required for GICv3 emulation\n");
|
error_report("KVM is currently required for GICv3 emulation");
|
||||||
}
|
}
|
||||||
|
|
||||||
exit(1);
|
exit(1);
|
||||||
|
|
|
@ -2,17 +2,17 @@ QA output created by 059
|
||||||
|
|
||||||
=== Testing invalid granularity ===
|
=== Testing invalid granularity ===
|
||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
|
||||||
qemu-io: can't open device TEST_DIR/t.vmdk: Invalid granularity, image may be corrupt
|
can't open device TEST_DIR/t.vmdk: Invalid granularity, image may be corrupt
|
||||||
no file open, try 'help open'
|
no file open, try 'help open'
|
||||||
|
|
||||||
=== Testing too big L2 table size ===
|
=== Testing too big L2 table size ===
|
||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
|
||||||
qemu-io: can't open device TEST_DIR/t.vmdk: L2 table size too big
|
can't open device TEST_DIR/t.vmdk: L2 table size too big
|
||||||
no file open, try 'help open'
|
no file open, try 'help open'
|
||||||
|
|
||||||
=== Testing too big L1 table size ===
|
=== Testing too big L1 table size ===
|
||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
|
||||||
qemu-io: can't open device TEST_DIR/t.vmdk: L1 size too big
|
can't open device TEST_DIR/t.vmdk: L1 size too big
|
||||||
no file open, try 'help open'
|
no file open, try 'help open'
|
||||||
|
|
||||||
=== Testing monolithicFlat creation and opening ===
|
=== Testing monolithicFlat creation and opening ===
|
||||||
|
@ -2038,9 +2038,7 @@ Format specific information:
|
||||||
format: FLAT
|
format: FLAT
|
||||||
|
|
||||||
=== Testing malformed VMFS extent description line ===
|
=== Testing malformed VMFS extent description line ===
|
||||||
qemu-img: Could not open 'TEST_DIR/t.IMGFMT': Invalid extent lines:
|
qemu-img: Could not open 'TEST_DIR/t.IMGFMT': Invalid extent line: RW 12582912 VMFS "dummy.IMGFMT" 1
|
||||||
RW 12582912 VMFS "dummy.IMGFMT" 1
|
|
||||||
|
|
||||||
|
|
||||||
=== Testing truncated sparse ===
|
=== Testing truncated sparse ===
|
||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=107374182400 subformat=monolithicSparse
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=107374182400 subformat=monolithicSparse
|
||||||
|
@ -2055,7 +2053,7 @@ wrote 512/512 bytes at offset 10240
|
||||||
|
|
||||||
=== Testing monolithicFlat with internally generated JSON file name ===
|
=== Testing monolithicFlat with internally generated JSON file name ===
|
||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 subformat=monolithicFlat
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 subformat=monolithicFlat
|
||||||
qemu-io: can't open: Cannot use relative extent paths with VMDK descriptor file 'json:{"image": {"driver": "file", "filename": "TEST_DIR/t.IMGFMT"}, "driver": "blkdebug", "inject-error.0.event": "read_aio"}'
|
can't open: Cannot use relative extent paths with VMDK descriptor file 'json:{"image": {"driver": "file", "filename": "TEST_DIR/t.IMGFMT"}, "driver": "blkdebug", "inject-error.0.event": "read_aio"}'
|
||||||
|
|
||||||
=== Testing version 3 ===
|
=== Testing version 3 ===
|
||||||
image: TEST_DIR/iotest-version3.IMGFMT
|
image: TEST_DIR/iotest-version3.IMGFMT
|
||||||
|
|
|
@ -20,7 +20,7 @@ Format specific information:
|
||||||
lazy refcounts: false
|
lazy refcounts: false
|
||||||
refcount bits: 16
|
refcount bits: 16
|
||||||
corrupt: true
|
corrupt: true
|
||||||
qemu-io: can't open device TEST_DIR/t.IMGFMT: IMGFMT: Image is corrupt; cannot be opened read/write
|
can't open device TEST_DIR/t.IMGFMT: IMGFMT: Image is corrupt; cannot be opened read/write
|
||||||
read 512/512 bytes at offset 0
|
read 512/512 bytes at offset 0
|
||||||
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||||
|
|
||||||
|
|
|
@ -4,5 +4,5 @@ QA output created by 069
|
||||||
|
|
||||||
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=131072
|
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=131072
|
||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=131072 backing_file=TEST_DIR/t.IMGFMT.base
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=131072 backing_file=TEST_DIR/t.IMGFMT.base
|
||||||
qemu-io: can't open device TEST_DIR/t.IMGFMT: Could not open backing file: Could not open 'TEST_DIR/t.IMGFMT.base': No such file or directory
|
can't open device TEST_DIR/t.IMGFMT: Could not open backing file: Could not open 'TEST_DIR/t.IMGFMT.base': No such file or directory
|
||||||
*** done
|
*** done
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
QA output created by 070
|
QA output created by 070
|
||||||
|
|
||||||
=== Verify open image read-only fails, due to dirty log ===
|
=== Verify open image read-only fails, due to dirty log ===
|
||||||
qemu-io: can't open device TEST_DIR/iotest-dirtylog-10G-4M.vhdx: VHDX image file 'TEST_DIR/iotest-dirtylog-10G-4M.vhdx' opened read-only, but contains a log that needs to be replayed. To replay the log, execute:
|
can't open device TEST_DIR/iotest-dirtylog-10G-4M.vhdx: VHDX image file 'TEST_DIR/iotest-dirtylog-10G-4M.vhdx' opened read-only, but contains a log that needs to be replayed
|
||||||
qemu-img check -r all 'TEST_DIR/iotest-dirtylog-10G-4M.vhdx': Operation not permitted
|
To replay the log, run:
|
||||||
|
qemu-img check -r all 'TEST_DIR/iotest-dirtylog-10G-4M.vhdx'
|
||||||
no file open, try 'help open'
|
no file open, try 'help open'
|
||||||
=== Verify open image replays log ===
|
=== Verify open image replays log ===
|
||||||
read 18874368/18874368 bytes at offset 0
|
read 18874368/18874368 bytes at offset 0
|
||||||
|
|
|
@ -9,30 +9,30 @@ read 512/512 bytes at offset 1048064
|
||||||
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||||
|
|
||||||
== block_size must be a multiple of 512 ==
|
== block_size must be a multiple of 512 ==
|
||||||
qemu-io: can't open device TEST_DIR/simple-pattern.cloop: block_size 513 must be a multiple of 512
|
can't open device TEST_DIR/simple-pattern.cloop: block_size 513 must be a multiple of 512
|
||||||
no file open, try 'help open'
|
no file open, try 'help open'
|
||||||
|
|
||||||
== block_size cannot be zero ==
|
== block_size cannot be zero ==
|
||||||
qemu-io: can't open device TEST_DIR/simple-pattern.cloop: block_size cannot be zero
|
can't open device TEST_DIR/simple-pattern.cloop: block_size cannot be zero
|
||||||
no file open, try 'help open'
|
no file open, try 'help open'
|
||||||
|
|
||||||
== huge block_size ===
|
== huge block_size ===
|
||||||
qemu-io: can't open device TEST_DIR/simple-pattern.cloop: block_size 4294966784 must be 64 MB or less
|
can't open device TEST_DIR/simple-pattern.cloop: block_size 4294966784 must be 64 MB or less
|
||||||
no file open, try 'help open'
|
no file open, try 'help open'
|
||||||
|
|
||||||
== offsets_size overflow ===
|
== offsets_size overflow ===
|
||||||
qemu-io: can't open device TEST_DIR/simple-pattern.cloop: n_blocks 4294967295 must be 536870911 or less
|
can't open device TEST_DIR/simple-pattern.cloop: n_blocks 4294967295 must be 536870911 or less
|
||||||
no file open, try 'help open'
|
no file open, try 'help open'
|
||||||
|
|
||||||
== refuse images that require too many offsets ===
|
== refuse images that require too many offsets ===
|
||||||
qemu-io: can't open device TEST_DIR/simple-pattern.cloop: image requires too many offsets, try increasing block size
|
can't open device TEST_DIR/simple-pattern.cloop: image requires too many offsets, try increasing block size
|
||||||
no file open, try 'help open'
|
no file open, try 'help open'
|
||||||
|
|
||||||
== refuse images with non-monotonically increasing offsets ==
|
== refuse images with non-monotonically increasing offsets ==
|
||||||
qemu-io: can't open device TEST_DIR/simple-pattern.cloop: offsets not monotonically increasing at index 1, image file is corrupt
|
can't open device TEST_DIR/simple-pattern.cloop: offsets not monotonically increasing at index 1, image file is corrupt
|
||||||
no file open, try 'help open'
|
no file open, try 'help open'
|
||||||
|
|
||||||
== refuse images with invalid compressed block size ==
|
== refuse images with invalid compressed block size ==
|
||||||
qemu-io: can't open device TEST_DIR/simple-pattern.cloop: invalid compressed block size at index 1, image file is corrupt
|
can't open device TEST_DIR/simple-pattern.cloop: invalid compressed block size at index 1, image file is corrupt
|
||||||
no file open, try 'help open'
|
no file open, try 'help open'
|
||||||
*** done
|
*** done
|
||||||
|
|
|
@ -5,15 +5,15 @@ read 65536/65536 bytes at offset 0
|
||||||
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||||
|
|
||||||
== Negative catalog size ==
|
== Negative catalog size ==
|
||||||
qemu-io: can't open device TEST_DIR/parallels-v1: Catalog too large
|
can't open device TEST_DIR/parallels-v1: Catalog too large
|
||||||
no file open, try 'help open'
|
no file open, try 'help open'
|
||||||
|
|
||||||
== Overflow in catalog allocation ==
|
== Overflow in catalog allocation ==
|
||||||
qemu-io: can't open device TEST_DIR/parallels-v1: Catalog too large
|
can't open device TEST_DIR/parallels-v1: Catalog too large
|
||||||
no file open, try 'help open'
|
no file open, try 'help open'
|
||||||
|
|
||||||
== Zero sectors per track ==
|
== Zero sectors per track ==
|
||||||
qemu-io: can't open device TEST_DIR/parallels-v1: Invalid image: Zero sectors per track
|
can't open device TEST_DIR/parallels-v1: Invalid image: Zero sectors per track
|
||||||
no file open, try 'help open'
|
no file open, try 'help open'
|
||||||
|
|
||||||
== Read from a valid v2 image ==
|
== Read from a valid v2 image ==
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue