All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chirag Jog <chirag@linux.vnet.ibm.com>
To: J?rgen Mell <j.mell@t-online.de>, Thomas Gleixner <tglx@linutronix.de>
Cc: Thomas Gleixner <tglx@linutronix.de>,
	LKML <linux-kernel@vger.kernel.org>,
	rt-users <linux-rt-users@vger.kernel.org>,
	Steven Rostedt <rostedt@goodmis.org>,
	Clark Williams <williams@redhat.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Josh Triplett <josht@linux.vnet.ibm.com>,
	"Timothy R. Chavez" <tim.chavez@linux.vnet.ibm.com>
Subject: [PATCH] Fix Bug messages
Date: Wed, 30 Jul 2008 22:48:42 +0530	[thread overview]
Message-ID: <20080730171842.GB3420@linux.vnet.ibm.com> (raw)
In-Reply-To: <200807301101.32417.j.mell@t-online.de>

* J?rgen Mell <j.mell@t-online.de> [2008-07-30 11:01:32]:

> Hello Thomas,
> 
> On Wednesday, 30. July 2008, Thomas Gleixner wrote:
> > We are pleased to announce the 2.6.26-rt1 tree, which can be
> > downloaded from the location:
> 
> I have tried the new kernel and have some good news and some bad news:
> 
> The good news: The machine boots and seems to run without major problems.
> 
> The bad news: It produces continuously lots of bug messages in the error 
> logs (cf. attached dmesg.tgz). The error at rtmutex.c:743 was already 
> present in 2.6.25-rt* when ACPI was enabled. The 'using smp_processor_id 
> ()  in preemptible code' is new here with 2.6.26.
> 
> Machine is an old Athlon XP (single core) on an EPOX mainboard with VIA 
> chipset.
> 
> If I can help with testing, please let me know.
> 
> Bye,
>          Jürgen
> 
> 
This patch should solve some of the bug messages.
It does two things:
1. Change rt_runtime_lock to be a raw spinlock as the comment above it
says: it is nested inside the rq lock.

2. Change mnt_writers to be a per_cpu locked variable.
This eliminates the need for the codepath to disable preemption and
then potentially sleep, leading to the BUG messages

Signed-Off-By: Chirag <chirag@linux.vnet.ibm.com>



Index: linux-2.6.26-rt1/kernel/sched.c
===================================================================
--- linux-2.6.26-rt1.orig/kernel/sched.c	2008-07-30 22:37:19.000000000 +0530
+++ linux-2.6.26-rt1/kernel/sched.c	2008-07-30 22:37:24.000000000 +0530
@@ -208,7 +208,7 @@
 
 struct rt_bandwidth {
 	/* nests inside the rq lock: */
-	spinlock_t		rt_runtime_lock;
+	raw_spinlock_t		rt_runtime_lock;
 	ktime_t			rt_period;
 	u64			rt_runtime;
 	struct hrtimer		rt_period_timer;
@@ -472,7 +472,7 @@
 	u64 rt_time;
 	u64 rt_runtime;
 	/* Nests inside the rq lock: */
-	spinlock_t rt_runtime_lock;
+	raw_spinlock_t rt_runtime_lock;
 
 #ifdef CONFIG_RT_GROUP_SCHED
 	unsigned long rt_nr_boosted;
Index: linux-2.6.26-rt1/fs/namespace.c
===================================================================
--- linux-2.6.26-rt1.orig/fs/namespace.c	2008-07-30 22:39:30.000000000 +0530
+++ linux-2.6.26-rt1/fs/namespace.c	2008-07-30 22:39:36.000000000 +0530
@@ -178,13 +178,13 @@
 	unsigned long count;
 	struct vfsmount *mnt;
 } ____cacheline_aligned_in_smp;
