Browse Source

Merge branch 'perf-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip

* 'perf-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
  perf: Fix callchain hit bad cast on ascii display
  arch/x86/oprofile/op_model_amd.c: Perform initialisation on a single CPU
  watchdog: Improve initialisation error message and documentation
Linus Torvalds 14 years ago
parent
commit
03ed6a3aa6

+ 1 - 1
Documentation/kernel-parameters.txt

@@ -1759,7 +1759,7 @@ and is between 256 and 4096 characters. It is defined in the file
 
 
 	nousb		[USB] Disable the USB subsystem
 	nousb		[USB] Disable the USB subsystem
 
 
-	nowatchdog	[KNL] Disable the lockup detector.
+	nowatchdog	[KNL] Disable the lockup detector (NMI watchdog).
 
 
 	nowb		[ARM]
 	nowb		[ARM]
 
 

+ 16 - 8
arch/x86/oprofile/op_model_amd.c

@@ -630,21 +630,29 @@ static int __init_ibs_nmi(void)
 	return 0;
 	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)
 static void init_ibs(void)
 {
 {
-	ibs_caps = get_ibs_caps();
+	preempt_disable();
 
 
+	ibs_caps = get_ibs_caps();
 	if (!ibs_caps)
 	if (!ibs_caps)
-		return;
+		goto out;
 
 
-	if (__init_ibs_nmi()) {
+	if (__init_ibs_nmi() < 0)
 		ibs_caps = 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);
 static int (*create_arch_files)(struct super_block *sb, struct dentry *root);

+ 2 - 1
kernel/watchdog.c

@@ -364,7 +364,8 @@ static int watchdog_nmi_enable(int cpu)
 		goto out_save;
 		goto out_save;
 	}
 	}
 
 
-	printk(KERN_ERR "NMI watchdog failed to create perf event on cpu%i: %p\n", cpu, event);
+	printk(KERN_ERR "NMI watchdog disabled for cpu%i: unable to create perf event: %ld\n",
+	       cpu, PTR_ERR(event));
 	return PTR_ERR(event);
 	return PTR_ERR(event);
 
 
 	/* success path */
 	/* success path */

+ 1 - 1
tools/perf/util/hist.c

@@ -356,7 +356,7 @@ static size_t ipchain__fprintf_graph_line(FILE *fp, int depth, int depth_mask,
 
 
 static size_t ipchain__fprintf_graph(FILE *fp, struct callchain_list *chain,
 static size_t ipchain__fprintf_graph(FILE *fp, struct callchain_list *chain,
 				     int depth, int depth_mask, int period,
 				     int depth, int depth_mask, int period,
-				     u64 total_samples, int hits,
+				     u64 total_samples, u64 hits,
 				     int left_margin)
 				     int left_margin)
 {
 {
 	int i;
 	int i;