Thread (27 messages) flat view 27 messages, 7 authors, 2016-01-28

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

From: Mathieu Desnoyers <hidden>
Date: 2016-01-27 17:32:04
Also in: lkml

----- On Jan 27, 2016, at 12:22 PM, Thomas Gleixner tglx-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org wrote:
On Wed, 27 Jan 2016, Mathieu Desnoyers wrote:
quoted
+/*
+ * 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.
Sounds fair. What is the recommended typing for "ptr" then ?
uint32_t ** or uint32_t * ?

It would be expected to pass a "uint32_t *" for the set
operation, but the "get" operation requires a "uint32_t **".

Also, I'd be tempted to put the GET/SET operation selector as
a first parameter.

Thanks,

Mathieu
Thanks,

	tglx
-- 
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help