-static DEFINE_PER_CPU(struct mnt_writer, mnt_writers);
+static DEFINE_PER_CPU_LOCKED(struct mnt_writer, mnt_writers);
 
 static int __init init_mnt_writers(void)
 {
 	int cpu;
 	for_each_possible_cpu(cpu) {
-		struct mnt_writer *writer = &per_cpu(mnt_writers, cpu);
+		struct mnt_writer *writer = &per_cpu_var_locked(mnt_writers, cpu);
 		spin_lock_init(&writer->lock);
 		lockdep_set_class(&writer->lock, &writer->lock_class);
 		writer->count = 0;
@@ -199,7 +199,7 @@
 	struct mnt_writer *cpu_writer;
 
 	for_each_possible_cpu(cpu) {
-		cpu_writer = &per_cpu(mnt_writers, cpu);
+		cpu_writer = &per_cpu_var_locked(mnt_writers, cpu);
 		spin_unlock(&cpu_writer->lock);
 	}
 }
@@ -251,8 +251,8 @@
 {
 	int ret = 0;
 	struct mnt_writer *cpu_writer;
-
-	cpu_writer = &get_cpu_var(mnt_writers);
+	int cpu = 0;
+	cpu_writer = &get_cpu_var_locked(mnt_writers, &cpu);
 	spin_lock(&cpu_writer->lock);
 	if (__mnt_is_readonly(mnt)) {
 		ret = -EROFS;
@@ -262,7 +262,7 @@
 	cpu_writer->count++;
 out:
 	spin_unlock(&cpu_writer->lock);
-	put_cpu_var(mnt_writers);
+	put_cpu_var_locked(mnt_writers, cpu);
 	return ret;
 }
 EXPORT_SYMBOL_GPL(mnt_want_write);
@@ -273,7 +273,7 @@
 	struct mnt_writer *cpu_writer;
 
 	for_each_possible_cpu(cpu) {
-		cpu_writer = &per_cpu(mnt_writers, cpu);
+		cpu_writer = &per_cpu_var_locked(mnt_writers, cpu);
 		spin_lock(&cpu_writer->lock);
 		__clear_mnt_count(cpu_writer);
 		cpu_writer->mnt = NULL;
@@ -332,8 +332,8 @@
 {
 	int must_check_underflow = 0;
 	struct mnt_writer *cpu_writer;
-
-	cpu_writer = &get_cpu_var(mnt_writers);
+	int cpu = 0;
+	cpu_writer = &get_cpu_var_locked(mnt_writers, &cpu);
 	spin_lock(&cpu_writer->lock);
 
 	use_cpu_writer_for_mount(cpu_writer, mnt);
@@ -360,7 +360,7 @@
 	 * __mnt_writers can underflow.  Without it,
 	 * we could theoretically wrap __mnt_writers.
 	 */
-	put_cpu_var(mnt_writers);
+	put_cpu_var_locked(mnt_writers, cpu);
 }
 EXPORT_SYMBOL_GPL(mnt_drop_write);
 
@@ -612,7 +612,7 @@
 	 * can come in.
 	 */
 	for_each_possible_cpu(cpu) {
-		struct mnt_writer *cpu_writer = &per_cpu(mnt_writers, cpu);
+		struct mnt_writer *cpu_writer = &per_cpu_var_locked(mnt_writers, cpu);
 		if (cpu_writer->mnt != mnt)
 			continue;
 		spin_lock(&cpu_writer->lock);


--
To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

WARNING: multiple messages have this Message-ID (diff)
From: Chirag Jog <chirag@linux.vnet.ibm.com>
To: J?rgen Mell <j.mell@t-online.de>, Thomas Gleixner <tglx@linutronix.de>
Cc: Thomas Gleixner <tglx@linutronix.de>,
	LKML <linux-kernel@vger.kernel.org>,
	rt-users <linux-rt-users@vger.kernel.org>,
	Steven Rostedt <rostedt@goodmis.org>,
	Clark Williams <williams@redhat.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Josh Triplett <josht@linux.vnet.ibm.com>,
	"Timothy R. Chavez" <tim.chavez@linux.vnet.ibm.com>
Subject: [PATCH] Fix Bug messages
Date: Wed, 30 Jul 2008 22:48:42 +0530	[thread overview]
Message-ID: <20080730171842.GB3420@linux.vnet.ibm.com> (raw)
In-Reply-To: <200807301101.32417.j.mell@t-online.de>

* J?rgen Mell <j.mell@t-online.de> [2008-07-30 11:01:32]:

> Hello Thomas,
> 
> On Wednesday, 30. July 2008, Thomas Gleixner wrote:
> > We are pleased to announce the 2.6.26-rt1 tree, which can be
> > downloaded from the location:
> 
> I have tried the new kernel and have some good news and some bad news:
> 
> The good news: The machine boots and seems to run without major problems.
> 
> The bad news: It produces continuously lots of bug messages in the error 
> logs (cf. attached dmesg.tgz). The error at rtmutex.c:743 was already 
> present in 2.6.25-rt* when ACPI was enabled. The 'using smp_processor_id 
> ()  in preemptible code' is new here with 2.6.26.
> 
> Machine is an old Athlon XP (single core) on an EPOX mainboard with VIA 
> chipset.
> 
> If I can help with testing, please let me know.
> 
> Bye,
>          Jürgen
> 
> 
This patch should solve some of the bug messages.
It does two things:
1. Change rt_runtime_lock to be a raw spinlock as the comment above it
says: it is nested inside the rq lock.

2. Change mnt_writers to be a per_cpu locked variable.
This eliminates the need for the codepath to disable preemption and
then potentially sleep, leading to the BUG messages

Signed-Off-By: Chirag <chirag@linux.vnet.ibm.com>



Index: linux-2.6.26-rt1/kernel/sched.c
===================================================================
--- linux-2.6.26-rt1.orig/kernel/sched.c	2008-07-30 22:37:19.000000000 +0530
+++ linux-2.6.26-rt1/kernel/sched.c	2008-07-30 22:37:24.000000000 +0530
@@ -208,7 +208,7 @@
 
 struct rt_bandwidth {
 	/* nests inside the rq lock: */
-	spinlock_t		rt_runtime_lock;
+	raw_spinlock_t		rt_runtime_lock;
 	ktime_t			rt_period;
 	u64			rt_runtime;
 	struct hrtimer		rt_period_timer;
@@ -472,7 +472,7 @@
 	u64 rt_time;
 	u64 rt_runtime;
 	/* Nests inside the rq lock: */
-	spinlock_t rt_runtime_lock;
+	raw_spinlock_t rt_runtime_lock;
 
 #ifdef CONFIG_RT_GROUP_SCHED
 	unsigned long rt_nr_boosted;
Index: linux-2.6.26-rt1/fs/namespace.c
===================================================================
--- linux-2.6.26-rt1.orig/fs/namespace.c	2008-07-30 22:39:30.000000000 +0530
+++ linux-2.6.26-rt1/fs/namespace.c	2008-07-30 22:39:36.000000000 +0530
@@ -178,13 +178,13 @@
 	unsigned long count;
 	struct vfsmount *mnt;
 } ____cacheline_aligned_in_smp;
-static DEFINE_PER_CPU(struct mnt_writer, mnt_writers);
+static DEFINE_PER_CPU_LOCKED(struct mnt_writer, mnt_writers);
 
 static int __init init_mnt_writers(void)
 {
 	int cpu;
 	for_each_possible_cpu(cpu) {
-		struct mnt_writer *writer = &per_cpu(mnt_writers, cpu);
+		struct mnt_writer *writer = &per_cpu_var_locked(mnt_writers, cpu);
 		spin_lock_init(&writer->lock);
 		lockdep_set_class(&writer->lock, &writer->lock_class);
 		writer->count = 0;
@@ -199,7 +199,7 @@
 	struct mnt_writer *cpu_writer;
 
 	for_each_possible_cpu(cpu) {
-		cpu_writer = &per_cpu(mnt_writers, cpu);
+		cpu_writer = &per_cpu_var_locked(mnt_writers, cpu);
 		spin_unlock(&cpu_writer->lock);
 	}
 }
@@ -251,8 +251,8 @@
 {
 	int ret = 0;
 	struct mnt_writer *cpu_writer;
-
-	cpu_writer = &get_cpu_var(mnt_writers);
+	int cpu = 0;
+	cpu_writer = &get_cpu_var_locked(mnt_writers, &cpu);
 	spin_lock(&cpu_writer->lock);
 	if (__mnt_is_readonly(mnt)) {
 		ret = -EROFS;
@@ -262,7 +262,7 @@
 	cpu_writer->count++;
 out:
 	spin_unlock(&cpu_writer->lock);
-	put_cpu_var(mnt_writers);
+	put_cpu_var_locked(mnt_writers, cpu);
 	return ret;
 }
 EXPORT_SYMBOL_GPL(mnt_want_write);
@@ -273,7 +273,7 @@
 	struct mnt_writer *cpu_writer;
 
 	for_each_possible_cpu(cpu) {
-		cpu_writer = &per_cpu(mnt_writers, cpu);
+		cpu_writer = &per_cpu_var_locked(mnt_writers, cpu);
 		spin_lock(&cpu_writer->lock);
 		__clear_mnt_count(cpu_writer);
 		cpu_writer->mnt = NULL;
@@ -332,8 +332,8 @@
 {
 	int must_check_underflow = 0;
 	struct mnt_writer *cpu_writer;
-
-	cpu_writer = &get_cpu_var(mnt_writers);
+	int cpu = 0;
+	cpu_writer = &get_cpu_var_locked(mnt_writers, &cpu);
 	spin_lock(&cpu_writer->lock);
 
 	use_cpu_writer_for_mount(cpu_writer, mnt);
@@ -360,7 +360,7 @@
 	 * __mnt_writers can underflow.  Without it,
 	 * we could theoretically wrap __mnt_writers.
 	 */
-	put_cpu_var(mnt_writers);
+	put_cpu_var_locked(mnt_writers, cpu);
 }
 EXPORT_SYMBOL_GPL(mnt_drop_write);
 
@@ -612,7 +612,7 @@
 	 * can come in.
 	 */
 	for_each_possible_cpu(cpu) {
-		struct mnt_writer *cpu_writer = &per_cpu(mnt_writers, cpu);
+		struct mnt_writer *cpu_writer = &per_cpu_var_locked(mnt_writers, cpu);
 		if (cpu_writer->mnt != mnt)
 			continue;
 		spin_lock(&cpu_writer->lock);



  reply	other threads:[~2008-07-30 17:18 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-07-25 20:09 2.6.24.7-rt15 Thomas Gleixner
2008-07-26 11:03 ` 2.6.24.7-rt15 Carsten Emde
     [not found] ` <1985e0f60807252248n581bdfa0s363f6ce0d283ec2c@mail.gmail.com>
2008-07-26 11:13   ` 2.6.24.7-rt15 Jaswinder Singh
2008-07-26 11:13     ` 2.6.24.7-rt15 Jaswinder Singh
2008-07-26 12:28     ` 2.6.24.7-rt15 Steven Rostedt
2008-07-26 13:22       ` 2.6.24.7-rt15 Daniel Walker
2008-07-26 18:28       ` 2.6.24.7-rt15 Jaswinder Singh
2008-07-26 18:28         ` 2.6.24.7-rt15 Jaswinder Singh
2008-07-27 16:16 ` 2.6.24.7-rt16 Thomas Gleixner
2008-07-27 20:28   ` 2.6.24.7-rt16 Avuton Olrich
2008-07-27 20:37     ` 2.6.24.7-rt16 Thomas Gleixner
2008-07-28  8:12   ` 2.6.24.7-rt16 Wolfgang Grandegger
2008-07-28  9:48     ` 2.6.24.7-rt16 Peter Zijlstra
2008-07-28 10:12       ` 2.6.24.7-rt16 Wolfgang Grandegger
2008-07-29 12:57   ` 2.6.24.7-rt16 Thomas Gleixner
2008-07-29 22:21     ` 2.6.26-rt1 Thomas Gleixner
2008-07-30  9:01       ` 2.6.26-rt1 Jürgen Mell
2008-07-30 17:18         ` Chirag Jog [this message]
2008-07-30 17:18           ` [PATCH] Fix Bug messages Chirag Jog
2008-07-30 20:16           ` Jürgen Mell
2008-07-31  6:06           ` Peter Zijlstra
2008-07-31  6:06             ` Peter Zijlstra
2008-07-31  8:00           ` Sebastien Dugue
2008-07-31  8:00             ` Sebastien Dugue
2008-07-31 10:13             ` John Kacur
2008-07-31 11:23               ` Sebastien Dugue
2008-07-31 11:23                 ` Sebastien Dugue
2008-07-31 13:49                 ` John Kacur
2008-07-31 14:01                   ` Peter Zijlstra
2008-07-31 14:10                     ` John Kacur
2008-07-31 14:18                       ` Peter Zijlstra
2008-07-31 14:35                     ` Sebastien Dugue
2008-07-31 15:01                       ` Clark Williams
2008-07-31 15:14                         ` Sebastien Dugue
2008-08-01 21:11         ` 2.6.26-rt1 Paul E. McKenney
2008-08-01 21:11           ` 2.6.26-rt1 Paul E. McKenney
2008-08-13 13:30           ` 2.6.26-rt1 Juergen Beisert
2008-08-13 13:30             ` 2.6.26-rt1 Juergen Beisert
2008-08-13 16:37             ` 2.6.26-rt1 Paul E. McKenney
2008-08-13 16:37               ` 2.6.26-rt1 Paul E. McKenney
2008-07-30 14:31       ` 2.6.26-rt1 John Kacur
2008-07-30 14:41       ` 2.6.26-rt1 Ryan Hope
2008-08-01 21:11       ` 2.6.26-rt1 Paul E. McKenney
2008-08-11  8:36       ` 2.6.26-rt1 Juergen Beisert
2008-08-11  8:36         ` 2.6.26-rt1 Juergen Beisert

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20080730171842.GB3420@linux.vnet.ibm.com \
    --to=chirag@linux.vnet.ibm.com \
    --cc=j.mell@t-online.de \
    --cc=josht@linux.vnet.ibm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-rt-users@vger.kernel.org \
    --cc=peterz@infradead.org \
    --cc=rostedt@goodmis.org \
    --cc=tglx@linutronix.de \
    --cc=tim.chavez@linux.vnet.ibm.com \
    --cc=williams@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.