The 03/11/2022 18:42, Mark Brown wrote: > On Fri, Mar 11, 2022 at 05:21:21PM +0000, Szabolcs Nagy wrote: > > The 02/25/2022 16:58, Mark Brown wrote: > > > +* On creation fork() or clone() the newly created process will have PSTATE.SM > > > + and PSTATE.ZA cleared. > > > is there a reason why fork() clears ZA? > > > i think this is a minor issue, but the usual expectation is that > > on thread creation thread local state is reset in the child, but > > in a forked child the state is the same as in the parent (where > > ZA is preserved according to the first rule). > > It was partly consistency with SM and the SVE state (though that is also > covered by just being in a system call unlike ZA) and partly concerns > about what happens if the fork() happens in library code which isn't SME > aware - it would end up carrying around a copy of ZA with associated > power and performance impacts if it doesn't exec(). Overall it seemed > like there would to be less potential for unpleasant surprises if we > consistently discard the data. > > That's not a *super* strongly held opinion though, we could switch to > preserving whenever we preserve TPIDR2. i think it's slightly better to treat ZA like TPIDR2, so only clear if CLONE_SETTLS is set. otherwise in principle the child can return to the frame where ZA was used and expect it to work (it's hard to come up with a reason why would some code do that, but this is valid in a single-threaded fork child). sorry for not deciding this earlier. _______________________________________________ kvmarm mailing list kvmarm@xxxxxxxxxxxxxxxxxxxxx https://lists.cs.columbia.edu/mailman/listinfo/kvmarm