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] bug fixes for recent ioports patch

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] [IA64] bug fixes for recent ioports patch
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Wed, 09 Aug 2006 22:20:18 +0000
Delivery-date: Wed, 09 Aug 2006 15:23:19 -0700
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 aa9d157d76378e6273fab62c110ec7c2cbd4d35e
# Parent  87247ceb0acd82acd5d02c06b4a17358b1def880
[IA64] bug fixes for recent ioports patch

Bug fixes: dom0 do not virtualize IO space, do not over-deny IO ports.

Signed-off-by: Tristan Gingold <tristan.gingold@xxxxxxxx>
---
 xen/arch/ia64/xen/mm.c                  |   23 +++++++++++++++++++++++
 xen/include/asm-ia64/linux-xen/asm/io.h |    6 ++++++
 2 files changed, 29 insertions(+)

diff -r 87247ceb0acd -r aa9d157d7637 xen/arch/ia64/xen/mm.c
--- a/xen/arch/ia64/xen/mm.c    Mon Jul 31 10:18:28 2006 -0600
+++ b/xen/arch/ia64/xen/mm.c    Mon Jul 31 13:10:39 2006 -0600
@@ -908,6 +908,10 @@ ioports_permit_access(struct domain *d, 
     if (ret != 0)
         return ret;
 
+    /* Domain 0 doesn't virtualize IO ports space. */
+    if (d == dom0)
+        return 0;
+
     fp_offset = IO_SPACE_SPARSE_ENCODING(fp) & ~PAGE_MASK;
     lp_offset = PAGE_ALIGN(IO_SPACE_SPARSE_ENCODING(lp));
 
@@ -915,6 +919,16 @@ ioports_permit_access(struct domain *d, 
         __assign_domain_page(d, IO_PORTS_PADDR + off,
                              ia64_iobase + off, ASSIGN_nocache);
 
+    return 0;
+}
+
+static int
+ioports_has_allowed(struct domain *d, unsigned long fp, unsigned long lp)
+{
+    unsigned long i;
+    for (i = fp; i < lp; i++)
+        if (rangeset_contains_singleton(d->arch.ioport_caps, i))
+            return 1;
     return 0;
 }
 
@@ -936,8 +950,17 @@ ioports_deny_access(struct domain *d, un
 
     for (off = fp_offset; off <= lp_offset; off += PAGE_SIZE) {
         unsigned long mpaddr = IO_PORTS_PADDR + off;
+        unsigned long port;
         volatile pte_t *pte;
         pte_t old_pte;
+
+        port = IO_SPACE_SPARSE_DECODING (off);
+        if (port < fp || port + IO_SPACE_SPARSE_PORTS_PER_PAGE > lp) {
+            /* Maybe this covers an allowed port.  */
+            if (ioports_has_allowed(d, port,
+                                    port + IO_SPACE_SPARSE_PORTS_PER_PAGE))
+                continue;
+        }
 
         pte = lookup_noalloc_domain_pte_none(d, mpaddr);
         BUG_ON(pte == NULL);
diff -r 87247ceb0acd -r aa9d157d7637 xen/include/asm-ia64/linux-xen/asm/io.h
--- a/xen/include/asm-ia64/linux-xen/asm/io.h   Mon Jul 31 10:18:28 2006 -0600
+++ b/xen/include/asm-ia64/linux-xen/asm/io.h   Mon Jul 31 13:10:39 2006 -0600
@@ -46,6 +46,12 @@
 #define IO_SPACE_PORT(port)            ((port) & (IO_SPACE_SIZE - 1))
 
 #define IO_SPACE_SPARSE_ENCODING(p)    ((((p) >> 2) << 12) | (p & 0xfff))
+
+#ifdef XEN
+/* Offset to IO port; do not catch error.  */
+#define IO_SPACE_SPARSE_DECODING(off)  ((((off) >> 12) << 2) | (off & 0x3))
+#define IO_SPACE_SPARSE_PORTS_PER_PAGE (0x4 << (PAGE_SHIFT - 12))
+#endif
 
 struct io_space {
        unsigned long mmio_base;        /* base in MMIO space */

_______________________________________________
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] bug fixes for recent ioports patch, Xen patchbot-unstable <=