All of lore.kernel.org
 help / color / mirror / Atom feed
* [GIT PULL] i2c updates for 2.6.27, round 1
@ 2008-07-14 20:49 ` Jean Delvare
  0 siblings, 0 replies; 18+ messages in thread
From: Jean Delvare @ 2008-07-14 20:49 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: Ben-cy1Wll9GaHOsTnJN9+BGXg, Linux I2C, Dooks, LKML

Hi Linus,

Please pull the first round of i2c subsystem updates for Linux 2.6.27
from:

git://jdelvare.pck.nerim.net/jdelvare-2.6 i2c-for-linus

There are two new i2c bus driver (i2c-cpm and i2c-isch), one new i2c
chip driver (at24), three bus drivers removed (i2c-i810, i2c-prosavage
and i2c-savage4), and many many improvements to both i2c-core and
pretty much every individual driver.

 Documentation/feature-removal-schedule.txt |    7 -
 Documentation/i2c/busses/i2c-i810          |   47 --
 Documentation/i2c/busses/i2c-prosavage     |   23 -
 Documentation/i2c/busses/i2c-savage4       |   26 -
 Documentation/i2c/fault-codes              |  127 +++++
 Documentation/i2c/smbus-protocol           |    4 +-
 Documentation/i2c/writing-clients          |   51 ++-
 MAINTAINERS                                |    7 +
 arch/mips/sibyte/swarm/Makefile            |    1 +
 arch/mips/sibyte/swarm/swarm-i2c.c         |   37 ++
 drivers/i2c/algos/i2c-algo-bit.c           |    4 +-
 drivers/i2c/algos/i2c-algo-pca.c           |    2 +-
 drivers/i2c/algos/i2c-algo-pcf.c           |   48 ++-
 drivers/i2c/busses/Kconfig                 |  715 +++++++++++++--------------
 drivers/i2c/busses/Makefile                |   57 ++-
 drivers/i2c/busses/i2c-ali1535.c           |   38 +-
 drivers/i2c/busses/i2c-ali1563.c           |   38 +-
 drivers/i2c/busses/i2c-ali15x3.c           |   32 +-
 drivers/i2c/busses/i2c-amd756-s4882.c      |    4 +-
 drivers/i2c/busses/i2c-amd756.c            |   35 +-
 drivers/i2c/busses/i2c-amd8111.c           |   54 ++-
 drivers/i2c/busses/i2c-au1550.c            |  130 +++--
 drivers/i2c/busses/i2c-cpm.c               |  745 ++++++++++++++++++++++++++++
 drivers/i2c/busses/i2c-davinci.c           |   89 +++-
 drivers/i2c/busses/i2c-elektor.c           |    4 +-
 drivers/i2c/busses/i2c-gpio.c              |    2 +-
 drivers/i2c/busses/i2c-hydra.c             |    3 -
 drivers/i2c/busses/i2c-i801.c              |  284 +++++------
 drivers/i2c/busses/i2c-i810.c              |  260 ----------
 drivers/i2c/busses/i2c-ibm_iic.c           |  206 +--------
 drivers/i2c/busses/i2c-iop3xx.c            |    2 +-
 drivers/i2c/busses/i2c-isch.c              |  339 +++++++++++++
 drivers/i2c/busses/i2c-mpc.c               |    2 +-
 drivers/i2c/busses/i2c-mv64xxx.c           |    2 +-
 drivers/i2c/busses/i2c-nforce2-s4985.c     |  257 ++++++++++
 drivers/i2c/busses/i2c-nforce2.c           |   49 ++-
 drivers/i2c/busses/i2c-ocores.c            |   44 ++-
 drivers/i2c/busses/i2c-pasemi.c            |    2 +-
 drivers/i2c/busses/i2c-pca-platform.c      |    2 +-
 drivers/i2c/busses/i2c-piix4.c             |   73 ++--
 drivers/i2c/busses/i2c-pmcmsp.c            |    2 +-
 drivers/i2c/busses/i2c-prosavage.c         |  325 ------------
 drivers/i2c/busses/i2c-pxa.c               |    2 +-
 drivers/i2c/busses/i2c-s3c2410.c           |    2 +-
 drivers/i2c/busses/i2c-savage4.c           |  185 -------
 drivers/i2c/busses/i2c-sibyte.c            |    8 +-
 drivers/i2c/busses/i2c-sis5595.c           |   29 +-
 drivers/i2c/busses/i2c-sis630.c            |   59 ++-
 drivers/i2c/busses/i2c-sis96x.c            |   37 +-
 drivers/i2c/busses/i2c-stub.c              |    6 +-
 drivers/i2c/busses/i2c-taos-evm.c          |    5 +-
 drivers/i2c/busses/i2c-via.c               |    5 +-
 drivers/i2c/busses/i2c-viapro.c            |   31 +-
 drivers/i2c/busses/i2c-voodoo3.c           |    2 -
 drivers/i2c/busses/scx200_acb.c            |    2 +-
 drivers/i2c/chips/Kconfig                  |   43 ++-
 drivers/i2c/chips/Makefile                 |    1 +
 drivers/i2c/chips/at24.c                   |  583 ++++++++++++++++++++++
 drivers/i2c/chips/eeprom.c                 |   81 ++--
 drivers/i2c/chips/max6875.c                |    4 +-
 drivers/i2c/chips/pca9539.c                |   25 +-
 drivers/i2c/chips/pcf8574.c                |   25 +-
 drivers/i2c/chips/pcf8591.c                |   33 +-
 drivers/i2c/i2c-core.c                     |  575 +++++++++++++++++-----
 drivers/i2c/i2c-dev.c                      |   12 +-
 drivers/video/fb_ddc.c                     |    1 +
 drivers/video/intelfb/intelfb_i2c.c        |   12 +-
 drivers/video/matrox/i2c-matroxfb.c        |   20 +-
 include/linux/i2c-algo-pcf.h               |    8 +-
 include/linux/i2c-id.h                     |    3 -
 include/linux/i2c.h                        |   46 ++-
 include/linux/i2c/at24.h                   |   28 +
 72 files changed, 3844 insertions(+), 2208 deletions(-)
 delete mode 100644 Documentation/i2c/busses/i2c-i810
 delete mode 100644 Documentation/i2c/busses/i2c-prosavage
 delete mode 100644 Documentation/i2c/busses/i2c-savage4
 create mode 100644 Documentation/i2c/fault-codes
 create mode 100644 arch/mips/sibyte/swarm/swarm-i2c.c
 create mode 100644 drivers/i2c/busses/i2c-cpm.c
 delete mode 100644 drivers/i2c/busses/i2c-i810.c
 create mode 100644 drivers/i2c/busses/i2c-isch.c
 create mode 100644 drivers/i2c/busses/i2c-nforce2-s4985.c
 delete mode 100644 drivers/i2c/busses/i2c-prosavage.c
 delete mode 100644 drivers/i2c/busses/i2c-savage4.c
 create mode 100644 drivers/i2c/chips/at24.c
 create mode 100644 include/linux/i2c/at24.h

---------------

Adrian Bunk (1):
      i2c: Remove 3 deprecated bus drivers

Alan Cox (1):
      i2c: Push ioctl BKL down into the i2c code

Alek Du (1):
      i2c: Add Intel SCH SMBus support

Dave Young (1):
      i2c: Use class_for_each_device

David Brownell (6):
      i2c: Document standard fault codes
      i2c-core: Return -Errno, not -1
      i2c: Kerneldoc for most I/O calls
      i2c: i2c_use_client() defends against NULL
      i2c: Bus drivers return -Errno not -1
      i2c: Deprecate the legacy gpio drivers

Eric Brower (1):
      i2c-algo-pcf: Multi-master lost-arbitration improvement

Jean Delvare (24):
      i2c-nforce2: Add support for multiplexing on the Tyan S4985
      i2c-core: Remove needless include
      i2c: Group bus drivers by type
      i2c: Delete unused function i2c_smbus_write_quick
      i2c: Update stray references to smbus_access
      i2c-piix4: Various cleanups and minor fixes
      i2c: Consistently reject unsupported transactions
      i2c: Simplify i2c_del_driver()
      i2c: Let framebuffer drivers set their I2C bus class to DDC
      i2c: Let bus drivers add SPD to their class
      i2c/eeprom: Only probe buses with DDC or SPD class
      i2c/eeprom: Fall back to SMBus read word transactions
      i2c: Simplify i2c_device_probe
      i2c-algo-pcf: Drop unused struct members
      i2c-i801: Remove verbose debugging messages
      i2c-i801: Properly report bus arbitration loss
      i2c-i801: Rename local variable temp to status
      i2c-i801: Fix handling of error conditions
      i2c: Check for ACPI resource conflicts
      i2c: Drop stray references to lm_sensors
      i2c-dev: Delete empty detach_client callback
      i2c: Clean up old chip drivers
      i2c: Call client_unregister for new-style devices too
      i2c: Add detection capability to new-style drivers

Jochen Friedrich (2):
      i2c: Add support for I2C bus on Freescale CPM1/CPM2 controllers
      i2c: Add MAINTAINER entry for i2c-cpm

Jon Smirl (1):
      i2c: Export the i2c_bus_type symbol

Maciej W. Rozycki (1):
      i2c-sibyte: SWARM I2C board initialization

Manuel Lauss (2):
      i2c-ocores: basic PM support
      i2c-au1550: Fix PM support

Matthias Kaehlcke (1):
      i2c: Use list_for_each_entry_safe

Mike Frysinger (1):
      i2c-bfin-twi: Update the dependencies

Sean MacLennan (1):
      i2c-ibm_iic: Register child nodes

Stefan Roese (2):
      i2c-ibm_iic: Remove deprecated OCP style part
      i2c-ibm_iic: Enable driver for all PPC4xx variants in arch/powerpc

Troy Kisky (5):
      i2c-davinci: Ensure clock between 7-12 MHz
      i2c-davinci: Move dev_dbg statement for more output
      i2c-davinci: Remove useless IVR read
      i2c-davinci: Fix signal handling bug
      i2c-davinci: Initialize cmd_complete sooner

Uli Luckas (1):
      i2c-pxa: Initialize early

Wolfram Sang (4):
      i2c-pca-algo: Fix error code
      i2c-pca-platform: Fix error code
      i2c-cpm: Bugfixes
      i2c: New-style EEPROM driver using device IDs

Thanks,
-- 
Jean Delvare

_______________________________________________
i2c mailing list
i2c-GZX6beZjE8VD60Wz+7aTrA@public.gmane.org
http://lists.lm-sensors.org/mailman/listinfo/i2c

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [GIT PULL] i2c updates for 2.6.27, round 1
@ 2008-07-14 20:49 ` Jean Delvare
  0 siblings, 0 replies; 18+ messages in thread
From: Jean Delvare @ 2008-07-14 20:49 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: Linux I2C, LKML, Ben Dooks

Hi Linus,

Please pull the first round of i2c subsystem updates for Linux 2.6.27
from:

git://jdelvare.pck.nerim.net/jdelvare-2.6 i2c-for-linus

There are two new i2c bus driver (i2c-cpm and i2c-isch), one new i2c
chip driver (at24), three bus drivers removed (i2c-i810, i2c-prosavage
and i2c-savage4), and many many improvements to both i2c-core and
pretty much every individual driver.

 Documentation/feature-removal-schedule.txt |    7 -
 Documentation/i2c/busses/i2c-i810          |   47 --
 Documentation/i2c/busses/i2c-prosavage     |   23 -
 Documentation/i2c/busses/i2c-savage4       |   26 -
 Documentation/i2c/fault-codes              |  127 +++++
 Documentation/i2c/smbus-protocol           |    4 +-
 Documentation/i2c/writing-clients          |   51 ++-
 MAINTAINERS                                |    7 +
 arch/mips/sibyte/swarm/Makefile            |    1 +
 arch/mips/sibyte/swarm/swarm-i2c.c         |   37 ++
 drivers/i2c/algos/i2c-algo-bit.c           |    4 +-
 drivers/i2c/algos/i2c-algo-pca.c           |    2 +-
 drivers/i2c/algos/i2c-algo-pcf.c           |   48 ++-
 drivers/i2c/busses/Kconfig                 |  715 +++++++++++++--------------
 drivers/i2c/busses/Makefile                |   57 ++-
 drivers/i2c/busses/i2c-ali1535.c           |   38 +-
 drivers/i2c/busses/i2c-ali1563.c           |   38 +-
 drivers/i2c/busses/i2c-ali15x3.c           |   32 +-
 drivers/i2c/busses/i2c-amd756-s4882.c      |    4 +-
 drivers/i2c/busses/i2c-amd756.c            |   35 +-
 drivers/i2c/busses/i2c-amd8111.c           |   54 ++-
 drivers/i2c/busses/i2c-au1550.c            |  130 +++--
 drivers/i2c/busses/i2c-cpm.c               |  745 ++++++++++++++++++++++++++++
 drivers/i2c/busses/i2c-davinci.c           |   89 +++-
 drivers/i2c/busses/i2c-elektor.c           |    4 +-
 drivers/i2c/busses/i2c-gpio.c              |    2 +-
 drivers/i2c/busses/i2c-hydra.c             |    3 -
 drivers/i2c/busses/i2c-i801.c              |  284 +++++------
 drivers/i2c/busses/i2c-i810.c              |  260 ----------
 drivers/i2c/busses/i2c-ibm_iic.c           |  206 +--------
 drivers/i2c/busses/i2c-iop3xx.c            |    2 +-
 drivers/i2c/busses/i2c-isch.c              |  339 +++++++++++++
 drivers/i2c/busses/i2c-mpc.c               |    2 +-
 drivers/i2c/busses/i2c-mv64xxx.c           |    2 +-
 drivers/i2c/busses/i2c-nforce2-s4985.c     |  257 ++++++++++
 drivers/i2c/busses/i2c-nforce2.c           |   49 ++-
 drivers/i2c/busses/i2c-ocores.c            |   44 ++-
 drivers/i2c/busses/i2c-pasemi.c            |    2 +-
 drivers/i2c/busses/i2c-pca-platform.c      |    2 +-
 drivers/i2c/busses/i2c-piix4.c             |   73 ++--
 drivers/i2c/busses/i2c-pmcmsp.c            |    2 +-
 drivers/i2c/busses/i2c-prosavage.c         |  325 ------------
 drivers/i2c/busses/i2c-pxa.c               |    2 +-
 drivers/i2c/busses/i2c-s3c2410.c           |    2 +-
 drivers/i2c/busses/i2c-savage4.c           |  185 -------
 drivers/i2c/busses/i2c-sibyte.c            |    8 +-
 drivers/i2c/busses/i2c-sis5595.c           |   29 +-
 drivers/i2c/busses/i2c-sis630.c            |   59 ++-
 drivers/i2c/busses/i2c-sis96x.c            |   37 +-
 drivers/i2c/busses/i2c-stub.c              |    6 +-
 drivers/i2c/busses/i2c-taos-evm.c          |    5 +-
 drivers/i2c/busses/i2c-via.c               |    5 +-
 drivers/i2c/busses/i2c-viapro.c            |   31 +-
 drivers/i2c/busses/i2c-voodoo3.c           |    2 -
 drivers/i2c/busses/scx200_acb.c            |    2 +-
 drivers/i2c/chips/Kconfig                  |   43 ++-
 drivers/i2c/chips/Makefile                 |    1 +
 drivers/i2c/chips/at24.c                   |  583 ++++++++++++++++++++++
 drivers/i2c/chips/eeprom.c                 |   81 ++--
 drivers/i2c/chips/max6875.c                |    4 +-
 drivers/i2c/chips/pca9539.c                |   25 +-
 drivers/i2c/chips/pcf8574.c                |   25 +-
 drivers/i2c/chips/pcf8591.c                |   33 +-
 drivers/i2c/i2c-core.c                     |  575 +++++++++++++++++-----
 drivers/i2c/i2c-dev.c                      |   12 +-
 drivers/video/fb_ddc.c                     |    1 +
 drivers/video/intelfb/intelfb_i2c.c        |   12 +-
 drivers/video/matrox/i2c-matroxfb.c        |   20 +-
 include/linux/i2c-algo-pcf.h               |    8 +-
 include/linux/i2c-id.h                     |    3 -
 include/linux/i2c.h                        |   46 ++-
 include/linux/i2c/at24.h                   |   28 +
 72 files changed, 3844 insertions(+), 2208 deletions(-)
 delete mode 100644 Documentation/i2c/busses/i2c-i810
 delete mode 100644 Documentation/i2c/busses/i2c-prosavage
 delete mode 100644 Documentation/i2c/busses/i2c-savage4
 create mode 100644 Documentation/i2c/fault-codes
 create mode 100644 arch/mips/sibyte/swarm/swarm-i2c.c
 create mode 100644 drivers/i2c/busses/i2c-cpm.c
 delete mode 100644 drivers/i2c/busses/i2c-i810.c
 create mode 100644 drivers/i2c/busses/i2c-isch.c
 create mode 100644 drivers/i2c/busses/i2c-nforce2-s4985.c
 delete mode 100644 drivers/i2c/busses/i2c-prosavage.c
 delete mode 100644 drivers/i2c/busses/i2c-savage4.c
 create mode 100644 drivers/i2c/chips/at24.c
 create mode 100644 include/linux/i2c/at24.h

---------------

Adrian Bunk (1):
      i2c: Remove 3 deprecated bus drivers

Alan Cox (1):
      i2c: Push ioctl BKL down into the i2c code

Alek Du (1):
      i2c: Add Intel SCH SMBus support

Dave Young (1):
      i2c: Use class_for_each_device

David Brownell (6):
      i2c: Document standard fault codes
      i2c-core: Return -Errno, not -1
      i2c: Kerneldoc for most I/O calls
      i2c: i2c_use_client() defends against NULL
      i2c: Bus drivers return -Errno not -1
      i2c: Deprecate the legacy gpio drivers

Eric Brower (1):
      i2c-algo-pcf: Multi-master lost-arbitration improvement

Jean Delvare (24):
      i2c-nforce2: Add support for multiplexing on the Tyan S4985
      i2c-core: Remove needless include
      i2c: Group bus drivers by type
      i2c: Delete unused function i2c_smbus_write_quick
      i2c: Update stray references to smbus_access
      i2c-piix4: Various cleanups and minor fixes
      i2c: Consistently reject unsupported transactions
      i2c: Simplify i2c_del_driver()
      i2c: Let framebuffer drivers set their I2C bus class to DDC
      i2c: Let bus drivers add SPD to their class
      i2c/eeprom: Only probe buses with DDC or SPD class
      i2c/eeprom: Fall back to SMBus read word transactions
      i2c: Simplify i2c_device_probe
      i2c-algo-pcf: Drop unused struct members
      i2c-i801: Remove verbose debugging messages
      i2c-i801: Properly report bus arbitration loss
      i2c-i801: Rename local variable temp to status
      i2c-i801: Fix handling of error conditions
      i2c: Check for ACPI resource conflicts
      i2c: Drop stray references to lm_sensors
      i2c-dev: Delete empty detach_client callback
      i2c: Clean up old chip drivers
      i2c: Call client_unregister for new-style devices too
      i2c: Add detection capability to new-style drivers

Jochen Friedrich (2):
      i2c: Add support for I2C bus on Freescale CPM1/CPM2 controllers
      i2c: Add MAINTAINER entry for i2c-cpm

Jon Smirl (1):
      i2c: Export the i2c_bus_type symbol

Maciej W. Rozycki (1):
      i2c-sibyte: SWARM I2C board initialization

Manuel Lauss (2):
      i2c-ocores: basic PM support
      i2c-au1550: Fix PM support

Matthias Kaehlcke (1):
      i2c: Use list_for_each_entry_safe

Mike Frysinger (1):
      i2c-bfin-twi: Update the dependencies

Sean MacLennan (1):
      i2c-ibm_iic: Register child nodes

Stefan Roese (2):
      i2c-ibm_iic: Remove deprecated OCP style part
      i2c-ibm_iic: Enable driver for all PPC4xx variants in arch/powerpc

Troy Kisky (5):
      i2c-davinci: Ensure clock between 7-12 MHz
      i2c-davinci: Move dev_dbg statement for more output
      i2c-davinci: Remove useless IVR read
      i2c-davinci: Fix signal handling bug
      i2c-davinci: Initialize cmd_complete sooner

Uli Luckas (1):
      i2c-pxa: Initialize early

Wolfram Sang (4):
      i2c-pca-algo: Fix error code
      i2c-pca-platform: Fix error code
      i2c-cpm: Bugfixes
      i2c: New-style EEPROM driver using device IDs

