Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/arch Merge i386 and amd64 version of db_memrw.c.
details: https://anonhg.NetBSD.org/src/rev/bdef05118bab
branches: trunk
changeset: 779170:bdef05118bab
user: jym <jym%NetBSD.org@localhost>
date: Mon May 07 17:45:28 2012 +0000
description:
Merge i386 and amd64 version of db_memrw.c.
Use this opportunity to skip calculating the VA of the page. Let the CPU
deal with the invalidation itself through invlpg + destination address to
avoid converting between canonical/non canonical forms.
diffstat:
sys/arch/amd64/amd64/db_memrw.c | 203 ---------------------------------------
sys/arch/amd64/conf/files.amd64 | 3 +-
sys/arch/i386/conf/files.i386 | 3 +-
sys/arch/i386/i386/db_memrw.c | 207 ----------------------------------------
sys/arch/x86/conf/files.x86 | 3 +-
sys/arch/x86/x86/db_memrw.c | 207 ++++++++++++++++++++++++++++++++++++++++
sys/arch/xen/conf/files.xen | 5 +-
7 files changed, 213 insertions(+), 418 deletions(-)
diffs (truncated from 713 to 300 lines):
diff -r 34955e8c38cb -r bdef05118bab sys/arch/amd64/amd64/db_memrw.c
--- a/sys/arch/amd64/amd64/db_memrw.c Mon May 07 16:16:44 2012 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,203 +0,0 @@
-/* $NetBSD: db_memrw.c,v 1.11 2012/05/07 12:20:27 jym Exp $ */
-
-/*-
- * Copyright (c) 1996, 2000 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Gordon W. Ross and Jason R. Thorpe.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-/*
- * Interface to the debugger for virtual memory read/write.
- * This file is shared by DDB and KGDB, and must work even
- * when only KGDB is included (thus no db_printf calls).
- *
- * To write in the text segment, we have to first make
- * the page writable, do the write, then restore the PTE.
- * For writes outside the text segment, and all reads,
- * just do the access -- if it causes a fault, the debugger
- * will recover with a longjmp to an appropriate place.
- *
- * ALERT! If you want to access device registers with a
- * specific size, then the read/write functions have to
- * make sure to do the correct sized pointer access.
- *
- * Modified for i386 from hp300 version by
- * Jason R. Thorpe <thorpej%zembu.com@localhost>.
- *
- * Basic copy to amd64 by fvdl.
- */
-
-#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: db_memrw.c,v 1.11 2012/05/07 12:20:27 jym Exp $");
-
-#include <sys/param.h>
-#include <sys/proc.h>
-#include <sys/systm.h>
-
-#include <machine/db_machdep.h>
-
-#include <ddb/db_access.h>
-
-/*
- * Read bytes from kernel address space for debugger.
- */
-void
-db_read_bytes(vaddr_t addr, size_t size, char *data)
-{
- char *src;
-
- src = (char *)addr;
-
- if (size == 8) {
- *((long *)data) = *((long *)src);
- return;
- }
-
- if (size == 4) {
- *((int *)data) = *((int *)src);
- return;
- }
-
- if (size == 2) {
- *((short *)data) = *((short *)src);
- return;
- }
-
- while (size-- > 0)
- *data++ = *src++;
-}
-
-/*
- * Write bytes somewhere in the kernel text. Make the text
- * pages writable temporarily.
- */
-static void
-db_write_text(vaddr_t addr, size_t size, const char *data)
-{
- pt_entry_t *ppte, pte;
- vaddr_t pgva;
- size_t limit;
- char *dst;
-
- if (size == 0)
- return;
-
- dst = (char *)addr;
-
- do {
- /*
- * Get the PTE for the page.
- */
- ppte = kvtopte((vaddr_t)dst);
- pte = *ppte;
-
- if ((pte & PG_V) == 0) {
- printf(" address %p not a valid page\n", dst);
- return;
- }
-
- /*
- * Get the VA for the page.
- */
- if (pte & PG_PS)
- pgva = VA_SIGN_NEG((vaddr_t)dst & PG_LGFRAME);
- else
- pgva = x86_trunc_page(dst);
-
- /*
- * Compute number of bytes that can be written
- * with this mapping and subtract it from the
- * total size.
- */
- if (pte & PG_PS)
- limit = NBPD_L2 - ((vaddr_t)dst & (NBPD_L2 - 1));
- else
- limit = PAGE_SIZE - ((vaddr_t)dst & PGOFSET);
- if (limit > size)
- limit = size;
- size -= limit;
-
- /*
- * Make the kernel text page writable.
- */
- pmap_pte_clearbits(ppte, PG_KR);
- pmap_pte_setbits(ppte, PG_KW);
- pmap_update_pg(pgva);
-
- /*
- * Page is now writable. Do as much access as we
- * can in this page.
- */
- for (; limit > 0; limit--)
- *dst++ = *data++;
-
- /*
- * Turn the page back to read-only.
- */
- pmap_pte_clearbits(ppte, PG_KW);
- pmap_pte_setbits(ppte, PG_KR);
- pmap_update_pg(pgva);
-
- } while (size != 0);
-}
-
-/*
- * Write bytes to kernel address space for debugger.
- */
-void
-db_write_bytes(vaddr_t addr, size_t size, const char *data)
-{
- extern int __data_start;
- char *dst;
-
- dst = (char *)addr;
-
- /* If any part is in kernel text, use db_write_text() */
- if (addr >= KERNBASE && addr < (vaddr_t)&__data_start) {
- db_write_text(addr, size, data);
- return;
- }
-
- dst = (char *)addr;
-
- if (size == 8) {
- *((long *)dst) = *((const long *)data);
- return;
- }
-
- if (size == 4) {
- *((int *)dst) = *((const int *)data);
- return;
- }
-
- if (size == 2) {
- *((short *)dst) = *((const short *)data);
- return;
- }
-
- while (size-- > 0)
- *dst++ = *data++;
-}
diff -r 34955e8c38cb -r bdef05118bab sys/arch/amd64/conf/files.amd64
--- a/sys/arch/amd64/conf/files.amd64 Mon May 07 16:16:44 2012 +0000
+++ b/sys/arch/amd64/conf/files.amd64 Mon May 07 17:45:28 2012 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: files.amd64,v 1.74 2011/11/06 19:45:04 christos Exp $
+# $NetBSD: files.amd64,v 1.75 2012/05/07 17:45:28 jym Exp $
#
# new style config file for amd64 architecture
#
@@ -36,7 +36,6 @@
file arch/amd64/amd64/db_disasm.c ddb
file arch/amd64/amd64/db_interface.c ddb
file arch/amd64/amd64/db_machdep.c ddb
-file arch/amd64/amd64/db_memrw.c ddb | kgdb
file arch/amd64/amd64/kobj_machdep.c modular
file arch/amd64/amd64/kgdb_machdep.c kgdb
file kern/subr_disk_mbr.c disk
diff -r 34955e8c38cb -r bdef05118bab sys/arch/i386/conf/files.i386
--- a/sys/arch/i386/conf/files.i386 Mon May 07 16:16:44 2012 +0000
+++ b/sys/arch/i386/conf/files.i386 Mon May 07 17:45:28 2012 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: files.i386,v 1.362 2011/11/18 22:18:07 jmcneill Exp $
+# $NetBSD: files.i386,v 1.363 2012/05/07 17:45:28 jym Exp $
#
# new style config file for i386 architecture
#
@@ -68,7 +68,6 @@
file arch/i386/i386/db_disasm.c ddb
file arch/i386/i386/db_interface.c ddb
file arch/i386/i386/db_machdep.c ddb
-file arch/i386/i386/db_memrw.c ddb | kgdb
file arch/i386/i386/dumpsys.c
file kern/subr_disk_mbr.c disk
file kern/subr_spldebug.c spldebug
diff -r 34955e8c38cb -r bdef05118bab sys/arch/i386/i386/db_memrw.c
--- a/sys/arch/i386/i386/db_memrw.c Mon May 07 16:16:44 2012 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,207 +0,0 @@
-/* $NetBSD: db_memrw.c,v 1.30 2012/05/07 12:23:05 jym Exp $ */
-
-/*-
- * Copyright (c) 1996, 2000 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Gordon W. Ross and Jason R. Thorpe.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-/*
- * Interface to the debugger for virtual memory read/write.
- * This file is shared by DDB and KGDB, and must work even
- * when only KGDB is included (thus no db_printf calls).
- *
- * To write in the text segment, we have to first make
- * the page writable, do the write, then restore the PTE.
- * For writes outside the text segment, and all reads,
- * just do the access -- if it causes a fault, the debugger
- * will recover with a longjmp to an appropriate place.
- *
- * ALERT! If you want to access device registers with a
- * specific size, then the read/write functions have to
- * make sure to do the correct sized pointer access.
- *
- * Modified for i386 from hp300 version by
- * Jason R. Thorpe <thorpej%zembu.com@localhost>.
- */
-
-#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: db_memrw.c,v 1.30 2012/05/07 12:23:05 jym Exp $");
-
-#include "opt_xen.h"
-
Home |
Main Index |
Thread Index |
Old Index