linux/drivers/usb/gadget
Per Forlin 6532c7fdb2 usb: gadget: storage: make FSG_NUM_BUFFERS variable size
FSG_NUM_BUFFERS is set to 2 as default.
Usually 2 buffers are enough to establish a good buffering pipeline.
The number may be increased in order to compensate a for bursty VFS
behaviour.

Here follows a description of system that may require more than
2 buffers.
 * CPU ondemand governor active
 * latency cost for wake up and/or frequency change
 * DMA for IO

Use case description.
 * Data transfer from MMC via VFS to USB.
 * DMA shuffles data from MMC and to USB.
 * The CPU wakes up every now and then to pass data in and out from VFS,
   which cause the bursty VFS behaviour.

Test set up
 * Running dd on the host reading from the mass storage device
 * cmdline: dd if=/dev/sdb of=/dev/null bs=4k count=$((256*100))
 * Caches are dropped on the host and on the device before each run

Measurements on a Snowball board with ondemand_governor active.

FSG_NUM_BUFFERS 2
104857600 bytes (105 MB) copied, 5.62173 s, 18.7 MB/s
104857600 bytes (105 MB) copied, 5.61811 s, 18.7 MB/s
104857600 bytes (105 MB) copied, 5.57817 s, 18.8 MB/s

FSG_NUM_BUFFERS 4
104857600 bytes (105 MB) copied, 5.26839 s, 19.9 MB/s
104857600 bytes (105 MB) copied, 5.2691 s, 19.9 MB/s
104857600 bytes (105 MB) copied, 5.2711 s, 19.9 MB/s

There may not be one optimal number for all boards. This is why
the number is added to Kconfig. If selecting USB_GADGET_DEBUG_FILES
this value may be set by a module parameter as well.

Signed-off-by: Per Forlin <per.forlin@linaro.org>
Acked-by: Michal Nazarewicz <mina86@mina86.com>
Acked-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Felipe Balbi <balbi@ti.com>
2011-09-09 13:06:04 +03:00
..
amd5536udc.c USB: use usb_endpoint_maxp() instead of le16_to_cpu() 2011-08-23 09:47:40 -07:00
amd5536udc.h Fix common misspellings 2011-03-31 11:26:23 -03:00
at91_udc.c USB: use usb_endpoint_maxp() instead of le16_to_cpu() 2011-08-23 09:47:40 -07:00
at91_udc.h
atmel_usba_udc.c USB: use usb_endpoint_maxp() instead of le16_to_cpu() 2011-08-23 09:47:40 -07:00
atmel_usba_udc.h
audio.c usb: gadget: add max_speed to usb_composite_driver 2011-07-01 14:27:05 -07:00
cdc2.c usb: gadget: add max_speed to usb_composite_driver 2011-07-01 14:27:05 -07:00
ci13xxx_msm.c usb: gadget: add platform module alias where it is missing 2011-07-01 14:27:07 -07:00
ci13xxx_pci.c USB: gadget: Introduce ci13xxx_udc_driver struct 2010-12-10 14:23:33 -08:00
ci13xxx_udc.c USB: use usb_endpoint_maxp() instead of le16_to_cpu() 2011-08-23 09:47:40 -07:00
ci13xxx_udc.h USB: gadget: Add test mode support for ci13xxx_udc 2011-02-25 11:33:57 -08:00
composite.c USB: use usb_endpoint_maxp() instead of le16_to_cpu() 2011-08-23 09:47:40 -07:00
config.c usb: gadget: use config_ep_by_speed() instead of ep_choose() 2011-06-28 11:14:37 -07:00
dbgp.c usb: gadget: defer setting maxpacket till ->setup() 2011-07-01 14:31:12 -07:00
dummy_hcd.c USB: use usb_endpoint_maxp() instead of le16_to_cpu() 2011-08-23 09:47:40 -07:00
epautoconf.c USB: use usb_endpoint_maxp() instead of le16_to_cpu() 2011-08-23 09:47:40 -07:00
ether.c usb: gadget: add SS descriptors to Ethernet gadget 2011-07-08 13:55:30 +03:00
f_acm.c usb: gadget: use config_ep_by_speed() instead of ep_choose() 2011-06-28 11:14:37 -07:00
f_audio.c atomic: use <linux/atomic.h> 2011-07-26 16:49:47 -07:00
f_ecm.c usb: gadget: add SS descriptors to Ethernet gadget 2011-07-08 13:55:30 +03:00
f_eem.c usb: gadget: add SS descriptors to Ethernet gadget 2011-07-08 13:55:30 +03:00
f_fs.c usb: gadget: add usb_endpoint_descriptor to struct usb_ep 2011-06-28 11:14:36 -07:00
f_hid.c usb: gadget: hid: don't STALL when processing a HID Descriptor request 2011-08-01 22:06:47 +03:00
f_loopback.c usb: gadget: zero: add superspeed support 2011-07-08 13:57:54 +03:00
f_mass_storage.c usb: gadget: storage: make FSG_NUM_BUFFERS variable size 2011-09-09 13:06:04 +03:00
f_ncm.c usb: gadget: use config_ep_by_speed() instead of ep_choose() 2011-06-28 11:14:37 -07:00
f_obex.c usb: gadget: use config_ep_by_speed() instead of ep_choose() 2011-06-28 11:14:37 -07:00
f_phonet.c Merge branch 'usb-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6 2011-07-25 23:08:32 -07:00
f_rndis.c atomic: use <linux/atomic.h> 2011-07-26 16:49:47 -07:00
f_serial.c usb: gadget: use config_ep_by_speed() instead of ep_choose() 2011-06-28 11:14:37 -07:00
f_sourcesink.c usb: gadget: zero: add superspeed support 2011-07-08 13:57:54 +03:00
f_subset.c usb: gadget: add SS descriptors to Ethernet gadget 2011-07-08 13:55:30 +03:00
f_uvc.c USB: Gadget: Webcam: Return correct result of bind 2011-07-01 14:45:42 -07:00
f_uvc.h
file_storage.c usb: gadget: storage: make FSG_NUM_BUFFERS variable size 2011-09-09 13:06:04 +03:00
fsl_mxc_udc.c usb: gadget/fsl_mxc_udc: Detect the CPU type in run-time 2011-02-04 11:42:52 -08:00
fsl_qe_udc.c USB: use usb_endpoint_maxp() instead of le16_to_cpu() 2011-08-23 09:47:40 -07:00
fsl_qe_udc.h usb: fix a typo in a comment 2011-04-13 16:41:00 -07:00
fsl_udc_core.c USB: use usb_endpoint_maxp() instead of le16_to_cpu() 2011-08-23 09:47:40 -07:00
fsl_usb2_udc.h USB: extend ehci-fsl and fsl_udc_core driver for OTG operation 2011-05-02 16:59:38 -07:00
fusb300_udc.c USB: use usb_endpoint_maxp() instead of le16_to_cpu() 2011-08-23 09:47:40 -07:00
fusb300_udc.h usb: udc: add Faraday fusb300 driver 2011-01-22 19:45:36 -08:00
g_ffs.c usb: gadget: add max_speed to usb_composite_driver 2011-07-01 14:27:05 -07:00
g_zero.h
gadget_chips.h usb: gadget: introduce gadget_is_dwc3() 2011-08-22 16:00:46 -07:00
gmidi.c usb: gadget: defer setting maxpacket till ->setup() 2011-07-01 14:31:12 -07:00
goku_udc.c usb: gadget: convert all users to the new udc infrastructure 2011-06-28 11:13:35 -07:00
goku_udc.h usb: gadget: goku_udc: add registered flag bit, fixing build 2010-11-11 06:57:24 -08:00
hid.c usb: gadget: add max_speed to usb_composite_driver 2011-07-01 14:27:05 -07:00
imx_udc.c USB: use usb_endpoint_maxp() instead of le16_to_cpu() 2011-08-23 09:47:40 -07:00
imx_udc.h usb: gadget/imx-udc: remove usage of deprecated symbol USBD_INT0 2010-11-11 05:51:15 -08:00
inode.c usb: gadget: defer setting maxpacket till ->setup() 2011-07-01 14:31:12 -07:00
Kconfig usb: gadget: storage: make FSG_NUM_BUFFERS variable size 2011-09-09 13:06:04 +03:00
langwell_udc.c USB: use usb_endpoint_maxp() instead of le16_to_cpu() 2011-08-23 09:47:40 -07:00
langwell_udc.h
m66592-udc.c USB: use usb_endpoint_maxp() instead of le16_to_cpu() 2011-08-23 09:47:40 -07:00
m66592-udc.h usb: gadget: m66592-udc: add function for external controller 2011-07-09 01:08:39 +03:00
Makefile usb: gadget: convert all users to the new udc infrastructure 2011-06-28 11:13:35 -07:00
mass_storage.c usb: gadget: add max_speed to usb_composite_driver 2011-07-01 14:27:05 -07:00
multi.c usb: gadget: add max_speed to usb_composite_driver 2011-07-01 14:27:05 -07:00
mv_udc_core.c USB: use usb_endpoint_maxp() instead of le16_to_cpu() 2011-08-23 09:47:40 -07:00
mv_udc_phy.c USB: pxa: Add USB client support for Marvell PXA9xx/PXA168 chips 2010-11-30 16:51:21 -08:00
mv_udc.h USB: pxa: Add USB client support for Marvell PXA9xx/PXA168 chips 2010-11-30 16:51:21 -08:00
ncm.c usb: gadget: add max_speed to usb_composite_driver 2011-07-01 14:27:05 -07:00
ndis.h
net2272.c USB: use usb_endpoint_maxp() instead of le16_to_cpu() 2011-08-23 09:47:40 -07:00
net2272.h USB: net2272: driver for PLX NET2272 USB device controller 2011-06-06 16:47:27 -07:00
net2280.c USB: use usb_endpoint_maxp() instead of le16_to_cpu() 2011-08-23 09:47:40 -07:00
net2280.h
nokia.c usb: gadget: add max_speed to usb_composite_driver 2011-07-01 14:27:05 -07:00
omap_udc.c USB: use usb_endpoint_maxp() instead of le16_to_cpu() 2011-08-23 09:47:40 -07:00
omap_udc.h
pch_udc.c USB: use usb_endpoint_maxp() instead of le16_to_cpu() 2011-08-23 09:47:40 -07:00
printer.c Merge branch 'usb-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6 2011-07-25 23:08:32 -07:00
pxa25x_udc.c USB: use usb_endpoint_maxp() instead of le16_to_cpu() 2011-08-23 09:47:40 -07:00
pxa25x_udc.h
pxa27x_udc.c USB: use usb_endpoint_maxp() instead of le16_to_cpu() 2011-08-23 09:47:40 -07:00
pxa27x_udc.h treewide: transciever/transceiver spelling fixes 2011-06-24 11:20:14 +02:00
r8a66597-udc.c USB: use usb_endpoint_maxp() instead of le16_to_cpu() 2011-08-23 09:47:40 -07:00
r8a66597-udc.h usb: update email address in r8a66597-udc and m66592-udc 2011-07-08 12:47:27 +03:00
rndis.c Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2010-10-24 13:41:39 -07:00
rndis.h
s3c2410_udc.c USB: use usb_endpoint_maxp() instead of le16_to_cpu() 2011-08-23 09:47:40 -07:00
s3c2410_udc.h
s3c-hsotg.c USB: use usb_endpoint_maxp() instead of le16_to_cpu() 2011-08-23 09:47:40 -07:00
s3c-hsudc.c USB: use usb_endpoint_maxp() instead of le16_to_cpu() 2011-08-23 09:47:40 -07:00
serial.c usb: gadget: add max_speed to usb_composite_driver 2011-07-01 14:27:05 -07:00
storage_common.c usb: gadget: storage: make FSG_NUM_BUFFERS variable size 2011-09-09 13:06:04 +03:00
u_audio.c usb: g_audio: Fix crash at driver removal 2010-12-03 12:05:35 -08:00
u_audio.h
u_ether.c usb: gadget: add SS descriptors to Ethernet gadget 2011-07-08 13:55:30 +03:00
u_ether.h usb: gadget: add usb_endpoint_descriptor to struct usb_ep 2011-06-28 11:14:36 -07:00
u_phonet.h
u_serial.c usb: gadget: add usb_endpoint_descriptor to struct usb_ep 2011-06-28 11:14:36 -07:00
u_serial.h usb: gadget: add usb_endpoint_descriptor to struct usb_ep 2011-06-28 11:14:36 -07:00
udc-core.c usb: gadget: udc-core: wire up sysfs files 2011-07-01 14:31:14 -07:00
usbstring.c
uvc_queue.c atomic: use <linux/atomic.h> 2011-07-26 16:49:47 -07:00
uvc_queue.h
uvc_v4l2.c [media] v4l2-event/ctrls/fh: allocate events per fh and per type instead of just per-fh 2011-07-27 17:53:31 -03:00
uvc_video.c
uvc.h
webcam.c usb: gadget: add max_speed to usb_composite_driver 2011-07-01 14:27:05 -07:00
zero.c usb: gadget: zero: add superspeed support 2011-07-08 13:57:54 +03:00