Date: Tue, 8 Jan 2013 15:23:39 +0000 (UTC) From: "Cherry G. Mathew" <cherry@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r245166 - projects/amd64_xen_pv/sys/amd64/amd64 Message-ID: <201301081523.r08FNdTd007125@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: cherry Date: Tue Jan 8 15:23:38 2013 New Revision: 245166 URL: http://svnweb.freebsd.org/changeset/base/245166 Log: Xen uses vtopte_hold/release() because we do not have dmap. Approved by: gibbs (implicit) Modified: projects/amd64_xen_pv/sys/amd64/amd64/db_interface.c Modified: projects/amd64_xen_pv/sys/amd64/amd64/db_interface.c ============================================================================== --- projects/amd64_xen_pv/sys/amd64/amd64/db_interface.c Tue Jan 8 15:22:03 2013 (r245165) +++ projects/amd64_xen_pv/sys/amd64/amd64/db_interface.c Tue Jan 8 15:23:38 2013 (r245166) @@ -42,6 +42,10 @@ __FBSDID("$FreeBSD$"); #include <vm/vm.h> #include <vm/pmap.h> +#ifdef XEN +#include <amd64/xen/mmu_map.h> +#endif + #include <ddb/ddb.h> /* @@ -66,6 +70,8 @@ db_read_bytes(vm_offset_t addr, size_t s return (ret); } +/* XXX: Best to redo this entirely for XEN */ + /* * Write bytes to kernel address space for debugger. */ @@ -88,7 +94,19 @@ db_write_bytes(vm_offset_t addr, size_t if (addr > trunc_page((vm_offset_t)btext) - size && addr < round_page((vm_offset_t)etext)) { +#ifdef XEN + static size_t tsz; /* mmu_map.h opaque cookie size */ + tsz = mmu_map_t_size(); + KASSERT(tsz != 0, ("tsz != 0")); + char tbuf0[tsz]; /* Safe to do this on the stack since tsz is + * effectively const. + */ + + mmu_map_t tptr0 = tbuf0; + ptep0 = vtopte_hold(addr, &tptr0); +#else ptep0 = vtopte(addr); +#endif oldmap0 = *ptep0; *ptep0 |= PG_RW; @@ -99,20 +117,38 @@ db_write_bytes(vm_offset_t addr, size_t if ((*ptep0 & PG_PS) == 0) { addr1 = trunc_page(addr + size - 1); if (trunc_page(addr) != addr1) { +#ifdef XEN + KASSERT(tsz != 0, ("tsz != 0")); + char tbuf1[tsz]; /* Safe to do this on the stack since tsz is + * effectively const. + */ + + mmu_map_t tptr1 = tbuf1; + ptep1 = vtopte_hold(addr1, &tptr1); +#else ptep1 = vtopte(addr1); +#endif /* XEN */ oldmap1 = *ptep1; *ptep1 |= PG_RW; +#ifdef XEN + vtopte_release(addr1, &tptr1); +#endif /* XEN */ } } else { +#ifndef XEN addr1 = trunc_2mpage(addr + size - 1); if (trunc_2mpage(addr) != addr1) { ptep1 = vtopte(addr1); oldmap1 = *ptep1; *ptep1 |= PG_RW; } +#endif /* !XEN */ } invltlb(); +#ifdef XEN + vtopte_release(addr, &tptr0); +#endif /* XEN */ } dst = (char *)addr;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201301081523.r08FNdTd007125>