Date: Wed, 25 Nov 2009 02:39:12 +0000 (UTC) From: Kip Macy <kmacy@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r199779 - in user/kmacy/releng_8_fcs_buf_xen/sys/i386: i386 include xen Message-ID: <200911250239.nAP2dCW7036820@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: kmacy Date: Wed Nov 25 02:39:11 2009 New Revision: 199779 URL: http://svn.freebsd.org/changeset/base/199779 Log: fix compile for i386 and i386-xen builds Modified: user/kmacy/releng_8_fcs_buf_xen/sys/i386/i386/minidump_machdep.c user/kmacy/releng_8_fcs_buf_xen/sys/i386/i386/pmap.c user/kmacy/releng_8_fcs_buf_xen/sys/i386/include/md_var.h user/kmacy/releng_8_fcs_buf_xen/sys/i386/xen/pmap.c Modified: user/kmacy/releng_8_fcs_buf_xen/sys/i386/i386/minidump_machdep.c ============================================================================== --- user/kmacy/releng_8_fcs_buf_xen/sys/i386/i386/minidump_machdep.c Wed Nov 25 02:38:20 2009 (r199778) +++ user/kmacy/releng_8_fcs_buf_xen/sys/i386/i386/minidump_machdep.c Wed Nov 25 02:39:11 2009 (r199779) @@ -54,6 +54,7 @@ CTASSERT(sizeof(struct kerneldumpheader) #define DEV_ALIGN(x) (((off_t)(x) + (DEV_BSIZE-1)) & ~(DEV_BSIZE-1)) uint32_t *vm_page_dump; +uint32_t *vm_page_dump_exclude; int vm_page_dump_size; static struct kerneldumpheader kdh; Modified: user/kmacy/releng_8_fcs_buf_xen/sys/i386/i386/pmap.c ============================================================================== --- user/kmacy/releng_8_fcs_buf_xen/sys/i386/i386/pmap.c Wed Nov 25 02:38:20 2009 (r199778) +++ user/kmacy/releng_8_fcs_buf_xen/sys/i386/i386/pmap.c Wed Nov 25 02:39:11 2009 (r199779) @@ -1245,17 +1245,25 @@ pmap_map(vm_offset_t *virt, vm_paddr_t s * Note: SMP coherent. Uses a ranged shootdown IPI. */ void -pmap_qenter(vm_offset_t sva, vm_page_t *ma, int count) +pmap_qenter_prot(vm_offset_t sva, vm_page_t *ma, int count, vm_prot_t prot) { pt_entry_t *endpte, oldpte, *pte; + uint64_t flags = PG_V; + if (prot & VM_PROT_WRITE) + flags |= PG_RW; + if ((prot & VM_PROT_EXECUTE) == 0) + flags |= PG_NX; + oldpte = 0; pte = vtopte(sva); endpte = pte + count; while (pte < endpte) { oldpte |= *pte; pte_store(pte, VM_PAGE_TO_PHYS(*ma) | pgeflag | - pmap_cache_bits((*ma)->md.pat_mode, 0) | PG_RW | PG_V); + pmap_cache_bits((*ma)->md.pat_mode, 0) | flags | PG_V); + if (prot & VM_PROT_EXCLUDE) + dump_exclude_page(VM_PAGE_TO_PHYS(*ma)); pte++; ma++; } @@ -1264,6 +1272,16 @@ pmap_qenter(vm_offset_t sva, vm_page_t * PAGE_SIZE); } + +void +pmap_qenter(vm_offset_t sva, vm_page_t *ma, int count) +{ + + pmap_qenter_prot(sva, ma, count, + VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE); + +} + /* * This routine tears out page mappings from the * kernel -- it is meant only for temporary mappings. Modified: user/kmacy/releng_8_fcs_buf_xen/sys/i386/include/md_var.h ============================================================================== --- user/kmacy/releng_8_fcs_buf_xen/sys/i386/include/md_var.h Wed Nov 25 02:38:20 2009 (r199778) +++ user/kmacy/releng_8_fcs_buf_xen/sys/i386/include/md_var.h Wed Nov 25 02:39:11 2009 (r199779) @@ -72,6 +72,7 @@ extern int szfreebsd4_sigcode; extern int szosigcode; #endif extern uint32_t *vm_page_dump; +extern uint32_t *vm_page_dump_exclude; extern int vm_page_dump_size; typedef void alias_for_inthand_t(u_int cs, u_int ef, u_int esp, u_int ss); Modified: user/kmacy/releng_8_fcs_buf_xen/sys/i386/xen/pmap.c ============================================================================== --- user/kmacy/releng_8_fcs_buf_xen/sys/i386/xen/pmap.c Wed Nov 25 02:38:20 2009 (r199778) +++ user/kmacy/releng_8_fcs_buf_xen/sys/i386/xen/pmap.c Wed Nov 25 02:39:11 2009 (r199779) @@ -1323,7 +1323,7 @@ pmap_map(vm_offset_t *virt, vm_paddr_t s * Note: SMP coherent. Uses a ranged shootdown IPI. */ void -pmap_qenter(vm_offset_t sva, vm_page_t *ma, int count) +pmap_qenter_prot(vm_offset_t sva, vm_page_t *ma, int count, vm_prot_t prot) { pt_entry_t *endpte, *pte; vm_paddr_t pa; @@ -1332,12 +1332,22 @@ pmap_qenter(vm_offset_t sva, vm_page_t * multicall_entry_t mcl[16]; multicall_entry_t *mclp = mcl; int error; +#ifdef PAE + uint64_t flags = PG_V; + if ((prot & VM_PROT_EXECUTE) == 0) + flags |= PG_NX; +#else + uint32_t flags = 0; +#endif + + if (prot & VM_PROT_WRITE) + flags |= PG_RW; CTR2(KTR_PMAP, "pmap_qenter:sva=0x%x count=%d", va, count); pte = vtopte(sva); endpte = pte + count; while (pte < endpte) { - pa = xpmap_ptom(VM_PAGE_TO_PHYS(*ma)) | pgeflag | PG_RW | PG_V | PG_M | PG_A; + pa = xpmap_ptom(VM_PAGE_TO_PHYS(*ma)) | pgeflag | flags | PG_V | PG_M | PG_A; mclp->op = __HYPERVISOR_update_va_mapping; mclp->args[0] = va; @@ -1368,6 +1378,14 @@ pmap_qenter(vm_offset_t sva, vm_page_t * #endif } +void +pmap_qenter(vm_offset_t sva, vm_page_t *ma, int count) +{ + + pmap_qenter_prot(sva, ma, count, + VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE); + +} /* * This routine tears out page mappings from the
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200911250239.nAP2dCW7036820>