lkml.org 
[lkml]   [2019]   [Sep]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v4 08/11] lib/vsprintf: Make use of fwnode API to obtain node names and separators
    Date
    Instead of implementing our own means of discovering parent nodes, node
    names or counting how many parents a node has, use the newly added
    functions in the fwnode API to obtain that information.

    Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
    Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    ---
    lib/vsprintf.c | 38 ++++++++++++++++----------------------
    1 file changed, 16 insertions(+), 22 deletions(-)

    diff --git a/lib/vsprintf.c b/lib/vsprintf.c
    index b00b57f9f911f..a04a2167101ef 100644
    --- a/lib/vsprintf.c
    +++ b/lib/vsprintf.c
    @@ -38,6 +38,7 @@
    #include <net/addrconf.h>
    #include <linux/siphash.h>
    #include <linux/compiler.h>
    +#include <linux/property.h>
    #ifdef CONFIG_BLOCK
    #include <linux/blkdev.h>
    #endif
    @@ -1863,32 +1864,24 @@ char *flags_string(char *buf, char *end, void *flags_ptr,
    return format_flags(buf, end, flags, names);
    }

    -static const char *device_node_name_for_depth(const struct device_node *np, int depth)
    -{
    - for ( ; np && depth; depth--)
    - np = np->parent;
    -
    - return kbasename(np->full_name);
    -}
    -
    static noinline_for_stack
    -char *device_node_gen_full_name(const struct device_node *np, char *buf, char *end)
    +char *fwnode_full_name_string(struct fwnode_handle *fwnode, char *buf,
    + char *end)
    {
    int depth;
    - const struct device_node *parent = np->parent;

    - /* special case for root node */
    - if (!parent)
    - return string_nocheck(buf, end, "/", default_str_spec);
    + for (depth = fwnode_count_parents(fwnode); depth >= 0; depth--) {
    + struct fwnode_handle *__fwnode =
    + fwnode_get_nth_parent(fwnode, depth);

    - for (depth = 0; parent->parent; depth++)
    - parent = parent->parent;
    -
    - for ( ; depth >= 0; depth--) {
    - buf = string_nocheck(buf, end, "/", default_str_spec);
    - buf = string(buf, end, device_node_name_for_depth(np, depth),
    + buf = string(buf, end, fwnode_get_name_prefix(__fwnode),
    + default_str_spec);
    + buf = string(buf, end, fwnode_get_name(__fwnode),
    default_str_spec);
    +
    + fwnode_handle_put(__fwnode);
    }
    +
    return buf;
    }

    @@ -1933,10 +1926,11 @@ char *device_node_string(char *buf, char *end, struct device_node *dn,

    switch (*fmt) {
    case 'f': /* full_name */
    - buf = device_node_gen_full_name(dn, buf, end);
    + buf = fwnode_full_name_string(of_fwnode_handle(dn), buf,
    + end);
    break;
    case 'n': /* name */
    - p = kbasename(of_node_full_name(dn));
    + p = fwnode_get_name(of_fwnode_handle(dn));
    precision = str_spec.precision;
    str_spec.precision = strchrnul(p, '@') - p;
    buf = string(buf, end, p, str_spec);
    @@ -1946,7 +1940,7 @@ char *device_node_string(char *buf, char *end, struct device_node *dn,
    buf = number(buf, end, (unsigned int)dn->phandle, num_spec);
    break;
    case 'P': /* path-spec */
    - p = kbasename(of_node_full_name(dn));
    + p = fwnode_get_name(of_fwnode_handle(dn));
    if (!p[1])
    p = "/";
    buf = string(buf, end, p, str_spec);
    --
    2.20.1
    \
     
     \ /
      Last update: 2019-09-02 10:33    [W:3.306 / U:0.636 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site