GitHub/exynos8895/android_kernel_samsung_universal8895.git
11 years agoUSB: iuu_phoenix: remove bogus disconnect test in close
Johan Hovold [Thu, 21 Mar 2013 11:37:50 +0000 (12:37 +0100)]
USB: iuu_phoenix: remove bogus disconnect test in close

Remove bogus disconnect test for serial device being NULL in close. This
can never happen as close is guaranteed to be called before the last tty
reference is dropped (and port->serial is cleared).

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: garmin_gps: remove bogus disconnect test in bulk callback
Johan Hovold [Thu, 21 Mar 2013 11:37:49 +0000 (12:37 +0100)]
USB: garmin_gps: remove bogus disconnect test in bulk callback

Remove bogus disconnect test for serial device being NULL in read bulk
callback. This can never happen as the port read urb is killed (and
poisoned) at close, which in turn is guaranteed to be called before the
last tty reference is dropped (and port->serial is cleared).

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: garmin_gps: remove bogus disconnect test in close
Johan Hovold [Thu, 21 Mar 2013 11:37:48 +0000 (12:37 +0100)]
USB: garmin_gps: remove bogus disconnect test in close

Remove bogus disconnect test for serial device being NULL in close. This
can never happen as close is guaranteed to be called before the last tty
reference is dropped (and port->serial is cleared).

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: visor: always disable uart on close
Johan Hovold [Thu, 21 Mar 2013 11:37:47 +0000 (12:37 +0100)]
USB: visor: always disable uart on close

Always try to disable the uart on close.

Since the switch to tty ports, close will be called as part of shutdown
before disconnect returns. Hence there is no need to check the
disconnected flag, and we can put devices in disabled states also on
driver unbind.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: quatech2: always disable uart on close
Johan Hovold [Thu, 21 Mar 2013 11:37:46 +0000 (12:37 +0100)]
USB: quatech2: always disable uart on close

Always try to disable the uart on close.

Since the switch to tty ports, close will be called as part of shutdown
before disconnect returns. Hence there is no need to check the
disconnected flag, and we can put devices in disabled states also on
driver unbind.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: pl2303: remove disconnect test from tiocmset
Johan Hovold [Thu, 21 Mar 2013 11:37:45 +0000 (12:37 +0100)]
USB: pl2303: remove disconnect test from tiocmset

Remove unnecessary disconnect test in tiocmset. No ioctls will be made
after disconnect returns.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: pl2303: fix return value of tiocmset
Johan Hovold [Thu, 21 Mar 2013 11:37:44 +0000 (12:37 +0100)]
USB: pl2303: fix return value of tiocmset

Make sure we return 0 or a negative error number appropriate for
userspace on errors.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: opticon: remove disconnect test from tiocmset
Johan Hovold [Thu, 21 Mar 2013 11:37:43 +0000 (12:37 +0100)]
USB: opticon: remove disconnect test from tiocmset

Remove unnecessary disconnect test in tiocmset. No ioctls will be made
after disconnect returns.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: opticon: fix return value of tiocmset
Johan Hovold [Thu, 21 Mar 2013 11:37:42 +0000 (12:37 +0100)]
USB: opticon: fix return value of tiocmset

Make sure we return 0 or a negative error number appropriate for
userspace on errors.

Currently 1 rather than 0 is returned on successful operation.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: mos7720: always disable uart on close
Johan Hovold [Thu, 21 Mar 2013 11:37:41 +0000 (12:37 +0100)]
USB: mos7720: always disable uart on close

Always try to disable the uart on close.

Since the switch to tty ports, close will be called as part of shutdown
before disconnect returns. Hence there is no need to check the
disconnected flag, and we can put devices in disabled states also on
driver unbind.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: metro-usb: always disable uart on close
Johan Hovold [Thu, 21 Mar 2013 11:37:40 +0000 (12:37 +0100)]
USB: metro-usb: always disable uart on close

Always try to disable the uart on close.

Since the switch to tty ports, close will be called as part of shutdown
before disconnect returns. Hence there is no need to check the
disconnected flag, and we can put devices in disabled states also on
driver unbind.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: kl5kusb105: always disable uart on close
Johan Hovold [Thu, 21 Mar 2013 11:37:39 +0000 (12:37 +0100)]
USB: kl5kusb105: always disable uart on close

Always try to disable the uart on close.

Since the switch to tty ports, close will be called as part of shutdown
before disconnect returns. Hence there is no need to check the
disconnected flag, and we can put devices in disabled states also on
driver unbind.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: io_ti: always disable uart on close
Johan Hovold [Thu, 21 Mar 2013 11:37:38 +0000 (12:37 +0100)]
USB: io_ti: always disable uart on close

Always try to disable the uart on close.

Since the switch to tty ports, close will be called as part of shutdown
before disconnect returns. Hence there is no need to check the
disconnected flag, and we can put devices in disabled states also on
driver unbind.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: cypress_m8: remove bogus disconnect test from close
Johan Hovold [Thu, 21 Mar 2013 11:37:37 +0000 (12:37 +0100)]
USB: cypress_m8: remove bogus disconnect test from close

