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] vti save-restore: fix opt_feature

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] [IA64] vti save-restore: fix opt_feature hypercall
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Thu, 22 Nov 2007 12:00:50 -0800
Delivery-date: Thu, 22 Nov 2007 12:16:35 -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 Alex Williamson <alex.williamson@xxxxxx>
# Date 1195575075 25200
# Node ID b444678b94ea13e0eb6c0e06dbae501be2393e3a
# Parent  428679ca60d856b68cae2bcc415233ee8a743c86
[IA64] vti save-restore: fix opt_feature hypercall

- Fix XEN_IA64_OPTF_IDENT_MAP_REG[457] definitions.
- SMP fix. writing to domain->arch.opt_feature is racy.

Signed-off-by: Isaku Yamahata <yamahata@xxxxxxxxxxxxx>
---
 xen/arch/ia64/xen/domain.c     |   20 ++++++++++++++++++--
 xen/include/asm-ia64/domain.h  |   10 ++++++++--
 xen/include/public/arch-ia64.h |    4 +++-
 3 files changed, 29 insertions(+), 5 deletions(-)

diff -r 428679ca60d8 -r b444678b94ea xen/arch/ia64/xen/domain.c
--- a/xen/arch/ia64/xen/domain.c        Tue Nov 20 08:46:24 2007 -0700
+++ b/xen/arch/ia64/xen/domain.c        Tue Nov 20 09:11:15 2007 -0700
@@ -2285,12 +2285,22 @@ optf_set_identity_mapping(unsigned long*
        }
 }
 
-/* Switch a optimization feature on/off. */
+/*
+ * Switch an optimization feature on/off.
+ * The vcpu must be paused to avoid racy access to opt_feature.
+ */
 int
 domain_opt_feature(struct xen_ia64_opt_feature* f)
 {
-       struct opt_feature* optf = &(current->domain->arch.opt_feature);
+       struct domain *d = current->domain;
+       struct opt_feature* optf = &d->arch.opt_feature;
+       struct vcpu *v;
        long rc = 0;
+
+       for_each_vcpu(d, v) {
+               if (v != current)
+                       vcpu_pause(v);
+       }
 
        switch (f->cmd) {
        case XEN_IA64_OPTF_IDENT_MAP_REG4:
@@ -2307,6 +2317,12 @@ domain_opt_feature(struct xen_ia64_opt_f
                rc = -ENOSYS;
                break;
        }
+
+       for_each_vcpu(d, v) {
+               if (v != current)
+                       vcpu_unpause(v);
+       }
+
        return rc;
 }
 
diff -r 428679ca60d8 -r b444678b94ea xen/include/asm-ia64/domain.h
--- a/xen/include/asm-ia64/domain.h     Tue Nov 20 08:46:24 2007 -0700
+++ b/xen/include/asm-ia64/domain.h     Tue Nov 20 09:11:15 2007 -0700
@@ -105,9 +105,15 @@ struct opt_feature {
  * The base XEN_IA64_OPTF_IDENT_MAP_REG7 is defined in public/arch-ia64.h.
  * Identity mapping of region 4 addresses in HVM.
  */
-#define XEN_IA64_OPTF_IDENT_MAP_REG4   (XEN_IA64_OPTF_IDENT_MAP_REG7 + 1)
+#define XEN_IA64_OPTF_IDENT_MAP_REG4_BIT        \
+    (XEN_IA64_OPTF_IDENT_MAP_REG7_BIT + 1)
+#define XEN_IA64_OPTF_IDENT_MAP_REG4            \
+    (1UL << XEN_IA64_OPTF_IDENT_MAP_REG4_BIT)
 /* Identity mapping of region 5 addresses in HVM. */
-#define XEN_IA64_OPTF_IDENT_MAP_REG5   (XEN_IA64_OPTF_IDENT_MAP_REG4 + 1)
+#define XEN_IA64_OPTF_IDENT_MAP_REG5_BIT        \
+    (XEN_IA64_OPTF_IDENT_MAP_REG7_BIT + 2)
+#define XEN_IA64_OPTF_IDENT_MAP_REG5            \
+    (1UL << XEN_IA64_OPTF_IDENT_MAP_REG5_BIT)
 
 /* Set an optimization feature in the struct arch_domain. */
 extern int domain_opt_feature(struct xen_ia64_opt_feature*);
diff -r 428679ca60d8 -r b444678b94ea xen/include/public/arch-ia64.h
--- a/xen/include/public/arch-ia64.h    Tue Nov 20 08:46:24 2007 -0700
+++ b/xen/include/public/arch-ia64.h    Tue Nov 20 09:11:15 2007 -0700
@@ -674,7 +674,9 @@ DEFINE_XEN_GUEST_HANDLE(xen_ia64_debug_o
  * This is useful in guests using region 7 for identity mapping
  * like the linux kernel does.
  */
-#define XEN_IA64_OPTF_IDENT_MAP_REG7   0x1UL
+#define XEN_IA64_OPTF_IDENT_MAP_REG7_BIT       0
+#define XEN_IA64_OPTF_IDENT_MAP_REG7           \
+       (1UL << XEN_IA64_OPTF_IDENT_MAP_REG7_BIT)
 
 struct xen_ia64_opt_feature {
        unsigned long cmd;              /* Which feature */

_______________________________________________
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] vti save-restore: fix opt_feature hypercall, Xen patchbot-unstable <=