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 19/19] xen mtrr: Add xen_{get, set}_mtrr() implementa

To: Ingo Molnar <mingo@xxxxxxx>
Subject: [Xen-devel] [PATCH 19/19] xen mtrr: Add xen_{get, set}_mtrr() implementations
From: Jeremy Fitzhardinge <jeremy@xxxxxxxx>
Date: Mon, 16 Feb 2009 15:46:13 -0800
Cc: Mark McLoughlin <markmc@xxxxxxxxxx>, Xen-devel <xen-devel@xxxxxxxxxxxxxxxxxxx>, Ian Campbell <Ian.Campbell@xxxxxxxxxx>, the arch/x86 maintainers <x86@xxxxxxxxxx>, Linux Kernel Mailing List <linux-kernel@xxxxxxxxxxxxxxx>, Yinghai Lu <yinghai@xxxxxxxxxx>
Delivery-date: Mon, 16 Feb 2009 16:01:24 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <b5910989a46777b9857061db2cd59b6150c6fade.1234826723.git.jeremy.fitzhardinge@xxxxxxxxxx>
In-reply-to: <cover.1234826723.git.jeremy.fitzhardinge@xxxxxxxxxx>
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>
References: <cover.1234826723.git.jeremy.fitzhardinge@xxxxxxxxxx> <cover.1234826723.git.jeremy.fitzhardinge@xxxxxxxxxx> <cover.1234826723.git.jeremy.fitzhardinge@xxxxxxxxxx> <edde7fdd064390d321bdafcfb993b28b4d2588b1.1234826723.git.jeremy.fitzhardinge@xxxxxxxxxx> <9fbd402b72d6c494f453ff86e071ac1b2658ece9.1234826723.git.jeremy.fitzhardinge@xxxxxxxxxx> <f47f399029ba9035a14ae381b6ae504a5c5bd445.1234826723.git.jeremy.fitzhardinge@xxxxxxxxxx> <f1402ed2345e1d654faa823afefa53fc4745e368.1234826723.git.jeremy.fitzhardinge@xxxxxxxxxx> <f0d2b3f946de1b3398c278c7a33069f670b78268.1234826723.git.jeremy.fitzhardinge@xxxxxxxxxx> <83b1377d81029933b769798dbe1ca134f6d365ae.1234826723.git.jeremy.fitzhardinge@xxxxxxxxxx> <630b678d3259163fc237f673b6f2a4a5fa76ac25.1234826723.git.jeremy.fitzhardinge@xxxxxxxxxx> <8349825a016bec5b8712940ad6f8c3f18f8003fb.1234826723.git.jeremy.fitzhardinge@xxxxxxxxxx> <f156acbfffc23cccd71b71d36e6668c6c246f3b4.1234826723.git.jeremy.fitzhardinge@xxxxxxxxxx> <f156acbfffc23cccd71b71d36e6668c6c246f3b4.1234826723.git.jeremy.fitzhardinge@xxxxxxxxxx> <e59d440a548af3d4e4bb483c73e24614a5b3af63.1234826723.git.jeremy.fitzhardinge@xxxxxxxxxx> <2fe9663efa1686898ebf9d28e911daac3185b6b7.1234826723.git.jeremy.fitzhardinge@xxxxxxxxxx> <0b79be113b42a033f3b3ca4d4f3ca4035c8a7bf5.1234826723.git.jeremy.fitzhardinge@xxxxxxxxxx> <b4adea5f3e4c3ebba175f2344d138f85aa48dd57.1234826723.git.jeremy.fitzhardinge@xxxxxxxxxx> <0dda0d4d9cf8e5aebba5d370def8c268e93e9800.1234826723.git.jeremy.fitzhardinge@xxxxxxxxxx> <4215664baba2d7e72862150a9d0e8aa77241668d.1234826723.git.jeremy.fitzhardinge@xxxxxxxxxx> <0cd342b898fbbc8ec6a02591a7848dc29140c6ed.1234826723.git.jeremy.fitzhardinge@xxxxxxxxxx> <657b1146c2154ffb82456a954ba645a1c229c887.1234826723.git.jeremy.fitzhardinge@xxxxxxxxxx> <b5910989a46777b9857061db2cd59b6150c6fade.1234826723.git.jeremy.fitzhardinge@xxxxxxxxxx>
References: <cover.1234826723.git.jeremy.fitzhardinge@xxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
From: Mark McLoughlin <markmc@xxxxxxxxxx>

Straightforward apart from the hack to turn mtrr_ops->set()
into a no-op on all but one CPU.

Signed-off-by: Mark McLoughlin <markmc@xxxxxxxxxx>
---
 arch/x86/kernel/cpu/mtrr/xen.c |   52 ++++++++++++++++++++++++++++++++++++---
 1 files changed, 48 insertions(+), 4 deletions(-)

diff --git a/arch/x86/kernel/cpu/mtrr/xen.c b/arch/x86/kernel/cpu/mtrr/xen.c
index d715843..50a45db 100644
--- a/arch/x86/kernel/cpu/mtrr/xen.c
+++ b/arch/x86/kernel/cpu/mtrr/xen.c
@@ -9,6 +9,52 @@
 
 static int __init xen_num_var_ranges(void);
 
+static void xen_set_mtrr(unsigned int reg, unsigned long base,
+                        unsigned long size, mtrr_type type)
+{
+       struct xen_platform_op op;
+       int error;
+
+       /* mtrr_ops->set() is called once per CPU,
+        * but Xen's ops apply to all CPUs.
+        */
+       if (smp_processor_id())
+               return;
+
+       if (size == 0) {
+               op.cmd = XENPF_del_memtype;
+               op.u.del_memtype.handle = 0;
+               op.u.del_memtype.reg    = reg;
+       } else {
+               op.cmd = XENPF_add_memtype;
+               op.u.add_memtype.mfn     = base;
+               op.u.add_memtype.nr_mfns = size;
+               op.u.add_memtype.type    = type;
+       }
+
+       error = HYPERVISOR_dom0_op(&op);
+       BUG_ON(error != 0);
+}
+
+static void xen_get_mtrr(unsigned int reg, unsigned long *base,
+                        unsigned long *size, mtrr_type *type)
+{
+       struct xen_platform_op op;
+
+       op.cmd = XENPF_read_memtype;
+       op.u.read_memtype.reg = reg;
+       if (HYPERVISOR_dom0_op(&op) != 0) {
+               *base = 0;
+               *size = 0;
+               *type = 0;
+               return;
+       }
+
+       *size = op.u.read_memtype.nr_mfns;
+       *base = op.u.read_memtype.mfn;
+       *type = op.u.read_memtype.type;
+}
+
 static int xen_get_free_region(unsigned long base, unsigned long size, int 
replace_reg)
 {
        struct xen_platform_op op;
@@ -34,12 +80,10 @@ static int xen_get_free_region(unsigned long base, unsigned 
long size, int repla
        return replace_reg;
 }
 
-/* DOM0 TODO: Need to fill in the remaining mtrr methods to have full
- * working userland mtrr support. */
 static struct mtrr_ops xen_mtrr_ops = {
        .vendor            = X86_VENDOR_UNKNOWN,
-//     .set               = xen_set_mtrr,
-//     .get               = xen_get_mtrr,
+       .set               = xen_set_mtrr,
+       .get               = xen_get_mtrr,
        .get_free_region   = xen_get_free_region,
        .validate_add_page = generic_validate_add_page,
        .have_wrcomb       = positive_have_wrcomb,
-- 
1.6.0.6


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

<Prev in Thread] Current Thread [Next in Thread>