Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1339354 > unrolled thread
| Started by | Thomas Gleixner <tglx@linutronix.de> |
|---|---|
| First post | 2016-02-22 12:10 +0100 |
| Last post | 2016-02-22 20:20 +0100 |
| Articles | 3 — 2 participants |
Back to article view | Back to linux.kernel
This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by
below is the oldest one visible, not the original post.
[patch V2 28/28] x86/perf/intel/rapl: Make it modular Thomas Gleixner <tglx@linutronix.de> - 2016-02-22 12:10 +0100
Re: [patch V2 28/28] x86/perf/intel/rapl: Make it modular Andi Kleen <andi@firstfloor.org> - 2016-02-22 19:50 +0100
Re: [patch V2 28/28] x86/perf/intel/rapl: Make it modular Thomas Gleixner <tglx@linutronix.de> - 2016-02-22 20:20 +0100
| From | Thomas Gleixner <tglx@linutronix.de> |
|---|---|
| Date | 2016-02-22 12:10 +0100 |
| Subject | [patch V2 28/28] x86/perf/intel/rapl: Make it modular |
| Message-ID | <r4Wxl-4RK-45@gated-at.bofh.it> |
Add the necessary exit functions so it can be built as a module.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/x86/Kconfig.perf | 10 ++++++++++
arch/x86/kernel/cpu/Makefile | 4 +++-
arch/x86/kernel/cpu/perf_event_intel_rapl.c | 22 +++++++++++++++++++---
3 files changed, 32 insertions(+), 4 deletions(-)
--- a/arch/x86/Kconfig.perf
+++ b/arch/x86/Kconfig.perf
@@ -10,4 +10,14 @@ config PERF_EVENTS_INTEL_UNCORE
If unsure say y.
+config PERF_EVENTS_INTEL_RAPL
+ tristate "Intel rapl performance events"
+ depends on PERF_EVENTS && CPU_SUP_INTEL && PCI
+ default y
+ ---help---
+ Include support for Intel rapl performance events for power
+ monitoring on modern processors.
+
+ If unsure say y.
+
endmenu
--- a/arch/x86/kernel/cpu/Makefile
+++ b/arch/x86/kernel/cpu/Makefile
@@ -39,10 +39,12 @@ obj-$(CONFIG_CPU_SUP_AMD) += perf_event
endif
obj-$(CONFIG_CPU_SUP_INTEL) += perf_event_p6.o perf_event_knc.o perf_event_p4.o
obj-$(CONFIG_CPU_SUP_INTEL) += perf_event_intel_lbr.o perf_event_intel_ds.o perf_event_intel.o
-obj-$(CONFIG_CPU_SUP_INTEL) += perf_event_intel_rapl.o perf_event_intel_cqm.o
+obj-$(CONFIG_CPU_SUP_INTEL) += perf_event_intel_cqm.o
obj-$(CONFIG_CPU_SUP_INTEL) += perf_event_intel_pt.o perf_event_intel_bts.o
obj-$(CONFIG_CPU_SUP_INTEL) += perf_event_intel_cstate.o
+obj-$(CONFIG_PERF_EVENTS_INTEL_RAPL) += perf_event_intel_rapl.o
+
obj-$(CONFIG_PERF_EVENTS_INTEL_UNCORE) += perf_event_intel_uncores.o
perf_event_intel_uncores-objs := perf_event_intel_uncore.o \
perf_event_intel_uncore_snb.o \
--- a/arch/x86/kernel/cpu/perf_event_intel_rapl.c
+++ b/arch/x86/kernel/cpu/perf_event_intel_rapl.c
@@ -53,6 +53,8 @@
#include <asm/cpu_device_id.h>
#include "perf_event.h"
+MODULE_LICENSE("GPL");
+
/*
* RAPL energy status counters
*/
@@ -592,6 +594,10 @@ static int rapl_cpu_notifier(struct noti
return NOTIFY_OK;
}
+static struct notifier_block rapl_cpu_nb = {
+ .notifier_call = rapl_cpu_notifier,
+};
+
static __init void rapl_hsw_server_quirk(void)
{
/*
@@ -666,7 +672,7 @@ static int __init rapl_prepare_cpus(void
return 0;
}
-static void __init cleanup_rapl_pmus(void)
+static void cleanup_rapl_pmus(void)
{
int i;
@@ -759,7 +765,7 @@ static int __init rapl_pmu_init(void)
if (ret)
goto out;
- __perf_cpu_notifier(rapl_cpu_notifier);
+ __register_cpu_notifier(&rapl_cpu_nb);
cpu_notifier_register_done();
rapl_advertise();
return 0;
@@ -770,4 +776,14 @@ static int __init rapl_pmu_init(void)
cpu_notifier_register_done();
return ret;
}
-device_initcall(rapl_pmu_init);
+module_init(rapl_pmu_init);
+
+static void __exit intel_rapl_exit(void)
+{
+ cpu_notifier_register_done();
+ __unregister_cpu_notifier(&rapl_cpu_nb);
+ perf_pmu_unregister(&rapl_pmus->pmu);
+ cleanup_rapl_pmus();
+ cpu_notifier_register_done();
+}
+module_exit(intel_rapl_exit);
[toc] | [next] | [standalone]
| From | Andi Kleen <andi@firstfloor.org> |
|---|---|
| Date | 2016-02-22 19:50 +0100 |
| Message-ID | <r53It-1Cz-7@gated-at.bofh.it> |
| In reply to | #1339354 |
Thomas Gleixner <tglx@linutronix.de> writes: > Add the necessary exit functions so it can be built as a module. If you make it a module you also need to add MODULE_DEVICE_TABLE for the PCI IDs and also add x86_cpu_id tables/annotations for the model numbers. Otherwise the module would always need to be loaded manually which would break existing setups. Of course it's a bit of a waste because in many cases the uncore driver will not be needed. One alternative would be to only add some module aliases and then add code in the perf core to probe the alias when that PMU is accessed. That would likely work for most of perf, except for perf list (which does not know what pmu to probe) Other than that it's very useful, it was long overdue to make these drivers modular. -Andi -- ak@linux.intel.com -- Speaking for myself only
[toc] | [prev] | [next] | [standalone]
| From | Thomas Gleixner <tglx@linutronix.de> |
|---|---|
| Date | 2016-02-22 20:20 +0100 |
| Message-ID | <r54bv-23H-13@gated-at.bofh.it> |
| In reply to | #1339812 |
Andi, On Mon, 22 Feb 2016, Andi Kleen wrote: > Thomas Gleixner <tglx@linutronix.de> writes: > > > Add the necessary exit functions so it can be built as a module. > > If you make it a module you also need to add MODULE_DEVICE_TABLE > for the PCI IDs and also add x86_cpu_id tables/annotations > for the model numbers. > > Otherwise the module would always need to be loaded manually > which would break existing setups. I know. That's why I made the default Yes. We can drop that patch or add some explanation to the help text that 'M' is for manual module loading until someone adds the necessary magic for auto probing. Thanks, tglx
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web