[PATCH v3] of: Create asm-generic/of.h and provide default of_node_to_nid()

Subsystems: linux for powerpc (32-bit and 64-bit), microblaze architecture, open firmware and flattened device tree, sparc + ultrasparc (sparc/sparc64), the rest

STALE5850d

10 messages, 4 authors, 2010-07-27 · open the first message on its own page

[PATCH v3] of: Create asm-generic/of.h and provide default of_node_to_nid()

From: Grant Likely <hidden>
Date: 2010-07-26 22:04:59

of_node_to_nid() is only relevant in a few architectures.  Don't force
everyone to implement it anyway.  This patch also adds asm-generic/of.h
which will be used to contain other overrideable symbols.

Signed-off-by: Grant Likely <redacted>
---

Changes in v3: don't use asm-generic, just keep macros in of.h
Changes in v2: address comments from sfr, add asm-generic/of.h

 arch/microblaze/include/asm/topology.h |   10 ----------
 arch/powerpc/include/asm/prom.h        |    5 +++++
 arch/powerpc/include/asm/topology.h    |    7 -------
 arch/sparc/include/asm/prom.h          |    1 +
 include/linux/of.h                     |    5 +++++
 5 files changed, 11 insertions(+), 17 deletions(-)
diff --git a/arch/microblaze/include/asm/topology.h b/arch/microblaze/include/asm/topology.h
index 96bcea5..5428f33 100644
--- a/arch/microblaze/include/asm/topology.h
+++ b/arch/microblaze/include/asm/topology.h
@@ -1,11 +1 @@
 #include <asm-generic/topology.h>
-
-#ifndef _ASM_MICROBLAZE_TOPOLOGY_H
-#define _ASM_MICROBLAZE_TOPOLOGY_H
-
-struct device_node;
-static inline int of_node_to_nid(struct device_node *device)
-{
-	return 0;
-}
-#endif /* _ASM_MICROBLAZE_TOPOLOGY_H */
diff --git a/arch/powerpc/include/asm/prom.h b/arch/powerpc/include/asm/prom.h
index da7dd63..dca25a5 100644
--- a/arch/powerpc/include/asm/prom.h
+++ b/arch/powerpc/include/asm/prom.h
@@ -103,6 +103,11 @@ struct device_node *of_find_next_cache_node(struct device_node *np);
 /* Get the MAC address */
 extern const void *of_get_mac_address(struct device_node *np);
 
