All of lore.kernel.org
 help / color / mirror / Atom feed
From: gdavis@mvista.com (George G. Davis)
To: linux-arm-kernel@lists.infradead.org
Subject: [RFC/PATCH 5/7] ARM: Move get_thread_info macro definition to <asm/assembler.h>
Date: Fri, 14 Oct 2011 08:56:10 -0400	[thread overview]
Message-ID: <BDF2123C-D408-41B4-A10E-C108CEB201AF@mvista.com> (raw)
In-Reply-To: <alpine.LFD.2.02.1110132249290.17040@xanadu.home>


On Oct 13, 2011, at 10:54 PM, Nicolas Pitre wrote:

> On Thu, 13 Oct 2011, George G. Davis wrote:
> 
>> 
>> On Oct 13, 2011, at 10:34 AM, Russell King - ARM Linux wrote:
>> 
>>> On Wed, Oct 12, 2011 at 02:04:33AM -0400, gdavis at mvista.com wrote:
>>>> diff --git a/arch/arm/include/asm/assembler.h b/arch/arm/include/asm/assembler.h
>>>> index 78397d0..eaf4939 100644
>>>> --- a/arch/arm/include/asm/assembler.h
>>>> +++ b/arch/arm/include/asm/assembler.h
>>>> @@ -36,6 +36,20 @@
>>>> 	.endm
>>>> #endif  /* !CONFIG_THUMB2_KERNEL */
>>>> 
>>>> +	.macro	preempt_disable, tsk, cnt
>>>> +	get_thread_info \tsk
>>>> +	ldr	\cnt, [\tsk, #TI_PREEMPT]
>>>> +	add	\cnt, \cnt, #1
>>>> +	str	\cnt, [\tsk, #TI_PREEMPT]
>>>> +	.endm
>>>> +
>>>> +	.macro	preempt_enable, tsk, cnt
>>>> +	get_thread_info \tsk
>>>> +	ldr	\cnt, [\tsk, #TI_PREEMPT]
>>>> +	sub	\cnt, \cnt, #1
>>>> +	str	\cnt, [\tsk, #TI_PREEMPT]
>>>> +	.endm
>>>> +
>>>> /*
>>>> * Endian independent macros for shifting bytes within registers.
>>>> */
>>>> 
>>>> 
>>>> Not as efficient as it could be but I imagine the macros could
>>>> be written to support optional load of \tsk and/or optional \tmp
>>>> parameters to cover other common cases.
>>> 
>>> It's actually not that simple either: if you disable preemption, then you
>>> need to check for a preempt event after re-enabling preemption.  The
>>> C level code does this:
>>> 
>>> #define preempt_enable_no_resched() \
>>> do { \
>>>       barrier(); \
>>>       dec_preempt_count(); \
>>> } while (0)
>>> 
>>> #define preempt_check_resched() \
>>> do { \
>>>       if (unlikely(test_thread_flag(TIF_NEED_RESCHED))) \
>>>               preempt_schedule(); \
>>> } while (0)
>>> 
>>> #define preempt_enable() \
>>> do { \
>>>       preempt_enable_no_resched(); \
>>>       barrier(); \
>>>       preempt_check_resched(); \
>>> } while (0)
>>> 
>>> Note that preempt_schedule() will check the preempt count itself and
>>> return immediately if non-zero or irqs are disabled.
>> 
>> It would be easier to just insert preempt_disable/preempt_enable in
>> the cache and proc function call macros.  I did that in an earlier test
>> patch but moved it into the cache-v6.S and proc-v6.S files instead
>> since it only affects ARM11 MPCore as far as I'm aware.
> 
> Alternately, why don't you simply disable IRQs locally?  No preemption 
> can happen until enabled again, just like preempt_disable() would do, 
> and the IRQ off period should be short enough not to visibly affect IRQ 
> latency.  And that is easily done in assembly too, without preventing 
> rescheduling if needed afterwards.

I didn't want to impact interrupt latency but yes, that would work as well
and is easier to implement.  : )

--
Regards,
George

> 
> 
> Nicolas

  reply	other threads:[~2011-10-14 12:56 UTC|newest]

Thread overview: 93+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-06-20 13:43 parallel load of modules on an ARM multicore EXTERNAL Waechtler Peter (Fa. TCP, CM-AI/PJ-CF31)
2011-06-21 15:50 ` Catalin Marinas
2011-06-23 14:39   ` AW: " EXTERNAL Waechtler Peter (Fa. TCP, CM-AI/PJ-CF31)
2011-06-23 14:52     ` Catalin Marinas
2011-06-23 15:12       ` Russell King - ARM Linux
2011-06-23 15:34         ` Catalin Marinas
2011-06-23 17:02           ` Catalin Marinas
2011-06-23 15:20       ` AW: " EXTERNAL Waechtler Peter (Fa. TCP, CM-AI/PJ-CF31)
2011-07-07  4:25   ` George G. Davis
2011-10-20  4:04   ` George G. Davis
2011-09-22  7:29 ` George G. Davis
2011-09-22  8:52   ` Catalin Marinas
2011-10-06  4:29     ` George G. Davis
2011-10-06  5:08       ` [RFC/PATCH 0/7] ARM: ARM11 MPCore preemption/task migration cache coherency fixups gdavis at mvista.com
2011-10-06  5:08         ` [RFC/PATCH 1/7] ARM: ARM11 MPCore: pgd_alloc is not preempt safe gdavis at mvista.com
2011-10-06 16:35           ` Russell King - ARM Linux
2011-10-06 19:38             ` George G. Davis
2011-10-06  5:08         ` [RFC/PATCH 2/7] ARM: ARM11 MPCore: pte_alloc_one{, _kernel} are " gdavis at mvista.com
2011-10-06  5:08         ` [RFC/PATCH 3/7] ARM: ARM11 MPCore: {clean, flush}_pmd_entry " gdavis at mvista.com
2011-10-06  5:08         ` [RFC/PATCH 4/7] ARM: ARM11 MPCore: clean_dcache_area is " gdavis at mvista.com
2011-10-06  5:08         ` [RFC/PATCH 5/7] ARM: Move get_thread_info macro definition to <asm/assembler.h> gdavis at mvista.com
2011-10-06  5:08         ` [RFC/PATCH 6/7] ARM: ARM11 MPCore: DMA_CACHE_RWFO operations are not preempt safe gdavis at mvista.com
2011-10-06 16:40           ` Russell King - ARM Linux
2011-10-06 19:41             ` George G. Davis
2011-10-06  5:08         ` [RFC/PATCH 7/7] ARM: ARM11 MPCore: cpu_v6_set_pte_ext is " gdavis at mvista.com
2011-10-06  7:46           ` Russell King - ARM Linux
2011-10-06 12:35             ` George G. Davis
2011-10-07  2:38         ` [RFC/PATCH v2 0/7] ARM11 MPCore: preemption/task migration cache coherency fixups gdavis at mvista.com
2011-10-07  2:38           ` [RFC/PATCH 1/7] ARM: ARM11 MPCore: pgd_alloc is not preempt safe gdavis at mvista.com
2011-10-07  2:38           ` [RFC/PATCH 2/7] ARM: ARM11 MPCore: pte_alloc_one{, _kernel} are " gdavis at mvista.com
2011-10-07  7:47             ` [RFC/PATCH 2/7] ARM: ARM11 MPCore: pte_alloc_one{,_kernel} " Russell King - ARM Linux
2011-10-07 15:31               ` [RFC/PATCH 2/7] ARM: ARM11 MPCore: pte_alloc_one{, _kernel} " George G. Davis
2011-10-07  2:38           ` [RFC/PATCH 3/7] ARM: ARM11 MPCore: {clean, flush}_pmd_entry " gdavis at mvista.com
2011-10-11  9:53             ` [RFC/PATCH 3/7] ARM: ARM11 MPCore: {clean,flush}_pmd_entry " Catalin Marinas
2011-10-12  2:34               ` [RFC/PATCH 3/7] ARM: ARM11 MPCore: {clean, flush}_pmd_entry " George G. Davis
2011-10-13 14:31                 ` [RFC/PATCH 3/7] ARM: ARM11 MPCore: {clean,flush}_pmd_entry " Russell King - ARM Linux
2011-10-14  1:34                   ` [RFC/PATCH 3/7] ARM: ARM11 MPCore: {clean, flush}_pmd_entry " George G. Davis
2011-10-07  2:38           ` [RFC/PATCH 4/7] ARM: ARM11 MPCore: clean_dcache_area is " gdavis at mvista.com
2011-10-07  2:38           ` [RFC/PATCH 5/7] ARM: Move get_thread_info macro definition to <asm/assembler.h> gdavis at mvista.com
2011-10-11  9:56             ` Catalin Marinas
2011-10-12  6:04               ` gdavis at mvista.com
2011-10-13 14:34                 ` Russell King - ARM Linux
2011-10-13 14:49                   ` Catalin Marinas
2011-10-13 14:53                     ` Russell King - ARM Linux
2011-10-14  1:46                       ` George G. Davis
2011-10-14  1:44                     ` George G. Davis
2011-10-14  1:42                   ` George G. Davis
2011-10-14  2:54                     ` Nicolas Pitre
2011-10-14 12:56                       ` George G. Davis [this message]
2011-10-07  2:38           ` [RFC/PATCH 6/7] ARM: ARM11 MPCore: DMA_CACHE_RWFO operations are not preempt safe gdavis at mvista.com
2011-10-07  2:38           ` [RFC/PATCH 7/7] ARM: ARM11 MPCore: cpu_v6_set_pte_ext is " gdavis at mvista.com
2011-10-07 16:26           ` [RFC/PATCH v3 0/7] ARM11 MPCore: preemption/task migration cache coherency fixups gdavis at mvista.com
2011-10-07 16:26             ` [RFC/PATCH v3 1/7] ARM: ARM11 MPCore: pgd_alloc is not preempt safe gdavis at mvista.com
2011-10-07 16:26             ` [RFC/PATCH v3 2/7] ARM: ARM11 MPCore: pte_alloc_one{, _kernel} are " gdavis at mvista.com
2011-10-07 16:26             ` [RFC/PATCH v3 3/7] ARM: ARM11 MPCore: {clean, flush}_pmd_entry " gdavis at mvista.com
2011-10-07 16:26             ` [RFC/PATCH v3 4/7] ARM: ARM11 MPCore: clean_dcache_area is " gdavis at mvista.com
2011-10-07 16:26             ` [RFC/PATCH v3 5/7] ARM: Move get_thread_info macro definition to <asm/assembler.h> gdavis at mvista.com
2011-10-07 16:26             ` [RFC/PATCH v3 6/7] ARM: ARM11 MPCore: DMA_CACHE_RWFO operations are not preempt safe gdavis at mvista.com
2011-10-07 16:26             ` [RFC/PATCH v3 7/7] ARM: ARM11 MPCore: cpu_v6_set_pte_ext is " gdavis at mvista.com
2011-10-18 13:47             ` [RFC/PATCH v4 0/7] ARM11 MPCore: preemption/task migration cache coherency fixups gdavis at mvista.com
2011-10-18 13:47               ` [RFC/PATCH v4 1/7] ARM: ARM11 MPCore: pgd_alloc is not preempt safe gdavis at mvista.com
2011-10-18 13:47               ` [RFC/PATCH v4 2/7] ARM: ARM11 MPCore: pte_alloc_one{, _kernel} are " gdavis at mvista.com
2011-10-18 13:47               ` [RFC/PATCH v4 3/7] ARM: ARM11 MPCore: {clean, flush}_pmd_entry " gdavis at mvista.com
2011-10-18 13:47               ` [RFC/PATCH v4 4/7] ARM: ARM11 MPCore: clean_dcache_area is " gdavis at mvista.com
2011-10-18 17:08                 ` Tony Lindgren
2011-10-18 17:30                   ` George G. Davis
2011-10-18 17:43                     ` Tony Lindgren
2011-10-18 18:13                       ` George G. Davis
2011-10-18 13:47               ` [RFC/PATCH v4 5/7] ARM: Move get_thread_info macro definition to <asm/assembler.h> gdavis at mvista.com
2011-10-18 13:47               ` [RFC/PATCH v4 6/7] ARM: ARM11 MPCore: DMA_CACHE_RWFO operations are not preempt safe gdavis at mvista.com
2011-10-18 21:28                 ` Nicolas Pitre
2011-10-18 23:26                   ` George G. Davis
2011-10-19  1:09                     ` Nicolas Pitre
2011-10-18 13:47               ` [RFC/PATCH v4 7/7] ARM: ARM11 MPCore: cpu_v6_set_pte_ext is " gdavis at mvista.com
2011-10-18 21:52                 ` Nicolas Pitre
2011-10-18 23:29                   ` George G. Davis
2012-06-12 20:40               ` [RFC/PATCH v5 0/7] ARM11 MPCore: preemption/task migration cache coherency fixups gdavis at mvista.com
2012-06-12 20:40                 ` [RFC/PATCH v5 1/7] ARM: ARM11 MPCore: Make pgd_alloc preempt safe gdavis at mvista.com
2012-06-12 20:40                 ` [RFC/PATCH v5 2/7] ARM: ARM11 MPCore: Make pte_alloc_one{, _kernel} " gdavis at mvista.com
2012-06-12 20:40                 ` [RFC/PATCH v5 3/7] ARM: ARM11 MPCore: Make {clean, flush}_pmd_entry " gdavis at mvista.com
2012-06-12 20:40                 ` [RFC/PATCH v5 4/7] ARM: Move get_thread_info macro definition to <asm/assembler.h> gdavis at mvista.com
2012-06-12 20:40                 ` [RFC/PATCH v5 5/7] ARM: ARM11 MPCore: cpu_v6_dcache_clean_area needs RFO gdavis at mvista.com
2012-06-13  9:32                   ` Catalin Marinas
2012-06-13  9:36                     ` Russell King - ARM Linux
2012-06-13  9:41                       ` Catalin Marinas
2012-06-13  9:45                         ` Russell King - ARM Linux
2012-06-13  9:54                           ` Catalin Marinas
2012-06-13 11:36                       ` George G. Davis
2012-06-13 11:21                     ` George G. Davis
2012-06-12 20:40                 ` [RFC/PATCH v5 6/7] ARM: ARM11 MPCore: Make DMA_CACHE_RWFO operations preempt safe gdavis at mvista.com
2012-06-12 20:40                 ` [RFC/PATCH v5 7/7] ARM: ARM11 MPCore: Make cpu_v6_set_pte_ext " gdavis at mvista.com
2012-06-13  9:34                   ` Catalin Marinas
2012-06-13 11:35                     ` George G. Davis

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=BDF2123C-D408-41B4-A10E-C108CEB201AF@mvista.com \
    --to=gdavis@mvista.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.