[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] Replace direct_remap_area_pages with direct_remap_pfn_range to help fix PAE domain building.
# HG changeset patch # User iap10@xxxxxxxxxxxxxxxxxxxxx # Node ID a9a78ca76cd20ab40a161b8257a68257b7044f01 # Parent 10a3d4fbd9b420f7a6e0e02bae068ff5a8f57cdf Replace direct_remap_area_pages with direct_remap_pfn_range to help fix PAE domain building. Signed-off-by: ian@xxxxxxxxxxxxx diff -r 10a3d4fbd9b4 -r a9a78ca76cd2 linux-2.6-xen-sparse/arch/xen/i386/mm/ioremap.c --- a/linux-2.6-xen-sparse/arch/xen/i386/mm/ioremap.c Wed Sep 7 21:35:05 2005 +++ b/linux-2.6-xen-sparse/arch/xen/i386/mm/ioremap.c Wed Sep 7 23:10:49 2005 @@ -22,13 +22,14 @@ #define ISA_START_ADDRESS 0x0 #define ISA_END_ADDRESS 0x100000 +#if 0 /* not PAE safe */ /* These hacky macros avoid phys->machine translations. */ #define __direct_pte(x) ((pte_t) { (x) } ) #define __direct_mk_pte(page_nr,pgprot) \ __direct_pte(((page_nr) << PAGE_SHIFT) | pgprot_val(pgprot)) #define direct_mk_pte_phys(physpage, pgprot) \ __direct_mk_pte((physpage) >> PAGE_SHIFT, pgprot) - +#endif static int direct_remap_area_pte_fn(pte_t *pte, struct page *pte_page, @@ -37,16 +38,16 @@ { mmu_update_t **v = (mmu_update_t **)data; - (*v)->ptr = ((maddr_t)pfn_to_mfn(page_to_pfn(pte_page)) << + (*v)->ptr = ((u64)pfn_to_mfn(page_to_pfn(pte_page)) << PAGE_SHIFT) | ((unsigned long)pte & ~PAGE_MASK); (*v)++; return 0; } -int direct_remap_area_pages(struct mm_struct *mm, +int direct_remap_pfn_range(struct mm_struct *mm, unsigned long address, - unsigned long machine_addr, + unsigned long mfn, unsigned long size, pgprot_t prot, domid_t domid) @@ -77,9 +78,9 @@ * Fill in the machine address: PTE ptr is done later by * __direct_remap_area_pages(). */ - v->val = pte_val_ma(pfn_pte_ma(machine_addr >> PAGE_SHIFT, prot)); - - machine_addr += PAGE_SIZE; + v->val = pte_val_ma(pfn_pte_ma(mfn, prot)); + + mfn++; address += PAGE_SIZE; v++; } @@ -97,8 +98,10 @@ return 0; } -EXPORT_SYMBOL(direct_remap_area_pages); - +EXPORT_SYMBOL(direct_remap_pfn_range); + + +/* FIXME: This is horribly broken on PAE */ static int lookup_pte_fn( pte_t *pte, struct page *pte_page, unsigned long addr, void *data) { @@ -218,7 +221,7 @@ #ifdef __x86_64__ flags |= _PAGE_USER; #endif - if (direct_remap_area_pages(&init_mm, (unsigned long) addr, phys_addr, + if (direct_remap_pfn_range(&init_mm, (unsigned long) addr, phys_addr>>PAGE_SHIFT, size, __pgprot(flags), domid)) { vunmap((void __force *) addr); return NULL; diff -r 10a3d4fbd9b4 -r a9a78ca76cd2 linux-2.6-xen-sparse/drivers/xen/netback/interface.c --- a/linux-2.6-xen-sparse/drivers/xen/netback/interface.c Wed Sep 7 21:35:05 2005 +++ b/linux-2.6-xen-sparse/drivers/xen/netback/interface.c Wed Sep 7 23:10:49 2005 @@ -154,12 +154,12 @@ pgprot_t prot = __pgprot(_KERNPG_TABLE); int err; - err = direct_remap_area_pages(&init_mm, localaddr, - tx_ring_ref<<PAGE_SHIFT, PAGE_SIZE, + err = direct_remap_pfn_range(&init_mm, localaddr, + tx_ring_ref, PAGE_SIZE, prot, netif->domid); - err |= direct_remap_area_pages(&init_mm, localaddr + PAGE_SIZE, - rx_ring_ref<<PAGE_SHIFT, PAGE_SIZE, + err |= direct_remap_pfn_range(&init_mm, localaddr + PAGE_SIZE, + rx_ring_ref, PAGE_SIZE, prot, netif->domid); if (err) diff -r 10a3d4fbd9b4 -r a9a78ca76cd2 linux-2.6-xen-sparse/drivers/xen/privcmd/privcmd.c --- a/linux-2.6-xen-sparse/drivers/xen/privcmd/privcmd.c Wed Sep 7 21:35:05 2005 +++ b/linux-2.6-xen-sparse/drivers/xen/privcmd/privcmd.c Wed Sep 7 23:10:49 2005 @@ -116,9 +116,9 @@ if ( (msg[j].va + (msg[j].npages<<PAGE_SHIFT)) > vma->vm_end ) return -EINVAL; - if ( (rc = direct_remap_area_pages(vma->vm_mm, + if ( (rc = direct_remap_pfn_range(vma->vm_mm, msg[j].va&PAGE_MASK, - msg[j].mfn<<PAGE_SHIFT, + msg[j].mfn, msg[j].npages<<PAGE_SHIFT, vma->vm_page_prot, mmapcmd.dom)) < 0 ) diff -r 10a3d4fbd9b4 -r a9a78ca76cd2 linux-2.6-xen-sparse/drivers/xen/usbback/interface.c --- a/linux-2.6-xen-sparse/drivers/xen/usbback/interface.c Wed Sep 7 21:35:05 2005 +++ b/linux-2.6-xen-sparse/drivers/xen/usbback/interface.c Wed Sep 7 23:10:49 2005 @@ -161,8 +161,8 @@ } prot = __pgprot(_KERNPG_TABLE); - error = direct_remap_area_pages(&init_mm, VMALLOC_VMADDR(vma->addr), - shmem_frame<<PAGE_SHIFT, PAGE_SIZE, + error = direct_remap_pfn_range(&init_mm, VMALLOC_VMADDR(vma->addr), + shmem_frame, PAGE_SIZE, prot, domid); if ( error != 0 ) { diff -r 10a3d4fbd9b4 -r a9a78ca76cd2 linux-2.6-xen-sparse/include/asm-xen/asm-i386/pgtable.h --- a/linux-2.6-xen-sparse/include/asm-xen/asm-i386/pgtable.h Wed Sep 7 21:35:05 2005 +++ b/linux-2.6-xen-sparse/include/asm-xen/asm-i386/pgtable.h Wed Sep 7 23:10:49 2005 @@ -460,9 +460,9 @@ #define kern_addr_valid(addr) (1) #endif /* !CONFIG_DISCONTIGMEM */ -int direct_remap_area_pages(struct mm_struct *mm, +int direct_remap_pfn_range(struct mm_struct *mm, unsigned long address, - unsigned long machine_addr, + unsigned long mfn, unsigned long size, pgprot_t prot, domid_t domid); @@ -474,10 +474,10 @@ unsigned long size); #define io_remap_page_range(vma,from,phys,size,prot) \ -direct_remap_area_pages(vma->vm_mm,from,phys,size,prot,DOMID_IO) +direct_remap_pfn_range(vma->vm_mm,from,phys>>PAGE_SHIFT,size,prot,DOMID_IO) #define io_remap_pfn_range(vma,from,pfn,size,prot) \ -direct_remap_area_pages(vma->vm_mm,from,pfn<<PAGE_SHIFT,size,prot,DOMID_IO) +direct_remap_pfn_range(vma->vm_mm,from,pfn,size,prot,DOMID_IO) #define MK_IOSPACE_PFN(space, pfn) (pfn) #define GET_IOSPACE(pfn) 0 diff -r 10a3d4fbd9b4 -r a9a78ca76cd2 linux-2.6-xen-sparse/include/asm-xen/asm-x86_64/pgtable.h --- a/linux-2.6-xen-sparse/include/asm-xen/asm-x86_64/pgtable.h Wed Sep 7 21:35:05 2005 +++ b/linux-2.6-xen-sparse/include/asm-xen/asm-x86_64/pgtable.h Wed Sep 7 23:10:49 2005 @@ -526,28 +526,26 @@ #define DOMID_LOCAL (0xFFFFU) -int direct_remap_area_pages(struct mm_struct *mm, +int direct_remap_pfn_range(struct mm_struct *mm, unsigned long address, - unsigned long machine_addr, + unsigned long mfn, unsigned long size, pgprot_t prot, domid_t domid); -int __direct_remap_area_pages(struct mm_struct *mm, - unsigned long address, - unsigned long size, - mmu_update_t *v); + int create_lookup_pte_addr(struct mm_struct *mm, unsigned long address, unsigned long *ptep); + int touch_pte_range(struct mm_struct *mm, unsigned long address, unsigned long size); #define io_remap_page_range(vma, vaddr, paddr, size, prot) \ - direct_remap_area_pages((vma)->vm_mm,vaddr,paddr,size,prot,DOMID_IO) + direct_remap_pfn_range((vma)->vm_mm,vaddr,paddr>>PAGE_SHIFT,size,prot,DOMID_IO) #define io_remap_pfn_range(vma, vaddr, pfn, size, prot) \ - direct_remap_area_pages((vma)->vm_mm,vaddr,(pfn)<<PAGE_SHIFT,size,prot,DOMID_IO) + direct_remap_pfn_range((vma)->vm_mm,vaddr,pfn,size,prot,DOMID_IO) #define MK_IOSPACE_PFN(space, pfn) (pfn) #define GET_IOSPACE(pfn) 0 _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |