Re: [PATCH 2/3] powerpc: Add form 1 NUMA affinity

2010-04-30 Thread Benjamin Herrenschmidt
On Fri, 2010-04-30 at 14:34 +1000, Anton Blanchard wrote:
 Firmware changed the way it represents memory and cpu affinity on POWER7.
 Unfortunately the old method now caps the topology to work around issues
 with legacy operating systems. For Linux to get the correct topology we
 need to use the new form 1 affinity information.
 
 We set the form 1 field in the client architecture, and if we see 1 in the
 ibm,associativity-form property firmware supports form 1 affinity and
 we should look at the first field in the ibm,associativity-reference-points
 array. If not we use the second field as we always have.
 
 Signed-off-by: Anton Blanchard an...@samba.org
 ---

I sent your previous version of that one to Linus, it's already up. Can
you check it's allright ?

Cheers,
Ben.


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


Re: [PATCH 2/3] powerpc: Add form 1 NUMA affinity

2010-04-30 Thread Anton Blanchard
 
Hi Ben,

 I sent your previous version of that one to Linus, it's already up. Can
 you check it's allright ?

No change to this patch, but I thought I would send them as a series since they
build on each other. I'll double check mainline looks good.

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


[PATCH 2/3] powerpc: Add form 1 NUMA affinity

2010-04-29 Thread Anton Blanchard

Firmware changed the way it represents memory and cpu affinity on POWER7.
Unfortunately the old method now caps the topology to work around issues
with legacy operating systems. For Linux to get the correct topology we
need to use the new form 1 affinity information.

We set the form 1 field in the client architecture, and if we see 1 in the
ibm,associativity-form property firmware supports form 1 affinity and
we should look at the first field in the ibm,associativity-reference-points
array. If not we use the second field as we always have.

Signed-off-by: Anton Blanchard an...@samba.org
---

Index: linux-2.6.34-rc3/arch/powerpc/kernel/prom_init.c
===
--- linux-2.6.34-rc3.orig/arch/powerpc/kernel/prom_init.c   2010-04-02 
07:52:10.0 -0500
+++ linux-2.6.34-rc3/arch/powerpc/kernel/prom_init.c2010-04-07 
07:06:45.0 -0500
@@ -653,6 +653,7 @@
 #else
 #define OV5_CMO0x00
 #endif
+#define OV5_TYPE1_AFFINITY 0x80/* Type 1 NUMA affinity */
 
 /* Option Vector 6: IBM PAPR hints */
 #define OV6_LINUX  0x02/* Linux is our OS */
@@ -706,7 +707,7 @@
OV5_DONATE_DEDICATE_CPU | OV5_MSI,
0,
OV5_CMO,
-   0,
+   OV5_TYPE1_AFFINITY,
0,
0,
0,
Index: linux-2.6.34-rc3/arch/powerpc/mm/numa.c
===
--- linux-2.6.34-rc3.orig/arch/powerpc/mm/numa.c2010-04-07 
07:06:32.0 -0500
+++ linux-2.6.34-rc3/arch/powerpc/mm/numa.c 2010-04-07 09:43:48.0 
-0500
@@ -242,10 +243,11 @@
  */
 static int __init find_min_common_depth(void)
 {
-   int depth;
+   int depth, index;
const unsigned int *ref_points;
struct device_node *rtas_root;
unsigned int len;
+   struct device_node *options;
 
rtas_root = of_find_node_by_path(/rtas);
 
@@ -258,11 +260,23 @@
 * configuration (should be all 0's) and the second is for a normal
 * NUMA configuration.
 */
+   index = 1;
ref_points = of_get_property(rtas_root,
ibm,associativity-reference-points, len);
 
+   /*
+* For type 1 affinity information we want the first field
+*/
+   options = of_find_node_by_path(/options);
+   if (options) {
+   const char *str;
+   str = of_get_property(options, ibm,associativity-form, NULL);
+   if (str  !strcmp(str, 1))
+index = 0;
+   }
+
if ((len = 2 * sizeof(unsigned int))  ref_points) {
-   depth = ref_points[1];
+   depth = ref_points[index];
} else {
dbg(NUMA: ibm,associativity-reference-points not found.\n);
depth = -1;
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev