On Wed, 28 Jun 2006, Greg KH wrote: > > I now have a patch in my quilt tree for the network core that moves all > network devices to be class_devices. With this (2 small driver core > patches are needed to get this to build and work properly, look in the > tree if you're really interested), when we walk the devices, the > subsystem devices get called on the list before the "real" devices (that > are attached to a bus.) > > For example, on my box, I now have: > $ tree /sys/class/net/ > /sys/class/net/ > |-- eth0 -> ../../devices/pci0000:00/0000:00:02.0/0000:01:00.2/0000:03:0e.0/eth0 > |-- eth1 -> ../../devices/pci0000:00/0000:00:02.0/0000:01:00.2/0000:03:0c.0/eth1 > `-- lo -> ../../devices/lo Ok, that looks good. > Now the network subsystem can stop the queue, or do whatever it wanted > to do with no extra headaches or special cases by the driver core at > all. > > Which is what I think you are really wanting here, subsystems doing the > work for their class of devices, which makes it much easier on all of > the individual drivers. Yes, that is definitely going to help. I still want the individual drivers be able to split up their high-level functions ("device discovery/recovery behind this bus device") from their low-level functions ("power on the bus device"), exactly so that we can suspend/resume the actual motherboard devices as a totally separate pass of suspending/resuming the "rest of the system". That's what the dpm_active <-> dpm_off <-> dpm_off_irq transitions give us in my patch - clearly separate stages for what happens "early", and what happens "late". Linus