/**
  * __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;
 }
 
  * 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);
+__printf(1, 2) 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);
 
        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");