From: Mikael Pettersson ppc32-specific cleanups for perfctr: - ppc.c: don't initialise obsolete perfctr_info.cpu_type, use DEFINE_SPINLOCK(). - : remove cpu_type constants and PERFCTR_CPU_VERSION unused in the kernel, use explicitly-sized integers in user-visible types, make perfctr_cpu_control kernel-private. Signed-off-by: Mikael Pettersson Signed-off-by: Andrew Morton --- 25-akpm/drivers/perfctr/ppc.c | 8 ++----- 25-akpm/include/asm-ppc/perfctr.h | 43 +++++++++++++++----------------------- 2 files changed, 21 insertions(+), 30 deletions(-) diff -puN drivers/perfctr/ppc.c~perfctr-cleanups-2-3-ppc32 drivers/perfctr/ppc.c --- 25/drivers/perfctr/ppc.c~perfctr-cleanups-2-3-ppc32 2005-03-18 01:11:48.000000000 -0800 +++ 25-akpm/drivers/perfctr/ppc.c 2005-03-18 01:11:48.000000000 -0800 @@ -1,7 +1,7 @@ -/* $Id: ppc.c,v 1.30 2004/11/24 00:23:27 mikpe Exp $ +/* $Id: ppc.c,v 1.35 2005/03/17 23:50:05 mikpe Exp $ * PPC32 performance-monitoring counters driver. * - * Copyright (C) 2004 Mikael Pettersson + * Copyright (C) 2004-2005 Mikael Pettersson */ #include #include @@ -43,7 +43,7 @@ static enum pm_type pm_type; static unsigned int new_id(void) { - static spinlock_t lock = SPIN_LOCK_UNLOCKED; + static DEFINE_SPINLOCK(lock); static unsigned int counter; int id; @@ -1005,7 +1005,6 @@ static int __init known_init(void) return -ENODEV; } perfctr_info.cpu_features = features; - perfctr_info.cpu_type = 0; /* user-space should inspect PVR */ perfctr_cpu_name = known_name; perfctr_info.cpu_khz = detect_cpu_khz(pll_type); perfctr_ppc_init_tests(have_mmcr1); @@ -1021,7 +1020,6 @@ static int __init unknown_init(void) if (!khz) return -ENODEV; perfctr_info.cpu_features = PERFCTR_FEATURE_RDTSC; - perfctr_info.cpu_type = 0; perfctr_cpu_name = unknown_name; perfctr_info.cpu_khz = khz; pm_type = PM_NONE; diff -puN include/asm-ppc/perfctr.h~perfctr-cleanups-2-3-ppc32 include/asm-ppc/perfctr.h --- 25/include/asm-ppc/perfctr.h~perfctr-cleanups-2-3-ppc32 2005-03-18 01:11:48.000000000 -0800 +++ 25-akpm/include/asm-ppc/perfctr.h 2005-03-18 01:11:48.000000000 -0800 @@ -1,30 +1,25 @@ -/* $Id: perfctr.h,v 1.12 2004/11/24 00:20:57 mikpe Exp $ +/* $Id: perfctr.h,v 1.16 2005/03/17 23:58:54 mikpe Exp $ * PPC32 Performance-Monitoring Counters driver * - * Copyright (C) 2004 Mikael Pettersson + * Copyright (C) 2004-2005 Mikael Pettersson */ #ifndef _ASM_PPC_PERFCTR_H #define _ASM_PPC_PERFCTR_H -/* perfctr_info.cpu_type values */ -#define PERFCTR_PPC_GENERIC 0 -#define PERFCTR_PPC_604 1 -#define PERFCTR_PPC_604e 2 -#define PERFCTR_PPC_750 3 -#define PERFCTR_PPC_7400 4 -#define PERFCTR_PPC_7450 5 +#include struct perfctr_sum_ctrs { - unsigned long long tsc; - unsigned long long pmc[8]; + __u64 tsc; + __u64 pmc[8]; /* the size is not part of the user ABI */ }; struct perfctr_cpu_control_header { - unsigned int tsc_on; - unsigned int nractrs; /* # of a-mode counters */ - unsigned int nrictrs; /* # of i-mode counters */ + __u32 tsc_on; + __u32 nractrs; /* number of accumulation-mode counters */ + __u32 nrictrs; /* number of interrupt-mode counters */ }; +#ifdef __KERNEL__ struct perfctr_cpu_control { struct perfctr_cpu_control_header header; unsigned int mmcr0; @@ -34,21 +29,22 @@ struct perfctr_cpu_control { unsigned int ireset[8]; /* [0,0x7fffffff], for i-mode counters, physical indices */ unsigned int pmc_map[8]; /* virtual to physical index map */ }; +#endif struct perfctr_cpu_state { - unsigned int cstatus; + __u32 cstatus; struct { /* k1 is opaque in the user ABI */ - unsigned int id; - int isuspend_cpu; + __u32 id; + __s32 isuspend_cpu; } k1; /* The two tsc fields must be inlined. Placing them in a sub-struct causes unwanted internal padding on x86-64. */ - unsigned int tsc_start; - unsigned long long tsc_sum; + __u32 tsc_start; + __u64 tsc_sum; struct { - unsigned int map; - unsigned int start; - unsigned long long sum; + __u32 map; + __u32 start; + __u64 sum; } pmc[8]; /* the size is not part of the user ABI */ #ifdef __KERNEL__ struct perfctr_cpu_control control; @@ -109,9 +105,6 @@ static inline unsigned int perfctr_cstat #endif #define si_pmc_ovf_mask _sifields._pad[0] /* XXX: use an unsigned field later */ -/* version number for user-visible CPU-specific data */ -#define PERFCTR_CPU_VERSION 0 /* XXX: not yet cast in stone */ - #ifdef __KERNEL__ #if defined(CONFIG_PERFCTR) _