Thanks,
-- 
Jean Delvare

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [crash, bisected] I2C, kobject (ffff81003e8c4160): tried to init an initialized object (was: Re: [GIT PULL] i2c updates for 2.6.27, round 1)
  2008-07-14 20:49 ` Jean Delvare
  (?)
@ 2008-07-16  8:23 ` Ingo Molnar
  2008-07-16  9:07     ` Jean Delvare
  -1 siblings, 1 reply; 18+ messages in thread
From: Ingo Molnar @ 2008-07-16  8:23 UTC (permalink / raw)
  To: Jean Delvare; +Cc: Linux I2C, LKML, Ben Dooks, Greg KH


hi Jean,

* Jean Delvare <khali@linux-fr.org> wrote:

>       i2c-nforce2: Add support for multiplexing on the Tyan S4985

-tip random boot testing started triggering the following upstream boot 
crash, starting two days ago when the i2c tree was merged:

[   11.772002] kobject (ffff81003e8c4160): tried to init an initialized object, something is seriously wrong.
[   11.784004] Pid: 1, comm: swapper Not tainted 2.6.26-00007-g279e902-dirty #19896
[   11.793651] 
[   11.793651] Call Trace:
[   11.793651]  [<ffffffff8054471a>] kobject_init+0x7a/0x80
[   11.798969]  [<ffffffff805f0f9d>] device_initialize+0x2d/0xd0
[   11.806323]  [<ffffffff805f19a1>] device_register+0x11/0x20
[   11.811903]  [<ffffffff8087ee3b>] i2c_register_adapter+0xab/0x1d0
[   11.817666]  [<ffffffff8087f0e6>] i2c_add_adapter+0x96/0xb0
[   11.823761]  [<ffffffff81196372>] nforce2_s4985_init+0x272/0x370
[   11.829358]  [<ffffffff8027516a>] ? getnstimeofday+0x3a/0xc0
[   11.835365]  [<ffffffff802728ba>] ? ktime_get_ts+0x4a/0x60
[   11.840853]  [<ffffffff81196100>] ? nforce2_s4985_init+0x0/0x370
[   11.846859]  [<ffffffff81160aa3>] kernel_init+0x123/0x300
[   11.852261]  [<ffffffff81160140>] ? early_idt_handler+0x0/0x74
[   11.857957]  [<ffffffff80228548>] child_rip+0xa/0x12
[   11.863781]  [<ffffffff81160140>] ? early_idt_handler+0x0/0x74
[   11.868757]  [<ffffffff81160980>] ? kernel_init+0x0/0x300
[   11.874160]  [<ffffffff8022853e>] ? child_rip+0x0/0x12
[   11.879989] 
[   11.881141] general protection fault: 0000 [1] SMP 
[   11.881141] CPU 1 

with this config:

   http://redhat.com/~mingo/misc/config-Wed_Jul_16_02_26_04_CEST_2008.bad

today i had time to do a bisection run, and it came up with this commit:

| 279e902445557897707d325182916a6e28ba80de is first bad commit
| commit 279e902445557897707d325182916a6e28ba80de
| Author: Jean Delvare <khali@linux-fr.org>
| Date:   Mon Jul 14 22:38:21 2008 +0200
|
|    i2c-nforce2: Add support for multiplexing on the Tyan S4985

the crash is reproducible and i can test any fix patch in short order. 
As a quick temporary hack i've reverted this patch for now via the patch 
below, to keep the tests going. (Can send more details about the 
test-system if needed.)

btw., Greg, the kobject debugging check and output is really nice, 
informative and useful! It likely pinpoints the real bug here.

	Ingo

----------------->
commit 244439bcf780ac3ecbb427acd43d3444f9254008
Author: Ingo Molnar <mingo@elte.hu>
Date:   Wed Jul 16 10:17:30 2008 +0200

    Revert "i2c-nforce2: Add support for multiplexing on the Tyan S4985"
    
    This reverts commit 279e902445557897707d325182916a6e28ba80de.
    
    Boot test failure with:
    
      http://redhat.com/~mingo/misc/config-Wed_Jul_16_02_26_04_CEST_2008.bad
    
    causes this crash:
    
    [   11.772002] kobject (ffff81003e8c4160): tried to init an initialized object, something is seriously wrong.
    [   11.784004] Pid: 1, comm: swapper Not tainted 2.6.26-00007-g279e902-dirty #19896
    [   11.793651]
    [   11.793651] Call Trace:
    [   11.793651]  [<ffffffff8054471a>] kobject_init+0x7a/0x80
    [   11.798969]  [<ffffffff805f0f9d>] device_initialize+0x2d/0xd0
    [   11.806323]  [<ffffffff805f19a1>] device_register+0x11/0x20
    [   11.811903]  [<ffffffff8087ee3b>] i2c_register_adapter+0xab/0x1d0
    [   11.817666]  [<ffffffff8087f0e6>] i2c_add_adapter+0x96/0xb0
    [   11.823761]  [<ffffffff81196372>] nforce2_s4985_init+0x272/0x370
    [   11.829358]  [<ffffffff8027516a>] ? getnstimeofday+0x3a/0xc0
    [   11.835365]  [<ffffffff802728ba>] ? ktime_get_ts+0x4a/0x60
    [   11.840853]  [<ffffffff81196100>] ? nforce2_s4985_init+0x0/0x370
    [   11.846859]  [<ffffffff81160aa3>] kernel_init+0x123/0x300
    [   11.852261]  [<ffffffff81160140>] ? early_idt_handler+0x0/0x74
    [   11.857957]  [<ffffffff80228548>] child_rip+0xa/0x12
    [   11.863781]  [<ffffffff81160140>] ? early_idt_handler+0x0/0x74
    [   11.868757]  [<ffffffff81160980>] ? kernel_init+0x0/0x300
    [   11.874160]  [<ffffffff8022853e>] ? child_rip+0x0/0x12
    [   11.879989]
    [   11.881141] general protection fault: 0000 [1] SMP
    [   11.881141] CPU 1
    
    Conflicts:
    
    	drivers/i2c/busses/Kconfig
    	drivers/i2c/busses/Makefile
    
    Signed-off-by: Ingo Molnar <mingo@elte.hu>
---
 drivers/i2c/busses/Kconfig             |   37 ++---
 drivers/i2c/busses/Makefile            |    1 -
 drivers/i2c/busses/i2c-nforce2-s4985.c |  257 --------------------------------
 drivers/i2c/busses/i2c-nforce2.c       |   16 --
 4 files changed, 12 insertions(+), 299 deletions(-)

diff --git a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig
index 6ee997b..2a3819d 100644
--- a/drivers/i2c/busses/Kconfig
+++ b/drivers/i2c/busses/Kconfig
@@ -136,28 +136,15 @@ config I2C_PIIX4
 	  This driver can also be built as a module.  If so, the module
 	  will be called i2c-piix4.
 
-config I2C_NFORCE2
-	tristate "Nvidia nForce2, nForce3 and nForce4"
-	depends on PCI
-	help
-	  If you say yes to this option, support will be included for the Nvidia
-	  nForce2, nForce3 and nForce4 families of mainboard I2C interfaces.
-
-	  This driver can also be built as a module.  If so, the module
-	  will be called i2c-nforce2.
-
-config I2C_NFORCE2_S4985
-	tristate "SMBus multiplexing on the Tyan S4985"
-	depends on I2C_NFORCE2 && EXPERIMENTAL
+config I2C_MV64XXX
+	tristate "Marvell mv64xxx I2C Controller"
+	depends on (MV64X60 || PLAT_ORION) && EXPERIMENTAL
 	help
-	  Enabling this option will add specific SMBus support for the Tyan
-	  S4985 motherboard.  On this 4-CPU board, the SMBus is multiplexed
-	  over 4 different channels, where the various memory module EEPROMs
-	  live.  Saying yes here will give you access to these in addition
-	  to the trunk.
+	  If you say yes to this option, support will be included for the
+	  built-in I2C interface on the Marvell 64xxx line of host bridges.
 
 	  This driver can also be built as a module.  If so, the module
-	  will be called i2c-nforce2-s4985.
+	  will be called i2c-mv64xxx.
 
 config I2C_SIS5595
 	tristate "SiS 5595"
@@ -376,15 +363,15 @@ config I2C_MPC
 	  This driver can also be built as a module.  If so, the module
 	  will be called i2c-mpc.
 
-config I2C_MV64XXX
-	tristate "Marvell mv64xxx I2C Controller"
-	depends on (MV64X60 || PLAT_ORION) && EXPERIMENTAL
+config I2C_NFORCE2
+	tristate "Nvidia nForce2, nForce3 and nForce4"
+	depends on PCI
 	help
-	  If you say yes to this option, support will be included for the
-	  built-in I2C interface on the Marvell 64xxx line of host bridges.
+	  If you say yes to this option, support will be included for the Nvidia
+	  nForce2, nForce3 and nForce4 families of mainboard I2C interfaces.
 
 	  This driver can also be built as a module.  If so, the module
-	  will be called i2c-mv64xxx.
+	  will be called i2c-nforce2.
 
 config I2C_OCORES
 	tristate "OpenCores I2C Controller"
diff --git a/drivers/i2c/busses/Makefile b/drivers/i2c/busses/Makefile
index 97dbfa2..1adb173 100644
--- a/drivers/i2c/busses/Makefile
+++ b/drivers/i2c/busses/Makefile
@@ -12,7 +12,6 @@ obj-$(CONFIG_I2C_AMD8111)	+= i2c-amd8111.o
 obj-$(CONFIG_I2C_I801)		+= i2c-i801.o
 obj-$(CONFIG_I2C_ISCH)		+= i2c-isch.o
 obj-$(CONFIG_I2C_NFORCE2)	+= i2c-nforce2.o
-obj-$(CONFIG_I2C_NFORCE2_S4985)	+= i2c-nforce2-s4985.o
 obj-$(CONFIG_I2C_PIIX4)		+= i2c-piix4.o
 obj-$(CONFIG_I2C_SIS5595)	+= i2c-sis5595.o
 obj-$(CONFIG_I2C_SIS630)	+= i2c-sis630.o
diff --git a/drivers/i2c/busses/i2c-nforce2-s4985.c b/drivers/i2c/busses/i2c-nforce2-s4985.c
deleted file mode 100644
index 6a8995d..0000000
--- a/drivers/i2c/busses/i2c-nforce2-s4985.c
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
- * i2c-nforce2-s4985.c - i2c-nforce2 extras for the Tyan S4985 motherboard
- *
- * Copyright (C) 2008 Jean Delvare <khali@linux-fr.org>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-/*
- * We select the channels by sending commands to the Philips
- * PCA9556 chip at I2C address 0x18. The main adapter is used for
- * the non-multiplexed part of the bus, and 4 virtual adapters
- * are defined for the multiplexed addresses: 0x50-0x53 (memory
- * module EEPROM) located on channels 1-4. We define one virtual
- * adapter per CPU, which corresponds to one multiplexed channel:
- *   CPU0: virtual adapter 1, channel 1
- *   CPU1: virtual adapter 2, channel 2
- *   CPU2: virtual adapter 3, channel 3
- *   CPU3: virtual adapter 4, channel 4
- */
-
-#include <linux/module.h>
-#include <linux/kernel.h>
-#include <linux/slab.h>
-#include <linux/init.h>
-#include <linux/i2c.h>
-#include <linux/mutex.h>
-
-extern struct i2c_adapter *nforce2_smbus;
-
-static struct i2c_adapter *s4985_adapter;
-static struct i2c_algorithm *s4985_algo;
-
-/* Wrapper access functions for multiplexed SMBus */
-static DEFINE_MUTEX(nforce2_lock);
-
-static s32 nforce2_access_virt0(struct i2c_adapter *adap, u16 addr,
-				unsigned short flags, char read_write,
-				u8 command, int size,
-				union i2c_smbus_data *data)
-{
-	int error;
-
-	/* We exclude the multiplexed addresses */
-	if ((addr & 0xfc) == 0x50 || (addr & 0xfc) == 0x30
-	 || addr == 0x18)
-		return -ENXIO;
-
-	mutex_lock(&nforce2_lock);
-	error = nforce2_smbus->algo->smbus_xfer(adap, addr, flags, read_write,
-						command, size, data);
-	mutex_unlock(&nforce2_lock);
-
-	return error;
-}
-
-/* We remember the last used channels combination so as to only switch
-   channels when it is really needed. This greatly reduces the SMBus
-   overhead, but also assumes that nobody will be writing to the PCA9556
-   in our back. */
-static u8 last_channels;
-
-static inline s32 nforce2_access_channel(struct i2c_adapter *adap, u16 addr,
-					 unsigned short flags, char read_write,
-					 u8 command, int size,
-					 union i2c_smbus_data *data,
-					 u8 channels)
-{
-	int error;
-
-	/* We exclude the non-multiplexed addresses */
-	if ((addr & 0xfc) != 0x50 && (addr & 0xfc) != 0x30)
-		return -ENXIO;
-
-	mutex_lock(&nforce2_lock);
-	if (last_channels != channels) {
-		union i2c_smbus_data mplxdata;
-		mplxdata.byte = channels;
-
-		error = nforce2_smbus->algo->smbus_xfer(adap, 0x18, 0,
-							I2C_SMBUS_WRITE, 0x01,
-							I2C_SMBUS_BYTE_DATA,
-							&mplxdata);
-		if (error)
-			goto UNLOCK;
-		last_channels = channels;
-	}
-	error = nforce2_smbus->algo->smbus_xfer(adap, addr, flags, read_write,
-						command, size, data);
-
-UNLOCK:
-	mutex_unlock(&nforce2_lock);
-	return error;
-}
-
-static s32 nforce2_access_virt1(struct i2c_adapter *adap, u16 addr,
-				unsigned short flags, char read_write,
-				u8 command, int size,
-				union i2c_smbus_data *data)
-{
-	/* CPU0: channel 1 enabled */
-	return nforce2_access_channel(adap, addr, flags, read_write, command,
-				      size, data, 0x02);
-}
-
-static s32 nforce2_access_virt2(struct i2c_adapter *adap, u16 addr,
-				unsigned short flags, char read_write,
-				u8 command, int size,
-				union i2c_smbus_data *data)
-{
-	/* CPU1: channel 2 enabled */
-	return nforce2_access_channel(adap, addr, flags, read_write, command,
-				      size, data, 0x04);
-}
-
-static s32 nforce2_access_virt3(struct i2c_adapter *adap, u16 addr,
-				unsigned short flags, char read_write,
-				u8 command, int size,
-				union i2c_smbus_data *data)
-{
-	/* CPU2: channel 3 enabled */
-	return nforce2_access_channel(adap, addr, flags, read_write, command,
-				      size, data, 0x08);
-}
-
-static s32 nforce2_access_virt4(struct i2c_adapter *adap, u16 addr,
-				unsigned short flags, char read_write,
-				u8 command, int size,
-				union i2c_smbus_data *data)
-{
-	/* CPU3: channel 4 enabled */
-	return nforce2_access_channel(adap, addr, flags, read_write, command,
-				      size, data, 0x10);
-}
-
-static int __init nforce2_s4985_init(void)
-{
-	int i, error;
-	union i2c_smbus_data ioconfig;
-
-	/* 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");
-		goto ERROR0;
-	}
-
-	printk(KERN_INFO "Enabling SMBus multiplexing for Tyan S4985\n");
-	/* Define the 5 virtual adapters and algorithms structures */
-	s4985_adapter = kzalloc(5 * sizeof(struct i2c_adapter), GFP_KERNEL);
-	if (!s4985_adapter) {
-		error = -ENOMEM;
-		goto ERROR1;
-	}
-	s4985_algo = kzalloc(5 * sizeof(struct i2c_algorithm), GFP_KERNEL);
-	if (!s4985_algo) {
-		error = -ENOMEM;
-		goto ERROR2;
-	}
-
-	/* Fill in the new structures */
-	s4985_algo[0] = *(nforce2_smbus->algo);
-	s4985_algo[0].smbus_xfer = nforce2_access_virt0;
-	s4985_adapter[0] = *nforce2_smbus;
-	s4985_adapter[0].algo = s4985_algo;
-	s4985_adapter[0].dev.parent = nforce2_smbus->dev.parent;
-	for (i = 1; i < 5; i++) {
-		s4985_algo[i] = *(nforce2_smbus->algo);
-		s4985_adapter[i] = *nforce2_smbus;
-		snprintf(s4985_adapter[i].name, sizeof(s4985_adapter[i].name),
-			 "SMBus nForce2 adapter (CPU%d)", i - 1);
-		s4985_adapter[i].algo = s4985_algo + i;
-		s4985_adapter[i].dev.parent = nforce2_smbus->dev.parent;
-	}
-	s4985_algo[1].smbus_xfer = nforce2_access_virt1;
-	s4985_algo[2].smbus_xfer = nforce2_access_virt2;
-	s4985_algo[3].smbus_xfer = nforce2_access_virt3;
-	s4985_algo[4].smbus_xfer = nforce2_access_virt4;
-
-	/* Configure the PCA9556 multiplexer */
-	ioconfig.byte = 0x00; /* All I/O to output mode */
-	error = nforce2_smbus->algo->smbus_xfer(nforce2_smbus, 0x18, 0,
-						I2C_SMBUS_WRITE, 0x03,
-						I2C_SMBUS_BYTE_DATA, &ioconfig);
-	if (error) {
-		dev_err(&nforce2_smbus->dev, "PCA9556 configuration failed\n");
-		error = -EIO;
-		goto ERROR3;
-	}
-
-	/* Register virtual adapters */
-	for (i = 0; i < 5; i++) {
-		error = i2c_add_adapter(s4985_adapter + i);
-		if (error) {
-			dev_err(&nforce2_smbus->dev,
-				"Virtual adapter %d registration "
-				"failed, module not inserted\n", i);
-			for (i--; i >= 0; i--)
-				i2c_del_adapter(s4985_adapter + i);
-			goto ERROR3;
-		}
-	}
-
-	return 0;
-
-ERROR3:
-	kfree(s4985_algo);
-	s4985_algo = NULL;
-ERROR2:
-	kfree(s4985_adapter);
-	s4985_adapter = NULL;
-ERROR1:
-	/* Restore physical bus */
-	i2c_add_adapter(nforce2_smbus);
-ERROR0:
-	return error;
-}
-
-static void __exit nforce2_s4985_exit(void)
-{
-	if (s4985_adapter) {
-		int i;
-
-		for (i = 0; i < 5; i++)
-			i2c_del_adapter(s4985_adapter+i);
-		kfree(s4985_adapter);
-		s4985_adapter = NULL;
-	}
-	kfree(s4985_algo);
-	s4985_algo = NULL;
-
-	/* Restore physical bus */
-	if (i2c_add_adapter(nforce2_smbus))
-		dev_err(&nforce2_smbus->dev, "Physical bus restoration "
-			"failed\n");
-}
-
-MODULE_AUTHOR("Jean Delvare <khali@linux-fr.org>");
-MODULE_DESCRIPTION("S4985 SMBus multiplexing");
-MODULE_LICENSE("GPL");
-
-module_init(nforce2_s4985_init);
-module_exit(nforce2_s4985_exit);
diff --git a/drivers/i2c/busses/i2c-nforce2.c b/drivers/i2c/busses/i2c-nforce2.c
index 3b19bc4..7048e55 100644
--- a/drivers/i2c/busses/i2c-nforce2.c
+++ b/drivers/i2c/busses/i2c-nforce2.c
@@ -125,20 +125,6 @@ static struct dmi_system_id __devinitdata nforce2_dmi_blacklist2[] = {
 
 static struct pci_driver nforce2_driver;
 
-/* For multiplexing support, we need a global reference to the 1st
-   SMBus channel */
-#if defined CONFIG_I2C_NFORCE2_S4985 || defined CONFIG_I2C_NFORCE2_S4985_MODULE
-struct i2c_adapter *nforce2_smbus;
-EXPORT_SYMBOL_GPL(nforce2_smbus);
-
-static void nforce2_set_reference(struct i2c_adapter *adap)
-{
-	nforce2_smbus = adap;
-}
-#else
-static inline void nforce2_set_reference(struct i2c_adapter *adap) { }
-#endif
-
 static void nforce2_abort(struct i2c_adapter *adap)
 {
 	struct nforce2_smbus *smbus = adap->algo_data;
@@ -419,7 +405,6 @@ static int __devinit nforce2_probe(struct pci_dev *dev, const struct pci_device_
 		return -ENODEV;
 	}
 
-	nforce2_set_reference(&smbuses[0].adapter);
 	return 0;
 }
 
@@ -428,7 +413,6 @@ static void __devexit nforce2_remove(struct pci_dev *dev)
 {
 	struct nforce2_smbus *smbuses = (void*) pci_get_drvdata(dev);
 
-	nforce2_set_reference(NULL);
 	if (smbuses[0].base) {
 		i2c_del_adapter(&smbuses[0].adapter);
 		release_region(smbuses[0].base, smbuses[0].size);

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* Re: [crash, bisected] I2C, kobject (ffff81003e8c4160): tried to init  an initialized object (was: Re: [GIT PULL] i2c updates for 2.6.27, round 1)
  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
  0 siblings, 0 replies; 18+ messages in thread
From: Jean Delvare @ 2008-07-16  9:07 UTC (permalink / raw)
  To: Ingo Molnar; +Cc: Linux I2C, LKML, Ben Dooks, Greg KH, john stultz

Hi Ingo,

On Wed, 16 Jul 2008 10:23:52 +0200, Ingo Molnar wrote:
> 
> hi Jean,
> 
> * Jean Delvare <khali@linux-fr.org> wrote:
> 
> >       i2c-nforce2: Add support for multiplexing on the Tyan S4985
> 
> -tip random boot testing started triggering the following upstream boot 
> crash, starting two days ago when the i2c tree was merged:
> 
> [   11.772002] kobject (ffff81003e8c4160): tried to init an initialized object, something is seriously wrong.
> [   11.784004] Pid: 1, comm: swapper Not tainted 2.6.26-00007-g279e902-dirty #19896
> [   11.793651] 
> [   11.793651] Call Trace:
> [   11.793651]  [<ffffffff8054471a>] kobject_init+0x7a/0x80
> [   11.798969]  [<ffffffff805f0f9d>] device_initialize+0x2d/0xd0
> [   11.806323]  [<ffffffff805f19a1>] device_register+0x11/0x20
> [   11.811903]  [<ffffffff8087ee3b>] i2c_register_adapter+0xab/0x1d0
> [   11.817666]  [<ffffffff8087f0e6>] i2c_add_adapter+0x96/0xb0
> [   11.823761]  [<ffffffff81196372>] nforce2_s4985_init+0x272/0x370
> [   11.829358]  [<ffffffff8027516a>] ? getnstimeofday+0x3a/0xc0
> [   11.835365]  [<ffffffff802728ba>] ? ktime_get_ts+0x4a/0x60
> [   11.840853]  [<ffffffff81196100>] ? nforce2_s4985_init+0x0/0x370
> [   11.846859]  [<ffffffff81160aa3>] kernel_init+0x123/0x300
> [   11.852261]  [<ffffffff81160140>] ? early_idt_handler+0x0/0x74
> [   11.857957]  [<ffffffff80228548>] child_rip+0xa/0x12
> [   11.863781]  [<ffffffff81160140>] ? early_idt_handler+0x0/0x74
> [   11.868757]  [<ffffffff81160980>] ? kernel_init+0x0/0x300
> [   11.874160]  [<ffffffff8022853e>] ? child_rip+0x0/0x12
> [   11.879989] 
> [   11.881141] general protection fault: 0000 [1] SMP 
> [   11.881141] CPU 1 
> 
> with this config:
> 
>    http://redhat.com/~mingo/misc/config-Wed_Jul_16_02_26_04_CEST_2008.bad
> 
> today i had time to do a bisection run, and it came up with this commit:
> 
> | 279e902445557897707d325182916a6e28ba80de is first bad commit
> | commit 279e902445557897707d325182916a6e28ba80de
> | Author: Jean Delvare <khali@linux-fr.org>
> | Date:   Mon Jul 14 22:38:21 2008 +0200
> |
> |    i2c-nforce2: Add support for multiplexing on the Tyan S4985
> 
> the crash is reproducible and i can test any fix patch in short order. 
> As a quick temporary hack i've reverted this patch for now via the patch 
> below, to keep the tests going. (Can send more details about the 
> test-system if needed.)

Probably the same problem as reported by John Stultz:
http://lkml.org/lkml/2008/7/15/720

I'll look into it once I am done with higher priority tasks (read:
baby's bath ;)).

> btw., Greg, the kobject debugging check and output is really nice, 
> informative and useful! It likely pinpoints the real bug here.

Is this something new in 2.6.26-gitX? I want to know if the bug is
something new or if it could be already present in 2.6.26 and earlier
kernels and went unnoticed so far.

Thanks,
-- 
Jean Delvare

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [crash, bisected] I2C, kobject (ffff81003e8c4160): tried to init  an initialized object (was: Re: [GIT PULL] i2c updates for 2.6.27,  round 1)
@ 2008-07-16  9:07     ` Jean Delvare
  0 siblings, 0 replies; 18+ messages in thread
