diff options
author | iap10@labyrinth.cl.cam.ac.uk <iap10@labyrinth.cl.cam.ac.uk> | 2004-11-17 00:30:21 +0000 |
---|---|---|
committer | iap10@labyrinth.cl.cam.ac.uk <iap10@labyrinth.cl.cam.ac.uk> | 2004-11-17 00:30:21 +0000 |
commit | ce200281b24495908c4a9e33069f5ab36ab30cee (patch) | |
tree | d97204462d9f7aa0dd3c90cb5539062daabd67e0 | |
parent | 0182092bce65369d4ae079d71b4d4a7143af68d0 (diff) | |
download | xen-ce200281b24495908c4a9e33069f5ab36ab30cee.tar.gz xen-ce200281b24495908c4a9e33069f5ab36ab30cee.tar.bz2 xen-ce200281b24495908c4a9e33069f5ab36ab30cee.zip |
bitkeeper revision 1.1159.175.1 (419a9b9dCZLKnt1tKvFYyV5cDeDbmQ)
Clean up drivers/char/mem.c patch.
-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 67325a0262..118f224d28 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 @@ -536,7 +536,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 |