On Thu, Dec 19, 2019 at 05:48:53PM -0800, Peter Collingbourne wrote: > On Thu, Dec 19, 2019 at 12:32 PM Peter Collingbourne <pcc@xxxxxxxxxx> wrote: > > On Wed, Dec 11, 2019 at 10:45 AM Catalin Marinas > > <catalin.marinas@xxxxxxx> wrote: > > > + if (current->thread.sctlr_tcf0 != next->thread.sctlr_tcf0) > > > + update_sctlr_el1_tcf0(next->thread.sctlr_tcf0); > > > > I don't entirely understand why yet, but I've found that this check is > > insufficient for ensuring consistency between SCTLR_EL1.TCF0 and > > sctlr_tcf0. In my Android test environment with some processes having > > sctlr_tcf0=SCTLR_EL1_TCF0_SYNC and others having sctlr_tcf0=0, I am > > seeing intermittent tag failures coming from the sctlr_tcf0=0 > > processes. With this patch: [...] > > Since sysreg_clear_set only sets the sysreg if it ended up changing, I > > wouldn't expect this to cause a significant performance hit unless > > just reading SCTLR_EL1 is expensive. That being said, if the > > inconsistency is indicative of a deeper problem, we should probably > > address that. > > I tracked it down to the flush_mte_state() function setting sctlr_tcf0 but > failing to update SCTLR_EL1.TCF0. With this patch I am not seeing any more > inconsistencies. Thanks Peter. I folded in your fix. -- Catalin