Remove disconnected test from close which did not protect any device IO
at all.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: cp210x: always disable uart on close
Johan Hovold [Thu, 21 Mar 2013 11:37:36 +0000 (12:37 +0100)]
USB: cp210x: always disable uart on close

Always try to disable the uart on close.

Since the switch to tty ports, close will be called as part of shutdown
before disconnect returns. Hence there is no need to check the
disconnected flag, and we can put devices in disabled states also on
driver unbind.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: serial: remove unused MSR-wait queue
Johan Hovold [Thu, 21 Mar 2013 11:37:35 +0000 (12:37 +0100)]
USB: serial: remove unused MSR-wait queue

Remove the port MSR-wait queue now that all drivers have been migrated
to the tty-port queue.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: ti_usb_3410_5052: switch to generic TIOCMIWAIT implementation
Johan Hovold [Thu, 21 Mar 2013 11:37:34 +0000 (12:37 +0100)]
USB: ti_usb_3410_5052: switch to generic TIOCMIWAIT implementation

Switch to the generic TIOCMIWAIT implementation which does not suffer
from the races involved when using the deprecated sleep_on functions.

This also fixes the issue with processes waiting for
modem-status-changes not being woken up at disconnect.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: ti_usb_3410_5052: switch to generic get_icount implementation
Johan Hovold [Thu, 21 Mar 2013 11:37:33 +0000 (12:37 +0100)]
USB: ti_usb_3410_5052: switch to generic get_icount implementation

Switch to the generic get_icount implementation.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: ssu100: switch to generic TIOCMIWAIT implementation
Johan Hovold [Thu, 21 Mar 2013 11:37:32 +0000 (12:37 +0100)]
USB: ssu100: switch to generic TIOCMIWAIT implementation

Switch to the generic TIOCMIWAIT implementation.

This also fixes the issue with processes waiting for
modem-status-changes not being woken up at disconnect.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: ssu100: switch to generic get_icount implementation
Johan Hovold [Thu, 21 Mar 2013 11:37:31 +0000 (12:37 +0100)]
USB: ssu100: switch to generic get_icount implementation

Switch to the generic get_icount implementation.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: spcp8x5: add proper modem-status support
Johan Hovold [Thu, 21 Mar 2013 11:37:30 +0000 (12:37 +0100)]
USB: spcp8x5: add proper modem-status support

Fetch modem status on carrier_raised and tiocmget.

This driver appeared to support modem-status but only read the modem
status registers once at open and then used that cached value for all
further enquires.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: spcp8x5: reimplement device type detection
Johan Hovold [Thu, 21 Mar 2013 11:37:29 +0000 (12:37 +0100)]
USB: spcp8x5: reimplement device type detection

Reimplement device type detection using the device id table and quirks.

Device type was used to detect one device type which did not support to
control functions. Add quirks to the device table and store them in the
private port data at probe instead.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: spcp8x5: clean up modem status retrieval
Johan Hovold [Thu, 21 Mar 2013 11:37:28 +0000 (12:37 +0100)]
USB: spcp8x5: clean up modem status retrieval

Clean up modem status retrieval.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: spcp8x5: pass usb-serial port to control functions
Johan Hovold [Thu, 21 Mar 2013 11:37:27 +0000 (12:37 +0100)]
USB: spcp8x5: pass usb-serial port to control functions

Pass usb-serial port to the control functions for uart status and work
mode.

Use port device for debugging and use dev_err to report errors.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: spcp8x5: clean up code
Johan Hovold [Thu, 21 Mar 2013 11:37:26 +0000 (12:37 +0100)]
USB: spcp8x5: clean up code

Clean up this driver somewhat.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: spcp8x5: remove broken uart-error handling
Johan Hovold [Thu, 21 Mar 2013 11:37:25 +0000 (12:37 +0100)]
USB: spcp8x5: remove broken uart-error handling

Remove broken uart-error handling.

This driver appears to implement uart-error handling but does not
receive status interrupts or status information with bulk in transfers.

Instead status was retrieved at open and used to flag only the first
bulk in transfer.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: spcp8x5: remove broken TIOCMIWAIT support
Johan Hovold [Thu, 21 Mar 2013 11:37:24 +0000 (12:37 +0100)]
USB: spcp8x5: remove broken TIOCMIWAIT support

Remove broken TIOCMIWAIT support.

This drivers appears to implement TIOCMIWAIT but has no means of
receiving modem-status interrupts.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: quatech2: switch to generic TIOCMIWAIT implementation
Johan Hovold [Thu, 21 Mar 2013 11:37:23 +0000 (12:37 +0100)]
USB: quatech2: switch to generic TIOCMIWAIT implementation

Switch to the generic TIOCMIWAIT implementation.

This also fixes the issue with processes waiting for
modem-status-changes not being woken up at disconnect.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: quatech2: switch to generic get_icount implementation
Johan Hovold [Thu, 21 Mar 2013 11:37:22 +0000 (12:37 +0100)]
USB: quatech2: switch to generic get_icount implementation

