[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] More tools PAE fixes to avoid loosing high-order pte bits.
# HG changeset patch # User iap10@xxxxxxxxxxxxxxxxxxxxx # Node ID f0d728001aaad4eb6c716cbdbb5d1f8a8a5f1620 # Parent a9a78ca76cd20ab40a161b8257a68257b7044f01 More tools PAE fixes to avoid loosing high-order pte bits. Signed-off-by: ian@xxxxxxxxxxxxx diff -r a9a78ca76cd2 -r f0d728001aaa tools/libxc/xc_linux_build.c --- a/tools/libxc/xc_linux_build.c Wed Sep 7 23:10:49 2005 +++ b/tools/libxc/xc_linux_build.c Wed Sep 7 23:11:44 2005 @@ -57,7 +57,7 @@ } #define alloc_pt(ltab, vltab) \ - ltab = page_array[ppt_alloc++] << PAGE_SHIFT; \ + ltab = (unsigned long long)(page_array[ppt_alloc++]) << PAGE_SHIFT; \ if (vltab != NULL) { \ munmap(vltab, PAGE_SIZE); \ } \ @@ -128,9 +128,9 @@ l1_pgentry_64_t *vl1tab=NULL, *vl1e=NULL; l2_pgentry_64_t *vl2tab=NULL, *vl2e=NULL; l3_pgentry_64_t *vl3tab=NULL, *vl3e=NULL; - unsigned long l1tab = 0; - unsigned long l2tab = 0; - unsigned long l3tab = 0; + unsigned long long l1tab = 0; + unsigned long long l2tab = 0; + unsigned long long l3tab = 0; unsigned long ppt_alloc; unsigned long count; @@ -139,7 +139,13 @@ alloc_pt(l3tab, vl3tab); vl3e = &vl3tab[l3_table_offset_pae(dsi_v_start)]; ctxt->ctrlreg[3] = l3tab; - + + if(l3tab>0xfffff000) + { + fprintf(stderr,"L3TAB = %llx above 4GB!\n",l3tab); + goto error_out; + } + for ( count = 0; count < ((v_end-dsi_v_start)>>PAGE_SHIFT); count++) { if ( !((unsigned long)vl1e & (PAGE_SIZE-1)) ) @@ -525,12 +531,14 @@ physmap = physmap_e = xc_map_foreign_range( xc_handle, dom, PAGE_SIZE, PROT_READ|PROT_WRITE, page_array[physmap_pfn++]); + for ( count = 0; count < nr_pages; count++ ) { if ( xc_add_mmu_update(xc_handle, mmu, - (page_array[count] << PAGE_SHIFT) | + ((unsigned long long)page_array[count] << PAGE_SHIFT) | MMU_MACHPHYS_UPDATE, count) ) { + fprintf(stderr,"m2p update failure p=%lx m=%lx\n",count,page_array[count] ); munmap(physmap, PAGE_SIZE); goto error_out; } diff -r a9a78ca76cd2 -r f0d728001aaa tools/libxc/xc_private.c --- a/tools/libxc/xc_private.c Wed Sep 7 23:10:49 2005 +++ b/tools/libxc/xc_private.c Wed Sep 7 23:11:44 2005 @@ -116,7 +116,7 @@ if ( (ret = do_xen_hypercall(xc_handle, &hypercall)) < 0 ) { - fprintf(stderr, "Dom_mem operation failed (rc=%ld errno=%d)-- need to" + fprintf(stderr, "Dom_mmuext operation failed (rc=%ld errno=%d)-- need to" " rebuild the user-space tool set?\n",ret,errno); } @@ -172,7 +172,7 @@ } int xc_add_mmu_update(int xc_handle, xc_mmu_t *mmu, - unsigned long ptr, unsigned long val) + unsigned long long ptr, unsigned long long val) { mmu->updates[mmu->idx].ptr = ptr; mmu->updates[mmu->idx].val = val; @@ -229,7 +229,7 @@ if ( (ret = do_xen_hypercall(xc_handle, &hypercall)) < 0 ) { - fprintf(stderr, "Dom_mem operation failed (rc=%ld errno=%d)-- need to" + fprintf(stderr, "hypercall failed (rc=%ld errno=%d)-- need to" " rebuild the user-space tool set?\n",ret,errno); } diff -r a9a78ca76cd2 -r f0d728001aaa tools/libxc/xenctrl.h --- a/tools/libxc/xenctrl.h Wed Sep 7 23:10:49 2005 +++ b/tools/libxc/xenctrl.h Wed Sep 7 23:11:44 2005 @@ -521,7 +521,7 @@ typedef struct xc_mmu xc_mmu_t; xc_mmu_t *xc_init_mmu_updates(int xc_handle, domid_t dom); int xc_add_mmu_update(int xc_handle, xc_mmu_t *mmu, - unsigned long ptr, unsigned long val); + unsigned long long ptr, unsigned long long val); int xc_finish_mmu_updates(int xc_handle, xc_mmu_t *mmu); #endif _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |