return 0;
}
-static int set_parameters(struct quadd_parameters *p, uid_t *debug_app_uid)
+static int
+validate_freq(unsigned int freq)
+{
+ if (capable(CAP_SYS_ADMIN))
+ return freq >= 100 && freq <= 100000;
+ else
+ return freq == 100 || freq == 1000 || freq == 10000;
+}
+
+static int
+set_parameters(struct quadd_parameters *p, uid_t *debug_app_uid)
{
int i, err;
int pmu_events_id[QUADD_MAX_COUNTERS];
struct task_struct *task;
unsigned int extra;
- if (ctx.param.freq != 100 && ctx.param.freq != 1000 &&
- ctx.param.freq != 10000)
+ if (!validate_freq(p->freq)) {
+ pr_err("%s: incorrect frequency: %u", __func__, p->freq);
return -EINVAL;
+ }
ctx.param.freq = p->freq;
ctx.param.ma_freq = p->ma_freq;
if (extra & QUADD_PARAM_EXTRA_BT_FP)
pr_info("unwinding: frame pointers\n");
+ if (extra & QUADD_PARAM_EXTRA_BT_MIXED)
+ pr_info("unwinding: mixed mode\n");
+
quadd_unwind_start(task);
pr_info("New parameters have been applied\n");
#ifndef __QUADD_VERSION_H
#define __QUADD_VERSION_H
-#define QUADD_MODULE_VERSION "1.66"
+#define QUADD_MODULE_VERSION "1.67"
#define QUADD_MODULE_BRANCH "Dev"
#endif /* __QUADD_VERSION_H */