diff options
author | Mark Kettenis <kettenis@cvs.openbsd.org> | 2021-05-11 18:21:13 +0000 |
---|---|---|
committer | Mark Kettenis <kettenis@cvs.openbsd.org> | 2021-05-11 18:21:13 +0000 |
commit | d4ebd089a736d3d7fce61ad4310ea4aa103ec97b (patch) | |
tree | e0fa474d43eb5c415becd5f19931d9852431cad9 /sys/arch/powerpc64/include | |
parent | 189993598dd586a857c1c46ad08d5f0c171564cc (diff) |
A Data Segment Interrupt does not indicate whether it was the result
of a read or a write fault. Unfortunately that means we can't call
uvm_fault(), as we have to pass the right access_type. In particular,
passing PROT_READ for write access on a write-only page will fail.
Fix this issue by inserting an appropriate SLB entry when a mapping
exists at the fault address. A subsequent Data Storage Interrupt
will call uvm_fault() to insert a mapping for the page into the
page tables.
Fixes the sys/kern/fork-exit regress test.
Debugging done by bluhm@ and patrick@
ok bluhm@
Diffstat (limited to 'sys/arch/powerpc64/include')
-rw-r--r-- | sys/arch/powerpc64/include/pmap.h | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/sys/arch/powerpc64/include/pmap.h b/sys/arch/powerpc64/include/pmap.h index 06d44eddb1a..a531278411b 100644 --- a/sys/arch/powerpc64/include/pmap.h +++ b/sys/arch/powerpc64/include/pmap.h @@ -1,4 +1,4 @@ -/* $OpenBSD: pmap.h,v 1.15 2020/08/25 17:49:58 kettenis Exp $ */ +/* $OpenBSD: pmap.h,v 1.16 2021/05/11 18:21:12 kettenis Exp $ */ /* * Copyright (c) 2020 Mark Kettenis <kettenis@openbsd.org> @@ -68,6 +68,7 @@ void pmap_bootstrap(void); void pmap_bootstrap_cpu(void); int pmap_slbd_fault(pmap_t, vaddr_t); +int pmap_slbd_enter(pmap_t, vaddr_t); int pmap_set_user_slb(pmap_t, vaddr_t, vaddr_t *, vsize_t *); void pmap_clear_user_slb(void); void pmap_unset_user_slb(void); |