On 2015-02-19 15:40, Gilles Chanteperdrix wrote:
> On Thu, Feb 19, 2015 at 03:32:14PM +0100, Jan Kiszka wrote:
>> On return from exception, we want to check if the current context is
>> root or head to take the fast exit in the latter case. TIP_HEAD is set
>> then, thus we have to check for 'ne' (Z==0) after tst.
>>
>> This affects only non-legacy users.
>>
>> Signed-off-by: Jan Kiszka <[email protected]>
>> ---
>>
>> This is for 3.14, but it should equally well apply to 3.16. Fixes both
>> sigdebug test as well as the weird sshd deaths on the virtual vexpress
>> target.
>>
>>  arch/arm/kernel/entry-armv.S | 4 ++--
>>  1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S
>> index a608340..f6ef839 100644
>> --- a/arch/arm/kernel/entry-armv.S
>> +++ b/arch/arm/kernel/entry-armv.S
>> @@ -736,8 +736,8 @@ ENTRY(ret_from_exception)
>>      get_thread_info tsk
>>      ldr     r0, [tsk, #TI_IPIPE]
>>      tst     r0, #_TIP_HEAD
>> - THUMB(     it eq)
>> -    beq     __ipipe_ret_to_user_irqs_disabled  @ Fast exit path over 
>> non-root domains
>> + THUMB(     it ne)
>> +    bne     __ipipe_ret_to_user_irqs_disabled  @ Fast exit path
>> over non-root domains
> 
> Mmm. Looks suspicious. The semantics of the PSR flags with tst is
> contrary to to what one would believe. No, from compiling a small
> example, it would seem you are right.

It took me a while to confirm this as well: 'tst' is 'and' without
writeback. "val & FLAG" gives non-zero if FLAG is set in val. Non-zero
(Z==0) is tested by 'ne'.

On x86, there are these nice jnz/jz aliases for that purpose.

Jan

-- 
Siemens AG, Corporate Technology, CT RTC ITP SES-DE
Corporate Competence Center Embedded Linux

_______________________________________________
Xenomai mailing list
[email protected]
http://www.xenomai.org/mailman/listinfo/xenomai

Reply via email to