On Wed, May 07, 2008 at 05:31:21PM +0900, Isaku Yamahata wrote:
> Hi Simon-san.
> I guess that this patch isn't copmiled as inteneded.
> With the VHPT_ENABLED patch which make sure VHPT_ENABLED always
> defined to 1 or 0, I got compilation errors.
> 
> 
> [IA64] compilation fix with VHPT_ENABLED=1
> 
> Enabling VHPT_ENABLED=1 results in compilation error in vmx_phy_mode.c
> and vmx_vcpu.c. This patch fixes them.
> vmx_phy_mode.c: In function 'vmx_load_all_rr':
> vmx_phy_mode.c:175: warning: implicit declaration of function 
> 'vcpu_vhpt_maddr'
> vmx_phy_mode.c:175: error: 'v' undeclared (first use in this function)
> vmx_phy_mode.c:175: error: (Each undeclared identifier is reported only once
> vmx_phy_mode.c:175: error: for each function it appears in.)
> PATCHNAME: compilation_fix_with_vhpt_enabled
> 
> Signed-off-by: Isaku Yamahata <[EMAIL PROTECTED]>

Thanks Yamahata-san,

that looks correct to me. I have a related fix to the same code which
alters the value that is tracked. Do you think this is correct:


[IA64] Always track vmx vhpt insertions

Argument 2 of vmx_switch_rr7() pins a new value for the vhpt
in the TLB. This argument is supplied as vcpu->arch.vhpt.hash in
the calls to vmx_switch_rr7() in vmx_vcpu_set_rr() and
vmx_load_all_rr(), the only two calls that exist.

This is done independent of whether VHPT_ENABLED is set or not.

Accordingly, update the tracking of the inserted VHPT entry
to use vcpu->arch.vhpt.hash and to do this regardless of
VHPT_ENABLED.

Signed-off-by: Simon Horman <[EMAIL PROTECTED]>

--- 
This patch applied on top of
"[patch 03/12] ia64: kexec: Unpin the correct VHPT TR in ia64_do_tlb_purge"
which is part of my current EFI memory mapping patch series and
Yamahata-san's fix for that patch.

http://lists.xensource.com/archives/html/xen-ia64-devel/2008-04/msg00121.html
http://lists.xensource.com/archives/html/xen-ia64-devel/2008-05/msg00057.html

Index: xen-unstable.hg/xen/arch/ia64/linux-xen/mca_asm.S
===================================================================
--- xen-unstable.hg.orig/xen/arch/ia64/linux-xen/mca_asm.S      2008-05-08 
08:37:51.000000000 +1000
+++ xen-unstable.hg/xen/arch/ia64/linux-xen/mca_asm.S   2008-05-08 
08:48:16.000000000 +1000
@@ -321,10 +321,13 @@ ia64_do_tlb_purge:
        ;;
 #ifdef XEN
        // 5. VHPT
-#ifdef VHPT_ENABLED
        // GET_VA_VCPU_VHPT_MADDR() may not give the
        // value of the VHPT currently pinned into the TLB
        GET_THIS_PADDR(r2, inserted_vhpt);;
+       ;;
+       cmp.eq p7,p0=r2,r0
+       ;;
+(p7)   br.cond.sptk .vhpt_not_mapped
        dep r16=0,r2,0,IA64_GRANULE_SHIFT
        mov r18=IA64_GRANULE_SHIFT<<2
        ;;
@@ -332,7 +335,7 @@ ia64_do_tlb_purge:
        ;;
        srlz.d
        ;;
-#endif
+.vhpt_not_mapped:
 #endif
        // Now branch away to caller.
        br.sptk.many b1
Index: xen-unstable.hg/xen/arch/ia64/vmx/vmx_phy_mode.c
===================================================================
--- xen-unstable.hg.orig/xen/arch/ia64/vmx/vmx_phy_mode.c       2008-05-08 
08:46:20.000000000 +1000
+++ xen-unstable.hg/xen/arch/ia64/vmx/vmx_phy_mode.c    2008-05-08 
08:52:15.000000000 +1000
@@ -27,7 +27,6 @@
 #include <asm/vmx_phy_mode.h>
 #include <asm/pgtable.h>
 #include <asm/vmmu.h>
-#include <asm/vhpt.h>
 #include <asm/debugger.h>
 
 #define MODE_IND(psr)   \
@@ -172,9 +171,7 @@ vmx_load_all_rr(VCPU *vcpu)
        ia64_dv_serialize_data();
        ia64_set_rr((VRN6 << VRN_SHIFT), vrrtomrr(vcpu, VMX(vcpu, vrr[VRN6])));
        ia64_dv_serialize_data();
-#if VHPT_ENABLED
-        __get_cpu_var(inserted_vhpt) = __va_ul(vcpu_vhpt_maddr(vcpu));
-#endif
+        __get_cpu_var(inserted_vhpt) = vcpu->arch.vhpt.hash;
        vmx_switch_rr7(vrrtomrr(vcpu,VMX(vcpu, vrr[VRN7])),
                       (void *)vcpu->arch.vhpt.hash,
                       pal_vaddr, vcpu->arch.privregs);
Index: xen-unstable.hg/xen/arch/ia64/vmx/vmx_vcpu.c
===================================================================
--- xen-unstable.hg.orig/xen/arch/ia64/vmx/vmx_vcpu.c   2008-05-08 
08:46:20.000000000 +1000
+++ xen-unstable.hg/xen/arch/ia64/vmx/vmx_vcpu.c        2008-05-08 
08:52:30.000000000 +1000
@@ -32,7 +32,6 @@
 #include <asm/delay.h>
 #include <asm/regs.h>
 #include <asm/gcc_intrin.h>
-#include <asm/vhpt.h>
 #include <asm/vmx_mm_def.h>
 #include <asm/vmx.h>
 #include <asm/vmx_phy_mode.h>
@@ -182,9 +181,7 @@ IA64FAULT vmx_vcpu_set_rr(VCPU *vcpu, u6
     switch((u64)(reg>>VRN_SHIFT)) {
     case VRN7:
         if (likely(vcpu == current)) {
-#if VHPT_ENABLED
-            __get_cpu_var(inserted_vhpt) = __va_ul(vcpu_vhpt_maddr(vcpu));
-#endif
+            __get_cpu_var(inserted_vhpt) = vcpu->arch.vhpt.hash;
             vmx_switch_rr7(vrrtomrr(vcpu,val), (void *)vcpu->arch.vhpt.hash,
                            pal_vaddr, vcpu->arch.privregs);
         }
Index: xen-unstable.hg/xen/arch/ia64/xen/regionreg.c
===================================================================
--- xen-unstable.hg.orig/xen/arch/ia64/xen/regionreg.c  2008-05-08 
08:37:51.000000000 +1000
+++ xen-unstable.hg/xen/arch/ia64/xen/regionreg.c       2008-05-08 
08:48:16.000000000 +1000
@@ -48,9 +48,7 @@ extern void ia64_new_rr7(unsigned long r
 static unsigned int domain_rid_bits_default = IA64_MIN_IMPL_RID_BITS;
 integer_param("dom_rid_bits", domain_rid_bits_default); 
 
-#if VHPT_ENABLED
 DEFINE_PER_CPU(unsigned long, inserted_vhpt);
-#endif
 
 #if 0
 // following already defined in include/asm-ia64/gcc_intrin.h

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

Reply via email to