[PATCH] usb_set_interface: correct toggle reset
authorMartin Diehl <mdiehl@mdiehl.de>
Tue, 12 Feb 2002 14:55:33 +0000 (06:55 -0800)
committerVojtech Pavlik <vojtech@suse.cz>
Tue, 12 Feb 2002 14:55:33 +0000 (06:55 -0800)
commit944b95814efc86a8f64911b2e27a8297d3af5d5e
treef920bc0d4916296411980a6bf568a6e977b21d49
parentbb16c3133188d8fc4fa12d8fb6f3bd77e83f71ef
[PATCH] usb_set_interface: correct toggle reset

this is a patch to prevent usb_set_interface() from erroneously resetting
the toggles for all endpoints instead of only the affected ones from the
requested interface/altsetting. I've also added some missing parentheses
to related macros in usb.h as I prefered not to take special care for
nasty side-effects ;-)

Patch below was created against 2.4.18-pre9 (with some lines of offset it
applies to 2.5.4-pre5 as well).

Tested in multi-interface configuration to provide evidence it:
* correctly identifies the affected endpoints and resets the toggles
* doesn't touch endpoints from other interfaces
* provides correct handling of shared EP0
* solves an issue I had with 2.4.18-pre9 where setting one interface
  occasionally caused transfers on other interface to hang due to lost
  toggle synchronisation

Despite being a pure bugfix, well localized and (IMHO) pretty obviously
correct wrt. USB-spec, I'd like to suggest including this in early
2.4.19-pre. Just in case some existing driver would somehow workaround
the currently wrong behavior and might break with this fix. And it's
not very urgent right now, as we are probably close to 2.4.18-rc1.

Regards,
Martin
drivers/usb/usb.c
include/linux/usb.h