]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
Merge branches 'doc.2012.10.23c', 'fixes.2012.10.27a', 'srcu.2012.10.27a', 'stall...
authorPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Sat, 27 Oct 2012 23:01:16 +0000 (16:01 -0700)
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Sat, 27 Oct 2012 23:01:16 +0000 (16:01 -0700)
Resolved conflicts:
kernel/rcu.h
kernel/rcupdate.c
kernel/rcutree.c

13 files changed:
1  2  3  4  5  6  7 
Documentation/RCU/whatisRCU.txt
include/linux/rcupdate.h
include/linux/sched.h
kernel/rcu.h
kernel/rcupdate.c
kernel/rcutiny_plugin.h
kernel/rcutorture.c
kernel/rcutree.c
kernel/rcutree.h
kernel/rcutree_plugin.h
kernel/sched/core.c
kernel/srcu.c
lib/Kconfig.debug

Simple merge
Simple merge
Simple merge
diff --cc kernel/rcu.h
index 8ba99cdc651556305b5faf82d783e6475d14ec67,8ba99cdc651556305b5faf82d783e6475d14ec67,8ba99cdc651556305b5faf82d783e6475d14ec67,8ba99cdc651556305b5faf82d783e6475d14ec67,a88fa9f71b27c0690fa20b2aa3de26b243677a58,8ba99cdc651556305b5faf82d783e6475d14ec67,20dfba576c2b7efde60815321b5dce1c7e049e37..7ff057d7063d559274c415464f713f0abb33bfae
@@@@@@@@ -109,4 -109,4 -109,4 -109,4 -109,11 -109,4 -109,6 +109,13 @@@@@@@@ static inline bool __rcu_reclaim(char *
        }
       }
       
++++++ extern int rcu_expedited;
++++++ 
++++ ++#if defined(CONFIG_SMP) || defined(CONFIG_RCU_TRACE)
++++ ++
++++ ++extern int rcu_cpu_stall_suppress;
++++ ++int rcu_jiffies_till_stall_check(void);
++++ ++
++++ ++#endif /* defined(CONFIG_SMP) || defined(CONFIG_RCU_TRACE) */
++++ ++
       #endif /* __LINUX_RCU_H */
index 29ca1c6da59496133947e5a1c3d1a860ef261e3e,29ca1c6da59496133947e5a1c3d1a860ef261e3e,29ca1c6da59496133947e5a1c3d1a860ef261e3e,29ca1c6da59496133947e5a1c3d1a860ef261e3e,0b69443a06e763f40b2f997fa61b05d457f5fc29,29ca1c6da59496133947e5a1c3d1a860ef261e3e,a2cf76177b443d33bb30b19052524db385cb4fc9..06cec61be6f909fefe66c11cac925103b175785f
       #include <linux/export.h>
       #include <linux/hardirq.h>
       #include <linux/delay.h>
    -  #include <linux/moduleparam.h>
++++++ #include <linux/module.h>
       
       #define CREATE_TRACE_POINTS
       #include <trace/events/rcu.h>
Simple merge
Simple merge
index 74df86bd9204aef5ec9d14ca8b4b0094777bef87,74df86bd9204aef5ec9d14ca8b4b0094777bef87,ca3221595ed53475591d286de192bac718e98051,74df86bd9204aef5ec9d14ca8b4b0094777bef87,8ef81527a89f3641365529aef5ea8f20f75be40e,8ed9c481db035b4d59f486b6711d12e963b7faaf,effd47a54b361fe8839933b4b4586ef7f7a68455..9ce19c91231db51808e59c0f8d6ffd6d1998f524
@@@@@@@@ -212,20 -212,20 -212,20 -212,20 -212,14 -212,20 -212,20 +212,14 @@@@@@@@ DEFINE_PER_CPU(struct rcu_dynticks, rcu
       #endif
       };
       
-- ----static int blimit = 10;          /* Maximum callbacks per rcu_do_batch. */
-- ----static int qhimark = 10000;      /* If this many pending, ignore blimit. */
-- ----static int qlowmark = 100;       /* Once only this many pending, use blimit. */
++ ++++static long blimit = 10; /* Maximum callbacks per rcu_do_batch. */
++ ++++static long qhimark = 10000;     /* If this many pending, ignore blimit. */
++ ++++static long qlowmark = 100;      /* Once only this many pending, use blimit. */
       
