1. 25 10月, 2017 1 次提交
    • M
      locking/atomics: COCCINELLE/treewide: Convert trivial ACCESS_ONCE() patterns... · 6aa7de05
      Mark Rutland 提交于
      locking/atomics: COCCINELLE/treewide: Convert trivial ACCESS_ONCE() patterns to READ_ONCE()/WRITE_ONCE()
      
      Please do not apply this to mainline directly, instead please re-run the
      coccinelle script shown below and apply its output.
      
      For several reasons, it is desirable to use {READ,WRITE}_ONCE() in
      preference to ACCESS_ONCE(), and new code is expected to use one of the
      former. So far, there's been no reason to change most existing uses of
      ACCESS_ONCE(), as these aren't harmful, and changing them results in
      churn.
      
      However, for some features, the read/write distinction is critical to
      correct operation. To distinguish these cases, separate read/write
      accessors must be used. This patch migrates (most) remaining
      ACCESS_ONCE() instances to {READ,WRITE}_ONCE(), using the following
      coccinelle script:
      
      ----
      // Convert trivial ACCESS_ONCE() uses to equivalent READ_ONCE() and
      // WRITE_ONCE()
      
      // $ make coccicheck COCCI=/home/mark/once.cocci SPFLAGS="--include-headers" MODE=patch
      
      virtual patch
      
      @ depends on patch @
      expression E1, E2;
      @@
      
      - ACCESS_ONCE(E1) = E2
      + WRITE_ONCE(E1, E2)
      
      @ depends on patch @
      expression E;
      @@
      
      - ACCESS_ONCE(E)
      + READ_ONCE(E)
      ----
      Signed-off-by: NMark Rutland <mark.rutland@arm.com>
      Signed-off-by: NPaul E. McKenney <paulmck@linux.vnet.ibm.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: davem@davemloft.net
      Cc: linux-arch@vger.kernel.org
      Cc: mpe@ellerman.id.au
      Cc: shuah@kernel.org
      Cc: snitzer@redhat.com
      Cc: thor.thayer@linux.intel.com
      Cc: tj@kernel.org
      Cc: viro@zeniv.linux.org.uk
      Cc: will.deacon@arm.com
      Link: http://lkml.kernel.org/r/1508792849-3115-19-git-send-email-paulmck@linux.vnet.ibm.comSigned-off-by: NIngo Molnar <mingo@kernel.org>
      6aa7de05
  2. 29 8月, 2017 14 次提交
  3. 25 8月, 2017 1 次提交
  4. 23 8月, 2017 2 次提交
  5. 19 8月, 2017 3 次提交
  6. 09 8月, 2017 1 次提交
  7. 01 8月, 2017 1 次提交
    • M
      IB/{rdmavt, hfi1, qib}: Fix panic with post receive and SGE compression · 3ffea7d8
      Mike Marciniszyn 提交于
      The server side of qperf panics as follows:
      
      [242446.336860] IP: report_bug+0x64/0x10
      [242446.341031] PGD 1c0c067
      [242446.341032] P4D 1c0c067
      [242446.343951] PUD 1c0d063
      [242446.346870] PMD 8587ea067
      [242446.349788] PTE 800000083e14016
      [242446.352901]
      [242446.358352] Oops: 0003 [#1] SM
      [242446.437919] CPU: 1 PID: 7442 Comm: irq/92-hfi1_0 k Not tainted 4.12.0-mam-asm #1
      [242446.446365] Hardware name: Intel Corporation S2600WT2/S2600WT2, BIOS SE5C610.86B.01.01.0018.C4.072020161249 07/20/201
      [242446.458397] task: ffff8808392d2b80 task.stack: ffffc9000664000
      [242446.465097] RIP: 0010:report_bug+0x64/0x10
      [242446.469859] RSP: 0018:ffffc900066439c0 EFLAGS: 0001000
      [242446.475784] RAX: ffffffffa06647e4 RBX: ffffffffa06461e1 RCX: 000000000000000
      [242446.483840] RDX: 0000000000000907 RSI: ffffffffa0675040 RDI: ffffffffffff740
      [242446.491897] RBP: ffffc900066439e0 R08: 0000000000000001 R09: 000000000000025
      [242446.499953] R10: ffffffff81a253df R11: 0000000000000133 R12: ffffc90006643b3
      [242446.508010] R13: ffffffffa065bbf0 R14: 00000000000001e5 R15: 000000000000000
      [242446.516067] FS:  0000000000000000(0000) GS:ffff88085f640000(0000) knlGS:000000000000000
      [242446.525191] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003
      [242446.531698] CR2: ffffffffa06647ee CR3: 0000000001c09000 CR4: 00000000001406e
      [242446.539756] Call Trace
      [242446.542582]  fixup_bug+0x2c/0x5
      [242446.546277]  do_trap+0x12b/0x18
      [242446.549972]  do_error_trap+0x89/0x11
      [242446.554171]  ? hfi1_copy_sge+0x271/0x2b0 [hfi1
      [242446.559324]  ? ttwu_do_wakeup+0x1e/0x14
      [242446.563795]  ? ttwu_do_activate+0x77/0x8
      [242446.568363]  do_invalid_op+0x20/0x3
      [242446.572448]  invalid_op+0x1e/0x3
      [242446.576247] RIP: 0010:hfi1_copy_sge+0x271/0x2b0 [hfi1
      [242446.582075] RSP: 0018:ffffc90006643be8 EFLAGS: 0001004
      [242446.587999] RAX: 0000000000000000 RBX: ffff88083e0fa240 RCX: 000000000000000
      [242446.596058] RDX: 0000000000000000 RSI: ffff880842508000 RDI: ffff88083e0fa24
      [242446.604116] RBP: ffffc90006643c28 R08: 0000000000000000 R09: 000000000000000
      [242446.612172] R10: ffffc90009473640 R11: 0000000000000133 R12: 000000000000000
      [242446.620228] R13: 0000000000000000 R14: 0000000000002000 R15: ffff88084250800
      [242446.628293]  ? hfi1_copy_sge+0x1a1/0x2b0 [hfi1
      [242446.633449]  hfi1_rc_rcv+0x3da/0x1270 [hfi1
      [242446.638312]  ? sc_buffer_alloc+0x113/0x150 [hfi1
      [242446.643662]  hfi1_ib_rcv+0x1c9/0x2e0 [hfi1
      [242446.648428]  process_receive_ib+0x19a/0x270 [hfi1
      [242446.653866]  ? process_rcv_qp_work+0xd2/0x160 [hfi1
      [242446.659505]  handle_receive_interrupt_nodma_rtail+0x184/0x2e0 [hfi1
      [242446.666693]  ? irq_finalize_oneshot+0x100/0x10
      [242446.671846]  receive_context_thread+0x1b/0x140 [hfi1
      [242446.677576]  irq_thread_fn+0x1e/0x4
      [242446.681659]  irq_thread+0x13c/0x1b
      [242446.685646]  ? irq_forced_thread_fn+0x60/0x6
      [242446.690604]  kthread+0x112/0x15
      [242446.694298]  ? irq_thread_check_affinity+0xe0/0xe
      [242446.699738]  ? kthread_park+0x60/0x6
      [242446.703919]  ? do_syscall_64+0x67/0x15
      [242446.708292]  ret_from_fork+0x25/0x3
      [242446.712374] Code: 63 78 04 44 0f b7 70 08 41 89 d0 4c 8d 2c 38 41 83 e0 01 f6 c2 02 74 17 66 45 85 c0 74 11 f6 c2 04 b9 01 00 00 00 75 bb 83 ca 04 <66> 89 50 0a 66 45 85 c0 74 52 0f b6 48 0b 41 0f b7 f6 4d 89 e0
      [242446.733527] RIP: report_bug+0x64/0x100 RSP: ffffc900066439c
      [242446.739935] CR2: ffffffffa06647e
      [242446.743763] ---[ end trace 0e90a20d0aa494f7 ]--
      
      The root cause is that the qib/hfi1 post receive call to rvt_lkey_ok()
      doesn't interpret the new return value from rvt_lkey_ok() properly
      leading to an mr reference count underrun.
      
      Additionally, remove an unused argument in rvt_sge_adjacent()
      aw well as an unneeded incr local in rvt_post_one_wr().
      
      Fixes: Commit 14fe13fc ("IB/rdmavt: Compress adjacent SGEs in rvt_lkey_ok()")
      Signed-off-by: NMike Marciniszyn <mike.marciniszyn@intel.com>
      Signed-off-by: NDennis Dalessandro <dennis.dalessandro@intel.com>
      Signed-off-by: NDoug Ledford <dledford@redhat.com>
      3ffea7d8
  8. 24 7月, 2017 7 次提交
  9. 20 7月, 2017 2 次提交
  10. 18 7月, 2017 3 次提交
    • Y
      IB/rxe: Set dma_mask and coherent_dma_mask · 56012e1c
      yonatanc 提交于
      The RXE coupled with dummy device causes to the kernel panic attached
      below.  The panic happens when ib_register_device tries to set dma_mask
      by accessing a NULLed parent device.
      
      The RXE does not actually use DMA, so we can set the dma_mask
      to architecture value.
      
      [16240.199689] RIP: 0010:ib_register_device+0x468/0x5a0 [ib_core]
      [16240.205289] RSP: 0018:ffffc9000220fc10 EFLAGS: 00010246
      [16240.209909] RAX: 0000000000000024 RBX: ffff880220d1a2a8 RCX: 0000000000000000
      [16240.212244] RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000009
      [16240.214385] RBP: ffffc9000220fcb0 R08: 0000000000000000 R09: 000000000000023f
      [16240.254465] R10: 0000000000000007 R11: 0000000000000000 R12: 0000000000000000
      [16240.259467] R13: 0000000000000000 R14: 0000000000000000 R15: ffff880220d1a2a8
      [16240.263314] FS:  00007fd8ecca0740(0000) GS:ffff8802364c0000(0000) knlGS:0000000000000000
      [16240.267292] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [16240.273503] CR2: 0000000000000218 CR3: 00000002253ba000 CR4: 00000000000006e0
      [16240.277066] Call Trace:
      [16240.281836]  ? __kmalloc+0x26f/0x280
      [16240.286596]  rxe_register_device+0x297/0x300 [rdma_rxe]
      [16240.291377]  rxe_add+0x535/0x5b0 [rdma_rxe]
      [16240.297586]  rxe_net_add+0x3e/0xc0 [rdma_rxe]
      [16240.302375]  rxe_param_set_add+0x65/0x144 [rdma_rxe]
      [16240.307769]  param_attr_store+0x68/0xd0
      [16240.311640]  module_attr_store+0x1d/0x30
      [16240.316421]  sysfs_kf_write+0x3a/0x50
      [16240.317802]  kernfs_fop_write+0xff/0x180
      [16240.322989]  __vfs_write+0x37/0x140
      [16240.328164]  ? handle_mm_fault+0xce/0x240
      [16240.333340]  vfs_write+0xb2/0x1b0
      [16240.335013]  SyS_write+0x55/0xc0
      [16240.340632]  entry_SYSCALL_64_fastpath+0x1a/0xa9
      
      Fixes: 8700e3e7 ("Soft RoCE driver")
      Signed-off-by: NYonatan Cohen <yonatanc@mellanox.com>
      Reviewed-by: NMoni Shoua <monis@mellanox.com>
      Signed-off-by: NLeon Romanovsky <leon@kernel.org>
      Reviewed-by: NJohannes Thumshirn <jthumshirn@suse.de>
      Signed-off-by: NDoug Ledford <dledford@redhat.com>
      56012e1c
    • Y
      IB/rxe: Fix kernel panic from skb destructor · fda85ce9
      Yonatan Cohen 提交于
      In the time between rxe_send has finished and skb destructor
      called, the QP's ref count might be 0, leading to a possible
      QP destruction. This will lead to a kernel panic when the destructor
      dereferences the QP.
      
      The operation of incrementing QP ref count at rxe_send and decrementing
      from skb destructor will prevent this crash.
      
      BUG: unable to handle kernel NULL pointer dereference at 000000000000072c
      IP: [<ffffffffa05df765>] rxe_skb_tx_dtor+0x15/0x50 [rdma_rxe]
      PGD 0 [16240.211178]
      Oops: 0002 [#1] SMP
      CPU: 3 PID: 0 Comm: swapper/3 Tainted: G           OE   4.9.0-mlnx #1
      Hardware name: Red Hat KVM, BIOS Bochs 01/01/2011
      task: ffff88042d6b1480 task.stack: ffffc90001904000
      RIP: 0010:[<ffffffffa05df765>]  [<ffffffffa05df765>] rxe_skb_tx_dtor+0x15/0x50 [rdma_rxe]
      RSP: 0018:ffff88043fcc3df0  EFLAGS: 00010246
      RAX: 0000000000000000 RBX: ffff880429684700 RCX: ffff88042d248200
      RDX: 00000000ffffffff RSI: 00000000fffffe01 RDI: ffff880429684700
      RBP: ffff88043fcc3e00 R08: ffff88043fcda240 R09: 00000000ff2d1de6
      R10: 0000000000000000 R11: 00000000f49cf6fe R12: ffff880429684700
      R13: ffffffff81893f96 R14: ffffffff817d66f0 R15: ffff880427f74200
      FS:  0000000000000000(0000) GS:ffff88043fcc0000(0000) knlGS:0000000000000000
      CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      CR2: 000000000000072c CR3: 000000041d3df000 CR4: 00000000000006e0
      Stack:
       ffffffff817b29cf ffff880429684700 ffff88043fcc3e18 ffffffff817b42c2
       ffff880429684700 ffff88043fcc3e40 ffffffff817b4332 ffff880429684700
       ffff880427f74238 ffff880427f74228 ffff88043fcc3e58 ffffffff81893f96
      Call Trace:
       <IRQ> [16240.336345]  [<ffffffff817b29cf>] ? skb_release_head_state+0x4f/0xb0
       [<ffffffff817b42c2>] skb_release_all+0x12/0x30
       [<ffffffff817b4332>] kfree_skb+0x32/0x90
       [<ffffffff81893f96>] ndisc_error_report+0x36/0x40
       [<ffffffff817d4de1>] neigh_invalidate+0x81/0xf0
       [<ffffffff817d68f7>] neigh_timer_handler+0x207/0x2b0
       [<ffffffff81109295>] call_timer_fn+0x35/0x120
       [<ffffffff81109db7>] run_timer_softirq+0x1d7/0x460
       [<ffffffff8106155e>] ? kvm_sched_clock_read+0x1e/0x30
       [<ffffffff810366b9>] ? sched_clock+0x9/0x10
       [<ffffffff810cfed2>] ? sched_clock_cpu+0x72/0xa0
       [<ffffffff818dd537>] __do_softirq+0xd7/0x289
       [<ffffffff810a6c95>] irq_exit+0xb5/0xc0
       [<ffffffff818dd372>] smp_apic_timer_interrupt+0x42/0x50
       [<ffffffff818dc682>] apic_timer_interrupt+0x82/0x90
       <EOI> [16240.395776]  [<ffffffff818da156>] ? native_safe_halt+0x6/0x10
       [<ffffffff818d9e6e>] default_idle+0x1e/0xd0
       [<ffffffff8103797f>] arch_cpu_idle+0xf/0x20
       [<ffffffff818da2c5>] default_idle_call+0x35/0x40
       [<ffffffff810e3eb5>] cpu_startup_entry+0x185/0x210
       [<ffffffff81050433>] start_secondary+0x103/0x130
      RIP  [<ffffffffa05df765>] rxe_skb_tx_dtor+0x15/0x50 [rdma_rxe]
      
      Fixes: 8700e3e7 ("Soft RoCE driver")
      Signed-off-by: NYonatan Cohen <yonatanc@mellanox.com>
      Reviewed-by: NMoni Shoua <monis@mellanox.com>
      Signed-off-by: NLeon Romanovsky <leon@kernel.org>
      Reviewed-by: NJohannes Thumshirn <jthumshirn@suse.de>
      Signed-off-by: NDoug Ledford <dledford@redhat.com>
      fda85ce9
    • L
      IB/{rdmavt, qib, hfi1}: Remove gfp flags argument · 0f4d027c
      Leon Romanovsky 提交于
      The caller to the driver marks GFP_NOIO allocations with help
      of memalloc_noio-* calls now. This makes redundant to pass down
      to the driver gfp flags, which can be GFP_KERNEL only.
      
      The patch removes the gfp flags argument and updates all driver paths.
      Signed-off-by: NLeon Romanovsky <leonro@mellanox.com>
      Signed-off-by: NLeon Romanovsky <leon@kernel.org>
      Acked-by: NDennis Dalessandro <dennis.dalessandro@intel.com>
      Signed-off-by: NDoug Ledford <dledford@redhat.com>
      0f4d027c
  11. 13 7月, 2017 1 次提交
    • K
      IB/rxe: do not copy extra stack memory to skb · 4c93496f
      Kees Cook 提交于
      This fixes a over-read condition detected by FORTIFY_SOURCE for this
      line:
      
      	memcpy(SKB_TO_PKT(skb), &ack_pkt, sizeof(skb->cb));
      
      The error was:
      
        In file included from ./include/linux/bitmap.h:8:0,
                         from ./include/linux/cpumask.h:11,
                         from ./include/linux/mm_types_task.h:13,
                         from ./include/linux/mm_types.h:4,
                         from ./include/linux/kmemcheck.h:4,
                         from ./include/linux/skbuff.h:18,
                         from drivers/infiniband/sw/rxe/rxe_resp.c:34:
        In function 'memcpy',
            inlined from 'send_atomic_ack.constprop' at drivers/infiniband/sw/rxe/rxe_resp.c:998:2,
            inlined from 'acknowledge' at drivers/infiniband/sw/rxe/rxe_resp.c:1026:3,
            inlined from 'rxe_responder' at drivers/infiniband/sw/rxe/rxe_resp.c:1286:10:
        ./include/linux/string.h:309:4: error: call to '__read_overflow2' declared with attribute error: detected read beyond size of object passed as 2nd parameter
            __read_overflow2();
      
      Daniel Micay noted that struct rxe_pkt_info is 32 bytes on 32-bit
      architectures, but skb->cb is still 64.  The memcpy() over-reads 32
      bytes.  This fixes it by zeroing the unused bytes in skb->cb.
      
      Link: http://lkml.kernel.org/r/1497903987-21002-5-git-send-email-keescook@chromium.orgSigned-off-by: NKees Cook <keescook@chromium.org>
      Cc: Moni Shoua <monis@mellanox.com>
      Cc: Doug Ledford <dledford@redhat.com>
      Cc: Sean Hefty <sean.hefty@intel.com>
      Cc: Daniel Micay <danielmicay@gmail.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      4c93496f
  12. 28 6月, 2017 4 次提交