mirror of
https://git.yoctoproject.org/meta-ti
synced 2026-07-16 22:38:04 +00:00
07e8c30da9
Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
82 lines
2.6 KiB
Diff
82 lines
2.6 KiB
Diff
From b376276870006eabba46427b79a3f3be70b3e3ea Mon Sep 17 00:00:00 2001
|
|
From: Robert Richter <robert.richter@amd.com>
|
|
Date: Mon, 3 Jan 2011 12:15:14 +0100
|
|
Subject: [PATCH 53/65] arch/x86/oprofile/op_model_amd.c: Perform initialisation on a single CPU
|
|
|
|
Disable preemption in init_ibs(). The function only checks the
|
|
ibs capabilities and sets up pci devices (if necessary). It runs
|
|
only on one cpu but operates with the local APIC and some MSRs,
|
|
thus it is better to disable preemption.
|
|
|
|
[ 7.034377] BUG: using smp_processor_id() in preemptible [00000000] code: modprobe/483
|
|
[ 7.034385] caller is setup_APIC_eilvt+0x155/0x180
|
|
[ 7.034389] Pid: 483, comm: modprobe Not tainted 2.6.37-rc1-20101110+ #1
|
|
[ 7.034392] Call Trace:
|
|
[ 7.034400] [<ffffffff812a2b72>] debug_smp_processor_id+0xd2/0xf0
|
|
[ 7.034404] [<ffffffff8101e985>] setup_APIC_eilvt+0x155/0x180
|
|
[ ... ]
|
|
|
|
Addresses https://bugzilla.kernel.org/show_bug.cgi?id=22812
|
|
|
|
Reported-by: <atswartz@gmail.com>
|
|
Signed-off-by: Robert Richter <robert.richter@amd.com>
|
|
Cc: oprofile-list@lists.sourceforge.net <oprofile-list@lists.sourceforge.net>
|
|
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
|
|
Cc: Frederic Weisbecker <fweisbec@gmail.com>
|
|
Cc: Rafael J. Wysocki <rjw@sisk.pl>
|
|
Cc: Dan Carpenter <error27@gmail.com>
|
|
Cc: Andrew Morton <akpm@linux-foundation.org>
|
|
Cc: <stable@kernel.org> [2.6.37.x]
|
|
LKML-Reference: <20110103111514.GM4739@erda.amd.com>
|
|
[ small cleanups ]
|
|
Signed-off-by: Ingo Molnar <mingo@elte.hu>
|
|
---
|
|
arch/x86/oprofile/op_model_amd.c | 24 ++++++++++++++++--------
|
|
1 files changed, 16 insertions(+), 8 deletions(-)
|
|
|
|
diff --git a/arch/x86/oprofile/op_model_amd.c b/arch/x86/oprofile/op_model_amd.c
|
|
index a011bcc..7d90d47 100644
|
|
--- a/arch/x86/oprofile/op_model_amd.c
|
|
+++ b/arch/x86/oprofile/op_model_amd.c
|
|
@@ -630,21 +630,29 @@ static int __init_ibs_nmi(void)
|
|
return 0;
|
|
}
|
|
|
|
-/* initialize the APIC for the IBS interrupts if available */
|
|
+/*
|
|
+ * check and reserve APIC extended interrupt LVT offset for IBS if
|
|
+ * available
|
|
+ *
|
|
+ * init_ibs() preforms implicitly cpu-local operations, so pin this
|
|
+ * thread to its current CPU
|
|
+ */
|
|
+
|
|
static void init_ibs(void)
|
|
{
|
|
- ibs_caps = get_ibs_caps();
|
|
+ preempt_disable();
|
|
|
|
+ ibs_caps = get_ibs_caps();
|
|
if (!ibs_caps)
|
|
- return;
|
|
+ goto out;
|
|
|
|
- if (__init_ibs_nmi()) {
|
|
+ if (__init_ibs_nmi() < 0)
|
|
ibs_caps = 0;
|
|
- return;
|
|
- }
|
|
+ else
|
|
+ printk(KERN_INFO "oprofile: AMD IBS detected (0x%08x)\n", ibs_caps);
|
|
|
|
- printk(KERN_INFO "oprofile: AMD IBS detected (0x%08x)\n",
|
|
- (unsigned)ibs_caps);
|
|
+out:
|
|
+ preempt_enable();
|
|
}
|
|
|
|
static int (*create_arch_files)(struct super_block *sb, struct dentry *root);
|
|
--
|
|
1.6.6.1
|
|
|