Commit 399aaa25 authored by Al Cooper's avatar Al Cooper Committed by Ralf Baechle

MIPS: perf: Split the Kconfig option CONFIG_MIPS_MT_SMP

Split the Kconfig option CONFIG_MIPS_MT_SMP into CONFIG_MIPS_MT_SMP
and CONFIG_MIPS_PERF_SHARED_TC_COUNTERS so some of the code used
for performance counters that are shared between threads can be used
for MIPS cores that are not MT_SMP.
Signed-off-by: default avatarAl Cooper <alcooperx@gmail.com>
Cc: linux-mips@linux-mips.org
Cc: linux-kernel@vger.kernel.org
Patchwork: https://patchwork.linux-mips.org/patch/4108/Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent ecb8ee8a
...@@ -1928,6 +1928,7 @@ config MIPS_MT_SMP ...@@ -1928,6 +1928,7 @@ config MIPS_MT_SMP
select SYS_SUPPORTS_SCHED_SMT if SMP select SYS_SUPPORTS_SCHED_SMT if SMP
select SYS_SUPPORTS_SMP select SYS_SUPPORTS_SMP
select SMP_UP select SMP_UP
select MIPS_PERF_SHARED_TC_COUNTERS
help help
This is a kernel model which is known a VSMP but lately has been This is a kernel model which is known a VSMP but lately has been
marketesed into SMVP. marketesed into SMVP.
...@@ -2277,6 +2278,9 @@ config NR_CPUS ...@@ -2277,6 +2278,9 @@ config NR_CPUS
performance should round up your number of processors to the next performance should round up your number of processors to the next
power of two. power of two.
config MIPS_PERF_SHARED_TC_COUNTERS
bool
# #
# Timer Interrupt Frequency Configuration # Timer Interrupt Frequency Configuration
# #
......
...@@ -130,7 +130,7 @@ static struct mips_pmu mipspmu; ...@@ -130,7 +130,7 @@ static struct mips_pmu mipspmu;
#define M_PERFCTL_EVENT_MASK 0xfe0 #define M_PERFCTL_EVENT_MASK 0xfe0
#ifdef CONFIG_MIPS_MT_SMP #ifdef CONFIG_MIPS_PERF_SHARED_TC_COUNTERS
static int cpu_has_mipsmt_pertccounters; static int cpu_has_mipsmt_pertccounters;
static DEFINE_RWLOCK(pmuint_rwlock); static DEFINE_RWLOCK(pmuint_rwlock);
...@@ -156,10 +156,10 @@ static unsigned int counters_total_to_per_cpu(unsigned int counters) ...@@ -156,10 +156,10 @@ static unsigned int counters_total_to_per_cpu(unsigned int counters)
return counters >> vpe_shift(); return counters >> vpe_shift();
} }
#else /* !CONFIG_MIPS_MT_SMP */ #else /* !CONFIG_MIPS_PERF_SHARED_TC_COUNTERS */
#define vpe_id() 0 #define vpe_id() 0
#endif /* CONFIG_MIPS_MT_SMP */ #endif /* CONFIG_MIPS_PERF_SHARED_TC_COUNTERS */
static void resume_local_counters(void); static void resume_local_counters(void);
static void pause_local_counters(void); static void pause_local_counters(void);
...@@ -503,7 +503,7 @@ static void mipspmu_read(struct perf_event *event) ...@@ -503,7 +503,7 @@ static void mipspmu_read(struct perf_event *event)
static void mipspmu_enable(struct pmu *pmu) static void mipspmu_enable(struct pmu *pmu)
{ {
#ifdef CONFIG_MIPS_MT_SMP #ifdef CONFIG_MIPS_PERF_SHARED_TC_COUNTERS
write_unlock(&pmuint_rwlock); write_unlock(&pmuint_rwlock);
#endif #endif
resume_local_counters(); resume_local_counters();
...@@ -523,7 +523,7 @@ static void mipspmu_enable(struct pmu *pmu) ...@@ -523,7 +523,7 @@ static void mipspmu_enable(struct pmu *pmu)
static void mipspmu_disable(struct pmu *pmu) static void mipspmu_disable(struct pmu *pmu)
{ {
pause_local_counters(); pause_local_counters();
#ifdef CONFIG_MIPS_MT_SMP #ifdef CONFIG_MIPS_PERF_SHARED_TC_COUNTERS
write_lock(&pmuint_rwlock); write_lock(&pmuint_rwlock);
#endif #endif
} }
...@@ -1163,7 +1163,7 @@ static int mipsxx_pmu_handle_shared_irq(void) ...@@ -1163,7 +1163,7 @@ static int mipsxx_pmu_handle_shared_irq(void)
* See also mipsxx_pmu_start(). * See also mipsxx_pmu_start().
*/ */
pause_local_counters(); pause_local_counters();
#ifdef CONFIG_MIPS_MT_SMP #ifdef CONFIG_MIPS_PERF_SHARED_TC_COUNTERS
read_lock(&pmuint_rwlock); read_lock(&pmuint_rwlock);
#endif #endif
...@@ -1195,7 +1195,7 @@ static int mipsxx_pmu_handle_shared_irq(void) ...@@ -1195,7 +1195,7 @@ static int mipsxx_pmu_handle_shared_irq(void)
if (handled == IRQ_HANDLED) if (handled == IRQ_HANDLED)
irq_work_run(); irq_work_run();
#ifdef CONFIG_MIPS_MT_SMP #ifdef CONFIG_MIPS_PERF_SHARED_TC_COUNTERS
read_unlock(&pmuint_rwlock); read_unlock(&pmuint_rwlock);
#endif #endif
resume_local_counters(); resume_local_counters();
...@@ -1362,7 +1362,7 @@ init_hw_perf_events(void) ...@@ -1362,7 +1362,7 @@ init_hw_perf_events(void)
return -ENODEV; return -ENODEV;
} }
#ifdef CONFIG_MIPS_MT_SMP #ifdef CONFIG_MIPS_PERF_SHARED_TC_COUNTERS
cpu_has_mipsmt_pertccounters = read_c0_config7() & (1<<19); cpu_has_mipsmt_pertccounters = read_c0_config7() & (1<<19);
if (!cpu_has_mipsmt_pertccounters) if (!cpu_has_mipsmt_pertccounters)
counters = counters_total_to_per_cpu(counters); counters = counters_total_to_per_cpu(counters);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment