Re: [PATCH] [powerpc] update xmon slb code

2007-10-29 Thread Olof Johansson
On Mon, Oct 29, 2007 at 02:59:27PM -0500, Will Schmidt wrote:
 
 [powerpc] update xmon slb code
 
 adds a bit more detail to the xmon SLB output.  When the valid bit is
 set, This displays the ESID and VSID values, as well as decoding the
 segment size. (1T or 256M).  This supresses the output for any slb entries
 that contain only zeros.
 
 I debated a bit on whether to check for just (valid) versus checking for
 (valid|esid|vsid).  By inspection on power5, I do have SLB entries that
 contain values but without the valid bit set, so opted to display any
 non-zero values.

Yeah, newer versions of the architecture specify that invalid entries
must read as 0, while POWER5 doesn't. Printing them doesn't hurt.

 sample output from power6 (1T segment support):
 
 00 c800 40004f7ca3000500  1T  ESID=c0  VSID=40004f7ca3
 01 d800 4000eb71b400  1T  ESID=d0  VSID=4000eb71b0
 24 cf000800 400011b26500  1T  ESID=cf  VSID=400011b260
 25 04000800 4000a9e949000c80  1T  ESID=4  VSID=4000a9e949
 26 1800 5e93bfd49c80 256M ESID=1  VSID=5e93bfd49
 27 0f000800 4000e262a4000c80  1T  ESID=f  VSID=4000e262a4
 28 0800 5dd45172ec80 256M ESID=0  VSID=5dd45172e
 
 sample output from power5 (notice the non-valid but non-zero entries)
 
 54 4800 cf33bb059c80 256M ESID=4  VSID=cf33bb059
 55 1800 ccf56fe08c80 256M ESID=1  VSID=ccf56fe08
 56 1000 dd82ce799c80
 57 cf000800 d59aca40f500 256M ESID=cf000  VSID=d59aca40f
 58 c0007800 45cb97751500 256M ESID=c0007  VSID=45cb97751
 59 0400 61552db1bc80
 
 Tested on power5 and power6.

Nice, I like it! I wonder if it would make sense to (space) pad the
ESID/VSID fields so they line up, it'd make output just a little tidier.

(If you end up changing that, please also break the long printf lines
in two.)

Beside that it looks good to me! :)


-Olof

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


[PATCH] [powerpc] update xmon slb code

2007-10-29 Thread Will Schmidt

[powerpc] update xmon slb code

adds a bit more detail to the xmon SLB output.  When the valid bit is
set, This displays the ESID and VSID values, as well as decoding the
segment size. (1T or 256M).  This supresses the output for any slb entries
that contain only zeros.

I debated a bit on whether to check for just (valid) versus checking for
(valid|esid|vsid).  By inspection on power5, I do have SLB entries that
contain values but without the valid bit set, so opted to display any
non-zero values.

sample output from power6 (1T segment support):

00 c800 40004f7ca3000500  1T  ESID=c0  VSID=40004f7ca3
01 d800 4000eb71b400  1T  ESID=d0  VSID=4000eb71b0
24 cf000800 400011b26500  1T  ESID=cf  VSID=400011b260
25 04000800 4000a9e949000c80  1T  ESID=4  VSID=4000a9e949
26 1800 5e93bfd49c80 256M ESID=1  VSID=5e93bfd49
27 0f000800 4000e262a4000c80  1T  ESID=f  VSID=4000e262a4
28 0800 5dd45172ec80 256M ESID=0  VSID=5dd45172e

sample output from power5 (notice the non-valid but non-zero entries)

54 4800 cf33bb059c80 256M ESID=4  VSID=cf33bb059
55 1800 ccf56fe08c80 256M ESID=1  VSID=ccf56fe08
56 1000 dd82ce799c80
57 cf000800 d59aca40f500 256M ESID=cf000  VSID=d59aca40f
58 c0007800 45cb97751500 256M ESID=c0007  VSID=45cb97751
59 0400 61552db1bc80

Tested on power5 and power6.

Signed-Off-By: Will Schmidt [EMAIL PROTECTED]
---

 arch/powerpc/xmon/xmon.c |   20 ++--
 1 files changed, 14 insertions(+), 6 deletions(-)


diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c
index 121b04d..97984f3 100644
--- a/arch/powerpc/xmon/xmon.c
+++ b/arch/powerpc/xmon/xmon.c
@@ -2527,16 +2527,24 @@ static void xmon_print_symbol(unsigned long address, 
const char *mid,
 static void dump_slb(void)
 {
int i;
-   unsigned long tmp;
+   unsigned long esid,vsid,valid;
 
printf(SLB contents of cpu %x\n, smp_processor_id());
 
for (i = 0; i  SLB_NUM_ENTRIES; i++) {
-   asm volatile(slbmfee  %0,%1 : =r (tmp) : r (i));
-   printf(%02d %016lx , i, tmp);
-
-   asm volatile(slbmfev  %0,%1 : =r (tmp) : r (i));
-   printf(%016lx\n, tmp);
+   asm volatile(slbmfee  %0,%1 : =r (esid) : r (i));
+   asm volatile(slbmfev  %0,%1 : =r (vsid) : r (i));
+   valid = (esid  SLB_ESID_V);
+   if (valid | esid | vsid) {
+   printf(%02d %016lx %016lx, i, esid, vsid);
+   if (valid) {
+   if (vsid  SLB_VSID_B_1T)
+   printf(  1T  ESID=%lx  VSID=%lx \n, 
GET_ESID_1T(esid),vsid SLB_VSID_SHIFT_1T);
+   else 
+   printf( 256M ESID=%lx  VSID=%lx \n, 
GET_ESID(esid),vsid SLB_VSID_SHIFT);
+   } else 
+   printf(\n);
+   }
}
 }
 


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