From: Jean Delvare <khali@linux-fr.org>
To: Alexey Dobriyan <adobriyan@gmail.com>
Cc: Ingo Molnar <mingo@elte.hu>, john stultz <johnstul@us.ibm.com>,
Greg KH <gregkh@suse.de>, LKML <linux-kernel@vger.kernel.org>,
Linux I2C <i2c@lm-sensors.org>,
Ulrich Drepper <drepper@redhat.com>
Subject: Re: [crash, bisected] I2C, kobject (ffff81003e8c4160): tried to init an initialized object
Date: Wed, 6 Aug 2008 22:21:28 +0200 [thread overview]
Message-ID: <20080806222128.30d55622@hyperion.delvare> (raw)
In-Reply-To: <20080717094858.GA18687@martell.zuzino.mipt.ru>
Hi Alexey, Ingo,
On Thu, 17 Jul 2008 13:48:58 +0400, Alexey Dobriyan wrote:
> On Thu, Jul 17, 2008 at 11:33:30AM +0200, Ingo Molnar wrote:
> >
> > * Ingo Molnar <mingo@elte.hu> wrote:
> >
> > > Jean,
> > >
> > > -tip testing found another (similar) i2c crash with latest -git, on a
> > > Core2Duo laptop:
> > >
> > > calling nforce2_init+0x0/0x1b
> > > initcall nforce2_init+0x0/0x1b returned 0 after 0 msecs
> > > calling nforce2_s4985_init+0x0/0x275
> > > BUG: unable to handle kernel NULL pointer dereference at 0000000c
> > > IP: [<c04af2cf>] i2c_smbus_xfer+0x27/0x3f0
> > > *pdpt = 00000000009cb001 *pde = 0000000000000000
> > > Oops: 0000 [#1] SMP
> >
> > turning off I2C_NFORCE2_S4985 makes the system boot up fine. Workaround
> > patch below.
>
> Well, it's pretty easy oops unless I misread something.
>
> It happened on not nforce2 motherboard, right?
>
> nforce2_init will just register PCI driver,
> no matching PCI ids => nforce2_set_reference() isn't called =>
> nforce2_smbus stays NULL.
>
> Second module loads and tries to i2c_smbus_xfer(NULL, ) in module_init()
> hook which oopses.
Analysis is totally correct. I guess I shouldn't have tried to fix the
original bug in a hurry before leaving for vacation. I didn't have the
time to completely test it and as a result I introduced a new bug.
Which the following patch should fix:
* * * * *
Subject: i2c: Fix oops on bus multiplexer driver loading
The two I2C bus multiplexer drivers (i2c-amd756-s4882 and
i2c-nforce2-s4985) make use of the bus they want to multiplex before
checking if it is really present. Swap the instructions to test for
presence first. This fixes a oops reported by Ingo Molnar.
Signed-off-by: Jean Delvare <khali@linux-fr.org>
Cc: Ingo Molnar <mingo@elte.hu>
---
drivers/i2c/busses/i2c-amd756-s4882.c | 9 ++++-----
drivers/i2c/busses/i2c-nforce2-s4985.c | 5 +++--
2 files changed, 7 insertions(+), 7 deletions(-)
--- linux-2.6.27-rc2.orig/drivers/i2c/busses/i2c-amd756-s4882.c 2008-08-05 18:17:05.000000000 +0200
+++ linux-2.6.27-rc2/drivers/i2c/busses/i2c-amd756-s4882.c 2008-08-06 20:40:16.000000000 +0200
@@ -155,6 +155,9 @@ static int __init amd756_s4882_init(void
int i, error;
union i2c_smbus_data ioconfig;
+ if (!amd756_smbus.dev.parent)
+ return -ENODEV;
+
/* Configure the PCA9556 multiplexer */
ioconfig.byte = 0x00; /* All I/O to output mode */
error = i2c_smbus_xfer(&amd756_smbus, 0x18, 0, I2C_SMBUS_WRITE, 0x03,
@@ -168,11 +171,7 @@ static int __init amd756_s4882_init(void
/* Unregister physical bus */
error = i2c_del_adapter(&amd756_smbus);
if (error) {
- if (error == -EINVAL)
- error = -ENODEV;
- else
- dev_err(&amd756_smbus.dev, "Physical bus removal "
- "failed\n");
+ dev_err(&amd756_smbus.dev, "Physical bus removal failed\n");
goto ERROR0;
}
--- linux-2.6.27-rc2.orig/drivers/i2c/busses/i2c-nforce2-s4985.c 2008-08-05 18:17:05.000000000 +0200
+++ linux-2.6.27-rc2/drivers/i2c/busses/i2c-nforce2-s4985.c 2008-08-06 20:07:48.000000000 +0200
@@ -150,6 +150,9 @@ static int __init nforce2_s4985_init(voi
int i, error;
union i2c_smbus_data ioconfig;
+ if (!nforce2_smbus)
+ return -ENODEV;
+
/* Configure the PCA9556 multiplexer */
ioconfig.byte = 0x00; /* All I/O to output mode */
error = i2c_smbus_xfer(nforce2_smbus, 0x18, 0, I2C_SMBUS_WRITE, 0x03,
@@ -161,8 +164,6 @@ static int __init nforce2_s4985_init(voi
}
/* Unregister physical bus */
- if (!nforce2_smbus)
- return -ENODEV;
error = i2c_del_adapter(nforce2_smbus);
if (error) {
dev_err(&nforce2_smbus->dev, "Physical bus removal failed\n");
This is going to Linus tomorrow.
Thanks,
--
Jean Delvare
WARNING: multiple messages have this Message-ID (diff)
From: Jean Delvare <khali@linux-fr.org>
To: Alexey Dobriyan <adobriyan@gmail.com>
Cc: Ingo Molnar <mingo@elte.hu>, john stultz <johnstul@us.ibm.com>,
Greg KH <gregkh@suse.de>, LKML <linux-kernel@vger.kernel.org>,
Linux I2C <i2c@lm-sensors.org>,
Ulrich Drepper <drepper@redhat.com>
Subject: Re: [crash, bisected] I2C, kobject (ffff81003e8c4160): tried to init an initialized object
Date: Wed, 6 Aug 2008 22:21:28 +0200 [thread overview]
Message-ID: <20080806222128.30d55622@hyperion.delvare> (raw)
In-Reply-To: <20080717094858.GA18687@martell.zuzino.mipt.ru>
Hi Alexey, Ingo,
On Thu, 17 Jul 2008 13:48:58 +0400, Alexey Dobriyan wrote:
> On Thu, Jul 17, 2008 at 11:33:30AM +0200, Ingo Molnar wrote:
> >
> > * Ingo Molnar <mingo@elte.hu> wrote:
> >
> > > Jean,
> > >
> > > -tip testing found another (similar) i2c crash with latest -git, on a
> > > Core2Duo laptop:
> > >
> > > calling nforce2_init+0x0/0x1b
> > > initcall nforce2_init+0x0/0x1b returned 0 after 0 msecs
> > > calling nforce2_s4985_init+0x0/0x275
> > > BUG: unable to handle kernel NULL pointer dereference at 0000000c
> > > IP: [<c04af2cf>] i2c_smbus_xfer+0x27/0x3f0
> > > *pdpt = 00000000009cb001 *pde = 0000000000000000
> > > Oops: 0000 [#1] SMP
> >
> > turning off I2C_NFORCE2_S4985 makes the system boot up fine. Workaround
> > patch below.
>
> Well, it's pretty easy oops unless I misread something.
>
> It happened on not nforce2 motherboard, right?
>
> nforce2_init will just register PCI driver,
> no matching PCI ids => nforce2_set_reference() isn't called =>
> nforce2_smbus stays NULL.
>
> Second module loads and tries to i2c_smbus_xfer(NULL, ) in module_init()
> hook which oopses.
Analysis is totally correct. I guess I shouldn't have tried to fix the
original bug in a hurry before leaving for vacation. I didn't have the
time to completely test it and as a result I introduced a new bug.
Which the following patch should fix:
* * * * *
Subject: i2c: Fix oops on bus multiplexer driver loading
The two I2C bus multiplexer drivers (i2c-amd756-s4882 and
i2c-nforce2-s4985) make use of the bus they want to multiplex before
checking if it is really present. Swap the instructions to test for
presence first. This fixes a oops reported by Ingo Molnar.
Signed-off-by: Jean Delvare <khali@linux-fr.org>
Cc: Ingo Molnar <mingo@elte.hu>
---
drivers/i2c/busses/i2c-amd756-s4882.c | 9 ++++-----
drivers/i2c/busses/i2c-nforce2-s4985.c | 5 +++--
2 files changed, 7 insertions(+), 7 deletions(-)
--- linux-2.6.27-rc2.orig/drivers/i2c/busses/i2c-amd756-s4882.c 2008-08-05 18:17:05.000000000 +0200
+++ linux-2.6.27-rc2/drivers/i2c/busses/i2c-amd756-s4882.c 2008-08-06 20:40:16.000000000 +0200
@@ -155,6 +155,9 @@ static int __init amd756_s4882_init(void
int i, error;
union i2c_smbus_data ioconfig;
+ if (!amd756_smbus.dev.parent)
+ return -ENODEV;
+
/* Configure the PCA9556 multiplexer */
ioconfig.byte = 0x00; /* All I/O to output mode */
error = i2c_smbus_xfer(&amd756_smbus, 0x18, 0, I2C_SMBUS_WRITE, 0x03,
@@ -168,11 +171,7 @@ static int __init amd756_s4882_init(void
/* Unregister physical bus */
error = i2c_del_adapter(&amd756_smbus);
if (error) {
- if (error == -EINVAL)
- error = -ENODEV;
- else
- dev_err(&amd756_smbus.dev, "Physical bus removal "
- "failed\n");
+ dev_err(&amd756_smbus.dev, "Physical bus removal failed\n");
goto ERROR0;
}
--- linux-2.6.27-rc2.orig/drivers/i2c/busses/i2c-nforce2-s4985.c 2008-08-05 18:17:05.000000000 +0200
+++ linux-2.6.27-rc2/drivers/i2c/busses/i2c-nforce2-s4985.c 2008-08-06 20:07:48.000000000 +0200
@@ -150,6 +150,9 @@ static int __init nforce2_s4985_init(voi
int i, error;
union i2c_smbus_data ioconfig;
+ if (!nforce2_smbus)
+ return -ENODEV;
+
/* Configure the PCA9556 multiplexer */
ioconfig.byte = 0x00; /* All I/O to output mode */
error = i2c_smbus_xfer(nforce2_smbus, 0x18, 0, I2C_SMBUS_WRITE, 0x03,
@@ -161,8 +164,6 @@ static int __init nforce2_s4985_init(voi
}
/* Unregister physical bus */
- if (!nforce2_smbus)
- return -ENODEV;
error = i2c_del_adapter(nforce2_smbus);
if (error) {
dev_err(&nforce2_smbus->dev, "Physical bus removal failed\n");
This is going to Linus tomorrow.
Thanks,
--
Jean Delvare
next prev parent reply other threads:[~2008-08-06 20:21 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-07-14 20:49 [GIT PULL] i2c updates for 2.6.27, round 1 Jean Delvare
2008-07-14 20:49 ` Jean Delvare
2008-07-16 8:23 ` [crash, bisected] I2C, kobject (ffff81003e8c4160): tried to init an initialized object (was: Re: [GIT PULL] i2c updates for 2.6.27, round 1) Ingo Molnar
2008-07-16 9:07 ` Jean Delvare
2008-07-16 9:07 ` Jean Delvare
2008-07-16 10:08 ` [crash, bisected] I2C, kobject (ffff81003e8c4160): tried to init an initialized object Jean Delvare
2008-07-16 12:18 ` Jean Delvare
2008-07-17 9:26 ` Ingo Molnar
2008-07-17 9:33 ` Ingo Molnar
2008-07-17 9:48 ` Alexey Dobriyan
[not found] ` <20080717094858.GA18687-QDJVlCTZ4KWTKS93B3g+7KFoa47nwP16@public.gmane.org>
2008-07-17 9:59 ` Ingo Molnar
2008-07-17 9:59 ` Ingo Molnar
2008-08-06 20:21 ` Jean Delvare [this message]
2008-08-06 20:21 ` Jean Delvare
[not found] ` <20080717092655.GA6115-X9Un+BFzKDI@public.gmane.org>
2008-07-17 9:49 ` Ingo Molnar
2008-07-17 9:49 ` Ingo Molnar
2008-07-17 9:54 ` Ingo Molnar
2008-07-17 22:42 ` [crash, bisected] I2C, kobject (ffff81003e8c4160): tried to init an initialized object (was: Re: [GIT PULL] i2c updates for 2.6.27, round 1) Greg KH
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=20080806222128.30d55622@hyperion.delvare \
--to=khali@linux-fr.org \
--cc=adobriyan@gmail.com \
--cc=drepper@redhat.com \
--cc=gregkh@suse.de \
--cc=i2c@lm-sensors.org \
--cc=johnstul@us.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
/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.