ARC: mm: tlb flush optim: elide repeated uTLB invalidate in loop
authorVineet Gupta <vgupta@synopsys.com>
Sat, 17 Oct 2015 11:24:14 +0000 (16:54 +0530)
committerVineet Gupta <vgupta@synopsys.com>
Mon, 28 Oct 2019 19:12:32 +0000 (12:12 -0700)
commit1355ea2e603d76af6b1381873e37b1aec22a18a0
tree54d0bd6bbd412d2bd8e393554db413c1baef0a04
parentad4c40e937f6d6a08a579c4a78206039618426b7
ARC: mm: tlb flush optim: elide repeated uTLB invalidate in loop

The unconditional full TLB flush (on say ASID rollover) iterates over each
entry and uses TLBWrite to zero it out. TLBWrite by design also invalidates
the uTLBs thus we end up invalidating it as many times as numbe rof
entries (512 or 1k)

Optimize this by using a weaker TLBWriteNI cmd in loop, which doesn't
tinker with uTLBs and an explicit one time IVUTLB, outside the loop to
invalidate them all once.

And given the optimiztion, the IVUTLB is now needed on MMUv4 too where
the uTLBs and JTLBs are otherwise coherent given the TLBInsertEntry /
TLBDeleteEntry commands

Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
arch/arc/mm/tlb.c