This is the mail archive of the
ecos-discuss@sourceware.org
mailing list for the eCos project.
RE: cortex a9 SMP spinlock
You must make sure that your store operation has succeeded. It applies for both the set and clear.
Christophe
-----Original Message-----
From: Fan Chongbin-B32609 [mailto:B32609@freescale.com]
Sent: 31. januar 2011 06:12
To: Christophe Coutand; ecos-discuss@ecos.sourceware.org
Subject: RE: [ECOS] cortex a9 SMP spinlock
My implementation:
#define HAL_TAS_SET( _tas_, _oldb_ ) \
CYG_MACRO_START \
{ \
register CYG_WORD32 __old; \
register CYG_WORD32 __tas = &_tas_; \
__asm__ volatile ( \
"mov r1,#1\n" \
"ldrex r0,[%1]\n" \
"cmp r0,#0" \
"strexeq %0,r1,[%1]\n" \
: "=r" (__old), "=r" (__tas), \
: \
: "memory","r1","r0" \
); \
_oldb_ = ( __old & 1 ) != 0; \
} \
CYG_MACRO_END
#define HAL_TAS_CLEAR( _tas_, _oldb_ ) \
CYG_MACRO_START \
{ \
register CYG_WORD32 __tas = &_tas_; \
__asm__ volatile ( \
" mov r1,#0\n" \
" str r1,[%0]\n" \
" dsb\n" \
: "=r" (__tas) \
: \
: "memory","r1" \
); \
} \
CYG_MACRO_END
Because of the lack of the real target board, I did not know it worked or not. So, guys, give me some advice.
BR
Jerry
-----Original Message-----
From: Christophe Coutand [mailto:ccoutand@stmi.com]
Sent: 2011年1月30日 17:57
To: Fan Chongbin-B32609; ecos-discuss@ecos.sourceware.org
Subject: RE: [ECOS] cortex a9 SMP spinlock
You can find some inputs here:
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0489b/Cih
bghef.html
Christophe
-----Original Message-----
From: ecos-discuss-owner@ecos.sourceware.org
[mailto:ecos-discuss-owner@ecos.sourceware.org] On Behalf Of Fan
Chongbin-B32609
Sent: 30. januar 2011 10:31
To: ecos-discuss@ecos.sourceware.org
Subject: [ECOS] cortex a9 SMP spinlock
Hi, all
For cortex-a9 SMP, how to implement HAL_TAS_SET(_tas, _oldb_) macro?
BR
Jerry
--
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss
--
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss