[RFC/PATCH 7/7] ARM: ARM11 MPCore: cpu_v6_set_pte_ext is not preempt safe

George G. Davis gdavis at mvista.com
Thu Oct 6 08:35:08 EDT 2011


On Oct 6, 2011, at 3:46 AM, Russell King - ARM Linux wrote:

> On Thu, Oct 06, 2011 at 01:08:34AM -0400, gdavis at mvista.com wrote:
>> diff --git a/arch/arm/mm/proc-v6.S b/arch/arm/mm/proc-v6.S
>> index a923aa0..dd2e5e5 100644
>> --- a/arch/arm/mm/proc-v6.S
>> +++ b/arch/arm/mm/proc-v6.S
>> @@ -122,7 +122,18 @@ ENTRY(cpu_v6_switch_mm)
>> 
>> ENTRY(cpu_v6_set_pte_ext)
>> #ifdef CONFIG_MMU
>> +#ifdef CONFIG_PREEMPT
>> +	ALT_SMP(stmdb	sp!, {r4, r10, r11})
>> +	ALT_SMP(get_thread_info r10)
>> +	ALT_SMP(ldr	r4, [r10, #TI_PREEMPT])	@ get preempt count
>> +	ALT_SMP(add	r11, r4, #1)		@ increment it
>> +	ALT_SMP(str	r11, [r10, #TI_PREEMPT])	@ disable preempt
>> +#endif
>> 	armv6_set_pte_ext cpu_v6
>> +#ifdef CONFIG_PREEMPT
>> +	ALT_SMP(str	r4, [r10, #TI_PREEMPT])	@ restore preempt count
>> +	ALT_SMP(ldmia	sp!, {r4, r10, r11})
>> +#endif
>> #endif
> 
> And what effect do you expect the above to have?

My goal was to be proactive, heading off a request to use this macro for
the SMP case since preempt disable is only required on ARM11 MPCore.
I thought this would achieve that goal, only using those instructions on SMP,
not UP machines.

> Do you understand the purpose of the ALT_SMP macro?

Clearly I don't understand the use case.

> Do you understand that it should be paired with ALT_UP ?

No, I did not know that.  I'll remove use of ALT_SMP and add CONFIG_SMP
as a conditional compile dependency then.  Is that OK?

Thanks!

--
Regards,
George




More information about the linux-arm-kernel mailing list