From: Jean Delvare @ 2008-07-16  9:07 UTC (permalink / raw)
  To: Ingo Molnar; +Cc: Linux I2C, LKML, Ben Dooks, Greg KH, john stultz

Hi Ingo,

On Wed, 16 Jul 2008 10:23:52 +0200, Ingo Molnar wrote:
> 
> hi Jean,
> 
> * Jean Delvare <khali@linux-fr.org> wrote:
> 
> >       i2c-nforce2: Add support for multiplexing on the Tyan S4985
> 
> -tip random boot testing started triggering the following upstream boot 
> crash, starting two days ago when the i2c tree was merged:
> 
> [   11.772002] kobject (ffff81003e8c4160): tried to init an initialized object, something is seriously wrong.
> [   11.784004] Pid: 1, comm: swapper Not tainted 2.6.26-00007-g279e902-dirty #19896
> [   11.793651] 
> [   11.793651] Call Trace:
> [   11.793651]  [<ffffffff8054471a>] kobject_init+0x7a/0x80
> [   11.798969]  [<ffffffff805f0f9d>] device_initialize+0x2d/0xd0
> [   11.806323]  [<ffffffff805f19a1>] device_register+0x11/0x20
> [   11.811903]  [<ffffffff8087ee3b>] i2c_register_adapter+0xab/0x1d0
> [   11.817666]  [<ffffffff8087f0e6>] i2c_add_adapter+0x96/0xb0
> [   11.823761]  [<ffffffff81196372>] nforce2_s4985_init+0x272/0x370
> [   11.829358]  [<ffffffff8027516a>] ? getnstimeofday+0x3a/0xc0
> [   11.835365]  [<ffffffff802728ba>] ? ktime_get_ts+0x4a/0x60
> [   11.840853]  [<ffffffff81196100>] ? nforce2_s4985_init+0x0/0x370
> [   11.846859]  [<ffffffff81160aa3>] kernel_init+0x123/0x300
> [   11.852261]  [<ffffffff81160140>] ? early_idt_handler+0x0/0x74
> [   11.857957]  [<ffffffff80228548>] child_rip+0xa/0x12
> [   11.863781]  [<ffffffff81160140>] ? early_idt_handler+0x0/0x74
> [   11.868757]  [<ffffffff81160980>] ? kernel_init+0x0/0x300
> [   11.874160]  [<ffffffff8022853e>] ? child_rip+0x0/0x12
> [   11.879989] 
> [   11.881141] general protection fault: 0000 [1] SMP 
> [   11.881141] CPU 1 
> 
> with this config:
> 
>    http://redhat.com/~mingo/misc/config-Wed_Jul_16_02_26_04_CEST_2008.bad
> 
> today i had time to do a bisection run, and it came up with this commit:
> 
> | 279e902445557897707d325182916a6e28ba80de is first bad commit
> | commit 279e902445557897707d325182916a6e28ba80de
> | Author: Jean Delvare <khali@linux-fr.org>
> | Date:   Mon Jul 14 22:38:21 2008 +0200
> |
> |    i2c-nforce2: Add support for multiplexing on the Tyan S4985
> 
> the crash is reproducible and i can test any fix patch in short order. 
> As a quick temporary hack i've reverted this patch for now via the patch 
> below, to keep the tests going. (Can send more details about the 
> test-system if needed.)

