1. 06 7月, 2006 14 次提交
  2. 05 7月, 2006 1 次提交
    • Z
      [PATCH] mthca: initialize send and receive queue locks separately · a46f9484
      Zach Brown 提交于
      mthca: initialize send and receive queue locks separately
      
      lockdep identifies a lock by the call site of its initialization.  By
      initializing the send and receive queue locks in mthca_wq_init() we confuse
      lockdep.  It warns that that the ordered acquiry of both locks in
      mthca_modify_qp() is recursive acquiry of one lock:
      
        =============================================
        [ INFO: possible recursive locking detected ]
        ---------------------------------------------
        modprobe/1192 is trying to acquire lock:
         (&wq->lock){....}, at: [<f892b4db>] mthca_modify_qp+0x60/0xa7b [ib_mthca]
        but task is already holding lock:
         (&wq->lock){....}, at: [<f892b4ce>] mthca_modify_qp+0x53/0xa7b [ib_mthca]
      
      Initializing the locks separately in mthca_alloc_qp_common() stops the
      warning and will let lockdep enforce proper ordering on paths that acquire
      both locks.
      Signed-off-by: NZach Brown <zach.brown@oracle.com>
      Cc: Roland Dreier <rolandd@cisco.com>
      Cc: Arjan van de Ven <arjan@linux.intel.com>
      Cc: Ingo Molnar <mingo@elte.hu>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      a46f9484
  3. 04 7月, 2006 25 次提交
    • H
      [PATCH] zfcp: fix incorrect usage of fsf_req_list_lock · 38c54ee8
      Heiko Carstens 提交于
        =================================
        [ INFO: inconsistent lock state ]
        ---------------------------------
        inconsistent {in-hardirq-W} -> {hardirq-on-W} usage.
        swapper/0 [HC0[0]:SC1[1]:HE1:SE0] takes:
         (&adapter->fsf_req_list_lock){++..}, at: [<0000000000274486>] zfcp_qdio_reqid_check+0x46/0x178
        {in-hardirq-W} state was registered at:
          [<000000000005fb0c>] __lock_acquire+0xad8/0xed0
          [<00000000000604ae>] lock_acquire+0x9a/0xc8
          [<000000000035a326>] _spin_lock+0x4e/0x68
          [<0000000000274486>] zfcp_qdio_reqid_check+0x46/0x178
          [<000000000027469e>] zfcp_qdio_response_handler+0xe6/0x430
          [<0000000000219dd4>] tiqdio_thinint_handler+0xd20/0x213c
          [<000000000020229a>] do_adapter_IO+0xb2/0xc0
          [<0000000000206f32>] do_IRQ+0x136/0x16c
          [<0000000000020462>] io_no_vtime+0x16/0x1c
          [<0000000000019432>] cpu_idle+0x222/0x250
        irq event stamp: 129220
        hardirqs last  enabled at (129220): [<00000000000411e6>] tasklet_hi_action+0x5a/0x19c
        hardirqs last disabled at (129219): [<00000000000411c0>] tasklet_hi_action+0x34/0x19c
        softirqs last  enabled at (129212): [<0000000000040b62>] __do_softirq+0x13a/0x180
        softirqs last disabled at (129217): [<000000000001fd58>] do_softirq+0xec/0xf0
      
        other info that might help us debug this:
        no locks held by swapper/0.
      
        stack backtrace:
        00000000012bb670 0000000000000002 0000000000000000 00000000012bb780
               00000000012bb6e8 0000000000399122 0000000000399122 0000000000016b0a
               0000000000000000 0000000000000000 0000000000000000 00000000004660e8
               0000000000000000 000000000000000d 00000000012bb6e0 00000000012bb758
               0000000000368b90 0000000000016b0a 00000000012bb6e0 00000000012bb730
        Call Trace:
        ([<0000000000016a26>] show_trace+0x76/0xdc)
         [<0000000000016b2c>] show_stack+0xa0/0xd0
         [<0000000000016b8a>] dump_stack+0x2e/0x3c
         [<000000000005e3da>] print_usage_bug+0x27e/0x290
         [<000000000005ea9c>] mark_lock+0x6b0/0x6c0
         [<000000000005f33e>] __lock_acquire+0x30a/0xed0
         [<00000000000604ae>] lock_acquire+0x9a/0xc8
         [<000000000035a326>] _spin_lock+0x4e/0x68
         [<0000000000274486>] zfcp_qdio_reqid_check+0x46/0x178
         [<000000000027469e>] zfcp_qdio_response_handler+0xe6/0x430
         [<0000000000217bd2>] tiqdio_tl+0xd02/0x2120
         [<000000000004123a>] tasklet_hi_action+0xae/0x19c
         [<0000000000040ae4>] __do_softirq+0xbc/0x180
         [<000000000001fd58>] do_softirq+0xec/0xf0
         [<0000000000040c38>] irq_exit+0x90/0xa8
         [<0000000000206f40>] do_IRQ+0x144/0x16c
         [<0000000000020462>] io_no_vtime+0x16/0x1c
         [<0000000000019432>] cpu_idle+0x222/0x250
        ([<0000000000019416>] cpu_idle+0x206/0x250)
         [<000000000001405a>] rest_init+0x5a/0x68
         [<0000000000536998>] start_kernel+0x39c/0x3dc
         [<0000000000013046>] _stext+0x46/0x1000
      
      Fix incorrect usage of fsf_req_list_lock. It's used in tasklet context
      (irqs on) as well as in irq context. Therefore use the spin_lock_irqsave
      variant to avoid deadlocks.
      Acked-by: NAndreas Herrmann <aherrman@de.ibm.com>
      Signed-off-by: NHeiko Carstens <heiko.carstens@de.ibm.com>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      38c54ee8
    • H
      [PATCH] zfcp: fix incorrect usage of erp_lock · 9f09c548
      Heiko Carstens 提交于
        =================================
        [ INFO: inconsistent lock state ]
        ---------------------------------
        inconsistent {hardirq-on-W} -> {in-hardirq-W} usage.
        swapper/0 [HC1[1]:SC0[0]:HE0:SE1] takes:
         (&adapter->erp_lock){+-..}, at: [<000000000026c7f8>] zfcp_erp_async_handler+0x3c/0x70
        {hardirq-on-W} state was registered at:
          [<000000000005f33e>] __lock_acquire+0x30a/0xed0
          [<00000000000604ae>] lock_acquire+0x9a/0xc8
          [<000000000035a7ae>] _write_lock+0x4e/0x68
          [<000000000026d822>] zfcp_erp_adapter_strategy_generic+0x286/0xd94
          [<000000000026fd72>] zfcp_erp_strategy_do_action+0x91e/0x1a94
          [<0000000000271a3a>] zfcp_erp_thread+0x21a/0x1568
          [<0000000000019096>] kernel_thread_starter+0x6/0xc
          [<0000000000019090>] kernel_thread_starter+0x0/0xc
        irq event stamp: 12078
        hardirqs last  enabled at (12077): [<0000000000019416>] cpu_idle+0x206/0x250
        hardirqs last disabled at (12078): [<0000000000020458>] io_no_vtime+0xc/0x1c
        softirqs last  enabled at (12072): [<0000000000040b62>] __do_softirq+0x13a/0x180
        softirqs last disabled at (12059): [<000000000001fd58>] do_softirq+0xec/0xf0
      
        other info that might help us debug this:
        no locks held by swapper/0.
      
        stack backtrace:
        00000000012bb648 0000000000000002 0000000000000000 00000000012bb758
               00000000012bb6c0 0000000000399122 0000000000399122 0000000000016b0a
               0000000000000000 0000000000000001 0000000000000000 00000000004660e8
               0000000000000000 000000000000000d 00000000012bb6b8 00000000012bb730
               0000000000368b90 0000000000016b0a 00000000012bb6b8 00000000012bb708
        Call Trace:
        ([<0000000000016a26>] show_trace+0x76/0xdc)
         [<0000000000016b2c>] show_stack+0xa0/0xd0
         [<0000000000016b8a>] dump_stack+0x2e/0x3c
         [<000000000005e3da>] print_usage_bug+0x27e/0x290
         [<000000000005e934>] mark_lock+0x548/0x6c0
         [<000000000005fb0c>] __lock_acquire+0xad8/0xed0
         [<00000000000604ae>] lock_acquire+0x9a/0xc8
         [<000000000035a662>] _write_lock_irqsave+0x62/0x80
         [<000000000026c7f8>] zfcp_erp_async_handler+0x3c/0x70
         [<0000000000279178>] zfcp_fsf_req_dispatch+0xd8/0x1fa8
         [<000000000027e538>] zfcp_fsf_req_complete+0x104/0xe4c
         [<0000000000274534>] zfcp_qdio_reqid_check+0xf4/0x178
         [<000000000027469e>] zfcp_qdio_response_handler+0xe6/0x430
         [<0000000000219dd4>] tiqdio_thinint_handler+0xd20/0x213c
         [<000000000020229a>] do_adapter_IO+0xb2/0xc0
         [<0000000000206f32>] do_IRQ+0x136/0x16c
         [<0000000000020462>] io_no_vtime+0x16/0x1c
         [<0000000000019432>] cpu_idle+0x222/0x250
        ([<0000000000019416>] cpu_idle+0x206/0x250)
         [<000000000001405a>] rest_init+0x5a/0x68
         [<0000000000536998>] start_kernel+0x39c/0x3dc
         [<0000000000013046>] _stext+0x46/0x1000
      
      Fix incorrect usage of erp_lock. Using the write_lock() variant is wrong,
      since this might lead to deadlocks.
      Acked-by: NAndreas Herrmann <aherrman@de.ibm.com>
      Signed-off-by: NHeiko Carstens <heiko.carstens@de.ibm.com>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      9f09c548
    • M
      [Bluetooth] Add platform device for virtual and serial devices · 27d35284
      Marcel Holtmann 提交于
      This patch adds a generic Bluetooth platform device that can be used
      as parent device by virtual and serial devices.
      Signed-off-by: NMarcel Holtmann <marcel@holtmann.org>
      27d35284
    • M
      [Bluetooth] Correct SCO buffer size on request · da1f5198
      Marcel Holtmann 提交于
      This patch introduces a quirk that allows the drivers to tell the host
      to correct the SCO buffer size values.
      Signed-off-by: NOlivier Galibert <galibert@pobox.com>
      Signed-off-by: NMarcel Holtmann <marcel@holtmann.org>
      da1f5198
    • M
      [Bluetooth] Add suspend/resume support to the HCI USB driver · dcdcf63e
      Marcel Holtmann 提交于
      This patch implements the suspend/resume methods for the HCI USB
      driver by killing all outstanding URBs on suspend, and re-issuing
      them on resume.
      Signed-off-by: NJohannes Berg <johannes@sipsolutions.net>
      Signed-off-by: NMarcel Holtmann <marcel@holtmann.org>
      dcdcf63e
    • M
      [Bluetooth] Use raw mode for the Frontline sniffer device · 2b86ad21
      Marcel Holtmann 提交于
      The Frontline sniffer device looks like a normal H:2 Bluetooth device,
      but it is not and so mark it as raw mode device.
      Signed-off-by: NMarcel Holtmann <marcel@holtmann.org>
      2b86ad21
    • R
      [ATM]: add+use poison defines · 3c6b3773
      Randy Dunlap 提交于
      ATM: add and use POISON define values.
      Signed-off-by: NRandy Dunlap <rdunlap@xenotime.net>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      3c6b3773
    • R
      [IOAT]: fix kernel-doc in source files · 6508871e
      Randy Dunlap 提交于
      Fix kernel-doc warnings in drivers/dma/:
      - use correct function & parameter names
      - add descriptions where omitted
      Signed-off-by: NRandy Dunlap <rdunlap@xenotime.net>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      6508871e
    • M
      [TG3]: Add ipv6 TSO feature · b0026624
      Michael Chan 提交于
      Enable ipv6 TSO feature on chips that support it.
      
      Update version to 3.61.
      Signed-off-by: NMichael Chan <mchan@broadcom.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      b0026624
    • B
      [IOAT]: Fix a warning in ioatdma · 518d1c96
      Benoit Boissinot 提交于
      drivers/dma/ioatdma.c: In function 'ioat_init_module':
      drivers/dma/ioatdma.c:830: warning: control reaches end of non-void function
      Signed-off-by: NBenoit Boissinot <benoit.boissinot@ens-lyon.org>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      518d1c96
    • A
      [IOAT]: drivers/dma/iovlock.c: make num_pages_spanned() static · 56e0873b
      Adrian Bunk 提交于
      This patch makes the needlessly global num_pages_spanned() static.
      Signed-off-by: NAdrian Bunk <bunk@stusta.de>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      56e0873b
    • R
      [IOAT]: fix sparse ulong warning · c1b4df5d
      Randy Dunlap 提交于
      Fix sparse warning:
      drivers/dma/ioatdma.c:444:32: warning: constant 0xFFFFFFFFFFFFFFC0 is so big it is unsigned long
      
      Also needs a MAINTAINERS entry.
      Signed-off-by: NRandy Dunlap <rdunlap@xenotime.net>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      c1b4df5d
    • I
      [PATCH] sched: cleanup, remove task_t, convert to struct task_struct · 36c8b586
      Ingo Molnar 提交于
      cleanup: remove task_t and convert all the uses to struct task_struct. I
      introduced it for the scheduler anno and it was a mistake.
      
      Conversion was mostly scripted, the result was reviewed and all
      secondary whitespace and style impact (if any) was fixed up by hand.
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      36c8b586
    • I
      [PATCH] lockdep: annotate forcedeth.c disable_irq() · 8688cfce
      Ingo Molnar 提交于
      nv_do_nic_poll() is called from timer softirqs, which has interrupts enabled,
      but np->lock might also be taken by some other interrupt context.
      
      The driver does disable_irq() to get around this problem, so annotate the
      disable_irq()/enable_irq() calls for lockdep.
      
      Has no effect on non-lockdep kernels.
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NArjan van de Ven <arjan@linux.intel.com>
      Cc: Ayaz Abdulla <aabdulla@nvidia.com>
      Cc: Manfred Spraul <manfred@colorfullife.com>
      Cc: Jeff Garzik <jeff@garzik.org>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      8688cfce
    • A
      [PATCH] forcedeth: typecast cleanup · 479ceddd
      Andrew Morton 提交于
      Someone went nuts in there.
      
      Cc: Ayaz Abdulla <aabdulla@nvidia.com>
      Cc: Manfred Spraul <manfred@colorfullife.com>
      Cc: Jeff Garzik <jeff@garzik.org>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      479ceddd
    • A
      [PATCH] lockdep: annotate hostap netdev ->xmit_lock · cd11acdd
      Arjan van de Ven 提交于
      On Fri, 2006-06-30 at 15:45 -0700, Miles Lane wrote:
      > Okay, I rebuilt my kernel with your combo patch applied.
      > Then, I inserted my US Robotics USR2210 PCMCIA wifi card,
      > ran "pccardutil eject", popped out the card and then inserted
      > a Compaq iPaq wifi card.  This triggered the following.
      >
      > [ INFO: possible circular locking dependency detected ]
      > -------------------------------------------------------
      > syslogd/1886 is trying to acquire lock:
      >  (&dev->queue_lock){-+..}, at: [<c11a50b5>] dev_queue_xmit+0x120/0x24b
      >
      > but task is already holding lock:
      >  (&dev->_xmit_lock){-+..}, at: [<c11a5118>] dev_queue_xmit+0x183/0x24b
      >
      > which lock already depends on the new lock.
      
      ok this appears to be hostap playing games... it has 2 network devices
      for one piece of hardware and one calls the other via the networking
      layer; there is thankfully a natural ordering between the two, so just
      making the slave one a separate type ought to make this work.
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      Cc: Arjan van de Ven <arjan@linux.intel.com>
      Cc: "John W. Linville" <linville@tuxdriver.com>
      Cc: Jeff Garzik <jeff@garzik.org>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      cd11acdd
    • I
      [PATCH] lockdep: annotate on-stack completions, mmc · 0afffc72
      Ingo Molnar 提交于
      lockdep needs to have the waitqueue lock initialized for on-stack
      waitqueues implicitly initialized by DECLARE_COMPLETION().
      
      Annotate mmc_wait_for_req()'s on-stack completion accordingly.
      
      Has no effect on non-lockdep kernels.
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      Cc: Arjan van de Ven <arjan@linux.intel.com>
      Cc: Russell King <rmk@arm.linux.org.uk>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      0afffc72
    • I
      [PATCH] lockdep: annotate blkdev nesting · 663d440e
      Ingo Molnar 提交于
      Teach special (recursive) locking code to the lock validator.
      
      Effects on non-lockdep kernels:
      
      - the introduction of the following function variants:
      
        extern struct block_device *open_partition_by_devnum(dev_t, unsigned);
      
        extern int blkdev_put_partition(struct block_device *);
      
        static int
        blkdev_get_whole(struct block_device *bdev, mode_t mode, unsigned flags);
      
       which on non-lockdep are the same as open_by_devnum(), blkdev_put()
       and blkdev_get().
      
      - a subclass parameter to do_open(). [unused on non-lockdep]
      
      - a subclass parameter to __blkdev_put(), which is a new internal
        function for the main blkdev_put*() functions. [parameter unused
        on non-lockdep kernels, except for two sanity check WARN_ON()s]
      
      these functions carry no semantical difference - they only express
      object dependencies towards the lockdep subsystem.
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NArjan van de Ven <arjan@linux.intel.com>
      Cc: Neil Brown <neilb@cse.unsw.edu.au>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      663d440e
    • H
      [PATCH] lockdep: annotate qeth driver · 91ebe2a9
      Heiko Carstens 提交于
      Annotate the qeth driver which uses a private skb-queue-head that is safely
      used in hardirq context too.
      
      Has no effect on non-lockdep kernels.
      Signed-off-by: NHeiko Carstens <heiko.carstens@de.ibm.com>
      Acked-by: NIngo Molnar <mingo@elte.hu>
      Cc: Jeff Garzik <jeff@garzik.org>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      91ebe2a9
    • I
      [PATCH] lockdep: annotate on-stack completions · 60be6b9a
      Ingo Molnar 提交于
      lockdep needs to have the waitqueue lock initialized for on-stack waitqueues
      implicitly initialized by DECLARE_COMPLETION().  Annotate on-stack completions
      accordingly.
      
      Has no effect on non-lockdep kernels.
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      60be6b9a
    • I
      [PATCH] lockdep: annotate enable_in_hardirq() · 366c7f55
      Ingo Molnar 提交于
      Make use of local_irq_enable_in_hardirq() API to annotate places that enable
      hardirqs in hardirq context.
      
      Has no effect on non-lockdep kernels.
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NArjan van de Ven <arjan@linux.intel.com>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      366c7f55
    • I
      [PATCH] lockdep: annotate 3c59x.c disable_irq() · 0a9da4bd
      Ingo Molnar 提交于
      3c59x.c's vortex_timer() function knows that vp->lock can only be used by an
      irq context that it disabled - and can hence take the vp->lock without
      disabling hardirqs.  Teach lockdep about this.
      
      Has no effect on non-lockdep kernels.
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      Cc: Arjan van de Ven <arjan@linux.intel.com>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      0a9da4bd
    • I
      [PATCH] lockdep: annotate 8390.c disable_irq() · e745165c
      Ingo Molnar 提交于
      8390.c knows that ei_local->page_lock can only be used by an irq context that
      it disabled - and can hence take the ->page_lock without disabling hardirqs.
      Teach lockdep about this.
      
      Has no effect on non-lockdep kernels.
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      Cc: Arjan van de Ven <arjan@linux.intel.com>
      Cc: Jeff Garzik <jeff@garzik.org>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      e745165c
    • A
      [PATCH] lockdep: annotate USBFS · 8e7795ef
      Arjan van de Ven 提交于
      In usbfs's fs_remove_file() function, the aim is to remove a file or
      directory from usbfs. This is done by first taking the i_mutex of the
      parent directory of this file/dir via
        mutex_lock(&parent->d_inode->i_mutex);
      and then to call either usbfs_rmdir() for a directory or usbfs_unlink()
      for a file. Both these functions then take the i_mutex for the
      to-be-removed object themselves:
        mutex_lock(&inode->i_mutex);
      
      This is a classical parent->child locking order relationship that the VFS uses
      all over the place; the VFS locking rule is "you need to take the parent
      first".  This patch annotates the usbfs code to make this explicit and thus
      informs the lockdep code that those two locks indeed have this relationship.
      
      The rules for unlink that we already use in the VFS for unlink are to use
      I_MUTEX_PARENT for the parent directory, and a normal mutex for the file
      itself; this patch follows that convention.
      
      Has no effect on non-lockdep kernels.
      Signed-off-by: NArjan van de Ven <arjan@linux.intel.com>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      Cc: Greg KH <greg@kroah.com>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      8e7795ef
    • I
      [PATCH] lockdep: annotate ieee1394 skb-queue-head locking · d3788348
      Ingo Molnar 提交于
      ieee1394 reuses the skb infrastructure of the networking code, and uses two
      skb-head queues: ->pending_packet_queue and hpsbpkt_queue.  The latter is used
      in the usual fashion: processed from a kernel thread.  The other one,
      ->pending_packet_queue is also processed from hardirq context (f.e.  in
      hpsb_bus_reset()), which is not what the networking code usually does (which
      completes from softirq or process context).  This locking assymetry can be
      totally correct if done carefully, but it can also be dangerous if networking
      helper functions are reused, which could assume traditional networking use.
      
      It would probably be more robust to push this completion into a workqueue -
      but technically the code can be 100% correct, and lockdep has to be taught
      about it.  The solution is to split the ->pending_packet_queue skb-head->lock
      class from the networking lock-class by using a private lock-validator key.
      
      Has no effect on non-lockdep kernels.
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      Cc: Stefan Richter <stefanr@s5r6.in-berlin.de>
      Cc: Jody McIntyre <scjody@modernduck.com>
      Cc: Ben Collins <bcollins@debian.org>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      d3788348