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-devel

[Xen-devel] [PATCH] x86: add support for domain initiated global cache f

To: <xen-devel@xxxxxxxxxxxxxxxxxxx>
Subject: [Xen-devel] [PATCH] x86: add support for domain initiated global cache flush
From: "Jan Beulich" <JBeulich@xxxxxxxxxx>
Date: Thu, 29 Apr 2010 16:59:49 +0100
Delivery-date: Thu, 29 Apr 2010 08:59:51 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
Newer Linux' AGP code wants to flush caches on all CPUs under certain
circumstances. Since doing this on all vCPU-s of the domain in
question doesn't yield the intended effect, this needs to be done in
the hypervisor. Add a new MMUEXT operation for this.

While looking at the pre-existing flush implementation, I also noticed
an off-by-one error in the cache flush portion of flush_area_local().

Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx>

--- 2010-04-22.orig/xen/arch/x86/flushtlb.c     2008-10-14 19:44:12.000000000 
+0200
+++ 2010-04-22/xen/arch/x86/flushtlb.c  2010-04-29 17:47:22.000000000 +0200
@@ -149,7 +149,7 @@ void flush_area_local(const void *va, un
     {
         unsigned long i, sz = 0;
 
-        if ( order < (BITS_PER_LONG - PAGE_SHIFT - 1) )
+        if ( order < (BITS_PER_LONG - PAGE_SHIFT) )
             sz = 1UL << (order + PAGE_SHIFT);
 
         if ( c->x86_clflush_size && c->x86_cache_size && sz &&
--- 2010-04-22.orig/xen/arch/x86/mm.c   2010-04-29 17:35:20.000000000 +0200
+++ 2010-04-22/xen/arch/x86/mm.c        2010-04-29 17:51:08.000000000 +0200
@@ -2889,6 +2889,27 @@ int do_mmuext_op(
             }
             break;
 
+        case MMUEXT_FLUSH_CACHE_GLOBAL:
+            if ( unlikely(foreigndom != DOMID_SELF) )
+                okay = 0;
+            else if ( likely(cache_flush_permitted(d)) )
+            {
+                unsigned int cpu;
+                cpumask_t mask = CPU_MASK_NONE;
+
+                for_each_online_cpu(cpu)
+                    if ( !cpus_intersects(mask,
+                                          per_cpu(cpu_sibling_map, cpu)) )
+                        cpu_set(cpu, mask);
+                flush_mask(&mask, FLUSH_CACHE);
+            }
+            else
+            {
+                MEM_LOG("Non-physdev domain tried to FLUSH_CACHE_GLOBAL");
+                okay = 0;
+            }
+            break;
+
         case MMUEXT_SET_LDT:
         {
             unsigned long ptr  = op.arg1.linear_addr;
--- 2010-04-22.orig/xen/include/public/xen.h    2010-04-29 17:35:20.000000000 
+0200
+++ 2010-04-22/xen/include/public/xen.h 2010-04-29 17:09:30.000000000 +0200
@@ -239,6 +239,10 @@ DEFINE_XEN_GUEST_HANDLE(xen_pfn_t);
  * 
  * cmd: MMUEXT_FLUSH_CACHE
  * No additional arguments. Writes back and flushes cache contents.
+ *
+ * cmd: MMUEXT_FLUSH_CACHE_GLOBAL
+ * No additional arguments. Writes back and flushes cache contents
+ * on all CPUs in the system.
  * 
  * cmd: MMUEXT_SET_LDT
  * linear_addr: Linear address of LDT base (NB. must be page-aligned).
@@ -268,6 +272,7 @@ DEFINE_XEN_GUEST_HANDLE(xen_pfn_t);
 #define MMUEXT_NEW_USER_BASEPTR 15
 #define MMUEXT_CLEAR_PAGE       16
 #define MMUEXT_COPY_PAGE        17
+#define MMUEXT_FLUSH_CACHE_GLOBAL 18
 
 #ifndef __ASSEMBLY__
 struct mmuext_op {



Attachment: x86-cache-flush-global.patch
Description: Text document

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-devel] [PATCH] x86: add support for domain initiated global cache flush, Jan Beulich <=