Switch to the generic get_icount implementation.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: pl2303: fix TIOCMIWAIT and disconnect
Johan Hovold [Thu, 21 Mar 2013 11:37:21 +0000 (12:37 +0100)]
USB: pl2303: fix TIOCMIWAIT and disconnect

Use tty-port modem-status-change wait queue on which processes are woken
up at hangup and disconnect.

Currently a process waiting on modem-status changes will not be woken on
device disconnect.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: pl2303: add custom tiocmiwait operation
Johan Hovold [Thu, 21 Mar 2013 11:37:20 +0000 (12:37 +0100)]
USB: pl2303: add custom tiocmiwait operation

Break out TIOCMIWAIT handling from custom ioctl operation and use
tiocmiwait operation field instead.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: oti6858: fix TIOCMIWAIT and disconnect
Johan Hovold [Thu, 21 Mar 2013 11:37:19 +0000 (12:37 +0100)]
USB: oti6858: fix TIOCMIWAIT and disconnect

Use tty-port modem-status-change wait queue on which processes are woken
up at hangup and disconnect.

Currently a process waiting on modem-status changes will not be woken on
device disconnect.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: oti6858: replace custom ioctl operation with tiocmiwait
Johan Hovold [Thu, 21 Mar 2013 11:37:18 +0000 (12:37 +0100)]
USB: oti6858: replace custom ioctl operation with tiocmiwait

Replace custom ioctl operation with tiocmiwait.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: mos7840: switch to generic TIOCMIWAIT implementation
Johan Hovold [Thu, 21 Mar 2013 11:37:17 +0000 (12:37 +0100)]
USB: mos7840: switch to generic TIOCMIWAIT implementation

Switch to the generic TIOCMIWAIT implementation.

This also fixes the issue with processes waiting for
modem-status-changes not being woken up at disconnect.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: mos7840: switch to generic get_icount implementation
Johan Hovold [Thu, 21 Mar 2013 11:37:16 +0000 (12:37 +0100)]
USB: mos7840: switch to generic get_icount implementation

Switch to the generic get_icount implementation.

Note that the interrupt counters will no longer be reset at open which
is in accordance with which how the other drivers work.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: mos7840: remove smp barriers from icount handling
Johan Hovold [Thu, 21 Mar 2013 11:37:15 +0000 (12:37 +0100)]
USB: mos7840: remove smp barriers from icount handling

Remove SMP memory barriers from icount handling and rely on the barriers
implied by wait_event, sleep and locks, while using the port lock to
guarantee atomicity.

This is a step in moving over to the generic icount implementations.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: mos7720: remove broken get_icount and TIOCMIWAIT
Johan Hovold [Thu, 21 Mar 2013 11:37:14 +0000 (12:37 +0100)]
USB: mos7720: remove broken get_icount and TIOCMIWAIT

Remove broken get_icount and TIOCMIWAIT support.

The driver has an icount structure but it is never been updated which
makes get_icount rather pointless and causes TIOCMIWAIT to always return
-EIO.

Note that the TIOCMIWAIT implementation has always been broken and would
not work even if icount support was added as it does not wait for the
modem status to change (does not use a work queue at all).

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: mct_u232: switch to generic TIOCMIWAIT implementation
Johan Hovold [Thu, 21 Mar 2013 11:37:13 +0000 (12:37 +0100)]
USB: mct_u232: switch to generic TIOCMIWAIT implementation

Switch to the generic TIOCMIWAIT implementation.

This also fixes the issue with processes waiting for
modem-status-changes not being woken up at disconnect.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: mct_u232: switch to generic get_icount implementation
Johan Hovold [Thu, 21 Mar 2013 11:37:12 +0000 (12:37 +0100)]
USB: mct_u232: switch to generic get_icount implementation

Switch to the generic get_icount implementation.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: iuu_phoenix: remove unused MSR-wait queue
Johan Hovold [Thu, 21 Mar 2013 11:37:11 +0000 (12:37 +0100)]
USB: iuu_phoenix: remove unused MSR-wait queue

Remove unused, private modem-status wait queue from driver. If
TIOCMIWAIT is ever implemented it must not rely on a private wait queue
which may have been released when woken up.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: io_ti: switch to generic TIOCMIWAIT implementation
Johan Hovold [Thu, 21 Mar 2013 11:37:10 +0000 (12:37 +0100)]
USB: io_ti: switch to generic TIOCMIWAIT implementation

Switch to the generic TIOCMIWAIT implementation which does not suffer
from the races involved when using the deprecated sleep_on functions.

This also fixes the issue with processes waiting for
modem-status-changes not being woken up at disconnect.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: io_ti: switch to generic get_icount implementation
Johan Hovold [Thu, 21 Mar 2013 11:37:09 +0000 (12:37 +0100)]
USB: io_ti: switch to generic get_icount implementation

Switch to the generic get_icount implementation.

