[U-Boot] [PATCH 07/22] fdt: Tighten up error handling in fdtdec_get_pci_addr()

Simon Glass sjg at chromium.org
Thu Mar 5 05:10:03 CET 2015


Hi Bin,

On 25 February 2015 at 02:29, Bin Meng <bmeng.cn at gmail.com> wrote:
> Hi Simon,
>
> On Thu, Feb 19, 2015 at 5:10 AM, Simon Glass <sjg at chromium.org> wrote:
>> This function returns -ENOENT when the property is missing (which the caller
>> might forgive) and also when the property is present but incorrectly
>
> forgive? forget?
>

In this case I mean forgive. The caller probably doesn't care that the
property is missing since it means that no PCI address is provided.
This is often OK and should be forgiven. The other case is often an
error.

>> formatted (which many callers would like to report).
>>
>> Update the error return value to allow these different situations to be
>> distinguished.
>>
>> Signed-off-by: Simon Glass <sjg at chromium.org>
>> ---
>>
>>  include/fdtdec.h | 4 +++-
>>  lib/fdtdec.c     | 4 +++-
>>  2 files changed, 6 insertions(+), 2 deletions(-)
>>
>> diff --git a/include/fdtdec.h b/include/fdtdec.h
>> index 2a96a0a..3213895 100644
>> --- a/include/fdtdec.h
>> +++ b/include/fdtdec.h
>> @@ -326,7 +326,9 @@ fdt_addr_t fdtdec_get_addr_size(const void *blob, int node,
>>   * @param type         pci address type (FDT_PCI_SPACE_xxx)
>>   * @param prop_name    name of property to find
>>   * @param addr         returns pci address in the form of fdt_pci_addr
>> - * @return 0 if ok, negative on error
>> + * @return 0 if ok, -ENOENT if the property did not exist, -EINVAL if the
>> + *             format of the property was invalid, -ENXIO if the requested
>> + *             address type was not found
>>   */
>>  int fdtdec_get_pci_addr(const void *blob, int node, enum fdt_pci_space type,
>>                 const char *prop_name, struct fdt_pci_addr *addr);
>> diff --git a/lib/fdtdec.c b/lib/fdtdec.c
>> index d4bc8b4..922b299 100644
>> --- a/lib/fdtdec.c
>> +++ b/lib/fdtdec.c
>> @@ -159,8 +159,10 @@ int fdtdec_get_pci_addr(const void *blob, int node, enum fdt_pci_space type,
>>                         }
>>                 }
>>
>> -               if (i == num)
>> +               if (i == num) {
>> +                       ret = ENXIO;
>
> ret = -ENXIO;
>

Fixed, thanks.

>>                         goto fail;
>> +               }
>>
>>                 return 0;
>>         } else {
>> --
>
> Regards,
> Bin

Regards,
Simon


More information about the U-Boot mailing list