WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] [IA64] paraviatualize /dev/mem to enable

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] [IA64] paraviatualize /dev/mem to enable X.
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Sat, 09 Dec 2006 15:44:38 +0000
Delivery-date: Sat, 09 Dec 2006 07:46:45 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User awilliam@xxxxxxxxxxx
# Node ID e5e6893ec6997513fc2920a2efc3bfd6ed6cd6b0
# Parent  bef3a5ffd78d234cfa62641429c4e60ee754ae9d
[IA64] paraviatualize /dev/mem to enable X.

Signed-off-by: Isaku Yamahata <yamahata@xxxxxxxxxxxxx>
---
 linux-2.6-xen-sparse/arch/ia64/Kconfig          |    3 
 linux-2.6-xen-sparse/arch/ia64/xen/Makefile     |    2 
 linux-2.6-xen-sparse/arch/ia64/xen/mem.c        |   76 ++++++++++++++++++++++++
 linux-2.6-xen-sparse/include/asm-ia64/io.h      |    7 ++
 linux-2.6-xen-sparse/include/asm-ia64/uaccess.h |   20 ++++++
 5 files changed, 104 insertions(+), 4 deletions(-)

diff -r bef3a5ffd78d -r e5e6893ec699 linux-2.6-xen-sparse/arch/ia64/Kconfig
--- a/linux-2.6-xen-sparse/arch/ia64/Kconfig    Mon Dec 04 08:37:20 2006 -0700
+++ b/linux-2.6-xen-sparse/arch/ia64/Kconfig    Mon Dec 04 08:44:57 2006 -0700
@@ -533,9 +533,6 @@ config XEN_SKBUFF
 config XEN_SKBUFF
        default y
 
-config XEN_DEVMEM
-       default n
-
 config XEN_REBOOT
        default y
 
diff -r bef3a5ffd78d -r e5e6893ec699 linux-2.6-xen-sparse/arch/ia64/xen/Makefile
--- a/linux-2.6-xen-sparse/arch/ia64/xen/Makefile       Mon Dec 04 08:37:20 
2006 -0700
+++ b/linux-2.6-xen-sparse/arch/ia64/xen/Makefile       Mon Dec 04 08:44:57 
2006 -0700
@@ -4,6 +4,6 @@
 
 obj-y := hypercall.o xenivt.o xenentry.o xensetup.o xenpal.o xenhpski.o \
         hypervisor.o pci-dma-xen.o util.o xencomm.o xcom_hcall.o \
-        xcom_mini.o xcom_privcmd.o
+        xcom_mini.o xcom_privcmd.o mem.o
 
 pci-dma-xen-y := ../../i386/kernel/pci-dma-xen.o
