1. 14 Sep, 2020 3 commits
  2. 09 Sep, 2020 1 commit
  3. 08 Sep, 2020 29 commits
  4. 03 Sep, 2020 1 commit
  5. 02 Sep, 2020 6 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
    • Christophe Leroy's avatar
    • Stephen Rothwell's avatar
      powerpc: unrel_branch_check.sh: enable the use of llvm-objdump v9, 10 or 11 · 6b1992bc
      Stephen Rothwell authored
      Currently, using llvm-objtool, this script just silently succeeds without
      actually do the intended checking.  So this updates it to work properly.
      
      Firstly, llvm-objdump does not add target symbol names to the end
      of branches in its asm output, so we have to drop the branch to
      __start_initialization_multiplatform using its address.
      
      Secondly, v9 and 10 specify branch targets as .+<offset>, so we convert
      those to actual addresses.
      
      Thirdly, v10 and 11 error out on a vmlinux if given the -R option
      complaining that it is "not a dynamic object".  The -R does not make
      any difference to the asm output, so remove it.
      
      Lastly, v11 produces asm that is very similar to Gnu objtool (at least
      as far as branches are concerned), so no further changes are necessary
      to make it work.
      Signed-off-by: default avatarStephen Rothwell <sfr@canb.auug.org.au>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/20200812081036.7969-3-sfr@canb.auug.org.au
      6b1992bc
    • Stephen Rothwell's avatar
      powerpc: unrel_branch_check.sh: use nm to find symbol value · b71dca98
      Stephen Rothwell authored
      This is considerably faster then parsing the objdump asm output.  It will
      also make the enabling of llvm-objdump a little easier.
      Signed-off-by: default avatarStephen Rothwell <sfr@canb.auug.org.au>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/20200812081036.7969-2-sfr@canb.auug.org.au
      b71dca98
    • Stephen Rothwell's avatar
      powerpc: unrel_branch_check.sh: exit silently for early errors · af13a224
      Stephen Rothwell authored
      If we can't find the address of __end_interrupts, then we still exit
      successfully as that is the current behaviour.
      Signed-off-by: default avatarStephen Rothwell <sfr@canb.auug.org.au>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/20200811140435.20957-8-sfr@canb.auug.org.au
      af13a224