aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/oprofile/timer_int.c
diff options
context:
space:
mode:
authorHeinz Graalfs <graalfs@linux.vnet.ibm.com>2011-01-21 05:06:53 -0500
committerRobert Richter <robert.richter@amd.com>2011-02-15 05:08:50 -0500
commit997dbb4967da248808850c250182ef2528fff2d1 (patch)
treeb41497541383c2e569b629fbab09fb2280611965 /drivers/oprofile/timer_int.c
parentec6a3df1c008d9e8664e53b0363f6847c5c0dc3f (diff)
oprofile, s390: Enhance OProfile to support System zs hardware sampling feature
OProfile is enhanced to export all files for controlling System z's hardware sampling, and to invoke hwsampler exported functions to initialize and use System z's hardware sampling. The patch invokes hwsampler_setup() during oprofile init and exports following hwsampler files under oprofilefs if hwsampler's setup succeeded: A new directory for hardware sampling based files /dev/oprofile/hwsampling/ The userland daemon must explicitly write to the following files to disable (or enable) hardware based sampling /dev/oprofile/hwsampling/hwsampler to modify the actual sampling rate /dev/oprofile/hwsampling/hw_interval to modify the amount of sampling memory (measured in 4K pages) /dev/oprofile/hwsampling/hw_sdbt_blocks The following files are read only and show the possible minimum sampling rate /dev/oprofile/hwsampling/hw_min_interval the possible maximum sampling rate /dev/oprofile/hwsampling/hw_max_interval The patch splits the oprofile_timer_[init/exit] function so that it can be also called through user context (oprofilefs) to avoid kernel oops. Applied with following changes: * whitespace changes in Makefile and timer_int.c Signed-off-by: Mahesh Salgaonkar <mahesh@linux.vnet.ibm.com> Signed-off-by: Maran Pakkirisamy <maranp@linux.vnet.ibm.com> Signed-off-by: Heinz Graalfs <graalfs@linux.vnet.ibm.com> Acked-by: Heiko Carstens <heiko.carstens@de.ibm.com> Signed-off-by: Robert Richter <robert.richter@amd.com>
Diffstat (limited to 'drivers/oprofile/timer_int.c')
-rw-r--r--drivers/oprofile/timer_int.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/drivers/oprofile/timer_int.c b/drivers/oprofile/timer_int.c
index 010725117dbb..0099a458fd37 100644
--- a/drivers/oprofile/timer_int.c
+++ b/drivers/oprofile/timer_int.c
@@ -97,14 +97,13 @@ static struct notifier_block __refdata oprofile_cpu_notifier = {
97 .notifier_call = oprofile_cpu_notify, 97 .notifier_call = oprofile_cpu_notify,
98}; 98};
99 99
100int __init oprofile_timer_init(struct oprofile_operations *ops) 100int __oprofile_timer_init(struct oprofile_operations *ops)
101{ 101{
102 int rc; 102 int rc;
103 103
104 rc = register_hotcpu_notifier(&oprofile_cpu_notifier); 104 rc = register_hotcpu_notifier(&oprofile_cpu_notifier);
105 if (rc) 105 if (rc)
106 return rc; 106 return rc;
107 ops->create_files = NULL;
108 ops->setup = NULL; 107 ops->setup = NULL;
109 ops->shutdown = NULL; 108 ops->shutdown = NULL;
110 ops->start = oprofile_hrtimer_start; 109 ops->start = oprofile_hrtimer_start;
@@ -113,7 +112,17 @@ int __init oprofile_timer_init(struct oprofile_operations *ops)
113 return 0; 112 return 0;
114} 113}
115 114
116void __exit oprofile_timer_exit(void) 115int __init oprofile_timer_init(struct oprofile_operations *ops)
116{
117 return __oprofile_timer_init(ops);
118}
119
120void __oprofile_timer_exit(void)
117{ 121{
118 unregister_hotcpu_notifier(&oprofile_cpu_notifier); 122 unregister_hotcpu_notifier(&oprofile_cpu_notifier);
119} 123}
124
125void __exit oprofile_timer_exit(void)
126{
127 __oprofile_timer_exit();
128}