Thread (31 messages) 31 messages, 8 authors, 2015-10-01

Lifecycle

  1. Posted rjw@rjwysocki.net (Rafael J. Wysocki)

[PATCH v2 7/7] ARM: smp: Add runtime PM support for CPU hotplug

From: Rafael J. Wysocki <hidden>
Date: 2015-09-07 20:42:20
Also in: linux-pm

On Monday, September 07, 2015 04:37:44 PM Grygorii Strashko wrote:
On 09/07/2015 04:04 PM, Rafael J. Wysocki wrote:
quoted
On Saturday, September 05, 2015 11:39:20 AM Alan Stern wrote:
quoted
On Sat, 5 Sep 2015, Grygorii Strashko wrote:
quoted
On 09/04/2015 09:45 PM, Alan Stern wrote:
quoted
On Fri, 4 Sep 2015, Grygorii Strashko wrote:
quoted
There is one "small" problem with such approach :(

- It's incompatible with -RT kernel, because PM runtime can't be used
in atomic context on -RT.
Can you explain this more fully?  Why can't runtime PM be used in
atomic context in the -rt kernels?
  
See:
  http://lwn.net/Articles/146861/
  https://rt.wiki.kernel.org/index.php/Frequently_Asked_Questions#How_does_the_CONFIG_PREEMPT_RT_patch_work.3F

spinlock_t
     Critical sections are preemptible. The _irq operations (e.g., spin_lock_irqsave())
  do -not- disable hardware interrupts. Priority inheritance is used to prevent priority
  inversion. An underlying rt_mutex is used to implement spinlock_t in PREEMPT_RT.

As result, have to do things like:
https://lkml.org/lkml/2015/8/18/161
https://lkml.org/lkml/2015/8/18/162

Sorry for brief reply - Friday/Sat night :)
I see.  Although we normally think of interrupt contexts as being
atomic, in an -rt kernel this isn't true any more because things like
spin_lock_irq don't actually disable interrupts.

Therefore it would be correct to say that in -rt kernels, runtime PM
can be used in interrupt context (if the device is marked as irq-safe),
but not in atomic context.  Right?
Right.

Whatever is suitable for interrupt context in the mainline, will be suitable
for that in -rt kernels too. 
Not exactly true :(, since spinlock is converted to [rt_] mutex.
Usually, this difference can't be seen because on -RT kernel all or
mostly all HW IRQ handlers will be forced to be threaded.
Exactly.  And that's what I'm talking about.
For the cases, where such automatic conversion is not working,
(like chained irq handlers or HW-handler+Threaded handler) the code
has to be carefully patched to work properly as for non-RT as for -RT.
Right.
Also, this triggers some -RT incompatibility issues, like with PM runtime or
That I'm not sure about.  Why would runtime PM cause problems with -RT (apart
from attempts to use it from the idle loop, but that's not happening in the
mainline anyway)?
CLK framework (http://www.spinics.net/lists/linux-rt-users/msg13653.html).
quoted
However, what is suitable for the idle loop
in the mainline, may not be suitable for that in -rt kernels.

That's why raw_spin_lock/unlock() need to be used within the idle loop.
Indeed. CPU hotplug/CPUIdle is guarded by local_irq_disable()/local_irq_enable().
(example of CPU hotplug RT-issue http://www.spinics.net/lists/arm-kernel/msg438963.html).

I don't want to be the final authority here as my experience with -RT is short.
But, I want to point out on potential issues based on what I've already discovered
and tried to fix.
OK

Thanks,
Rafael
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help