Probably the same problem as reported by John Stultz:
http://lkml.org/lkml/2008/7/15/720

I'll look into it once I am done with higher priority tasks (read:
baby's bath ;)).

> btw., Greg, the kobject debugging check and output is really nice, 
> informative and useful! It likely pinpoints the real bug here.

Is this something new in 2.6.26-gitX? I want to know if the bug is
something new or if it could be already present in 2.6.26 and earlier
kernels and went unnoticed so far.

Thanks,
-- 
Jean Delvare

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [crash, bisected] I2C,  kobject (ffff81003e8c4160): tried to init an initialized object
  2008-07-16  9:07     ` Jean Delvare
  (?)
@ 2008-07-16 10:08     ` Jean Delvare
  2008-07-16 12:18       ` Jean Delvare
  -1 siblings, 1 reply; 18+ messages in thread
From: Jean Delvare @ 2008-07-16 10:08 UTC (permalink / raw)
  To: Ingo Molnar; +Cc: john stultz, Greg KH, LKML, Linux I2C

On Wed, 16 Jul 2008 11:07:02 +0200, Jean Delvare wrote:
> Hi Ingo,
> 
> On Wed, 16 Jul 2008 10:23:52 +0200, Ingo Molnar wrote:
> > 
> > hi Jean,
> > 
> > * Jean Delvare <khali@linux-fr.org> wrote:
> > 
> > >       i2c-nforce2: Add support for multiplexing on the Tyan S4985
> > 
> > -tip random boot testing started triggering the following upstream boot 
> > crash, starting two days ago when the i2c tree was merged:
> > 
> > [   11.772002] kobject (ffff81003e8c4160): tried to init an initialized object, something is seriously wrong.
> > [   11.784004] Pid: 1, comm: swapper Not tainted 2.6.26-00007-g279e902-dirty #19896
> > [   11.793651] 
> > [   11.793651] Call Trace:
> > [   11.793651]  [<ffffffff8054471a>] kobject_init+0x7a/0x80
> > [   11.798969]  [<ffffffff805f0f9d>] device_initialize+0x2d/0xd0
> > [   11.806323]  [<ffffffff805f19a1>] device_register+0x11/0x20
> > [   11.811903]  [<ffffffff8087ee3b>] i2c_register_adapter+0xab/0x1d0
> > [   11.817666]  [<ffffffff8087f0e6>] i2c_add_adapter+0x96/0xb0
> > [   11.823761]  [<ffffffff81196372>] nforce2_s4985_init+0x272/0x370
> > [   11.829358]  [<ffffffff8027516a>] ? getnstimeofday+0x3a/0xc0
> > [   11.835365]  [<ffffffff802728ba>] ? ktime_get_ts+0x4a/0x60
> > [   11.840853]  [<ffffffff81196100>] ? nforce2_s4985_init+0x0/0x370
> > [   11.846859]  [<ffffffff81160aa3>] kernel_init+0x123/0x300
> > [   11.852261]  [<ffffffff81160140>] ? early_idt_handler+0x0/0x74
> > [   11.857957]  [<ffffffff80228548>] child_rip+0xa/0x12
> > [   11.863781]  [<ffffffff81160140>] ? early_idt_handler+0x0/0x74
> > [   11.868757]  [<ffffffff81160980>] ? kernel_init+0x0/0x300
> > [   11.874160]  [<ffffffff8022853e>] ? child_rip+0x0/0x12
> > [   11.879989] 
> > [   11.881141] general protection fault: 0000 [1] SMP 
> > [   11.881141] CPU 1 

Good news: I can reproduce this locally. Stay tuned...

-- 
Jean Delvare

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [crash, bisected] I2C,  kobject (ffff81003e8c4160): tried to init an initialized object
  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
  0 siblings, 1 reply; 18+ messages in thread
From: Jean Delvare @ 2008-07-16 12:18 UTC (permalink / raw)
  To: Ingo Molnar; +Cc: john stultz, Greg KH, LKML, Linux I2C, Ulrich Drepper

Hi Ingo, John,

Thanks a lot for reporting this bug quickly, BTW.

On Wed, 16 Jul 2008 12:08:01 +0200, Jean Delvare wrote:
> On Wed, 16 Jul 2008 11:07:02 +0200, Jean Delvare wrote:
> > On Wed, 16 Jul 2008 10:23:52 +0200, Ingo Molnar wrote:
> > > 
> > > * Jean Delvare <khali@linux-fr.org> wrote:
> > > 
> > > >       i2c-nforce2: Add support for multiplexing on the Tyan S4985
> > > 
> > > -tip random boot testing started triggering the following upstream boot 
> > > crash, starting two days ago when the i2c tree was merged:
> > > 
> > > [   11.772002] kobject (ffff81003e8c4160): tried to init an initialized object, something is seriously wrong.
> > > [   11.784004] Pid: 1, comm: swapper Not tainted 2.6.26-00007-g279e902-dirty #19896
> > > [   11.793651] 
> > > [   11.793651] Call Trace:
> > > [   11.793651]  [<ffffffff8054471a>] kobject_init+0x7a/0x80
> > > [   11.798969]  [<ffffffff805f0f9d>] device_initialize+0x2d/0xd0
> > > [   11.806323]  [<ffffffff805f19a1>] device_register+0x11/0x20
> > > [   11.811903]  [<ffffffff8087ee3b>] i2c_register_adapter+0xab/0x1d0
> > > [   11.817666]  [<ffffffff8087f0e6>] i2c_add_adapter+0x96/0xb0
> > > [   11.823761]  [<ffffffff81196372>] nforce2_s4985_init+0x272/0x370
> > > [   11.829358]  [<ffffffff8027516a>] ? getnstimeofday+0x3a/0xc0
> > > [   11.835365]  [<ffffffff802728ba>] ? ktime_get_ts+0x4a/0x60
> > > [   11.840853]  [<ffffffff81196100>] ? nforce2_s4985_init+0x0/0x370
> > > [   11.846859]  [<ffffffff81160aa3>] kernel_init+0x123/0x300
> > > [   11.852261]  [<ffffffff81160140>] ? early_idt_handler+0x0/0x74
> > > [   11.857957]  [<ffffffff80228548>] child_rip+0xa/0x12
> > > [   11.863781]  [<ffffffff81160140>] ? early_idt_handler+0x0/0x74
> > > [   11.868757]  [<ffffffff81160980>] ? kernel_init+0x0/0x300
> > > [   11.874160]  [<ffffffff8022853e>] ? child_rip+0x0/0x12
> > > [   11.879989] 
> > > [   11.881141] general protection fault: 0000 [1] SMP 
> > > [   11.881141] CPU 1 
> 
> Good news: I can reproduce this locally. Stay tuned...

OK, here's the fix. I'll push it to Linus later today, unless someone
objects. I've tested it on a board without multiplexing. It would be
great if someone could now test on a board with multiplexing, just to
make sure I didn't break anything. Ulrich?

* * * * *

From: Jean Delvare <khali@linux-fr.org>
Subject: i2c: Clear i2c_adapter.dev on adapter removal

Clear i2c_adapter.dev on adapter removal. This makes it possible to
re-add the adapter at a later point, which some drivers
(i2c-amd756-s4882, i2c-nforce2-s4985) actually do.

Signed-off-by: Jean Delvare <khali@linux-fr.org>
---
 drivers/i2c/busses/i2c-amd756-s4882.c  |   27 +++++++++++++--------------
 drivers/i2c/busses/i2c-nforce2-s4985.c |   31 +++++++++++++++----------------
 drivers/i2c/i2c-core.c                 |    4 ++++
 3 files changed, 32 insertions(+), 30 deletions(-)

--- linux-2.6.27-rc0.orig/drivers/i2c/i2c-core.c	2008-07-16 13:13:00.000000000 +0200
+++ linux-2.6.27-rc0/drivers/i2c/i2c-core.c	2008-07-16 13:27:48.000000000 +0200
@@ -654,6 +654,10 @@ int i2c_del_adapter(struct i2c_adapter *
 
 	dev_dbg(&adap->dev, "adapter [%s] unregistered\n", adap->name);
 
+	/* Clear the device structure in case this adapter is ever going to be
+	   added again */
+	memset(&adap->dev, 0, sizeof(adap->dev));
+
  out_unlock:
 	mutex_unlock(&core_lock);
 	return res;
--- linux-2.6.27-rc0.orig/drivers/i2c/busses/i2c-nforce2-s4985.c	2008-07-16 10:41:52.000000000 +0200
+++ linux-2.6.27-rc0/drivers/i2c/busses/i2c-nforce2-s4985.c	2008-07-16 13:58:43.000000000 +0200
@@ -150,6 +150,16 @@ static int __init nforce2_s4985_init(voi
 	int i, error;
 	union i2c_smbus_data ioconfig;
 
+	/* 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,
+			       I2C_SMBUS_BYTE_DATA, &ioconfig);
+	if (error) {
+		dev_err(&nforce2_smbus->dev, "PCA9556 configuration failed\n");
+		error = -EIO;
+		goto ERROR0;
+	}
+
 	/* Unregister physical bus */
 	if (!nforce2_smbus)
 		return -ENODEV;
@@ -191,24 +201,13 @@ static int __init nforce2_s4985_init(voi
 	s4985_algo[3].smbus_xfer = nforce2_access_virt3;
 	s4985_algo[4].smbus_xfer = nforce2_access_virt4;
 
-	/* Configure the PCA9556 multiplexer */
-	ioconfig.byte = 0x00; /* All I/O to output mode */
-	error = nforce2_smbus->algo->smbus_xfer(nforce2_smbus, 0x18, 0,
-						I2C_SMBUS_WRITE, 0x03,
-						I2C_SMBUS_BYTE_DATA, &ioconfig);
-	if (error) {
-		dev_err(&nforce2_smbus->dev, "PCA9556 configuration failed\n");
-		error = -EIO;
-		goto ERROR3;
-	}
-
 	/* Register virtual adapters */
 	for (i = 0; i < 5; i++) {
 		error = i2c_add_adapter(s4985_adapter + i);
 		if (error) {
-			dev_err(&nforce2_smbus->dev,
-				"Virtual adapter %d registration "
-				"failed, module not inserted\n", i);
+			printk(KERN_ERR "i2c-nforce2-s4985: "
+			       "Virtual adapter %d registration "
+			       "failed, module not inserted\n", i);
 			for (i--; i >= 0; i--)
 				i2c_del_adapter(s4985_adapter + i);
 			goto ERROR3;
@@ -245,8 +244,8 @@ static void __exit nforce2_s4985_exit(vo
 
 	/* Restore physical bus */
 	if (i2c_add_adapter(nforce2_smbus))
-		dev_err(&nforce2_smbus->dev, "Physical bus restoration "
-			"failed\n");
+		printk(KERN_ERR "i2c-nforce2-s4985: "
+		       "Physical bus restoration failed\n");
 }
 
 MODULE_AUTHOR("Jean Delvare <khali@linux-fr.org>");
--- linux-2.6.27-rc0.orig/drivers/i2c/busses/i2c-amd756-s4882.c	2008-07-16 10:41:52.000000000 +0200
+++ linux-2.6.27-rc0/drivers/i2c/busses/i2c-amd756-s4882.c	2008-07-16 13:58:25.000000000 +0200
@@ -155,6 +155,16 @@ static int __init amd756_s4882_init(void
 	int i, error;
 	union i2c_smbus_data ioconfig;
 
+	/* 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,
+			       I2C_SMBUS_BYTE_DATA, &ioconfig);
+	if (error) {
+		dev_err(&amd756_smbus.dev, "PCA9556 configuration failed\n");
+		error = -EIO;
+		goto ERROR0;
+	}
+
 	/* Unregister physical bus */
 	error = i2c_del_adapter(&amd756_smbus);
 	if (error) {
@@ -198,22 +208,11 @@ static int __init amd756_s4882_init(void
 	s4882_algo[3].smbus_xfer = amd756_access_virt3;
 	s4882_algo[4].smbus_xfer = amd756_access_virt4;
 
-	/* Configure the PCA9556 multiplexer */
-	ioconfig.byte = 0x00; /* All I/O to output mode */
-	error = amd756_smbus.algo->smbus_xfer(&amd756_smbus, 0x18, 0,
-					      I2C_SMBUS_WRITE, 0x03,
-					      I2C_SMBUS_BYTE_DATA, &ioconfig);
-	if (error) {
-		dev_err(&amd756_smbus.dev, "PCA9556 configuration failed\n");
-		error = -EIO;
-		goto ERROR3;
-	}
-
 	/* Register virtual adapters */
 	for (i = 0; i < 5; i++) {
 		error = i2c_add_adapter(s4882_adapter+i);
 		if (error) {
-			dev_err(&amd756_smbus.dev,
+			printk(KERN_ERR "i2c-amd756-s4882: "
 			       "Virtual adapter %d registration "
 			       "failed, module not inserted\n", i);
 			for (i--; i >= 0; i--)
@@ -252,8 +251,8 @@ static void __exit amd756_s4882_exit(voi
 
 	/* Restore physical bus */
 	if (i2c_add_adapter(&amd756_smbus))
-		dev_err(&amd756_smbus.dev, "Physical bus restoration "
-			"failed\n");
+		printk(KERN_ERR "i2c-amd756-s4882: "
+		       "Physical bus restoration failed\n");
 }
 
 MODULE_AUTHOR("Jean Delvare <khali@linux-fr.org>");


-- 
Jean Delvare

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [crash, bisected] I2C,  kobject (ffff81003e8c4160): tried to init an initialized object
  2008-07-16 12:18       ` Jean Delvare
