On Wed, 27 Jan 2016, Mathieu Desnoyers wrote:
+/*
+ * sys_getcpu_cache - setup getcpu cache for caller thread
+ */
+SYSCALL_DEFINE2(getcpu_cache, int32_t __user **, cpu_cachep, int, flags)
+{
+ int32_t __user *cpu_cache;
+
+ if (unlikely(flags))
+ return -EINVAL;
+ /* Check if cpu_cache is already registered. */
+ if (current->cpu_cache) {
+ if (put_user(current->cpu_cache, cpu_cachep))
+ return -EFAULT;
+ return 0;
+ }
This is really odd. How is the caller supposed to differentiate between:
1) Get the installed cpucache pointer
2) Set the cpucache pointer
We really want clearly seperated functionality here.
getcpu_cache(ptr, GET_CACHEP);
and
getcpu_cache(ptr, SET_CACHEP);
Returns -EBUSY if current->cpu_cache is already set, except we allow
replacing the pointer.
Thanks,
tglx