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 Use paddr_t to store physical address and c...



details:   https://anonhg.NetBSD.org/src/rev/24b26ce49917
branches:  trunk
changeset: 751067:24b26ce49917
user:      bouyer <bouyer%NetBSD.org@localhost>
date:      Sat Jan 23 18:26:37 2010 +0000

description:
Use paddr_t to store physical address and cast mfn values to paddr_t
before shift. Fix overflow issue preventing xend from working as
reported by Mark Davies on port-xen@

diffstat:

 sys/arch/xen/xen/privcmd.c |  13 +++++++------
 1 files changed, 7 insertions(+), 6 deletions(-)

diffs (55 lines):

diff -r b793b8ed7bf2 -r 24b26ce49917 sys/arch/xen/xen/privcmd.c
--- a/sys/arch/xen/xen/privcmd.c        Sat Jan 23 17:44:44 2010 +0000
+++ b/sys/arch/xen/xen/privcmd.c        Sat Jan 23 18:26:37 2010 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: privcmd.c,v 1.39 2009/10/23 02:32:34 snj Exp $ */
+/* $NetBSD: privcmd.c,v 1.40 2010/01/23 18:26:37 bouyer Exp $ */
 
 /*-
  * Copyright (c) 2004 Christian Limpach.
@@ -27,7 +27,7 @@
 
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: privcmd.c,v 1.39 2009/10/23 02:32:34 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: privcmd.c,v 1.40 2010/01/23 18:26:37 bouyer Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -336,7 +336,7 @@
                privcmd_mmap_t *mcmd = ap->a_data;
                privcmd_mmap_entry_t mentry;
                vaddr_t va;
-               u_long ma;
+               paddr_t ma;
                struct vm_map *vmm = &curlwp->l_proc->p_vmspace->vm_map;
 
                for (i = 0; i < mcmd->num; i++) {
@@ -357,7 +357,7 @@
                        if (maddr == NULL)
                                return ENOMEM;
                        va = mentry.va & ~PAGE_MASK;
-                       ma = mentry.mfn <<  PGSHIFT; /* XXX ??? */
+                       ma = ((paddr_t)mentry.mfn) <<  PGSHIFT; /* XXX ??? */
                        for (j = 0; j < mentry.npages; j++) {
                                maddr[j] = ma;
                                ma += PAGE_SIZE;
@@ -374,7 +374,8 @@
                int i;
                privcmd_mmapbatch_t* pmb = ap->a_data;
                vaddr_t va0, va;
-               u_long mfn, ma;
+               u_long mfn;
+               paddr_t ma;
                struct vm_map *vmm;
                struct vm_map_entry *entry;
                vm_prot_t prot;
@@ -420,7 +421,7 @@
                                    UVM_KMF_VAONLY);
                                return error;
                        }
-                       ma = mfn << PGSHIFT;
+                       ma = ((paddr_t)mfn) << PGSHIFT;
                        if (pmap_enter_ma(pmap_kernel(), trymap, ma, 0,
                            prot, PMAP_CANFAIL, pmb->dom)) {
                                mfn |= 0xF0000000;



Home | Main Index | Thread Index | Old Index