All of lore.kernel.org
 help / color / mirror / Atom feed
From: Hollis Blanchard <hollisb@us.ibm.com>
To: mochel@digitalimplant.org
Cc: linux-kernel@vger.kernel.org, Greg KH <greg@kroah.com>
Subject: (driver model) bus kset list manipulation bug
Date: Thu, 22 Jan 2004 13:38:53 -0600	[thread overview]
Message-ID: <401026CD.2030600@us.ibm.com> (raw)

Hi Patrick, I know you've passed maintainership of the driver model code 
on, but I was hoping I could jog your memory.

I've found a bug in drivers/base/bus.c, where the bus_type.devices.list 
is treated as a list of device structs. bus_type.devices is a kset 
though, so devices.list should contain kobjects rather than devices. 
Here is the diff I've come up with:

===== drivers/base/bus.c 1.52 vs edited =====
--- 1.52/drivers/base/bus.c     Tue Sep 30 10:59:35 2003
+++ edited/drivers/base/bus.c   Thu Jan 22 11:22:15 2004
@@ -18,7 +18,7 @@
  #include "base.h"
  #include "power/power.h"

-#define to_dev(node) container_of(node,struct device,bus_list)
+#define to_dev(node) container_of(node,struct device,kobj.entry)
  #define to_drv(node) container_of(node,struct device_driver,kobj.entry)

  #define to_bus_attr(_attr) container_of(_attr,struct bus_attribute,attr)
@@ -164,7 +164,7 @@
         if (!(bus = get_bus(bus)))
                 return -EINVAL;

-       head = start ? &start->bus_list : &bus->devices.list;
+       head = start ? &start->kobj.entry : &bus->devices.list;

         down_read(&bus->subsys.rwsem);
         list_for_each(entry,head) {
@@ -337,7 +337,7 @@
                 return;

         list_for_each(entry,&bus->devices.list) {
-               struct device * dev = container_of(entry,struct 
device,bus_list);
+               struct device * dev = to_dev(entry);
                 if (!dev->driver) {
                         error = bus_match(dev,drv);
                         if (error && (error != -ENODEV))
@@ -405,7 +405,7 @@
         if (bus) {
                 down_write(&dev->bus->subsys.rwsem);
                 pr_debug("bus %s: add device %s\n",bus->name,dev->bus_id);
-               list_add_tail(&dev->bus_list,&dev->bus->devices.list);
+               list_add_tail(&dev->kobj.entry,&dev->bus->devices.list);
                 device_attach(dev);
                 up_write(&dev->bus->subsys.rwsem);
 
sysfs_create_link(&bus->devices.kobj,&dev->kobj,dev->bus_id);

The first hunk you can see is symmetrical with to_drv just below. The 
next hunk, to bus_for_each_dev, makes it match up with bus_for_each_drv 
(I take this as evidence that I'm right). The next hunk, in 
driver_attach, can be compared with device_attach and again you'll see 
the symmetry (to_drv/to_dev).

The last hunk in bus_add_device is where we were inserting the 
device.bus_list rather than devices.kobject.entry into the kset.

These are the only 3 users of the devices kset that I could find. 
Unfortunately when I make these changes I get a panic like so:
    bus_match +0x28
    driver_attach +0xa0
    bus_add_driver +0xdc
    driver_register +0x38
    pci_register_driver +0x6c
    serial8250_pci_init +0x28

I'm having a bit of trouble figuring out what went wrong. Are there 
other users of bus_type.devices that I've missed and need updating? Thanks!

-- 
Hollis Blanchard
IBM Linux Technology Center

             reply	other threads:[~2004-01-22 19:40 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-01-22 19:38 Hollis Blanchard [this message]
2004-01-22 23:35 ` (driver model) bus kset list manipulation bug Hollis Blanchard
2004-01-27 23:31 ` Hollis Blanchard
2004-01-30 20:49   ` Hollis Blanchard

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=401026CD.2030600@us.ibm.com \
    --to=hollisb@us.ibm.com \
    --cc=greg@kroah.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mochel@digitalimplant.org \
    /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.