[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [IA64] disable handling of legacy privified insns



# HG changeset patch
# User awilliam@xxxxxxxxxxx
# Node ID e3aa5b2387ac479a55ed3754e6c4db51a0f916b3
# Parent  bbfbb9e09b551fed30ff657948ebe0d1f3f4a37f
[IA64] disable handling of legacy privified insns

Disable handling of privified insns into another instructions.
This is controled by a static constant.

Signed-off-by: Tristan Gingold <tristan.gingold@xxxxxxxx>

diff -r bbfbb9e09b55 -r e3aa5b2387ac xen/arch/ia64/xen/privop.c
--- a/xen/arch/ia64/xen/privop.c        Thu Mar 16 19:20:59 2006
+++ b/xen/arch/ia64/xen/privop.c        Thu Mar 16 19:22:37 2006
@@ -19,6 +19,9 @@
 extern void zero_reflect_counts(void);
 
 long priv_verbose=0;
+
+/* Set to 1 to handle privified instructions from the privify tool. */
+static const int privify_en = 0;
 
 /**************************************************************************
 Hypercall bundle creation
@@ -131,7 +134,8 @@
        UINT src = inst.M28.r3;
 
        // NOTE: ptc_e with source gr > 63 is emulated as a fc r(y-64)
-       if (src > 63) return(vcpu_fc(vcpu,vcpu_get_gr(vcpu,src - 64)));
+       if (privify_en && src > 63)
+               return(vcpu_fc(vcpu,vcpu_get_gr(vcpu,src - 64)));
        return vcpu_ptc_e(vcpu,vcpu_get_gr(vcpu,src));
 }
 
@@ -178,7 +182,7 @@
        UINT src = inst.M46.r3;
 
        // NOTE: tpa with source gr > 63 is emulated as a ttag rx=r(y-64)
-       if (src > 63)
+       if (privify_en && src > 63)
                fault = vcpu_ttag(vcpu,vcpu_get_gr(vcpu,src-64),&padr);
        else fault = vcpu_tpa(vcpu,vcpu_get_gr(vcpu,src),&padr);
        if (fault == IA64_NO_FAULT)
@@ -193,7 +197,7 @@
        UINT src = inst.M46.r3;
 
        // NOTE: tak with source gr > 63 is emulated as a thash rx=r(y-64)
-       if (src > 63)
+       if (privify_en && src > 63)
                fault = vcpu_thash(vcpu,vcpu_get_gr(vcpu,src-64),&key);
        else fault = vcpu_tak(vcpu,vcpu_get_gr(vcpu,src),&key);
        if (fault == IA64_NO_FAULT)
@@ -280,7 +284,8 @@
        // I26 and M29 are identical for these fields
        UINT64 ar3 = inst.M29.ar3;
 
-       if (inst.M29.r2 > 63 && inst.M29.ar3 < 8) { // privified mov from kr
+       if (privify_en && inst.M29.r2 > 63 && inst.M29.ar3 < 8) {
+               // privified mov from kr
                UINT64 val;
                if (vcpu_get_ar(vcpu,ar3,&val) != IA64_ILLOP_FAULT)
                        return vcpu_set_gr(vcpu, inst.M29.r2-64, val,0);
@@ -404,14 +409,17 @@
 {
        UINT64 val;
        IA64FAULT fault;
+       int reg;
        
-       if (inst.M43.r1 > 63) { // privified mov from cpuid
-               fault = vcpu_get_cpuid(vcpu,vcpu_get_gr(vcpu,inst.M43.r3),&val);
+       reg = vcpu_get_gr(vcpu,inst.M43.r3);
+       if (privify_en && inst.M43.r1 > 63) {
+               // privified mov from cpuid
+               fault = vcpu_get_cpuid(vcpu,reg,&val);
                if (fault == IA64_NO_FAULT)
                        return vcpu_set_gr(vcpu, inst.M43.r1-64, val, 0);
        }
        else {
-               fault = vcpu_get_rr(vcpu,vcpu_get_gr(vcpu,inst.M43.r3),&val);
+               fault = vcpu_get_rr(vcpu,reg,&val);
                if (fault == IA64_NO_FAULT)
                        return vcpu_set_gr(vcpu, inst.M43.r1, val, 0);
        }
@@ -455,14 +463,17 @@
 {
        UINT64 val;
        IA64FAULT fault;
+       int reg;
        
-       if (inst.M43.r1 > 63) { // privified mov from pmd
-               fault = vcpu_get_pmd(vcpu,vcpu_get_gr(vcpu,inst.M43.r3),&val);
+       reg = vcpu_get_gr(vcpu,inst.M43.r3);
+       if (privify_en && inst.M43.r1 > 63) {
+               // privified mov from pmd
+               fault = vcpu_get_pmd(vcpu,reg,&val);
                if (fault == IA64_NO_FAULT)
                        return vcpu_set_gr(vcpu, inst.M43.r1-64, val, 0);
        }
        else {
-               fault = vcpu_get_pmc(vcpu,vcpu_get_gr(vcpu,inst.M43.r3),&val);
+               fault = vcpu_get_pmc(vcpu,reg,&val);
                if (fault == IA64_NO_FAULT)
                        return vcpu_set_gr(vcpu, inst.M43.r1, val, 0);
        }
@@ -666,7 +677,7 @@
                else if (inst.generic.major != 1) break;
                x6 = inst.M29.x6;
                if (x6 == 0x2a) {
-                       if (inst.M29.r2 > 63 && inst.M29.ar3 < 8)
+                       if (privify_en && inst.M29.r2 > 63 && inst.M29.ar3 < 8)
                                privcnt.mov_from_ar++; // privified mov from kr
                        else privcnt.mov_to_ar_reg++;
                        return priv_mov_to_ar_reg(vcpu,inst);
@@ -674,14 +685,14 @@
                if (inst.M29.x3 != 0) break;
                if (!(pfunc = Mpriv_funcs[x6])) break;
                if (x6 == 0x1e || x6 == 0x1f)  { // tpa or tak are "special"
-                       if (inst.M46.r3 > 63) {
+                       if (privify_en && inst.M46.r3 > 63) {
                                if (x6 == 0x1e) x6 = 0x1b;
                                else x6 = 0x1a;
                        }
                }
-               if (x6 == 52 && inst.M28.r3 > 63)
+               if (privify_en && x6 == 52 && inst.M28.r3 > 63)
                        privcnt.fc++;
-               else if (x6 == 16 && inst.M43.r3 > 63)
+               else if (privify_en && x6 == 16 && inst.M43.r3 > 63)
                        privcnt.cpuid++;
                else privcnt.Mpriv_cnt[x6]++;
                return (*pfunc)(vcpu,inst);
@@ -718,7 +729,7 @@
 #endif
                if (inst.I26.x3 != 0) break;  // I26.x3 == I27.x3
                if (inst.I26.x6 == 0x2a) {
-                       if (inst.I26.r2 > 63 && inst.I26.ar3 < 8)
+                       if (privify_en && inst.I26.r2 > 63 && inst.I26.ar3 < 8)
                                privcnt.mov_from_ar++; // privified mov from kr
                        else privcnt.mov_to_ar_reg++;
                        return priv_mov_to_ar_reg(vcpu,inst);

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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.