From: Eric Auger <eric.auger@linaro.org>
To: Peter Crosthwaite <crosthwaitepeter@gmail.com>,
Markus Armbruster <armbru@redhat.com>
Cc: Peter Maydell <peter.maydell@linaro.org>,
eric.auger@st.com, thomas.lendacky@amd.com,
Patch Tracking <patches@linaro.org>,
"qemu-devel@nongnu.org Developers" <qemu-devel@nongnu.org>,
Alex Williamson <alex.williamson@redhat.com>,
qemu-arm@nongnu.org, suravee.suthikulpanit@amd.com,
Paolo Bonzini <pbonzini@redhat.com>,
b.reynal@virtualopensystems.com, christoffer.dall@linaro.org
Subject: Re: [Qemu-arm] [Qemu-devel] [RESEND RFC 4/6] device_tree: introduce qemu_fdt_getprop_optional
Date: Thu, 3 Dec 2015 16:48:39 +0100 [thread overview]
Message-ID: <56606457.1000906@linaro.org> (raw)
In-Reply-To: <CAPokK=phO1o4cu17QU2Kt2j_mRKk6qWsCgOB0dP=7s8S_3wx7g@mail.gmail.com>
Hi Peter,
On 11/27/2015 08:38 PM, Peter Crosthwaite wrote:
> On Thu, Nov 19, 2015 at 7:22 AM, 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 is what this new qemu_fdt_getprop_optional function does.
>>
>> Signed-off-by: Eric Auger <eric.auger@linaro.org>
>> ---
>> device_tree.c | 17 +++++++++++++++++
>> include/sysemu/device_tree.h | 2 ++
>> 2 files changed, 19 insertions(+)
>>
>> diff --git a/device_tree.c b/device_tree.c
>> index f184e3c..a318683 100644
>> --- a/device_tree.c
>> +++ b/device_tree.c
>> @@ -280,6 +280,23 @@ const void *qemu_fdt_getprop(void *fdt, const char *node_path,
>> return r;
>> }
>>
>> +const void *qemu_fdt_getprop_optional(void *fdt, const char *node_path,
>> + const char *property, bool optional, int *lenp)
>> +{
>> + int len;
>> + const void *r;
>> + if (!lenp) {
>> + lenp = &len;
>> + }
>> + r = fdt_getprop(fdt, findnode_nofail(fdt, node_path), property, lenp);
>> + if (!r && !optional) {
>> + error_report("%s: Couldn't get %s/%s: %s", __func__,
>> + node_path, property, fdt_strerror(*lenp));
>> + exit(1);
>> + }
>> + return r;
>> +}
>> +
>
> The real problem here is that the device-tree API is self-asserting.
> This looks the old _nofail system that we removed but just named in
> reverse. The correct solution here is to use the Error API properly.
> Convert qemu_fdt_getprop to accept an Error **, and all existing users
> are converted to pass &error_fatal. This will preserve existing
> behaviour. Then to use the API with your optional semantic your pass
> NULL for the Error **.
OK I will implement your proposal. Thanks for your time.
Best Regards
Eric
>
> Regards,
> Peter
>
>> uint32_t qemu_fdt_getprop_cell(void *fdt, const char *node_path,
>> const char *property)
>> {
>> diff --git a/include/sysemu/device_tree.h b/include/sysemu/device_tree.h
>> index f9e6e6e..10cbe8e 100644
>> --- a/include/sysemu/device_tree.h
>> +++ b/include/sysemu/device_tree.h
>> @@ -34,6 +34,8 @@ int qemu_fdt_setprop_phandle(void *fdt, const char *node_path,
>> const char *target_node_path);
>> const void *qemu_fdt_getprop(void *fdt, const char *node_path,
>> const char *property, int *lenp);
>> +const void *qemu_fdt_getprop_optional(void *fdt, const char *node_path,
>> + const char *property, bool optional, int *lenp);
>> uint32_t qemu_fdt_getprop_cell(void *fdt, const char *node_path,
>> const char *property);
>> uint32_t qemu_fdt_get_phandle(void *fdt, const char *path);
>> --
>> 1.8.3.2
>>
>>
WARNING: multiple messages have this Message-ID (diff)
From: Eric Auger <eric.auger@linaro.org>
To: Peter Crosthwaite <crosthwaitepeter@gmail.com>,
Markus Armbruster <armbru@redhat.com>
Cc: Peter Maydell <peter.maydell@linaro.org>,
eric.auger@st.com, thomas.lendacky@amd.com,
Patch Tracking <patches@linaro.org>,
"qemu-devel@nongnu.org Developers" <qemu-devel@nongnu.org>,
Alex Williamson <alex.williamson@redhat.com>,
qemu-arm@nongnu.org, suravee.suthikulpanit@amd.com,
Paolo Bonzini <pbonzini@redhat.com>,
b.reynal@virtualopensystems.com, christoffer.dall@linaro.org
Subject: Re: [Qemu-devel] [RESEND RFC 4/6] device_tree: introduce qemu_fdt_getprop_optional
Date: Thu, 3 Dec 2015 16:48:39 +0100 [thread overview]
Message-ID: <56606457.1000906@linaro.org> (raw)
In-Reply-To: <CAPokK=phO1o4cu17QU2Kt2j_mRKk6qWsCgOB0dP=7s8S_3wx7g@mail.gmail.com>
Hi Peter,
On 11/27/2015 08:38 PM, Peter Crosthwaite wrote:
> On Thu, Nov 19, 2015 at 7:22 AM, 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 is what this new qemu_fdt_getprop_optional function does.
>>
>> Signed-off-by: Eric Auger <eric.auger@linaro.org>
>> ---
>> device_tree.c | 17 +++++++++++++++++
>> include/sysemu/device_tree.h | 2 ++
>> 2 files changed, 19 insertions(+)
>>
>> diff --git a/device_tree.c b/device_tree.c
>> index f184e3c..a318683 100644
>> --- a/device_tree.c
>> +++ b/device_tree.c
>> @@ -280,6 +280,23 @@ const void *qemu_fdt_getprop(void *fdt, const char *node_path,
>> return r;
>> }
>>
>> +const void *qemu_fdt_getprop_optional(void *fdt, const char *node_path,
>> + const char *property, bool optional, int *lenp)
>> +{
>> + int len;
>> + const void *r;
>> + if (!lenp) {
>> + lenp = &len;
>> + }
>> + r = fdt_getprop(fdt, findnode_nofail(fdt, node_path), property, lenp);
>> + if (!r && !optional) {
>> + error_report("%s: Couldn't get %s/%s: %s", __func__,
>> + node_path, property, fdt_strerror(*lenp));
>> + exit(1);
>> + }
>> + return r;
>> +}
>> +
>
> The real problem here is that the device-tree API is self-asserting.
> This looks the old _nofail system that we removed but just named in
> reverse. The correct solution here is to use the Error API properly.
> Convert qemu_fdt_getprop to accept an Error **, and all existing users
> are converted to pass &error_fatal. This will preserve existing
> behaviour. Then to use the API with your optional semantic your pass
> NULL for the Error **.
OK I will implement your proposal. Thanks for your time.
Best Regards
Eric
>
> Regards,
> Peter
>
>> uint32_t qemu_fdt_getprop_cell(void *fdt, const char *node_path,
>> const char *property)
>> {
>> diff --git a/include/sysemu/device_tree.h b/include/sysemu/device_tree.h
>> index f9e6e6e..10cbe8e 100644
>> --- a/include/sysemu/device_tree.h
>> +++ b/include/sysemu/device_tree.h
>> @@ -34,6 +34,8 @@ int qemu_fdt_setprop_phandle(void *fdt, const char *node_path,
>> const char *target_node_path);
>> const void *qemu_fdt_getprop(void *fdt, const char *node_path,
>> const char *property, int *lenp);
>> +const void *qemu_fdt_getprop_optional(void *fdt, const char *node_path,
>> + const char *property, bool optional, int *lenp);
>> uint32_t qemu_fdt_getprop_cell(void *fdt, const char *node_path,
>> const char *property);
>> uint32_t qemu_fdt_get_phandle(void *fdt, const char *path);
>> --
>> 1.8.3.2
>>
>>
next prev parent reply other threads:[~2015-12-03 15:49 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-11-19 15:22 [Qemu-devel] [RESEND RFC 0/6] AMD XGBE KVM platform passthrough Eric Auger
2015-11-19 15:22 ` [Qemu-devel] [RESEND RFC 1/6] hw/vfio/platform: amd-xgbe device Eric Auger
2015-11-25 14:35 ` Alex Bennée
2015-11-25 14:35 ` Alex Bennée
2015-11-19 15:22 ` [Qemu-devel] [RESEND RFC 2/6] device_tree: introduce load_device_tree_from_sysfs Eric Auger
2015-11-25 15:38 ` Alex Bennée
2015-11-25 15:38 ` Alex Bennée
2015-11-26 10:57 ` Thomas Huth
2015-12-03 15:19 ` [Qemu-arm] " Eric Auger
2015-12-03 15:19 ` Eric Auger
2015-11-19 15:22 ` [Qemu-devel] [RESEND RFC 3/6] device_tree: introduce qemu_fdt_node_path Eric Auger
2015-11-26 12:06 ` Alex Bennée
2015-11-26 12:06 ` Alex Bennée
2015-12-03 15:44 ` Eric Auger
2015-12-03 15:44 ` Eric Auger
2015-11-19 15:22 ` [Qemu-devel] [RESEND RFC 4/6] device_tree: introduce qemu_fdt_getprop_optional Eric Auger
2015-11-26 13:13 ` Alex Bennée
2015-11-26 13:13 ` Alex Bennée
2015-11-27 19:38 ` Peter Crosthwaite
2015-12-03 15:48 ` Eric Auger [this message]
2015-12-03 15:48 ` Eric Auger
2015-11-19 15:22 ` [Qemu-devel] [RESEND RFC 5/6] hw/arm/sysbus-fdt: helpers for clock node generation Eric Auger
2015-11-26 16:06 ` Alex Bennée
2015-11-26 16:06 ` Alex Bennée
2015-12-17 9:26 ` Eric Auger
2015-12-17 9:26 ` Eric Auger
2015-12-17 13:28 ` Alex Bennée
2015-12-17 13:28 ` Alex Bennée
2015-12-17 13:44 ` Peter Maydell
2015-12-17 13:44 ` Peter Maydell
2015-12-17 15:13 ` Alex Bennée
2015-12-17 15:13 ` Alex Bennée
2015-12-17 15:25 ` Eric Auger
2015-12-17 15:25 ` Eric Auger
2015-12-17 15:56 ` Alex Bennée
2015-12-17 15:56 ` Alex Bennée
2015-11-19 15:22 ` [Qemu-devel] [RESEND RFC 6/6] hw/arm/sysbus-fdt: enable amd-xgbe dynamic instantiation Eric Auger
2015-11-26 17:14 ` Alex Bennée
2015-11-26 17:14 ` Alex Bennée
2015-12-03 16:17 ` Eric Auger
2015-12-03 16:17 ` Eric Auger
2015-11-19 23:44 ` [Qemu-devel] [RESEND RFC 0/6] AMD XGBE KVM platform passthrough Alex Williamson
2015-11-20 15:10 ` Eric Auger
2015-11-25 10:29 ` Christoffer Dall
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=56606457.1000906@linaro.org \
--to=eric.auger@linaro.org \
--cc=alex.williamson@redhat.com \
--cc=armbru@redhat.com \
--cc=b.reynal@virtualopensystems.com \
--cc=christoffer.dall@linaro.org \
--cc=crosthwaitepeter@gmail.com \
--cc=eric.auger@st.com \
--cc=patches@linaro.org \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=suravee.suthikulpanit@amd.com \
--cc=thomas.lendacky@amd.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.