linux/drivers/usb/gadget/function
John Keeping addfc5823d usb: gadget: ffs: handle I/O completion in-order
By submitting completed transfers to the system workqueue there is no
guarantee that completion events will be queued up in the correct order,
as in multi-processor systems there is a thread running for each
processor and the work items are not bound to a particular core.

This means that several completions are in the queue at the same time,
they may be processed in parallel and complete out of order, resulting
in data appearing corrupt when read by userspace.

Create a single-threaded workqueue for FunctionFS so that data completed
requests is passed to userspace in the order in which they complete.

Acked-by: Michal Nazarewicz <mina86@mina86.com>
Signed-off-by: John Keeping <john@metanate.com>
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
2017-09-28 12:37:24 +03:00
..
f_acm.c
f_ecm.c
f_eem.c
f_fs.c usb: gadget: ffs: handle I/O completion in-order 2017-09-28 12:37:24 +03:00
f_hid.c usb: gadget: f_hid: {GET,SET} PROTOCOL Support 2017-08-15 12:46:03 +03:00
f_loopback.c
f_mass_storage.c USB: g_mass_storage: Fix deadlock when driver is unbound 2017-09-22 18:29:00 +02:00
f_mass_storage.h USB: g_mass_storage: Fix deadlock when driver is unbound 2017-09-22 18:29:00 +02:00
f_midi.c usb: gadget: f_midi: Use snd_card_free_when_closed with refcount 2017-08-15 14:18:47 +03:00
f_ncm.c usb: gadget: f_ncm/u_ether: Move 'SKB reserve' quirk setup to u_ether 2017-08-18 12:29:10 +03:00
f_obex.c
f_phonet.c networking: introduce and use skb_put_data() 2017-06-16 11:48:37 -04:00
f_printer.c usb: gadget: function: printer: avoid spinlock recursion 2017-09-20 14:57:28 +03:00
f_rndis.c usb: gadget: add RNDIS configfs options for class/subclass/protocol 2017-08-15 14:18:56 +03:00
f_serial.c
f_sourcesink.c
f_subset.c
f_tcm.c
f_uac1_legacy.c usb: gadget: function: make current f_uac1 implementation legacy 2017-06-19 09:22:47 +03:00
f_uac1.c usb: gadget: f_uac1: endianness fixes. 2017-07-18 09:33:16 +03:00
f_uac2.c usb: gadget: f_uac2: endianness fixes. 2017-07-18 09:33:19 +03:00
f_uvc.c
f_uvc.h
g_zero.h
Makefile usb: gadget: add f_uac1 variant based on a new u_audio api 2017-06-19 09:22:47 +03:00
ndis.h
rndis.c networking: make skb_push & __skb_push return void pointers 2017-06-16 11:48:40 -04:00
rndis.h
storage_common.c
storage_common.h
tcm.h
u_audio.c usb: gadget: make snd_pcm_hardware const 2017-08-28 11:39:33 +02:00
u_audio.h usb: gadget: f_uac2: split out audio core 2017-06-19 09:22:46 +03:00
u_ecm.h
u_eem.h
u_ether_configfs.h usb: gadget: add RNDIS configfs options for class/subclass/protocol 2017-08-15 14:18:56 +03:00
u_ether.c usb: gadget: f_ncm/u_ether: Move 'SKB reserve' quirk setup to u_ether 2017-08-18 12:29:10 +03:00
u_ether.h usb: gadget: f_ncm/u_ether: Move 'SKB reserve' quirk setup to u_ether 2017-08-18 12:29:10 +03:00
u_fs.h usb: gadget: ffs: handle I/O completion in-order 2017-09-28 12:37:24 +03:00
u_gether.h
u_hid.h
u_midi.h
u_ncm.h
u_phonet.h
u_printer.h
u_rndis.h usb: gadget: add RNDIS configfs options for class/subclass/protocol 2017-08-15 14:18:56 +03:00
u_serial.c usb: gadget: serial: fix oops when data rx'd after close 2017-08-18 12:28:50 +03:00
u_serial.h
u_tcm.h
u_uac1_legacy.c sound updates for 4.13-rc1 2017-07-06 10:56:51 -07:00
u_uac1_legacy.h usb: gadget: function: make current f_uac1 implementation legacy 2017-06-19 09:22:47 +03:00
u_uac1.h usb: gadget: add f_uac1 variant based on a new u_audio api 2017-06-19 09:22:47 +03:00
u_uac2.h
u_uvc.h
uvc_configfs.c
uvc_configfs.h
uvc_queue.c
uvc_queue.h
uvc_v4l2.c
uvc_v4l2.h
uvc_video.c
uvc_video.h
uvc.h