From 51875dac89e323d1a0eebc301a2122903bbb58ba Mon Sep 17 00:00:00 2001 From: gdisirio Date: Thu, 16 Jun 2011 19:56:47 +0000 Subject: Fixed bug 3317500, retested impacted ports. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@3047 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/ports/IAR/ARMCMx/chcoreasm_v6m.s | 20 +++++++++----------- os/ports/IAR/ARMCMx/chcoreasm_v7m.s | 25 ++++++++----------------- 2 files changed, 17 insertions(+), 28 deletions(-) (limited to 'os/ports/IAR/ARMCMx') diff --git a/os/ports/IAR/ARMCMx/chcoreasm_v6m.s b/os/ports/IAR/ARMCMx/chcoreasm_v6m.s index ef72de53c..a05ce3aa1 100644 --- a/os/ports/IAR/ARMCMx/chcoreasm_v6m.s +++ b/os/ports/IAR/ARMCMx/chcoreasm_v6m.s @@ -110,7 +110,11 @@ PendSVVector: */ PUBLIC _port_switch_from_isr _port_switch_from_isr: + bl chSchIsRescRequiredExI + cmp r0, #0 + beq noresch bl chSchDoRescheduleI +noresch: ldr r2, =SCB_ICSR movs r3, #128 #if CORTEX_ALTERNATE_SWITCH @@ -129,25 +133,19 @@ waithere: */ PUBLIC _port_irq_epilogue _port_irq_epilogue: - push {r3, lr} + push {lr} adds r0, r0, #15 - beq stillnested + beq skipexit cpsid i - bl chSchIsRescRequiredExI - cmp r0, #0 - bne doresch - cpsie i -stillnested - pop {r3, pc} -doresch mrs r3, PSP subs r3, r3, #32 msr PSP, r3 ldr r2, =_port_switch_from_isr str r2, [r3, #24] movs r2, #128 - lsls r2, r2, #17 + lsls r2, r2, #17 str r2, [r3, #28] - pop {r3, pc} +skipexit: + pop {pc} END diff --git a/os/ports/IAR/ARMCMx/chcoreasm_v7m.s b/os/ports/IAR/ARMCMx/chcoreasm_v7m.s index 65531ff8c..8367fcdb0 100644 --- a/os/ports/IAR/ARMCMx/chcoreasm_v7m.s +++ b/os/ports/IAR/ARMCMx/chcoreasm_v7m.s @@ -76,7 +76,10 @@ _port_thread_start: */ PUBLIC _port_switch_from_isr _port_switch_from_isr: + bl chSchIsRescRequiredExI + cbz r0, .L2 bl chSchDoRescheduleI +.L2: #if CORTEX_SIMPLIFIED_PRIORITY mov r3, #LWRD SCB_ICSR movt r3, #HWRD SCB_ICSR @@ -102,20 +105,16 @@ _port_irq_epilogue: mov r3, #LWRD SCB_ICSR movt r3, #HWRD SCB_ICSR ldr r3, [r3, #0] - tst r3, #ICSR_RETTOBASE - bne .L7 + ands r3, r3, #ICSR_RETTOBASE + bne .L8 #if CORTEX_SIMPLIFIED_PRIORITY cpsie i #else - movs r3, #CORTEX_BASEPRI_DISABLED + /* Note, R3 is already zero.*/ msr BASEPRI, r3 #endif bx lr -.L7: - push {r3, lr} - bl chSchIsRescRequiredExI - cmp r0, #0 - beq .L4 +.L8: mrs r3, PSP subs r3, r3, #EXTCTX_SIZE msr PSP, r3 @@ -123,15 +122,7 @@ _port_irq_epilogue: str r2, [r3, #24] mov r2, #0x01000000 str r2, [r3, #28] - pop {r3, pc} -.L4: -#if CORTEX_SIMPLIFIED_PRIORITY - cpsie i -#else - movs r3, #CORTEX_BASEPRI_DISABLED - msr BASEPRI, r3 -#endif - pop {r3, pc} + bx lr /* * SVC vector. -- cgit v1.2.3