All of lore.kernel.org
 help / color / mirror / Atom feed
From: Peter Maydell <peter.maydell@linaro.org>
To: Eric Auger <eric.auger@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 3/6] device_tree: introduce qemu_fdt_node_path
Date: Fri, 18 Dec 2015 14:23:41 +0000	[thread overview]
Message-ID: <CAFEAcA8L_HSU2s1++2tahzc=UVN1hnUGeKbALf4wd2AL2D4eAw@mail.gmail.com> (raw)
In-Reply-To: <1450355367-14818-4-git-send-email-eric.auger@linaro.org>

On 17 December 2015 at 12:29, Eric Auger <eric.auger@linaro.org> wrote:
> This new helper routine returns the node path of a device
> referred to by its node name and compat string.
>
> Signed-off-by: Eric Auger <eric.auger@linaro.org>
>
> ---
>
> RFC -> v1:
> - improve error handling according to Alex' comments
> ---
>  device_tree.c                | 45 ++++++++++++++++++++++++++++++++++++++++++++
>  include/sysemu/device_tree.h |  3 +++
>  2 files changed, 48 insertions(+)
>
> diff --git a/device_tree.c b/device_tree.c
> index e556a99..b5d7e0b 100644
> --- a/device_tree.c
> +++ b/device_tree.c
> @@ -233,6 +233,51 @@ static int findnode_nofail(void *fdt, const char *node_path)
>      return offset;
>  }
>
> +/**
> + * qemu_fdt_node_path
> + *
> + * return the node path of a device, given its node name and its
> + * compat string
> + * fdt: pointer to the dt blob
> + * name: device node name
> + * compat: compatibility string of the device
> + *
> + * upon success, the path is output at node_path address
> + * returns 0 on success, < 0 on failure
> + */

Can we put the doc comment in the header file, since this is
a globally visible function? Also it would be nice to follow the
doc-comment syntax standards about marking up arguments with '@'
and so on.

> +int qemu_fdt_node_path(void *fdt, const char *name, char *compat,
> +                       char **node_path)
> +{
> +    int offset, len, ret;
> +    const char *iter_name;
> +    char path[256];

Rather than a fixed buffer size, we should check whether
fdt_get_path returns -FDT_ERR_NOSPACE and if so enlarge the
buffer and try again.

> +
> +    *node_path = NULL;
> +    offset = fdt_node_offset_by_compatible(fdt, -1, compat);
> +    while (offset != -FDT_ERR_NOTFOUND) {
> +        if (offset < 0) {
> +            continue;

I don't understand this continue -- if the fdt function returned any
error other than -FDT_ERR_NOTFOUND then this will cause us to go
into an infinite loop around this while(). Did you mean 'break' ?
(Though if you just want to break then fixing the while condition
would be better.)

> +        }
> +        iter_name = fdt_get_name(fdt, offset, &len);
> +        if (!iter_name) {
> +            continue;

This also seems like it ought to be a break, except you need to
set offset to the error code first (which fdt_get_name() will
have returned in 'len').

> +        }
> +
> +        if (!strncmp(iter_name, name, len)) {

Do we really want strncmp rather than strcmp here ? (ie
"find first node whose name has 'name' as a prefix" rather
than "find first node whose name matches 'name').

> +            goto found;
> +        }
> +        offset = fdt_node_offset_by_compatible(fdt, offset, compat);
> +    }
> +    return offset;
> +
> +found:
> +    ret = fdt_get_path(fdt, offset, path, 256);
> +    if (!ret) {
> +        *node_path = g_strdup(path);
> +    }
> +    return ret;
> +}
> +
>  int qemu_fdt_setprop(void *fdt, const char *node_path,
>                       const char *property, const void *val, int size)
>  {
> diff --git a/include/sysemu/device_tree.h b/include/sysemu/device_tree.h
> index 307e53d..f9e6e6e 100644
> --- a/include/sysemu/device_tree.h
> +++ b/include/sysemu/device_tree.h
> @@ -18,6 +18,9 @@ void *create_device_tree(int *sizep);
>  void *load_device_tree(const char *filename_path, int *sizep);
>  void *load_device_tree_from_sysfs(void);
>
> +int qemu_fdt_node_path(void *fdt, const char *name, char *compat,
> +                       char **node_path);
> +
>  int qemu_fdt_setprop(void *fdt, const char *node_path,
>                       const char *property, const void *val, int size);
>  int qemu_fdt_setprop_cell(void *fdt, const char *node_path,
> --
> 1.9.1

thanks
-- PMM

  reply	other threads:[~2015-12-18 14:24 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 [this message]
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
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='CAFEAcA8L_HSU2s1++2tahzc=UVN1hnUGeKbALf4wd2AL2D4eAw@mail.gmail.com' \
    --to=peter.maydell@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@linaro.org \
    --cc=eric.auger@st.com \
    --cc=patches@linaro.org \
    --cc=pbonzini@redhat.com \
    --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.