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] Kexec: Fix ia64_do_tlb_purge so th

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] [IA64] Kexec: Fix ia64_do_tlb_purge so that it works with XEN
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Thu, 04 Oct 2007 17:41:03 -0700
Delivery-date: Thu, 04 Oct 2007 17:56:34 -0700
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 1190931842 21600
# Node ID 687de7ae22983e4078c1fd945e72c47641ac4592
# Parent  ec3f4e9e62f658a38cbd417226003886f81de0c7
[IA64] Kexec: Fix ia64_do_tlb_purge so that it works with XEN

Fix ia64_do_tlb_purge, its broken in too many ways

1. Call SET_PER_CPU_DATA before making any calls to GET_THIS_PADDR
   to ensure that per-cpu data is set up correctly.

2. Use the per_cpu variable to derive CURRENT_STACK_OFFSET rather
   than reading it from a kernel register. See 1) for explanation
   of why.

3. In the VHPT pruning code, don't use r25 as ia64_jump_to_sal,
   which branches to ia64_do_tlb_purge expects r25 to be preserved.
   There seems no reason not to use r2 as per the other purges
   done in ia64_do_tlb_purge.  Furthermore use r16 and r18 instead
   of r20 and r24 for consistency reasons.

4. Move __va_ul(vcpu_vhpt_maddr(v)) comment outside of
   #if VHPT_ENABLED as it also applies to code further down that
   is outside the #if

Cc: Tristan Gingold <tgingold@xxxxxxx>,
Cc: Yutaka Ezaki <yutaka.ezaki@xxxxxxxxxxxxxx>,
Cc: Masaki Kanno <kanno.masaki@xxxxxxxxxxxxxx>,
Cc: Kazuhiro Suzuki <kaz@xxxxxxxxxxxxxx>,
Signed-off-by: Simon Horman <horms@xxxxxxxxxxxx>
---
 xen/arch/ia64/linux-xen/mca_asm.S |   27 ++++++++++++++++++++-------
 1 files changed, 20 insertions(+), 7 deletions(-)

diff -r ec3f4e9e62f6 -r 687de7ae2298 xen/arch/ia64/linux-xen/mca_asm.S
--- a/xen/arch/ia64/linux-xen/mca_asm.S Thu Sep 27 15:35:02 2007 -0600
+++ b/xen/arch/ia64/linux-xen/mca_asm.S Thu Sep 27 16:24:02 2007 -0600
@@ -195,6 +195,10 @@ 3: add r4 = r6, r3;;                                       
\
  */
 
 ia64_do_tlb_purge:
+#ifdef XEN
+       // This needs to be called in order for GET_THIS_PADDR to work
+       SET_PER_CPU_DATA();;
+#endif
 #define O(member)      IA64_CPUINFO_##member##_OFFSET
 
        GET_THIS_PADDR(r2, cpu_info)    // load phys addr of cpu_info into r2
@@ -263,7 +267,16 @@ 4:
        srlz.i
        ;;
        // 4. Purge DTR for stack.
+#ifdef XEN
+       // Kernel registers are saved in a per_cpu cpu_kr_ia64_t
+       // to allow the kernel registers themselves to be used by domains.
+       GET_THIS_PADDR(r2, cpu_kr);;
+       add r2=IA64_KR_CURRENT_STACK_OFFSET,r2
+       ;;
+       ld8 r16=[r2]
+#else
        mov r16=IA64_KR(CURRENT_STACK)
+#endif
        ;;
        shl r16=r16,IA64_GRANULE_SHIFT
        movl r19=PAGE_OFFSET
@@ -277,8 +290,8 @@ 4:
        ;;
 #ifdef XEN
        // 5. VHPT
+       // r2 = __va_ul(vcpu_vhpt_maddr(v));
 #if VHPT_ENABLED
-       // r25 = __va_ul(vcpu_vhpt_maddr(v));
        GET_THIS_PADDR(r2,cpu_kr);;
        add r2=IA64_KR_CURRENT_OFFSET,r2;;
        ld8 r2=[r2];;
@@ -296,18 +309,18 @@ 4:
        add r2=IA64_VCPU_VHPT_MADDR_OFFSET,r2;;
        dep r2=0,r2,60,4;;                      // virtual to physical
        ld8 r2=[r2];; 
-       dep r25=-1,r2,60,4;;                    // physical to virtual
+       dep r2=-1,r2,60,4;;                     // physical to virtual
        br.sptk         .percpu_vhpt_done
 #endif
 .not_pervcpu_vhpt:
        GET_THIS_PADDR(r2, vhpt_paddr);; 
        ld8 r2=[r2];; 
-       dep r25=-1,r2,60,4;;                    // physical to virtual
+       dep r2=-1,r2,60,4;;                     // physical to virtual
 .percpu_vhpt_done:
-       dep r20=0,r25,0,IA64_GRANULE_SHIFT
-       mov r24=IA64_GRANULE_SHIFT<<2
-       ;;
-       ptr.d r20,r24
+       dep r16=0,r2,0,IA64_GRANULE_SHIFT
+       mov r18=IA64_GRANULE_SHIFT<<2
+       ;;
+       ptr.d r16,r18
        ;;
        srlz.d
        ;;

_______________________________________________
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] Kexec: Fix ia64_do_tlb_purge so that it works with XEN, Xen patchbot-unstable <=