linux/drivers/usb
Bhaktipriya Shridhar c936f45fc2 usb: ftdi-elan: Remove deprecated create_singlethread_workqueue
The status workqueue is involved in initializing the Uxxx and polling
the Uxxx until a supported PCMCIA CardBus device is detected.
It then starts the command and respond workqueues and then loads the
module that handles the device, after which it just polls the Uxxx
looking for card ejects.

The command and respond workqueues are involved in implementing a command
sequencer for communicating with the firmware on the other side of
the FTDI chip in the Uxxx.

These workqueues have only a single work item each and hence they do not
require ordering. Also, none of the above workqueues are being used on a
memory recliam path. Hence, the singlethreaded workqueues have been
replaced with the use of system_wq.

System workqueues have been able to handle high level of concurrency
for a long time now and hence it's not required to have a singlethreaded
workqueue just to gain concurrency. Unlike a dedicated per-cpu workqueue
created with create_singlethread_workqueue(), system_wq allows multiple
work items to overlap executions even on the same CPU; however, a
per-cpu workqueue doesn't have any CPU locality or global ordering
guarantee unless the target CPU is explicitly specified and thus the
increase of local concurrency shouldn't make any difference.

The work items have been sync cancelled because they are self-requeueing
and need to wait for the in-flight work item to finish before proceeding
with destruction. Hence, they have been sync cancelled in
ftdi_status_cancel_work(), ftdi_command_cancel_work() and
ftdi_response_cancel_work(). These functions are called in
ftdi_elan_exit() to ensure that there are no pending work items while
disconnecting the driver.

Signed-off-by: Bhaktipriya Shridhar <bhaktipriya96@gmail.com>
Acked-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2016-08-09 15:49:01 +02:00
..
atm Use "foo *bar" instead of "foo * bar". 2016-04-28 12:57:49 -07:00
c67x00
chipidea usb: chipidea: Kconfig: improve Kconfig help text 2016-06-21 10:48:30 +08:00
class cdc-acm: beautify probe() 2016-07-18 08:46:57 -07:00
common Merge 4.7-rc6 into usb-next 2016-07-04 08:19:21 -07:00
core usbnet: move the CDC parser into USB core 2016-07-18 08:46:57 -07:00
dwc2 USB: dwc2-usb: add USB_GADGET dependency 2016-06-29 11:11:41 +03:00
dwc3 Merge 4.7-rc6 into usb-next 2016-07-04 08:19:21 -07:00
early usb: early/ehci-dbgp: make it explicitly non-modular 2016-06-26 11:48:18 -07:00
gadget media updates for v4.8-rc1 2016-07-26 18:59:59 -07:00
host usb: host: fsl-mph-dr-of: use of_property_read_bool 2016-08-09 15:49:01 +02:00
image usb: microtek: Use "foo *bar" instead of "foo * bar". 2016-06-07 22:18:39 -07:00
isp1760 usb: Remove unnecessary space before open square bracket. 2016-05-09 13:08:46 +02:00
misc usb: ftdi-elan: Remove deprecated create_singlethread_workqueue 2016-08-09 15:49:01 +02:00
mon usb: core: rename mutex usb_bus_list_lock to usb_bus_idr_lock 2016-02-06 21:55:57 -08:00
musb usb: musb: sunxi: Simplify dr_mode handling 2016-07-17 08:23:57 +09:00
phy usb: phy: move msm_hsusb.h into driver 2016-06-21 11:12:10 +03:00
renesas_usbhs usb: renesas_usbhs: protect the CFIFOSEL setting in usbhsg_ep_enable() 2016-06-29 11:14:44 +03:00
serial USB: serial: use variable for status 2016-07-16 12:45:39 +02:00
storage USB: uas: Fix slave queue_depth not being set 2016-06-01 14:56:24 -07:00
usbip Merge 4.7-rc4 into usb-next 2016-06-20 07:40:51 -07:00
wusbcore usb: wusbcore: Do not initialise statics to 0. 2016-05-09 13:08:46 +02:00
Kconfig usb: common: rework CONFIG_USB_COMMON logic 2016-04-18 15:23:36 +03:00
Makefile usb: fsl: drop USB_FSL_MPH_DR_OF Kconfig symbol 2016-03-04 15:14:29 +02:00
README
usb-skeleton.c

To understand all the Linux-USB framework, you'll use these resources:

    * This source code.  This is necessarily an evolving work, and
      includes kerneldoc that should help you get a current overview.
      ("make pdfdocs", and then look at "usb.pdf" for host side and
      "gadget.pdf" for peripheral side.)  Also, Documentation/usb has
      more information.

    * The USB 2.0 specification (from www.usb.org), with supplements
      such as those for USB OTG and the various device classes.
      The USB specification has a good overview chapter, and USB
      peripherals conform to the widely known "Chapter 9".

    * Chip specifications for USB controllers.  Examples include
      host controllers (on PCs, servers, and more); peripheral
      controllers (in devices with Linux firmware, like printers or
      cell phones); and hard-wired peripherals like Ethernet adapters.

    * Specifications for other protocols implemented by USB peripheral
      functions.  Some are vendor-specific; others are vendor-neutral
      but just standardized outside of the www.usb.org team.

Here is a list of what each subdirectory here is, and what is contained in
them.

core/		- This is for the core USB host code, including the
		  usbfs files and the hub class driver ("hub_wq").

host/		- This is for USB host controller drivers.  This
		  includes UHCI, OHCI, EHCI, and others that might
		  be used with more specialized "embedded" systems.

gadget/		- This is for USB peripheral controller drivers and
		  the various gadget drivers which talk to them.


Individual USB driver directories.  A new driver should be added to the
first subdirectory in the list below that it fits into.

image/		- This is for still image drivers, like scanners or
		  digital cameras.
../input/	- This is for any driver that uses the input subsystem,
		  like keyboard, mice, touchscreens, tablets, etc.
../media/	- This is for multimedia drivers, like video cameras,
		  radios, and any other drivers that talk to the v4l
		  subsystem.
../net/		- This is for network drivers.
serial/		- This is for USB to serial drivers.
storage/	- This is for USB mass-storage drivers.
class/		- This is for all USB device drivers that do not fit
		  into any of the above categories, and work for a range
		  of USB Class specified devices. 
misc/		- This is for all USB device drivers that do not fit
		  into any of the above categories.