Note that the interrupt counters will no longer be reset at open which
is in accordance with which how the other drivers work.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: io_edgeport: switch to generic TIOCMIWAIT implementation
Johan Hovold [Thu, 21 Mar 2013 11:37:08 +0000 (12:37 +0100)]
USB: io_edgeport: switch to generic TIOCMIWAIT implementation

Switch to the generic TIOCMIWAIT implementation.

This also fixes the issue with processes waiting for
modem-status-changes not being woken up at disconnect.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: io_edgeport: switch to generic get_icount implementation
Johan Hovold [Thu, 21 Mar 2013 11:37:07 +0000 (12:37 +0100)]
USB: io_edgeport: switch to generic get_icount implementation

Switch to the generic get_icount implementation.

Note that the interrupt counters will no longer be reset at open which
is in accordance with which how the other drivers work.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: f81232: fix TIOCMIWAIT and disconnect
Johan Hovold [Thu, 21 Mar 2013 11:37:06 +0000 (12:37 +0100)]
USB: f81232: fix TIOCMIWAIT and disconnect

Use tty-port modem-status-change wait queue on which processes are woken
up at hangup and disconnect.

Currently a process waiting on modem-status changes will not be woken on
device disconnect.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: f81232: add custom tiocmiwait operation
Johan Hovold [Thu, 21 Mar 2013 11:37:05 +0000 (12:37 +0100)]
USB: f81232: add custom tiocmiwait operation

Break out TIOCMIWAIT handling from custom ioctl operation and use
tiocmiwait operation field instead.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: digi_acceleport: remove unused MSR-wait queue
Johan Hovold [Thu, 21 Mar 2013 11:37:04 +0000 (12:37 +0100)]
USB: digi_acceleport: remove unused MSR-wait queue

Remove unused, private modem-status wait queue from driver. If
TIOCMIWAIT is ever implemented it must not rely on a private wait queue
which may have been released when woken up.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: cypress_m8: fix TIOCMIWAIT and disconnect
Johan Hovold [Thu, 21 Mar 2013 11:37:03 +0000 (12:37 +0100)]
USB: cypress_m8: fix TIOCMIWAIT and disconnect

Use tty-port modem-status-change wait queue on which processes are woken
up at hangup and disconnect.

Currently a process waiting on modem-status changes will not be woken on
device disconnect.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: cypress_m8: replace custom ioctl operation with tiocmiwait
Johan Hovold [Thu, 21 Mar 2013 11:37:02 +0000 (12:37 +0100)]
USB: cypress_m8: replace custom ioctl operation with tiocmiwait

Replace custom ioctl operation with tiocmiwait.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: ch341: fix TIOCMIWAIT and disconnect
Johan Hovold [Thu, 21 Mar 2013 11:37:01 +0000 (12:37 +0100)]
USB: ch341: fix TIOCMIWAIT and disconnect

Use tty-port modem-status-change wait queue on which processes are woken
up at hangup and disconnect.

Currently a process waiting on modem-status changes will not be woken on
device disconnect as wake up was only done in dtr_rts which isn't
guaranteed to be called (e.g. if HUPCL is not set).

Also remove the redundant wake-up call from dtr_rts.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: ch341: replace custom ioctl operation with tiocmiwait
Johan Hovold [Thu, 21 Mar 2013 11:37:00 +0000 (12:37 +0100)]
USB: ch341: replace custom ioctl operation with tiocmiwait

Replace custom ioctl operation with tiocmiwait.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: ark3116: switch to generic TIOCMIWAIT implementation
Johan Hovold [Thu, 21 Mar 2013 11:36:59 +0000 (12:36 +0100)]
USB: ark3116: switch to generic TIOCMIWAIT implementation

Switch to the generic TIOCMIWAIT implementation which does not suffer
from the races involved when using the deprecated sleep_on functions.

This also fixes the issue with processes waiting for
modem-status-changes not being woken up at disconnect.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: ark3116: switch to generic get_icount implementation
Johan Hovold [Thu, 21 Mar 2013 11:36:58 +0000 (12:36 +0100)]
USB: ark3116: switch to generic get_icount implementation

Switch to the generic get_icount implementation.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: ftdi_sio: switch to generic get_icount implementation
Johan Hovold [Thu, 21 Mar 2013 11:36:57 +0000 (12:36 +0100)]
USB: ftdi_sio: switch to generic get_icount implementation

Switch to the generic get_icount implementation.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: ftdi_sio: switch to generic TIOCMIWAIT implementation
Johan Hovold [Thu, 21 Mar 2013 11:36:56 +0000 (12:36 +0100)]
USB: ftdi_sio: switch to generic TIOCMIWAIT implementation

Switch to the generic TIOCMIWAIT implementation which does not suffer
from the races involved when using the deprecated sleep_on functions.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: ftdi_sio: use port icount
Johan Hovold [Thu, 21 Mar 2013 11:36:55 +0000 (12:36 +0100)]
USB: ftdi_sio: use port icount

