diff options
| -rw-r--r-- | drivers/oprofile/oprof.c | 21 | ||||
| -rw-r--r-- | drivers/oprofile/oprof.h | 2 | ||||
| -rw-r--r-- | drivers/oprofile/oprofile_files.c | 7 | ||||
| -rw-r--r-- | drivers/oprofile/oprofilefs.c | 8 | 
4 files changed, 18 insertions, 20 deletions
| diff --git a/drivers/oprofile/oprof.c b/drivers/oprofile/oprof.c index b4a685719dba..f9bda64fcd1b 100644 --- a/drivers/oprofile/oprof.c +++ b/drivers/oprofile/oprof.c | |||
| @@ -225,26 +225,17 @@ post_sync: | |||
| 225 | mutex_unlock(&start_mutex); | 225 | mutex_unlock(&start_mutex); | 
| 226 | } | 226 | } | 
| 227 | 227 | ||
| 228 | int oprofile_set_backtrace(unsigned long val) | 228 | int oprofile_set_ulong(unsigned long *addr, unsigned long val) | 
| 229 | { | 229 | { | 
| 230 | int err = 0; | 230 | int err = -EBUSY; | 
| 231 | 231 | ||
| 232 | mutex_lock(&start_mutex); | 232 | mutex_lock(&start_mutex); | 
| 233 | 233 | if (!oprofile_started) { | |
| 234 | if (oprofile_started) { | 234 | *addr = val; | 
| 235 | err = -EBUSY; | 235 | err = 0; | 
| 236 | goto out; | ||
| 237 | } | 236 | } | 
| 238 | |||
| 239 | if (!oprofile_ops.backtrace) { | ||
| 240 | err = -EINVAL; | ||
| 241 | goto out; | ||
| 242 | } | ||
| 243 | |||
| 244 | oprofile_backtrace_depth = val; | ||
| 245 | |||
| 246 | out: | ||
| 247 | mutex_unlock(&start_mutex); | 237 | mutex_unlock(&start_mutex); | 
| 238 | |||
| 248 | return err; | 239 | return err; | 
| 249 | } | 240 | } | 
| 250 | 241 | ||
| diff --git a/drivers/oprofile/oprof.h b/drivers/oprofile/oprof.h index 47e12cb4ee8b..177b73de5e5f 100644 --- a/drivers/oprofile/oprof.h +++ b/drivers/oprofile/oprof.h | |||
| @@ -37,7 +37,7 @@ void oprofile_create_files(struct super_block *sb, struct dentry *root); | |||
| 37 | int oprofile_timer_init(struct oprofile_operations *ops); | 37 | int oprofile_timer_init(struct oprofile_operations *ops); | 
| 38 | void oprofile_timer_exit(void); | 38 | void oprofile_timer_exit(void); | 
| 39 | 39 | ||
| 40 | int oprofile_set_backtrace(unsigned long depth); | 40 | int oprofile_set_ulong(unsigned long *addr, unsigned long val); | 
| 41 | int oprofile_set_timeout(unsigned long time); | 41 | int oprofile_set_timeout(unsigned long time); | 
| 42 | 42 | ||
| 43 | #endif /* OPROF_H */ | 43 | #endif /* OPROF_H */ | 
| 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 | |||
| 79 | if (*offset) | 79 | if (*offset) | 
| 80 | return -EINVAL; | 80 | return -EINVAL; | 
| 81 | 81 | ||
| 82 | if (!oprofile_ops.backtrace) | ||
| 83 | return -EINVAL; | ||
| 84 | |||
| 82 | retval = oprofilefs_ulong_from_user(&val, buf, count); | 85 | retval = oprofilefs_ulong_from_user(&val, buf, count); | 
| 83 | if (retval) | 86 | if (retval) | 
| 84 | return retval; | 87 | return retval; | 
| 85 | 88 | ||
| 86 | retval = oprofile_set_backtrace(val); | 89 | retval = oprofile_set_ulong(&oprofile_backtrace_depth, val); | 
| 87 | |||
| 88 | if (retval) | 90 | if (retval) | 
| 89 | return retval; | 91 | return retval; | 
| 92 | |||
| 90 | return count; | 93 | return count; | 
| 91 | } | 94 | } | 
| 92 | 95 | ||
| diff --git a/drivers/oprofile/oprofilefs.c b/drivers/oprofile/oprofilefs.c index 789a1a857ddf..1944621930d9 100644 --- a/drivers/oprofile/oprofilefs.c +++ b/drivers/oprofile/oprofilefs.c | |||
| @@ -91,16 +91,20 @@ static ssize_t ulong_read_file(struct file *file, char __user *buf, size_t count | |||
| 91 | 91 | ||
| 92 | static ssize_t ulong_write_file(struct file *file, char const __user *buf, size_t count, loff_t *offset) | 92 | static ssize_t ulong_write_file(struct file *file, char const __user *buf, size_t count, loff_t *offset) | 
| 93 | { | 93 | { | 
| 94 | unsigned long *value = file->private_data; | 94 | unsigned long value; | 
| 95 | int retval; | 95 | int retval; | 
| 96 | 96 | ||
| 97 | if (*offset) | 97 | if (*offset) | 
| 98 | return -EINVAL; | 98 | return -EINVAL; | 
| 99 | 99 | ||
| 100 | retval = oprofilefs_ulong_from_user(value, buf, count); | 100 | retval = oprofilefs_ulong_from_user(&value, buf, count); | 
| 101 | if (retval) | ||
| 102 | return retval; | ||
| 101 | 103 | ||
| 104 | retval = oprofile_set_ulong(file->private_data, value); | ||
| 102 | if (retval) | 105 | if (retval) | 
| 103 | return retval; | 106 | return retval; | 
| 107 | |||
| 104 | return count; | 108 | return count; | 
| 105 | } | 109 | } | 
| 106 | 110 | ||
