On Mon, Aug 07, 2023 at 11:00:12PM +0100, Mark Brown wrote: > +static inline int copy_to_user_gcs(unsigned long __user *addr, > + unsigned long *val, > + int count) > +{ > + int ret = -EFAULT; > + int i; > + > + if (access_ok((char __user *)addr, count * sizeof(u64))) { > + uaccess_ttbr0_enable(); > + for (i = 0; i < count; i++) { > + ret = gcssttr(addr++, *val++); > + if (ret != 0) > + break; > + } > + uaccess_ttbr0_disable(); > + } > + > + return ret; > +} I think it makes more sense to have a put_user_gcs() of a single element. I've only seen it used with 2 elements in the signal code but we could as well do two put_user_gcs() calls (as we do for other stuff that we push to the signal frame). -- Catalin