@ 2008-07-17  9:26         ` Ingo Molnar
  2008-07-17  9:33           ` Ingo Molnar
       [not found]           ` <20080717092655.GA6115-X9Un+BFzKDI@public.gmane.org>
  0 siblings, 2 replies; 18+ messages in thread
From: Ingo Molnar @ 2008-07-17  9:26 UTC (permalink / raw)
  To: Jean Delvare; +Cc: john stultz, Greg KH, LKML, Linux I2C, Ulrich Drepper


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 

Pid: 1, comm: swapper Not tainted (2.6.26-tip #3033)
EIP: 0060:[<c04af2cf>] EFLAGS: 00010246 CPU: 0
EIP is at i2c_smbus_xfer+0x27/0x3f0
EAX: 00000003 EBX: 00000000 ECX: 00000000 EDX: 00000018
ESI: 00000003 EDI: 00000018 EBP: f7c6ff24 ESP: f7c6fea8
 DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0068
Process swapper (pid: 1, ti=f7c6e000 task=f7c70000 task.ti=f7c6e000)
Stack: 00000035 00030000 00000000 c0104237 00000000 00000046 00000046 00000000 
       00000000 f7c6ff50 c09debf0 0001007b fffe007b 000000d8 ffffffef c01213cb 
       00000060 00000286 f7c6ff1c 00000004 00000286 00000246 f7c6ff24 c014673a 
Call Trace:
 [<c0104237>] ? common_interrupt+0x23/0x28
 [<c01213cb>] ? vprintk+0x290/0x29b
 [<c014673a>] ? ftrace_record_ip+0x19f/0x1e6
 [<c01a1385>] ? sysfs_add_file_mode+0x57/0x76
 [<c099632f>] ? nforce2_s4985_init+0x2d/0x275
 [<c013319c>] ? ktime_get_ts+0x51/0x55
 [<c01331b8>] ? ktime_get+0x18/0x34
 [<c0971887>] ? kernel_init+0x11f/0x24a
 [<c0996302>] ? nforce2_s4985_init+0x0/0x275
 [<c011cbe8>] ? schedule_tail+0x1e/0x4d
 [<c01037aa>] ? ret_from_fork+0x6/0x1c
 [<c0971768>] ? kernel_init+0x0/0x24a
 [<c0971768>] ? kernel_init+0x0/0x24a
 [<c0104477>] ? kernel_thread_helper+0x7/0x10
 =======================
Code: 5e 5f 5d c3 55 89 e5 57 56 53 83 ec 70 e8 ca 51 c5 ff 89 45 8c 8b 75 0c 83 e1 14 8a 45 08 89 d7 8b 5d 8c 88 45 8b 89 f0 88 45 8a <8b> 43 0c 83 78 04 00 0f b7 c1 89 45 84 74 3a 83 c3 20 89 d8 e8 
EIP: [<c04af2cf>] i2c_smbus_xfer+0x27/0x3f0 SS:ESP 0068:f7c6fea8
Kernel panic - not syncing: Fatal exception
Pid: 1, comm: swapper Tainted: G      D   2.6.26-tip #3033
 [<c01208ee>] panic+0x44/0xeb
 [<c0104c8d>] die+0x123/0x13a
 [<c0110f38>] do_page_fault+0x632/0x6f2
 [<c0110906>] ? do_page_fault+0x0/0x6f2
 [<c06585ca>] error_code+0x72/0x78
 [<c04af2cf>] ? i2c_smbus_xfer+0x27/0x3f0
 [<c0104237>] ? common_interrupt+0x23/0x28
 [<c01213cb>] ? vprintk+0x290/0x29b
 [<c014673a>] ? ftrace_record_ip+0x19f/0x1e6
 [<c01a1385>] ? sysfs_add_file_mode+0x57/0x76
 [<c099632f>] nforce2_s4985_init+0x2d/0x275
 [<c013319c>] ? ktime_get_ts+0x51/0x55
 [<c01331b8>] ? ktime_get+0x18/0x34
 [<c0971887>] kernel_init+0x11f/0x24a
 [<c0996302>] ? nforce2_s4985_init+0x0/0x275
 [<c011cbe8>] ? schedule_tail+0x1e/0x4d
 [<c01037aa>] ? ret_from_fork+0x6/0x1c
 [<c0971768>] ? kernel_init+0x0/0x24a
 [<c0971768>] ? kernel_init+0x0/0x24a
 [<c0104477>] kernel_thread_helper+0x7/0x10
 =======================

the config is:

  http://redhat.com/~mingo/misc/config-Thu_Jul_17_10_47_42_CEST_2008.bad

this too seems to have a sysfs angle. I have tried 
a3cf859321486f69506326146ab3e2fd15c05c3f, is that supposed to have fixed 
all previous problems?

	Ingo

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [crash, bisected] I2C,  kobject (ffff81003e8c4160): tried to init an initialized object
  2008-07-17  9:26         ` Ingo Molnar
