summaryrefslogtreecommitdiff
path: root/sys/arch/powerpc64/include
diff options
context:
space:
mode:
authorMark Kettenis <kettenis@cvs.openbsd.org>2021-05-11 18:21:13 +0000
committerMark Kettenis <kettenis@cvs.openbsd.org>2021-05-11 18:21:13 +0000
commitd4ebd089a736d3d7fce61ad4310ea4aa103ec97b (patch)
treee0fa474d43eb5c415becd5f19931d9852431cad9 /sys/arch/powerpc64/include
parent189993598dd586a857c1c46ad08d5f0c171564cc (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.h3
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);