From: Markus Armbruster <armbru@redhat.com>
To: qemu-devel@nongnu.org
Cc: Paul Burton <pburton@wavecomp.com>,
Aleksandar Rikalo <arikalo@wavecomp.com>
Subject: [Qemu-devel] [PATCH v2 04/15] loader-fit: Wean off error_printf()
Date: Thu, 11 Apr 2019 16:52:45 +0200 [thread overview]
Message-ID: <20190411145256.8614-5-armbru@redhat.com> (raw)
In-Reply-To: <20190411145256.8614-1-armbru@redhat.com>
load_fit() reports errors with error_printf() instead of
error_report(). Worse, it even reports errors it actually recovers
from, in fit_cfg_compatible() and fit_load_fdt(). Messed up in
initial commit 51b58561c1d.
Convert the helper functions for load_fit() to Error. Make sure each
failure path sets an error.
Fix fit_cfg_compatible() and fit_load_fdt() not to report errors they
actually recover from.
Convert load_fit() to error_report().
Cc: Paul Burton <pburton@wavecomp.com>
Cc: Aleksandar Rikalo <arikalo@wavecomp.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
hw/core/loader-fit.c | 62 +++++++++++++++++++++++++-------------------
1 file changed, 36 insertions(+), 26 deletions(-)
diff --git a/hw/core/loader-fit.c b/hw/core/loader-fit.c
index 447f60857d..f27b6af942 100644
--- a/hw/core/loader-fit.c
+++ b/hw/core/loader-fit.c
@@ -18,6 +18,7 @@
*/
#include "qemu/osdep.h"
+#include "qapi/error.h"
#include "qemu/units.h"
#include "exec/memory.h"
#include "hw/loader.h"
@@ -33,7 +34,7 @@
#define FIT_LOADER_MAX_PATH (128)
static const void *fit_load_image_alloc(const void *itb, const char *name,
- int *poff, size_t *psz)
+ int *poff, size_t *psz, Error **errp)
{
const void *data;
const char *comp;
@@ -46,6 +47,7 @@ static const void *fit_load_image_alloc(const void *itb, const char *name,
off = fdt_path_offset(itb, path);
if (off < 0) {
+ error_setg(errp, "can't find node %s", path);
return NULL;
}
if (poff) {
@@ -54,6 +56,7 @@ static const void *fit_load_image_alloc(const void *itb, const char *name,
data = fdt_getprop(itb, off, "data", &sz);
if (!data) {
+ error_setg(errp, "can't get %s/data", path);
return NULL;
}
@@ -73,7 +76,7 @@ static const void *fit_load_image_alloc(const void *itb, const char *name,
uncomp_len = gunzip(uncomp_data, uncomp_len, (void *) data, sz);
if (uncomp_len < 0) {
- error_printf("unable to decompress %s image\n", name);
+ error_setg(errp, "unable to decompress %s image", name);
g_free(uncomp_data);
return NULL;
}
@@ -85,18 +88,19 @@ static const void *fit_load_image_alloc(const void *itb, const char *name,
return data;
}
- error_printf("unknown compression '%s'\n", comp);
+ error_setg(errp, "unknown compression '%s'", comp);
return NULL;
}
static int fit_image_addr(const void *itb, int img, const char *name,
- hwaddr *addr)
+ hwaddr *addr, Error **errp)
{
const void *prop;
int len;
prop = fdt_getprop(itb, img, name, &len);
if (!prop) {
+ error_setg(errp, "can't find %s address", name);
return -ENOENT;
}
@@ -108,13 +112,14 @@ static int fit_image_addr(const void *itb, int img, const char *name,
*addr = fdt64_to_cpu(*(fdt64_t *)prop);
return 0;
default:
- error_printf("invalid %s address length %d\n", name, len);
+ error_setg(errp, "invalid %s address length %d", name, len);
return -EINVAL;
}
}
static int fit_load_kernel(const struct fit_loader *ldr, const void *itb,
- int cfg, void *opaque, hwaddr *pend)
+ int cfg, void *opaque, hwaddr *pend,
+ Error **errp)
{
const char *name;
const void *data;
@@ -126,26 +131,26 @@ static int fit_load_kernel(const struct fit_loader *ldr, const void *itb,
name = fdt_getprop(itb, cfg, "kernel", NULL);
if (!name) {
- error_printf("no kernel specified by FIT configuration\n");
+ error_setg(errp, "no kernel specified by FIT configuration");
return -EINVAL;
}
- load_data = data = fit_load_image_alloc(itb, name, &img_off, &sz);
+ load_data = data = fit_load_image_alloc(itb, name, &img_off, &sz, errp);
if (!data) {
- error_printf("unable to load kernel image from FIT\n");
+ error_prepend(errp, "unable to load kernel image from FIT: ");
return -EINVAL;
}
- err = fit_image_addr(itb, img_off, "load", &load_addr);
+ err = fit_image_addr(itb, img_off, "load", &load_addr, errp);
if (err) {
- error_printf("unable to read kernel load address from FIT\n");
+ error_prepend(errp, "unable to read kernel load address from FIT: ");
ret = err;
goto out;
}
- err = fit_image_addr(itb, img_off, "entry", &entry_addr);
+ err = fit_image_addr(itb, img_off, "entry", &entry_addr, errp);
if (err) {
- error_printf("unable to read kernel entry address from FIT\n");
+ error_prepend(errp, "unable to read kernel entry address from FIT: ");
ret = err;
goto out;
}
@@ -172,7 +177,7 @@ out:
static int fit_load_fdt(const struct fit_loader *ldr, const void *itb,
int cfg, void *opaque, const void *match_data,
- hwaddr kernel_end)
+ hwaddr kernel_end, Error **errp)
{
const char *name;
const void *data;
@@ -187,16 +192,18 @@ static int fit_load_fdt(const struct fit_loader *ldr, const void *itb,
return 0;
}
- load_data = data = fit_load_image_alloc(itb, name, &img_off, &sz);
+ load_data = data = fit_load_image_alloc(itb, name, &img_off, &sz, errp);
if (!data) {
- error_printf("unable to load FDT image from FIT\n");
+ error_prepend(errp, "unable to load FDT image from FIT: ");
return -EINVAL;
}
- err = fit_image_addr(itb, img_off, "load", &load_addr);
+ err = fit_image_addr(itb, img_off, "load", &load_addr, errp);
if (err == -ENOENT) {
load_addr = ROUND_UP(kernel_end, 64 * KiB) + (10 * MiB);
+ error_free(*errp);
} else if (err) {
+ error_prepend(errp, "unable to read FDT load address from FIT: ");
ret = err;
goto out;
}
@@ -229,7 +236,7 @@ static bool fit_cfg_compatible(const void *itb, int cfg, const char *compat)
return false;
}
- fdt = fit_load_image_alloc(itb, fdt_name, NULL, NULL);
+ fdt = fit_load_image_alloc(itb, fdt_name, NULL, NULL, NULL);
if (!fdt) {
return false;
}
@@ -252,11 +259,12 @@ out:
int load_fit(const struct fit_loader *ldr, const char *filename, void *opaque)
{
+ Error *err = NULL;
const struct fit_loader_match *match;
const void *itb, *match_data = NULL;
const char *def_cfg_name;
char path[FIT_LOADER_MAX_PATH];
- int itb_size, configs, cfg_off, off, err;
+ int itb_size, configs, cfg_off, off;
hwaddr kernel_end;
int ret;
@@ -267,6 +275,7 @@ int load_fit(const struct fit_loader *ldr, const char *filename, void *opaque)
configs = fdt_path_offset(itb, "/configurations");
if (configs < 0) {
+ error_report("can't find node /configurations");
ret = configs;
goto out;
}
@@ -301,20 +310,21 @@ int load_fit(const struct fit_loader *ldr, const char *filename, void *opaque)
}
if (cfg_off < 0) {
- /* couldn't find a configuration to use */
+ error_report("can't find configuration");
ret = cfg_off;
goto out;
}
- err = fit_load_kernel(ldr, itb, cfg_off, opaque, &kernel_end);
- if (err) {
- ret = err;
+ ret = fit_load_kernel(ldr, itb, cfg_off, opaque, &kernel_end, &err);
+ if (ret) {
+ error_report_err(err);
goto out;
}
- err = fit_load_fdt(ldr, itb, cfg_off, opaque, match_data, kernel_end);
- if (err) {
- ret = err;
+ ret = fit_load_fdt(ldr, itb, cfg_off, opaque, match_data, kernel_end,
+ &err);
+ if (ret) {
+ error_report_err(err);
goto out;
}
--
2.17.2
WARNING: multiple messages have this Message-ID (diff)
From: Markus Armbruster <armbru@redhat.com>
To: qemu-devel@nongnu.org
Cc: Aleksandar Rikalo <arikalo@wavecomp.com>,
Paul Burton <pburton@wavecomp.com>
Subject: [Qemu-devel] [PATCH v2 04/15] loader-fit: Wean off error_printf()
Date: Thu, 11 Apr 2019 16:52:45 +0200 [thread overview]
Message-ID: <20190411145256.8614-5-armbru@redhat.com> (raw)
Message-ID: <20190411145245.11bxtrDVQc2TNCwGeNvxJrxAAYohv8rfn96qPChUEzI@z> (raw)
In-Reply-To: <20190411145256.8614-1-armbru@redhat.com>
load_fit() reports errors with error_printf() instead of
error_report(). Worse, it even reports errors it actually recovers
from, in fit_cfg_compatible() and fit_load_fdt(). Messed up in
initial commit 51b58561c1d.
Convert the helper functions for load_fit() to Error. Make sure each
failure path sets an error.
Fix fit_cfg_compatible() and fit_load_fdt() not to report errors they
actually recover from.
Convert load_fit() to error_report().
Cc: Paul Burton <pburton@wavecomp.com>
Cc: Aleksandar Rikalo <arikalo@wavecomp.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
hw/core/loader-fit.c | 62 +++++++++++++++++++++++++-------------------
1 file changed, 36 insertions(+), 26 deletions(-)
diff --git a/hw/core/loader-fit.c b/hw/core/loader-fit.c
index 447f60857d..f27b6af942 100644
--- a/hw/core/loader-fit.c
+++ b/hw/core/loader-fit.c
@@ -18,6 +18,7 @@
*/
#include "qemu/osdep.h"
+#include "qapi/error.h"
#include "qemu/units.h"
#include "exec/memory.h"
#include "hw/loader.h"
@@ -33,7 +34,7 @@
#define FIT_LOADER_MAX_PATH (128)
static const void *fit_load_image_alloc(const void *itb, const char *name,
- int *poff, size_t *psz)
+ int *poff, size_t *psz, Error **errp)
{
const void *data;
const char *comp;
@@ -46,6 +47,7 @@ static const void *fit_load_image_alloc(const void *itb, const char *name,
off = fdt_path_offset(itb, path);
if (off < 0) {
+ error_setg(errp, "can't find node %s", path);
return NULL;
}
if (poff) {
@@ -54,6 +56,7 @@ static const void *fit_load_image_alloc(const void *itb, const char *name,
data = fdt_getprop(itb, off, "data", &sz);
if (!data) {
+ error_setg(errp, "can't get %s/data", path);
return NULL;
}
@@ -73,7 +76,7 @@ static const void *fit_load_image_alloc(const void *itb, const char *name,
uncomp_len = gunzip(uncomp_data, uncomp_len, (void *) data, sz);
if (uncomp_len < 0) {
- error_printf("unable to decompress %s image\n", name);
+ error_setg(errp, "unable to decompress %s image", name);
g_free(uncomp_data);
return NULL;
}
@@ -85,18 +88,19 @@ static const void *fit_load_image_alloc(const void *itb, const char *name,
return data;
}
- error_printf("unknown compression '%s'\n", comp);
+ error_setg(errp, "unknown compression '%s'", comp);
return NULL;
}
static int fit_image_addr(const void *itb, int img, const char *name,
- hwaddr *addr)
+ hwaddr *addr, Error **errp)
{
const void *prop;
int len;
prop = fdt_getprop(itb, img, name, &len);
if (!prop) {
+ error_setg(errp, "can't find %s address", name);
return -ENOENT;
}
@@ -108,13 +112,14 @@ static int fit_image_addr(const void *itb, int img, const char *name,
*addr = fdt64_to_cpu(*(fdt64_t *)prop);
return 0;
default:
- error_printf("invalid %s address length %d\n", name, len);
+ error_setg(errp, "invalid %s address length %d", name, len);
return -EINVAL;
}
}
static int fit_load_kernel(const struct fit_loader *ldr, const void *itb,
- int cfg, void *opaque, hwaddr *pend)
+ int cfg, void *opaque, hwaddr *pend,
+ Error **errp)
{
const char *name;
const void *data;
@@ -126,26 +131,26 @@ static int fit_load_kernel(const struct fit_loader *ldr, const void *itb,
name = fdt_getprop(itb, cfg, "kernel", NULL);
if (!name) {
- error_printf("no kernel specified by FIT configuration\n");
+ error_setg(errp, "no kernel specified by FIT configuration");
return -EINVAL;
}
- load_data = data = fit_load_image_alloc(itb, name, &img_off, &sz);
+ load_data = data = fit_load_image_alloc(itb, name, &img_off, &sz, errp);
if (!data) {
- error_printf("unable to load kernel image from FIT\n");
+ error_prepend(errp, "unable to load kernel image from FIT: ");
return -EINVAL;
}
- err = fit_image_addr(itb, img_off, "load", &load_addr);
+ err = fit_image_addr(itb, img_off, "load", &load_addr, errp);
if (err) {
- error_printf("unable to read kernel load address from FIT\n");
+ error_prepend(errp, "unable to read kernel load address from FIT: ");
ret = err;
goto out;
}
- err = fit_image_addr(itb, img_off, "entry", &entry_addr);
+ err = fit_image_addr(itb, img_off, "entry", &entry_addr, errp);
if (err) {
- error_printf("unable to read kernel entry address from FIT\n");
+ error_prepend(errp, "unable to read kernel entry address from FIT: ");
ret = err;
goto out;
}
@@ -172,7 +177,7 @@ out:
static int fit_load_fdt(const struct fit_loader *ldr, const void *itb,
int cfg, void *opaque, const void *match_data,
- hwaddr kernel_end)
+ hwaddr kernel_end, Error **errp)
{
const char *name;
const void *data;
@@ -187,16 +192,18 @@ static int fit_load_fdt(const struct fit_loader *ldr, const void *itb,
return 0;
}
- load_data = data = fit_load_image_alloc(itb, name, &img_off, &sz);
+ load_data = data = fit_load_image_alloc(itb, name, &img_off, &sz, errp);
if (!data) {
- error_printf("unable to load FDT image from FIT\n");
+ error_prepend(errp, "unable to load FDT image from FIT: ");
return -EINVAL;
}
- err = fit_image_addr(itb, img_off, "load", &load_addr);
+ err = fit_image_addr(itb, img_off, "load", &load_addr, errp);
if (err == -ENOENT) {
load_addr = ROUND_UP(kernel_end, 64 * KiB) + (10 * MiB);
+ error_free(*errp);
} else if (err) {
+ error_prepend(errp, "unable to read FDT load address from FIT: ");
ret = err;
goto out;
}
@@ -229,7 +236,7 @@ static bool fit_cfg_compatible(const void *itb, int cfg, const char *compat)
return false;
}
- fdt = fit_load_image_alloc(itb, fdt_name, NULL, NULL);
+ fdt = fit_load_image_alloc(itb, fdt_name, NULL, NULL, NULL);
if (!fdt) {
return false;
}
@@ -252,11 +259,12 @@ out:
int load_fit(const struct fit_loader *ldr, const char *filename, void *opaque)
{
+ Error *err = NULL;
const struct fit_loader_match *match;
const void *itb, *match_data = NULL;
const char *def_cfg_name;
char path[FIT_LOADER_MAX_PATH];
- int itb_size, configs, cfg_off, off, err;
+ int itb_size, configs, cfg_off, off;
hwaddr kernel_end;
int ret;
@@ -267,6 +275,7 @@ int load_fit(const struct fit_loader *ldr, const char *filename, void *opaque)
configs = fdt_path_offset(itb, "/configurations");
if (configs < 0) {
+ error_report("can't find node /configurations");
ret = configs;
goto out;
}
@@ -301,20 +310,21 @@ int load_fit(const struct fit_loader *ldr, const char *filename, void *opaque)
}
if (cfg_off < 0) {
- /* couldn't find a configuration to use */
+ error_report("can't find configuration");
ret = cfg_off;
goto out;
}
- err = fit_load_kernel(ldr, itb, cfg_off, opaque, &kernel_end);
- if (err) {
- ret = err;
+ ret = fit_load_kernel(ldr, itb, cfg_off, opaque, &kernel_end, &err);
+ if (ret) {
+ error_report_err(err);
goto out;
}
- err = fit_load_fdt(ldr, itb, cfg_off, opaque, match_data, kernel_end);
- if (err) {
- ret = err;
+ ret = fit_load_fdt(ldr, itb, cfg_off, opaque, match_data, kernel_end,
+ &err);
+ if (ret) {
+ error_report_err(err);
goto out;
}
--
2.17.2
next prev parent reply other threads:[~2019-04-11 14:53 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-04-11 14:52 [Qemu-devel] [PATCH v2 00/15] Clean up use of error_printf() Markus Armbruster
2019-04-11 14:52 ` [Qemu-devel] [PATCH v2 01/15] qemu-img: Use error_vreport() in error_exit() Markus Armbruster
2019-04-11 14:52 ` Markus Armbruster
2019-04-11 14:52 ` [Qemu-devel] [PATCH v2 02/15] block/ssh: Do not report read/write/flush errors to the user Markus Armbruster
2019-04-11 14:52 ` Markus Armbruster
2019-04-11 14:52 ` [Qemu-devel] [PATCH v2 03/15] char-pty: Drop "char device redirected to" message Markus Armbruster
2019-04-11 15:22 ` Paolo Bonzini
2019-04-11 15:37 ` Markus Armbruster
2019-04-11 15:37 ` Markus Armbruster
2019-04-17 18:09 ` Markus Armbruster
2019-04-17 18:09 ` Markus Armbruster
2019-04-11 15:23 ` Peter Krempa
2019-04-11 15:23 ` Peter Krempa
2019-04-11 14:52 ` Markus Armbruster [this message]
2019-04-11 14:52 ` [Qemu-devel] [PATCH v2 04/15] loader-fit: Wean off error_printf() Markus Armbruster
2019-04-11 14:52 ` [Qemu-devel] [PATCH v2 05/15] mips/boston: Report errors with error_report(), not error_printf() Markus Armbruster
2019-04-11 14:52 ` Markus Armbruster
2019-04-11 14:52 ` [Qemu-devel] [PATCH v2 06/15] pci: Report fatal " Markus Armbruster
2019-04-11 14:52 ` Markus Armbruster
2019-04-11 14:52 ` [Qemu-devel] [PATCH v2 07/15] hpet: Report warnings with warn_report(), " Markus Armbruster
2019-04-11 14:52 ` Markus Armbruster
2019-04-11 14:52 ` [Qemu-devel] [PATCH v2 08/15] vfio: " Markus Armbruster
2019-04-11 14:52 ` [Qemu-devel] [PATCH v2 09/15] s390x/kvm: " Markus Armbruster
2019-04-11 14:52 ` [Qemu-devel] [PATCH v2 10/15] vl: Make -machine $TYPE, help and -accel help print to stdout Markus Armbruster
2019-04-11 14:52 ` [Qemu-devel] [PATCH v2 11/15] monitor error: Make printf()-like functions return a value Markus Armbruster
2019-04-11 14:52 ` [Qemu-devel] [PATCH v2 12/15] qemu-print: New qemu_printf(), qemu_vprintf() etc Markus Armbruster
2019-04-11 14:52 ` [Qemu-devel] [PATCH v2 13/15] blockdev: Make -drive format=help print to stdout Markus Armbruster
2019-04-11 14:52 ` Markus Armbruster
2019-04-11 14:52 ` [Qemu-devel] [PATCH v2 14/15] char: Make -chardev help " Markus Armbruster
2019-04-11 14:52 ` [Qemu-devel] [PATCH v2 15/15] monitor: Simplify how -device/device_add print help Markus Armbruster
2019-04-17 18:11 ` [Qemu-devel] [PATCH v2 14.5/15] char-pty: Print "char device redirected" message to stdout Markus Armbruster
2019-04-17 18:21 ` no-reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190411145256.8614-5-armbru@redhat.com \
--to=armbru@redhat.com \
--cc=arikalo@wavecomp.com \
--cc=pburton@wavecomp.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.