From: Grant Likely <grant.likely@linaro.org>
To: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
Pantelis Antoniou <pantelis.antoniou@konsulko.com>
Cc: Rob Herring <robh+dt@kernel.org>, Grant Likely <grant.likely@linaro.org>
Subject: [PATCH 1/8] of: Use vargs in __of_node_alloc
Date: Fri, 21 Nov 2014 01:35:08 +0000 [thread overview]
Message-ID: <1416533715-9758-2-git-send-email-grant.likely@linaro.org> (raw)
In-Reply-To: <1416533715-9758-1-git-send-email-grant.likely@linaro.org>
The overlay code needs to construct a new full_name from the parent name
and the node name, but the current method has to allocate and then free
an temporary string which is wasteful. Fix this problem by using vargs
to pass in a format and arguments into __of_node_alloc().
At the same time remove the allocflags argument to __of_node_alloc().
The only users all use GFP_KERNEL, so there is no need to provide it as
an option. If there is ever a need later it can be added back.
Signed-off-by: Grant Likely <grant.likely@linaro.org>
---
drivers/of/dynamic.c | 16 ++++++++--------
drivers/of/of_private.h | 2 +-
drivers/of/unittest.c | 6 +++---
3 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/drivers/of/dynamic.c b/drivers/of/dynamic.c
index da2509d639c8..2d452be1200b 100644
--- a/drivers/of/dynamic.c
+++ b/drivers/of/dynamic.c
@@ -274,33 +274,33 @@ struct property *__of_prop_dup(const struct property *prop, gfp_t allocflags)
/**
* __of_node_alloc() - Create an empty device node dynamically.
* @full_name: Full name of the new device node
- * @allocflags: Allocation flags (typically pass GFP_KERNEL)
*
* Create an empty device tree node, suitable for further modification.
* The node data are dynamically allocated and all the node flags
* have the OF_DYNAMIC & OF_DETACHED bits set.
* Returns the newly allocated node or NULL on out of memory error.
*/
-struct device_node *__of_node_alloc(const char *full_name, gfp_t allocflags)
+struct device_node *__of_node_alloc(const char *fmt, ...)
{
+ va_list vargs;
struct device_node *node;
- node = kzalloc(sizeof(*node), allocflags);
+ node = kzalloc(sizeof(*node), GFP_KERNEL);
if (!node)
return NULL;
-
- node->full_name = kstrdup(full_name, allocflags);
- of_node_set_flag(node, OF_DYNAMIC);
- of_node_set_flag(node, OF_DETACHED);
+ va_start(vargs, fmt);
+ node->full_name = kvasprintf(GFP_KERNEL, fmt, vargs);
+ va_end(vargs);
if (!node->full_name)
goto err_free;
+ of_node_set_flag(node, OF_DYNAMIC);
+ of_node_set_flag(node, OF_DETACHED);
of_node_init(node);
return node;
err_free:
- kfree(node->full_name);
kfree(node);
return NULL;
}
diff --git a/drivers/of/of_private.h b/drivers/of/of_private.h
index 858e0a5d9a11..1e21b1c6de71 100644
--- a/drivers/of/of_private.h
+++ b/drivers/of/of_private.h
@@ -61,7 +61,7 @@ static inline int of_property_notify(int action, struct device_node *np,
* own the devtree lock or work on detached trees only.
*/
struct property *__of_prop_dup(const struct property *prop, gfp_t allocflags);
-struct device_node *__of_node_alloc(const char *full_name, gfp_t allocflags);
+struct device_node *__of_node_alloc(const char *fmt, ...);
extern const void *__of_get_property(const struct device_node *np,
const char *name, int *lenp);
diff --git a/drivers/of/unittest.c b/drivers/of/unittest.c
index 082bb2b6a5ad..79630760ea4f 100644
--- a/drivers/of/unittest.c
+++ b/drivers/of/unittest.c
@@ -449,11 +449,11 @@ static void __init of_selftest_changeset(void)
struct of_changeset chgset;
of_changeset_init(&chgset);
- n1 = __of_node_alloc("/testcase-data/changeset/n1", GFP_KERNEL);
+ n1 = __of_node_alloc("/testcase-data/changeset/n1");
selftest(n1, "testcase setup failure\n");
- n2 = __of_node_alloc("/testcase-data/changeset/n2", GFP_KERNEL);
+ n2 = __of_node_alloc("/testcase-data/changeset/n2");
selftest(n2, "testcase setup failure\n");
- n21 = __of_node_alloc("/testcase-data/changeset/n2/n21", GFP_KERNEL);
+ n21 = __of_node_alloc("/testcase-data/changeset/n2/n21");
selftest(n21, "testcase setup failure %p\n", n21);
nremove = of_find_node_by_path("/testcase-data/changeset/node-remove");
selftest(nremove, "testcase setup failure\n");
--
1.9.1
next prev parent reply other threads:[~2014-11-21 1:35 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-11-21 1:35 [PATCH 0/8] of: DT Overlay patches to be merged Grant Likely
2014-11-21 1:35 ` Grant Likely [this message]
[not found] ` <1416533715-9758-2-git-send-email-grant.likely-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2014-11-21 1:43 ` [PATCH 1/8] of: Use vargs in __of_node_alloc Joe Perches
2014-11-24 22:26 ` Grant Likely
2014-11-21 1:35 ` [PATCH 2/8] of: Refactor __of_node_alloc() into __of_node_dup() Grant Likely
2014-11-21 1:35 ` [PATCH 3/8] of/resolver: Switch to new local fixups format Grant Likely
2014-11-21 1:35 ` [PATCH 5/8] of/overlay: Introduce DT overlay support Grant Likely
[not found] ` <1416533715-9758-6-git-send-email-grant.likely-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2014-11-26 13:11 ` Paul Bolle
2014-11-26 15:18 ` Grant Likely
[not found] ` <CACxGe6tw1FJsSvf-7u2Lx143_-GOWr3b-fLu1kCzK4JCCEwGSA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-11-26 16:57 ` Paul Bolle
2014-11-28 0:07 ` Grant Likely
[not found] ` <20141128000713.1A9B8C40A7F-WNowdnHR2B42iJbIjFUEsiwD8/FfD2ys@public.gmane.org>
2014-11-28 8:57 ` Paul Bolle
2014-11-21 1:35 ` [PATCH 6/8] of/platform: Add OF_DYNAMIC notifier handler Grant Likely
2014-11-21 1:35 ` [PATCH 7/8] of/overlay: Add overlay unittests Grant Likely
[not found] ` <1416533715-9758-1-git-send-email-grant.likely-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2014-11-21 1:35 ` [PATCH 4/8] of: Add of_reconfig_get_state_change() of notifier helper Grant Likely
2014-11-21 1:35 ` [PATCH 8/8] of: Add debug output for OF_RECONFIG notifiers Grant Likely
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=1416533715-9758-2-git-send-email-grant.likely@linaro.org \
--to=grant.likely@linaro.org \
--cc=devicetree@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=pantelis.antoniou@konsulko.com \
--cc=robh+dt@kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).