diff -r bef3a5ffd78d -r e5e6893ec699 linux-2.6-xen-sparse/include/asm-ia64/io.h
--- a/linux-2.6-xen-sparse/include/asm-ia64/io.h        Mon Dec 04 08:37:20 
2006 -0700
+++ b/linux-2.6-xen-sparse/include/asm-ia64/io.h        Mon Dec 04 08:44:57 
2006 -0700
@@ -129,6 +129,11 @@ extern int valid_mmap_phys_addr_range (u
        (((bvec_to_bus((vec1)) + (vec1)->bv_len) == bvec_to_bus((vec2))) && \
         ((bvec_to_pseudophys((vec1)) + (vec1)->bv_len) ==              \
          bvec_to_pseudophys((vec2))))
+
+/* We will be supplying our own /dev/mem implementation */
+#define ARCH_HAS_DEV_MEM
+#define ARCH_HAS_DEV_MEM_MMAP_MEM
+int xen_mmap_mem(struct file * file, struct vm_area_struct * vma);
 #endif /* CONFIG_XEN */
 
 # endif /* KERNEL */
@@ -458,6 +463,8 @@ ioremap (unsigned long offset, unsigned 
 ioremap (unsigned long offset, unsigned long size)
 {
        offset = HYPERVISOR_ioremap(offset, size);
+       if (IS_ERR_VALUE(offset))
+               return (void __iomem*)offset;
        return (void __iomem *) (__IA64_UNCACHED_OFFSET | (offset));
 }
 
diff -r bef3a5ffd78d -r e5e6893ec699 
linux-2.6-xen-sparse/include/asm-ia64/uaccess.h
--- a/linux-2.6-xen-sparse/include/asm-ia64/uaccess.h   Mon Dec 04 08:37:20 
2006 -0700
+++ b/linux-2.6-xen-sparse/include/asm-ia64/uaccess.h   Mon Dec 04 08:44:57 
2006 -0700
@@ -365,6 +365,7 @@ ia64_done_with_exception (struct pt_regs
 }
 
 #define ARCH_HAS_TRANSLATE_MEM_PTR     1
+#ifndef CONFIG_XEN
 static __inline__ char *
 xlate_dev_mem_ptr (unsigned long p)
 {
@@ -379,6 +380,25 @@ xlate_dev_mem_ptr (unsigned long p)
 
        return ptr;
 }
+#else
+static __inline__ char *
+xlate_dev_mem_ptr (unsigned long p, ssize_t sz)
+{
+       unsigned long pfn = p >> PAGE_SHIFT;
+
+       if (pfn_valid(pfn) && !PageUncached(pfn_to_page(pfn)))
+               return __va(p);
+
+       return ioremap(p, sz);
+}
+
+static __inline__ void
+xlate_dev_mem_ptr_unmap (char* v)
+{
+       if (REGION_NUMBER(v) == RGN_UNCACHED)
+               iounmap(v);
+}
+#endif
 
 /*
  * Convert a virtual cached kernel memory pointer to an uncached pointer
diff -r bef3a5ffd78d -r e5e6893ec699 linux-2.6-xen-sparse/arch/ia64/xen/mem.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/linux-2.6-xen-sparse/arch/ia64/xen/mem.c  Mon Dec 04 08:44:57 2006 -0700
@@ -0,0 +1,76 @@
+/*
+ *  Originally from linux/drivers/char/mem.c
+ *
+ *  Copyright (C) 1991, 1992  Linus Torvalds
+ *
+ *  Added devfs support. 
+ *    Jan-11-1998, C. Scott Ananian <cananian@xxxxxxxxxxxxxxxxxxxx>
+ *  Shared /dev/zero mmaping support, Feb 2000, Kanoj Sarcar <kanoj@xxxxxxx>
+ */
+/*
+ * taken from
+ * linux/drivers/char/mem.c and linux-2.6-xen-sparse/drivers/xen/char/mem.c.
+ * adjusted for IA64 and made transparent.
+ * Copyright (c) 2006 Isaku Yamahata <yamahata at valinux co jp>
+ *                    VA Linux Systems Japan K.K.
+ */
+
+#include <linux/config.h>
+#include <linux/mm.h>
+#include <linux/efi.h>
+
+/*
+ * Architectures vary in how they handle caching for addresses
+ * outside of main memory.
+ *
+ */
+static inline int uncached_access(struct file *file, unsigned long addr)
+{
+       /*
+        * On ia64, we ignore O_SYNC because we cannot tolerate memory 
attribute aliases.
+        */
+       return !(efi_mem_attributes(addr) & EFI_MEMORY_WB);
+}
+
+int xen_mmap_mem(struct file * file, struct vm_area_struct * vma)
+{
+       unsigned long addr = vma->vm_pgoff << PAGE_SHIFT;
+       size_t size = vma->vm_end - vma->vm_start;
+
+
+#if 0
+       /*
+        *XXX FIXME: linux-2.6.16.29, linux-2.6.17
+        *    valid_mmap_phys_addr_range() in linux/arch/ia64/kernel/efi.c
+        *    fails checks.
+        *    linux-2.6.18.1's returns always 1. 
+        *    Its comments says
+        *
+         * MMIO regions are often missing from the EFI memory map.
+         * We must allow mmap of them for programs like X, so we
+         * currently can't do any useful validation.
+         */
+       if (!valid_mmap_phys_addr_range(addr, &size))
+               return -EINVAL;
+       if (size < vma->vm_end - vma->vm_start)
+               return -EINVAL;
+#endif
+
+       if (is_running_on_xen()) {
+               unsigned long offset = HYPERVISOR_ioremap(addr, size);
+               if (IS_ERR_VALUE(offset))
+                       return offset;
+       }
+
+       if (uncached_access(file, vma->vm_pgoff << PAGE_SHIFT))
+               vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
+
+        /* Remap-pfn-range will mark the range VM_IO and VM_RESERVED */
+        if (remap_pfn_range(vma,
+                            vma->vm_start,
+                            vma->vm_pgoff,
+                            size,
+                            vma->vm_page_prot))
+                return -EAGAIN;
+        return 0;
+}

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] [IA64] paraviatualize /dev/mem to enable X., Xen patchbot-unstable <=