1. 15 Sep, 2020 4 commits
  2. 14 Sep, 2020 3 commits
  3. 09 Sep, 2020 1 commit
  4. 08 Sep, 2020 29 commits
  5. 03 Sep, 2020 1 commit
  6. 02 Sep, 2020 2 commits
    • Aneesh Kumar K.V's avatar
      powerpc/mm: Remove DEBUG_VM_PGTABLE support on powerpc · 675bceb0
      Aneesh Kumar K.V authored
      The test is broken w.r.t page table update rules and results in kernel
      crash as below. Disable the support until we get the tests updated.
      
      [   21.083519] kernel BUG at arch/powerpc/mm/pgtable.c:304!
      cpu 0x0: Vector: 700 (Program Check) at [c000000c6d1e76c0]
          pc: c00000000009a5ec: assert_pte_locked+0x14c/0x380
          lr: c0000000005eeeec: pte_update+0x11c/0x190
          sp: c000000c6d1e7950
         msr: 8000000002029033
        current = 0xc000000c6d172c80
        paca    = 0xc000000003ba0000   irqmask: 0x03   irq_happened: 0x01
          pid   = 1, comm = swapper/0
      kernel BUG at arch/powerpc/mm/pgtable.c:304!
      [link register   ] c0000000005eeeec pte_update+0x11c/0x190
      [c000000c6d1e7950] 0000000000000001 (unreliable)
      [c000000c6d1e79b0] c0000000005eee14 pte_update+0x44/0x190
      [c000000c6d1e7a10] c000000001a2ca9c pte_advanced_tests+0x160/0x3d8
      [c000000c6d1e7ab0] c000000001a2d4fc debug_vm_pgtable+0x7e8/0x1338
      [c000000c6d1e7ba0] c0000000000116ec do_one_initcall+0xac/0x5f0
      [c000000c6d1e7c80] c0000000019e4fac kernel_init_freeable+0x4dc/0x5a4
      [c000000c6d1e7db0] c000000000012474 kernel_init+0x24/0x160
      [c000000c6d1e7e20] c00000000000cbd0 ret_from_kernel_thread+0x5c/0x6c
      
      With DEBUG_VM disabled
      
      [   20.530152] BUG: Kernel NULL pointer dereference on read at 0x00000000
      [   20.530183] Faulting instruction address: 0xc0000000000df330
      cpu 0x33: Vector: 380 (Data SLB Access) at [c000000c6d19f700]
          pc: c0000000000df330: memset+0x68/0x104
          lr: c00000000009f6d8: hash__pmdp_huge_get_and_clear+0xe8/0x1b0
          sp: c000000c6d19f990
         msr: 8000000002009033
         dar: 0
        current = 0xc000000c6d177480
        paca    = 0xc00000001ec4f400   irqmask: 0x03   irq_happened: 0x01
          pid   = 1, comm = swapper/0
      [link register   ] c00000000009f6d8 hash__pmdp_huge_get_and_clear+0xe8/0x1b0
      [c000000c6d19f990] c00000000009f748 hash__pmdp_huge_get_and_clear+0x158/0x1b0 (unreliable)
      [c000000c6d19fa10] c0000000019ebf30 pmd_advanced_tests+0x1f0/0x378
      [c000000c6d19fab0] c0000000019ed088 debug_vm_pgtable+0x79c/0x1244
      [c000000c6d19fba0] c0000000000116ec do_one_initcall+0xac/0x5f0
      [c000000c6d19fc80] c0000000019a4fac kernel_init_freeable+0x4dc/0x5a4
      [c000000c6d19fdb0] c000000000012474 kernel_init+0x24/0x160
      [c000000c6d19fe20] c00000000000cbd0 ret_from_kernel_thread+0x5c/0x6c
      33:mon>
      Signed-off-by: default avatarAneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/20200902040122.136414-1-aneesh.kumar@linux.ibm.com
      675bceb0
    • Christophe Leroy's avatar
      powerpc/uaccess: Use flexible addressing with __put_user()/__get_user() · c20beffe
      Christophe Leroy authored
      At the time being, __put_user()/__get_user() and friends only use
      D-form addressing, with 0 offset. Ex:
      
      	lwz	reg1, 0(reg2)
      
      Give the compiler the opportunity to use other adressing modes
      whenever possible, to get more optimised code.
      
      Hereunder is a small exemple:
      
      struct test {
      	u32 item1;
      	u16 item2;
      	u8 item3;
      	u64 item4;
      };
      
      int set_test_user(struct test __user *from, struct test __user *to)
      {
      	int err;
      	u32 item1;
      	u16 item2;
      	u8 item3;
      	u64 item4;
      
      	err = __get_user(item1, &from->item1);
      	err |= __get_user(item2, &from->item2);
      	err |= __get_user(item3, &from->item3);
      	err |= __get_user(item4, &from->item4);
      
      	err |= __put_user(item1, &to->item1);
      	err |= __put_user(item2, &to->item2);
      	err |= __put_user(item3, &to->item3);
      	err |= __put_user(item4, &to->item4);
      
      	return err;
      }
      
      Before the patch:
      
      00000df0 <set_test_user>:
       df0:	94 21 ff f0 	stwu    r1,-16(r1)
       df4:	39 40 00 00 	li      r10,0
       df8:	93 c1 00 08 	stw     r30,8(r1)
       dfc:	93 e1 00 0c 	stw     r31,12(r1)
       e00:	7d 49 53 78 	mr      r9,r10
       e04:	80 a3 00 00 	lwz     r5,0(r3)
       e08:	38 e3 00 04 	addi    r7,r3,4
       e0c:	7d 46 53 78 	mr      r6,r10
       e10:	a0 e7 00 00 	lhz     r7,0(r7)
       e14:	7d 29 33 78 	or      r9,r9,r6
       e18:	39 03 00 06 	addi    r8,r3,6
       e1c:	7d 46 53 78 	mr      r6,r10
       e20:	89 08 00 00 	lbz     r8,0(r8)
       e24:	7d 29 33 78 	or      r9,r9,r6
       e28:	38 63 00 08 	addi    r3,r3,8
       e2c:	7d 46 53 78 	mr      r6,r10
       e30:	83 c3 00 00 	lwz     r30,0(r3)
       e34:	83 e3 00 04 	lwz     r31,4(r3)
       e38:	7d 29 33 78 	or      r9,r9,r6
       e3c:	7d 43 53 78 	mr      r3,r10
       e40:	90 a4 00 00 	stw     r5,0(r4)
       e44:	7d 29 1b 78 	or      r9,r9,r3
       e48:	38 c4 00 04 	addi    r6,r4,4
       e4c:	7d 43 53 78 	mr      r3,r10
       e50:	b0 e6 00 00 	sth     r7,0(r6)
       e54:	7d 29 1b 78 	or      r9,r9,r3
       e58:	38 e4 00 06 	addi    r7,r4,6
       e5c:	7d 43 53 78 	mr      r3,r10
       e60:	99 07 00 00 	stb     r8,0(r7)
       e64:	7d 23 1b 78 	or      r3,r9,r3
       e68:	38 84 00 08 	addi    r4,r4,8
       e6c:	93 c4 00 00 	stw     r30,0(r4)
       e70:	93 e4 00 04 	stw     r31,4(r4)
       e74:	7c 63 53 78 	or      r3,r3,r10
       e78:	83 c1 00 08 	lwz     r30,8(r1)
       e7c:	83 e1 00 0c 	lwz     r31,12(r1)
       e80:	38 21 00 10 	addi    r1,r1,16
       e84:	4e 80 00 20 	blr
      
      After the patch:
      
      00000dbc <set_test_user>:
       dbc:	39 40 00 00 	li      r10,0
       dc0:	7d 49 53 78 	mr      r9,r10
       dc4:	80 03 00 00 	lwz     r0,0(r3)
       dc8:	7d 48 53 78 	mr      r8,r10
       dcc:	a1 63 00 04 	lhz     r11,4(r3)
       dd0:	7d 29 43 78 	or      r9,r9,r8
       dd4:	7d 48 53 78 	mr      r8,r10
       dd8:	88 a3 00 06 	lbz     r5,6(r3)
       ddc:	7d 29 43 78 	or      r9,r9,r8
       de0:	7d 48 53 78 	mr      r8,r10
       de4:	80 c3 00 08 	lwz     r6,8(r3)
       de8:	80 e3 00 0c 	lwz     r7,12(r3)
       dec:	7d 29 43 78 	or      r9,r9,r8
       df0:	7d 43 53 78 	mr      r3,r10
       df4:	90 04 00 00 	stw     r0,0(r4)
       df8:	7d 29 1b 78 	or      r9,r9,r3
       dfc:	7d 43 53 78 	mr      r3,r10
       e00:	b1 64 00 04 	sth     r11,4(r4)
       e04:	7d 29 1b 78 	or      r9,r9,r3
       e08:	7d 43 53 78 	mr      r3,r10
       e0c:	98 a4 00 06 	stb     r5,6(r4)
       e10:	7d 23 1b 78 	or      r3,r9,r3
       e14:	90 c4 00 08 	stw     r6,8(r4)
       e18:	90 e4 00 0c 	stw     r7,12(r4)
       e1c:	7c 63 53 78 	or      r3,r3,r10
       e20:	4e 80 00 20 	blr
      Signed-off-by: default avatarChristophe Leroy <christophe.leroy@csgroup.eu>
      Reviewed-by: default avatarSegher Boessenkool <segher@kernel.crashing.org>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/c27bc4e598daf3bbb225de7a1f5c52121cf1e279.1597235091.git.christophe.leroy@csgroup.eu
      c20beffe