1. 23 8月, 2012 1 次提交
    • M
      usb composite: fix locking in usb_function_activate · 4fefe9f6
      Michael Grzeschik 提交于
      The lockdep hunter mentions a non consistent usage of spin_lock and
      spin_lock_irqsafe in the composite_disconnect and usb_function_activate
      function:
      
      [   15.700897] =================================
      [   15.705255] [ INFO: inconsistent lock state ]
      [   15.709617] 3.5.0-rc5+ #413 Not tainted
      [   15.713453] ---------------------------------
      [   15.717812] inconsistent {HARDIRQ-ON-W} -> {IN-HARDIRQ-W} usage.
      [   15.723822] uvc-gadget/116 [HC1[1]:SC0[0]:HE0:SE1] takes:
      [   15.729222]  (&(&cdev->lock)->rlock){?.+...}, at: [<7f0049e8>] composite_disconnect+0x2c/0x74 [g_webcam]
      [   15.738797] {HARDIRQ-ON-W} state was registered at:
      [   15.743677]   [<8006de3c>] mark_lock+0x148/0x688
      [   15.748325]   [<8006ecb0>] __lock_acquire+0x934/0x1b74
      [   15.753481]   [<8007047c>] lock_acquire+0x98/0x138
      [   15.758288]   [<804c776c>] _raw_spin_lock+0x4c/0x84
      [   15.763188]   [<7f006ae4>] usb_function_activate+0x28/0x94 [g_webcam]
      [   15.769652]   [<7f00820c>] usb_ep_autoconfig_reset+0x78/0x98 [g_webcam]
      [   15.776287]   [<7f0082a4>] uvc_v4l2_open+0x78/0x94 [g_webcam]
      [   15.782054]   [<80366a38>] v4l2_open+0x104/0x130
      [   15.786697]   [<800efd30>] chrdev_open+0xa0/0x170
      [   15.791423]   [<800e9718>] do_dentry_open.isra.13+0x1e8/0x264
      [   15.797186]   [<800ea5d4>] nameidata_to_filp+0x58/0x94
      [   15.802340]   [<800fa29c>] do_last.isra.31+0x2a0/0x808
      [   15.807497]   [<800faa40>] path_openat+0xc8/0x3e8
      [   15.812216]   [<800fae90>] do_filp_open+0x3c/0x90
      [   15.816936]   [<800ea6fc>] do_sys_open+0xec/0x184
      [   15.821655]   [<800ea7c4>] sys_open+0x30/0x34
      [   15.826027]   [<8000e5c0>] ret_fast_syscall+0x0/0x48
      [   15.831015] irq event stamp: 6048
      [   15.834330] hardirqs last  enabled at (6047): [<804c81b8>] _raw_spin_unlock_irqrestore+0x40/0x54
      [   15.843132] hardirqs last disabled at (6048): [<8000e174>] __irq_svc+0x34/0x60
      [   15.850370] softirqs last  enabled at (5940): [<80028380>] __do_softirq+0x188/0x270
      [   15.858043] softirqs last disabled at (5935): [<80028944>] irq_exit+0xa0/0xa8
      [   15.865195]
      [   15.865195] other info that might help us debug this:
      [   15.871724]  Possible unsafe locking scenario:
      [   15.871724]
      [   15.877645]        CPU0
      [   15.880091]        ----
      [   15.882537]   lock(&(&cdev->lock)->rlock);
      [   15.886659]   <Interrupt>
      [   15.889278]     lock(&(&cdev->lock)->rlock);
      [   15.893573]
      [   15.893573]  *** DEADLOCK ***
      [   15.893573]
      [   15.899496] no locks held by uvc-gadget/116.
      [   15.903765]
      [   15.903765] stack backtrace:
      [   15.908125] Backtrace:
      [   15.910604] [<80012038>] (dump_backtrace+0x0/0x114) from [<804bf8a4>] (dump_stack+0x20/0x24)
      [   15.919043]  r6:dfb8e6f0 r5:dfb8e400 r4:809717ec r3:60000193
      [   15.924766] [<804bf884>] (dump_stack+0x0/0x24) from [<804c0c0c>] (print_usage_bug+0x258/0x2c0)
      [   15.933388] [<804c09b4>] (print_usage_bug+0x0/0x2c0) from [<8006e240>] (mark_lock+0x54c/0x688)
      [   15.942006] [<8006dcf4>] (mark_lock+0x0/0x688) from [<8006edb8>] (__lock_acquire+0xa3c/0x1b74)
      [   15.950625] [<8006e37c>] (__lock_acquire+0x0/0x1b74) from [<8007047c>] (lock_acquire+0x98/0x138)
      [   15.959418] [<800703e4>] (lock_acquire+0x0/0x138) from [<804c78fc>] (_raw_spin_lock_irqsave+0x58/0x94)
      [   15.968736] [<804c78a4>] (_raw_spin_lock_irqsave+0x0/0x94) from [<7f0049e8>] (composite_disconnect+0x2c/0x74 [g_webcam])
      [   15.979605]  r7:00000012 r6:df82b0c4 r5:ded755bc r4:ded75580
      [   15.985331] [<7f0049bc>] (composite_disconnect+0x0/0x74 [g_webcam]) from [<8033c170>] (_gadget_stop_activity+0xc4/0x120)
      [   15.996200]  r6:df82b0c4 r5:df82b0c8 r4:df82b0d0 r3:7f0049bc
      [   16.001919] [<8033c0ac>] (_gadget_stop_activity+0x0/0x120) from [<8033e390>] (udc_irq+0x724/0xcb8)
      [   16.010877]  r6:df82b010 r5:00000000 r4:df82b010 r3:00000000
      [   16.016595] [<8033dc6c>] (udc_irq+0x0/0xcb8) from [<8033baec>] (ci_irq+0x64/0xdc)
      [   16.024086] [<8033ba88>] (ci_irq+0x0/0xdc) from [<80086538>] (handle_irq_event_percpu+0x74/0x298)
      [   16.032958]  r5:807fd414 r4:df38fdc0
      [   16.036566] [<800864c4>] (handle_irq_event_percpu+0x0/0x298) from [<800867a8>] (handle_irq_event+0x4c/0x6c)
      [   16.046315] [<8008675c>] (handle_irq_event+0x0/0x6c) from [<80089318>] (handle_level_irq+0xbc/0x11c)
      [   16.055447]  r6:def04000 r5:807fd414 r4:807fd3c0 r3:00020000
      [   16.061166] [<8008925c>] (handle_level_irq+0x0/0x11c) from [<80085cc8>] (generic_handle_irq+0x38/0x4c)
      [   16.070472]  r5:807f7f64 r4:8081e9f8
      [   16.074082] [<80085c90>] (generic_handle_irq+0x0/0x4c) from [<8000ef98>] (handle_IRQ+0x5c/0xbc)
      [   16.082788] [<8000ef3c>] (handle_IRQ+0x0/0xbc) from [<800085cc>] (tzic_handle_irq+0x6c/0x9c)
      [   16.091225]  r8:00000000 r7:def059b0 r6:00000001 r5:00000000 r4:00000000
      r3:00000012
      [   16.099141] [<80008560>] (tzic_handle_irq+0x0/0x9c) from [<8000e184>] (__irq_svc+0x44/0x60)
      [   16.107494] Exception stack(0xdef059b0 to 0xdef059f8)
      [   16.112550] 59a0:                                     00000001 00000001 00000000 dfb8e400
      [   16.120732] 59c0: 40000013 81a2e500 00000000 81a2e500 00000000 00000000 80862418 def05a0c
      [   16.128912] 59e0: def059c8 def059f8 80070e24 804c81bc 20000013 ffffffff
      [   16.135542] [<804c8178>] (_raw_spin_unlock_irqrestore+0x0/0x54) from [<8003d0ec>] (__queue_work+0x108/0x470)
      [   16.145369]  r5:dfb1a30c r4:81b93c00
      [   16.148978] [<8003cfe4>] (__queue_work+0x0/0x470) from [<8003d4e0>] (queue_work_on+0x4c/0x54)
      [   16.157511] [<8003d494>] (queue_work_on+0x0/0x54) from [<8003d544>] (queue_work+0x30/0x34)
      [   16.165774]  r6:df2e6900 r5:80e0c2f8 r4:dfb1a2c8 r3:def04000
      [   16.171495] [<8003d514>] (queue_work+0x0/0x34) from [<80493284>] (rpc_make_runnable+0x9c/0xac)
      [   16.180113] [<804931e8>] (rpc_make_runnable+0x0/0xac) from [<80493c88>] (rpc_execute+0x40/0xa8)
      [   16.188811]  r5:def05ad4 r4:dfb1a2c8
      [   16.192426] [<80493c48>] (rpc_execute+0x0/0xa8) from [<8048c734>] (rpc_run_task+0xa8/0xb4)
      [   16.200690]  r8:00000001 r7:df74f520 r6:ded75700 r5:def05ad4 r4:dfb1a2c8
      r3:00000002
      [   16.208618] [<8048c68c>] (rpc_run_task+0x0/0xb4) from [<801f1608>] (nfs_initiate_read+0xb4/0xd4)
      [   16.217403]  r5:df3e86c0 r4:00000000
      [   16.221015] [<801f1554>] (nfs_initiate_read+0x0/0xd4) from [<801f1c64>] (nfs_generic_pg_readpages+0x9c/0x114)
      [   16.230937] [<801f1bc8>] (nfs_generic_pg_readpages+0x0/0x114) from [<801f0744>] (__nfs_pageio_add_request+0xe8/0x214)
      [   16.241545]  r8:000bf000 r7:00000000 r6:00000000 r5:deef4640 r4:def05c1c
      r3:801f1bc8
      [   16.249463] [<801f065c>] (__nfs_pageio_add_request+0x0/0x214) from [<801f0e3c>] (nfs_pageio_add_request+0x28/0x54)
      [   16.259818] [<801f0e14>] (nfs_pageio_add_request+0x0/0x54) from [<801f1394>] (readpage_async_filler+0x114/0x170)
      [   16.269992]  r5:def05c58 r4:80fd7300
      [   16.273607] [<801f1280>] (readpage_async_filler+0x0/0x170) from [<800bb418>] (read_cache_pages+0xa0/0x108)
      [   16.283259]  r8:00200200 r7:00100100 r6:df74f654 r5:def05cd0 r4:80fd7300
      [   16.290034] [<800bb378>] (read_cache_pages+0x0/0x108) from [<801f218c>] (nfs_readpages+0xc4/0x168)
      [   16.298999] [<801f20c8>] (nfs_readpages+0x0/0x168) from [<800bb1d0>] (__do_page_cache_readahead+0x254/0x354)
      [   16.308833] [<800baf7c>] (__do_page_cache_readahead+0x0/0x354) from [<800bb5d0>] (ra_submit+0x38/0x40)
      [   16.318145] [<800bb598>] (ra_submit+0x0/0x40) from [<800bb6b0>] (ondemand_readahead+0xd8/0x3b0)
      [   16.326851] [<800bb5d8>] (ondemand_readahead+0x0/0x3b0) from [<800bba20>] (page_cache_async_readahead+0x98/0xa8)
      [   16.337043] [<800bb988>] (page_cache_async_readahead+0x0/0xa8) from [<800b2118>] (generic_file_aio_read+0x5b4/0x7c4)
      [   16.347565]  r6:00000000 r5:df74f654 r4:80fd70a0
      [   16.352231] [<800b1b64>] (generic_file_aio_read+0x0/0x7c4) from [<801e82c0>] (nfs_file_read+0x7c/0xcc)
      [   16.361544] [<801e8244>] (nfs_file_read+0x0/0xcc) from [<800eab80>] (do_sync_read+0xb4/0xf4)
      [   16.369981]  r9:00000000 r8:def05f70 r7:00000000 r6:00000000 r5:dec34900
      r4:fffffdee
      [   16.377896] [<800eaacc>] (do_sync_read+0x0/0xf4) from [<800eb548>] (vfs_read+0xb4/0x144)
      [   16.385987]  r8:00000000 r7:def05f70 r6:76a95008 r5:003e3dd6 r4:dec34900
      [   16.392761] [<800eb494>] (vfs_read+0x0/0x144) from [<800eb624>] (sys_read+0x4c/0x78)
      [   16.400504]  r8:00000000 r7:00000003 r6:003e3dd6 r5:76a95008 r4:dec34900
      [   16.407279] [<800eb5d8>] (sys_read+0x0/0x78) from [<8000e5c0>] (ret_fast_syscall+0x0/0x48)
      [   16.415543]  r9:def04000 r8:8000e864 r6:000086b4 r5:00000000 r4:00000000
      [   20.872729]  gadget: high-speed config #1: Video
      [   20.877368]  gadget: uvc_function_set_alt(0, 0)
      [   20.881908]  gadget: uvc_function_set_alt(1, 0)
      [   20.891464]  gadget: uvc_function_set_alt(1, 0)
      Signed-off-by: NMichael Grzeschik <m.grzeschik@pengutronix.de>
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      4fefe9f6
  2. 12 6月, 2012 1 次提交
  3. 11 5月, 2012 4 次提交
  4. 04 5月, 2012 2 次提交
    • D
      usb: gadget: add a sparse endian notation · 20c5e74c
      Dan Carpenter 提交于
      The original code works fine, but Sparse complains because it isn't
      annotated properly.
      
      drivers/usb/gadget/composite.c:793:26: warning: incorrect type in assignment (different base types)
      drivers/usb/gadget/composite.c:793:26:    expected unsigned short [unsigned] [usertype] language
      devel/drivers/usb/gadget/composite.c:793:26:    got restricted __le16 [usertype] <noident>
      devel/drivers/usb/gadget/composite.c:795:29: warning: restricted __le16 degrades to integer
      drivers/usb/gadget/composite.c:798:24: warning: incorrect type in assignment (different base types)
      drivers/usb/gadget/composite.c:798:24:    expected restricted __le16 [usertype] <noident>
      devel/drivers/usb/gadget/composite.c:798:24:    got unsigned short [unsigned] [usertype] language
      Signed-off-by: NDan Carpenter <dan.carpenter@oracle.com>
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      20c5e74c
    • Y
      usb: gadget: composite: prevent a memory leak when configuration bind fails · 124ef389
      Yongsul Oh 提交于
      In some USB composite gadget drivers, the configuration's bind function called
      by the usb_add_config() calls multiple bind config functions. (for example cdc2
      configuration bind function in the cdc_do_config() of the cdc2.c has two
      functionality bind config functions.
        - the ecm_bind_config() & the acm_bind_config())
      
      In each functionality bind config function, new instance is allocated and
      finally added by the usb_add_function().
      
      So if an error occurred during the second functionality bind config (for
      example an error occurred at the acm_bind_config() after succeeding of the
      ecm_bind_function()), the instance created by the acm_bind_config() cannot be
      freed creating a memory leak.
      
      This patch fixes this issue.
      Signed-off-by: NYongsul Oh <yongsul96.oh@samsung.com>
      Acked-by: NMichal Nazarewicz <mina86@mina86.com>
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      124ef389
  5. 24 1月, 2012 1 次提交
  6. 12 12月, 2011 1 次提交
    • M
      usb: gadget: rename usb_gadget_driver::speed to max_speed · 7177aed4
      Michal Nazarewicz 提交于
      This commit renames the “speed” field of the usb_gadget_driver
      structure to “max_speed”.  This is so that to make it more
      apparent that the field represents the maximum speed gadget
      driver can support.
      
      This also make the field look more like fields with the same
      name in usb_gadget and usb_composite_driver structures.  All
      of those represent the *maximal* speed given entity supports.
      
      After this commit, there are the following fields in various
      structures:
      * usb_gadget::speed - the current connection speed,
      * usb_gadget::max_speed - maximal speed UDC supports,
      * usb_gadget_driver::max_speed - maximal speed gadget driver
        supports, and
      * usb_composite_driver::max_speed - maximal speed composite
        gadget supports.
      Signed-off-by: NMichal Nazarewicz <mina86@mina86.com>
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      7177aed4
  7. 01 11月, 2011 1 次提交
  8. 14 10月, 2011 1 次提交
  9. 18 9月, 2011 1 次提交
    • M
      usb: Provide usb_speed_string() function · e538dfda
      Michal Nazarewicz 提交于
      In a few places in the kernel, the code prints
      a human-readable USB device speed (eg. "high speed").
      This involves a switch statement sometimes wrapped
      around in ({ ... }) block leading to code repetition.
      
      To mitigate this issue, this commit introduces
      usb_speed_string() function, which returns
      a human-readable name of provided speed.
      
      It also changes a few places switch was used to use
      this new function.  This changes a bit the way the
      speed is printed in few instances at the same time
      standardising it.
      Signed-off-by: NMichal Nazarewicz <mina86@mina86.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      e538dfda
  10. 10 9月, 2011 1 次提交
    • K
      usb gadget: clean up FSF boilerplate text · 28c9fc68
      Klaus Schwarzkopf 提交于
      remove the following two paragraphs as they are not needed:
      
      This program is distributed in the hope that it will be useful, but
      WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
      FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
      License for more details.
      
      You should have received a copy of the GNU General Public License along with
      this program; if not, write to the Free Software Foundation, Inc.,59
      Temple Place - Suite 330, Boston, MA  02111-1307, USA.
      Signed-off-by: NKlaus Schwarzkopf <schwarzkopf@sensortherm.de>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      28c9fc68
  11. 24 8月, 2011 1 次提交
    • K
      USB: use usb_endpoint_maxp() instead of le16_to_cpu() · 29cc8897
      Kuninori Morimoto 提交于
      Now ${LINUX}/drivers/usb/* can use usb_endpoint_maxp(desc) to get maximum packet size
      instead of le16_to_cpu(desc->wMaxPacketSize).
      This patch fix it up
      
      Cc: Armin Fuerst <fuerst@in.tum.de>
      Cc: Pavel Machek <pavel@ucw.cz>
      Cc: Johannes Erdfelt <johannes@erdfelt.com>
      Cc: Vojtech Pavlik <vojtech@suse.cz>
      Cc: Oliver Neukum <oliver@neukum.name>
      Cc: David Kubicek <dave@awk.cz>
      Cc: Johan Hovold <jhovold@gmail.com>
      Cc: Brad Hards <bhards@bigpond.net.au>
      Acked-by: NFelipe Balbi <balbi@ti.com>
      Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
      Cc: Thomas Dahlmann <dahlmann.thomas@arcor.de>
      Cc: David Brownell <david-b@pacbell.net>
      Cc: David Lopo <dlopo@chipidea.mips.com>
      Cc: Alan Stern <stern@rowland.harvard.edu>
      Cc: Michal Nazarewicz <m.nazarewicz@samsung.com>
      Cc: Xie Xiaobo <X.Xie@freescale.com>
      Cc: Li Yang <leoli@freescale.com>
      Cc: Jiang Bo <tanya.jiang@freescale.com>
      Cc: Yuan-hsin Chen <yhchen@faraday-tech.com>
      Cc: Darius Augulis <augulis.darius@gmail.com>
      Cc: Xiaochen Shen <xiaochen.shen@intel.com>
      Cc: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
      Cc: OKI SEMICONDUCTOR, <toshiharu-linux@dsn.okisemi.com>
      Cc: Robert Jarzmik <robert.jarzmik@free.fr>
      Cc: Ben Dooks <ben@simtec.co.uk>
      Cc: Thomas Abraham <thomas.ab@samsung.com>
      Cc: Herbert Pötzl <herbert@13thfloor.at>
      Cc: Arnaud Patard <arnaud.patard@rtp-net.org>
      Cc: Roman Weissgaerber <weissg@vienna.at>
      Acked-by: NSarah Sharp <sarah.a.sharp@linux.intel.com>
      Cc: Tony Olech <tony.olech@elandigitalsystems.com>
      Cc: Florian Floe Echtler <echtler@fs.tum.de>
      Cc: Christian Lucht <lucht@codemercs.com>
      Cc: Juergen Stuber <starblue@sourceforge.net>
      Cc: Georges Toth <g.toth@e-biz.lu>
      Cc: Bill Ryder <bryder@sgi.com>
      Cc: Kuba Ober <kuba@mareimbrium.org>
      Cc: Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com>
      Signed-off-by: NKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      29cc8897
  12. 12 8月, 2011 1 次提交
  13. 02 8月, 2011 1 次提交
  14. 02 7月, 2011 3 次提交
  15. 29 6月, 2011 2 次提交
  16. 11 5月, 2011 1 次提交
    • R
      usb: gadget: composite: Allow function drivers to pause control transfers · 1b9ba000
      Roger Quadros 提交于
      Some USB function drivers (e.g. f_mass_storage.c) need to delay or defer the
      data/status stages of standard control requests like SET_CONFIGURATION or
      SET_INTERFACE till they are done with their bookkeeping and are actually ready
      for accepting new commands to their interface.
      
      They can now achieve this functionality by returning USB_GADGET_DELAYED_STATUS
      in their setup handlers (e.g. set_alt()). The composite framework will then
      defer completion of the control transfer by not completing the data/status stages.
      
      This ensures that the host does not send new packets to the interface till the
      function driver is ready to take them.
      
      When the function driver that requested for USB_GADGET_DELAYED_STATUS is done
      with its bookkeeping, it should signal the composite framework to continue with
      the data/status stages of the control transfer. It can do so by invoking
      the new API usb_composite_setup_continue(). This is where the control transfer's
      data/status stages are completed and host can initiate new transfers.
      
      The DELAYED_STATUS mechanism is currently only supported if the expected data phase
      is 0 bytes (i.e. w_length == 0). Since SET_CONFIGURATION and SET_INTERFACE are the
      only cases that will use this mechanism, this is not a limitation.
      Signed-off-by: NRoger Quadros <roger.quadros@nokia.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      1b9ba000
  17. 31 3月, 2011 1 次提交
  18. 26 2月, 2011 1 次提交
  19. 18 2月, 2011 2 次提交
  20. 23 1月, 2011 1 次提交
  21. 17 12月, 2010 2 次提交
  22. 01 12月, 2010 1 次提交
  23. 11 11月, 2010 1 次提交
  24. 23 10月, 2010 6 次提交
  25. 24 8月, 2010 1 次提交
  26. 11 8月, 2010 1 次提交