[PATCH rt-3.6 0/3] Fix up mishandling of PREEMPT_RCU dependency

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I'd mentioned this when rt29 was announced, but there was yet one
more piece of the puzzle I hadn't figured out until rt30 (#4 below).

The executive summary is that we inserted an invalid dependency, but
then via another incorrect patch, reverted that dependency, and hence
it is still possible to select RT_FULL without PREEMPT_RCU.  We can
dump two patches from the queue by cleaning this up.

This commit message (from #2 below):

   PREEMPT_RT relies on PREEMPT_RCU - only allow RCU to be configured
   interactively in the !PREEMPT_RT case.

captures what we want(ed) to happen but wasn't what was actually
happening (note that PREEMPT_RT implicitly means RT_FULL here;
the log was written before RT_FULL existed).

A stacking effect of errors that is typical of large patch queues
that get carried forward over time took place.  It goes back at
least as far as rt-3.2

Here are the gory details:

1) We have "sched-disable-rt-group-sched-on-rt.patch" which adds a
"depends !PREEMPT_RT_FULL" to RT_GROUP_SCHED.

2) The patch "rcu-force-preempt-rcu-for-rt.patch" got mangled during
a carry forward.  It has the commit log quoted above, but instead
of doing that, it just reverts the sched patch above in #1.

3) The bug that #1 fixed got "rediscovered" and so 
"rt-disable-rt-group-sched.patch" got added as an accidental
duplicate of the earlier sched patch in #1. (instead of fixing #2)

4) Fixing patch #2, so it adds a "depends !PREEMPT_RT_FULL" to the
proper block (i.e. PREEMPT_RCU instead of RT_GROUP_SCHED) doesn't
have the desired effect of making PREEMPT_RCU enabled and non
interactive, instead it simply makes it go away entirely when
RT_FULL is enabled (and then you get compile failures, etc.)

So, to fix all of that, we throw away the duplicate from #3,
delete #2 entirely, since it is an accidental revert and can't
be salvaged (as per #4).  And finally, to achieve the goal of
having PREEMPT_RCU be always set non-interactively for RT_FULL=y
we simply add a select for it in the RT_FULL Kconfig control block.
That is added into the patch which introduces RT_FULL.

Overall, this is primarily a queue maintenance thing and not really
that interesting to the end users, since diffing the two trees after
running the updated queue results in only this difference:

 -------------------------------------
 $ git diff v3.6.11-rt30 v3.6.11-rt30-fixes
 diff --git a/kernel/Kconfig.preempt b/kernel/Kconfig.preempt
 index 3050029..38cecfe 100644
 --- a/kernel/Kconfig.preempt
 +++ b/kernel/Kconfig.preempt
 @@ -77,6 +77,7 @@ config PREEMPT_RT_FULL
         bool "Fully Preemptible Kernel (RT)"
         depends on IRQ_FORCED_THREADING
         select PREEMPT_RT_BASE
 +       select PREEMPT_RCU
         help
           All and everything
  
 $ 
 -------------------------------------
 
I'm posting this since even if there isn't a v3.6.11-rt31, ideally we'd
like to see this not get carried forward to yet another release.

Thanks,
Paul.
---

The following changes since commit bb102e108f5d60068b3a5564f0f1f314d4c72332:

  patches-3.6.11-rt30.tar.xz (2013-02-19 18:33:41 -0500)

are available in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/paulg/3.6-rt-patches.git v3.6.11-rt30-fixes

for you to fetch changes up to 55c97947531d88af6cf9f56ccccb41e26c7f8cd5:

  preempt-rcu: untangle kconfig RT_FULL/PREEMPT_RCU relationship (2013-02-20 19:05:38 -0500)

----------------------------------------------------------------
Paul Gortmaker (3):
      rt: drop duplicated rt-disable-rt-group-sched.patch
      rt: fix mispatch of Kconfig by rcu-force-preempt-rcu-for-rt.patch
      preempt-rcu: untangle kconfig RT_FULL/PREEMPT_RCU relationship

 kconfig-preempt-rt-full.patch      |  3 ++-
 rcu-force-preempt-rcu-for-rt.patch | 28 ----------------------------
 rt-disable-rt-group-sched.patch    | 29 -----------------------------
 series                             |  4 ++--
 4 files changed, 4 insertions(+), 60 deletions(-)
 delete mode 100644 rcu-force-preempt-rcu-for-rt.patch
 delete mode 100644 rt-disable-rt-group-sched.patch
--
To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [RT Stable]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]

  Powered by Linux