Although I guess it's not totally explicit, I've interpretted that as saying that conflicting TLB entries can only arise for the IA range for which the contiguous bits have been modified in the translation tables. Given we are only fiddling with the contiguous bits for user space mappings in this way, that's why I'm asserting we will only get a conflict abort for user space mappings... assuming the absence of kernel bugs, anyway... > > But we don't know for sure what caused this conflict by the time we > arrive in the handler. It could equally be because we have a glaring > bug somewhere on the kernel side, even if you are *now* only concerned > with userspace. OK I see what you are saying; previously a conflict abort would have led to calling do_bad(), which returns 1, which causes do_mem_abort() to either kill the kernel or the process depending on the origin of the abort. (although if it came from kernel due to bug, we're just hoping that the conflict doesn't affect the path through the handler). With this change, we always assume we can fix it with the TLBI. How about this change to ensure we still die for issues originating from the kernel? if (!user_mode(regs) || !system_supports_bbml2()) return do_bad(far, esr, regs); > > If anything, this should absolutely check for FAR_EL1 and assert that > this is indeed caused by such change. I'm not really sure how we would check this reliably? Without patch 5, the problem is somewhat constrained; we could have as many changes in flight as there are CPUs so we could keep a list of all the {mm_struct, VA-range} that are being modified. But if patch 5 is confirmed to be architecturally sound, then there is no "terminating tlbi" so there is no bound on the set of {mm_struct, VA-range}'s that could legitimately cause a conflict abort. Thanks, Ryan > > Thanks, > > M. >