+#ifdef CONFIG_NUMA
+extern int of_node_to_nid(struct device_node *device);
+#define of_node_to_nid of_node_to_nid
+#endif
+
 /**
  * of_irq_map_pci - Resolve the interrupt for a PCI device
  * @pdev:	the device whose interrupt is to be resolved
diff --git a/arch/powerpc/include/asm/topology.h b/arch/powerpc/include/asm/topology.h
index 32adf72..09dd38c 100644
--- a/arch/powerpc/include/asm/topology.h
+++ b/arch/powerpc/include/asm/topology.h
@@ -41,8 +41,6 @@ static inline int cpu_to_node(int cpu)
 			       cpu_all_mask :				\
 			       node_to_cpumask_map[node])
 
-int of_node_to_nid(struct device_node *device);
-
 struct pci_bus;
 #ifdef CONFIG_PCI
 extern int pcibus_to_node(struct pci_bus *bus);
@@ -94,11 +92,6 @@ extern void sysfs_remove_device_from_node(struct sys_device *dev, int nid);
 
 #else
 
-static inline int of_node_to_nid(struct device_node *device)
-{
-	return 0;
-}
-
 static inline void dump_numa_cpu_topology(void) {}
 
 static inline int sysfs_add_device_to_node(struct sys_device *dev, int nid)
diff --git a/arch/sparc/include/asm/prom.h b/arch/sparc/include/asm/prom.h
index c82a7da..73befa5 100644
--- a/arch/sparc/include/asm/prom.h
+++ b/arch/sparc/include/asm/prom.h
@@ -43,6 +43,7 @@ extern int of_getintprop_default(struct device_node *np,
 extern int of_find_in_proplist(const char *list, const char *match, int len);
 #ifdef CONFIG_NUMA
 extern int of_node_to_nid(struct device_node *dp);
+#define of_node_to_nid of_node_to_nid
 #else
 #define of_node_to_nid(dp)	(-1)
 #endif
diff --git a/include/linux/of.h b/include/linux/of.h
index b0756f3..cc936ca 100644
--- a/include/linux/of.h
+++ b/include/linux/of.h
@@ -146,6 +146,11 @@ static inline unsigned long of_read_ulong(const __be32 *cell, int size)
 
 #define OF_BAD_ADDR	((u64)-1)
 
+#ifndef of_node_to_nid
+static inline int of_node_to_nid(struct device_node *np) { return 0; }
+#define of_node_to_nid of_node_to_nid
+#endif
+
 extern struct device_node *of_find_node_by_name(struct device_node *from,
 	const char *name);
 #define for_each_node_by_name(dn, name) \

Re: [PATCH v3] of: Create asm-generic/of.h and provide default of_node_to_nid()

From: Grant Likely <hidden>
Date: 2010-07-26 22:06:20

On Mon, Jul 26, 2010 at 4:04 PM, Grant Likely [off-list ref] w=
rote:
of_node_to_nid() is only relevant in a few architectures. =A0Don't force
everyone to implement it anyway. =A0This patch also adds asm-generic/of.h
which will be used to contain other overrideable symbols.

Signed-off-by: Grant Likely <redacted>
Oops.  The patch subject I will change before mergine.

g.
---

Changes in v3: don't use asm-generic, just keep macros in of.h
Changes in v2: address comments from sfr, add asm-generic/of.h

=A0arch/microblaze/include/asm/topology.h | =A0 10 ----------
=A0arch/powerpc/include/asm/prom.h =A0 =A0 =A0 =A0| =A0 =A05 +++++
=A0arch/powerpc/include/asm/topology.h =A0 =A0| =A0 =A07 -------
=A0arch/sparc/include/asm/prom.h =A0 =A0 =A0 =A0 =A0| =A0 =A01 +
=A0include/linux/of.h =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 | =A0 =A05 =
+++++
quoted hunk
=A05 files changed, 11 insertions(+), 17 deletions(-)
diff --git a/arch/microblaze/include/asm/topology.h b/arch/microblaze/inc=
lude/asm/topology.h
quoted hunk
index 96bcea5..5428f33 100644
--- a/arch/microblaze/include/asm/topology.h
+++ b/arch/microblaze/include/asm/topology.h
@@ -1,11 +1 @@
=A0#include <asm-generic/topology.h>
-
-#ifndef _ASM_MICROBLAZE_TOPOLOGY_H
-#define _ASM_MICROBLAZE_TOPOLOGY_H
-
-struct device_node;
-static inline int of_node_to_nid(struct device_node *device)
-{
- =A0 =A0 =A0 return 0;
-}
-#endif /* _ASM_MICROBLAZE_TOPOLOGY_H */
diff --git a/arch/powerpc/include/asm/prom.h b/arch/powerpc/include/asm/p=
rom.h
quoted hunk
index da7dd63..dca25a5 100644
--- a/arch/powerpc/include/asm/prom.h
+++ b/arch/powerpc/include/asm/prom.h
@@ -103,6 +103,11 @@ struct device_node *of_find_next_cache_node(struct d=
evice_node *np);
quoted hunk
=A0/* Get the MAC address */
=A0extern const void *of_get_mac_address(struct device_node *np);

