tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: [PATCH v2 2/2] Implement PT_GETXSTATE and PT_SETXSTATE



On Wed, 2019-06-05 at 11:53 -0400, Christos Zoulas wrote:
> On Jun 5,  5:08pm, mgorny%gentoo.org@localhost (=?UTF-8?q?Micha=C5=82=20G=C3=B3rny?=) wrote:
> -- Subject: [PATCH v2 2/2] Implement PT_GETXSTATE and PT_SETXSTATE
> 
> > Introduce two new ptrace() requests: PT_GETXSTATE and PT_SETXSTATE,
> > that provide access to the extended (and extensible) set of FPU
> > registers on amd64 and i386.  At the moment, this covers AVX (YMM)
> > and AVX-512 (ZMM, opmask) registers.  It can be easily extended
> > to cover further register types without breaking backwards
> > compatibility.
> > 
> > PT_GETXSTATE issues the XSAVE instruction with all kernel-supported
> > extended components enabled.  The data is copied into 'struct xstate'
> > (which -- unlike the XSAVE area itself -- has stable format
> > and offsets).
> > 
> > PT_SETXSTATE issues the XRSTOR instruction to restore the register
> > values from user-provided 'struct xstate'.  The function replaces only
> > the specific XSAVE components that are listed in 'xs_xstate_bv' field,
> > making it possible to issue partial updates.
> > 
> > Both syscalls take a 'struct iovec' pointer rather than a direct
> > argument.  This requires the caller to explicitly specify the buffer
> > size.  As a result, existing code will continue to work correctly
> > when the structure is extended (performing partial reads/updates).
> 
> LGTM:
> 
> - There is no need for '} else {' after return

I presume you mean the one in ptrace_machdep_dorequest()?  I suppose it
was there (the code is based on xmmregs in i386) to clearly scope
variables.

I think having something like:

  if (foo)
    return x;
  {
    ...
  }

would be confusing (it would look like a misplaced '{').  Do you prefer
if I put the scope outside 'if', i.e. directly for 'case'?

> - Style says 'return a;' not 'return (a);'

Fixed.

> - While no early returns in 
> 	+       if (kl < 0)
> 	+               error = EINVAL;
>   and below?
> 

I suppose this avoids duplicating 'uio->uio_offset = 0'.  However, it's
also code copied from elsewhere so I'm not sure what the original
motivation was.

-- 
Best regards,
Michał Górny

Attachment: signature.asc
Description: This is a digitally signed message part



Home | Main Index | Thread Index | Old Index