All of lore.kernel.org
 help / color / mirror / Atom feed
From: Cyrill Gorcunov <gorcunov@gmail.com>
To: Peter Zijlstra <peterz@infradead.org>, Don Zickus <dzickus@redhat.com>
Cc: sedat.dilek@gmail.com, LKML <linux-kernel@vger.kernel.org>,
	Ingo Molnar <mingo@elte.hu>
Subject: Re: [PATCH] x86, perf, nmi: Disable perf if counters are not accessable
Date: Tue, 23 Nov 2010 22:04:18 +0300	[thread overview]
Message-ID: <20101123190417.GC5997@lenovo> (raw)
In-Reply-To: <1290536827.2072.417.camel@laptop>

On Tue, Nov 23, 2010 at 07:27:07PM +0100, Peter Zijlstra wrote:
> On Tue, 2010-11-23 at 19:21 +0100, Sedat Dilek wrote:
> > Due to BIOS l(ocal)apic is not possible:
> > 
> > # dmesg | grep -i apic
> > [    0.000000] Using APIC driver default
> > [    0.000000] Local APIC disabled by BIOS -- you can enable it with "lapic"
> > [    0.000000] APIC: disable apic facility
> > [    0.000000] APIC: switched to apic NOOP
> > [    0.008891] no APIC, boot with the "lapic" boot parameter to force-enable it.
> > [    0.036141] Local APIC not detected. Using dummy APIC emulation. 
> 
> Have you tried booting with "lapic" as the second last msg suggests you
> do?

 Peter, Don, might not we need something like the patch below -- ie to check for
apic earlier and do not acquire cpu for PERF cpu bit, and its cpu model, etc
if there is no active apic? And perhaps for nmi-watchdog, we should not try
to creat perf event for same reason and simply report that nmi-watchdog is
disabled (though of course hpet based one should try to continue).

 No?

  Cyrill
---
 arch/x86/kernel/cpu/perf_event.c |   24 ++++++++++++++++--------
 1 file changed, 16 insertions(+), 8 deletions(-)

Index: linux-2.6.git/arch/x86/kernel/cpu/perf_event.c
=====================================================================
--- linux-2.6.git.orig/arch/x86/kernel/cpu/perf_event.c
+++ linux-2.6.git/arch/x86/kernel/cpu/perf_event.c
@@ -1329,14 +1329,16 @@ x86_pmu_notifier(struct notifier_block *
 	return ret;
 }
 
-static void __init pmu_check_apic(void)
+static int __init pmu_check_apic(void)
 {
 	if (cpu_has_apic)
-		return;
+		return 0;
 
 	x86_pmu.apic = 0;
 	pr_info("no APIC, boot with the \"lapic\" boot parameter to force-enable it.\n");
 	pr_info("no hardware sampling interrupt available.\n");
+
+	return -1;
 }
 
 void __init init_hw_perf_events(void)
@@ -1346,6 +1348,10 @@ void __init init_hw_perf_events(void)
 
 	pr_info("Performance Events: ");
 
+	/* apic is required */
+	if (pmu_check_apic())
+		goto no_pmu;
+
 	switch (boot_cpu_data.x86_vendor) {
 	case X86_VENDOR_INTEL:
 		err = intel_pmu_init();
@@ -1356,12 +1362,8 @@ void __init init_hw_perf_events(void)
 	default:
 		return;
 	}
-	if (err != 0) {
-		pr_cont("no PMU driver, software events only.\n");
-		return;
-	}
-
-	pmu_check_apic();
+	if (err != 0)
+		goto no_pmu;
 
 	pr_cont("%s PMU driver.\n", x86_pmu.name);
 
@@ -1411,6 +1413,12 @@ void __init init_hw_perf_events(void)
 
 	perf_pmu_register(&pmu);
 	perf_cpu_notifier(x86_pmu_notifier);
+
+	return;
+
+no_pmu:
+	pr_cont("no PMU driver, software events only.\n");
+	return;
 }
 
 static inline void x86_pmu_read(struct perf_event *event)

  parent reply	other threads:[~2010-11-23 19:04 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-11-23 15:15 [PATCH] x86, perf, nmi: Disable perf if counters are not accessable Sedat Dilek
2010-11-23 15:19 ` Peter Zijlstra
2010-11-23 16:56 ` Don Zickus
2010-11-23 18:21   ` Sedat Dilek
2010-11-23 18:27     ` Peter Zijlstra
2010-11-23 18:29       ` Sedat Dilek
2010-11-23 18:37         ` Sedat Dilek
2010-11-23 19:04       ` Cyrill Gorcunov [this message]
2010-11-23 19:07         ` Peter Zijlstra
  -- strict thread matches above, loose matches on Subject: below --
2010-11-23 19:18 Cyrill Gorcunov
2010-11-22 21:55 Don Zickus
2010-11-23 10:46 ` Peter Zijlstra
2010-11-23 14:13   ` Don Zickus

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20101123190417.GC5997@lenovo \
    --to=gorcunov@gmail.com \
    --cc=dzickus@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=peterz@infradead.org \
    --cc=sedat.dilek@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.