1. 21 Nov, 2002 26 commits
  2. 20 Nov, 2002 14 commits
    • William Lee Irwin III's avatar
    • Arnaldo Carvalho de Melo's avatar
      sound: fix up header cleanups: add include <linux/interrupt.h> · 3d427517
      Arnaldo Carvalho de Melo authored
      also fix a bug in hammerfall driver, removing __exit from a function
      that is called from a non __exit function.
      3d427517
    • Arnaldo Carvalho de Melo's avatar
      tcic: fix up header cleanups: add include <linux/interrupt.h> · 2ea2d9ad
      Arnaldo Carvalho de Melo authored
      also convert some struct initializations to C99 style and change
      irq_count to tcic_irq_count, as irq_count now is a macro...
      2ea2d9ad
    • Arnaldo Carvalho de Melo's avatar
      i2o: fix up header cleanups: add include <linux/interrupt.h> · 21169d23
      Arnaldo Carvalho de Melo authored
      and also makes a var go to .bss...
      21169d23
    • William Lee Irwin III's avatar
    • Arnaldo Carvalho de Melo's avatar
    • Patrick Mochel's avatar
      partitions: use the name in disk->kobj.name, instead of disk->disk_name. · 24fbb994
      Patrick Mochel authored
      Some names (for some reason) have a '/' in them, making them no good for directory
      names. disk->kobj.name has already been transformed to turn those into '!', so this
      makes sure we use those when setting the name for the partitions' names.
      24fbb994
    • Patrick Mochel's avatar
      USB: minor driver model-related updates. · cad58392
      Patrick Mochel authored
      - don't define and use a release callback for the generic driver. 
      
      - Call bus_unregister() in usb_exit() to remove the usb driver, instead of put_bus().
      cad58392
    • Patrick Mochel's avatar
      driver model: make classes and interfaces use kobject infrastructure. · b47b46a3
      Patrick Mochel authored
      Like the other objects, this allows a decent bit of cleanup. Details include:
      
      - use rwsem in subsytem, instead of one in struct device_class.
      
      - use refcount in struct kobject, instead of one in struct device_class.
      
      - kill class's present flag. 
      
      - kill class_list, since we can just use class_subsys's. 
      
      - make interfaces instances of their class's subsystem. This allows us to 
      kill struct device_class::intf_list, and struct device_interface::node.
      b47b46a3
    • Patrick Mochel's avatar
      Merge osdl.org:/home/mochel/src/kernel/devel/linux-2.5-virgin · 63ae7a91
      Patrick Mochel authored
      into osdl.org:/home/mochel/src/kernel/devel/linux-2.5-kobject
      63ae7a91
    • Patrick Mochel's avatar
      driver model: update and clean bus and driver support. · 3c8d66aa
      Patrick Mochel authored
      This a multi-pronged attack aimed at exploiting the kobject infrastructure mor. 
      
      - Remove bus_driver_list, in favor of list in bus_subys.
      
      - Remove bus_for_each_* and driver_for_each_dev(). They're not being used by
      anyone, have questionable locking semantics, and really don't provide that
      much use, as the function returns once the callback fails, with no indication
      of where it failed. Forget them, at least for now. 
      
      - Make sure that we return success from bus_match() if device matches, but
      doesn't have a probe method.
      
      - Remove extraneous get_{device,driver}s from bus routines that are serialized
      by the bus's rwsem. bus_{add,remove}_{device,driver} all take the rwsem, so there 
      is no way we can get a non-existant object when in those functions.
      
      - Use the rwsem in the struct subsystem the bus has embedded in it, and kill the
      separate one in struct bus_type.
      
      - Move bulk of driver_register() into bus_add_driver(), which holds the bus's
      rwsem during the entirety. this will prevent the driver from being unloaded while
      it's being registered, and two drivers with the same name getting registered
      at the same time. 
      
      - Ditto for driver_unregister() and bus_remove_driver().
      
      - Add driver_release() method for the driver bus driver subsystems. (Explained later)
      
      - Use only the refcounts in the buses' kobjects, and kill the one in struct bus_type.
      
      - Kill struct bus_type::present and struct device_driver::present. These didn't 
      work out the way we intended them to. The idea was to not let a user obtain a 
      rerference count to the object if it was in the process of being unregistered. 
      All the code paths should be fixed now such that their registration is protected with
      a semaphore, so no partially initialized objects can be removed, and enough 
      infrastructure is moved to the kobject model so that once the object is publically
      visible, it should be usable by other sources.
      
      - Add a bus_sem to serialize bus registration and unregistration. 
      
      - Add struct device_driver::unload_sem to prevent unloading of drivers 
      with a positive reference count.
      
      The driver model has always had a bug that would allow a driver with a 
      positive reference count to be unloaded. It would decrement the reference 
      count and return, letting the module be unloaded, without accounting for 
      the other users of the object. This has been discussed many times, though 
      never resolved cleanly. This should fix the problem in the simplest manner.
      
      struct device_driver gets unload_sem, which is initialized to _locked_. When
      the reference count for the driver reaches 0, the semaphore is unlocked.
      driver_unregister() blocks on acquiring this lock before it exits. In the 
      normal case that driver_unregister() drops the last reference to the driver,
      the lock will be acquired immediately, and the module will unload. 
      
      In the case that someone else is using the driver object, driver_unregister()
      will not be able to acquire the lock, since the refcount has not reached 0,
      and the lock has not been released. 
      
      This means that rmmod(8) will block while drivers' sysfs files are open. 
      There are no sysfs files for drivers yet, but note this when they do have 
      some.
      3c8d66aa
    • Patrick Mochel's avatar
      sysfs: various updates. · 1b867c36
      Patrick Mochel authored
      - Don't do extra dget() when creating symlink. 
      This is a long-standing bug with a simple and obvious fix. We were doing 
      an extra dget() on the dentry after d_instantiate(). It only gets decremented
      once on removal, so the dentry was never really going away, and the directory
      wasn't, either. 
      
      - Use simple_unlink() instead of sysfs_unlink().
      
      - Use simple_rmdir() instead of our own, unrolled, version. 
      
      - Remove MODULE_LICENSE(), since it's always in the kernel. 
      1b867c36
    • Patrick Mochel's avatar
    • David S. Miller's avatar
      Merge nuts.ninka.net:/home/davem/src/BK/network-2.5 · 9760e249
      David S. Miller authored
      into nuts.ninka.net:/home/davem/src/BK/net-2.5
      9760e249