Replace direct_remap_area_pages with direct_remap_pfn_range to help fix PAE domain building.

Signed-off-by: ian@xensource.com
This commit is contained in:
iap10@freefall.cl.cam.ac.uk committed 2005-09-07 23:10:49 +00:00
1 parent 93b3da0d9e
commit f2f33db0f4
6 files changed
+29 -28

No files matched your search

@@ -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 @@ static int direct_remap_area_pte_fn(pte_t *pte,
{
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 @@ int direct_remap_area_pages(struct mm_struct *mm,
* 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));
v->val = pte_val_ma(pfn_pte_ma(mfn, prot));
machine_addr += PAGE_SIZE;
mfn++;
address += PAGE_SIZE;
v++;
}
@@ -97,8 +98,10 @@ int direct_remap_area_pages(struct mm_struct *mm,
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 @@ void __iomem * __ioremap(unsigned long phys_addr, unsigned long size, unsigned l
#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;
@@ -154,12 +154,12 @@ static int map_frontend_pages(netif_t *netif, unsigned long localaddr,
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)
@@ -116,9 +116,9 @@ static int privcmd_ioctl(struct inode *inode, struct file *file,
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 )
@@ -161,8 +161,8 @@ void usbif_connect(usbif_be_connect_t *connect)
}
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 )
{
@@ -460,9 +460,9 @@ void make_pages_writable(void *va, unsigned int nr);
#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 @@ int touch_pte_range(struct mm_struct *mm,
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
@@ -526,28 +526,26 @@ extern int kern_addr_valid(unsigned long addr);
#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
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.