WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] - Update FreeBSD sparse tree to build against latest -un

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] - Update FreeBSD sparse tree to build against latest -unstable
From: BitKeeper Bot <riel@xxxxxxxxxxx>
Date: Mon, 18 Apr 2005 23:25:40 +0000
Delivery-date: Tue, 19 Apr 2005 01:06:22 +0000
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: Xen Development List <xen-devel@xxxxxxxxxxxxxxxxxxx>
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
ChangeSet 1.1323, 2005/04/19 00:25:40+01:00, iap10@xxxxxxxxxxxxxxxxxxxxx

        - Update FreeBSD sparse tree to build against latest -unstable
        - add conditional support for writable pagetables (don't use 
          currently locks up xen)
        - block driver not update to use grant tables yet, DOM0 will have to 
          be re-compiled with grant table substrate disabled
        Signed-off-by: Kip Macy <kmacy@xxxxxxxxxxx>
        Signed-off-by: ian@xxxxxxxxxxxxx



 i386-xen/machdep.c         |   29 +++---
 i386-xen/pmap.c            |   70 +++++++--------
 i386-xen/xen_machdep.c     |  204 +++++++++++++++------------------------------
 include/hypervisor.h       |   35 ++++++-
 include/pmap.h             |    4 
 include/xenfunc.h          |   10 --
 include/xenpmap.h          |  105 +++++++++++++----------
 xen/netfront/xn_netfront.c |    5 -
 8 files changed, 217 insertions(+), 245 deletions(-)


diff -Nru a/freebsd-5.3-xen-sparse/i386-xen/i386-xen/machdep.c 
b/freebsd-5.3-xen-sparse/i386-xen/i386-xen/machdep.c
--- a/freebsd-5.3-xen-sparse/i386-xen/i386-xen/machdep.c        2005-04-18 
21:06:38 -04:00
+++ b/freebsd-5.3-xen-sparse/i386-xen/i386-xen/machdep.c        2005-04-18 
21:06:38 -04:00
@@ -224,7 +224,6 @@
        /*
         * Good {morning,afternoon,evening,night}.
         */
-    /* XXX need to write clock driver */
        startrtclock();
 
        printcpuinfo();
@@ -1375,6 +1374,7 @@
 extern unsigned long *SMPpt;
 pteinfo_t *pteinfo_list;
 unsigned long *xen_machine_phys = ((unsigned long *)VADDR(1008, 0));
+pt_entry_t *KPTphysv;
 int preemptable;
 int gdt_set;
 