Use the port-data icount for interrupt counters.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: serial: add generic get_icount implementation
Johan Hovold [Thu, 21 Mar 2013 11:36:54 +0000 (12:36 +0100)]
USB: serial: add generic get_icount implementation

Add generic get_icount implementation that subdrivers relying on the
port interrupt counters can use.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: serial: wake up MSR-wait queue on disconnect
Johan Hovold [Thu, 21 Mar 2013 11:36:53 +0000 (12:36 +0100)]
USB: serial: wake up MSR-wait queue on disconnect

Make sure processes waiting for modem-status changes are woken up at
disconnect.

This is needed for custom subdriver TIOCMIWAIT-implementations which do
not yet handle hangup.

Even though processes on the tty-port wait queue are woken up at hangup
the wake-up call in usb-serial disconnect is still needed if a woken-up
process may go back to sleep (e.g. due to an incomplete
TIOCMIWAIT-implementation). If a disconnect occurs after a hangup, any
process waiting for changes will not be woken up a second time by the
tty-layer as the port will then have been disassociated from the tty.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: serial: add generic TIOCMIWAIT implementation
Johan Hovold [Thu, 21 Mar 2013 11:36:52 +0000 (12:36 +0100)]
USB: serial: add generic TIOCMIWAIT implementation

Add generic TIOCMIWAIT implementation which correctly handles hangup,
USB-device disconnect, does not rely on the deprecated sleep_on
functions and hence does not suffer from the races currently affecting
several usb-serial drivers.

This makes it much easier to add TIOCMIWAIT support to subdrivers as the
tricky details related to hangup and disconnect (e.g. atomicity, that
the private port data may have been freed when woken up, and waking up
processes at disconnect) have been handled once and for all.

To add support to a subdriver, simply set the tiocmiwait-port-operation
field, update the port icount fields and wake up any process sleeping on
the tty-port modem-status-change wait queue on changes.

Note that the tty-port initialised flag can be used to detect
disconnected as the port will be hung up as part of disconnect (and
cannot be reactivated due to the disconnected flag). However, as the
tty-port implementation currently wakes up processes before calling port
shutdown, the tty-hupping flag must also be checked to detect hangup for
now.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: serial: add tiocmiwait subdriver operation
Johan Hovold [Thu, 21 Mar 2013 11:36:51 +0000 (12:36 +0100)]
USB: serial: add tiocmiwait subdriver operation

Add tiocmiwait operation to struct usb_serial_driver.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: serial: clean up usb-serial bus device removal
Johan Hovold [Thu, 21 Mar 2013 11:36:50 +0000 (12:36 +0100)]
USB: serial: clean up usb-serial bus device removal

Make sure to unregister the tty-device before calling subdriver
port_remove.

This way remove will reverse probe, and specifically any port data
released in port_remove will be available throughout tty unregister.

Note that the order currently does not matter as the tty-layer can make
callbacks also after the device has been unregistered. This is
handled in usb-serial core using the disconnected flag, which is
already set when usb-serial bus device remove is called.

Cc: Peter Hurley <peter@hurleysoftware.com>
Reported-by: Peter Hurley <peter@hurleysoftware.com>
Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: serial: use urb poison to reliably kill traffic
Johan Hovold [Thu, 21 Mar 2013 11:36:49 +0000 (12:36 +0100)]
USB: serial: use urb poison to reliably kill traffic

Use usb_poison_urb to reliably kill all urbs on disconnect and suspend.

This way there will be no question that the urbs cannot be resubmitted
by buggy subdrivers.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: fix urb-poison imbalance
Johan Hovold [Thu, 21 Mar 2013 11:36:48 +0000 (12:36 +0100)]
USB: fix urb-poison imbalance

The calls to usb_poison_urb and usb_unpoison_urb are expected to be
balanced. However, if an urb that has not yet been submitted is
poisoned, its reject counter will not be increased as its ep-field is
NULL. A consecutive call to unpoison will thus in fact poison the urb
as its reject counter will be decremented to a negative value,
effectively preventing the urb from being submitted.

Note that there are currently no in-kernel drivers affected by this.

Cc: Alan Stern <stern@rowland.harvard.edu>
Acked-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: serial: rename port release
Johan Hovold [Thu, 21 Mar 2013 11:36:47 +0000 (12:36 +0100)]
USB: serial: rename port release

Rename port_release so that all usb_serial_port functions have a common
prefix.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: serial: fix port release
Johan Hovold [Thu, 21 Mar 2013 11:36:46 +0000 (12:36 +0100)]
USB: serial: fix port release

We should not call kill_traffic (and usb_kill_urb) once disconnect
returns. Any pending urbs are killed at disconnect and new submissions
are prevented by usb_unbind_interface (and usb_disable_interface).

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: cyberjack: fix disconnect handling
Johan Hovold [Thu, 21 Mar 2013 11:36:45 +0000 (12:36 +0100)]
USB: cyberjack: fix disconnect handling

Make sure the interrupt urb submitted in port_probe is killed in
port_remove.

