# 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
|