[IA64-SGI] Fix SN PTC deadlock recovery
authorJack Steiner <steiner@sgi.com>
Tue, 6 Dec 2005 14:05:24 +0000 (08:05 -0600)
committerTony Luck <tony.luck@intel.com>
Tue, 6 Dec 2005 17:13:42 +0000 (09:13 -0800)
The patch that added support for a new platform chipset (shub2) broke
PTC deadlock recovery on older versions of the chipset. (PTCs are the
SN platform-specific method for doing a global TLB purge). This
patch fixes deadlock recovery so that it works on both the old & new
chipsets.

Signed-off-by: Jack Steiner <steiner@sgi.com>
Signed-off-by: Tony Luck <tony.luck@intel.com>
arch/ia64/sn/kernel/sn2/ptc_deadlock.S

index 3fa95065a4460e618a4cb4d4e1979ed830fc6cee..bebbcc4f8dd408df200a3a7f330a78a04a6cc26a 100644 (file)
@@ -39,9 +39,13 @@ sn2_ptc_deadlock_recovery_core:
        mov     r8=r0
 
 1:
+       cmp.ne  p8,p9=r0,ptc1           // Test for shub type (ptc1 non-null on shub1)
+                                       // p8 = 1 if shub1, p9 = 1 if shub2
+
        add     scr2=ALIAS_OFFSET,piowc // Address of WRITE_STATUS alias register 
-       ;;
-       ld8.acq scr1=[scr2];;
+       mov     scr1=7;;                // Clear DEADLOCK, WRITE_ERROR, MULTI_WRITE_ERROR
+(p8)   st8.rel [scr2]=scr1;;
+(p9)   ld8.acq scr1=[scr2];;
 
 5:     ld8.acq scr1=[piowc];;          // Wait for PIOs to complete.
        hint    @pause