@@ -1386,6 +1386,10 @@
 initvalues(start_info_t *startinfo)
 { 
     int i;
+#ifdef WRITABLE_PAGETABLES
+    HYPERVISOR_vm_assist(VMASST_CMD_enable, VMASST_TYPE_writable_pagetables);
+#endif
+
     xen_start_info = startinfo;
     xen_phys_machine = (unsigned long *)startinfo->mfn_list;
     unsigned long tmpindex = ((__pa(xen_start_info->pt_base) >> PAGE_SHIFT) + 
xen_start_info->nr_pt_frames) + 3 /* number of pages allocated after the pts + 
1*/;
@@ -1393,6 +1397,7 @@
     /* pre-zero unused mapped pages */
     bzero((char *)(KERNBASE + (tmpindex << PAGE_SHIFT)), (1024 - 
tmpindex)*PAGE_SIZE); 
     IdlePTD = (pd_entry_t *)xpmap_ptom(__pa(startinfo->pt_base));
+    KPTphysv = (pt_entry_t *)(startinfo->pt_base + PAGE_SIZE);
     XENPRINTF("IdlePTD %p\n", IdlePTD);
     XENPRINTF("nr_pages: %ld shared_info: 0x%lx flags: 0x%lx pt_base: 0x%lx "
              "mod_start: 0x%lx mod_len: 0x%lx\n",
@@ -1401,9 +1406,9 @@
              xen_start_info->mod_start, xen_start_info->mod_len);
     
     /* setup self-referential mapping first so vtomach will work */
-    xpq_queue_pt_update(IdlePTD + PTDPTDI , (unsigned long)IdlePTD | 
+    xen_queue_pt_update(IdlePTD + PTDPTDI , (unsigned long)IdlePTD | 
                        PG_V | PG_A);
-    mcl_flush_queue();
+    xen_flush_queue();
     /* Map proc0's UPAGES */
     proc0uarea = (struct user *)(KERNBASE + (tmpindex << PAGE_SHIFT));
     tmpindex += UAREA_PAGES;
@@ -1431,10 +1436,10 @@
     SMPpt[0] = vtomach(cpu0prvpage) | PG_RW | PG_M | PG_V | PG_A;
 
     /* map SMP page table RO */
-    PT_SET_MA(SMPpt, vtomach(SMPpt) & ~PG_RW, TRUE);
+    PT_SET_MA(SMPpt, vtomach(SMPpt) & ~PG_RW);
 
     /* put the page table into the pde */
-    xpq_queue_pt_update(IdlePTD + MPPTDI, xpmap_ptom((tmpindex << 
PAGE_SHIFT))| PG_M | PG_RW | PG_V | PG_A);
+    xen_queue_pt_update(IdlePTD + MPPTDI, xpmap_ptom((tmpindex << 
PAGE_SHIFT))| PG_M | PG_RW | PG_V | PG_A);
 
     tmpindex++;
 #endif
@@ -1448,20 +1453,16 @@
 #endif
     /* unmap remaining pages from initial 4MB chunk */
     for (i = tmpindex; i%1024 != 0; i++) 
-       PT_CLEAR(KERNBASE + (i << PAGE_SHIFT), TRUE);
+       PT_CLEAR_VA(KPTphysv + i, TRUE);
 
     /* allocate remainder of NKPT pages */
     for (i = 0; i < NKPT-1; i++, tmpindex++)
-       xpq_queue_pt_update(IdlePTD + KPTDI + i + 1, xpmap_ptom((tmpindex << 
PAGE_SHIFT))| PG_M | PG_RW | PG_V | PG_A);
-    tmpindex += NKPT-1;
-
-
-
+       PT_SET_VA(((unsigned long *)startinfo->pt_base) + KPTDI + i + 1, 
(tmpindex << PAGE_SHIFT)| PG_M | PG_RW | PG_V | PG_A, TRUE);
     tmpindex += NKPT-1;
     PT_UPDATES_FLUSH();
 
     HYPERVISOR_shared_info = (shared_info_t *)(KERNBASE + (tmpindex << 
PAGE_SHIFT));
-    PT_SET_MA(HYPERVISOR_shared_info, xen_start_info->shared_info | PG_A | 
PG_V | PG_RW | PG_M, TRUE);
+    PT_SET_MA(HYPERVISOR_shared_info, xen_start_info->shared_info | PG_A | 
PG_V | PG_RW | PG_M);
     tmpindex++;
 
     HYPERVISOR_shared_info->arch.pfn_to_mfn_frame_list = (unsigned 
long)xen_phys_machine;
@@ -1568,7 +1569,7 @@
        for (x = 0; x < NGDT; x++)
            ssdtosd(&gdt_segs[x], &gdt[x].sd);
 
-       PT_SET_MA(gdt, *vtopte((unsigned long)gdt) & ~PG_RW, TRUE); 
+       PT_SET_MA(gdt, *vtopte((unsigned long)gdt) & ~PG_RW);
        gdtmachpfn = vtomach(gdt) >> PAGE_SHIFT;
        if (HYPERVISOR_set_gdt(&gdtmachpfn, LAST_RESERVED_GDT_ENTRY + 1)) {
            XENPRINTF("set_gdt failed\n");
@@ -1617,7 +1618,7 @@
        default_proc_ldt.ldt_len = 6;
        _default_ldt = (int)&default_proc_ldt;
        PCPU_SET(currentldt, _default_ldt)
-       PT_SET_MA(ldt, *vtopte((unsigned long)ldt) & ~PG_RW, TRUE);
+       PT_SET_MA(ldt, *vtopte((unsigned long)ldt) & ~PG_RW);
        xen_set_ldt((unsigned long) ldt, (sizeof ldt_segs / sizeof 
ldt_segs[0]));
 
 
diff -Nru a/freebsd-5.3-xen-sparse/i386-xen/i386-xen/pmap.c 
b/freebsd-5.3-xen-sparse/i386-xen/i386-xen/pmap.c
--- a/freebsd-5.3-xen-sparse/i386-xen/i386-xen/pmap.c   2005-04-18 21:06:38 
-04:00
+++ b/freebsd-5.3-xen-sparse/i386-xen/i386-xen/pmap.c   2005-04-18 21:06:38 
-04:00
@@ -793,7 +793,7 @@
                newpf = PT_GET(pde) & PG_FRAME;
                tmppf = PT_GET(PMAP2) & PG_FRAME;
                if (tmppf != newpf) {
-                       PT_SET_VA(PMAP2, newpf | PG_V | PG_A, FALSE);
+                       PD_SET_VA(PMAP2, newpf | PG_V | PG_A, FALSE);
                        pmap_invalidate_page(kernel_pmap, (vm_offset_t)PADDR2);
                }
                return (PADDR2 + (i386_btop(va) & (NPTEPG - 1)));
@@ -852,7 +852,7 @@
                newpf = PT_GET(pde) & PG_FRAME;
                tmppf = PT_GET(PMAP1) & PG_FRAME;
                if (tmppf != newpf) {
-                       PT_SET_VA(PMAP1, newpf | PG_V | PG_A, TRUE);
+                       PD_SET_VA(PMAP1, newpf | PG_V | PG_A, TRUE);
 #ifdef SMP
                        PMAP1cpu = PCPU_GET(cpuid);
 #endif
@@ -955,7 +955,10 @@
 PMAP_INLINE void 
 pmap_kenter(vm_offset_t va, vm_paddr_t pa)
 {
-       PT_SET(va, pa | PG_RW | PG_V | pgeflag, TRUE);
+       pt_entry_t *pte;
+
+       pte = vtopte(va);
+       pte_store(pte, pa | PG_RW | PG_V | pgeflag);
 }
 
 /*
@@ -965,7 +968,10 @@
 PMAP_INLINE void
 pmap_kremove(vm_offset_t va)
 {
-       PT_CLEAR(va, TRUE);
+       pt_entry_t *pte;
+
+       pte = vtopte(va);
+       pte_clear(pte);
 }
 
 /*
@@ -984,12 +990,10 @@
 pmap_map(vm_offset_t *virt, vm_paddr_t start, vm_paddr_t end, int prot)
 {
        vm_offset_t va, sva;
-       pt_entry_t *pte;
        
        va = sva = *virt;
        while (start < end) {
-               pte = vtopte(va);
-               PT_SET_VA(pte, start | PG_RW | PG_V | pgeflag, FALSE);
+               pmap_kenter(va, start);
                va += PAGE_SIZE;
                start += PAGE_SIZE;
        }
@@ -1016,8 +1020,7 @@
 
        va = sva;
        while (count-- > 0) {
-               PT_SET(va, VM_PAGE_TO_PHYS(*m) | PG_RW | PG_V | pgeflag, 
-                         FALSE);
+               pmap_kenter(va, VM_PAGE_TO_PHYS(*m));
                va += PAGE_SIZE;
                m++;
        }
@@ -1037,7 +1040,7 @@
 
        va = sva;
        while (count-- > 0) {
-               PT_CLEAR(va, FALSE);
+               pmap_kremove(va);
                va += PAGE_SIZE;
        }
        /* invalidate will flush the update queue */
@@ -1070,8 +1073,8 @@
        /*
         * unmap the page table page
         */
-       xpq_queue_unpin_table(pmap->pm_pdir[m->pindex]);
-       PT_CLEAR_VA(&pmap->pm_pdir[m->pindex], TRUE);
+       xen_pt_unpin(pmap->pm_pdir[m->pindex]);
+       PD_CLEAR_VA(&pmap->pm_pdir[m->pindex], TRUE);
        --pmap->pm_stats.resident_count;
 
        /*
@@ -1188,16 +1191,14 @@
        /* install self-referential address mapping entry(s) */
        for (i = 0; i < NPGPTD; i++) {
                ma = xpmap_ptom(VM_PAGE_TO_PHYS(ptdpg[i]));
-               pmap->pm_pdir[PTDPTDI + i] = ma | PG_V | PG_A;
+               pmap->pm_pdir[PTDPTDI + i] = ma | PG_V | PG_A | PG_M;
 #ifdef PAE
                pmap->pm_pdpt[i] = ma | PG_V;
 #endif
-#ifndef PAE
-               PT_SET_MA(pmap->pm_pdir, ma | PG_V | PG_A, TRUE);  
-#else
-               panic("FIX ME!");
-#endif
-               xpq_queue_pin_table(ma, XPQ_PIN_L2_TABLE);
+               /* re-map page directory read-only */
+               PT_SET_MA(pmap->pm_pdir, ma | PG_V | PG_A);
+               xen_pgd_pin(ma);
+
        }
 
        pmap->pm_active = 0;
@@ -1249,8 +1250,8 @@
        pmap->pm_stats.resident_count++;
 
        ptepa = VM_PAGE_TO_PHYS(m);
-       xpq_queue_pin_table(xpmap_ptom(ptepa), XPQ_PIN_L1_TABLE);
-       PT_SET_VA(&pmap->pm_pdir[ptepindex], 
+       xen_pt_pin(xpmap_ptom(ptepa));
+       PD_SET_VA(&pmap->pm_pdir[ptepindex], 
                (pd_entry_t) (ptepa | PG_U | PG_RW | PG_V | PG_A | PG_M), TRUE);
 
        return m;
@@ -1425,12 +1426,12 @@
                ptdpg[i] = PHYS_TO_VM_PAGE(PT_GET(&pmap->pm_pdir[PTDPTDI + i]));
 
        for (i = 0; i < nkpt + NPGPTD; i++)
-               PT_CLEAR_VA(&pmap->pm_pdir[PTDPTDI + i], FALSE);
+               PD_CLEAR_VA(&pmap->pm_pdir[PTDPTDI + i], FALSE);
 
        bzero(pmap->pm_pdir + PTDPTDI, (nkpt + NPGPTD) *
            sizeof(*pmap->pm_pdir));
 #ifdef SMP
-       PT_CLEAR_VA(&pmap->pm_pdir[MPPTDI], FALSE);
+       PD_CLEAR_VA(&pmap->pm_pdir[MPPTDI], FALSE);
 #endif
        PT_UPDATES_FLUSH();
        pmap_qremove((vm_offset_t)pmap->pm_pdir, NPGPTD);
@@ -1440,8 +1441,7 @@
                m = ptdpg[i];
                
                ma = xpmap_ptom(VM_PAGE_TO_PHYS(m));
-                xpq_queue_unpin_table(ma);
-               pmap_zero_page(m);
+                xen_pgd_unpin(ma);
 #ifdef PAE

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] - Update FreeBSD sparse tree to build against latest -unstable, BitKeeper Bot <=