The interrupt-urb completion handler references the port and may get
called after port_remove has returned and the port has been
unregistered (although this is currently prevented by usb-serial core as
we are using a non-private urb).

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: serial: clean up generic-operation handling
Johan Hovold [Thu, 21 Mar 2013 11:36:44 +0000 (12:36 +0100)]
USB: serial: clean up generic-operation handling

Most USB serial drivers are, and should be, using as much of the generic
implementation as possible.

Rename the fixup_generic function to a more descriptive name.
Reword the related debug message in a more neutral tone (and remember to
add the missing newline).
Finally, move the operations initialisation to after the initial sanity
checks.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: serial: remove generic release callback
Johan Hovold [Thu, 21 Mar 2013 11:36:43 +0000 (12:36 +0100)]
USB: serial: remove generic release callback

Remove empty generic release implementation and make the release
callback non-mandatory (like attach, probe and disconnect).

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: serial: remove generic disconnect callback
Johan Hovold [Thu, 21 Mar 2013 11:36:42 +0000 (12:36 +0100)]
USB: serial: remove generic disconnect callback

Remove the now empty generic disconnect callback and make the disconnect
callback non-mandatory.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: serial: fix generic disconnect implementation
Johan Hovold [Thu, 21 Mar 2013 11:36:41 +0000 (12:36 +0100)]
USB: serial: fix generic disconnect implementation

There is no need for the generic disconnect callback to stop the read
and write urbs a second time as this has already been taken care of by
close (which is called from hangup as part of disconnect).

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: ssu100: remove custom close operation
Johan Hovold [Thu, 21 Mar 2013 11:36:40 +0000 (12:36 +0100)]
USB: ssu100: remove custom close operation

The generic close operation will be used if the close field is left
uninitialised.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: ssu100: remove explicit initialisation of disconnect
Johan Hovold [Thu, 21 Mar 2013 11:36:39 +0000 (12:36 +0100)]
USB: ssu100: remove explicit initialisation of disconnect

The disconnect callback is set to the generic implementation by
usb-serial core if NULL.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: serial: remove bogus disconnect test in cleanup
Johan Hovold [Thu, 21 Mar 2013 11:36:38 +0000 (12:36 +0100)]
USB: serial: remove bogus disconnect test in cleanup

Remove bogus (and unnecessary) test for serial->dev being NULL in
cleanup.

The device is never cleared, and cleanup is never called after a
completed disconnect anyway.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: usb_wwan: remove bogus disconnect test in close
Johan Hovold [Thu, 21 Mar 2013 11:36:37 +0000 (12:36 +0100)]
USB: usb_wwan: remove bogus disconnect test in close

Remove bogus (and unnecessary) test for serial->dev being NULL in close.

The device is never cleared, and close is never called after a completed
disconnect anyway.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: sierra: remove bogus disconnect test in close
Johan Hovold [Thu, 21 Mar 2013 11:36:36 +0000 (12:36 +0100)]
USB: sierra: remove bogus disconnect test in close

Remove bogus (and unnecessary) test for serial->dev being NULL in close.

The device is never cleared, and close is never called after a completed
disconnect anyway.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: mos7840: remove bogus disconnect test in close
Johan Hovold [Thu, 21 Mar 2013 11:36:35 +0000 (12:36 +0100)]
USB: mos7840: remove bogus disconnect test in close

Remove bogus (and unnecessary) test for serial->dev being NULL in close.

The device is never cleared, and close is never called after a completed
disconnect anyway.

Simplify urb killing, and remove some related debug and dead code while
at it.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: keyspan_pda: remove bogus disconnect test in close
Johan Hovold [Thu, 21 Mar 2013 11:36:34 +0000 (12:36 +0100)]
USB: keyspan_pda: remove bogus disconnect test in close

Remove bogus (and unnecessary) test for serial->dev being NULL in close.

The device is never cleared, and close is never called after a completed
disconnect anyway.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: keyspan_pda: remove bogus disconnect test from dtr_rts
Johan Hovold [Thu, 21 Mar 2013 11:36:33 +0000 (12:36 +0100)]
USB: keyspan_pda: remove bogus disconnect test from dtr_rts

Remove bogus (and unnecessary) test for serial->dev being NULL in
dtr_rts.

The device is never cleared, and disconnect is handled for dtr_rts in
usb-serial core anyway.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: keyspan: remove bogus disconnect test in close
Johan Hovold [Thu, 21 Mar 2013 11:36:32 +0000 (12:36 +0100)]
USB: keyspan: remove bogus disconnect test in close

Remove bogus (and unnecessary) test for serial->dev being NULL in close.

The device is never cleared, and close is never called after a completed
disconnect anyway.

Remove some out-commented bogus code while at it.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: iuu_phoenix: remove bogus disconnect test in close
Johan Hovold [Thu, 21 Mar 2013 11:36:31 +0000 (12:36 +0100)]
USB: iuu_phoenix: remove bogus disconnect test in close

Remove bogus (and unnecessary) test for serial->dev being NULL in close.

