diff options
author | Robert Richter <robert.richter@amd.com> | 2010-10-04 21:09:36 +0200 |
---|---|---|
committer | Robert Richter <robert.richter@amd.com> | 2010-10-12 17:25:06 +0200 |
commit | 7df01d96b295e400167e78061b81d4c91630b12d (patch) | |
tree | 52782cc1d78c24030d627f719cdaa29846c42efb /drivers/oprofile/oprofile_files.c | |
parent | 0361e02342f60b64a7075755d5851ed4e6f98c7d (diff) | |
download | linux-stable-7df01d96b295e400167e78061b81d4c91630b12d.tar.gz linux-stable-7df01d96b295e400167e78061b81d4c91630b12d.tar.bz2 linux-stable-7df01d96b295e400167e78061b81d4c91630b12d.zip |
oprofile: disable write access to oprofilefs while profiler is running
Oprofile counters are setup when profiling is disabled. Thus, writing
to oprofilefs has no immediate effect. Changes are updated only after
oprofile is reenabled.
To keep userland and kernel states synchronized, we now allow
configuration of oprofile only if profiling is disabled. In this case
it checks if the profiler is running and then disables write access to
oprofilefs by returning -EBUSY. The change should be backward
compatible with current oprofile userland daemon.
Acked-by: Maynard Johnson <maynardj@us.ibm.com>
Cc: William Cohen <wcohen@redhat.com>
Cc: Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
Signed-off-by: Robert Richter <robert.richter@amd.com>
Diffstat (limited to 'drivers/oprofile/oprofile_files.c')
-rw-r--r-- | drivers/oprofile/oprofile_files.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/oprofile/oprofile_files.c b/drivers/oprofile/oprofile_files.c index bbd7516e0869..ccf099e684a4 100644 --- a/drivers/oprofile/oprofile_files.c +++ b/drivers/oprofile/oprofile_files.c @@ -79,14 +79,17 @@ static ssize_t depth_write(struct file *file, char const __user *buf, size_t cou if (*offset) return -EINVAL; + if (!oprofile_ops.backtrace) + return -EINVAL; + retval = oprofilefs_ulong_from_user(&val, buf, count); if (retval) return retval; - retval = oprofile_set_backtrace(val); - + retval = oprofile_set_ulong(&oprofile_backtrace_depth, val); if (retval) return retval; + return count; } |