1. 14 9月, 2012 1 次提交
    • B
      net: qmi_wwan: call subdriver with control intf only · 8624dd2a
      Bjørn Mork 提交于
      This fixes a hang on suspend due to calling wdm_suspend on
      the unregistered data interface. The hang should have been
      a NULL pointer reference had it not been for a logic error
      in the cdc_wdm code.
      
        commit 230718bd net: qmi_wwan: bind to both control and data interface
      
      changed qmi_wwan to use cdc_wdm as a subdriver for devices with
      a two-interface QMI/wwan function.  The commit failed to update
      qmi_wwan_suspend and qmi_wwan_resume, which were written to handle
      either a single combined interface function, or no subdriver at all.
      
      The result was that we called into the subdriver both when the
      control interface was suspended and when the data interface was
      suspended.  Calling the subdriver suspend function with an
      unregistered interface is not supported and will make the
      subdriver bug out.
      Signed-off-by: NBjørn Mork <bjorn@mork.no>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      8624dd2a
  2. 11 9月, 2012 2 次提交
  3. 08 9月, 2012 3 次提交
  4. 06 9月, 2012 1 次提交
  5. 05 9月, 2012 1 次提交
  6. 04 9月, 2012 4 次提交
  7. 02 9月, 2012 1 次提交
  8. 01 9月, 2012 2 次提交
  9. 20 8月, 2012 1 次提交
  10. 15 8月, 2012 4 次提交
    • B
      aefe5c00
    • B
      net: qmi_wwan: compress device_id list using macros · 5ea42963
      Bjørn Mork 提交于
      Take advantage of the matching macros to make the device id
      list easier to read and maintain.
      Signed-off-by: NBjørn Mork <bjorn@mork.no>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      5ea42963
    • B
      net: qmi_wwan: add Sierra Wireless devices · 9b469a60
      Bjørn Mork 提交于
      Add 6 new devices and one modified device, based on
      information from laptop vendor Windows drivers.
      
      Sony provides a driver with two new devices using
      a Gobi 2k+ layout (1199:68a5 and 1199:68a9).  The
      Sony driver also adds a non-standard QMI/net
      interface to the already supported 1199:9011
      Gobi device. We do not know whether this is an
      alternate interface number or an additional
      interface which might be present, but that doesn't
      really matter.
      
      Lenovo provides a driver supporting 4 new devices:
       - MC7770 (1199:901b) with standard Gobi 2k+ layout
       - MC7700 (0f3d:68a2) with layout similar to MC7710
       - MC7750 (114f:68a2) with layout similar to MC7710
       - EM7700 (1199:901c) with layout similar to MC7710
      
      Note regaring the three devices similar to MC7710:
      
      The Windows drivers only support interface #8 on these
      devices.  The MC7710 can support QMI/net functions on
      interface #19 and #20 as well, and this driver is
      verified to work on interface #19 (a firmware bug is
      suspected to prevent #20 from working).
      
      We do not enable these additional interfaces until they
      either show up in a Windows driver or are verified to
      work in some other way.  Therefore limiting the new
      devices to interface #8 for now.
      Signed-off-by: NBjørn Mork <bjorn@mork.no>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      9b469a60
    • B
      net: qmi_wwan: use fixed interface number matching · 03304bcb
      Bjørn Mork 提交于
      This driver support many composite USB devices where the
      interface class/subclass/protocol provides no information
      about the interface function. Interfaces with different
      functions may all use ff/ff/ff, like this example of
      a device with three serial interfaces and three QMI/wwan
      interfaces:
      
      T:  Bus=02 Lev=01 Prnt=01 Port=03 Cnt=01 Dev#=116 Spd=480  MxCh= 0
      D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
      P:  Vendor=1199 ProdID=68a2 Rev= 0.06
      S:  Manufacturer=Sierra Wireless, Incorporated
      S:  Product=MC7710
      S:  SerialNumber=3581780xxxxxx
      C:* #Ifs= 6 Cfg#= 1 Atr=e0 MxPwr=  0mA
      I:* If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=qcserial
      E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
      E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms
      I:* If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=qcserial
      E:  Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
      E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms
      I:* If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=qcserial
      E:  Ad=83(I) Atr=03(Int.) MxPS=  64 Ivl=2ms
      E:  Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
      E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms
      I:* If#= 8 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=qmi_wwan
      E:  Ad=85(I) Atr=03(Int.) MxPS=  64 Ivl=2ms
      E:  Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
      E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms
      I:* If#=19 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=qmi_wwan
      E:  Ad=87(I) Atr=03(Int.) MxPS=  64 Ivl=2ms
      E:  Ad=88(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
      E:  Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms
      I:* If#=20 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
      E:  Ad=89(I) Atr=03(Int.) MxPS=  64 Ivl=2ms
      E:  Ad=8a(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
      E:  Ad=06(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms
      
      Instead of class/subclass/protocol the vendor use fixed
      interface numbers for each function, and the Windows
      drivers use these numbers to match driver and function.
      
      The driver has had its own interface number whitelisting
      code to simulate this functionality.  Replace this with
      generic interface number matching now that the USB subsystem
      support is there. This
       - removes the need for a driver_info structure per
         interface number,
       - avoids running the probe function for unsupported
         interfaces, and
       - simplifies the code.
      Signed-off-by: NBjørn Mork <bjorn@mork.no>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      03304bcb
  11. 09 8月, 2012 1 次提交
    • J
      cdc-phonet: Don't leak in usbpn_open · 47dffc75
      Jesper Juhl 提交于
      We allocate memory for 'req' with usb_alloc_urb() and then test
      'if (!req || rx_submit(pnd, req, GFP_KERNEL | __GFP_COLD))'.
      If we enter that branch due to '!req' then there is no problem. But if
      we enter the branch due to 'req' being != 0 and the 'rx_submit()' call
      being false, then we'll leak the memory we allocated.
      Deal with the leak by always calling 'usb_free_urb(req)' when entering
      the branch. If 'req' happens to be 0 then the call is harmless, if it
      is not 0 then we free the memory we allocated but don't need.
      Signed-off-by: NJesper Juhl <jj@chaosbits.net>
      Acked-by: NRémi Denis-Courmont <remi@remlab.net>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      47dffc75
  12. 04 8月, 2012 1 次提交
  13. 01 8月, 2012 1 次提交
    • M
      netvm: propagate page->pfmemalloc from skb_alloc_page to skb · 0614002b
      Mel Gorman 提交于
      The skb->pfmemalloc flag gets set to true iff during the slab allocation
      of data in __alloc_skb that the the PFMEMALLOC reserves were used.  If
      page splitting is used, it is possible that pages will be allocated from
      the PFMEMALLOC reserve without propagating this information to the skb.
      This patch propagates page->pfmemalloc from pages allocated for fragments
      to the skb.
      
      It works by reintroducing and expanding the skb_alloc_page() API to take
      an skb.  If the page was allocated from pfmemalloc reserves, it is
      automatically copied.  If the driver allocates the page before the skb, it
      should call skb_propagate_pfmemalloc() after the skb is allocated to
      ensure the flag is copied properly.
      
      Failure to do so is not critical.  The resulting driver may perform slower
      if it is used for swap-over-NBD or swap-over-NFS but it should not result
      in failure.
      
      [davem@davemloft.net: API rename and consistency]
      Signed-off-by: NMel Gorman <mgorman@suse.de>
      Acked-by: NDavid S. Miller <davem@davemloft.net>
      Cc: Neil Brown <neilb@suse.de>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Mike Christie <michaelc@cs.wisc.edu>
      Cc: Eric B Munson <emunson@mgebm.net>
      Cc: Eric Dumazet <eric.dumazet@gmail.com>
      Cc: Sebastian Andrzej Siewior <sebastian@breakpoint.cc>
      Cc: Mel Gorman <mgorman@suse.de>
      Cc: Christoph Lameter <cl@linux.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      0614002b
  14. 28 7月, 2012 1 次提交
  15. 25 7月, 2012 1 次提交
  16. 20 7月, 2012 3 次提交
  17. 19 7月, 2012 3 次提交
  18. 17 7月, 2012 5 次提交
  19. 12 7月, 2012 1 次提交
  20. 10 7月, 2012 1 次提交
  21. 09 7月, 2012 1 次提交
    • B
      net: qmi_wwan: add ZTE MF60 · 6fecd35d
      Bjørn Mork 提交于
      Adding a device with limited QMI support. It does not support
      normal QMI_WDS commands for connection management. Instead,
      sending a QMI_CTL SET_INSTANCE_ID command is required to
      enable the network interface:
      
        01 0f 00 00 00 00 00 00  20 00 04 00 01 01 00 00
      
      A number of QMI_DMS and QMI_NAS commands are also supported
      for optional device management.
      Signed-off-by: NBjørn Mork <bjorn@mork.no>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      6fecd35d
  22. 08 7月, 2012 1 次提交
    • E
      asix: avoid copies in tx path · 95162d65
      Eric Dumazet 提交于
      I noticed excess calls to skb_copy_expand() or memmove() in asix driver.
      
      This driver needs to push 4 bytes in front of frame (packet_len)
      and maybe add 4 bytes after the end (if padlen is 4)
      
      So it should set needed_headroom & needed_tailroom to avoid
      copies. But its not enough, because many packets are cloned
      before entering asix_tx_fixup() and this driver use skb_cloned()
      as a lazy way to check if it can push and put additional bytes in frame.
      
      Avoid skb_copy_expand() expensive call, using following rules :
      
      - We are allowed to push 4 bytes in headroom if skb_header_cloned()
        is false (and if we have 4 bytes of headroom)
      
      - We are allowed to put 4 bytes at tail if skb_cloned()
        is false (and if we have 4 bytes of tailroom)
      
      TCP packets for example are cloned, but skb_header_release()
      was called in tcp stack, allowing us to use headroom for our needs.
      Signed-off-by: NEric Dumazet <edumazet@google.com>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Cc: Allan Chou <allan@asix.com.tw>
      Cc: Trond Wuellner <trond@chromium.org>
      Cc: Grant Grundler <grundler@chromium.org>
      Cc: Paul Stewart <pstew@chromium.org>
      Cc: Ming Lei <tom.leiming@gmail.com>
      Tested-by: NMing Lei <ming.lei@canonical.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      95162d65