linux/arch
Helge Deller b7795074a0 parisc: Optimize per-pagetable spinlocks
On parisc a spinlock is stored in the next page behind the pgd which
protects against parallel accesses to the pgd. That's why one additional
page (PGD_ALLOC_ORDER) is allocated for the pgd.

Matthew Wilcox suggested that we instead should use a pointer in the
struct page table for this spinlock and noted, that the comments for the
PGD_ORDER and PMD_ORDER defines were wrong.

Both suggestions are addressed with this patch. Instead of having an own
spinlock to protect the pgd, we now switch to use the existing
page_table_lock.  Additionally, beside loading the pgd into cr25 in
switch_mm_irqs_off(), the physical address of this lock is loaded into
cr28 (tr4), so that we can avoid implementing a complicated lookup in
assembly for this lock in the TLB fault handlers.

The existing Hybrid L2/L3 page table scheme (where the pmd is adjacent
to the pgd) has been dropped with this patch.

Remove the locking in set_pte() and the huge-page pte functions too.
They trigger a spinlock recursion on 32bit machines and seem unnecessary.

Suggested-by: Matthew Wilcox <willy@infradead.org>
Fixes: b37d1c1898 ("parisc: Use per-pagetable spinlock")
Signed-off-by: John David Anglin <dave.anglin@bell.net>
Signed-off-by: Helge Deller <deller@gmx.de>
2021-02-12 16:39:42 +01:00
..
alpha local64.h: make <asm/local64.h> mandatory 2020-12-29 15:36:49 -08:00
arc ARC: [hsdk]: Enable FPU_SAVE_RESTORE 2021-01-08 13:46:58 -08:00
arm ARM fixes for 5.11: 2021-02-06 15:07:51 -08:00
arm64 x86 has lots of small bugfixes, mostly one liners. It's quite late in 2021-02-05 10:03:01 -08:00
c6x tif-task_work.arch-2020-12-14 2020-12-16 12:33:35 -08:00
csky local64.h: make <asm/local64.h> mandatory 2020-12-29 15:36:49 -08:00
h8300 local64.h: make <asm/local64.h> mandatory 2020-12-29 15:36:49 -08:00
hexagon local64.h: make <asm/local64.h> mandatory 2020-12-29 15:36:49 -08:00
ia64 Kbuild fixes for v5.11 (2nd) 2021-02-07 09:37:37 -08:00
m68k local64.h: make <asm/local64.h> mandatory 2020-12-29 15:36:49 -08:00
microblaze local64.h: make <asm/local64.h> mandatory 2020-12-29 15:36:49 -08:00
mips mips/mm/highmem: use set_pte() for kmap_local() 2021-01-24 10:34:52 -08:00
nds32 local64.h: make <asm/local64.h> mandatory 2020-12-29 15:36:49 -08:00
nios2 tif-task_work.arch-2020-12-14 2020-12-16 12:33:35 -08:00
openrisc openrisc: io: Add missing __iomem annotation to iounmap() 2021-01-20 06:14:26 +09:00
parisc parisc: Optimize per-pagetable spinlocks 2021-02-12 16:39:42 +01:00
powerpc powerpc fixes for 5.11 #7 2021-02-06 15:14:39 -08:00
riscv RISC-V: Define MAXPHYSMEM_1GB only for RV32 2021-02-02 18:36:42 -08:00
s390 s390: uv: Fix sysfs max number of VCPUs reporting 2021-01-27 13:00:04 +01:00
sh Cleanup and warning fixes. 2021-01-24 13:52:02 -08:00
sparc sparc/mm/highmem: flush cache and TLB 2021-01-24 10:34:52 -08:00
um um: time: fix initialization in time-travel mode 2021-01-26 22:11:38 +01:00
x86 - For syscall user dispatch, separate ptctl operation from syscall 2021-02-07 10:16:24 -08:00
xtensa local64.h: make <asm/local64.h> mandatory 2020-12-29 15:36:49 -08:00
.gitignore
Kconfig fanotify: Fix sys_fanotify_mark() on native x86-32 2020-12-28 11:58:59 +01:00