1. 19 4月, 2013 1 次提交
    • A
      ixgbe: in shutdown, do netif_running() under rtnl_lock · 499ab5cc
      akepner 提交于
      During shutdown it's possible for __dev_close() (which holds
      rtnl_lock) to clear the __LINK_STATE_START bit, and for ixgbe
      to then read that bit (without holding rtnl_lock), and then
      not fail to free irqs, etc. The result is a crash like this:
      
      ------------[ cut here ]------------
      kernel BUG at drivers/pci/msi.c:313!
      invalid opcode: 0000 [#1] SMP
      last sysfs file: /sys/devices/system/cpu/cpu3/cache/index2/shared_cpu_map
      CPU 1
      Pid: 5910, comm: reboot Tainted: P           ----------------   2.6.32 #1 empty
      RIP: 0010:[<ffffffff81305c2b>]  [<ffffffff81305c2b>] free_msi_irqs+0x11b/0x130
      RSP: 0018:ffff880185c9bc88  EFLAGS: 00010282
      RAX: ffff880219f58bc0 RBX: ffff88021ac53b00 RCX: 0000000000000000
      RDX: 0000000000000001 RSI: 0000000000000246 RDI: 000000000000004a
      RBP: ffff880185c9bcc8 R08: 0000000000000002 R09: 0000000000000106
      R10: 0000000000000000 R11: 0000000000000006 R12: ffff88021e524778
      R13: 0000000000000001 R14: ffff88021e524000 R15: 0000000000000000
      FS:  00007f90821b7700(0000) GS:ffff880028220000(0000) knlGS:0000000000000000
      CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
      CR2: 00007f90818bd010 CR3: 0000000132c64000 CR4: 00000000000006e0
      DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
      Process reboot (pid: 5910, threadinfo ffff880185c9a000, task ffff88021bf04a80)
      Stack:
       ffff880185c9bc98 000000018130529d ffff880185c9bcc8 ffff88021e524000
      <0> 0000000000000004 ffff88021948c700 0000000000000000 ffff880185c9bda7
      <0> ffff880185c9bce8 ffffffff81305cbd ffff880185c9bce8 ffff88021948c700
      Call Trace:
       [<ffffffff81305cbd>] pci_disable_msix+0x3d/0x50
       [<ffffffffa00501d5>] ixgbe_reset_interrupt_capability+0x65/0x90 [ixgbe]
       [<ffffffffa00512f6>] ixgbe_clear_interrupt_scheme+0xb6/0xd0 [ixgbe]
       [<ffffffffa005330b>] __ixgbe_shutdown+0x5b/0x200 [ixgbe]
       [<ffffffffa00534ca>] ixgbe_shutdown+0x1a/0x60 [ixgbe]
       [<ffffffff812f6c7c>] pci_device_shutdown+0x2c/0x50
       [<ffffffff813727fb>] device_shutdown+0x4b/0x160
       [<ffffffff8107d98c>] kernel_restart_prepare+0x2c/0x40
       ehci timer_action, mod_timer io_watchdog
       [<ffffffff8107d9e6>] kernel_restart+0x16/0x60
       [<ffffffff8107dbfd>] sys_reboot+0x1ad/0x200
       [<ffffffff811676cf>] ? __d_free+0x3f/0x60
       [<ffffffff81167748>] ? d_free+0x58/0x60
       [<ffffffff8116f7c0>] ? mntput_no_expire+0x30/0x100
       [<ffffffff81152b11>] ? __fput+0x191/0x200
       [<ffffffff816565fe>] ? do_page_fault+0x3e/0xa0
       [<ffffffff8100b132>] system_call_fastpath+0x16/0x1b
      Code: 4c 89 ef e8 98 8c e3 ff 4d 39 f4 48 8b 43 10 75 cf 48 83 c4 18 5b 41 5c
      41 5d 41 5e 41 5f c9 c3 49 8b 7d 20 e8 07 5a d3 ff eb c9 <0f> 0b 0f 1f 00 eb fb
      66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00
       ehci timer_action, mod_timer io_watchdog
      RIP  [<ffffffff81305c2b>] free_msi_irqs+0x11b/0x130
       RSP <ffff880185c9bc88>
      ---[ end trace 27de882a0fe75593 ]---
      
      (This was seen on a pretty old kernel/driver, but looks like
      the same bug is still possible.)
      
      Signed-off-by: <akepner@riverbed.com>
      Tested-by: NPhil Schmitt <phillip.j.schmitt@intel.com>
      Signed-off-by: NJeff Kirsher <jeffrey.t.kirsher@intel.com>
      499ab5cc
  2. 18 4月, 2013 7 次提交
  3. 05 4月, 2013 1 次提交
  4. 08 3月, 2013 1 次提交
  5. 28 2月, 2013 1 次提交
    • S
      hlist: drop the node parameter from iterators · b67bfe0d
      Sasha Levin 提交于
      I'm not sure why, but the hlist for each entry iterators were conceived
      
              list_for_each_entry(pos, head, member)
      
      The hlist ones were greedy and wanted an extra parameter:
      
              hlist_for_each_entry(tpos, pos, head, member)
      
      Why did they need an extra pos parameter? I'm not quite sure. Not only
      they don't really need it, it also prevents the iterator from looking
      exactly like the list iterator, which is unfortunate.
      
      Besides the semantic patch, there was some manual work required:
      
       - Fix up the actual hlist iterators in linux/list.h
       - Fix up the declaration of other iterators based on the hlist ones.
       - A very small amount of places were using the 'node' parameter, this
       was modified to use 'obj->member' instead.
       - Coccinelle didn't handle the hlist_for_each_entry_safe iterator
       properly, so those had to be fixed up manually.
      
      The semantic patch which is mostly the work of Peter Senna Tschudin is here:
      
      @@
      iterator name hlist_for_each_entry, hlist_for_each_entry_continue, hlist_for_each_entry_from, hlist_for_each_entry_rcu, hlist_for_each_entry_rcu_bh, hlist_for_each_entry_continue_rcu_bh, for_each_busy_worker, ax25_uid_for_each, ax25_for_each, inet_bind_bucket_for_each, sctp_for_each_hentry, sk_for_each, sk_for_each_rcu, sk_for_each_from, sk_for_each_safe, sk_for_each_bound, hlist_for_each_entry_safe, hlist_for_each_entry_continue_rcu, nr_neigh_for_each, nr_neigh_for_each_safe, nr_node_for_each, nr_node_for_each_safe, for_each_gfn_indirect_valid_sp, for_each_gfn_sp, for_each_host;
      
      type T;
      expression a,c,d,e;
      identifier b;
      statement S;
      @@
      
      -T b;
          <+... when != b
      (
      hlist_for_each_entry(a,
      - b,
      c, d) S
      |
      hlist_for_each_entry_continue(a,
      - b,
      c) S
      |
      hlist_for_each_entry_from(a,
      - b,
      c) S
      |
      hlist_for_each_entry_rcu(a,
      - b,
      c, d) S
      |
      hlist_for_each_entry_rcu_bh(a,
      - b,
      c, d) S
      |
      hlist_for_each_entry_continue_rcu_bh(a,
      - b,
      c) S
      |
      for_each_busy_worker(a, c,
      - b,
      d) S
      |
      ax25_uid_for_each(a,
      - b,
      c) S
      |
      ax25_for_each(a,
      - b,
      c) S
      |
      inet_bind_bucket_for_each(a,
      - b,
      c) S
      |
      sctp_for_each_hentry(a,
      - b,
      c) S
      |
      sk_for_each(a,
      - b,
      c) S
      |
      sk_for_each_rcu(a,
      - b,
      c) S
      |
      sk_for_each_from
      -(a, b)
      +(a)
      S
      + sk_for_each_from(a) S
      |
      sk_for_each_safe(a,
      - b,
      c, d) S
      |
      sk_for_each_bound(a,
      - b,
      c) S
      |
      hlist_for_each_entry_safe(a,
      - b,
      c, d, e) S
      |
      hlist_for_each_entry_continue_rcu(a,
      - b,
      c) S
      |
      nr_neigh_for_each(a,
      - b,
      c) S
      |
      nr_neigh_for_each_safe(a,
      - b,
      c, d) S
      |
      nr_node_for_each(a,
      - b,
      c) S
      |
      nr_node_for_each_safe(a,
      - b,
      c, d) S
      |
      - for_each_gfn_sp(a, c, d, b) S
      + for_each_gfn_sp(a, c, d) S
      |
      - for_each_gfn_indirect_valid_sp(a, c, d, b) S
      + for_each_gfn_indirect_valid_sp(a, c, d) S
      |
      for_each_host(a,
      - b,
      c) S
      |
      for_each_host_safe(a,
      - b,
      c, d) S
      |
      for_each_mesh_entry(a,
      - b,
      c, d) S
      )
          ...+>
      
      [akpm@linux-foundation.org: drop bogus change from net/ipv4/raw.c]
      [akpm@linux-foundation.org: drop bogus hunk from net/ipv6/raw.c]
      [akpm@linux-foundation.org: checkpatch fixes]
      [akpm@linux-foundation.org: fix warnings]
      [akpm@linux-foudnation.org: redo intrusive kvm changes]
      Tested-by: NPeter Senna Tschudin <peter.senna@gmail.com>
      Acked-by: NPaul E. McKenney <paulmck@linux.vnet.ibm.com>
      Signed-off-by: NSasha Levin <sasha.levin@oracle.com>
      Cc: Wu Fengguang <fengguang.wu@intel.com>
      Cc: Marcelo Tosatti <mtosatti@redhat.com>
      Cc: Gleb Natapov <gleb@redhat.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      b67bfe0d
  6. 16 2月, 2013 6 次提交
  7. 15 2月, 2013 1 次提交
  8. 14 2月, 2013 2 次提交
  9. 13 2月, 2013 1 次提交
  10. 11 2月, 2013 1 次提交
  11. 05 2月, 2013 3 次提交
  12. 01 2月, 2013 3 次提交
  13. 24 1月, 2013 6 次提交
  14. 19 1月, 2013 4 次提交
  15. 09 1月, 2013 1 次提交
  16. 08 12月, 2012 1 次提交