diff options
author | kaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk> | 2005-02-03 08:38:03 +0000 |
---|---|---|
committer | kaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk> | 2005-02-03 08:38:03 +0000 |
commit | 557f25a0fa50db5f8d5ec81757634cf7005284b3 (patch) | |
tree | a2073e8bd8fd9474df2b3ec938bdc609e740f7f7 | |
parent | 61573e23645558123297373daa2af8f9e589f132 (diff) | |
download | xen-557f25a0fa50db5f8d5ec81757634cf7005284b3.tar.gz xen-557f25a0fa50db5f8d5ec81757634cf7005284b3.tar.bz2 xen-557f25a0fa50db5f8d5ec81757634cf7005284b3.zip |
bitkeeper revision 1.1159.223.61 (4201e2eb-AZrvBiRdKncIUx8FuLkeA)
Fix ioremap() for local RAM pages.
-rw-r--r-- | linux-2.6.10-xen-sparse/arch/xen/i386/mm/ioremap.c | 14 | ||||
-rw-r--r-- | linux-2.6.10-xen-sparse/include/asm-xen/asm-i386/pgtable.h | 12 |
2 files changed, 11 insertions, 15 deletions
diff --git a/linux-2.6.10-xen-sparse/arch/xen/i386/mm/ioremap.c b/linux-2.6.10-xen-sparse/arch/xen/i386/mm/ioremap.c index fabb7350f2..b9034505b5 100644 --- a/linux-2.6.10-xen-sparse/arch/xen/i386/mm/ioremap.c +++ b/linux-2.6.10-xen-sparse/arch/xen/i386/mm/ioremap.c @@ -79,6 +79,7 @@ void __iomem * __ioremap(unsigned long phys_addr, unsigned long size, unsigned l void __iomem * addr; struct vm_struct * area; unsigned long offset, last_addr; + domid_t domid = DOMID_IO; /* Don't allow wraparound or zero size */ last_addr = phys_addr + size - 1; @@ -106,6 +107,8 @@ void __iomem * __ioremap(unsigned long phys_addr, unsigned long size, unsigned l for(page = virt_to_page(t_addr); page <= virt_to_page(t_end); page++) if(!PageReserved(page)) return NULL; + + domid = DOMID_LOCAL; } /* @@ -382,10 +385,13 @@ int direct_remap_area_pages(struct mm_struct *mm, #define MAX_DIRECTMAP_MMU_QUEUE 130 mmu_update_t u[MAX_DIRECTMAP_MMU_QUEUE], *w, *v; - u[0].ptr = MMU_EXTENDED_COMMAND; - u[0].val = MMUEXT_SET_FOREIGNDOM; - u[0].val |= (unsigned long)domid << 16; - v = w = &u[1]; + v = w = &u[0]; + if (domid != DOMID_LOCAL) { + u[0].ptr = MMU_EXTENDED_COMMAND; + u[0].val = MMUEXT_SET_FOREIGNDOM; + u[0].val |= (unsigned long)domid << 16; + v = w = &u[1]; + } start_address = address; diff --git a/linux-2.6.10-xen-sparse/include/asm-xen/asm-i386/pgtable.h b/linux-2.6.10-xen-sparse/include/asm-xen/asm-i386/pgtable.h index 07afd66e29..3c0ae34e97 100644 --- a/linux-2.6.10-xen-sparse/include/asm-xen/asm-i386/pgtable.h +++ b/linux-2.6.10-xen-sparse/include/asm-xen/asm-i386/pgtable.h @@ -475,6 +475,7 @@ void make_pages_writable(void *va, unsigned int nr); #define kern_addr_valid(addr) (1) #endif /* !CONFIG_DISCONTIGMEM */ +#define DOMID_LOCAL (0xFFFFU) int direct_remap_area_pages(struct mm_struct *mm, unsigned long address, unsigned long machine_addr, @@ -489,17 +490,6 @@ int __direct_remap_area_pages(struct mm_struct *mm, #define io_remap_page_range(vma,from,phys,size,prot) \ direct_remap_area_pages(vma->vm_mm,from,phys,size,prot,DOMID_IO) -int direct_remap_area_pages(struct mm_struct *mm, - unsigned long address, - unsigned long machine_addr, - 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); - #define __HAVE_ARCH_PTEP_TEST_AND_CLEAR_YOUNG #define __HAVE_ARCH_PTEP_TEST_AND_CLEAR_DIRTY #define __HAVE_ARCH_PTEP_GET_AND_CLEAR |