On Tue, Nov 05, 2024 at 03:18:33PM +0000, Mark Rutland wrote: > I don't think that the foreign / non-foreign cases are equivalent. In > the foreign case we clear the entire fpsimd_state structure, i.e. all > of: You're right, they're not - thanks for spotting this. > AFAICT either: > (a) Our intended ABI is that signal handlers are entered as-if an SMSTOP > is executed to exit streaming mode and disable ZA storage. > > In this case we'll need a more elaborate sequence here to simulate > that effect. That's the intention, so we do need to just clear the vregs instead of the whole user_fpsimd_state and add clearing of FPMR. > ... the description of FPMR (which is not in the latest ARM ARM) says: > | On entry to or exit from Streaming SVE mode, FPMR is set to 0. > ... so we'd need code to clobber that. Right, that was missed with the addition of FPMR support. We'll have the same thing in ptrace streaming mode enter/exits, FPCR and FPSR should be better there as in most cases register state is provided when changing mode. > Our documentation in Documentation/arch/arm64/sme.rst says: > | Signal handlers are invoked with streaming mode and ZA disabled. > ... and doesn't mention FPCR/FPMR/FPSR, so we could go either way, > though I suspect we intended case (a) ? Yes. The the intended goal is literally just that, but if we accomplish it by issuing a SMSTOP in the live registers case (which is the only reasonable implementation) then we should obviously behave the same in the live memory case. I'll add a patch which makes this explicit in the documentation.
Attachment:
signature.asc
Description: PGP signature