@ 2008-07-17  9:33           ` Ingo Molnar
  2008-07-17  9:48             ` Alexey Dobriyan
       [not found]           ` <20080717092655.GA6115-X9Un+BFzKDI@public.gmane.org>
  1 sibling, 1 reply; 18+ messages in thread
From: Ingo Molnar @ 2008-07-17  9:33 UTC (permalink / raw)
  To: Jean Delvare; +Cc: john stultz, Greg KH, LKML, Linux I2C, Ulrich Drepper


* 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.

	Ingo

------------------->
commit 15e524060d13e8fac3fe2fb6c6519be6de9ab8a8
Author: Ingo Molnar <mingo@elte.hu>
Date:   Thu Jul 17 11:29:44 2008 +0200

    i2c workaround: turn off I2C_NFORCE2_S4985 for now
    
    I2C_NFORCE2_S4985 causes this crash:
    
    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
    
    Pid: 1, comm: swapper Not tainted (2.6.26-tip #3033)
    EIP: 0060:[<c04af2cf>] EFLAGS: 00010246 CPU: 0
    EIP is at i2c_smbus_xfer+0x27/0x3f0
    EAX: 00000003 EBX: 00000000 ECX: 00000000 EDX: 00000018
    ESI: 00000003 EDI: 00000018 EBP: f7c6ff24 ESP: f7c6fea8
     DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0068
    Process swapper (pid: 1, ti=f7c6e000 task=f7c70000 task.ti=f7c6e000)
    Stack: 00000035 00030000 00000000 c0104237 00000000 00000046 00000046 00000000
           00000000 f7c6ff50 c09debf0 0001007b fffe007b 000000d8 ffffffef c01213cb
           00000060 00000286 f7c6ff1c 00000004 00000286 00000246 f7c6ff24 c014673a
    Call Trace:
     [<c0104237>] ? common_interrupt+0x23/0x28
     [<c01213cb>] ? vprintk+0x290/0x29b
     [<c014673a>] ? ftrace_record_ip+0x19f/0x1e6
     [<c01a1385>] ? sysfs_add_file_mode+0x57/0x76
     [<c099632f>] ? nforce2_s4985_init+0x2d/0x275
     [<c013319c>] ? ktime_get_ts+0x51/0x55
     [<c01331b8>] ? ktime_get+0x18/0x34
     [<c0971887>] ? kernel_init+0x11f/0x24a
     [<c0996302>] ? nforce2_s4985_init+0x0/0x275
     [<c011cbe8>] ? schedule_tail+0x1e/0x4d
     [<c01037aa>] ? ret_from_fork+0x6/0x1c
     [<c0971768>] ? kernel_init+0x0/0x24a
     [<c0971768>] ? kernel_init+0x0/0x24a
     [<c0104477>] ? kernel_thread_helper+0x7/0x10
     =======================
    Code: 5e 5f 5d c3 55 89 e5 57 56 53 83 ec 70 e8 ca 51 c5 ff 89 45 8c 8b 75 0c 83 e1 14 8a 45 08 89 d7 8b 5d 8c 88 45 8b 89 f0 88 45 8a <8b> 43 0c 83 78 04 00 0f b7 c1 89 45 84 74 3a 83 c3 20 89 d8 e8
    EIP: [<c04af2cf>] i2c_smbus_xfer+0x27/0x3f0 SS:ESP 0068:f7c6fea8
    Kernel panic - not syncing: Fatal exception
    Pid: 1, comm: swapper Tainted: G      D   2.6.26-tip #3033
     [<c01208ee>] panic+0x44/0xeb
     [<c0104c8d>] die+0x123/0x13a
     [<c0110f38>] do_page_fault+0x632/0x6f2
     [<c0110906>] ? do_page_fault+0x0/0x6f2
     [<c06585ca>] error_code+0x72/0x78
     [<c04af2cf>] ? i2c_smbus_xfer+0x27/0x3f0
     [<c0104237>] ? common_interrupt+0x23/0x28
     [<c01213cb>] ? vprintk+0x290/0x29b
     [<c014673a>] ? ftrace_record_ip+0x19f/0x1e6
     [<c01a1385>] ? sysfs_add_file_mode+0x57/0x76
     [<c099632f>] nforce2_s4985_init+0x2d/0x275
     [<c013319c>] ? ktime_get_ts+0x51/0x55
     [<c01331b8>] ? ktime_get+0x18/0x34
     [<c0971887>] kernel_init+0x11f/0x24a
     [<c0996302>] ? nforce2_s4985_init+0x0/0x275
     [<c011cbe8>] ? schedule_tail+0x1e/0x4d
     [<c01037aa>] ? ret_from_fork+0x6/0x1c
     [<c0971768>] ? kernel_init+0x0/0x24a
     [<c0971768>] ? kernel_init+0x0/0x24a
     [<c0104477>] kernel_thread_helper+0x7/0x10
     =======================
    
    with this config:
    
      http://redhat.com/~mingo/misc/config-Thu_Jul_17_10_47_42_CEST_2008.bad
    
    Signed-off-by: Ingo Molnar <mingo@elte.hu>
---
 drivers/i2c/busses/Kconfig |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig
index 6ee997b..2213fab 100644
--- a/drivers/i2c/busses/Kconfig
+++ b/drivers/i2c/busses/Kconfig
@@ -149,6 +149,9 @@ config I2C_NFORCE2
 config I2C_NFORCE2_S4985
 	tristate "SMBus multiplexing on the Tyan S4985"
 	depends on I2C_NFORCE2 && EXPERIMENTAL
+	# broke a T60 Core2Duo with:
+	# http://redhat.com/~mingo/misc/config-Thu_Jul_17_10_47_42_CEST_2008.bad
+	depends on 0
 	help
 	  Enabling this option will add specific SMBus support for the Tyan
 	  S4985 motherboard.  On this 4-CPU board, the SMBus is multiplexed

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* Re: [crash, bisected] I2C,  kobject (ffff81003e8c4160): tried to init an initialized object
  2008-07-17  9:33           ` Ingo Molnar
@ 2008-07-17  9:48             ` Alexey Dobriyan
       [not found]               ` <20080717094858.GA18687-QDJVlCTZ4KWTKS93B3g+7KFoa47nwP16@public.gmane.org>
  2008-08-06 20:21                 ` Jean Delvare
  0 siblings, 2 replies; 18+ messages in thread
From: Alexey Dobriyan @ 2008-07-17  9:48 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: Jean Delvare, john stultz, Greg KH, LKML, Linux I2C,
	Ulrich Drepper

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.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [crash, bisected] I2C, kobject (ffff81003e8c4160): tried to init an initialized object
  2008-07-17  9:26         ` Ingo Molnar
@ 2008-07-17  9:49               ` Ingo Molnar
       [not found]           ` <20080717092655.GA6115-X9Un+BFzKDI@public.gmane.org>
  1 sibling, 0 replies; 18+ messages in thread
From: Ingo Molnar @ 2008-07-17  9:49 UTC (permalink / raw)
  To: Jean Delvare; +Cc: Ulrich Drepper, john stultz, Greg KH, LKML, Linux I2C


* Ingo Molnar <mingo-X9Un+BFzKDI@public.gmane.org> wrote:

> -tip testing found another (similar) i2c crash with latest -git, on a 
> Core2Duo laptop:

found another bootup crash on an Athlon 64 X2 testsystem:

[   19.610000] bus: 'pci': add driver amd756_smbus
[   19.615204] initcall amd756_init+0x0/0x20 returned 0 after 9 msecs
[   19.620000] calling  amd756_s4882_init+0x0/0x2d7
[   19.624242] ------------[ cut here ]------------
[   19.628415] WARNING: at kernel/mutex.c:134 mutex_lock_nested+0xc0/0x267()
[   19.630000] Pid: 1, comm: swapper Not tainted 2.6.26-tip #20066
[   19.630000] 
[   19.630000] Call Trace:
[   19.630000]  [<ffffffff802358f5>] warn_on_slowpath+0x58/0x7f
[   19.630000]  [<ffffffff80263ac6>] ? ftrace_record_ip+0x20c/0x263
[   19.630000]  [<ffffffff80514faa>] ? _raw_spin_unlock+0x8e/0x93
[   19.630000]  [<ffffffff80507c44>] ? debug_locks_off+0x4/0x3c
[   19.630000]  [<ffffffff80263ac6>] ? ftrace_record_ip+0x20c/0x263
[   19.630000]  [<ffffffff8020b3a4>] ? mcount_call+0x5/0x31
[   19.630000]  [<ffffffff80861c19>] mutex_lock_nested+0xc0/0x267
[   19.630000]  [<ffffffff806e8ffd>] ? i2c_smbus_xfer+0x59/0x49c
[   19.630000]  [<ffffffff80cc8575>] ? amd756_s4882_init+0x0/0x2d7
[   19.630000]  [<ffffffff8020b3a4>] ? mcount_call+0x5/0x31
[   19.630000]  [<ffffffff806e8ffd>] i2c_smbus_xfer+0x59/0x49c
[   19.630000]  [<ffffffff80263ac6>] ? ftrace_record_ip+0x20c/0x263
[   19.630000]  [<ffffffff80514faa>] ? _raw_spin_unlock+0x8e/0x93
[   19.630000]  [<ffffffff80cc8584>] ? amd756_s4882_init+0xf/0x2d7
[   19.630000]  [<ffffffff80263ac6>] ? ftrace_record_ip+0x20c/0x263
[   19.630000]  [<ffffffff80cc8575>] ? amd756_s4882_init+0x0/0x2d7
[   19.630000]  [<ffffffff8020b3a4>] ? mcount_call+0x5/0x31
[   19.630000]  [<ffffffff80cc8575>] ? amd756_s4882_init+0x0/0x2d7
[   19.630000]  [<ffffffff80cc85b6>] amd756_s4882_init+0x41/0x2d7
[   19.630000]  [<ffffffff8024e325>] ? getnstimeofday+0x3f/0xa1
[   19.630000]  [<ffffffff8024bf25>] ? ktime_get_ts+0x4e/0x53
[   19.630000]  [<ffffffff80cc8575>] ? amd756_s4882_init+0x0/0x2d7
[   19.630000]  [<ffffffff80ca49a0>] kernel_init+0x143/0x2a4
[   19.630000]  [<ffffffff80863721>] ? _spin_unlock_irq+0x2b/0x37
[   19.630000]  [<ffffffff8020c9f9>] child_rip+0xa/0x11
[   19.630000]  [<ffffffff80ca485d>] ? kernel_init+0x0/0x2a4
[   19.630000]  [<ffffffff8020c9ef>] ? child_rip+0x0/0x11
[   19.630000] 
[   19.630000] ---[ end trace 0e79313125261797 ]---
[   19.630000] BUG: unable to handle kernel NULL pointer dereference at 0000000000000000
[   19.630000] IP: [<ffffffff80861c66>] mutex_lock_nested+0x10d/0x267

with this config:

  http://redhat.com/~mingo/misc/config-Thu_Jul_17_11_34_08_CEST_2008.bad

i already had I2C_NFORCE2_S4985 off here, so it's a different one.

	Ingo

_______________________________________________
i2c mailing list
i2c-GZX6beZjE8VD60Wz+7aTrA@public.gmane.org
http://lists.lm-sensors.org/mailman/listinfo/i2c

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [crash, bisected] I2C,  kobject (ffff81003e8c4160): tried to init an initialized object
@ 2008-07-17  9:49               ` Ingo Molnar
  0 siblings, 0 replies; 18+ messages in thread
From: Ingo Molnar @ 2008-07-17  9:49 UTC (permalink / raw)
  To: Jean Delvare; +Cc: john stultz, Greg KH, LKML, Linux I2C, Ulrich Drepper


* Ingo Molnar <mingo@elte.hu> wrote:

> -tip testing found another (similar) i2c crash with latest -git, on a 
> Core2Duo laptop:

found another bootup crash on an Athlon 64 X2 testsystem:

[   19.610000] bus: 'pci': add driver amd756_smbus
[   19.615204] initcall amd756_init+0x0/0x20 returned 0 after 9 msecs
[   19.620000] calling  amd756_s4882_init+0x0/0x2d7
[   19.624242] ------------[ cut here ]------------
[   19.628415] WARNING: at kernel/mutex.c:134 mutex_lock_nested+0xc0/0x267()
[   19.630000] Pid: 1, comm: swapper Not tainted 2.6.26-tip #20066
[   19.630000] 
[   19.630000] Call Trace:
[   19.630000]  [<ffffffff802358f5>] warn_on_slowpath+0x58/0x7f
[   19.630000]  [<ffffffff80263ac6>] ? ftrace_record_ip+0x20c/0x263
[   19.630000]  [<ffffffff80514faa>] ? _raw_spin_unlock+0x8e/0x93
[   19.630000]  [<ffffffff80507c44>] ? debug_locks_off+0x4/0x3c
[   19.630000]  [<ffffffff80263ac6>] ? ftrace_record_ip+0x20c/0x263
[   19.630000]  [<ffffffff8020b3a4>] ? mcount_call+0x5/0x31
[   19.630000]  [<ffffffff80861c19>] mutex_lock_nested+0xc0/0x267
[   19.630000]  [<ffffffff806e8ffd>] ? i2c_smbus_xfer+0x59/0x49c
[   19.630000]  [<ffffffff80cc8575>] ? amd756_s4882_init+0x0/0x2d7
[   19.630000]  [<ffffffff8020b3a4>] ? mcount_call+0x5/0x31
[   19.630000]  [<ffffffff806e8ffd>] i2c_smbus_xfer+0x59/0x49c
[   19.630000]  [<ffffffff80263ac6>] ? ftrace_record_ip+0x20c/0x263
[   19.630000]  [<ffffffff80514faa>] ? _raw_spin_unlock+0x8e/0x93
[   19.630000]  [<ffffffff80cc8584>] ? amd756_s4882_init+0xf/0x2d7
[   19.630000]  [<ffffffff80263ac6>] ? ftrace_record_ip+0x20c/0x263
[   19.630000]  [<ffffffff80cc8575>] ? amd756_s4882_init+0x0/0x2d7
[   19.630000]  [<ffffffff8020b3a4>] ? mcount_call+0x5/0x31
[   19.630000]  [<ffffffff80cc8575>] ? amd756_s4882_init+0x0/0x2d7
[   19.630000]  [<ffffffff80cc85b6>] amd756_s4882_init+0x41/0x2d7
[   19.630000]  [<ffffffff8024e325>] ? getnstimeofday+0x3f/0xa1
[   19.630000]  [<ffffffff8024bf25>] ? ktime_get_ts+0x4e/0x53
[   19.630000]  [<ffffffff80cc8575>] ? amd756_s4882_init+0x0/0x2d7
[   19.630000]  [<ffffffff80ca49a0>] kernel_init+0x143/0x2a4
[   19.630000]  [<ffffffff80863721>] ? _spin_unlock_irq+0x2b/0x37
[   19.630000]  [<ffffffff8020c9f9>] child_rip+0xa/0x11
[   19.630000]  [<ffffffff80ca485d>] ? kernel_init+0x0/0x2a4
[   19.630000]  [<ffffffff8020c9ef>] ? child_rip+0x0/0x11
[   19.630000] 
[   19.630000] ---[ end trace 0e79313125261797 ]---
[   19.630000] BUG: unable to handle kernel NULL pointer dereference at 0000000000000000
[   19.630000] IP: [<ffffffff80861c66>] mutex_lock_nested+0x10d/0x267

with this config:

  http://redhat.com/~mingo/misc/config-Thu_Jul_17_11_34_08_CEST_2008.bad

i already had I2C_NFORCE2_S4985 off here, so it's a different one.

	Ingo

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [crash, bisected] I2C,  kobject (ffff81003e8c4160): tried to init an initialized object
  2008-07-17  9:49               ` Ingo Molnar
  (?)
