From: Eric Auger <eric.auger@linaro.org>
To: Peter Maydell <peter.maydell@linaro.org>
Cc: "Baptiste Reynal" <b.reynal@virtualopensystems.com>,
"Thomas Huth" <thuth@redhat.com>,
eric.auger@st.com, "Patch Tracking" <patches@linaro.org>,
"Peter Crosthwaite" <crosthwaitepeter@gmail.com>,
"QEMU Developers" <qemu-devel@nongnu.org>,
"Alex Williamson" <alex.williamson@redhat.com>,
"Suravee Suthikulpanit" <suravee.suthikulpanit@amd.com>,
"Paolo Bonzini" <pbonzini@redhat.com>,
thomas.lendacky@amd.com, "Alex Bennée" <alex.bennee@linaro.org>,
"Christoffer Dall" <christoffer.dall@linaro.org>,
"David Gibson" <david@gibson.dropbear.id.au>
Subject: Re: [Qemu-devel] [PATCH 4/6] device_tree: qemu_fdt_getprop converted to use the error API
Date: Tue, 5 Jan 2016 17:20:24 +0100 [thread overview]
Message-ID: <568BED48.50404@linaro.org> (raw)
In-Reply-To: <CAFEAcA9R_dR6ibCeCpzgy9X7w1TGO4YW5o5FHK+t29heHXNFxA@mail.gmail.com>
Hi Peter,
On 12/18/2015 03:36 PM, Peter Maydell wrote:
> On 17 December 2015 at 12:29, Eric Auger <eric.auger@linaro.org> wrote:
>> Current qemu_fdt_getprop exits if the property is not found. It is
>> sometimes needed to read an optional property, in which case we do
>> not wish to exit but simply returns a null value.
>>
>> This patch converts qemu_fdt_getprop to accept an Error **, and existing
>> users are converted to pass &error_fatal. This preserves the existing
>> behaviour. Then to use the API with your optional semantic a null
>> parameter can be conveyed.
>>
>> Signed-off-by: Eric Auger <eric.auger@linaro.org>
>>
>> ---
>>
>> RFC -> v1:
>> - get rid of qemu_fdt_getprop_optional and implement Peter's suggestion
>> that consists in using the error API
>
> This doesn't seem to me like a great way for qemu_fdt_getprop to
> report "property not found", because there's no way for the caller
> to distinguish "property not found" from "function went wrong
> some other way" (since Errors just report human readable strings,
> and in any case you're not distinguishing -FDT_ERR_NOTFOUND
> from any of the other FDT errors).
Not sure I get what you mean here. In case fdt_getprop fails, as long as
the caller provided a lenp != NULL, *lenp contains the error code so
qemu_fdt_getprop's caller can discriminate a -FDT_ERR_NOTFOUND from any
other errors. Do I miss something?
>
> If we want to handle "ok if property doesn't exist" then we
> could either (a) make the function return NULL on doesn't-exist
> and error_report in the other error cases, with the existing
> single caller extending its error checking appropriately, or
> (b) have the caller that cares about property-may-not-exist
> call fdt_getprop() directly.
>
>> Signed-off-by: Eric Auger <eric.auger@linaro.org>
>> ---
>> device_tree.c | 11 ++++++-----
>> include/sysemu/device_tree.h | 3 ++-
>> 2 files changed, 8 insertions(+), 6 deletions(-)
>>
>> diff --git a/device_tree.c b/device_tree.c
>> index b5d7e0b..c3720c2 100644
>> --- a/device_tree.c
>> +++ b/device_tree.c
>> @@ -331,18 +331,18 @@ int qemu_fdt_setprop_string(void *fdt, const char *node_path,
>> }
>>
>> const void *qemu_fdt_getprop(void *fdt, const char *node_path,
>> - const char *property, int *lenp)
>> + const char *property, int *lenp, Error **errp)
>> {
>> int len;
>> const void *r;
>> +
>> if (!lenp) {
>> lenp = &len;
>> }
>> r = fdt_getprop(fdt, findnode_nofail(fdt, node_path), property, lenp);
>> if (!r) {
>> - error_report("%s: Couldn't get %s/%s: %s", __func__,
>> - node_path, property, fdt_strerror(*lenp));
>> - exit(1);
>> + error_setg(errp, "%s: Couldn't get %s/%s: %s", __func__,
>> + node_path, property, fdt_strerror(*lenp));
>> }
>> return r;
>> }
>> @@ -351,7 +351,8 @@ uint32_t qemu_fdt_getprop_cell(void *fdt, const char *node_path,
>> const char *property)
>> {
>> int len;
>> - const uint32_t *p = qemu_fdt_getprop(fdt, node_path, property, &len);
>> + const uint32_t *p = qemu_fdt_getprop(fdt, node_path, property, &len,
>> + &error_fatal);
>> if (len != 4) {
>> error_report("%s: %s/%s not 4 bytes long (not a cell?)",
>> __func__, node_path, property);
>> diff --git a/include/sysemu/device_tree.h b/include/sysemu/device_tree.h
>> index f9e6e6e..284fd3b 100644
>> --- a/include/sysemu/device_tree.h
>> +++ b/include/sysemu/device_tree.h
>> @@ -33,7 +33,8 @@ int qemu_fdt_setprop_phandle(void *fdt, const char *node_path,
>> const char *property,
>> const char *target_node_path);
>> const void *qemu_fdt_getprop(void *fdt, const char *node_path,
>> - const char *property, int *lenp);
>> + const char *property, int *lenp,
>> + Error **errp);
>
> If we change the function it would be nice to add a brief
> doc comment while we're touching the prototype in the header.
sure
Thanks
Eric
>
> thanks
> -- PMM
>
next prev parent reply other threads:[~2016-01-05 16:20 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-17 12:29 [Qemu-devel] [PATCH 0/6] AMD XGBE KVM platform passthrough Eric Auger
2015-12-17 12:29 ` [Qemu-devel] [PATCH 1/6] hw/vfio/platform: amd-xgbe device Eric Auger
2015-12-18 13:53 ` Peter Maydell
2015-12-17 12:29 ` [Qemu-devel] [PATCH 2/6] device_tree: introduce load_device_tree_from_sysfs Eric Auger
2015-12-18 14:10 ` Peter Maydell
2016-01-04 17:37 ` Eric Auger
2016-01-04 21:33 ` Peter Maydell
2015-12-17 12:29 ` [Qemu-devel] [PATCH 3/6] device_tree: introduce qemu_fdt_node_path Eric Auger
2015-12-18 14:23 ` Peter Maydell
2016-01-05 16:20 ` Eric Auger
2016-01-05 17:55 ` Peter Maydell
2016-01-06 8:43 ` Eric Auger
2015-12-17 12:29 ` [Qemu-devel] [PATCH 4/6] device_tree: qemu_fdt_getprop converted to use the error API Eric Auger
2015-12-18 14:36 ` Peter Maydell
2016-01-05 16:20 ` Eric Auger [this message]
2016-01-05 17:54 ` Peter Maydell
2015-12-17 12:29 ` [Qemu-devel] [PATCH 5/6] hw/arm/sysbus-fdt: helpers for clock node generation Eric Auger
2015-12-18 14:54 ` Peter Maydell
2016-01-05 17:04 ` Eric Auger
2015-12-17 12:29 ` [Qemu-devel] [PATCH 6/6] hw/arm/sysbus-fdt: enable amd-xgbe dynamic instantiation Eric Auger
2015-12-18 15:05 ` Peter Maydell
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=568BED48.50404@linaro.org \
--to=eric.auger@linaro.org \
--cc=alex.bennee@linaro.org \
--cc=alex.williamson@redhat.com \
--cc=b.reynal@virtualopensystems.com \
--cc=christoffer.dall@linaro.org \
--cc=crosthwaitepeter@gmail.com \
--cc=david@gibson.dropbear.id.au \
--cc=eric.auger@st.com \
--cc=patches@linaro.org \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=suravee.suthikulpanit@amd.com \
--cc=thomas.lendacky@amd.com \
--cc=thuth@redhat.com \
/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.