|
@@ -218,8 +218,8 @@ module_param(blimit, long, 0444);
|
|
|
module_param(qhimark, long, 0444);
|
|
|
module_param(qlowmark, long, 0444);
|
|
|
|
|
|
-static ulong jiffies_till_first_fqs = RCU_JIFFIES_TILL_FORCE_QS;
|
|
|
-static ulong jiffies_till_next_fqs = RCU_JIFFIES_TILL_FORCE_QS;
|
|
|
+static ulong jiffies_till_first_fqs = ULONG_MAX;
|
|
|
+static ulong jiffies_till_next_fqs = ULONG_MAX;
|
|
|
|
|
|
module_param(jiffies_till_first_fqs, ulong, 0644);
|
|
|
module_param(jiffies_till_next_fqs, ulong, 0644);
|
|
@@ -3265,11 +3265,25 @@ static void __init rcu_init_one(struct rcu_state *rsp,
|
|
|
*/
|
|
|
static void __init rcu_init_geometry(void)
|
|
|
{
|
|
|
+ ulong d;
|
|
|
int i;
|
|
|
int j;
|
|
|
int n = nr_cpu_ids;
|
|
|
int rcu_capacity[MAX_RCU_LVLS + 1];
|
|
|
|
|
|
+ /*
|
|
|
+ * Initialize any unspecified boot parameters.
|
|
|
+ * The default values of jiffies_till_first_fqs and
|
|
|
+ * jiffies_till_next_fqs are set to the RCU_JIFFIES_TILL_FORCE_QS
|
|
|
+ * value, which is a function of HZ, then adding one for each
|
|
|
+ * RCU_JIFFIES_FQS_DIV CPUs that might be on the system.
|
|
|
+ */
|
|
|
+ d = RCU_JIFFIES_TILL_FORCE_QS + nr_cpu_ids / RCU_JIFFIES_FQS_DIV;
|
|
|
+ if (jiffies_till_first_fqs == ULONG_MAX)
|
|
|
+ jiffies_till_first_fqs = d;
|
|
|
+ if (jiffies_till_next_fqs == ULONG_MAX)
|
|
|
+ jiffies_till_next_fqs = d;
|
|
|
+
|
|
|
/* If the compile-time values are accurate, just leave. */
|
|
|
if (rcu_fanout_leaf == CONFIG_RCU_FANOUT_LEAF &&
|
|
|
nr_cpu_ids == NR_CPUS)
|