powerpc/32s: Don't flush all TLBs when flushing one page
When flushing any memory range, the flushing function flushes all TLBs. When (start) and (end - 1) are in the same memory page, flush that page instead. Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr> Reviewed-by: Segher Boessenkool <segher@kernel.crashing.org> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/b30b2eae6960502eaf0d9e36c60820b839693c33.1580542939.git.christophe.leroy@c-s.fr
This commit is contained in:
Родитель
d8e73458f3
Коммит
030e347430
|
@ -79,11 +79,14 @@ static void flush_range(struct mm_struct *mm, unsigned long start,
|
|||
int count;
|
||||
unsigned int ctx = mm->context.id;
|
||||
|
||||
start &= PAGE_MASK;
|
||||
if (!Hash) {
|
||||
_tlbia();
|
||||
if (end - start <= PAGE_SIZE)
|
||||
_tlbie(start);
|
||||
else
|
||||
_tlbia();
|
||||
return;
|
||||
}
|
||||
start &= PAGE_MASK;
|
||||
if (start >= end)
|
||||
return;
|
||||
end = (end - 1) | ~PAGE_MASK;
|
||||
|
|
Загрузка…
Ссылка в новой задаче