summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorvisa <visa@openbsd.org>2019-07-31 12:38:04 +0000
committervisa <visa@openbsd.org>2019-07-31 12:38:04 +0000
commit0b81d999103793343967bd0686f2a61f77585eb2 (patch)
tree2fd00b822f6c6279e40d9a31ef85bdd0f2c1ba25
parentFix errors while building bsd.rd & minirootXX.fs on luna88k that is (diff)
downloadwireguard-openbsd-0b81d999103793343967bd0686f2a61f77585eb2.tar.xz
wireguard-openbsd-0b81d999103793343967bd0686f2a61f77585eb2.zip
Fix kmem access on octeon. Currently, mem_layout lists segments that
were free after the kernel was loaded. The memory occupied by the kernel image is not included. To let libkvm access the image through /dev/kmem, return true from is_memory_range() if the physical address is within the kernel.
-rw-r--r--sys/arch/octeon/octeon/machdep.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/sys/arch/octeon/octeon/machdep.c b/sys/arch/octeon/octeon/machdep.c
index cd6914708a2..f67a139bdc4 100644
--- a/sys/arch/octeon/octeon/machdep.c
+++ b/sys/arch/octeon/octeon/machdep.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: machdep.c,v 1.116 2019/07/17 14:47:42 visa Exp $ */
+/* $OpenBSD: machdep.c,v 1.117 2019/07/31 12:38:04 visa Exp $ */
/*
* Copyright (c) 2009, 2010 Miodrag Vallat.
@@ -903,6 +903,7 @@ dumpsys()
boolean_t
is_memory_range(paddr_t pa, psize_t len, psize_t limit)
{
+ extern char start[];
struct phys_mem_desc *seg;
uint64_t fp, lp;
int i;
@@ -913,6 +914,11 @@ is_memory_range(paddr_t pa, psize_t len, psize_t limit)
if (limit != 0 && lp > atop(limit))
return FALSE;
+ /* The kernel is linked in CKSEG0. */
+ if (fp >= atop(trunc_page(CKSEG0_TO_PHYS((vaddr_t)start))) &&
+ lp <= atop(round_page(CKSEG0_TO_PHYS((vaddr_t)ekern))))
+ return TRUE;
+
for (i = 0, seg = mem_layout; i < MAXMEMSEGS; i++, seg++)
if (fp >= seg->mem_first_page && lp <= seg->mem_last_page)
return TRUE;