diff options
author | Christophe Leroy <christophe.leroy@c-s.fr> | 2019-09-16 20:25:39 +0000 |
---|---|---|
committer | Michael Ellerman <mpe@ellerman.id.au> | 2019-11-19 19:38:38 +1100 |
commit | cbcaff7d27ad5c5d2c2db113ec489be88adb815a (patch) | |
tree | e32477e84c50af636be70fd6f1ea2160dc57892b | |
parent | d538aadc2718a95bfd80095c66ea814824535b34 (diff) |
powerpc/32s: automatically allocate BAT in setbat()
If no BAT is given to setbat(), select an available BAT.
Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/a212bd36fbd6179e0929b6c727febc35132ac25c.1568665466.git.christophe.leroy@c-s.fr
-rw-r--r-- | arch/powerpc/mm/book3s32/mmu.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/arch/powerpc/mm/book3s32/mmu.c b/arch/powerpc/mm/book3s32/mmu.c index 84d5fab94f8f..69b2419accef 100644 --- a/arch/powerpc/mm/book3s32/mmu.c +++ b/arch/powerpc/mm/book3s32/mmu.c @@ -251,9 +251,18 @@ void __init setbat(int index, unsigned long virt, phys_addr_t phys, { unsigned int bl; int wimgxpp; - struct ppc_bat *bat = BATS[index]; + struct ppc_bat *bat; unsigned long flags = pgprot_val(prot); + if (index == -1) + index = find_free_bat(); + if (index == -1) { + pr_err("%s: no BAT available for mapping 0x%llx\n", __func__, + (unsigned long long)phys); + return; + } + bat = BATS[index]; + if ((flags & _PAGE_NO_CACHE) || (cpu_has_feature(CPU_FTR_NEED_COHERENT) == 0)) flags &= ~_PAGE_COHERENT; |