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

From: Josh Triplett
Date: Wed Jan 27 2016 - 17:11:58 EST


On Wed, Jan 27, 2016 at 09:34:35PM +0000, Mathieu Desnoyers wrote:
> ----- On Jan 27, 2016, at 12:37 PM, Thomas Gleixner tglx@xxxxxxxxxxxxx wrote:
>
> > On Wed, 27 Jan 2016, Thomas Gleixner wrote:
> >
> >> On Wed, 27 Jan 2016, Mathieu Desnoyers wrote:
> >> > ----- On Jan 27, 2016, at 12:22 PM, Thomas Gleixner tglx@xxxxxxxxxxxxx wrote:
> >> > 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 **".
> >>
> >> Well, you can't change the types depending on the opcode, so you need to stick
> >> with **.
> >
> > Alternatively you make it:
> >
> > (opcode, *newptr, **oldptr, flags);
>
> I'm tempted to stick to (opcode, **ptr, flags), because
> other syscalls that have "*newptr", "**oldptr"
> typically have them because they save the current state
> into oldptr, and set the new state, which is really
> not the case here. To eliminate any risk of confusion,
> I am tempted to keep a single "**ptr".
>
> Unless someone has a better idea...

Either that or you could define it as "void *" and interpret it based on
flags, but that seems unfortunate; let's not imitate ioctl-style
typeless parameters. I'd stick with the double pointer and the current
behavior.