Re: [PATCH 1/5] powerpc/pseries: extract of_helpers module

2015-08-05 Thread Andy Shevchenko
On Wed, 2015-08-05 at 00:20 -0500, Segher Boessenkool wrote:
 Hi Andy,
 
 On Tue, Aug 04, 2015 at 05:36:45PM +0300, Andy Shevchenko wrote:
  +struct device_node *pseries_of_derive_parent(const char *path)
  +{
  +   struct device_node *parent = NULL;
  +   char *parent_path = /;
  +   size_t parent_path_len = strrchr(path, '/') - path + 1;
  +
  +   /* reject if path is / */
  +   if (!strcmp(path, /))
  +   return ERR_PTR(-EINVAL);
  +
  +   if (strrchr(path, '/') != path) {
  +   parent_path = kmalloc(parent_path_len, 
  GFP_KERNEL);
 
 If path doesn't contain any slash this will do interesting things;
 you might want to fix that too while you're at it :-)

No problem, though it is in the original code. I would do as a separate
patch on top of the series. Will be okay for you?

 
 
 Segher

-- 
Andy Shevchenko andriy.shevche...@linux.intel.com
Intel Finland Oy
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Re: [PATCH 1/5] powerpc/pseries: extract of_helpers module

2015-08-05 Thread Segher Boessenkool
On Wed, Aug 05, 2015 at 12:32:55PM +0300, Andy Shevchenko wrote:
  If path doesn't contain any slash this will do interesting things;
  you might want to fix that too while you're at it :-)
 
 No problem, though it is in the original code. I would do as a separate
 patch on top of the series. Will be okay for you?

Of course -- you're fixing other problems here as well (memory leak
or what was it), that's why I asked.


Segher
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

[PATCH 1/5] powerpc/pseries: extract of_helpers module

2015-08-04 Thread Andy Shevchenko
Extract a new module to share the code between other modules.

There is no functional change.

Signed-off-by: Andy Shevchenko andriy.shevche...@linux.intel.com
---
 arch/powerpc/platforms/pseries/Makefile |  1 +
 arch/powerpc/platforms/pseries/of_helpers.c | 38 +
 arch/powerpc/platforms/pseries/of_helpers.h |  8 ++
 arch/powerpc/platforms/pseries/reconfig.c   | 34 ++
 4 files changed, 49 insertions(+), 32 deletions(-)
 create mode 100644 arch/powerpc/platforms/pseries/of_helpers.c
 create mode 100644 arch/powerpc/platforms/pseries/of_helpers.h

diff --git a/arch/powerpc/platforms/pseries/Makefile 
b/arch/powerpc/platforms/pseries/Makefile
index 0348079..2e857c2 100644
--- a/arch/powerpc/platforms/pseries/Makefile
+++ b/arch/powerpc/platforms/pseries/Makefile
@@ -2,6 +2,7 @@ ccflags-$(CONFIG_PPC64) := $(NO_MINIMAL_TOC)
 ccflags-$(CONFIG_PPC_PSERIES_DEBUG)+= -DDEBUG
 
 obj-y  := lpar.o hvCall.o nvram.o reconfig.o \
+  of_helpers.o \
   setup.o iommu.o event_sources.o ras.o \
   firmware.o power.o dlpar.o mobility.o rng.o
 obj-$(CONFIG_SMP)  += smp.o
diff --git a/arch/powerpc/platforms/pseries/of_helpers.c 
b/arch/powerpc/platforms/pseries/of_helpers.c
new file mode 100644
index 000..1cbd896
--- /dev/null
+++ b/arch/powerpc/platforms/pseries/of_helpers.c
@@ -0,0 +1,38 @@
+#include linux/string.h
+#include linux/err.h
+#include linux/slab.h
+#include linux/of.h
+
+#include of_helpers.h
+
+/**
+ * pseries_of_derive_parent - basically like dirname(1)
+ * @path:  the full_name of a node to be added to the tree
+ *
+ * Returns the node which should be the parent of the node
+ * described by path.  E.g., for path = /foo/bar, returns
+ * the node with full_name = /foo.
+ */
+struct device_node *pseries_of_derive_parent(const char *path)
+{
+   struct device_node *parent = NULL;
+   char *parent_path = /;
+   size_t parent_path_len = strrchr(path, '/') - path + 1;
+
+   /* reject if path is / */
+   if (!strcmp(path, /))
+   return ERR_PTR(-EINVAL);
+
+   if (strrchr(path, '/') != path) {
+   parent_path = kmalloc(parent_path_len, GFP_KERNEL);
+   if (!parent_path)
+   return ERR_PTR(-ENOMEM);
+   strlcpy(parent_path, path, parent_path_len);
+   }
+   parent = of_find_node_by_path(parent_path);
+   if (!parent)
+   return ERR_PTR(-EINVAL);
+   if (strcmp(parent_path, /))
+   kfree(parent_path);
+   return parent;
+}
diff --git a/arch/powerpc/platforms/pseries/of_helpers.h 
b/arch/powerpc/platforms/pseries/of_helpers.h
new file mode 100644
index 000..bb83d39
--- /dev/null
+++ b/arch/powerpc/platforms/pseries/of_helpers.h
@@ -0,0 +1,8 @@
+#ifndef _PSERIES_OF_HELPERS_H
+#define _PSERIES_OF_HELPERS_H
+
+#include linux/of.h
+
+struct device_node *pseries_of_derive_parent(const char *path);
+
+#endif /* _PSERIES_OF_HELPERS_H */
diff --git a/arch/powerpc/platforms/pseries/reconfig.c 
b/arch/powerpc/platforms/pseries/reconfig.c
index 0f31952..7c7fcc0 100644
--- a/arch/powerpc/platforms/pseries/reconfig.c
+++ b/arch/powerpc/platforms/pseries/reconfig.c
@@ -22,37 +22,7 @@
 #include asm/uaccess.h
 #include asm/mmu.h
 
-/**
- * derive_parent - basically like dirname(1)
- * @path:  the full_name of a node to be added to the tree
- *
- * Returns the node which should be the parent of the node
- * described by path.  E.g., for path = /foo/bar, returns
- * the node with full_name = /foo.
- */
-static struct device_node *derive_parent(const char *path)
-{
-   struct device_node *parent = NULL;
-   char *parent_path = /;
-   size_t parent_path_len = strrchr(path, '/') - path + 1;
-
-   /* reject if path is / */
-   if (!strcmp(path, /))
-   return ERR_PTR(-EINVAL);
-
-   if (strrchr(path, '/') != path) {
-   parent_path = kmalloc(parent_path_len, GFP_KERNEL);
-   if (!parent_path)
-   return ERR_PTR(-ENOMEM);
-   strlcpy(parent_path, path, parent_path_len);
-   }
-   parent = of_find_node_by_path(parent_path);
-   if (!parent)
-   return ERR_PTR(-EINVAL);
-   if (strcmp(parent_path, /))
-   kfree(parent_path);
-   return parent;
-}
+#include of_helpers.h
 
 static int pSeries_reconfig_add_node(const char *path, struct property 
*proplist)
 {
@@ -71,7 +41,7 @@ static int pSeries_reconfig_add_node(const char *path, struct 
property *proplist
of_node_set_flag(np, OF_DYNAMIC);
of_node_init(np);
 
-   np-parent = derive_parent(path);
+   np-parent = pseries_of_derive_parent(path);
if (IS_ERR(np-parent)) {
err = PTR_ERR(np-parent);
goto out_err;
-- 
2.4.6

___

Re: [PATCH 1/5] powerpc/pseries: extract of_helpers module

2015-08-04 Thread Segher Boessenkool
Hi Andy,

On Tue, Aug 04, 2015 at 05:36:45PM +0300, Andy Shevchenko wrote:
 +struct device_node *pseries_of_derive_parent(const char *path)
 +{
 + struct device_node *parent = NULL;
 + char *parent_path = /;
 + size_t parent_path_len = strrchr(path, '/') - path + 1;
 +
 + /* reject if path is / */
 + if (!strcmp(path, /))
 + return ERR_PTR(-EINVAL);
 +
 + if (strrchr(path, '/') != path) {
 + parent_path = kmalloc(parent_path_len, GFP_KERNEL);

If path doesn't contain any slash this will do interesting things;
you might want to fix that too while you're at it :-)


Segher
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev