1. 26 4月, 2022 4 次提交
  2. 16 3月, 2022 2 次提交
    • A
      usb: gadget: Fix use-after-free bug by not setting udc->dev.driver · 16b1941e
      Alan Stern 提交于
      The syzbot fuzzer found a use-after-free bug:
      
      BUG: KASAN: use-after-free in dev_uevent+0x712/0x780 drivers/base/core.c:2320
      Read of size 8 at addr ffff88802b934098 by task udevd/3689
      
      CPU: 2 PID: 3689 Comm: udevd Not tainted 5.17.0-rc4-syzkaller-00229-g4f12b742 #0
      Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.14.0-2 04/01/2014
      Call Trace:
       <TASK>
       __dump_stack lib/dump_stack.c:88 [inline]
       dump_stack_lvl+0xcd/0x134 lib/dump_stack.c:106
       print_address_description.constprop.0.cold+0x8d/0x303 mm/kasan/report.c:255
       __kasan_report mm/kasan/report.c:442 [inline]
       kasan_report.cold+0x83/0xdf mm/kasan/report.c:459
       dev_uevent+0x712/0x780 drivers/base/core.c:2320
       uevent_show+0x1b8/0x380 drivers/base/core.c:2391
       dev_attr_show+0x4b/0x90 drivers/base/core.c:2094
      
      Although the bug manifested in the driver core, the real cause was a
      race with the gadget core.  dev_uevent() does:
      
      	if (dev->driver)
      		add_uevent_var(env, "DRIVER=%s", dev->driver->name);
      
      and between the test and the dereference of dev->driver, the gadget
      core sets dev->driver to NULL.
      
      The race wouldn't occur if the gadget core registered its devices on
      a real bus, using the standard synchronization techniques of the
      driver core.  However, it's not necessary to make such a large change
      in order to fix this bug; all we need to do is make sure that
      udc->dev.driver is always NULL.
      
      In fact, there is no reason for udc->dev.driver ever to be set to
      anything, let alone to the value it currently gets: the address of the
      gadget's driver.  After all, a gadget driver only knows how to manage
      a gadget, not how to manage a UDC.
      
      This patch simply removes the statements in the gadget core that touch
      udc->dev.driver.
      
      Fixes: 2ccea03a ("usb: gadget: introduce UDC Class")
      CC: <stable@vger.kernel.org>
      Reported-and-tested-by: syzbot+348b571beb5eeb70a582@syzkaller.appspotmail.com
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Link: https://lore.kernel.org/r/YiQgukfFFbBnwJ/9@rowland.harvard.eduSigned-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      16b1941e
    • J
      usb: gadget: udc: core: remove usage of list iterator past the loop body · 2eb27f79
      Jakob Koschel 提交于
      To move the list iterator variable into the list_for_each_entry_*()
      macro in the future it should be avoided to use the list iterator
      variable after the loop body.
      
      To *never* use the list iterator variable after the loop it was
      concluded to use a separate iterator variable [1].
      
      Link: https://lore.kernel.org/all/YhdfEIwI4EdtHdym@kroah.com/Signed-off-by: NJakob Koschel <jakobkoschel@gmail.com>
      Link: https://lore.kernel.org/r/20220308171818.384491-25-jakobkoschel@gmail.comSigned-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      2eb27f79
  3. 30 10月, 2021 1 次提交
  4. 05 10月, 2021 2 次提交
  5. 12 7月, 2021 1 次提交
  6. 04 6月, 2021 1 次提交
    • A
      USB: UDC core: Add udc_async_callbacks gadget op · 7dc0c55e
      Alan Stern 提交于
      The Gadget API has a theoretical race when a gadget driver is unbound.
      Although the pull-up is turned off before the driver's ->unbind
      callback runs, if the USB cable were to be unplugged at just the wrong
      moment there would be nothing to prevent the UDC driver from invoking
      the ->disconnect callback after the unbind has finished.  In theory,
      other asynchronous callbacks could also happen during the time before
      the UDC driver's udc_stop routine is called, and the gadget driver
      would not be prepared to handle any of them.
      
      We need a way to tell UDC drivers to stop issuing asynchronous (that is,
      ->suspend, ->resume, ->disconnect, ->reset, or ->setup) callbacks at
      some point after the pull-up has been turned off and before the
      ->unbind callback runs.  This patch adds a new ->udc_async_callbacks
      callback to the usb_gadget_ops structure for precisely this purpose,
      and it adds the corresponding support to the UDC core.
      
      Later patches in this series add support for udc_async_callbacks to
      several UDC drivers.
      Acked-by: NFelipe Balbi <balbi@kernel.org>
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Link: https://lore.kernel.org/r/20210520202144.GC1216852@rowland.harvard.eduSigned-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      7dc0c55e
  7. 19 1月, 2021 1 次提交
  8. 16 1月, 2021 1 次提交
  9. 12 1月, 2021 1 次提交
  10. 04 1月, 2021 1 次提交
    • P
      usb: gadget: core: change the comment for usb_gadget_connect · 7043e311
      Peter Chen 提交于
      The pullup does not need to be enabled at below situations:
      - For platforms which the hardware pullup starts after setting
      register even they do not see the VBUS. If the pullup is always
      enabled for these platforms, it will consume more power and
      break the USB IF compliance tests [1].
      - For platforms which need to do BC 1.2 charger detection after
      seeing the VBUS. Pullup D+ will break the charger detection
      flow.
      - For platforms which the system suspend is allowed when the
      connection with host is there but the bus is not at suspend.
      For these platforms, it is better to disable pullup when
      entering the system suspend otherwise the host may confuse
      the device behavior after controller is in low power mode.
      Disable pullup is considered as a disconnection event from
      host side.
      
      [1] USB-IF Full and Low Speed Compliance Test Procedure
      F Back-voltage Testing
      Section 7.2.1 of the USB specification requires that no device
      shall supply (source) current on VBUS at its upstream facing
      port at any time. From VBUS on its upstream facing port,
      a device may only draw (sink) current. They may not provide power
      to the pull-up resistor on D+/D- unless VBUS is present (see
      Section 7.1.5).
      Signed-off-by: NPeter Chen <peter.chen@nxp.com>
      Link: https://lore.kernel.org/r/20201230051114.21370-1-peter.chen@nxp.comSigned-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      7043e311
  11. 28 10月, 2020 1 次提交
  12. 02 10月, 2020 3 次提交
  13. 24 7月, 2020 1 次提交
    • M
      usb: gadget: udc: Flush pending work also in error path · 37d9453b
      Marek Szyprowski 提交于
      When binding an UDC driver to the pending gadget fails in
      check_pending_gadget_drivers(), the usb_add_gadget_udc_release() function
      ends without waiting for the usb_gadget_state_work to finish, what in
      turn might cause the whole struct usb_gadget being freed by the caller
      before the usb_gadget_state_work being executed.
      
      This can be observed on some boards with USB Mass Storage gadget
      compiled-in and kernel booted without the needed module parameters:
      
      dwc2 12480000.hsotg: dwc2_check_params: Invalid parameter besl=1
      dwc2 12480000.hsotg: dwc2_check_params: Invalid parameter g_np_tx_fifo_size=1024
      dwc2 12480000.hsotg: EPs: 16, dedicated fifos, 7808 entries in SPRAM
      Mass Storage Function, version: 2009/09/11
      LUN: removable file: (no medium)
      no file given for LUN0
      g_mass_storage 12480000.hsotg: failed to start g_mass_storage: -22
      dwc2: probe of 12480000.hsotg failed with error -22
      8<--- cut here ---
      Unable to handle kernel NULL pointer dereference at virtual address 00000004
      pgd = (ptrval)
      [00000004] *pgd=00000000
      Internal error: Oops: 5 [#1] PREEMPT SMP ARM
      Modules linked in:
      CPU: 1 PID: 88 Comm: kworker/1:2 Not tainted 5.8.0-rc5-next-20200715-00062-gc5bb489ae825-dirty #8792
      Hardware name: Samsung Exynos (Flattened Device Tree)
      Workqueue:  0x0 (rcu_gp)
      PC is at process_one_work+0x44/0x7dc
      ...
      Process kworker/1:2 (pid: 88, stack limit = 0x(ptrval))
      Stack: (0xed9f1f00 to 0xed9f2000)
      ...
      [<c0148590>] (process_one_work) from [<c0148d6c>] (worker_thread+0x44/0x51c)
      [<c0148d6c>] (worker_thread) from [<c01500c0>] (kthread+0x158/0x1a0)
      [<c01500c0>] (kthread) from [<c0100114>] (ret_from_fork+0x14/0x20)
      Exception stack(0xed9f1fb0 to 0xed9f1ff8)
      ...
      ---[ end trace 5033c1326a62e5f3 ]---
      note: kworker/1:2[88] exited with preempt_count 1
      
      Fix this by flushing pending work in error path.
      Reviewed-by: NPeter Chen <peter.chen@nxp.com>
      Signed-off-by: NMarek Szyprowski <m.szyprowski@samsung.com>
      Signed-off-by: NFelipe Balbi <balbi@kernel.org>
      37d9453b
  14. 09 7月, 2020 1 次提交
    • L
      usb: gadget: udc: core: Fix a bunch of kerneldoc misdemeanours · e21cd08f
      Lee Jones 提交于
      Firstly, file headers should not be in kerneldoc format.  Function
      args should be in the format '@.*: '.  We also take the time to
      add some descriptions for various argument which have been
      previously left out.  Finally we remove descriptions for absent
      arguments.
      
      Fixes the following W=1 kernel build warning(s):
      
       drivers/usb/gadget/udc/core.c:25: warning: Incorrect use of kernel-doc format:  * struct usb_udc - describes one usb device controller
       drivers/usb/gadget/udc/core.c:36: warning: cannot understand function prototype: 'struct usb_udc '
       drivers/usb/gadget/udc/core.c:901: warning: Function parameter or member 'ep' not described in 'usb_gadget_giveback_request'
       drivers/usb/gadget/udc/core.c:901: warning: Function parameter or member 'req' not described in 'usb_gadget_giveback_request'
       drivers/usb/gadget/udc/core.c:1098: warning: Function parameter or member 'udc' not described in 'usb_gadget_udc_stop'
       drivers/usb/gadget/udc/core.c:1098: warning: Excess function parameter 'gadget' description in 'usb_gadget_udc_stop'
       drivers/usb/gadget/udc/core.c:1098: warning: Excess function parameter 'driver' description in 'usb_gadget_udc_stop'
      
      Cc: Felipe Balbi <balbi@kernel.org>
      Signed-off-by: NLee Jones <lee.jones@linaro.org>
      Link: https://lore.kernel.org/r/20200703174148.2749969-9-lee.jones@linaro.orgSigned-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      e21cd08f
  15. 01 7月, 2020 1 次提交
  16. 25 5月, 2020 1 次提交
    • P
      usb: gadget: core: sync interrupt before unbind the udc · 3c73bc52
      Peter Chen 提交于
      The threaded interrupt handler may still be called after the
      usb_gadget_disconnect is called, it causes the structures used
      at interrupt handler was freed before it uses, eg the
      usb_request. This issue usually occurs we remove the udc function
      during the transfer. Below is the example when doing stress
      test for android switch function, the EP0's request is freed
      by .unbind (configfs_composite_unbind -> composite_dev_cleanup),
      but the threaded handler accesses this request during handling
      setup packet request.
      
      In fact, there is no protection between unbind the udc
      and udc interrupt handling, so we have to avoid the interrupt
      handler is occurred or scheduled during the .unbind flow.
      
      init: Sending signal 9 to service 'adbd' (pid 18077) process group...
      android_work: did not send uevent (0 0 000000007bec2039)
      libprocessgroup: Successfully killed process cgroup uid 0 pid 18077 in 6ms
      init: Service 'adbd' (pid 18077) received signal 9
      init: Sending signal 9 to service 'adbd' (pid 18077) process group...
      libprocessgroup: Successfully killed process cgroup uid 0 pid 18077 in 0ms
      init: processing action (init.svc.adbd=stopped) from (/init.usb.configfs.rc:14)
      init: Received control message 'start' for 'adbd' from pid: 399 (/vendor/bin/hw/android.hardware.usb@1.
      
      init: starting service 'adbd'...
      read descriptors
      read strings
      Unable to handle kernel read from unreadable memory at virtual address 000000000000002a
      android_work: sent uevent USB_STATE=CONNECTED
      Mem abort info:
        ESR = 0x96000004
        EC = 0x25: DABT (current EL), IL = 32 bits
        SET = 0, FnV = 0
        EA = 0, S1PTW = 0
      Data abort info:
        ISV = 0, ISS = 0x00000004
        CM = 0, WnR = 0
      user pgtable: 4k pages, 48-bit VAs, pgdp=00000000e97f1000
      using random self ethernet address
      [000000000000002a] pgd=0000000000000000
      Internal error: Oops: 96000004 [#1] PREEMPT SMP
      Modules linked in:
      CPU: 0 PID: 232 Comm: irq/68-5b110000 Not tainted 5.4.24-06075-g94a6b52b5815 #92
      Hardware name: Freescale i.MX8QXP MEK (DT)
      pstate: 00400085 (nzcv daIf +PAN -UAO)
      using random host ethernet address
      pc : composite_setup+0x5c/0x1730
      lr : android_setup+0xc0/0x148
      sp : ffff80001349bba0
      x29: ffff80001349bba0 x28: ffff00083a50da00
      x27: ffff8000124e6000 x26: ffff800010177950
      x25: 0000000000000040 x24: ffff000834e18010
      x23: 0000000000000000 x22: 0000000000000000
      x21: ffff00083a50da00 x20: ffff00082e75ec40
      x19: 0000000000000000 x18: 0000000000000000
      x17: 0000000000000000 x16: 0000000000000000
      x15: 0000000000000000 x14: 0000000000000000
      x13: 0000000000000000 x12: 0000000000000001
      x11: ffff80001180fb58 x10: 0000000000000040
      x9 : ffff8000120fc980 x8 : 0000000000000000
      x7 : ffff00083f98df50 x6 : 0000000000000100
      x5 : 00000307e8978431 x4 : ffff800011386788
      x3 : 0000000000000000 x2 : ffff800012342000
      x1 : 0000000000000000 x0 : ffff800010c6d3a0
      Call trace:
       composite_setup+0x5c/0x1730
       android_setup+0xc0/0x148
       cdns3_ep0_delegate_req+0x64/0x90
       cdns3_check_ep0_interrupt_proceed+0x384/0x738
       cdns3_device_thread_irq_handler+0x124/0x6e0
       cdns3_thread_irq+0x94/0xa0
       irq_thread_fn+0x30/0xa0
       irq_thread+0x150/0x248
       kthread+0xfc/0x128
       ret_from_fork+0x10/0x18
      Code: 910e8000 f9400693 12001ed7 79400f79 (3940aa61)
      ---[ end trace c685db37f8773fba ]---
      Kernel panic - not syncing: Fatal exception
      SMP: stopping secondary CPUs
      Kernel Offset: disabled
      CPU features: 0x0002,20002008
      Memory Limit: none
      Rebooting in 5 seconds..
      Reviewed-by: NJun Li <jun.li@nxp.com>
      Signed-off-by: NPeter Chen <peter.chen@nxp.com>
      Signed-off-by: NFelipe Balbi <balbi@kernel.org>
      3c73bc52
  17. 15 1月, 2020 1 次提交
  18. 29 10月, 2019 1 次提交
  19. 28 8月, 2019 1 次提交
    • R
      usb: gadget: udc: core: Fix segfault if udc_bind_to_driver() for pending driver fails · 163be6ff
      Roger Quadros 提交于
      If a gadget driver is in the pending drivers list, a UDC
      becomes available and udc_bind_to_driver() fails, then it
      gets deleted from the pending list.
      i.e. list_del(&driver->pending) in check_pending_gadget_drivers().
      
      Then if that gadget driver is unregistered,
      usb_gadget_unregister_driver() does a list_del(&driver->pending)
      again thus causing a page fault as that list entry has been poisoned
      by the previous list_del().
      
      Fix this by using list_del_init() instead of list_del() in
      check_pending_gadget_drivers().
      
      Test case:
      
      - Make sure no UDC is available
      - modprobe g_mass_storage file=wrongfile
      - Load UDC driver so it becomes available
      	lun0: unable to open backing file: wrongfile
      - modprobe -r g_mass_storage
      
      [   60.900431] Unable to handle kernel paging request at virtual address dead000000000108
      [   60.908346] Mem abort info:
      [   60.911145]   ESR = 0x96000044
      [   60.914227]   Exception class = DABT (current EL), IL = 32 bits
      [   60.920162]   SET = 0, FnV = 0
      [   60.923217]   EA = 0, S1PTW = 0
      [   60.926354] Data abort info:
      [   60.929228]   ISV = 0, ISS = 0x00000044
      [   60.933058]   CM = 0, WnR = 1
      [   60.936011] [dead000000000108] address between user and kernel address ranges
      [   60.943136] Internal error: Oops: 96000044 [#1] PREEMPT SMP
      [   60.948691] Modules linked in: g_mass_storage(-) usb_f_mass_storage libcomposite xhci_plat_hcd xhci_hcd usbcore ti_am335x_adc kfifo_buf omap_rng cdns3 rng_core udc_core crc32_ce xfrm_user crct10dif_ce snd_so6
      [   60.993995] Process modprobe (pid: 834, stack limit = 0x00000000c2aebc69)
      [   61.000765] CPU: 0 PID: 834 Comm: modprobe Not tainted 4.19.59-01963-g065f42a60499 #92
      [   61.008658] Hardware name: Texas Instruments SoC (DT)
      [   61.014472] pstate: 60000005 (nZCv daif -PAN -UAO)
      [   61.019253] pc : usb_gadget_unregister_driver+0x7c/0x108 [udc_core]
      [   61.025503] lr : usb_gadget_unregister_driver+0x30/0x108 [udc_core]
      [   61.031750] sp : ffff00001338fda0
      [   61.035049] x29: ffff00001338fda0 x28: ffff800846d40000
      [   61.040346] x27: 0000000000000000 x26: 0000000000000000
      [   61.045642] x25: 0000000056000000 x24: 0000000000000800
      [   61.050938] x23: ffff000008d7b0d0 x22: ffff0000088b07c8
      [   61.056234] x21: ffff000001100000 x20: ffff000002020260
      [   61.061530] x19: ffff0000010ffd28 x18: 0000000000000000
      [   61.066825] x17: 0000000000000000 x16: 0000000000000000
      [   61.072121] x15: 0000000000000000 x14: 0000000000000000
      [   61.077417] x13: ffff000000000000 x12: ffffffffffffffff
      [   61.082712] x11: 0000000000000030 x10: 7f7f7f7f7f7f7f7f
      [   61.088008] x9 : fefefefefefefeff x8 : 0000000000000000
      [   61.093304] x7 : ffffffffffffffff x6 : 000000000000ffff
      [   61.098599] x5 : 8080000000000000 x4 : 0000000000000000
      [   61.103895] x3 : ffff000001100020 x2 : ffff800846d40000
      [   61.109190] x1 : dead000000000100 x0 : dead000000000200
      [   61.114486] Call trace:
      [   61.116922]  usb_gadget_unregister_driver+0x7c/0x108 [udc_core]
      [   61.122828]  usb_composite_unregister+0x10/0x18 [libcomposite]
      [   61.128643]  msg_cleanup+0x18/0xfce0 [g_mass_storage]
      [   61.133682]  __arm64_sys_delete_module+0x17c/0x1f0
      [   61.138458]  el0_svc_common+0x90/0x158
      [   61.142192]  el0_svc_handler+0x2c/0x80
      [   61.145926]  el0_svc+0x8/0xc
      [   61.148794] Code: eb03003f d10be033 54ffff21 a94d0281 (f9000420)
      [   61.154869] ---[ end trace afb22e9b637bd9a7 ]---
      Segmentation fault
      Acked-by: NAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NRoger Quadros <rogerq@ti.com>
      Signed-off-by: NFelipe Balbi <felipe.balbi@linux.intel.com>
      163be6ff
  20. 06 2月, 2019 1 次提交
    • A
      USB: gadget: Improve kerneldoc for usb_ep_dequeue() · 1e19a520
      Alan Stern 提交于
      Commit bf594c10 ("USB: gadget: Document that certain ep operations
      can be called in interrupt context") documented that usb_ep_dequeue()
      may be called in a non-process context.  It follows that the routine
      must not sleep or wait for events.
      
      However, the routine's existing kerneldoc seems to imply that it will
      wait until the request being cancelled has fully completed.  This is
      not so, and thus the comment needs to be improved.  Misunderstanding
      this point may very well have been responsible for a bug recently
      uncovered in the f_fs function.
      
      The updated comment explicitly says that the routine may return before
      the request's completion handler is called.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      CC: John Stultz <john.stultz@linaro.org>
      Signed-off-by: NFelipe Balbi <felipe.balbi@linux.intel.com>
      1e19a520
  21. 02 10月, 2018 1 次提交
    • A
      USB: gadget core: Issue ->disconnect() callback from usb_gadget_disconnect() · 0a55187a
      Alan Stern 提交于
      The gadget documentation doesn't state clearly whether a gadget
      driver's ->disconnect() callback should be invoked when the D+ pullup
      is turned off.  Some UDC drivers do this and some don't.  This patch
      settles the issue by making the core function usb_gadget_disconnect()
      issue the callback, so that UDC drivers don't need to worry about it.
      
      A description of the new behavior is added to the function's
      kerneldoc.  Also, the patch removes a few superseded callbacks from
      other core routines.
      
      Future patches will remove the ->disconnect() calls from the UDC
      drivers that make them, as they are now unnecessary.  Until all those
      patches are merged gadget drivers may receive extra ->disconnect()
      callbacks, but this should be harmless.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NFelipe Balbi <felipe.balbi@linux.intel.com>
      0a55187a
  22. 26 7月, 2018 1 次提交
  23. 23 4月, 2018 1 次提交
  24. 26 3月, 2018 1 次提交
  25. 13 3月, 2018 1 次提交
  26. 12 2月, 2018 1 次提交
  27. 24 1月, 2018 1 次提交
  28. 22 1月, 2018 1 次提交
  29. 09 1月, 2018 1 次提交
  30. 28 11月, 2017 1 次提交
  31. 07 11月, 2017 1 次提交
    • G
      USB: gadget: udc: Remove redundant license text · 229e3682
      Greg Kroah-Hartman 提交于
      Now that the SPDX tag is in all USB files, that identifies the license
      in a specific and legally-defined manner.  So the extra GPL text wording
      can be removed as it is no longer needed at all.
      
      This is done on a quest to remove the 700+ different ways that files in
      the kernel describe the GPL license text.  And there's unneeded stuff
      like the address (sometimes incorrect) for the FSF which is never
      needed.
      
      No copyright headers or other non-license-description text was removed.
      
      Cc: Kevin Cernekee <cernekee@gmail.com>
      Cc: Florian Fainelli <f.fainelli@gmail.com>
      Cc: Vladimir Zapolskiy <vz@mleia.com>
      Cc: Sylvain Lemieux <slemieux.tyco@gmail.com>
      Cc: Daniel Mack <daniel@zonque.org>
      Cc: Haojian Zhuang <haojian.zhuang@gmail.com>
      Cc: Michal Simek <michal.simek@xilinx.com>
      Cc: "Sören Brinkmann" <soren.brinkmann@xilinx.com>
      Cc: Raviteja Garimella <raviteja.garimella@broadcom.com>
      Cc: Romain Perier <romain.perier@collabora.com>
      Cc: Johan Hovold <johan@kernel.org>
      Cc: Al Cooper <alcooperx@gmail.com>
      Cc: Srinath Mannam <srinath.mannam@broadcom.com>
      Cc: Roger Quadros <rogerq@ti.com>
      Cc: Krzysztof Opasiak <k.opasiak@samsung.com>
      Cc: Stefan Agner <stefan@agner.ch>
      Cc: Alan Stern <stern@rowland.harvard.edu>
      Cc: "Felix Hädicke" <felixhaedicke@web.de>
      Cc: Peter Chen <peter.chen@nxp.com>
      Cc: Allen Pais <allen.lkml@gmail.com>
      Cc: Yuyang Du <yuyang.du@intel.com>
      Acked-by: NFelipe Balbi <felipe.balbi@linux.intel.com>
      Acked-by: NNicolas Ferre <nicolas.ferre@microchip.com>
      Acked-by: NRobert Jarzmik <robert.jarzmik@free.fr>
      Acked-by: NLi Yang <leoyang.li@nxp.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      229e3682
  32. 04 11月, 2017 1 次提交
  33. 20 10月, 2017 1 次提交