+#ifdef CONFIG_NUMA
+extern int of_node_to_nid(struct device_node *device);
+#define of_node_to_nid of_node_to_nid
+#endif
+
=A0/**
=A0* of_irq_map_pci - Resolve the interrupt for a PCI device
=A0* @pdev: =A0 =A0 =A0the device whose interrupt is to be resolved
diff --git a/arch/powerpc/include/asm/topology.h b/arch/powerpc/include/a=
sm/topology.h
quoted hunk
index 32adf72..09dd38c 100644
--- a/arch/powerpc/include/asm/topology.h
+++ b/arch/powerpc/include/asm/topology.h
@@ -41,8 +41,6 @@ static inline int cpu_to_node(int cpu)
=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 cpu_all_mask =
: =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 \
=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 node_to_cpuma=
sk_map[node])
quoted hunk
-int of_node_to_nid(struct device_node *device);
-
=A0struct pci_bus;
=A0#ifdef CONFIG_PCI
=A0extern int pcibus_to_node(struct pci_bus *bus);
@@ -94,11 +92,6 @@ extern void sysfs_remove_device_from_node(struct sys_d=
evice *dev, int nid);
=A0#else

-static inline int of_node_to_nid(struct device_node *device)
-{
- =A0 =A0 =A0 return 0;
-}
-
=A0static inline void dump_numa_cpu_topology(void) {}

=A0static inline int sysfs_add_device_to_node(struct sys_device *dev, int=
 nid)
quoted hunk
diff --git a/arch/sparc/include/asm/prom.h b/arch/sparc/include/asm/prom.=
h
quoted hunk
index c82a7da..73befa5 100644
--- a/arch/sparc/include/asm/prom.h
+++ b/arch/sparc/include/asm/prom.h
@@ -43,6 +43,7 @@ extern int of_getintprop_default(struct device_node *np=
,
=A0extern int of_find_in_proplist(const char *list, const char *match, in=
t len);
quoted hunk
=A0#ifdef CONFIG_NUMA
=A0extern int of_node_to_nid(struct device_node *dp);
+#define of_node_to_nid of_node_to_nid
=A0#else
=A0#define of_node_to_nid(dp) =A0 =A0 (-1)
=A0#endif
diff --git a/include/linux/of.h b/include/linux/of.h
index b0756f3..cc936ca 100644
--- a/include/linux/of.h
+++ b/include/linux/of.h
@@ -146,6 +146,11 @@ static inline unsigned long of_read_ulong(const __be=
32 *cell, int size)
=A0#define OF_BAD_ADDR =A0 =A0((u64)-1)

+#ifndef of_node_to_nid
+static inline int of_node_to_nid(struct device_node *np) { return 0; }
+#define of_node_to_nid of_node_to_nid
+#endif
+
=A0extern struct device_node *of_find_node_by_name(struct device_node *fr=
om,
=A0 =A0 =A0 =A0const char *name);
=A0#define for_each_node_by_name(dn, name) \


--=20
Grant Likely, B.Sc., P.Eng.
Secret Lab Technologies Ltd.

Re: [PATCH v3] of: Create asm-generic/of.h and provide default of_node_to_nid()

From: Sam Ravnborg <hidden>
Date: 2010-07-26 22:26:30

On Mon, Jul 26, 2010 at 04:04:55PM -0600, Grant Likely wrote:
of_node_to_nid() is only relevant in a few architectures.  Don't force
everyone to implement it anyway.  This patch also adds asm-generic/of.h
which will be used to contain other overrideable symbols.

Signed-off-by: Grant Likely <redacted>
---

Changes in v3: don't use asm-generic, just keep macros in of.h
Changes in v2: address comments from sfr, add asm-generic/of.h
The use of asm-generic makes perfect sense.
This is how we usually deal with arch specific stuff.

With v3 of your patch we have a different result depending
on if we do:
#include <linux/of.h>

or we do:
#include <asm/prom.h>

This is undesireable.

I suggest to go back to v2 of your patch where you use asm-generic/of.h.

linux/of.h shall include asm/of.h
Then all archs shall have a of.h that may
include the asm-generic variant.


One patch to introduce of.h all over.
And a second patch to do the of_node_to_nid stuff would be appropriate.

quoted hunk
diff --git a/arch/powerpc/include/asm/prom.h b/arch/powerpc/include/asm/prom.h
index da7dd63..dca25a5 100644
--- a/arch/powerpc/include/asm/prom.h
+++ b/arch/powerpc/include/asm/prom.h
@@ -103,6 +103,11 @@ struct device_node *of_find_next_cache_node(struct device_node *np);
 /* Get the MAC address */
 extern const void *of_get_mac_address(struct device_node *np);
 
