On Tue, Aug 20, 2024 at 06:56:19PM +0100, Mark Brown wrote: > On Mon, Aug 19, 2024 at 04:44:52PM +0100, Mark Brown wrote: > > On Mon, Aug 19, 2024 at 12:46:13PM +0100, Catalin Marinas wrote: > > > On Thu, Aug 01, 2024 at 01:06:46PM +0100, Mark Brown wrote: > > > > > + /* > > > > + * Ensure that GCS changes are observable by/from other PEs in > > > > + * case of migration. > > > > + */ > > > > + if (task_gcs_el0_enabled(current) || task_gcs_el0_enabled(next)) > > > > + gcsb_dsync(); > > > > Could we do the sysreg writing under this 'if' block? If no app is using > > > GCS (which would be the case for a while), it looks like unnecessary > > > sysreg accesses. > > > Yes, that should be fine I think. > > I forgot when writing the above that we always allow reads from > GCSPR_EL0 in order to avoid corner cases for unwinders in the case of > asynchronous disable. I'd expect that to be cheap to access though. But then gcs_preserve_current_state() doesn't save the GCSPR_EL0 value if the shadow stack was disabled. At the subsequent switch to this task, we write some stale value. -- Catalin