@ 2008-07-17  9:54               ` Ingo Molnar
  -1 siblings, 0 replies; 18+ messages in thread
From: Ingo Molnar @ 2008-07-17  9:54 UTC (permalink / raw)
  To: Jean Delvare; +Cc: john stultz, Greg KH, LKML, Linux I2C, Ulrich Drepper


* Ingo Molnar <mingo@elte.hu> wrote:

> found another bootup crash on an Athlon 64 X2 testsystem:
> 
> [   19.610000] bus: 'pci': add driver amd756_smbus
> [   19.615204] initcall amd756_init+0x0/0x20 returned 0 after 9 msecs
> [   19.620000] calling  amd756_s4882_init+0x0/0x2d7
> [   19.624242] ------------[ cut here ]------------
> [   19.628415] WARNING: at kernel/mutex.c:134 mutex_lock_nested+0xc0/0x267()
> [   19.630000] Pid: 1, comm: swapper Not tainted 2.6.26-tip #20066

> [   19.630000] ---[ end trace 0e79313125261797 ]---
> [   19.630000] BUG: unable to handle kernel NULL pointer dereference at 0000000000000000
> [   19.630000] IP: [<ffffffff80861c66>] mutex_lock_nested+0x10d/0x267

turning off CONFIG_I2C_AMD756_S4882 works around this bug (as expected), 
via the patch below.

	Ingo

--------------------------->
commit 3f6403ab0bfdfca0cefbbc414afedc62734392f3
Author: Ingo Molnar <mingo@elte.hu>
Date:   Thu Jul 17 11:52:41 2008 +0200

    i2c: work around boot crash in amd756_s4882_init()
    
    work around:
    
    [   19.610000] bus: 'pci': add driver amd756_smbus
    [   19.615204] initcall amd756_init+0x0/0x20 returned 0 after 9 msecs
    [   19.620000] calling  amd756_s4882_init+0x0/0x2d7
    [   19.624242] ------------[ cut here ]------------
    [   19.628415] WARNING: at kernel/mutex.c:134 mutex_lock_nested+0xc0/0x267()
    [   19.630000] Pid: 1, comm: swapper Not tainted 2.6.26-tip #20066
    [   19.630000]
    [   19.630000] Call Trace:
    [   19.630000]  [<ffffffff802358f5>] warn_on_slowpath+0x58/0x7f
    [   19.630000]  [<ffffffff80263ac6>] ? ftrace_record_ip+0x20c/0x263
    [   19.630000]  [<ffffffff80514faa>] ? _raw_spin_unlock+0x8e/0x93
    [   19.630000]  [<ffffffff80507c44>] ? debug_locks_off+0x4/0x3c
    [   19.630000]  [<ffffffff80263ac6>] ? ftrace_record_ip+0x20c/0x263
    [   19.630000]  [<ffffffff8020b3a4>] ? mcount_call+0x5/0x31
    [   19.630000]  [<ffffffff80861c19>] mutex_lock_nested+0xc0/0x267
    [   19.630000]  [<ffffffff806e8ffd>] ? i2c_smbus_xfer+0x59/0x49c
    [   19.630000]  [<ffffffff80cc8575>] ? amd756_s4882_init+0x0/0x2d7
    [   19.630000]  [<ffffffff8020b3a4>] ? mcount_call+0x5/0x31
    [   19.630000]  [<ffffffff806e8ffd>] i2c_smbus_xfer+0x59/0x49c
    [   19.630000]  [<ffffffff80263ac6>] ? ftrace_record_ip+0x20c/0x263
    [   19.630000]  [<ffffffff80514faa>] ? _raw_spin_unlock+0x8e/0x93
    [   19.630000]  [<ffffffff80cc8584>] ? amd756_s4882_init+0xf/0x2d7
    [   19.630000]  [<ffffffff80263ac6>] ? ftrace_record_ip+0x20c/0x263
    [   19.630000]  [<ffffffff80cc8575>] ? amd756_s4882_init+0x0/0x2d7
    [   19.630000]  [<ffffffff8020b3a4>] ? mcount_call+0x5/0x31
    [   19.630000]  [<ffffffff80cc8575>] ? amd756_s4882_init+0x0/0x2d7
    [   19.630000]  [<ffffffff80cc85b6>] amd756_s4882_init+0x41/0x2d7
    [   19.630000]  [<ffffffff8024e325>] ? getnstimeofday+0x3f/0xa1
    [   19.630000]  [<ffffffff8024bf25>] ? ktime_get_ts+0x4e/0x53
    [   19.630000]  [<ffffffff80cc8575>] ? amd756_s4882_init+0x0/0x2d7
    [   19.630000]  [<ffffffff80ca49a0>] kernel_init+0x143/0x2a4
    [   19.630000]  [<ffffffff80863721>] ? _spin_unlock_irq+0x2b/0x37
    [   19.630000]  [<ffffffff8020c9f9>] child_rip+0xa/0x11
    [   19.630000]  [<ffffffff80ca485d>] ? kernel_init+0x0/0x2a4
    [   19.630000]  [<ffffffff8020c9ef>] ? child_rip+0x0/0x11
    [   19.630000]
    [   19.630000] ---[ end trace 0e79313125261797 ]---
    [   19.630000] BUG: unable to handle kernel NULL pointer dereference at 0000000000000000
    [   19.630000] IP: [<ffffffff80861c66>] mutex_lock_nested+0x10d/0x267
    
    which occurs with:
    
      http://redhat.com/~mingo/misc/config-Thu_Jul_17_11_34_08_CEST_2008.bad
    
    Signed-off-by: Ingo Molnar <mingo@elte.hu>
---
 drivers/i2c/busses/Kconfig |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig
index 2213fab..ead9209 100644
--- a/drivers/i2c/busses/Kconfig
+++ b/drivers/i2c/busses/Kconfig
@@ -56,6 +56,9 @@ config I2C_AMD756
 config I2C_AMD756_S4882
 	tristate "SMBus multiplexing on the Tyan S4882"
 	depends on I2C_AMD756 && EXPERIMENTAL
+	# broke an Athlon 64 X2 Asus A8N-E with:
+	# http://redhat.com/~mingo/misc/config-Thu_Jul_17_11_34_08_CEST_2008.bad
+	depends on 0
 	help
 	  Enabling this option will add specific SMBus support for the Tyan
 	  S4882 motherboard.  On this 4-CPU board, the SMBus is multiplexed

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* Re: [crash, bisected] I2C, kobject (ffff81003e8c4160): tried to init an initialized object
  2008-07-17  9:48             ` Alexey Dobriyan
@ 2008-07-17  9:59                   ` Ingo Molnar
  2008-08-06 20:21                 ` Jean Delvare
  1 sibling, 0 replies; 18+ messages in thread
From: Ingo Molnar @ 2008-07-17  9:59 UTC (permalink / raw)
  To: Alexey Dobriyan; +Cc: john stultz, Greg KH, LKML, Linux I2C, Ulrich Drepper


* Alexey Dobriyan <adobriyan-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:

> On Thu, Jul 17, 2008 at 11:33:30AM +0200, Ingo Molnar wrote:
> > 
> > * Ingo Molnar <mingo-X9Un+BFzKDI@public.gmane.org> 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?

yeah.

> 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.

can try patches, but got other 5 fresh upstream oopses/hangs/crashes to 
investigate now. (so i went for the minimal-effort 
turn-off-the-failing-part approach)

	Ingo

_______________________________________________
i2c mailing list
i2c-GZX6beZjE8VD60Wz+7aTrA@public.gmane.org
http://lists.lm-sensors.org/mailman/listinfo/i2c

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [crash, bisected] I2C,  kobject (ffff81003e8c4160): tried to init an initialized object
@ 2008-07-17  9:59                   ` Ingo Molnar
  0 siblings, 0 replies; 18+ messages in thread
From: Ingo Molnar @ 2008-07-17  9:59 UTC (permalink / raw)
  To: Alexey Dobriyan
  Cc: Jean Delvare, john stultz, Greg KH, LKML, Linux I2C,
	Ulrich Drepper


* Alexey Dobriyan <adobriyan@gmail.com> 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?

yeah.

> 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.

can try patches, but got other 5 fresh upstream oopses/hangs/crashes to 
investigate now. (so i went for the minimal-effort 
turn-off-the-failing-part approach)

	Ingo

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [crash, bisected] I2C, kobject (ffff81003e8c4160): tried to init  an initialized object (was: Re: [GIT PULL] i2c updates for 2.6.27, round 1)
  2008-07-16  9:07     ` Jean Delvare
  (?)
  (?)
@ 2008-07-17 22:42     ` Greg KH
  -1 siblings, 0 replies; 18+ messages in thread
From: Greg KH @ 2008-07-17 22:42 UTC (permalink / raw)
  To: Jean Delvare; +Cc: Ingo Molnar, Linux I2C, LKML, Ben Dooks, john stultz

On Wed, Jul 16, 2008 at 11:07:02AM +0200, Jean Delvare wrote:
> > btw., Greg, the kobject debugging check and output is really nice, 
> > informative and useful! It likely pinpoints the real bug here.
> 
> Is this something new in 2.6.26-gitX? I want to know if the bug is
> something new or if it could be already present in 2.6.26 and earlier
> kernels and went unnoticed so far.

It is in 2.6.26 as I haven't merged any patches with Linus yet, portions
of it might be in older kernels, but not in the same type of format.

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [crash, bisected] I2C,  kobject (ffff81003e8c4160): tried to init an initialized object
  2008-07-17  9:48             ` Alexey Dobriyan
@ 2008-08-06 20:21                 ` Jean Delvare
  2008-08-06 20:21                 ` Jean Delvare
  1 sibling, 0 replies; 18+ messages in thread
From: Jean Delvare @ 2008-08-06 20:21 UTC (permalink / raw)
  To: Alexey Dobriyan
  Cc: Ingo Molnar, john stultz, Greg KH, LKML, Linux I2C,
	Ulrich Drepper

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

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [crash, bisected] I2C,  kobject (ffff81003e8c4160): tried to  init an initialized object
@ 2008-08-06 20:21                 ` Jean Delvare
  0 siblings, 0 replies; 18+ messages in thread
From: Jean Delvare @ 2008-08-06 20:21 UTC (permalink / raw)
  To: Alexey Dobriyan
  Cc: Ingo Molnar, john stultz, Greg KH, LKML, Linux I2C,
	Ulrich Drepper

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

^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2008-08-06 20:22 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
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
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

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.