This shall go in asm/of.h
+#ifdef CONFIG_NUMA
+extern int of_node_to_nid(struct device_node *device);
+#define of_node_to_nid of_node_to_nid
This define is used to tell asm-generic/of.h that the arch has
a local definition - OK.
+#endif
+
 /**
  * of_irq_map_pci - Resolve the interrupt for a PCI device
  * @pdev:	the device whose interrupt is to be resolved
quoted hunk
diff --git a/include/linux/of.h b/include/linux/of.h
index b0756f3..cc936ca 100644
--- a/include/linux/of.h
+++ b/include/linux/of.h
@@ -146,6 +146,11 @@ static inline unsigned long of_read_ulong(const __be32 *cell, int size)
 
 #define OF_BAD_ADDR	((u64)-1)
 
+#ifndef of_node_to_nid
+static inline int of_node_to_nid(struct device_node *np) { return 0; }
+#define of_node_to_nid of_node_to_nid
But I fail to see the purpose of this define.

	Sam

Re: [PATCH v3] of: Create asm-generic/of.h and provide default of_node_to_nid()

From: Grant Likely <hidden>
Date: 2010-07-26 22:42:42

On Mon, Jul 26, 2010 at 4:26 PM, Sam Ravnborg [off-list ref] wrote:
On Mon, Jul 26, 2010 at 04:04:55PM -0600, Grant Likely wrote:
quoted
of_node_to_nid() is only relevant in a few architectures. =A0Don't force
everyone to implement it anyway. =A0This patch also adds asm-generic/of.=
h
quoted
which will be used to contain other overrideable symbols.

Signed-off-by: Grant Likely <redacted>
---

Changes in v3: don't use asm-generic, just keep macros in of.h
Changes in v2: address comments from sfr, add asm-generic/of.h
The use of asm-generic makes perfect sense.
This is how we usually deal with arch specific stuff.

With v3 of your patch we have a different result depending
on if we do:
#include <linux/of.h>

or we do:
#include <asm/prom.h>

This is undesireable.
The patch does maintain consistency.  Including only asm/prom.h may
mean that of_node_to_nid is undefined, but it will never result in a
different definition.  linux/of.h includes asm/prom.h before doing the
#ifdef test.
I suggest to go back to v2 of your patch where you use asm-generic/of.h.
Stephen suggested dropping asm-generic/of.h.  I'm happy to do it either way=
.
linux/of.h shall include asm/of.h
Then all archs shall have a of.h that may
include the asm-generic variant.


One patch to introduce of.h all over.
And a second patch to do the of_node_to_nid stuff would be appropriate.

quoted
diff --git a/arch/powerpc/include/asm/prom.h b/arch/powerpc/include/asm/=
prom.h
quoted
index da7dd63..dca25a5 100644
--- a/arch/powerpc/include/asm/prom.h
+++ b/arch/powerpc/include/asm/prom.h
@@ -103,6 +103,11 @@ struct device_node *of_find_next_cache_node(struct =
device_node *np);
quoted
=A0/* Get the MAC address */
=A0extern const void *of_get_mac_address(struct device_node *np);
This shall go in asm/of.h
quoted
+#ifdef CONFIG_NUMA
+extern int of_node_to_nid(struct device_node *device);
+#define of_node_to_nid of_node_to_nid
This define is used to tell asm-generic/of.h that the arch has
a local definition - OK.
quoted
+#endif
+
=A0/**
=A0 * of_irq_map_pci - Resolve the interrupt for a PCI device
=A0 * @pdev: =A0 =A0the device whose interrupt is to be resolved
quoted
diff --git a/include/linux/of.h b/include/linux/of.h
index b0756f3..cc936ca 100644
--- a/include/linux/of.h
+++ b/include/linux/of.h
@@ -146,6 +146,11 @@ static inline unsigned long of_read_ulong(const __b=
e32 *cell, int size)
quoted
=A0#define OF_BAD_ADDR =A0((u64)-1)

+#ifndef of_node_to_nid
+static inline int of_node_to_nid(struct device_node *np) { return 0; }
+#define of_node_to_nid of_node_to_nid
But I fail to see the purpose of this define.
It protects against some later include file doing a #define
of_node_to_nid and thus resulting in an inconsistent definition.  If
some code tries to do this then the preprocessor will complain.  This
is the pattern that Stephen suggested.

g.

Re: [PATCH v3] of: Create asm-generic/of.h and provide default of_node_to_nid()

From: David Miller <davem@davemloft.net>
Date: 2010-07-26 22:48:40

From: Grant Likely <redacted>
Date: Mon, 26 Jul 2010 16:42:20 -0600
It protects against some later include file doing a #define
of_node_to_nid and thus resulting in an inconsistent definition.  If
some code tries to do this then the preprocessor will complain.  This
is the pattern that Stephen suggested.
Also, it would be nice to unravel the "0" vs. "-1" default
inconsistency.

Re: [PATCH v3] of: Create asm-generic/of.h and provide default of_node_to_nid()

From: Grant Likely <hidden>
Date: 2010-07-26 22:51:24

On Mon, Jul 26, 2010 at 4:48 PM, David Miller [off-list ref] wrote:
From: Grant Likely <redacted>
Date: Mon, 26 Jul 2010 16:42:20 -0600
quoted
It protects against some later include file doing a #define
of_node_to_nid and thus resulting in an inconsistent definition. =A0If
some code tries to do this then the preprocessor will complain. =A0This
is the pattern that Stephen suggested.
Also, it would be nice to unravel the "0" vs. "-1" default
inconsistency.
Indeed.  I looked at it briefly, but it wasn't immediately clear what
the impact would be to switch powerpc over to -1, and it looked to me
like sparc depends on -1 to signify no node association.

g.

Re: [PATCH v3] of: Create asm-generic/of.h and provide default of_node_to_nid()

From: David Miller <davem@davemloft.net>
Date: 2010-07-27 01:37:52

From: Grant Likely <redacted>
Date: Mon, 26 Jul 2010 16:51:01 -0600
Indeed.  I looked at it briefly, but it wasn't immediately clear what
the impact would be to switch powerpc over to -1, and it looked to me
like sparc depends on -1 to signify no node association.
Kernel wide, NUMA interfaces tend to take "-1" to mean "any node."

I had looked over the powerpc cases, and besides 1 or 2 strange
locations the powerpc call sites were ready to handle -1.

Re: [PATCH v3] of: Create asm-generic/of.h and provide default of_node_to_nid()

From: Grant Likely <hidden>
Date: 2010-07-27 01:57:40

On Mon, Jul 26, 2010 at 7:38 PM, David Miller [off-list ref] wrote:
From: Grant Likely <redacted>
Date: Mon, 26 Jul 2010 16:51:01 -0600
quoted
Indeed. =A0I looked at it briefly, but it wasn't immediately clear what
the impact would be to switch powerpc over to -1, and it looked to me
like sparc depends on -1 to signify no node association.
Kernel wide, NUMA interfaces tend to take "-1" to mean "any node."

I had looked over the powerpc cases, and besides 1 or 2 strange
locations the powerpc call sites were ready to handle -1.
Okay, well let me rework the patch to make -1 the default and let
powerpc override it.  A follow-on patch can fix up the powerpc usage
of 0.

g.

Re: [PATCH v3] of: Create asm-generic/of.h and provide default of_node_to_nid()

From: Arnd Bergmann <arnd@arndb.de>
Date: 2010-07-27 13:34:07

On Tuesday 27 July 2010, Grant Likely wrote:
quoted
I suggest to go back to v2 of your patch where you use asm-generic/of.h.
Stephen suggested dropping asm-generic/of.h.  I'm happy to do it either way.
I don't mind adding stuff to asm-generic, but I think in this case it would
be easier to keep this in linux/of.h because there is nothing wrong with
all architectures including it.

Most files in asm-generic are there only for historical reasons, where some
architectures use them but others don't. IMHO we should use the include/linux
headers preferred for new stuff though.

	Arnd

Re: [PATCH v3] of: Create asm-generic/of.h and provide default of_node_to_nid()

From: Sam Ravnborg <hidden>
Date: 2010-07-27 16:52:54

On Tue, Jul 27, 2010 at 03:34:01PM +0200, Arnd Bergmann wrote:
On Tuesday 27 July 2010, Grant Likely wrote:
quoted
quoted
I suggest to go back to v2 of your patch where you use asm-generic/of.h.
Stephen suggested dropping asm-generic/of.h.  I'm happy to do it either way.
I don't mind adding stuff to asm-generic, but I think in this case it would
be easier to keep this in linux/of.h because there is nothing wrong with
all architectures including it.

Most files in asm-generic are there only for historical reasons, where some
architectures use them but others don't. IMHO we should use the include/linux
headers preferred for new stuff though.
Hi Arnd.

Thanks for this explanation. Obviously my previous post
about asm-generic was wrong (as Grant already indicated).

	Sam
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help