diff options
author | iap10@labyrinth.cl.cam.ac.uk <iap10@labyrinth.cl.cam.ac.uk> | 2004-11-17 00:33:38 +0000 |
---|---|---|
committer | iap10@labyrinth.cl.cam.ac.uk <iap10@labyrinth.cl.cam.ac.uk> | 2004-11-17 00:33:38 +0000 |
commit | e228c332061fd250ba7d41f40864c76fb401f8e1 (patch) | |
tree | fbe6d7e1a8fe4f22e00a0c92575d9189b9d07c0d | |
parent | 5661df515a065c912df90eb8ba98acc298f22ac8 (diff) | |
parent | ce200281b24495908c4a9e33069f5ab36ab30cee (diff) | |
download | xen-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.c | 32 | ||||
-rw-r--r-- | linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/pgtable.h | 3 |
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 |