The device is never cleared, and close is never called after a completed
disconnect anyway.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: digi_acceleport: remove bogus disconnect test in close
Johan Hovold [Thu, 21 Mar 2013 11:36:30 +0000 (12:36 +0100)]
USB: digi_acceleport: remove bogus disconnect test in close

Remove bogus (and unnecessary) test for serial->dev being NULL in close.

The device is never cleared, and close is never called after a completed
disconnect anyway.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: cyberjack: remove bogus disconnect test in close
Johan Hovold [Thu, 21 Mar 2013 11:36:29 +0000 (12:36 +0100)]
USB: cyberjack: remove bogus disconnect test in close

Remove bogus (and unnecessary) test for serial->dev being NULL in close.

The device is never cleared, and close is never called after a completed
disconnect anyway.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: ark3116: remove bogus disconnect test in close
Johan Hovold [Thu, 21 Mar 2013 11:36:28 +0000 (12:36 +0100)]
USB: ark3116: remove bogus disconnect test in close

Remove bogus (and unnecessary) test for serial->dev being NULL in close.

The device is never cleared, and close is never called after a completed
disconnect anyway.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: serial: remove port number from generic-driver debug
Johan Hovold [Thu, 21 Mar 2013 11:36:27 +0000 (12:36 +0100)]
USB: serial: remove port number from generic-driver debug

Remove redundant port number from debug output (already printed as part
of device name).

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: serial: remove redundant allocation error messages
Johan Hovold [Thu, 21 Mar 2013 11:36:26 +0000 (12:36 +0100)]
USB: serial: remove redundant allocation error messages

Failed allocations already get an OOM message and a stack dump.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: serial: clean up debug info
Johan Hovold [Thu, 21 Mar 2013 11:36:25 +0000 (12:36 +0100)]
USB: serial: clean up debug info

Remove redundant port number from debug output (already printed as part
of device name).

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: serial: remove redundant comments
Johan Hovold [Thu, 21 Mar 2013 11:36:24 +0000 (12:36 +0100)]
USB: serial: remove redundant comments

Remove redundant comments and fix some minor coding style issues.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: serial: rename tty-port callbacks
Johan Hovold [Thu, 21 Mar 2013 11:36:23 +0000 (12:36 +0100)]
USB: serial: rename tty-port callbacks

Rename the tty-port callbacks using a common prefix to more clearly
separate them from the tty and usb driver callbacks.

Rename serial_down to serial_port_shutdown to match the callback name.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: pl2303: make set_control_lines a port operation
Johan Hovold [Thu, 21 Mar 2013 11:36:22 +0000 (12:36 +0100)]
USB: pl2303: make set_control_lines a port operation

Pass usb-serial port rather than usb device to set_control_lines, and
make sure port device is used for all port related debugging.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: pl2303: use interface device for debug
Johan Hovold [Thu, 21 Mar 2013 11:36:21 +0000 (12:36 +0100)]
USB: pl2303: use interface device for debug

Use interface rather than usb-serial device for debugging interface
related operations. This gives more descriptive messages, such as

[  905.669436] pl2303 1-4.1:1.0: 0x40:0x1:0x8:0x0  0

rather than

[  341.943535] usb 1-4.1: 0x40:0x1:0x8:0x0  0

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: iuu_phoenix: remove unnecessary urb kill on close
Johan Hovold [Thu, 21 Mar 2013 11:36:20 +0000 (12:36 +0100)]
USB: iuu_phoenix: remove unnecessary urb kill on close

Remove kill of interrupt-in urb on close as it has never been submitted.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: kl5kusb105: remove unnecessary urb kill on close
Johan Hovold [Thu, 21 Mar 2013 11:36:19 +0000 (12:36 +0100)]
USB: kl5kusb105: remove unnecessary urb kill on close

Remove kill of interrupt-in urb on close as it has never been submitted.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: ftdi_sio: remove obsolete port data refcounting
Johan Hovold [Thu, 21 Mar 2013 11:36:18 +0000 (12:36 +0100)]
USB: ftdi_sio: remove obsolete port data refcounting

Remove the port data refcounting and release the private data
explicitly at port remove.

The port data refcounting was used to make sure the port data was not
freed until the last tty reference was closed. Since moving over to tty
ports, the underlying assumptions are no longer valid as close is now
called as part of tty port shutdown, which can occur before the final
tty reference is dropped on device disconnect.

This means that the private port data refcounting is now completely
useless, as the last reference will always be dropped on port_remove.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: EHCI: remove unused variable in unlink_empty_async()
Alan Stern [Fri, 22 Mar 2013 17:32:10 +0000 (13:32 -0400)]
USB: EHCI: remove unused variable in unlink_empty_async()

This patch (as1669) removes the check_unlinks_later flag in ehci-hcd's
unlink_empty_async().  It wasn't being used for anything and should
have been removed in an earlier patch, but I forgot about it.

Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: EHCI: improve end_unlink_async()
Alan Stern [Fri, 22 Mar 2013 17:31:58 +0000 (13:31 -0400)]
USB: EHCI: improve end_unlink_async()

