1. 19 Aug, 2014 13 commits
    • Michael Grzeschik's avatar
      usb: gadget: uvc: fix possible lockup in uvc gadget · bd52b813
      Michael Grzeschik authored
      If the pending buffers in the queue could not be pushed to the udc
      endpoint we have to cancel the uvc_queue. Otherwise the gadget will get
      stuck on this error. This patch calls uvc_queue_cancel if usb_ep_queue
      failed.
      Acked-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
      Signed-off-by: default avatarMichael Grzeschik <m.grzeschik@pengutronix.de>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      bd52b813
    • Li RongQing's avatar
      Revert "usb: gadget: u_ether: synchronize with transmit when stopping queue" · 7166c32d
      Li RongQing authored
      This reverts commit a9232076.
      
      It introduced a dead lock, and did not fix anything.
      
      it made netif_tx_lock() be called in IRQ context, but in softirq context,
      the same lock is locked without disabling IRQ. In fact, the commit a9232076
      did not fix anything, since netif_stop_queue did not free the any resource
      
      [   10.154920] =================================
      [   10.156026] [ INFO: inconsistent lock state ]
      [   10.156026] 3.16.0-rc5+ #13 Not tainted
      [   10.156026] ---------------------------------
      [   10.156026] inconsistent {IN-HARDIRQ-W} -> {HARDIRQ-ON-W} usage.
      [   10.156026] swapper/1/0 [HC0[0]:SC1[5]:HE1:SE0] takes:
      [   10.156026]  (_xmit_ETHER){?.-...}, at: [<80948b6a>] sch_direct_xmit+0x7a/0x250
      [   10.156026] {IN-HARDIRQ-W} state was registered at:
      [   10.156026]   [<804811f0>] __lock_acquire+0x800/0x17a0
      [   10.156026]   [<804828ba>] lock_acquire+0x6a/0xf0
      [   10.156026]   [<809ed477>] _raw_spin_lock+0x27/0x40
      [   10.156026]   [<8088d508>] gether_disconnect+0x68/0x280
      [   10.156026]   [<8088e777>] eem_set_alt+0x37/0xc0
      [   10.156026]   [<808847ce>] composite_setup+0x30e/0x1240
      [   10.156026]   [<8088b8ae>] pch_udc_isr+0xa6e/0xf50
      [   10.156026]   [<8048abe8>] handle_irq_event_percpu+0x38/0x1e0
      [   10.156026]   [<8048adc1>] handle_irq_event+0x31/0x50
      [   10.156026]   [<8048d94b>] handle_fasteoi_irq+0x6b/0x140
      [   10.156026]   [<804040a5>] handle_irq+0x65/0x80
      [   10.156026]   [<80403cfc>] do_IRQ+0x3c/0xc0
      [   10.156026]   [<809ee6ae>] common_interrupt+0x2e/0x34
      [   10.156026]   [<804668c5>] finish_task_switch+0x65/0xd0
      [   10.156026]   [<809e89df>] __schedule+0x20f/0x7d0
      [   10.156026]   [<809e94aa>] schedule_preempt_disabled+0x2a/0x70
      [   10.156026]   [<8047bf03>] cpu_startup_entry+0x143/0x410
      [   10.156026]   [<809e2e61>] rest_init+0xa1/0xb0
      [   10.156026]   [<80ce2a3b>] start_kernel+0x336/0x33b
      [   10.156026]   [<80ce22ab>] i386_start_kernel+0x79/0x7d
      [   10.156026] irq event stamp: 52070
      [   10.156026] hardirqs last  enabled at (52070): [<809375de>] neigh_resolve_output+0xee/0x2a0
      [   10.156026] hardirqs last disabled at (52069): [<809375a8>] neigh_resolve_output+0xb8/0x2a0
      [   10.156026] softirqs last  enabled at (52020): [<8044401f>] _local_bh_enable+0x1f/0x50
      [   10.156026] softirqs last disabled at (52021): [<80404036>] do_softirq_own_stack+0x26/0x30
      [   10.156026]
      [   10.156026] other info that might help us debug this:
      [   10.156026]  Possible unsafe locking scenario:
      [   10.156026]
      [   10.156026]        CPU0
      [   10.156026]        ----
      [   10.156026]   lock(_xmit_ETHER);
      [   10.156026]   <Interrupt>
      [   10.156026]     lock(_xmit_ETHER);
      [   10.156026]
      [   10.156026]  *** DEADLOCK ***
      [   10.156026]
      [   10.156026] 4 locks held by swapper/1/0:
      [   10.156026]  #0:  (((&idev->mc_ifc_timer))){+.-...}, at: [<8044b100>] call_timer_fn+0x0/0x190
      [   10.156026]  #1:  (rcu_read_lock){......}, at: [<a0577c40>] mld_sendpack+0x0/0x590 [ipv6]
      [   10.156026]  #2:  (rcu_read_lock_bh){......}, at: [<a055680c>] ip6_finish_output2+0x4c/0x7f0 [ipv6]
      [   10.156026]  #3:  (rcu_read_lock_bh){......}, at: [<8092e510>] __dev_queue_xmit+0x0/0x5f0
      [   10.156026]
      [   10.156026] stack backtrace:
      [   10.156026] CPU: 1 PID: 0 Comm: swapper/1 Not tainted 3.16.0-rc5+ #13
      [   10.156026]  811dbb10 00000000 9e919d10 809e6785 9e8b8000 9e919d3c 809e561e 80b95511
      [   10.156026]  80b9545a 80b9543d 80b95450 80b95441 80b957e4 9e8b84e0 00000002 8047f7b0
      [   10.156026]  9e919d5c 8048043b 00000002 00000000 9e8b8000 00000001 00000004 9e8b8000
      [   10.156026] Call Trace:
      [   10.156026]  [<809e6785>] dump_stack+0x48/0x69
      [   10.156026]  [<809e561e>] print_usage_bug+0x18f/0x19c
      [   10.156026]  [<8047f7b0>] ? print_shortest_lock_dependencies+0x170/0x170
      [   10.156026]  [<8048043b>] mark_lock+0x53b/0x5f0
      [   10.156026]  [<804810cf>] __lock_acquire+0x6df/0x17a0
      [   10.156026]  [<804828ba>] lock_acquire+0x6a/0xf0
      [   10.156026]  [<80948b6a>] ? sch_direct_xmit+0x7a/0x250
      [   10.156026]  [<809ed477>] _raw_spin_lock+0x27/0x40
      [   10.156026]  [<80948b6a>] ? sch_direct_xmit+0x7a/0x250
      [   10.156026]  [<80948b6a>] sch_direct_xmit+0x7a/0x250
      [   10.156026]  [<8092e6bf>] __dev_queue_xmit+0x1af/0x5f0
      [   10.156026]  [<80947fc0>] ? ether_setup+0x80/0x80
      [   10.156026]  [<8092eb0f>] dev_queue_xmit+0xf/0x20
      [   10.156026]  [<8093764c>] neigh_resolve_output+0x15c/0x2a0
      [   10.156026]  [<a0556927>] ip6_finish_output2+0x167/0x7f0 [ipv6]
      [   10.156026]  [<a0559b05>] ip6_finish_output+0x85/0x1c0 [ipv6]
      [   10.156026]  [<a0559cb7>] ip6_output+0x77/0x240 [ipv6]
      [   10.156026]  [<a0578163>] mld_sendpack+0x523/0x590 [ipv6]
      [   10.156026]  [<80480501>] ? mark_held_locks+0x11/0x90
      [   10.156026]  [<a057947d>] mld_ifc_timer_expire+0x15d/0x280 [ipv6]
      [   10.156026]  [<8044b168>] call_timer_fn+0x68/0x190
      [   10.156026]  [<a0579320>] ? igmp6_group_added+0x150/0x150 [ipv6]
      [   10.156026]  [<8044b3fa>] run_timer_softirq+0x16a/0x240
      [   10.156026]  [<a0579320>] ? igmp6_group_added+0x150/0x150 [ipv6]
      [   10.156026]  [<80444984>] __do_softirq+0xd4/0x2f0
      [   10.156026]  [<804448b0>] ? tasklet_action+0x100/0x100
      [   10.156026]  [<80404036>] do_softirq_own_stack+0x26/0x30
      [   10.156026]  <IRQ>  [<80444d05>] irq_exit+0x65/0x70
      [   10.156026]  [<8042d758>] smp_apic_timer_interrupt+0x38/0x50
      [   10.156026]  [<809ee91f>] apic_timer_interrupt+0x2f/0x34
      [   10.156026]  [<8048007b>] ? mark_lock+0x17b/0x5f0
      [   10.156026]  [<8040a912>] ? default_idle+0x22/0xf0
      [   10.156026]  [<8040b13e>] arch_cpu_idle+0xe/0x10
      [   10.156026]  [<8047bfc6>] cpu_startup_entry+0x206/0x410
      [   10.156026]  [<8042bfbd>] start_secondary+0x19d/0x1e0
      Acked-by: default avatarTony Lindgren <tony@atomide.com>
      Reported-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Cc: Jeff Westfahl <jeff.westfahl@ni.com>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Cc: <linux-usb@vger.kernel.org>
      Signed-off-by: default avatarLi RongQing <roy.qing.li@gmail.com>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      7166c32d
    • Wei Yongjun's avatar
      usb: phy: msm: Fix return value check in msm_otg_probe() · 716d28e2
      Wei Yongjun authored
      In case of error, the function devm_ioremap_nocache() returns NULL
      pointer not ERR_PTR(). The IS_ERR() test in the return value check
      should be replaced with NULL test.
      Signed-off-by: default avatarWei Yongjun <yongjun_wei@trendmicro.com.cn>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      716d28e2
    • Wei Yongjun's avatar
      usb: gadget: Fix return value check in r8a66597_probe() · 4b11f888
      Wei Yongjun authored
      In case of error, the function devm_ioremap_resource() returns ERR_PTR()
      and never returns NULL. The NULL test in the return value check should
      be replaced with IS_ERR().
      Acked-by: default avatarLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
      Signed-off-by: default avatarWei Yongjun <yongjun_wei@trendmicro.com.cn>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      4b11f888
    • Wei Yongjun's avatar
      usb: gadget: Fix return value check in ep_write() · 7042e8f2
      Wei Yongjun authored
      In case of error, the function memdup_user() returns ERR_PTR()
      and never returns NULL. The NULL test in the return value check
      should be replaced with IS_ERR().
      Signed-off-by: default avatarWei Yongjun <yongjun_wei@trendmicro.com.cn>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      7042e8f2
    • Dan Carpenter's avatar
      usb: dwc3: omap: signedness bug in dwc3_omap_set_utmi_mode() · 788b0bc4
      Dan Carpenter authored
      "ret" should be signed.  It's only used for zero and negative error
      codes.
      Signed-off-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      788b0bc4
    • Hans Wennborg's avatar
      usb: musb: ux500: fix decimal printf format specifiers prefixed with 0x · 50f9f798
      Hans Wennborg authored
      The prefix suggests the number should be printed in hex, so use
      the %x specifier to do that.
      
      Found by using regex suggested by Joe Perches.
      Signed-off-by: default avatarHans Wennborg <hans@hanshq.net>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      50f9f798
    • Bo Shen's avatar
      usb: atmel_usba_udc: fix it to deal with final dma channel · bcabdc24
      Bo Shen authored
      As, the interrupt for DMA is counted from 1, so need to checked
      the USBA_NR_DMAS, in old way, it only check (USBA_NR_DMAS - 1),
      so fix it.
      Reported-by: default avatarMax Liao <liaops@embest-tech.com>
      Signed-off-by: default avatarBo Shen <voice.shen@atmel.com>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      bcabdc24
    • Julia Lawall's avatar
      usb: gadget: fix error return code · 20e7d465
      Julia Lawall authored
      Convert a zero return value on error to a negative one, as returned
      elsewhere in the function.
      
      A simplified version of the semantic match that finds this problem is as
      follows: (http://coccinelle.lip6.fr/)
      
      // <smpl>
      @@
      identifier ret; expression e1,e2;
      @@
      (
      if (\(ret < 0\|ret != 0\))
       { ... return ret; }
      |
      ret = 0
      )
      ... when != ret = e1
          when != &ret
      *if(...)
      {
        ... when != ret = e2
            when forall
       return ret;
      }
      // </smpl>
      Reviewed-by: default avatarJeff Moyer <jmoyer@redhat.com>
      Signed-off-by: default avatarJulia Lawall <Julia.Lawall@lip6.fr>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      20e7d465
    • Jingoo Han's avatar
      usb: phy: samsung: Fix wrong bit mask for PHYPARAM1_PCS_TXDEEMPH · bbc66e14
      Jingoo Han authored
      According to the datasheet, PHYPARAM1_PCS_TXDEEMPH is set as
      6 bits [5:0]. Thus, the bit mask should be set as 0x3f, instead
      of 0x1f.
      Signed-off-by: default avatarJingoo Han <jg1.han@samsung.com>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      bbc66e14
    • Alexey Khoroshilov's avatar
      usb: dbgp gadget: fix use after free in dbgp_unbind() · 4958cf32
      Alexey Khoroshilov authored
      After dbgp_bind()-dbgp_unbind() cycle happens, static variable dbgp
      contains pointers to already deallocated memory (dbgp.serial and dbgp.req).
      If the next dbgp_bind() fails, for example in usb_ep_alloc_request(),
      dbgp_bind() calls dbgp_unbind() on failure path,
      and dbgp_unbind() frees dbgp.serial that still stores a pointer
      to already deallocated memory.
      
      The patch sets pointers to NULL in dbgp_unbind().
      
      Found by Linux Driver Verification project (linuxtesting.org).
      Signed-off-by: default avatarAlexey Khoroshilov <khoroshilov@ispras.ru>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      4958cf32
    • Himangi Saraogi's avatar
      usb: phy: drop kfree of devm_kzalloc's data · 0c582408
      Himangi Saraogi authored
      Using kfree to free data allocated with devm_kzalloc causes double frees.
      
      The Coccinelle semantic patch that fixes this problem is as follows:
      
      // <smpl>
      @@
      expression x;
      @@
      
      x = devm_kzalloc(...)
      ...
      ?-kfree(x);
      // </smpl>
      Reviewed-by: default avatarJingoo Han <jg1.han@samsung.com>
      Acked-by: default avatarJulia Lawall <julia.lawall@lip6.fr>
      Signed-off-by: default avatarHimangi Saraogi <himangi774@gmail.com>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      0c582408
    • Arjun Sreedharan's avatar
      usb: phy: return -ENODEV on failure of try_module_get · 2c4e3dbf
      Arjun Sreedharan authored
      When __usb_find_phy_dev() does not return error and
      try_module_get() fails, return -ENODEV.
      Signed-off-by: default avatarArjun Sreedharan <arjun024@gmail.com>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      2c4e3dbf
  2. 16 Aug, 2014 27 commits