Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/arch/xen/xen - privpgop_fault: call pmap_update() before...



details:   https://anonhg.NetBSD.org/src/rev/b4e7d46a8fe6
branches:  trunk
changeset: 766109:b4e7d46a8fe6
user:      rmind <rmind%NetBSD.org@localhost>
date:      Wed Jun 15 19:51:50 2011 +0000

description:
- privpgop_fault: call pmap_update() before uvmfault_unlockall().
- privcmd_ioctl, xengnt_more_entries: add missing pmap_update().

diffstat:

 sys/arch/xen/xen/privcmd.c |  11 ++++++++---
 sys/arch/xen/xen/xengnt.c  |   5 +++--
 2 files changed, 11 insertions(+), 5 deletions(-)

diffs (73 lines):

diff -r 68f4203a511f -r b4e7d46a8fe6 sys/arch/xen/xen/privcmd.c
--- a/sys/arch/xen/xen/privcmd.c        Wed Jun 15 19:46:11 2011 +0000
+++ b/sys/arch/xen/xen/privcmd.c        Wed Jun 15 19:51:50 2011 +0000
@@ -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);
                }
        }
+       pmap_update(ufi->orig_map->pmap);
        uvmfault_unlockall(ufi, ufi->entry->aref.ar_amap, uobj);
-       pmap_update(ufi->orig_map->pmap);
+
        if (error == ERESTART) {
                uvm_wait("privpgop_fault");
        }
diff -r 68f4203a511f -r b4e7d46a8fe6 sys/arch/xen/xen/xengnt.c
--- a/sys/arch/xen/xen/xengnt.c Wed Jun 15 19:46:11 2011 +0000
+++ b/sys/arch/xen/xen/xengnt.c Wed Jun 15 19:51:50 2011 +0000
@@ -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



Home | Main Index | Thread Index | Old Index