Module Name: src Committed By: rmind Date: Wed Jun 15 19:51:50 UTC 2011
Modified Files: src/sys/arch/xen/xen: privcmd.c xengnt.c Log Message: - privpgop_fault: call pmap_update() before uvmfault_unlockall(). - privcmd_ioctl, xengnt_more_entries: add missing pmap_update(). To generate a diff of this commit: cvs rdiff -u -r1.42 -r1.43 src/sys/arch/xen/xen/privcmd.c cvs rdiff -u -r1.18 -r1.19 src/sys/arch/xen/xen/xengnt.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/xen/xen/privcmd.c diff -u src/sys/arch/xen/xen/privcmd.c:1.42 src/sys/arch/xen/xen/privcmd.c:1.43 --- src/sys/arch/xen/xen/privcmd.c:1.42 Sun Jun 12 03:35:50 2011 +++ src/sys/arch/xen/xen/privcmd.c Wed Jun 15 19:51:50 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: privcmd.c,v 1.42 2011/06/12 03:35:50 rmind Exp $ */ +/* $NetBSD: privcmd.c,v 1.43 2011/06/15 19:51:50 rmind Exp $ */ /*- * Copyright (c) 2004 Christian Limpach. @@ -27,7 +27,7 @@ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: privcmd.c,v 1.42 2011/06/12 03:35:50 rmind Exp $"); +__KERNEL_RCSID(0, "$NetBSD: privcmd.c,v 1.43 2011/06/15 19:51:50 rmind Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -416,6 +416,8 @@ va = va0 + (i * PAGE_SIZE); error = copyin(&pmb->arr[i], &mfn, sizeof(mfn)); if (error != 0) { + /* XXX: mappings */ + pmap_update(pmap_kernel()); kmem_free(maddr, sizeof(paddr_t) * pmb->num); uvm_km_free(kernel_map, trymap, PAGE_SIZE, UVM_KMF_VAONLY); @@ -433,6 +435,8 @@ maddr[i] = ma; } } + pmap_update(pmap_kernel()); + error = privcmd_map_obj(vmm, va0, maddr, pmb->num, pmb->dom); uvm_km_free(kernel_map, trymap, PAGE_SIZE, UVM_KMF_VAONLY); @@ -518,8 +522,9 @@ vaddr + PAGE_SIZE); } } - uvmfault_unlockall(ufi, ufi->entry->aref.ar_amap, uobj); pmap_update(ufi->orig_map->pmap); + uvmfault_unlockall(ufi, ufi->entry->aref.ar_amap, uobj); + if (error == ERESTART) { uvm_wait("privpgop_fault"); } Index: src/sys/arch/xen/xen/xengnt.c diff -u src/sys/arch/xen/xen/xengnt.c:1.18 src/sys/arch/xen/xen/xengnt.c:1.19 --- src/sys/arch/xen/xen/xengnt.c:1.18 Thu May 26 22:18:13 2011 +++ src/sys/arch/xen/xen/xengnt.c Wed Jun 15 19:51:50 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: xengnt.c,v 1.18 2011/05/26 22:18:13 jym Exp $ */ +/* $NetBSD: xengnt.c,v 1.19 2011/06/15 19:51:50 rmind Exp $ */ /* * Copyright (c) 2006 Manuel Bouyer. @@ -26,7 +26,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: xengnt.c,v 1.18 2011/05/26 22:18:13 jym Exp $"); +__KERNEL_RCSID(0, "$NetBSD: xengnt.c,v 1.19 2011/06/15 19:51:50 rmind Exp $"); #include <sys/types.h> #include <sys/param.h> @@ -167,6 +167,7 @@ pmap_kenter_ma(((vaddr_t)grant_table) + gnt_nr_grant_frames * PAGE_SIZE, ((paddr_t)pages[gnt_nr_grant_frames]) << PAGE_SHIFT, VM_PROT_WRITE, 0); + pmap_update(pmap_kernel()); /* * add the grant entries associated to the last grant table frame