-- ----module_param(blimit, int, 0444);
-- ----module_param(qhimark, int, 0444);
-- ----module_param(qlowmark, int, 0444);
-- - --
-- - --int rcu_cpu_stall_suppress __read_mostly; /* 1 = suppress stall warnings. */
-- - --int rcu_cpu_stall_timeout __read_mostly = CONFIG_RCU_CPU_STALL_TIMEOUT;
-- - --
-- - --module_param(rcu_cpu_stall_suppress, int, 0644);
-- - --module_param(rcu_cpu_stall_timeout, int, 0644);
++ ++++module_param(blimit, long, 0444);
++ ++++module_param(qhimark, long, 0444);
++ ++++module_param(qlowmark, long, 0444);
       
  -    int rcu_cpu_stall_suppress __read_mostly; /* 1 = suppress stall warnings. */
  -    int rcu_cpu_stall_timeout __read_mostly = CONFIG_RCU_CPU_STALL_TIMEOUT;
  -    
  -    module_param(rcu_cpu_stall_suppress, int, 0644);
  -    module_param(rcu_cpu_stall_timeout, int, 0644);
  -    
       static ulong jiffies_till_first_fqs = RCU_JIFFIES_TILL_FORCE_QS;
       static ulong jiffies_till_next_fqs = RCU_JIFFIES_TILL_FORCE_QS;
       
@@@@@@@@ -2308,10 -2308,10 -2347,10 -2308,10 -2301,10 -2305,32 -2314,10 +2343,32 @@@@@@@@ static int synchronize_sched_expedited_
        */
       void synchronize_sched_expedited(void)
       {
----- - int firstsnap, s, snap, trycount = 0;
+++++ + long firstsnap, s, snap;
+++++ + int trycount = 0;
+++++ + struct rcu_state *rsp = &rcu_sched_state;
++ +  +
  - -   /* Note that atomic_inc_return() implies full memory barrier. */
  - -   firstsnap = snap = atomic_inc_return(&sync_sched_expedited_started);
+++++ + /*
+++++ +  * If we are in danger of counter wrap, just do synchronize_sched().
+++++ +  * By allowing sync_sched_expedited_started to advance no more than
+++++ +  * ULONG_MAX/8 ahead of sync_sched_expedited_done, we are ensuring
+++++ +  * that more than 3.5 billion CPUs would be required to force a
+++++ +  * counter wrap on a 32-bit system.  Quite a few more CPUs would of
+++++ +  * course be required on a 64-bit system.
+++++ +  */
+++++ + if (ULONG_CMP_GE((ulong)atomic_long_read(&rsp->expedited_start),
+++++ +                  (ulong)atomic_long_read(&rsp->expedited_done) +
+++++ +                  ULONG_MAX / 8)) {
+++++ +         synchronize_sched();
+++++ +         atomic_long_inc(&rsp->expedited_wrap);
+++++ +         return;
+++++ + }
  + +  
-- -  - /* Note that atomic_inc_return() implies full memory barrier. */
-- -  - firstsnap = snap = atomic_inc_return(&sync_sched_expedited_started);
+++++ + /*
+++++ +  * Take a ticket.  Note that atomic_inc_return() implies a
+++++ +  * full memory barrier.
+++++ +  */
+++++ + snap = atomic_long_inc_return(&rsp->expedited_start);
+++++ + firstsnap = snap;
        get_online_cpus();
        WARN_ON_ONCE(cpu_is_offline(raw_smp_processor_id()));
       
                if (trycount++ < 10) {
                        udelay(trycount * num_online_cpus());
                } else {
------                  synchronize_sched();
++++++                  wait_rcu_gp(call_rcu_sched);
+++++ +                 atomic_long_inc(&rsp->expedited_normal);
                        return;
                }
       
Simple merge
Simple merge
Simple merge
diff --cc kernel/srcu.c
Simple merge
index 28e9d6c98941290108acdf8e73953022975e8bc2,28e9d6c98941290108acdf8e73953022975e8bc2,41faf0b8df1df9f2f5d9cb12eb01980526025ec4,28e9d6c98941290108acdf8e73953022975e8bc2,6a4b500e93d12bdff6bb4086127033c59e604970,28e9d6c98941290108acdf8e73953022975e8bc2,28e9d6c98941290108acdf8e73953022975e8bc2..8820313edb237cf2c39a658fc63bc7709577d5c5
@@@@@@@@ -970,9 -970,9 -970,9 -970,9 -970,9 -970,9 -970,9 +970,9 @@@@@@@@ config RCU_TORTURE_TEST_RUNNABL
       
       config RCU_CPU_STALL_TIMEOUT
        int "RCU CPU stall timeout in seconds"
---- -- depends on TREE_RCU || TREE_PREEMPT_RCU
++++ ++ depends on TREE_RCU || TREE_PREEMPT_RCU || RCU_TRACE
        range 3 300
-- ---- default 60
++ ++++ default 21
        help
          If a given RCU grace period extends more than the specified
          number of seconds, a CPU stall warning is printed.  If the