bitkeeper revision 1.1159.223.61 (4201e2eb-AZrvBiRdKncIUx8FuLkeA)
authorkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>
Thu, 3 Feb 2005 08:38:03 +0000 (08:38 +0000)
committerkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>
Thu, 3 Feb 2005 08:38:03 +0000 (08:38 +0000)
Fix ioremap() for local RAM pages.

linux-2.6.10-xen-sparse/arch/xen/i386/mm/ioremap.c
linux-2.6.10-xen-sparse/include/asm-xen/asm-i386/pgtable.h

index fabb7350f2dd8af2da8e9e3fa103147af175eb51..b9034505b5f7faf886f63159245a957e6478b48e 100644 (file)
@@ -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;
 
index 07afd66e291724f014c387ac88dccce197c4eee0..3c0ae34e9796093b298b78b1c31d60fbd2078d4c 100644 (file)
@@ -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