|
@@ -153,7 +153,8 @@ struct drv_cmd {
|
|
|
u32 val;
|
|
|
};
|
|
|
|
|
|
-static long do_drv_read(void *_cmd)
|
|
|
+/* Called via smp_call_function_single(), on the target CPU */
|
|
|
+static void do_drv_read(void *_cmd)
|
|
|
{
|
|
|
struct drv_cmd *cmd = _cmd;
|
|
|
u32 h;
|
|
@@ -170,10 +171,10 @@ static long do_drv_read(void *_cmd)
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
- return 0;
|
|
|
}
|
|
|
|
|
|
-static long do_drv_write(void *_cmd)
|
|
|
+/* Called via smp_call_function_many(), on the target CPUs */
|
|
|
+static void do_drv_write(void *_cmd)
|
|
|
{
|
|
|
struct drv_cmd *cmd = _cmd;
|
|
|
u32 lo, hi;
|
|
@@ -192,23 +193,18 @@ static long do_drv_write(void *_cmd)
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
- return 0;
|
|
|
}
|
|
|
|
|
|
static void drv_read(struct drv_cmd *cmd)
|
|
|
{
|
|
|
cmd->val = 0;
|
|
|
|
|
|
- work_on_cpu(cpumask_any(cmd->mask), do_drv_read, cmd);
|
|
|
+ smp_call_function_single(cpumask_any(cmd->mask), do_drv_read, cmd, 1);
|
|
|
}
|
|
|
|
|
|
static void drv_write(struct drv_cmd *cmd)
|
|
|
{
|
|
|
- unsigned int i;
|
|
|
-
|
|
|
- for_each_cpu(i, cmd->mask) {
|
|
|
- work_on_cpu(i, do_drv_write, cmd);
|
|
|
- }
|
|
|
+ smp_call_function_many(cmd->mask, do_drv_write, cmd, 1);
|
|
|
}
|
|
|
|
|
|
static u32 get_cur_val(const struct cpumask *mask)
|
|
@@ -252,15 +248,13 @@ struct perf_pair {
|
|
|
} aperf, mperf;
|
|
|
};
|
|
|
|
|
|
-
|
|
|
-static long read_measured_perf_ctrs(void *_cur)
|
|
|
+/* Called via smp_call_function_single(), on the target CPU */
|
|
|
+static void read_measured_perf_ctrs(void *_cur)
|
|
|
{
|
|
|
struct perf_pair *cur = _cur;
|
|
|
|
|
|
rdmsr(MSR_IA32_APERF, cur->aperf.split.lo, cur->aperf.split.hi);
|
|
|
rdmsr(MSR_IA32_MPERF, cur->mperf.split.lo, cur->mperf.split.hi);
|
|
|
-
|
|
|
- return 0;
|
|
|
}
|
|
|
|
|
|
/*
|
|
@@ -283,7 +277,7 @@ static unsigned int get_measured_perf(struct cpufreq_policy *policy,
|
|
|
unsigned int perf_percent;
|
|
|
unsigned int retval;
|
|
|
|
|
|
- if (!work_on_cpu(cpu, read_measured_perf_ctrs, &readin))
|
|
|
+ if (smp_call_function_single(cpu, read_measured_perf_ctrs, &cur, 1))
|
|
|
return 0;
|
|
|
|
|
|
cur.aperf.whole = readin.aperf.whole -
|