Commit 78635fc7 authored by Ingo Molnar's avatar Ingo Molnar
Browse files

rcu, debug: detect stalled grace periods, cleanups



small cleanups.

Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 67182ae1
Loading
Loading
Loading
Loading
+13 −13
Original line number Original line Diff line number Diff line
@@ -294,6 +294,7 @@ static inline void record_gp_check_time(struct rcu_ctrlblk *rcp)
{
{
	rcp->gp_check = get_seconds() + 3;
	rcp->gp_check = get_seconds() + 3;
}
}

static void print_other_cpu_stall(struct rcu_ctrlblk *rcp)
static void print_other_cpu_stall(struct rcu_ctrlblk *rcp)
{
{
	int cpu;
	int cpu;
@@ -303,11 +304,9 @@ static void print_other_cpu_stall(struct rcu_ctrlblk *rcp)


	spin_lock(&rcp->lock);
	spin_lock(&rcp->lock);
	delta = get_seconds() - rcp->gp_check;
	delta = get_seconds() - rcp->gp_check;
	if (delta < 2L ||
	if (delta < 2L || cpus_empty(rcp->cpumask)) {
	    cpus_empty(rcp->cpumask)) {
		spin_unlock(&rcp->lock);
		spin_unlock(&rcp->lock);
		return;
		return;
	rcp->gp_check = get_seconds() + 30;
	}
	}
	spin_unlock(&rcp->lock);
	spin_unlock(&rcp->lock);


@@ -319,6 +318,7 @@ static void print_other_cpu_stall(struct rcu_ctrlblk *rcp)
	printk(" (detected by %d, t=%lu/%lu)\n",
	printk(" (detected by %d, t=%lu/%lu)\n",
	       smp_processor_id(), get_seconds(), rcp->gp_check);
	       smp_processor_id(), get_seconds(), rcp->gp_check);
}
}

static void print_cpu_stall(struct rcu_ctrlblk *rcp)
static void print_cpu_stall(struct rcu_ctrlblk *rcp)
{
{
	printk(KERN_ERR "RCU detected CPU %d stall (t=%lu/%lu)\n",
	printk(KERN_ERR "RCU detected CPU %d stall (t=%lu/%lu)\n",
@@ -329,8 +329,8 @@ static void print_cpu_stall(struct rcu_ctrlblk *rcp)
		rcp->gp_check = get_seconds() + 30;
		rcp->gp_check = get_seconds() + 30;
	spin_unlock(&rcp->lock);
	spin_unlock(&rcp->lock);
}
}
static inline void check_cpu_stall(struct rcu_ctrlblk *rcp,

				   struct rcu_data *rdp)
static void check_cpu_stall(struct rcu_ctrlblk *rcp, struct rcu_data *rdp)
{
{
	long delta;
	long delta;


@@ -341,12 +341,11 @@ static inline void check_cpu_stall(struct rcu_ctrlblk *rcp,


		print_cpu_stall(rcp);
		print_cpu_stall(rcp);


	} else if (!cpus_empty(rcp->cpumask) && delta >= 2L) {
	} else {

		if (!cpus_empty(rcp->cpumask) && delta >= 2L) {
			/* They had two seconds to dump stack, so complain. */
			/* They had two seconds to dump stack, so complain. */

			print_other_cpu_stall(rcp);
			print_other_cpu_stall(rcp);

		}
	}
	}
}
}


@@ -355,8 +354,9 @@ static inline void check_cpu_stall(struct rcu_ctrlblk *rcp,
static inline void record_gp_check_time(struct rcu_ctrlblk *rcp)
static inline void record_gp_check_time(struct rcu_ctrlblk *rcp)
{
{
}
}
static inline void check_cpu_stall(struct rcu_ctrlblk *rcp,

				   struct rcu_data *rdp)
static inline void
check_cpu_stall(struct rcu_ctrlblk *rcp, struct rcu_data *rdp)
{
{
}
}