linux/drivers/usb/gadget
Michael Grzeschik b1b552a69b usb: gadget: u_ether: fix kworker 100% CPU issue with still used interfaces in eth_stop
This patch fixes an issue introduced by patch:

    72c973d usb: gadget: add usb_endpoint_descriptor to struct usb_ep

Without this patch we see a kworker taking 100% CPU, after this sequence:

- Connect gadget to a windows host
- load g_ether
- ifconfig up <ip>; ifconfig down; ifconfig up
- ping <windows host>

The "ifconfig down" results in calling eth_stop(), which will call
usb_ep_disable() and, if the carrier is still ok, usb_ep_enable():

         usb_ep_disable(link->in_ep);
         usb_ep_disable(link->out_ep);
         if (netif_carrier_ok(net)) {
                 usb_ep_enable(link->in_ep);
                 usb_ep_enable(link->out_ep);
         }

The ep should stay enabled, but will not, as ep_disable set the desc
pointer to NULL, therefore the subsequent ep_enable will fail. This leads
to permanent rescheduling of the eth_work() worker as usb_ep_queue()
(called by the worker) will fail due to the unconfigured endpoint.

We fix this issue by saving the ep descriptors and re-assign them before
usb_ep_enable().

Cc: Tatyana Brokhman <tlinder@codeaurora.org>
Signed-off-by: Michael Grzeschik <m.grzeschik@pengutronix.de>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2012-08-10 11:57:37 -07:00
..
acm_ms.c usb: gadget: acm_ms: need to set max_speed 2012-06-22 13:10:10 +03:00
amd5536udc.c usb: gadget: Update amd5536udc to use usb_endpoint_descriptor inside the struct usb_ep 2012-05-04 15:52:52 +03:00
amd5536udc.h usb: gadget: Update amd5536udc to use usb_endpoint_descriptor inside the struct usb_ep 2012-05-04 15:52:52 +03:00
at91_udc.c usb: gadget: at91_udc: Propagate devicetree to gadget drivers 2012-07-02 10:38:07 +03:00
at91_udc.h usb: gadget: Update at91_udc to use usb_endpoint_descriptor inside the struct usb_ep 2012-05-04 15:52:53 +03:00
atmel_usba_udc.c usb: gadget: atmel_usba_udc: Remove unneeded condition 2012-06-04 18:15:44 +03:00
atmel_usba_udc.h usb: gadget: Update atmel_usba_udc to use usb_endpoint_descriptor inside the struct usb_ep 2012-05-04 15:52:53 +03:00
audio.c usb: gadget: Add Audio Class 2.0 Driver 2012-02-15 10:10:31 +02:00
cdc2.c usb: Add module.h to drivers/usb consumers who really use it. 2011-10-31 19:31:25 -04:00
composite.c usb: gadget: composite: fix ep->maxburst initialization 2012-06-12 13:30:25 +03:00
config.c
dbgp.c usb: gadget: rename usb_gadget_driver::speed to max_speed 2011-12-12 11:45:12 +02:00
dummy_hcd.c usb: gadget: dummy_hcd: fix build when BUG is not set 2012-05-11 15:17:31 -07:00
epautoconf.c This merge is rather big. Here's what it contains: 2012-03-01 09:20:28 -08:00
ether.c module_param: make bool parameters really bool (drivers & misc) 2012-01-13 09:32:20 +10:30
f_acm.c usb: gadget: add usb3.0 descriptors to serial gadgets 2012-02-09 10:11:36 +02:00
f_ecm.c usb: gadget: Add Interface Association Descriptor to ECM 2012-01-30 11:17:26 +02:00
f_eem.c
f_fs.c usb: gadget: ffs: add HID descriptor support. 2012-06-04 18:11:59 +03:00
f_hid.c usb: gadget: hidg: register OUT INT endpoint for SET_REPORT 2012-06-15 14:34:53 +03:00
f_loopback.c usb: gadget: add isochronous support to gadget zero 2012-05-04 15:53:08 +03:00
f_mass_storage.c usb: gadget: mass_storage: make "file" and "ro" read only in some cases 2012-07-02 10:36:55 +03:00
f_midi.c Allocate correct size (portably) in drivers/usb/gadget/f_midi.c::f_midi_bind() 2012-03-02 16:22:11 -08:00
f_ncm.c
f_obex.c usb: Add module.h to drivers/usb consumers who really use it. 2011-10-31 19:31:25 -04:00
f_phonet.c netvm: propagate page->pfmemalloc from skb_alloc_page to skb 2012-07-31 18:42:46 -07:00
f_rndis.c USB 3.5-rc1 pull request 2012-05-22 15:50:46 -07:00
f_serial.c usb: gadget: add usb3.0 descriptors to serial gadgets 2012-02-09 10:11:36 +02:00
f_sourcesink.c usb: gadget: add isochronous support to gadget zero 2012-05-04 15:53:08 +03:00
f_subset.c usb gadget: fix a section mismatch when compiling g_ffs with CONFIG_USB_FUNCTIONFS_ETH 2012-03-13 14:29:33 -07:00
f_uac1.c usb: gadget: audio: Move string IDs to audio.c 2012-02-15 10:10:25 +02:00
f_uac2.c usb: gadget: Add Audio Class 2.0 Driver 2012-02-15 10:10:31 +02:00
f_uvc.c usb: gadget: uvc: Add super-speed support to UVC webcam gadget 2012-06-04 18:12:36 +03:00
f_uvc.h usb: gadget: uvc: Add super-speed support to UVC webcam gadget 2012-06-04 18:12:36 +03:00
file_storage.c USB: gadget: storage gadgets send wrong error code for unknown commands 2012-04-12 16:20:10 +03:00
fsl_mxc_udc.c usb: gadget: fsl_mxc_udc: do not depend on grouped clocks 2012-06-22 13:09:52 +03:00
fsl_qe_udc.c usb: gadget: fsl_qe_udc: Remove unneeded condition 2012-06-04 18:15:45 +03:00
fsl_qe_udc.h usb: gadget: Complete fsl qe/udc driver conversion 2012-06-12 13:32:29 +03:00
fsl_udc_core.c usb: phy: patches for v3.6 merge window 2012-07-05 15:35:41 -07:00
fsl_usb2_udc.h usb: gadget: regression fix - usage of usb_ep 2012-06-04 18:24:49 +03:00
fusb300_udc.c usb: gadget: Update fusb300_udc to use usb_endpoint_descriptor inside the struct usb_ep 2012-05-04 15:52:55 +03:00
fusb300_udc.h usb: gadget: Update fusb300_udc to use usb_endpoint_descriptor inside the struct usb_ep 2012-05-04 15:52:55 +03:00
g_ffs.c FunctionFS: enable multiple functions 2012-05-14 09:25:44 -07:00
g_zero.h usb: gadget: add isochronous support to gadget zero 2012-05-04 15:53:08 +03:00
gadget_chips.h USB: gadget driver for LPC32xx 2012-05-01 13:34:55 -04:00
gmidi.c usb: Add module.h to drivers/usb consumers who really use it. 2011-10-31 19:31:25 -04:00
goku_udc.c goku_udc: remove IRQF_SAMPLE_RANDOM which was commented out 2012-07-19 10:39:54 -04:00
goku_udc.h usb: gadget: Update goku_udc to use usb_endpoint_descriptor inside the struct usb_ep 2012-05-04 15:52:55 +03:00
hid.c USB: gadget: Make g_hid device class conform to spec. 2012-03-08 13:11:34 -08:00
imx_udc.c usb: imx_udc.c: Use clk_prepare_enable/clk_disable_unprepare 2012-06-12 13:30:59 +03:00
imx_udc.h
inode.c USB: remove compile warning on gadget/inode.c 2012-04-06 13:54:01 -07:00
Kconfig USB patches for 3.6-rc1 2012-07-26 10:23:47 -07:00
lpc32xx_udc.c usb: gadget: patches for v3.6 merge window 2012-07-05 15:10:09 -07:00
m66592-udc.c gadget/m66592: remove conditional compilation of clk code 2012-07-30 17:25:12 -07:00
m66592-udc.h gadget/m66592: remove conditional compilation of clk code 2012-07-30 17:25:12 -07:00
Makefile usb: gadget: mv: Add USB 3.0 device driver for Marvell PXA2128 chip. 2012-06-22 13:08:21 +03:00
mass_storage.c usb: gadget: update Michal Nazarewicz's email address 2012-01-24 11:45:11 +02:00
multi.c usb: gadget: update Michal Nazarewicz's email address 2012-01-24 11:45:11 +02:00
mv_u3d_core.c usb: gadget: mv: Add USB 3.0 device driver for Marvell PXA2128 chip. 2012-06-22 13:08:21 +03:00
mv_u3d.h usb: gadget: mv: Add USB 3.0 device driver for Marvell PXA2128 chip. 2012-06-22 13:08:21 +03:00
mv_udc_core.c usb: phy: patches for v3.6 merge window 2012-07-05 15:35:41 -07:00
mv_udc.h usb: gadget: Update mv_udc to use usb_endpoint_descriptor inside the struct usb_ep 2012-05-04 15:52:57 +03:00
ncm.c
ndis.h usb/net: rndis: break out <linux/rndis.h> defines 2012-05-12 15:02:22 -04:00
net2272.c Remove all #inclusions of asm/system.h 2012-03-28 18:30:03 +01:00
net2272.h
net2280.c Remove all #inclusions of asm/system.h 2012-03-28 18:30:03 +01:00
net2280.h
nokia.c
omap_udc.c USB patches for 3.6-rc1 2012-07-26 10:23:47 -07:00
omap_udc.h usb: gadget: Update omap_udc to use usb_endpoint_descriptor inside the struct usb_ep 2012-05-04 15:52:57 +03:00
pch_udc.c usb: gadget: pch_udc: Fix likely misuse of | for & 2012-06-04 18:12:06 +03:00
printer.c usb: gadget: make g_printer use composite 2012-05-04 15:53:04 +03:00
pxa25x_udc.c This patch series contains a major revamp of how we collect entropy 2012-07-31 19:07:42 -07:00
pxa25x_udc.h usb: gadget: Update pxa25x_udc to use usb_endpoint_descriptor inside the struct usb_ep 2012-05-04 15:52:58 +03:00
pxa27x_udc.c usb: phy: fix return value check of usb_get_phy 2012-07-02 10:40:49 +03:00
pxa27x_udc.h usb: otg: Rename otg_transceiver to usb_phy 2012-02-13 13:34:36 +02:00
r8a66597-udc.c gadget/r8a66597: remove conditional compilation of clk code 2012-07-30 17:25:12 -07:00
r8a66597-udc.h gadget/r8a66597: remove conditional compilation of clk code 2012-07-30 17:25:12 -07:00
rndis.c usb/net: rndis: fixup a few name prefixes 2012-05-12 15:13:39 -04:00
rndis.h usb/net: rndis: break out <linux/rndis.h> defines 2012-05-12 15:02:22 -04:00
s3c2410_udc.c usb: gadget: s3c2410_udc: Remove unneeded condition 2012-06-04 18:15:48 +03:00
s3c2410_udc.h usb: gadget: Update s3c2410_udc to use usb_endpoint_descriptor inside the struct usb_ep 2012-05-04 15:52:59 +03:00
s3c-hsotg.c usb: gadget: s3c-hsotg: Propagate devicetree to gadget drivers 2012-07-02 10:38:01 +03:00
s3c-hsotg.h usb:hsotg:samsung: Remove the S3C_ prefix from registers definition. 2012-05-04 15:53:17 +03:00
s3c-hsudc.c usb: phy: patches for v3.6 merge window 2012-07-05 15:35:41 -07:00
serial.c usb: gadget: add usb3.0 descriptors to serial gadgets 2012-02-09 10:11:36 +02:00
storage_common.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2012-08-01 10:26:23 -07:00
tcm_usb_gadget.c target: Allow for target_submit_cmd() returning errors 2012-07-17 17:05:05 -07:00
tcm_usb_gadget.h usb-gadget: Initial merge of target module for UASP + BOT 2012-05-09 15:25:59 -07:00
u_ether.c usb: gadget: u_ether: fix kworker 100% CPU issue with still used interfaces in eth_stop 2012-08-10 11:57:37 -07:00
u_ether.h usb: gadget: f_rndis: Set rndis vendor parameters 2012-05-10 12:27:58 -07:00
u_phonet.h
u_serial.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2012-05-22 19:22:50 -07:00
u_serial.h
u_uac1.c gadgetfs: clean up 2012-07-29 21:24:21 +04:00
u_uac1.h usb: gadget: Rename audio function to uac1 2012-02-15 10:09:48 +02:00
udc-core.c usb: gadget: udc-core: fix incompatibility with dummy-hcd 2012-04-27 11:06:15 +03:00
usbstring.c USB: remove homegrown UTF conversion routine for gadgets 2011-11-18 10:51:01 -08:00
uvc_queue.c [media] usb: gadget/uvc: Remove non-required locking from 'uvc_queue_next_buffer' routine 2012-04-10 15:46:02 -03:00
uvc_queue.h
uvc_v4l2.c Merge remote-tracking branch 'linus/master' into staging/for_v3.5 2012-05-15 08:39:25 -03:00
uvc_video.c
uvc.h usb: gadget: uvc: Add super-speed support to UVC webcam gadget 2012-06-04 18:12:36 +03:00
webcam.c usb: gadget: uvc: Add super-speed support to UVC webcam gadget 2012-06-04 18:12:36 +03:00
zero.c usb: gadget: add isochronous support to gadget zero 2012-05-04 15:53:08 +03:00