On Wed, Jan 27, 2016 at 10:47:37PM +0000, Mathieu Desnoyers wrote:
> ----- On Jan 27, 2016, at 5:11 PM, Josh Triplett [email protected] wrote:
> 
> > On Wed, Jan 27, 2016 at 09:34:35PM +0000, Mathieu Desnoyers wrote:
> >> ----- On Jan 27, 2016, at 12:37 PM, Thomas Gleixner [email protected] 
> >> 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 
> >> >> > [email protected] 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.
> 
> Allright, will do! Thanks for the feedback :)

Please don't forget that you also need to implement compat handling since
the size of the pointer that is being pointed to is only four bytes for
compat tasks.

Reply via email to