diff options
Diffstat (limited to 'arch/blackfin/mach-common/entry.S')
-rw-r--r-- | arch/blackfin/mach-common/entry.S | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/arch/blackfin/mach-common/entry.S b/arch/blackfin/mach-common/entry.S index bc08c98d008d..4845d51e88a6 100644 --- a/arch/blackfin/mach-common/entry.S +++ b/arch/blackfin/mach-common/entry.S | |||
@@ -952,8 +952,17 @@ ENDPROC(_evt_up_evt14) | |||
952 | #ifdef CONFIG_IPIPE | 952 | #ifdef CONFIG_IPIPE |
953 | 953 | ||
954 | _resume_kernel_from_int: | 954 | _resume_kernel_from_int: |
955 | r1 = LO(~0x8000) (Z); | ||
956 | r1 = r0 & r1; | ||
957 | r0 = 1; | ||
958 | r0 = r1 - r0; | ||
959 | r2 = r1 & r0; | ||
960 | cc = r2 == 0; | ||
961 | /* Sync the root stage only from the outer interrupt level. */ | ||
962 | if !cc jump .Lnosync; | ||
955 | r0.l = ___ipipe_sync_root; | 963 | r0.l = ___ipipe_sync_root; |
956 | r0.h = ___ipipe_sync_root; | 964 | r0.h = ___ipipe_sync_root; |
965 | [--sp] = reti; | ||
957 | [--sp] = rets; | 966 | [--sp] = rets; |
958 | [--sp] = ( r7:4, p5:3 ); | 967 | [--sp] = ( r7:4, p5:3 ); |
959 | SP += -12; | 968 | SP += -12; |
@@ -961,6 +970,8 @@ _resume_kernel_from_int: | |||
961 | SP += 12; | 970 | SP += 12; |
962 | ( r7:4, p5:3 ) = [sp++]; | 971 | ( r7:4, p5:3 ) = [sp++]; |
963 | rets = [sp++]; | 972 | rets = [sp++]; |
973 | reti = [sp++]; | ||
974 | .Lnosync: | ||
964 | rts | 975 | rts |
965 | #elif defined(CONFIG_PREEMPT) | 976 | #elif defined(CONFIG_PREEMPT) |
966 | 977 | ||