Signed-off-by: Zhouyi Zhou <[email protected]>
---
arch/x86/kernel/cpu/perf_event_amd_uncore.c | 32 +++++++++++++++------------
1 file changed, 18 insertions(+), 14 deletions(-)
diff --git a/arch/x86/kernel/cpu/perf_event_amd_uncore.c b/arch/x86/kernel/cpu/perf_event_amd_uncore.c
index 3bbdf4c..f60a50e 100644
--- a/arch/x86/kernel/cpu/perf_event_amd_uncore.c
+++ b/arch/x86/kernel/cpu/perf_event_amd_uncore.c
@@ -300,24 +300,28 @@ static void amd_uncore_cpu_up_prepare(unsigned int cpu)
if (amd_uncore_nb) {
uncore = amd_uncore_alloc(cpu);
- uncore->cpu = cpu;
- uncore->num_counters = NUM_COUNTERS_NB;
- uncore->rdpmc_base = RDPMC_BASE_NB;
- uncore->msr_base = MSR_F15H_NB_PERF_CTL;
- uncore->active_mask = &amd_nb_active_mask;
- uncore->pmu = &amd_nb_pmu;
- *per_cpu_ptr(amd_uncore_nb, cpu) = uncore;
+ if (uncore) {
+ uncore->cpu = cpu;
+ uncore->num_counters = NUM_COUNTERS_NB;
+ uncore->rdpmc_base = RDPMC_BASE_NB;
+ uncore->msr_base = MSR_F15H_NB_PERF_CTL;
+ uncore->active_mask = &amd_nb_active_mask;
+ uncore->pmu = &amd_nb_pmu;
+ *per_cpu_ptr(amd_uncore_nb, cpu) = uncore;
+ }
}
if (amd_uncore_l2) {
uncore = amd_uncore_alloc(cpu);
- uncore->cpu = cpu;
- uncore->num_counters = NUM_COUNTERS_L2;
- uncore->rdpmc_base = RDPMC_BASE_L2;
- uncore->msr_base = MSR_F16H_L2I_PERF_CTL;
- uncore->active_mask = &amd_l2_active_mask;
- uncore->pmu = &amd_l2_pmu;
- *per_cpu_ptr(amd_uncore_l2, cpu) = uncore;
+ if (uncore) {
+ uncore->cpu = cpu;
+ uncore->num_counters = NUM_COUNTERS_L2;
+ uncore->rdpmc_base = RDPMC_BASE_L2;
+ uncore->msr_base = MSR_F16H_L2I_PERF_CTL;
+ uncore->active_mask = &amd_l2_active_mask;
+ uncore->pmu = &amd_l2_pmu;
+ *per_cpu_ptr(amd_uncore_l2, cpu) = uncore;
+ }
}
}
--
1.7.10.4
On Tue, Jun 10, 2014 at 03:37:38PM +0800, Zhouyi Zhou wrote:
Less typing more thinking, this is wrong. You should fail when the
allocation fails.
Thanks Peter for reviewing, and sorry for not think it thoroughly
before submitting.
Is that ok that when amd_uncore_cpu_up_prepare is called from
amd_uncore_cpu_notifier
I return notifier_from_errno(-ENOMEM), and when
amd_uncore_cpu_up_prepare is called from
amd_uncore_init I immediately return -ENODEV?
On Tue, Jun 10, 2014 at 4:22 PM, Peter Zijlstra <[email protected]> wrote:
> On Tue, Jun 10, 2014 at 03:37:38PM +0800, Zhouyi Zhou wrote:
>
> Less typing more thinking, this is wrong. You should fail when the
> allocation fails.
On Tue, Jun 10, 2014 at 04:45:46PM +0800, Zhouyi Zhou wrote:
> Thanks Peter for reviewing, and sorry for not think it thoroughly
> before submitting.
> Is that ok that when amd_uncore_cpu_up_prepare is called from
> amd_uncore_cpu_notifier
> I return notifier_from_errno(-ENOMEM), and when
> amd_uncore_cpu_up_prepare is called from
> amd_uncore_init I immediately return -ENODEV?
That sounds about right. Thanks!