This patch (as1665) changes the way ehci-hcd's end_unlink_async()
routine works in order to avoid recursive execution and to be more
efficient:

Now when an IAA cycle ends, a new one gets started up right
away (if it is needed) instead of waiting until the
just-unlinked QH has been processed.

The async_iaa list is renamed to async_idle, which better
expresses its new purpose: It is now the list of QHs which are
now completely idle and are waiting to be processed by
end_unlink_async().

A new flag is added to track whether an IAA cycle is in
progress, because the list formerly known as async_iaa no
longer stores the QHs waiting for the IAA to finish.

The decision about how many QHs to process when an IAA cycle
ends is now made at the end of the cycle, when we know the
current state of the hardware, rather than at the beginning.
This means a bunch of logic got moved from start_iaa_cycle()
to end_unlink_async().

Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: EHCI: convert singly-linked lists to list_heads
Alan Stern [Fri, 22 Mar 2013 17:31:45 +0000 (13:31 -0400)]
USB: EHCI: convert singly-linked lists to list_heads

This patch (as1664) converts ehci-hcd's async_unlink, async_iaa, and
intr_unlink from singly-linked lists to standard doubly-linked
list_heads.  Originally it didn't seem necessary to use list_heads,
because items are always added to and removed from these lists in FIFO
order.  But now with more list processing going on, it's easier to use
the standard routines than continue with a roll-your-own approach.

I don't know if the code ends up being notably shorter, but the
patterns will be more familiar to any kernel hacker.

Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: EHCI: consolidate code in ehci_urb_dequeue()
Alan Stern [Fri, 22 Mar 2013 17:31:29 +0000 (13:31 -0400)]
USB: EHCI: consolidate code in ehci_urb_dequeue()

This patch (as1668) consolidates two nearly identical code paths in
ehci_urb_dequeue().  The test for !qh can be removed because it will
never succeed; the fact that usb_hcd_check_unlink_urb() returned 0
means that urb must be queued and therefore urb->hcpriv must point to
a QH.

Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: EHCI: split needs_rescan into two flags
Alan Stern [Fri, 22 Mar 2013 17:31:11 +0000 (13:31 -0400)]
USB: EHCI: split needs_rescan into two flags

This patch (as1662) does some more QH-related cleanup in ehci-hcd.
The qh->needs_rescan flag is currently used for two different
purposes; the patch replaces it with two separate flags for greater
clarity: qh->dequeue_during_giveback indicates that a completion
handler dequeued an URB (implying that a rescan is needed), and
qh->exception indicates that the QH is in an exceptional state
requiring an unlink (either it encountered an I/O error or an unlink
was requested).

The new flags get set where the dequeue, exception, or unlink request
occurred, rather than where the unlink is started.  This is so that in
the future, if we need to, we will be able to tell apart unlinks that
truly were required from those that were carried out merely because
the QH wasn't being used.

Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: EHCI: change return value of qh_completions()
Alan Stern [Fri, 22 Mar 2013 17:30:56 +0000 (13:30 -0400)]
USB: EHCI: change return value of qh_completions()

This patch (as1658) cleans up the usage of qh_completions() in
ehci-hcd.  Currently the function's return value indicates whether any
URBs were given back; the idea was that the caller can scan the QH
over again to handle any URBs that were dequeued by a completion
handler.  This is not necessary; when qh_completions() is ready to
give back dequeued URBs, it does its own rescanning.

Therefore the new return value will be a flag indicating whether the
caller needs to unlink the QH.  This is more convenient than forcing
the caller to check qh->needs_rescan, and it makes a lot more sense --
why should "needs_rescan" imply that an unlink is needed?  The callers
are also changed to remove the unneeded rescans.

Lastly, the check for whether qh->qtd_list is non-empty is removed
from the start of qh_completions().  Two of the callers have to make
this test anyway, so the same test can simply be added to the other
two callers.

Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11 years agoUSB: EHCI: changes related to qh_refresh()
Alan Stern [Fri, 22 Mar 2013 17:30:43 +0000 (13:30 -0400)]
USB: EHCI: changes related to qh_refresh()

This patch (as1638) makes several changes to the ehci-hcd driver, all
related to the qh_refresh() function.  This function must be called
whenever an idle QH gets linked back into either the async or the
periodic schedule.

Change a BUG_ON() in the qh_update routine to a WARN_ON().
Since this code runs in atomic context, a BUG_ON() would
immediately freeze the whole system.

Remove two unneeded calls to qh_refresh(), one when a QH is
initialized and one when a QH becomes idle.  Adjust the
adjacent comments accordingly.

Move the qh_refresh() and qh_link_periodic() calls for new
interrupt URBs to after the new TDs have been added.

As a result of the previous two changes, qh_refresh() is never
called when the qtd_list is empty.  The corresponding check in
qh_refresh() can be removed, along with an indentation level.

These changes should not cause any alteration of behavior.

Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>