[Qemu-devel] [PATCH 05/17] arm: Pass local error object pointer to error_append_hint()

Greg Kurz posted 17 patches 6 years, 1 month ago
Maintainers: Yuval Shaia <yuval.shaia@oracle.com>, Eric Blake <eblake@redhat.com>, "Dr. David Alan Gilbert" <dgilbert@redhat.com>, Halil Pasic <pasic@linux.ibm.com>, Markus Armbruster <armbru@redhat.com>, Kevin Wolf <kwolf@redhat.com>, Marcel Apfelbaum <marcel.apfelbaum@gmail.com>, David Gibson <david@gibson.dropbear.id.au>, John Snow <jsnow@redhat.com>, Fam Zheng <fam@euphon.net>, Richard Henderson <rth@twiddle.net>, Jeff Cody <codyprime@gmail.com>, Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>, Gerd Hoffmann <kraxel@redhat.com>, Max Reitz <mreitz@redhat.com>, Subbaraya Sundeep <sundeep.lkml@gmail.com>, "Daniel P. Berrangé" <berrange@redhat.com>, Eric Farman <farman@linux.ibm.com>, Peter Maydell <peter.maydell@linaro.org>, Paolo Bonzini <pbonzini@redhat.com>, Christian Borntraeger <borntraeger@de.ibm.com>, Juan Quintela <quintela@redhat.com>, Alex Williamson <alex.williamson@redhat.com>, "Michael S. Tsirkin" <mst@redhat.com>, "Marc-André Lureau" <marcandre.lureau@redhat.com>, Michael Roth <mdroth@linux.vnet.ibm.com>, David Hildenbrand <david@redhat.com>, Cornelia Huck <cohuck@redhat.com>
[Qemu-devel] [PATCH 05/17] arm: Pass local error object pointer to error_append_hint()
Posted by Greg Kurz 6 years, 1 month ago
Ensure that hints are added even if errp is &error_fatal or &error_abort.

Signed-off-by: Greg Kurz <groug@kaod.org>
---
 hw/arm/msf2-soc.c       |    5 +++--
 hw/arm/virt.c           |   14 ++++++++++----
 hw/intc/arm_gicv3_kvm.c |    5 +++--
 hw/misc/msf2-sysreg.c   |    6 ++++--
 4 files changed, 20 insertions(+), 10 deletions(-)

diff --git a/hw/arm/msf2-soc.c b/hw/arm/msf2-soc.c
index 008fd9327aa4..f606cfe7d139 100644
--- a/hw/arm/msf2-soc.c
+++ b/hw/arm/msf2-soc.c
@@ -127,8 +127,9 @@ static void m2sxxx_soc_realize(DeviceState *dev_soc, Error **errp)
     }
 
     if (!s->m3clk) {
-        error_setg(errp, "Invalid m3clk value");
-        error_append_hint(errp, "m3clk can not be zero\n");
+        error_setg(&err, "Invalid m3clk value");
+        error_append_hint(&err, "m3clk can not be zero\n");
+        error_propagate(errp, err);
         return;
     }
 
diff --git a/hw/arm/virt.c b/hw/arm/virt.c
index d74538b0212e..7ac00dab581e 100644
--- a/hw/arm/virt.c
+++ b/hw/arm/virt.c
@@ -1804,8 +1804,11 @@ static void virt_set_gic_version(Object *obj, const char *value, Error **errp)
     } else if (!strcmp(value, "max")) {
         vms->gic_version = -1; /* Will probe later */
     } else {
-        error_setg(errp, "Invalid gic-version value");
-        error_append_hint(errp, "Valid values are 3, 2, host, max.\n");
+        Error *err = NULL;
+
+        error_setg(&err, "Invalid gic-version value");
+        error_append_hint(&err, "Valid values are 3, 2, host, max.\n");
+        error_propagate(errp, err);
     }
 }
 
@@ -1832,8 +1835,11 @@ static void virt_set_iommu(Object *obj, const char *value, Error **errp)
     } else if (!strcmp(value, "none")) {
         vms->iommu = VIRT_IOMMU_NONE;
     } else {
-        error_setg(errp, "Invalid iommu value");
-        error_append_hint(errp, "Valid values are none, smmuv3.\n");
+        Error *err = NULL;
+
+        error_setg(&err, "Invalid iommu value");
+        error_append_hint(&err, "Valid values are none, smmuv3.\n");
+        error_propagate(errp, err);
     }
 }
 
diff --git a/hw/intc/arm_gicv3_kvm.c b/hw/intc/arm_gicv3_kvm.c
index 9c7f4ab8711c..09784f06f9ad 100644
--- a/hw/intc/arm_gicv3_kvm.c
+++ b/hw/intc/arm_gicv3_kvm.c
@@ -810,10 +810,11 @@ static void kvm_arm_gicv3_realize(DeviceState *dev, Error **errp)
                               KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION);
 
     if (!multiple_redist_region_allowed && s->nb_redist_regions > 1) {
-        error_setg(errp, "Multiple VGICv3 redistributor regions are not "
+        error_setg(&local_err, "Multiple VGICv3 redistributor regions are not "
                    "supported by this host kernel");
-        error_append_hint(errp, "A maximum of %d VCPUs can be used",
+        error_append_hint(&local_err, "A maximum of %d VCPUs can be used",
                           s->redist_region_count[0]);
+        error_propagate(errp, local_err);
         return;
     }
 
diff --git a/hw/misc/msf2-sysreg.c b/hw/misc/msf2-sysreg.c
index ddc5a30c80f7..23c7890ac022 100644
--- a/hw/misc/msf2-sysreg.c
+++ b/hw/misc/msf2-sysreg.c
@@ -128,12 +128,14 @@ static Property msf2_sysreg_properties[] = {
 static void msf2_sysreg_realize(DeviceState *dev, Error **errp)
 {
     MSF2SysregState *s = MSF2_SYSREG(dev);
+    Error *local_err = NULL;
 
     if ((s->apb0div > 32 || !is_power_of_2(s->apb0div))
         || (s->apb1div > 32 || !is_power_of_2(s->apb1div))) {
-        error_setg(errp, "Invalid apb divisor value");
-        error_append_hint(errp, "apb divisor must be a power of 2"
+        error_setg(&local_err, "Invalid apb divisor value");
+        error_append_hint(&local_err, "apb divisor must be a power of 2"
                            " and maximum value is 32\n");
+        error_propagate(errp, local_err);
     }
 }