Re: [RFC PATCH v2 1/3] getcpu_cache system call: cache CPU number of running thread

From: Thomas Gleixner
Date: Wed Jan 27 2016 - 12:23:18 EST


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