aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>2005-02-03 08:38:03 +0000
committerkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>2005-02-03 08:38:03 +0000
commit557f25a0fa50db5f8d5ec81757634cf7005284b3 (patch)
treea2073e8bd8fd9474df2b3ec938bdc609e740f7f7
parent61573e23645558123297373daa2af8f9e589f132 (diff)
downloadxen-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.c14
-rw-r--r--linux-2.6.10-xen-sparse/include/asm-xen/asm-i386/pgtable.h12
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