79c4324644
Change-Id: I2d302dda68298877c65c99147f5bf22186a59aac
82 lines
3.0 KiB
Diff
82 lines
3.0 KiB
Diff
From b167d664414e7d4a5a7a7058bc4c7699f6e66d48 Mon Sep 17 00:00:00 2001
|
|
From: jianchunfu <jianchunfu_yewu@cmss.chinamobile.com>
|
|
Date: Thu, 4 Aug 2022 15:57:46 +0800
|
|
Subject: [PATCH 6/9] target/ppc: enhance error report in
|
|
kvmppc_read_int_cpu_dt()
|
|
|
|
First and foremost, the function can't return '-1' when an error occurs
|
|
because the return type is set to uint64_t. Let's fix that.
|
|
After that, the function can't simply return 0 whether an error happened
|
|
and call it a day. We must provide a way of letting callers know if the
|
|
zero return is legitimate or due to an error.
|
|
Add an Error pointer to kvmppc_read_int_cpu_dt() that will be filled
|
|
with an appropriate error, if one occurs. Callers are then free to pass
|
|
an Error pointer and handle it.
|
|
|
|
Signed-off-by: jianchunfu <jianchunfu_yewu@cmss.chinamobile.com>
|
|
---
|
|
target/ppc/kvm.c | 20 +++++++++++---------
|
|
1 file changed, 11 insertions(+), 9 deletions(-)
|
|
|
|
diff --git a/target/ppc/kvm.c b/target/ppc/kvm.c
|
|
index 63382256c3..d64d7c5b4a 100644
|
|
--- a/target/ppc/kvm.c
|
|
+++ b/target/ppc/kvm.c
|
|
@@ -1925,20 +1925,22 @@ static uint64_t kvmppc_read_int_dt(const char *filename, Error **errp)
|
|
|
|
/*
|
|
* Read a CPU node property from the host device tree that's a single
|
|
- * integer (32-bit or 64-bit). Returns 0 if anything goes wrong
|
|
- * (can't find or open the property, or doesn't understand the format)
|
|
+ * integer (32-bit or 64-bit). Returns 0 and set errp if anything goes
|
|
+ * wrong (can't find or open the property, or doesn't understand the
|
|
+ * format)
|
|
*/
|
|
-static uint64_t kvmppc_read_int_cpu_dt(const char *propname)
|
|
+static uint64_t kvmppc_read_int_cpu_dt(const char *propname, Error **errp)
|
|
{
|
|
char buf[PATH_MAX], *tmp;
|
|
uint64_t val;
|
|
|
|
if (kvmppc_find_cpu_dt(buf, sizeof(buf))) {
|
|
- return -1;
|
|
+ error_setg(errp, "Failed to read CPU property %s", propname);
|
|
+ return 0;
|
|
}
|
|
|
|
tmp = g_strdup_printf("%s/%s", buf, propname);
|
|
- val = kvmppc_read_int_dt(tmp, NULL);
|
|
+ val = kvmppc_read_int_dt(tmp, errp);
|
|
g_free(tmp);
|
|
|
|
return val;
|
|
@@ -1946,12 +1948,12 @@ static uint64_t kvmppc_read_int_cpu_dt(const char *propname)
|
|
|
|
uint64_t kvmppc_get_clockfreq(void)
|
|
{
|
|
- return kvmppc_read_int_cpu_dt("clock-frequency");
|
|
+ return kvmppc_read_int_cpu_dt("clock-frequency", NULL);
|
|
}
|
|
|
|
static int kvmppc_get_dec_bits(void)
|
|
{
|
|
- int nr_bits = kvmppc_read_int_cpu_dt("ibm,dec-bits");
|
|
+ int nr_bits = kvmppc_read_int_cpu_dt("ibm,dec-bits", NULL);
|
|
|
|
if (nr_bits > 0) {
|
|
return nr_bits;
|
|
@@ -2336,8 +2338,8 @@ static void alter_insns(uint64_t *word, uint64_t flags, bool on)
|
|
static void kvmppc_host_cpu_class_init(ObjectClass *oc, void *data)
|
|
{
|
|
PowerPCCPUClass *pcc = POWERPC_CPU_CLASS(oc);
|
|
- uint32_t dcache_size = kvmppc_read_int_cpu_dt("d-cache-size");
|
|
- uint32_t icache_size = kvmppc_read_int_cpu_dt("i-cache-size");
|
|
+ uint32_t dcache_size = kvmppc_read_int_cpu_dt("d-cache-size", NULL);
|
|
+ uint32_t icache_size = kvmppc_read_int_cpu_dt("i-cache-size", NULL);
|
|
|
|
/* Now fix up the class with information we can query from the host */
|
|
pcc->pvr = mfpvr();
|
|
--
|
|
2.27.0
|
|
|