aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoriap10@labyrinth.cl.cam.ac.uk <iap10@labyrinth.cl.cam.ac.uk>2004-11-17 00:33:38 +0000
committeriap10@labyrinth.cl.cam.ac.uk <iap10@labyrinth.cl.cam.ac.uk>2004-11-17 00:33:38 +0000
commite228c332061fd250ba7d41f40864c76fb401f8e1 (patch)
treefbe6d7e1a8fe4f22e00a0c92575d9189b9d07c0d
parent5661df515a065c912df90eb8ba98acc298f22ac8 (diff)
parentce200281b24495908c4a9e33069f5ab36ab30cee (diff)
downloadxen-e228c332061fd250ba7d41f40864c76fb401f8e1.tar.gz
xen-e228c332061fd250ba7d41f40864c76fb401f8e1.tar.bz2
xen-e228c332061fd250ba7d41f40864c76fb401f8e1.zip
bitkeeper revision 1.1159.170.33 (419a9c62tk7sIcrtH243O5DOGwNn8g)
Merge labyrinth.cl.cam.ac.uk:/auto/groups/xeno/BK/xeno.bk into labyrinth.cl.cam.ac.uk:/auto/anfs/scratch/labyrinth/iap10/xeno-clone/xeno.bk
-rw-r--r--linux-2.6.9-xen-sparse/drivers/char/mem.c32
-rw-r--r--linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/pgtable.h3
2 files changed, 14 insertions, 21 deletions
diff --git a/linux-2.6.9-xen-sparse/drivers/char/mem.c b/linux-2.6.9-xen-sparse/drivers/char/mem.c
index 83f54c227c..072c5ca761 100644
--- a/linux-2.6.9-xen-sparse/drivers/char/mem.c
+++ b/linux-2.6.9-xen-sparse/drivers/char/mem.c
@@ -43,7 +43,12 @@ extern void tapechar_init(void);
*/
static inline int uncached_access(struct file *file, unsigned long addr)
{
-#if defined(__i386__)
+#ifdef CONFIG_XEN
+ if (file->f_flags & O_SYNC)
+ return 1;
+ /* Xen sets correct MTRR type on non-RAM for us. */
+ return 0;
+#elif defined(__i386__)
/*
* On the PPro and successors, the MTRRs are used to set
* memory types for physical addresses outside main memory,
@@ -193,7 +198,6 @@ static ssize_t write_mem(struct file * file, const char __user * buf,
static int mmap_mem(struct file * file, struct vm_area_struct * vma)
{
-#if !defined(CONFIG_XEN)
unsigned long offset = vma->vm_pgoff << PAGE_SHIFT;
int uncached;
@@ -212,28 +216,16 @@ static int mmap_mem(struct file * file, struct vm_area_struct * vma)
if (uncached)
vma->vm_flags |= VM_IO;
- if (remap_page_range(vma, vma->vm_start, offset, vma->vm_end-vma->vm_start,
- vma->vm_page_prot))
+#if defined(CONFIG_XEN)
+ if (io_remap_page_range(vma, vma->vm_start, offset,
+ vma->vm_end-vma->vm_start, vma->vm_page_prot))
return -EAGAIN;
- return 0;
-#elif !defined(CONFIG_XEN_PRIVILEGED_GUEST)
- return -ENXIO;
#else
- unsigned long offset = vma->vm_pgoff << PAGE_SHIFT;
-
- if (!(xen_start_info.flags & SIF_PRIVILEGED))
- return -ENXIO;
-
- /* Currently we're not smart about setting PTE cacheability. */
- vma->vm_flags |= VM_RESERVED | VM_IO;
- vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
-
- if (direct_remap_area_pages(vma->vm_mm, vma->vm_start, offset,
- vma->vm_end-vma->vm_start, vma->vm_page_prot,
- DOMID_IO))
+ if (remap_page_range(vma, vma->vm_start, offset, vma->vm_end-vma->vm_start,
+ vma->vm_page_prot))
return -EAGAIN;
- return 0;
#endif
+ return 0;
}
extern long vread(char *buf, char *addr, unsigned long count);
diff --git a/linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/pgtable.h b/linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/pgtable.h
index cb5c4bb372..db97836850 100644
--- a/linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/pgtable.h
+++ b/linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/pgtable.h
@@ -487,7 +487,8 @@ static inline unsigned long arbitrary_virt_to_phys(void *va)
#define kern_addr_valid(addr) (1)
#endif /* !CONFIG_DISCONTIGMEM */
-#define io_remap_page_range remap_page_range
+#define io_remap_page_range(vma,from,phys,size,prot) \
+ direct_remap_area_pages(vma->vm_mm,from,phys,size,prot,DOMID_IO)
#define __HAVE_ARCH_PTEP_TEST_AND_CLEAR_YOUNG
#define __HAVE_ARCH_PTEP_TEST_AND_CLEAR_DIRTY