1. 16 Oct, 2002 9 commits
    • Patrick Mochel's avatar
      driver model: replace rwlock in struct bus_type with a rwsem. · ba809e8a
      Patrick Mochel authored
      Synchronize all walks of the device and driver lists of a bus with an rwsem wrapped
      around the entire iterator, instead of using device_lock and dropping it after we 
      grabbed each node. 
      
      Note this also prevents deadlock when walking the list of drivers and calling 
      get_driver(), since get_driver() tries to take device_lock while we already have it
      held.
      ba809e8a
    • Patrick Mochel's avatar
      driver model: change class reference counting to be like devices'. · 1067efac
      Patrick Mochel authored
      device classes join the club of devices, buses, and drivers. They get a 
      ->present flag, which is set on registration and cleared on unregistration.
      They also get get_devclass() and put_devclass(), which, you guessed it, 
      bump the reference count. get_...() of course checks the present flag and
      returns NULL if clear. 
      1067efac
    • Patrick Mochel's avatar
      driver model: make driver refcounting similar to devices'. · 2884fae0
      Patrick Mochel authored
      In the spirit of devices and buses, change driver refcounting model to 
      match the way that devices and buses are done.
      
      struct device_driver gets a ->present field, which is set on registration 
      and cleared in driver_unregister(). get_device() checks the state of this
      flag and returns NULL if cleared. 
      
      Note that the horribly wrong remove_driver() is deprecated and simply BUG()s
      when called. Please convert callers to use driver_unregister(). Updates to 
      callers will be coming soon.
      
      Note also that this still doesn't fix the race in which a driver module can
      be removed while the refcount on a driver > 1. Near future work should help
      to remedy it, but no solutions are guaranteed..
      2884fae0
    • Patrick Mochel's avatar
      driver model: change bus refcounting scheme to match devices'. · 4278bccc
      Patrick Mochel authored
      Based on recent changes to device refcounting/unregistration.
      
      struct bus_type gets a ->present field, which is set when the bus is 
      registered. bus_unregister() is added, which only clears ->present and 
      calls put_bus(). get_bus() checks the ->present and returns NULL if clear.
      
      This allows all current references to buses to keep valid structures, while
      preventing any new references to the bus structure.
      4278bccc
    • Patrick Mochel's avatar
      Merge osdl.org:/home/mochel/src/kernel/devel/linux-2.5-virgin · 67d93a0a
      Patrick Mochel authored
      into osdl.org:/home/mochel/src/kernel/devel/linux-2.5-core
      67d93a0a
    • Patrick Mochel's avatar
      473c7105
    • Patrick Mochel's avatar
      driver model: make device_unregister() only mark device as !present. · 65d20c54
      Patrick Mochel authored
      There are races WRT walking the lists of the buses and classes and the 
      device being unregistered while it's the current node we're accessing. If 
      the node was deleted, ->next would point to itself, and we'd sit in an
      inifinite loop (until that memory was freed from underneath us and we Oops'd).
      
      This changes device_unregister() to only mark the device as not present. put_device()
      deletes the device from all the lists it belongs to, while holding device_lock,
      then drops it to call device_del().
      
      This should guarantee that everything in the device is valid until the last reference
      goes away, regardless of whether it's still physically present or not. 
      65d20c54
    • Matthew Wilcox's avatar
      [PATCH] Allow compilation with -ffunction-sections · 9beb225e
      Matthew Wilcox authored
      If you compile the kernel with -ffunction-sections, each function gets
      put in a section .text.function_name.  This collides with our current use
      of .text.init.  So here's a patch which converts x86 to use .init.text
      instead.
      
      I've tested it on x86 and it still frees 120k of ram, so it seems to work.
      Other architectures will need to change their vmlinux.lds appropriately,
      and may need other changes (arm, m68k seem to use .text.init verbatim).
      9beb225e
    • Linus Torvalds's avatar
      Merge http://ppc.bkbits.net/for-linus-ppc64 · 4c41a1ce
      Linus Torvalds authored
      into home.transmeta.com:/home/torvalds/v2.5/linux
      4c41a1ce
  2. 17 Oct, 2002 3 commits
  3. 16 Oct, 2002 26 commits
  4. 15 Oct, 2002 2 commits