提交 c69b767a 编写于 作者: O Olof Johansson 提交者: Paul Mackerras

[POWERPC] Oprofile cleanup

Clean up the ctr_read/write a bit. It's currently defined in the
include but only used in one C file each. The only exception is the
classic version, so keep that in the include and define in the C file
as appropriate.
Signed-off-by: NOlof Johansson <olof@lixom.net>
Signed-off-by: NPaul Mackerras <paulus@samba.org>
上级 4942bd80
...@@ -137,9 +137,9 @@ static void fsl7450_start(struct op_counter_config *ctr) ...@@ -137,9 +137,9 @@ static void fsl7450_start(struct op_counter_config *ctr)
for (i = 0; i < NUM_CTRS; ++i) { for (i = 0; i < NUM_CTRS; ++i) {
if (ctr[i].enabled) if (ctr[i].enabled)
ctr_write(i, reset_value[i]); classic_ctr_write(i, reset_value[i]);
else else
ctr_write(i, 0); classic_ctr_write(i, 0);
} }
/* Clear the freeze bit, and enable the interrupt. /* Clear the freeze bit, and enable the interrupt.
...@@ -179,13 +179,13 @@ static void fsl7450_handle_interrupt(struct pt_regs *regs, ...@@ -179,13 +179,13 @@ static void fsl7450_handle_interrupt(struct pt_regs *regs,
is_kernel = is_kernel_addr(pc); is_kernel = is_kernel_addr(pc);
for (i = 0; i < NUM_CTRS; ++i) { for (i = 0; i < NUM_CTRS; ++i) {
val = ctr_read(i); val = classic_ctr_read(i);
if (val < 0) { if (val < 0) {
if (oprofile_running && ctr[i].enabled) { if (oprofile_running && ctr[i].enabled) {
oprofile_add_ext_sample(pc, regs, i, is_kernel); oprofile_add_ext_sample(pc, regs, i, is_kernel);
ctr_write(i, reset_value[i]); classic_ctr_write(i, reset_value[i]);
} else { } else {
ctr_write(i, 0); classic_ctr_write(i, 0);
} }
} }
} }
......
...@@ -32,6 +32,87 @@ static unsigned long reset_value[OP_MAX_COUNTER]; ...@@ -32,6 +32,87 @@ static unsigned long reset_value[OP_MAX_COUNTER];
static int num_counters; static int num_counters;
static int oprofile_running; static int oprofile_running;
static inline u32 get_pmlca(int ctr)
{
u32 pmlca;
switch (ctr) {
case 0:
pmlca = mfpmr(PMRN_PMLCA0);
break;
case 1:
pmlca = mfpmr(PMRN_PMLCA1);
break;
case 2:
pmlca = mfpmr(PMRN_PMLCA2);
break;
case 3:
pmlca = mfpmr(PMRN_PMLCA3);
break;
default:
panic("Bad ctr number\n");
}
return pmlca;
}
static inline void set_pmlca(int ctr, u32 pmlca)
{
switch (ctr) {
case 0:
mtpmr(PMRN_PMLCA0, pmlca);
break;
case 1:
mtpmr(PMRN_PMLCA1, pmlca);
break;
case 2:
mtpmr(PMRN_PMLCA2, pmlca);
break;
case 3:
mtpmr(PMRN_PMLCA3, pmlca);
break;
default:
panic("Bad ctr number\n");
}
}
static inline unsigned int ctr_read(unsigned int i)
{
switch(i) {
case 0:
return mfpmr(PMRN_PMC0);
case 1:
return mfpmr(PMRN_PMC1);
case 2:
return mfpmr(PMRN_PMC2);
case 3:
return mfpmr(PMRN_PMC3);
default:
return 0;
}
}
static inline void ctr_write(unsigned int i, unsigned int val)
{
switch(i) {
case 0:
mtpmr(PMRN_PMC0, val);
break;
case 1:
mtpmr(PMRN_PMC1, val);
break;
case 2:
mtpmr(PMRN_PMC2, val);
break;
case 3:
mtpmr(PMRN_PMC3, val);
break;
default:
break;
}
}
static void init_pmc_stop(int ctr) static void init_pmc_stop(int ctr)
{ {
u32 pmlca = (PMLCA_FC | PMLCA_FCS | PMLCA_FCU | u32 pmlca = (PMLCA_FC | PMLCA_FCS | PMLCA_FCU |
......
...@@ -121,9 +121,9 @@ static void power4_start(struct op_counter_config *ctr) ...@@ -121,9 +121,9 @@ static void power4_start(struct op_counter_config *ctr)
for (i = 0; i < cur_cpu_spec->num_pmcs; ++i) { for (i = 0; i < cur_cpu_spec->num_pmcs; ++i) {
if (ctr[i].enabled) { if (ctr[i].enabled) {
ctr_write(i, reset_value[i]); classic_ctr_write(i, reset_value[i]);
} else { } else {
ctr_write(i, 0); classic_ctr_write(i, 0);
} }
} }
...@@ -254,13 +254,13 @@ static void power4_handle_interrupt(struct pt_regs *regs, ...@@ -254,13 +254,13 @@ static void power4_handle_interrupt(struct pt_regs *regs,
mtmsrd(mfmsr() | MSR_PMM); mtmsrd(mfmsr() | MSR_PMM);
for (i = 0; i < cur_cpu_spec->num_pmcs; ++i) { for (i = 0; i < cur_cpu_spec->num_pmcs; ++i) {
val = ctr_read(i); val = classic_ctr_read(i);
if (val < 0) { if (val < 0) {
if (oprofile_running && ctr[i].enabled) { if (oprofile_running && ctr[i].enabled) {
oprofile_add_ext_sample(pc, regs, i, is_kernel); oprofile_add_ext_sample(pc, regs, i, is_kernel);
ctr_write(i, reset_value[i]); classic_ctr_write(i, reset_value[i]);
} else { } else {
ctr_write(i, 0); classic_ctr_write(i, 0);
} }
} }
} }
......
...@@ -137,10 +137,10 @@ static void rs64_start(struct op_counter_config *ctr) ...@@ -137,10 +137,10 @@ static void rs64_start(struct op_counter_config *ctr)
for (i = 0; i < num_counters; ++i) { for (i = 0; i < num_counters; ++i) {
if (ctr[i].enabled) { if (ctr[i].enabled) {
ctr_write(i, reset_value[i]); classic_ctr_write(i, reset_value[i]);
ctrl_write(i, ctr[i].event); ctrl_write(i, ctr[i].event);
} else { } else {
ctr_write(i, 0); classic_ctr_write(i, 0);
} }
} }
...@@ -186,13 +186,13 @@ static void rs64_handle_interrupt(struct pt_regs *regs, ...@@ -186,13 +186,13 @@ static void rs64_handle_interrupt(struct pt_regs *regs,
mtmsrd(mfmsr() | MSR_PMM); mtmsrd(mfmsr() | MSR_PMM);
for (i = 0; i < num_counters; ++i) { for (i = 0; i < num_counters; ++i) {
val = ctr_read(i); val = classic_ctr_read(i);
if (val < 0) { if (val < 0) {
if (ctr[i].enabled) { if (ctr[i].enabled) {
oprofile_add_ext_sample(pc, regs, i, is_kernel); oprofile_add_ext_sample(pc, regs, i, is_kernel);
ctr_write(i, reset_value[i]); classic_ctr_write(i, reset_value[i]);
} else { } else {
ctr_write(i, 0); classic_ctr_write(i, 0);
} }
} }
} }
......
...@@ -58,10 +58,8 @@ extern struct op_powerpc_model op_model_power4; ...@@ -58,10 +58,8 @@ extern struct op_powerpc_model op_model_power4;
extern struct op_powerpc_model op_model_7450; extern struct op_powerpc_model op_model_7450;
extern struct op_powerpc_model op_model_cell; extern struct op_powerpc_model op_model_cell;
#ifndef CONFIG_FSL_BOOKE
/* All the classic PPC parts use these */ /* All the classic PPC parts use these */
static inline unsigned int ctr_read(unsigned int i) static inline unsigned int classic_ctr_read(unsigned int i)
{ {
switch(i) { switch(i) {
case 0: case 0:
...@@ -89,7 +87,7 @@ static inline unsigned int ctr_read(unsigned int i) ...@@ -89,7 +87,7 @@ static inline unsigned int ctr_read(unsigned int i)
} }
} }
static inline void ctr_write(unsigned int i, unsigned int val) static inline void classic_ctr_write(unsigned int i, unsigned int val)
{ {
switch(i) { switch(i) {
case 0: case 0:
...@@ -124,89 +122,6 @@ static inline void ctr_write(unsigned int i, unsigned int val) ...@@ -124,89 +122,6 @@ static inline void ctr_write(unsigned int i, unsigned int val)
break; break;
} }
} }
#else /* CONFIG_FSL_BOOKE */
static inline u32 get_pmlca(int ctr)
{
u32 pmlca;
switch (ctr) {
case 0:
pmlca = mfpmr(PMRN_PMLCA0);
break;
case 1:
pmlca = mfpmr(PMRN_PMLCA1);
break;
case 2:
pmlca = mfpmr(PMRN_PMLCA2);
break;
case 3:
pmlca = mfpmr(PMRN_PMLCA3);
break;
default:
panic("Bad ctr number\n");
}
return pmlca;
}
static inline void set_pmlca(int ctr, u32 pmlca)
{
switch (ctr) {
case 0:
mtpmr(PMRN_PMLCA0, pmlca);
break;
case 1:
mtpmr(PMRN_PMLCA1, pmlca);
break;
case 2:
mtpmr(PMRN_PMLCA2, pmlca);
break;
case 3:
mtpmr(PMRN_PMLCA3, pmlca);
break;
default:
panic("Bad ctr number\n");
}
}
static inline unsigned int ctr_read(unsigned int i)
{
switch(i) {
case 0:
return mfpmr(PMRN_PMC0);
case 1:
return mfpmr(PMRN_PMC1);
case 2:
return mfpmr(PMRN_PMC2);
case 3:
return mfpmr(PMRN_PMC3);
default:
return 0;
}
}
static inline void ctr_write(unsigned int i, unsigned int val)
{
switch(i) {
case 0:
mtpmr(PMRN_PMC0, val);
break;
case 1:
mtpmr(PMRN_PMC1, val);
break;
case 2:
mtpmr(PMRN_PMC2, val);
break;
case 3:
mtpmr(PMRN_PMC3, val);
break;
default:
break;
}
}
#endif /* CONFIG_FSL_BOOKE */
extern void op_powerpc_backtrace(struct pt_regs * const regs, unsigned int depth); extern void op_powerpc_backtrace(struct pt_regs * const regs, unsigned int depth);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册