Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=dc40127ca5c6e1da48d2b5f9d0c65b5795faac12
Commit:     dc40127ca5c6e1da48d2b5f9d0c65b5795faac12
Parent:     ab87e8dc88a7cae341c403547cea6b022f5ac023
Author:     Anton Blanchard <[EMAIL PROTECTED]>
AuthorDate: Tue Jan 9 02:43:02 2007 +1100
Committer:  Paul Mackerras <[EMAIL PROTECTED]>
CommitDate: Tue Jan 9 17:03:03 2007 +1100

    [POWERPC] Fix bugs in the hypervisor call stats code
    
    There were a few issues with the HCALL_STATS code:
    
    - PURR cpu feature checks were backwards
    - We iterated one entry off the end of the hcall_stats array
    - Remove dead update_hcall_stats() function prototype
    
    I noticed one thing while debugging, and that is we call H_ENTER (to set
    up the MMU hashtable in early init) before we have done the cpu fixups.
    This means we will execute the PURR SPR reads even on a CPU that isnt
    capable of it. I wonder if we can move the CPU feature fixups earlier.
    
    Signed-off-by: Anton Blanchard <[EMAIL PROTECTED]>
    Signed-off-by: Paul Mackerras <[EMAIL PROTECTED]>
---
 arch/powerpc/platforms/pseries/hvCall.S      |    6 +++---
 arch/powerpc/platforms/pseries/hvCall_inst.c |    4 ++--
 include/asm-powerpc/hvcall.h                 |    2 --
 3 files changed, 5 insertions(+), 7 deletions(-)

diff --git a/arch/powerpc/platforms/pseries/hvCall.S 
b/arch/powerpc/platforms/pseries/hvCall.S
index 527da44..5c7e387 100644
--- a/arch/powerpc/platforms/pseries/hvCall.S
+++ b/arch/powerpc/platforms/pseries/hvCall.S
@@ -26,7 +26,7 @@
 BEGIN_FTR_SECTION;                                             \
        mfspr   r0,SPRN_PURR;           /* get PURR and */      \
        std     r0,STK_PARM(r6)(r1);    /* save for later */    \
-END_FTR_SECTION_IFCLR(CPU_FTR_PURR);
+END_FTR_SECTION_IFSET(CPU_FTR_PURR);
        
 /*
  * postcall is performed immediately before function return which
@@ -43,7 +43,7 @@ BEGIN_FTR_SECTION;                                            
\
        mfspr   r8,SPRN_PURR;           /* PURR after */        \
        ld      r6,STK_PARM(r6)(r1);    /* PURR before */       \
        subf    r6,r6,r8;               /* delta */             \
-END_FTR_SECTION_IFCLR(CPU_FTR_PURR);                           \
+END_FTR_SECTION_IFSET(CPU_FTR_PURR);                           \
        ld      r5,STK_PARM(r5)(r1);    /* timebase before */   \
        subf    r5,r5,r7;               /* time delta */        \
                                                                \
@@ -66,7 +66,7 @@ BEGIN_FTR_SECTION;                                            
\
        ld      r7,HCALL_STAT_PURR(r4); /* PURR */              \
        add     r7,r7,r6;                                       \
        std     r7,HCALL_STAT_PURR(r4);                         \
-END_FTR_SECTION_IFCLR(CPU_FTR_PURR);                           \
+END_FTR_SECTION_IFSET(CPU_FTR_PURR);                           \
 1:
 #else
 #define HCALL_INST_PRECALL
diff --git a/arch/powerpc/platforms/pseries/hvCall_inst.c 
b/arch/powerpc/platforms/pseries/hvCall_inst.c
index 80181c4..3ddc049 100644
--- a/arch/powerpc/platforms/pseries/hvCall_inst.c
+++ b/arch/powerpc/platforms/pseries/hvCall_inst.c
@@ -34,7 +34,7 @@ DEFINE_PER_CPU(struct hcall_stats[HCALL_STAT_ARRAY_SIZE], 
hcall_stats);
  */
 static void *hc_start(struct seq_file *m, loff_t *pos)
 {
-       if ((int)*pos < HCALL_STAT_ARRAY_SIZE)
+       if ((int)*pos < (HCALL_STAT_ARRAY_SIZE-1))
                return (void *)(unsigned long)(*pos + 1);
 
        return NULL;
@@ -57,7 +57,7 @@ static int hc_show(struct seq_file *m, void *p)
        struct hcall_stats *hs = (struct hcall_stats *)m->private;
 
        if (hs[h_num].num_calls) {
-               if (!cpu_has_feature(CPU_FTR_PURR))
+               if (cpu_has_feature(CPU_FTR_PURR))
                        seq_printf(m, "%lu %lu %lu %lu\n", h_num<<2,
                                   hs[h_num].num_calls,
                                   hs[h_num].tb_total,
diff --git a/include/asm-powerpc/hvcall.h b/include/asm-powerpc/hvcall.h
index 257d1ce..7a50073 100644
--- a/include/asm-powerpc/hvcall.h
+++ b/include/asm-powerpc/hvcall.h
@@ -252,8 +252,6 @@ struct hcall_stats {
        unsigned long   tb_total;       /* total wall time (mftb) of calls. */
        unsigned long   purr_total;     /* total cpu time (PURR) of calls. */
 };
-void update_hcall_stats(unsigned long opcode, unsigned long tb_delta,
-                       unsigned long purr_delta);
 #define HCALL_STAT_ARRAY_SIZE  ((MAX_HCALL_OPCODE >> 2) + 1)
 
 #endif /* __ASSEMBLY__ */
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to