1. 04 Aug, 2015 29 commits
  2. 03 Aug, 2015 4 commits
    • Li Jun's avatar
      usb: chipidea: add ci->is_otg condition for otg judgement · 3f217e9e
      Li Jun authored
      Since some chipidea based controller is not otg capable, add ci->is_otg
      condition when setting is_otg flag for gadget.
      Signed-off-by: default avatarLi Jun <jun.li@freescale.com>
      Reviewed-by: default avatarRoger Quadros <rogerq@ti.com>
      Acked-by: default avatarPeter Chen <peter.chen@freescale.com>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      3f217e9e
    • Fupan Li's avatar
      usb: gadget: f_printer: fix deadlock caused by nested spinlock · a24b071b
      Fupan Li authored
      Function printer_func_disable() has called spinlock on printer_dev->lock,
      and it'll call function chain of
      
          printer_reset_interface()
              |
      	+---dwc3_gadget_ep_disable()
      	        |
                      +---__dwc3_gadget_ep_disable()
                              |
                              +---dwc3_remove_requests()
                                      |
                                      +---dwc3_gadget_giveback()
                                              |
                                              +---rx_complete()
      
      in the protected block.
      
      However, rx_complete() in f_printer.c calls spinlock on printer_dev->lock
      again, which will cause system hang.
      
      The following steps can reproduce this hang:
      
      1. Build the test program from Documentation/usb/gadget_printer.txt as
         g_printer
      2. Plug in the USB device to a host(such as Ubuntu).
      3. on the USB device system run:
         #modprobe g_printer.ko
         #./g_printer -read_data
      
      4. Unplug the USB device from the host
      
         The system will hang later.
      
      In order to avoid this deadlock, moving the spinlock from
      printer_func_disable() into printer_reset_interface() and excluding the block
      of calling dwc3_gadget_ep_disable(), in which the critical resource will be
      protected by its spinlock in rx_complete().
      
      This commit will fix the system hang with the following calltrace:
      
      INFO: rcu_preempt detected stalls on CPUs/tasks: { 3} (detected by 0, t=21006 jiffies, g=524, c=523, q=2)
      sending NMI to all CPUs:
      NMI backtrace for cpu 3
      CPU: 3 PID: 718 Comm: irq/22-dwc3 Not tainted 3.10.38-ltsi-WR6.0.0.11_standard #2
      Hardware name: Intel Corp. VALLEYVIEW B3 PLATFORM/NOTEBOOK, BIOS BYTICRB1.86C.0092.R32.1410021707 10/02/2014
      task: f44f4c20 ti: f40f6000 task.ti: f40f6000
      EIP: 0060:[<c1824955>] EFLAGS: 00000097 CPU: 3
      EIP is at _raw_spin_lock_irqsave+0x35/0x40
      EAX: 00000076 EBX: f80fad00 ECX: 00000076 EDX: 00000075
      ESI: 00000096 EDI: ffffff94 EBP: f40f7e20 ESP: f40f7e18
       DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0068
      CR0: 8005003b CR2: b77ac000 CR3: 01c30000 CR4: 001007f0
      DR0: 00000000 DR1: 00000000 DR2: 00000000 DR3: 00000000
      DR6: ffff0ff0 DR7: 00000400
      Stack:
       f474a720 f80fad00 f40f7e3c f80f93cc c135d486 00000000 f474a720 f468fb00
       f4bea894 f40f7e54 f7e35f19 ffffff00 f468fb00 f468fb24 00000086 f40f7e64
       f7e36577 f468fb00 f4bea810 f40f7e74 f7e365a8 f468fb00 f4bea894 f40f7e9c
      Call Trace:
       [<f80f93cc>] rx_complete+0x1c/0xb0 [g_printer]
       [<c135d486>] ? vsnprintf+0x166/0x390
       [<f7e35f19>] dwc3_gadget_giveback+0xc9/0xf0 [dwc3]
       [<f7e36577>] dwc3_remove_requests+0x57/0x70 [dwc3]
       [<f7e365a8>] __dwc3_gadget_ep_disable+0x18/0x60 [dwc3]
       [<f7e366e9>] dwc3_gadget_ep_disable+0x89/0xf0 [dwc3]
       [<f80f9031>] printer_reset_interface+0x31/0x50 [g_printer]
       [<f80f9270>] printer_func_disable+0x20/0x30 [g_printer]
       [<f80e6d8b>] composite_disconnect+0x4b/0x90 [libcomposite]
       [<f7e39a8b>] dwc3_disconnect_gadget+0x38/0x43 [dwc3]
       [<f7e39ad4>] dwc3_gadget_disconnect_interrupt+0x3e/0x5a [dwc3]
       [<f7e373b8>] dwc3_thread_interrupt+0x5c8/0x610 [dwc3]
       [<c10ac518>] irq_thread_fn+0x18/0x30
       [<c10ac800>] irq_thread+0x100/0x130
       [<c10ac500>] ? irq_finalize_oneshot.part.29+0xb0/0xb0
       [<c10ac650>] ? wake_threads_waitq+0x40/0x40
       [<c10ac700>] ? irq_thread_dtor+0xb0/0xb0
       [<c1057224>] kthread+0x94/0xa0
       [<c182b337>] ret_from_kernel_thread+0x1b/0x28
       [<c1057190>] ? kthread_create_on_node+0xc0/0xc0
      Signed-off-by: default avatarFupan Li <fupan.li@windriver.com>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      a24b071b
    • Tony Lindgren's avatar
      usb: musb: Allow building in all the DMA code · 2f0bb2a0
      Tony Lindgren authored
      With recent changes to MUSB code, we can now now get rid of
      the Kconfig choise for the DMA code and allow building in any
      of the desired DMA code. This makes life easier for distros.
      Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      2f0bb2a0
    • Pengyu Ma's avatar
      usb: gadget: udc: fix spin_lock in pch_udc · d3cb25a1
      Pengyu Ma authored
      When remove module g_serial on quark platform, the following Warning on:
      
      Modules linked in: usb_f_acm u_serial g_serial(-) pch_udc libcomposite configfs udc_core
      ad7298 industrialio_triggered_buffer kfifo_buf tpm_i2c_infineon indus
      CPU: 0 PID: 369 Comm: modprobe Not tainted 3.14.29ltsi-WR7.0.0.0_standard #6
      Hardware name: Intel Corp. QUARK/CrossHill, BIOS 0x010100F5 01/01/2014
       f641df0c f641df0c f641dec8 c15ac7fa f641defc c103084f c16c2356 f641df28
       00000171 c16b855c 000009dd c15b2d6f 000009dd c15b2d6f f6bd2000 faae5480
       00000000 f641df14 c10308a3 00000009 f641df0c c16c2356 f641df28 f641df2c
      Call Trace:
       [<c15ac7fa>] dump_stack+0x16/0x18
       [<c103084f>] warn_slowpath_common+0x7f/0xa0
       [<c15b2d6f>] ? preempt_count_sub+0x6f/0xc0
       [<c15b2d6f>] ? preempt_count_sub+0x6f/0xc0
       [<c10308a3>] warn_slowpath_fmt+0x33/0x40
       [<c15b2d6f>] preempt_count_sub+0x6f/0xc0
       [<faadbc82>] pch_udc_pcd_pullup+0x32/0xa0 [pch_udc]
       [<fa9747d9>] usb_gadget_remove_driver+0x29/0x60 [udc_core]
       [<fa974869>] usb_gadget_unregister_driver+0x59/0x80 [udc_core]
       [<faa78310>] usb_composite_unregister+0x10/0x20 [libcomposite]
       [<faae50f1>] cleanup+0xd/0xf [g_serial]
       [<c1084c47>] SyS_delete_module+0xf7/0x150
       [<c111f8dd>] ? ____fput+0xd/0x10
       [<c104b2ae>] ? task_work_run+0x6e/0xa0
       [<c15afda5>] syscall_call+0x7/0x7
      
      g_serial module on quark is depended on pch_udc module, ttyGSX cann't recieve
      data and warning on when remove g_serial.
      
      It was unlocked before the modification of the structure it was protecting,
      fix it as "lock -> unlock" to resolve this.
      Signed-off-by: default avatarPengyu Ma <pengyu.ma@windriver.com>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      d3cb25a1
  3. 31 Jul, 2015 7 commits
    • Peter Chen's avatar
      doc: usb: gadget-testing: using the updated testusb.c · f811a383
      Peter Chen authored
      testusb.c at http://www.linux-usb.org/usbtest/ is out of date,
      using the one at the kernel source folder.
      
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarPeter Chen <peter.chen@freescale.com>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      f811a383
    • Peter Chen's avatar
      Doc: ABI: testing: configfs-usb-gadget-sourcesink · 4bc58eb1
      Peter Chen authored
      Fix the name of attribute
      
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarPeter Chen <peter.chen@freescale.com>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      4bc58eb1
    • Peter Chen's avatar
      Doc: ABI: testing: configfs-usb-gadget-loopback · 8cd50626
      Peter Chen authored
      Fix the name of attribute
      
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarPeter Chen <peter.chen@freescale.com>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      8cd50626
    • Krzysztof Opasiak's avatar
      usb: gadget: mass_storage: Use static array for luns · dd02ea5a
      Krzysztof Opasiak authored
      This patch replace dynamicly allocated luns array with static one.
      This simplifies the code of mass storage function and modules.
      Signed-off-by: default avatarKrzysztof Opasiak <k.opasiak@samsung.com>
      Acked-by: default avatarMichal Nazarewicz <mina86@mina86.com>
      dd02ea5a
    • Krzysztof Opasiak's avatar
      usb: gadget: mass_storage: Fix freeing luns sysfs implementation · 5542f58c
      Krzysztof Opasiak authored
      Use device_is_registered() instad of sysfs flag to determine if
      we should free sysfs representation of particular LUN.
      
      sysfs flag in fsg common determines if luns attributes should be
      exposed using sysfs. This flag is used when creating and freeing
      luns. Unfortunately there is no guarantee that this flag will not
      be changed between creation and removal of particular LUN. Especially
      because of lun.0 which is created during allocating instance of
      function. This may lead to resource leak or NULL pointer dereference:
      
      [   62.539925] Unable to handle kernel NULL pointer dereference at virtual address 00000044
      [   62.548014] pgd = ec994000
      [   62.550679] [00000044] *pgd=6d7be831, *pte=00000000, *ppte=00000000
      [   62.556933] Internal error: Oops: 17 [#1] PREEMPT SMP ARM
      [   62.562310] Modules linked in: g_mass_storage(+)
      [   62.566916] CPU: 2 PID: 613 Comm: insmod Not tainted 4.2.0-rc4-00077-ge29ee91-dirty #125
      [   62.574984] Hardware name: SAMSUNG EXYNOS (Flattened Device Tree)
      [   62.581061] task: eca56e80 ti: eca76000 task.ti: eca76000
      [   62.586450] PC is at kernfs_find_ns+0x8/0xe8
      [   62.590698] LR is at kernfs_find_and_get_ns+0x30/0x48
      [   62.595732] pc : [<c01277c0>]    lr : [<c0127b88>]    psr: 40010053
      [   62.595732] sp : eca77c40  ip : eca77c38  fp : 000008c1
      [   62.607187] r10: 00000001  r9 : c0082f38  r8 : ed41ce40
      [   62.612395] r7 : c05c1484  r6 : 00000000  r5 : 00000000  r4 : c0814488
      [   62.618904] r3 : 00000000  r2 : 00000000  r1 : c05c1484  r0 : 00000000
      [   62.625417] Flags: nZcv  IRQs on  FIQs off  Mode SVC_32  ISA ARM  Segment user
      [   62.632620] Control: 10c5387d  Table: 6c99404a  DAC: 00000015
      [   62.638348] Process insmod (pid: 613, stack limit = 0xeca76210)
      [   62.644251] Stack: (0xeca77c40 to 0xeca78000)
      [   62.648594] 7c40: c0814488 00000000 00000000 c05c1484 ed41ce40 c0127b88 00000000 c0824888
      [   62.656753] 7c60: ed41d038 ed41d030 ed41d000 c012af4c 00000000 c0824858 ed41d038 c02e3314
      [   62.664912] 7c80: ed41d030 00000000 ed41ce04 c02d9e8c c070eda8 eca77cb4 000008c1 c058317c
      [   62.673071] 7ca0: 000008c1 ed41d030 ed41ce00 ed41ce04 ed41d000 c02da044 ed41cf48 c0375870
      [   62.681230] 7cc0: ed9d3c04 ed9d3c00 ed52df80 bf000940 fffffff0 c03758f4 c03758c0 00000000
      [   62.689389] 7ce0: bf000564 c03614e0 ed9d3c04 bf000194 c0082f38 00000001 00000000 c0000100
      [   62.697548] 7d00: c0814488 c0814488 c086b1dc c05893a8 00000000 ed7e8320 00000000 c0128b88
      [   62.705707] 7d20: ed8a6b40 00000000 00000000 ed410500 ed8a6b40 c0594818 ed7e8320 00000000
      [   62.713867] 7d40: 00000000 c0129f20 00000000 c082c444 ed8a6b40 c012a684 00001000 00000000
      [   62.722026] 7d60: c0594818 c082c444 00000000 00000000 ed52df80 ed52df80 00000000 00000000
      [   62.730185] 7d80: 00000000 00000000 00000001 00000002 ed8e9b70 ed52df80 bf0006d0 00000000
      [   62.738345] 7da0: ed8e9b70 ed410500 ed618340 c036129c ed8c1c00 bf0006d0 c080b158 ed8c1c00
      [   62.746504] 7dc0: bf0006d0 c080b158 ed8c1c08 ed410500 c0082f38 ed618340 000008c1 c03640ac
      [   62.754663] 7de0: 00000000 bf0006d0 c082c8dc c080b158 c080b158 c03642d4 00000000 bf003000
      [   62.762822] 7e00: 00000000 c0009784 00000000 00000001 00000000 c05849b0 00000002 ee7ab780
      [   62.770981] 7e20: 00000002 ed4105c0 0000c53e 000000d0 c0808600 eca77e5c 00000004 00000000
      [   62.779140] 7e40: bf000000 c0095680 c08075a0 ee001f00 ed4105c0 c00cadc0 ed52df80 bf000780
      [   62.787300] 7e60: ed4105c0 bf000780 00000001 bf0007c8 c0082f38 ed618340 000008c1 c0083e24
      [   62.795459] 7e80: 00000001 bf000780 00000001 eca77f58 00000001 bf000780 00000001 c00857f4
      [   62.803618] 7ea0: bf00078c 00007fff 00000000 c00835b4 eca77f58 00000000 c0082fac eca77f58
      [   62.811777] 7ec0: f05038c0 0003b008 bf000904 00000000 00000000 bf00078c 6e72656b 00006c65
      [   62.819936] 7ee0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
      [   62.828095] 7f00: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
      [   62.836255] 7f20: 00000000 00000000 00000000 00000000 00000000 00000000 00000003 0003b008
      [   62.844414] 7f40: 0000017b c000f5c8 eca76000 00000000 0003b008 c0085df8 f04ef000 0001b8a9
      [   62.852573] 7f60: f0503258 f05030c2 f0509fe8 00000968 00000dc8 00000000 00000000 00000000
      [   62.860732] 7f80: 00000029 0000002a 00000011 00000000 0000000a 00000000 33f6eb00 0003b008
      [   62.868892] 7fa0: bef01cac c000f400 33f6eb00 0003b008 00000003 0003b008 00000000 00000003
      [   62.877051] 7fc0: 33f6eb00 0003b008 bef01cac 0000017b 00000000 0003b008 0000000b 0003b008
      [   62.885210] 7fe0: bef01ae0 bef01ad0 0001dc23 b6e8c162 800b0070 00000003 c0c0c0c0 c0c0c0c0
      [   62.893380] [<c01277c0>] (kernfs_find_ns) from [<c0824888>] (pm_qos_latency_tolerance_attr_group+0x0/0x10)
      [   62.903005] Code: e28dd00c e8bd80f0 e92d41f0 e2923000 (e1d0e4b4)
      [   62.909115] ---[ end trace 02fb4373ef095c7b ]---
      Acked-by: default avatarMichal Nazarewicz <mina86@mina86.com>
      Signed-off-by: default avatarKrzysztof Opasiak <k.opasiak@samsung.com>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      5542f58c
    • Robert Baldyga's avatar
      usb: gadget: atmel_usba_udc: add missing ret value check · 7674cba5
      Robert Baldyga authored
      Add missing return value check. In case of error print debug message
      and return error code.
      Signed-off-by: default avatarRobert Baldyga <r.baldyga@samsung.com>
      Acked-by: default avatarNicolas Ferre <nicolas.ferre@atmel.com>
      Acked-by: default avatarMichal Nazarewicz <mina86@mina86.com>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      7674cba5
    • Robert Baldyga's avatar
      staging: emxx_udc: add missing usb_ep_set_maxpacket_limit() · cb009d6e
      Robert Baldyga authored
      Since maxpacket_limit was introduced all UDC drivers should use
      usb_ep_set_maxpacket_limit() function instead of setting maxpacket value
      manually. ep.maxpacket_limit contains actual maximum maxpacket value
      supported by hardware which is needed by epautoconf.
      Signed-off-by: default avatarRobert Baldyga <r.baldyga@samsung.com>
      Acked-by: default avatarMichal Nazarewicz <mina86@mina86.com>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      cb009d6e