Re: [PATCH 1/4] x86/fpu: Document signal frame portability
Andrei Vagin <[email protected]> Thu, 4 Jun 2026 15:32:10 -0700
| Newsgroups | dev.linux.lists.criu,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <CANaxB-xZUtTURdaSv8=bv-m4FakmtXxhdDU_fOy0=DBGqBG3Rg@mail.gmail.com> |
On Thu, Jun 4, 2026 at 10:04=E2=80=AFAM Andrei Vagin <[email protected]> wr= ote: > > The x86 signal frame is designed to be self-describing, with the > 'xstate_size' field in the software-reserved bytes indicating the actual > size of the context. This design is required for portability, allowing a > signal frame created on a system with a specific set of xstate features > to be restored on a machine with a different (larger) set of features. > > Document this contract in the uabi headers and Documentation/. This > requirement is critical for checkpoint/restore tools like CRIU, which > should be able to migrate processes across machines with heterogeneous > FPU capabilities. Note that portability is generally limited to CPUs > from the same vendor (e.g., Intel vs. AMD) due to potential differences > in xstate layouts. > > Signed-off-by: Andrei Vagin <[email protected]> > --- > Documentation/arch/x86/xstate.rst | 14 ++++++++++++-- > arch/x86/include/uapi/asm/sigcontext.h | 10 ++++++++++ > 2 files changed, 22 insertions(+), 2 deletions(-) > > diff --git a/Documentation/arch/x86/xstate.rst b/Documentation/arch/x86/x= state.rst > index cec05ac464c1..e27e779bae44 100644 > --- a/Documentation/arch/x86/xstate.rst > +++ b/Documentation/arch/x86/xstate.rst > @@ -170,5 +170,15 @@ are extended to control the guest permission: > is going to be rejected. So, the permission has to be requested before = the > first VCPU creation. > > -Note that some VMMs may have already established a set of supported stat= e > -components. These options are not presumed to support any particular VMM= . My bad, I accidentally deleted those lines. Please ignore that and review the other changes. > > +Signal Frame Portability > +------------------------ > + > +The signal frame is designed to be self-describing and portable. This is > +especially important for checkpoint/restore tools like CRIU, which may r= estore > +a process on a different host than where it was checkpointed. A signal f= rame > +created on a machine with fewer CPU features can be successfully restore= d on a > +machine with more CPU features. > + > +Note that signal frame portability is generally guaranteed only between = CPUs > +from the same vendor. Different vendors may use different offsets for th= e same > +xstate features in the xsave area, making frames incompatible between th= em. > diff --git a/arch/x86/include/uapi/asm/sigcontext.h b/arch/x86/include/ua= pi/asm/sigcontext.h > index d0d9b331d3a1..3ea63c29c3d7 100644 > --- a/arch/x86/include/uapi/asm/sigcontext.h > +++ b/arch/x86/include/uapi/asm/sigcontext.h > @@ -34,6 +34,16 @@ > * fpstate+extended_size-FP_XSTATE_MAGIC2_SIZE address) is set to > * FP_XSTATE_MAGIC2 so that you can sanity check your size calculations.= ) > * > + * The xstate_size field indicates the actual size of the xstate context > + * (including the fxregs_state and xstate_header). This size is used in > + * conjunction with the fpstate pointer to locate FP_XSTATE_MAGIC2. Thi= s makes > + * the signal frame self-describing and portable: a signal frame created= on a > + * machine with a certain set of xstate features can be restored on a ma= chine > + * with a different (larger) set of features, as long as the latter supp= orts > + * all features present in the frame. Note that this portability is gene= rally > + * limited to CPUs of the same vendor, as different vendors may use diff= erent > + * xstate layouts. > + * > * This extended area typically grows with newer CPUs that have larger a= nd > * larger XSAVE areas. > */ > -- > 2.54.0.1032.g2f8565e1d1-goog > >