1. 29 6月, 2012 18 次提交
    • S
      powerpc/ftrace: Do not trace restore_interrupts() · 2d773aa4
      Steven Rostedt 提交于
      As I was adding code that affects all archs, I started testing function
      tracer against PPC64 and found that it currently locks up with 3.4
      kernel. I figured it was due to tracing a function that shouldn't be, so
      I went through the following process to bisect to find the culprit:
      
       cat /debug/tracing/available_filter_functions > t
       num=`wc -l t`
       sed -ne "1,${num}p" t > t1
       let num=num+1
       sed -ne "${num},$p" t > t2
       cat t1 > /debug/tracing/set_ftrace_filter
       echo function /debug/tracing/current_tracer
       <failed? bisect t1, if not bisect t2>
      
      It finally came down to this function: restore_interrupts()
      
      I'm not sure why this locks up the system. It just seems to prevent
      scheduling from occurring. Interrupts seem to still work, as I can ping
      the box. But all user processes freeze.
      
      When restore_interrupts() is not traced, function tracing works fine.
      
      Cc: stable@kernel.org
      Signed-off-by: NSteven Rostedt <rostedt@goodmis.org>
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      2d773aa4
    • L
      powerpc: Fix Section mismatch warnings in prom_init.c · 2cb387ae
      Li Zhong 提交于
      This patches tries to fix a couple of Section mismatch warnings like
      following one:
      
      WARNING: arch/powerpc/kernel/built-in.o(.text+0x2923c): Section mismatch
      in reference from the function .prom_query_opal() to the
      function .init.text:.call_prom()
      The function .prom_query_opal() references
      the function __init .call_prom().
      This is often because .prom_query_opal lacks a __init
      annotation or the annotation of .call_prom is wrong.
      Signed-off-by: NLi Zhong <zhong@linux.vnet.ibm.com>
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      2cb387ae
    • T
      ppc64: fix missing to check all bits of _TIF_USER_WORK_MASK in preempt · c58ce2b1
      Tiejun Chen 提交于
      In entry_64.S version of ret_from_except_lite, you'll notice that
      in the !preempt case, after we've checked MSR_PR we test for any
      TIF flag in _TIF_USER_WORK_MASK to decide whether to go to do_work
      or not. However, in the preempt case, we do a convoluted trick to
      test SIGPENDING only if PR was set and always test NEED_RESCHED ...
      but we forget to test any other bit of _TIF_USER_WORK_MASK !!! So
      that means that with preempt, we completely fail to test for things
      like single step, syscall tracing, etc...
      
      This should be fixed as the following path:
      
       - Test PR. If not set, go to resume_kernel, else continue.
      
       - If go resume_kernel, to do that original do_work.
      
       - If else, then always test for _TIF_USER_WORK_MASK to decide to do
      that original user_work, else restore directly.
      Signed-off-by: NTiejun Chen <tiejun.chen@windriver.com>
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      c58ce2b1
    • M
      powerpc: Fix uninitialised error in numa.c · 82b2521d
      Michael Neuling 提交于
      chroma_defconfig currently gives me this with gcc 4.6:
        arch/powerpc/mm/numa.c:638:13: error: 'dm' may be used uninitialized in this function [-Werror=uninitialized]
      
      It's a bogus warning/error since of_get_drconf_memory() only writes it
      anyway.
      Signed-off-by: NMichael Neuling <mikey@neuling.org>
      cc: <stable@kernel.org> [v3.3+]
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      82b2521d
    • M
      powerpc: Fix BPF_JIT code to link with multiple TOCs · 7784655a
      Michael Ellerman 提交于
      If the kernel is big enough (eg. allyesconfig), the linker may need to
      switch TOCs when calling from the BPF JIT code out to the external
      helpers (skb_copy_bits() & bpf_internal_load_pointer_neg_helper()).
      
      In order to do that we need to leave space after the bl for the linker
      to insert a reload of our TOC pointer.
      Signed-off-by: NMichael Ellerman <michael@ellerman.id.au>
      Acked-by: NMatt Evans <matt@ozlabs.org>
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      7784655a
    • L
      Merge tag 'hwmon-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging · 9acc7bde
      Linus Torvalds 提交于
      Pull hwmon changes from Guenter Roeck:
       "Just e-mail address updates"
      
      * tag 'hwmon-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging:
        hwmon: Update my e-mail address
        hwmon: (applesmc) correct email address for Jesper Juhl
      9acc7bde
    • L
      Merge git://www.linux-watchdog.org/linux-watchdog · ccce27c0
      Linus Torvalds 提交于
      Pull watchdog fixes from Wim Van Sebroeck:
       "This fixes:
         - the WDIOC_GETSTATUS return value
         - the unregister of all NMI events on exit
         - the loading of the iTCO_wdt driver after the conversion to the
           lpc_ich mfd model."
      
      * git://www.linux-watchdog.org/linux-watchdog:
        watchdog: core: fix WDIOC_GETSTATUS return value
        watchdog: hpwdt: Unregister NMI events on exit.
        watchdog: iTCO_wdt: add platform driver module alias
      ccce27c0
    • L
      Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs · 221d3ebf
      Linus Torvalds 提交于
      Pull UDF fixes from Jan Kara:
       "Make UDF more robust in presence of corrupted filesystem"
      
      * 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs:
        udf: Fortify loading of sparing table
        udf: Avoid run away loop when partition table length is corrupted
        udf: Use 'ret' instead of abusing 'i' in udf_load_logicalvol()
      221d3ebf
    • L
      Merge tag 'upstream-3.5-rc5' of git://git.infradead.org/linux-ubifs · 9a7c6b73
      Linus Torvalds 提交于
      Pull ubi/ubifs fixes from Artem Bityutskiy:
       "Fix the debugfs regression - we never enable it because incorrect
        'IS_ENABLED()' macro usage: should be 'IS_ENABLED(CONFIG_DEBUG_FS)',
        but we had 'IS_ENABLED(DEBUG_FS)'.  Also fix incorrect assertion."
      
      * tag 'upstream-3.5-rc5' of git://git.infradead.org/linux-ubifs:
        UBI: correct usage of IS_ENABLED()
        UBIFS: correct usage of IS_ENABLED()
        UBIFS: fix assertion
      9a7c6b73
    • W
      watchdog: core: fix WDIOC_GETSTATUS return value · 8b9468d4
      Wim Van Sebroeck 提交于
      In commit 7a879824 we added
      a wrapper for the WDIOC_GETSTATUS ioctl call. The code results
      however in a different behaviour: it returns an error if the
      driver doesn't support the status operation. This is not
      according to the API that says that when we don't support
      the status operation, that we just should return a 0 value.
      Only when the device isn't there anymore, we should return an
      error.
      Signed-off-by: NWim Van Sebroeck <wim@iguana.be>
      8b9468d4
    • M
      watchdog: hpwdt: Unregister NMI events on exit. · a089361c
      Mingarelli, Thomas 提交于
      This patch is to unregister for NMI events upon exit. Also we are now
      making the default setting for allow_kdump enabled.
      Signed-off-by: NThomas Mingarelli <thomas.mingarelli@hp.com>
      Signed-off-by: NWim Van Sebroeck <wim@iguana.be>
      a089361c
    • J
      watchdog: iTCO_wdt: add platform driver module alias · e5de32e3
      Jan Beulich 提交于
      The recent conversion of iTCO_wdt resulted in the driver no longer
      getting loaded automatically, since it no longer has a
      MODULE_DEVICE_TABLE() included. As the lpc_ich driver now creates a
      platform device, auto-loading can easily be done by having a respective
      module alias in place.
      Signed-off-by: NJan Beulich <jbeulich@suse.com>
      Cc: Aaron Sierra <asierra@xes-inc.com>
      Acked-by: NGuenter Roeck <linux@roeck-us.net>
      Cc: Samuel Ortiz <sameo@linux.intel.com>
      Signed-off-by: NWim Van Sebroeck <wim@iguana.be>
      e5de32e3
    • L
      Merge branch 'drm-fixes' of git://people.freedesktop.org/~airlied/linux · 4a9c4697
      Linus Torvalds 提交于
      Pull drm fixes from Dave Airlie:
       "Nearly all intel, one missing license header in nouveau, nothing
        majorly earth shattering."
      
      * 'drm-fixes' of git://people.freedesktop.org/~airlied/linux:
        Revert "drm/i915: allow PCH PWM override on IVB"
        drm/nouveau: add license header to prime.
        drm/i915: Fix eDP blank screen after S3 resume on HP desktops
        drm/i915: rip out the PM_IIR WARN
      4a9c4697
    • L
      Merge tag 'sh-for-linus' of git://github.com/pmundt/linux-sh · ef726227
      Linus Torvalds 提交于
      Pull SuperH fixes from Paul Mundt.
      
      * tag 'sh-for-linus' of git://github.com/pmundt/linux-sh:
        sh: Convert sh_clk_mstp32_register to sh_clk_mstp_register
        sh: kfr2r09: fix compile breakage
      ef726227
    • L
      Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net · f3747e2f
      Linus Torvalds 提交于
      Pull networking update from David Miller:
      
       1) Pairing and deadlock fixes in bluetooth from Johan Hedberg.
      
       2) Add device IDs for AR3011 and AR3012 bluetooth chips.  From
          Giancarlo Formicuccia and Marek Vasut.
      
       3) Fix wireless regulatory deadlock, from Eliad Peller.
      
       4) Fix full TX ring panic in bnx2x driver, from Eric Dumazet.
      
       5) Revert the two commits that added skb_orphan_try(), it causes
          erratic bonding behavior with UDP clients and the gains it used to
          give are mostly no longer happening due to how BQL works.  From Eric
          Dumazet.
      
       6) It took two tries, but Thomas Graf fixed a problem wherein we
          registered ipv6 routing procfs files before their backend data were
          initialized properly.
      
       7) Fix max GSO size setting in be2net, from Sarveshwar Bandi.
      
       8) PHY device id mask is wrong for KSZ9021 and KS8001 chips, fix from
          Jason Wang.
      
       9) Fix use of stale SKB data pointer after skb_linearize() call in
          batman-adv, from Antonio Quartulli.
      
      10) Fix memory leak in IXGBE due to missing __GFP_COMP, from Alexander
          Duyck.
      
      11) Fix probing of Gobi devices in qmi_wwan usbnet driver, from Bjørn
          Mork.
      
      12) Fix suspend/resume and open failure handling in usbnet from Ming
          Lei.
      
      13) Attempt to fix device r8169 hangs for certain chips, from Francois
          Romieu.
      
      14) Fix advancement of RX dirty pointer in some situations in sh_eth
          driver, from Yoshihiro Shimoda.
      
      15) Attempt to fix restart of IPV6 routing table dumps when there is an
          intervening table update.  From Eric Dumazet.
      
      16) Respect security_inet_conn_request() return value in ipv6 TCP.  From
          Neal Cardwell.
      
      17) Add another iPAD device ID to ipheth driver, from Davide Gerhard.
      
      18) Fix access to freed SKB in l2tp_eth_dev_xmit(), and fix l2tp lockdep
          splats, from Eric Dumazet.
      
      19) Make sure all bridge devices, regardless of whether they were
          created via netlink or ioctls, have their rtnetlink ops hooked up.
          From Thomas Graf and Stephen Hemminger.
      
      * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (81 commits)
        9p: fix min_t() casting in p9pdu_vwritef()
        can: flexcan: use be32_to_cpup to handle the value of dt entry
        xen/netfront: teardown the device before unregistering it.
        bridge: Assign rtnl_link_ops to bridge devices created via ioctl (v2)
        vhost: use USER_DS in vhost_worker thread
        ixgbe: Do not pad FCoE frames as this can cause issues with FCoE DDP
        net: l2tp_eth: use LLTX to avoid LOCKDEP splats
        mac802154: add missed braces
        net: l2tp_eth: fix l2tp_eth_dev_xmit race
        net/mlx4_en: Release QP range in free_resources
        net/mlx4: Use single completion vector after NOP failure
        net/mlx4_en: Set correct port parameters during device initialization
        ipheth: add support for iPad
        caif-hsi: Add missing return in error path
        caif-hsi: Bugfix - Piggyback'ed embedded CAIF frame lost
        caif: Clear shutdown mask to zero at reconnect.
        tcp: heed result of security_inet_conn_request() in tcp_v6_conn_request()
        ipv6: fib: fix fib dump restart
        batman-adv: fix race condition in TT full-table replacement
        batman-adv: only drop packets of known wifi clients
        ...
      f3747e2f
    • J
      udf: Fortify loading of sparing table · 1df2ae31
      Jan Kara 提交于
      Add sanity checks when loading sparing table from disk to avoid accessing
      unallocated memory or writing to it.
      Signed-off-by: NJan Kara <jack@suse.cz>
      1df2ae31
    • J
      udf: Avoid run away loop when partition table length is corrupted · adee11b2
      Jan Kara 提交于
      Check provided length of partition table so that (possibly maliciously)
      corrupted partition table cannot cause accessing data beyond current buffer.
      Signed-off-by: NJan Kara <jack@suse.cz>
      adee11b2
    • J
      udf: Use 'ret' instead of abusing 'i' in udf_load_logicalvol() · cb14d340
      Jan Kara 提交于
      Signed-off-by: NJan Kara <jack@suse.cz>
      cb14d340
  2. 28 6月, 2012 13 次提交
  3. 27 6月, 2012 9 次提交
    • B
      UBI: correct usage of IS_ENABLED() · 903e0e4e
      Brian Norris 提交于
      Commit "e9b4cf20 UBI: fix debugfs-less systems support" fixed one
      regression but introduced a different regression - the debugfs is now always
      compiled out. Root cause: IS_ENABLED() arguments should be used with the
      CONFIG_* prefix.
      Signed-off-by: NBrian Norris <computersforpeace@gmail.com>
      Signed-off-by: NArtem Bityutskiy <artem.bityutskiy@linux.intel.com>
      903e0e4e
    • B
      UBIFS: correct usage of IS_ENABLED() · 2d4cf5ae
      Brian Norris 提交于
      Commit "818039c7 UBIFS: fix debugfs-less systems support" fixed one
      regression but introduced a different regression - the debugfs is now always
      compiled out. Root cause: IS_ENABLED() arguments should be used with the
      CONFIG_* prefix.
      Signed-off-by: NBrian Norris <computersforpeace@gmail.com>
      Signed-off-by: NArtem Bityutskiy <artem.bityutskiy@linux.intel.com>
      2d4cf5ae
    • H
      can: flexcan: use be32_to_cpup to handle the value of dt entry · 85f2f834
      Hui Wang 提交于
      The freescale arm i.MX series platform can support this driver, and
      usually the arm cpu works in the little endian mode by default, while
      device tree entry value is stored in big endian format, we should use
      be32_to_cpup() to handle them, after modification, it can work well
      both on the le cpu and be cpu.
      
      Cc: stable <stable@vger.kernel.org> # v3.2+
      Cc: Shawn Guo <shawn.guo@linaro.org>
      Signed-off-by: NHui Wang <jason77.wang@gmail.com>
      Signed-off-by: NMarc Kleine-Budde <mkl@pengutronix.de>
      85f2f834
    • D
      drm/nouveau: add license header to prime. · e9bf5f36
      Dave Airlie 提交于
      Just forgot this when I posted it, and yes I'm the only person
      to have changed the file since.
      Signed-off-by: NDave Airlie <airlied@redhat.com>
      e9bf5f36
    • I
      xen/netfront: teardown the device before unregistering it. · 6bc96d04
      Ian Campbell 提交于
      Fixes:
      [   15.470311] WARNING: at /local/scratch/ianc/devel/kernels/linux/fs/sysfs/file.c:498 sysfs_attr_ns+0x95/0xa0()
      [   15.470326] sysfs: kobject eth0 without dirent
      [   15.470333] Modules linked in:
      [   15.470342] Pid: 12, comm: xenwatch Not tainted 3.4.0-x86_32p-xenU #93
      and
      [    9.150554] BUG: unable to handle kernel paging request at 2b359000
      [    9.150577] IP: [<c1279561>] linkwatch_do_dev+0x81/0xc0
      [    9.150592] *pdpt = 000000002c3c9027 *pde = 0000000000000000
      [    9.150604] Oops: 0002 [#1] SMP
      [    9.150613] Modules linked in:
      
      This is http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=675190Reported-by: NGeorge Shuklin <george.shuklin@gmail.com>
      Signed-off-by: NIan Campbell <ian.campbell@citrix.com>
      Tested-by: NWilliam Dauchy <wdauchy@gmail.com>
      Cc: stable@kernel.org
      Cc: 675190@bugs.debian.org
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      6bc96d04
    • S
      bridge: Assign rtnl_link_ops to bridge devices created via ioctl (v2) · 149ddd83
      stephen hemminger 提交于
      This ensures that bridges created with brctl(8) or ioctl(2) directly
      also carry IFLA_LINKINFO when dumped over netlink. This also allows
      to create a bridge with ioctl(2) and delete it with RTM_DELLINK.
      Signed-off-by: NThomas Graf <tgraf@suug.ch>
      Signed-off-by: NStephen Hemminger <shemminger@vyatta.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      149ddd83
    • J
      vhost: use USER_DS in vhost_worker thread · d7ffde35
      Jens Freimann 提交于
      On some architectures address spaces are set up in a way that this is
      not necessary to work properly but on some others (like s390) it is.
      Make sure we operate on the user address space to allow copy_xxx_user()
      from the vhost_worker() thread by setting it explicitly before calling
      use_mm() and revert it after unuse_mm().
      Signed-off-by: NJens Freimann <jfrei@linux.vnet.ibm.com>
      Signed-off-by: NChristian Borntraeger <borntraeger@de.ibm.com>
      Acked-by: NMichael S. Tsirkin <mst@redhat.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      d7ffde35
    • A
      ixgbe: Do not pad FCoE frames as this can cause issues with FCoE DDP · 57efd44c
      Alexander Duyck 提交于
      FCoE target mode was experiencing issues due to the fact that we were
      sending up data frames that were padded to 60 bytes after the DDP logic had
      already stripped the frame down to 52 or 56 depending on the use of VLANs.
      This was resulting in the FCoE DDP logic having issues since it thought the
      frame still had data in it due to the padding.
      
      To resolve this, adding code so that we do not pad FCoE frames prior to
      handling them to the stack.
      
      CC: <stable@vger.kernel.org>
      Signed-off-by: NAlexander Duyck <alexander.h.duyck@intel.com>
      Tested-by: NPhil Schmitt <phillip.j.schmitt@intel.com>
      Tested-by: NRoss Brattain <ross.b.brattain@intel.com>
      Signed-off-by: NJeff Kirsher <jeffrey.t.kirsher@intel.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      57efd44c
    • E
      net: l2tp_eth: use LLTX to avoid LOCKDEP splats · a2842a1e
      Eric Dumazet 提交于
      Denys Fedoryshchenko reported a LOCKDEP issue with l2tp code.
      
      [ 8683.927442] ======================================================
      [ 8683.927555] [ INFO: possible circular locking dependency detected ]
      [ 8683.927672] 3.4.1-build-0061 #14 Not tainted
      [ 8683.927782] -------------------------------------------------------
      [ 8683.927895] swapper/0/0 is trying to acquire lock:
      [ 8683.928007]  (slock-AF_INET){+.-...}, at: [<e0fc73ec>]
      l2tp_xmit_skb+0x173/0x47e [l2tp_core]
      [ 8683.928121]
      [ 8683.928121] but task is already holding lock:
      [ 8683.928121]  (_xmit_ETHER#2){+.-...}, at: [<c02f062d>]
      sch_direct_xmit+0x36/0x119
      [ 8683.928121]
      [ 8683.928121] which lock already depends on the new lock.
      [ 8683.928121]
      [ 8683.928121]
      [ 8683.928121] the existing dependency chain (in reverse order) is:
      [ 8683.928121]
      [ 8683.928121] -> #1 (_xmit_ETHER#2){+.-...}:
      [ 8683.928121]        [<c015a561>] lock_acquire+0x71/0x85
      [ 8683.928121]        [<c034da2d>] _raw_spin_lock+0x33/0x40
      [ 8683.928121]        [<c0304e0c>] ip_send_reply+0xf2/0x1ce
      [ 8683.928121]        [<c0317dbc>] tcp_v4_send_reset+0x153/0x16f
      [ 8683.928121]        [<c0317f4a>] tcp_v4_do_rcv+0x172/0x194
      [ 8683.928121]        [<c031929b>] tcp_v4_rcv+0x387/0x5a0
      [ 8683.928121]        [<c03001d0>] ip_local_deliver_finish+0x13a/0x1e9
      [ 8683.928121]        [<c0300645>] NF_HOOK.clone.11+0x46/0x4d
      [ 8683.928121]        [<c030075b>] ip_local_deliver+0x41/0x45
      [ 8683.928121]        [<c03005dd>] ip_rcv_finish+0x31a/0x33c
      [ 8683.928121]        [<c0300645>] NF_HOOK.clone.11+0x46/0x4d
      [ 8683.928121]        [<c0300960>] ip_rcv+0x201/0x23d
      [ 8683.928121]        [<c02de91b>] __netif_receive_skb+0x329/0x378
      [ 8683.928121]        [<c02deae8>] netif_receive_skb+0x4e/0x7d
      [ 8683.928121]        [<e08d5ef3>] rtl8139_poll+0x243/0x33d [8139too]
      [ 8683.928121]        [<c02df103>] net_rx_action+0x90/0x15d
      [ 8683.928121]        [<c012b2b5>] __do_softirq+0x7b/0x118
      [ 8683.928121]
      [ 8683.928121] -> #0 (slock-AF_INET){+.-...}:
      [ 8683.928121]        [<c0159f1b>] __lock_acquire+0x9a3/0xc27
      [ 8683.928121]        [<c015a561>] lock_acquire+0x71/0x85
      [ 8683.928121]        [<c034da2d>] _raw_spin_lock+0x33/0x40
      [ 8683.928121]        [<e0fc73ec>] l2tp_xmit_skb+0x173/0x47e
      [l2tp_core]
      [ 8683.928121]        [<e0fe31fb>] l2tp_eth_dev_xmit+0x1a/0x2f
      [l2tp_eth]
      [ 8683.928121]        [<c02e01e7>] dev_hard_start_xmit+0x333/0x3f2
      [ 8683.928121]        [<c02f064c>] sch_direct_xmit+0x55/0x119
      [ 8683.928121]        [<c02e0528>] dev_queue_xmit+0x282/0x418
      [ 8683.928121]        [<c031f4fb>] NF_HOOK.clone.19+0x45/0x4c
      [ 8683.928121]        [<c031f524>] arp_xmit+0x22/0x24
      [ 8683.928121]        [<c031f567>] arp_send+0x41/0x48
      [ 8683.928121]        [<c031fa7d>] arp_process+0x289/0x491
      [ 8683.928121]        [<c031f4fb>] NF_HOOK.clone.19+0x45/0x4c
      [ 8683.928121]        [<c031f7a0>] arp_rcv+0xb1/0xc3
      [ 8683.928121]        [<c02de91b>] __netif_receive_skb+0x329/0x378
      [ 8683.928121]        [<c02de9d3>] process_backlog+0x69/0x130
      [ 8683.928121]        [<c02df103>] net_rx_action+0x90/0x15d
      [ 8683.928121]        [<c012b2b5>] __do_softirq+0x7b/0x118
      [ 8683.928121]
      [ 8683.928121] other info that might help us debug this:
      [ 8683.928121]
      [ 8683.928121]  Possible unsafe locking scenario:
      [ 8683.928121]
      [ 8683.928121]        CPU0                    CPU1
      [ 8683.928121]        ----                    ----
      [ 8683.928121]   lock(_xmit_ETHER#2);
      [ 8683.928121]                                lock(slock-AF_INET);
      [ 8683.928121]                                lock(_xmit_ETHER#2);
      [ 8683.928121]   lock(slock-AF_INET);
      [ 8683.928121]
      [ 8683.928121]  *** DEADLOCK ***
      [ 8683.928121]
      [ 8683.928121] 3 locks held by swapper/0/0:
      [ 8683.928121]  #0:  (rcu_read_lock){.+.+..}, at: [<c02dbc10>]
      rcu_lock_acquire+0x0/0x30
      [ 8683.928121]  #1:  (rcu_read_lock_bh){.+....}, at: [<c02dbc10>]
      rcu_lock_acquire+0x0/0x30
      [ 8683.928121]  #2:  (_xmit_ETHER#2){+.-...}, at: [<c02f062d>]
      sch_direct_xmit+0x36/0x119
      [ 8683.928121]
      [ 8683.928121] stack backtrace:
      [ 8683.928121] Pid: 0, comm: swapper/0 Not tainted 3.4.1-build-0061 #14
      [ 8683.928121] Call Trace:
      [ 8683.928121]  [<c034bdd2>] ? printk+0x18/0x1a
      [ 8683.928121]  [<c0158904>] print_circular_bug+0x1ac/0x1b6
      [ 8683.928121]  [<c0159f1b>] __lock_acquire+0x9a3/0xc27
      [ 8683.928121]  [<c015a561>] lock_acquire+0x71/0x85
      [ 8683.928121]  [<e0fc73ec>] ? l2tp_xmit_skb+0x173/0x47e [l2tp_core]
      [ 8683.928121]  [<c034da2d>] _raw_spin_lock+0x33/0x40
      [ 8683.928121]  [<e0fc73ec>] ? l2tp_xmit_skb+0x173/0x47e [l2tp_core]
      [ 8683.928121]  [<e0fc73ec>] l2tp_xmit_skb+0x173/0x47e [l2tp_core]
      [ 8683.928121]  [<e0fe31fb>] l2tp_eth_dev_xmit+0x1a/0x2f [l2tp_eth]
      [ 8683.928121]  [<c02e01e7>] dev_hard_start_xmit+0x333/0x3f2
      [ 8683.928121]  [<c02f064c>] sch_direct_xmit+0x55/0x119
      [ 8683.928121]  [<c02e0528>] dev_queue_xmit+0x282/0x418
      [ 8683.928121]  [<c02e02a6>] ? dev_hard_start_xmit+0x3f2/0x3f2
      [ 8683.928121]  [<c031f4fb>] NF_HOOK.clone.19+0x45/0x4c
      [ 8683.928121]  [<c031f524>] arp_xmit+0x22/0x24
      [ 8683.928121]  [<c02e02a6>] ? dev_hard_start_xmit+0x3f2/0x3f2
      [ 8683.928121]  [<c031f567>] arp_send+0x41/0x48
      [ 8683.928121]  [<c031fa7d>] arp_process+0x289/0x491
      [ 8683.928121]  [<c031f7f4>] ? __neigh_lookup.clone.20+0x42/0x42
      [ 8683.928121]  [<c031f4fb>] NF_HOOK.clone.19+0x45/0x4c
      [ 8683.928121]  [<c031f7a0>] arp_rcv+0xb1/0xc3
      [ 8683.928121]  [<c031f7f4>] ? __neigh_lookup.clone.20+0x42/0x42
      [ 8683.928121]  [<c02de91b>] __netif_receive_skb+0x329/0x378
      [ 8683.928121]  [<c02de9d3>] process_backlog+0x69/0x130
      [ 8683.928121]  [<c02df103>] net_rx_action+0x90/0x15d
      [ 8683.928121]  [<c012b2b5>] __do_softirq+0x7b/0x118
      [ 8683.928121]  [<c012b23a>] ? local_bh_enable+0xd/0xd
      [ 8683.928121]  <IRQ>  [<c012b4d0>] ? irq_exit+0x41/0x91
      [ 8683.928121]  [<c0103c6f>] ? do_IRQ+0x79/0x8d
      [ 8683.928121]  [<c0157ea1>] ? trace_hardirqs_off_caller+0x2e/0x86
      [ 8683.928121]  [<c034ef6e>] ? common_interrupt+0x2e/0x34
      [ 8683.928121]  [<c0108a33>] ? default_idle+0x23/0x38
      [ 8683.928121]  [<c01091a8>] ? cpu_idle+0x55/0x6f
      [ 8683.928121]  [<c033df25>] ? rest_init+0xa1/0xa7
      [ 8683.928121]  [<c033de84>] ? __read_lock_failed+0x14/0x14
      [ 8683.928121]  [<c0498745>] ? start_kernel+0x303/0x30a
      [ 8683.928121]  [<c0498209>] ? repair_env_string+0x51/0x51
      [ 8683.928121]  [<c04980a8>] ? i386_start_kernel+0xa8/0xaf
      
      It appears that like most virtual devices, l2tp should be converted to
      LLTX mode.
      
      This patch takes care of statistics using atomic_long in both RX and TX
      paths, and fix a bug in l2tp_eth_dev_recv(), which was caching skb->data
      before a pskb_may_pull() call.
      Signed-off-by: NEric Dumazet <edumazet@google.com>
      Reported-by: NDenys Fedoryshchenko <denys@visp.net.lb>
      Cc: James Chapman <jchapman@katalix.com>
      Cc: Hong zhi guo <honkiko@gmail.com>
      Cc: Francois Romieu <romieu@fr.zoreil.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      a2842a1e