[PATCH] USB device reference counting fix for uhci.c and usb core
authorJohannes Erdfelt <johannes@erdfelt.com>
Mon, 13 May 2002 07:48:22 +0000 (00:48 -0700)
committerGreg Kroah-Hartman <greg@kroah.com>
Mon, 13 May 2002 07:48:22 +0000 (00:48 -0700)
commit25f04c13fd770e5767370c892126ed9801df4782
tree49bd24a8a72030ef1794a2ddc0970cc69a531550
parent88bcb34e999a18d6d8e647e429acb2ba6d3f0ebd
[PATCH] USB device reference counting fix for uhci.c and usb core

Earlier in the 2.5 development cycle a patch was applied that changed
the reference counting behaviour for USB devices.

There are a couple of problems with the change:
- It made the USB code more complicated as a whole with the introduction
  of an additional cleanup path for devices. Using the traditional method
  of reference counting, cleanup is handled implictly
- It reduces functionality by requiring a callback for all references to
  the device, but doesn't provide a method of providing callbacks for
  references. It relies on the hardcoded device driver ->disconnect and
  HCD ->deallocate method for callbacks

The traditional method of using reference counting supports as many
reference users as needed, without complicating it with mandatory
callbacks to cleanup references.

The change in 2.5 also only helps catch one subset of programming
problem in device drivers, the case where it decrements too many times.
That is of dubious debugging value.

So, this patch reverts the change and makes the reference counting
behave like it does in the rest of the kernel as well as how the USB
code does in 2.4.

This patch doesn't remove all of the superfluous code. Some drivers,
like usb-ohci, ohci-hcd and ehci-hcd have some code that is no longer
needed. I wanted to spend some more time with those drivers since the
changes weren't as trivial as uhci.c and usb-uhci.c.

I've tested with uhci and usb-ohci with no adverse effects.
drivers/usb/core/hcd.h
drivers/usb/core/usb.c
drivers/usb/host/uhci.c
include/linux/usb.h