PERFORCE change 131913 for review
Kip Macy
kmacy at FreeBSD.org
Fri Dec 28 13:48:12 PST 2007
http://perforce.freebsd.org/chv.cgi?CH=131913
Change 131913 by kmacy at pandemonium:kmacy:xen31 on 2007/12/28 21:47:40
use PTDPTDI rather than explicit value
give other domain time to run before calling xs_process_msg
put pdir ma in pdpt not pdir shadow ma
Affected files ...
.. //depot/projects/xen31/sys/i386/xen/pmap.c#8 edit
.. //depot/projects/xen31/sys/i386/xen/xen_machdep.c#8 edit
.. //depot/projects/xen31/sys/xen/xenbus/xenbus_xs.c#4 edit
Differences ...
==== //depot/projects/xen31/sys/i386/xen/pmap.c#8 (text+ko) ====
@@ -1432,7 +1432,6 @@
/* Wire in kernel global address entries. */
bcopy(PTD + KPTDI, pmap->pm_pdir + KPTDI, nkpt * sizeof(pd_entry_t));
- /* XXX need to copy global address entries to page directory's L1 shadow */
#ifdef PAE
#ifdef XEN
pmap_qenter((vm_offset_t)pmap->pm_pdpt, &ptdpg[NPGPTD*2], 1);
@@ -1440,7 +1439,7 @@
for (i = 0; i < NPGPTD; i++) {
vm_paddr_t ma;
- ma = xpmap_ptom(VM_PAGE_TO_PHYS(ptdpg[NPGPTD + i]));
+ ma = xpmap_ptom(VM_PAGE_TO_PHYS(ptdpg[i]));
pmap->pm_pdpt[i] = ma | PG_V;
}
@@ -1457,15 +1456,15 @@
for (i = 0; i < NPGPTD; i++)
pmap->pm_pdir[PTDPTDI + i] =
xpmap_ptom(VM_PAGE_TO_PHYS(ptdpg[i + NPGPTD])) | PG_V;
-
- bcopy(PTD + KPTDI, pmap->pm_pdir_shadow + KPTDI, nkpt * sizeof(pd_entry_t));
+ for (i = KPTDI; i < KPTDI + nkpt; i++)
+ pmap->pm_pdir_shadow[i] = PTD[i] & ~(PG_RW|PG_M|PG_A);
for (i = 0; i < NPGPTD; i++) {
vm_paddr_t *pd;
pd = pmap->pm_pdir + (i * NPDEPG);
- PT_SET_MA(pd, *vtopte((vm_offset_t)pd) & ~PG_RW);
+ PT_SET_MA(pd, *vtopte((vm_offset_t)pd) & ~(PG_M|PG_A|PG_U|PG_RW));
pd = pmap->pm_pdir_shadow + (i * NPDEPG);
- PT_SET_MA(pd, *vtopte((vm_offset_t)pd) & ~PG_RW);
+ PT_SET_MA(pd, *vtopte((vm_offset_t)pd) & ~(PG_M|PG_A|PG_U|PG_RW));
}
#ifdef PAE
PT_SET_MA(pmap->pm_pdpt, *vtopte((vm_offset_t)pmap->pm_pdpt) & ~PG_RW);
==== //depot/projects/xen31/sys/i386/xen/xen_machdep.c#8 (text+ko) ====
@@ -798,13 +798,13 @@
* L2
*/
for (i = 0; i < 4; i++)
- IdlePTDnew[1532 + i] = pdir_shadow_ma[i] | PG_V;
+ IdlePTDnew[PTDPTDI + i] = pdir_shadow_ma[i] | PG_V;
/*
* Map IdlePTD at PTD
*/
for (i = 0; i < 4; i++)
- pdir_shadow[1532 + i] = IdlePTDnewma[i] | PG_V;
+ pdir_shadow[PTDPTDI + i] = IdlePTDnewma[i] | PG_V;
PT_SET_MA(IdlePDPTnew, IdlePDPTnewma | PG_V);
xen_pt_unpin(IdlePDPTma);
==== //depot/projects/xen31/sys/xen/xenbus/xenbus_xs.c#4 (text+ko) ====
@@ -140,10 +140,17 @@
{
struct xs_stored_msg *msg;
char *body;
-
- if (HYPERVISOR_shared_info->evtchn_mask[curcpu] & 1)
+ int i;
+
+ if (HYPERVISOR_shared_info->evtchn_mask[curcpu] & 1) {
+ /*
+ * Give other domain time to run :-/
+ */
+ for (i = 0; i < 1000; i++)
+ HYPERVISOR_sched_op(SCHEDOP_yield, NULL);
xs_process_msg();
-
+ }
+
spin_lock(&xs_state.reply_lock);
while (list_empty(&xs_state.reply_list)) {
More information about the p4-projects
mailing list