Declaring unrecoverable_exception() as __noreturn ?
From: Christophe Leroy <hidden>
Date: 2021-02-10 16:47:26
As far as I can see, almost all callers of unrecoverable_exception() expect it to never return. Can we mark it __noreturn ? Below is interrupt_exit_kernel_prepare() with then without unrecoverable_exception() declared as __noreturn. (CONFIG_PREEMPT_NONE, and with the BUG_ON() removed) With the __noreturn added, we get no stack frame on the likely path 000003a8 <interrupt_exit_kernel_prepare>: 3a8: 81 43 00 84 lwz r10,132(r3) 3ac: 71 4a 00 02 andi. r10,r10,2 3b0: 41 82 00 30 beq 3e0 <interrupt_exit_kernel_prepare+0x38> 3b4: 80 62 00 70 lwz r3,112(r2) 3b8: 74 63 00 01 andis. r3,r3,1 3bc: 40 82 00 34 bne 3f0 <interrupt_exit_kernel_prepare+0x48> 3c0: 7d 40 00 a6 mfmsr r10 3c4: 55 4a 04 5e rlwinm r10,r10,0,17,15 3c8: 7d 40 01 24 mtmsr r10 3cc: 7d 20 00 a6 mfmsr r9 3d0: 55 29 07 fa rlwinm r9,r9,0,31,29 3d4: 55 29 04 5e rlwinm r9,r9,0,17,15 3d8: 7d 20 01 24 mtmsr r9 3dc: 4e 80 00 20 blr 3e0: 94 21 ff f0 stwu r1,-16(r1) 3e4: 7c 08 02 a6 mflr r0 3e8: 90 01 00 14 stw r0,20(r1) 3ec: 48 00 00 01 bl 3ec <interrupt_exit_kernel_prepare+0x44> 3ec: R_PPC_REL24 unrecoverable_exception 3f0: 38 e2 00 70 addi r7,r2,112 3f4: 3d 00 00 01 lis r8,1 3f8: 7c c0 38 28 lwarx r6,0,r7 3fc: 7c c6 40 78 andc r6,r6,r8 400: 7c c0 39 2d stwcx. r6,0,r7 404: 40 a2 ff f4 bne 3f8 <interrupt_exit_kernel_prepare+0x50> 408: 38 60 00 01 li r3,1 40c: 4b ff ff b4 b 3c0 <interrupt_exit_kernel_prepare+0x18> Without the modification: 000003a8 <interrupt_exit_kernel_prepare>: 3a8: 94 21 ff f0 stwu r1,-16(r1) 3ac: 93 e1 00 0c stw r31,12(r1) 3b0: 81 23 00 84 lwz r9,132(r3) 3b4: 71 29 00 02 andi. r9,r9,2 3b8: 41 82 00 38 beq 3f0 <interrupt_exit_kernel_prepare+0x48> 3bc: 81 22 00 70 lwz r9,112(r2) 3c0: 75 23 00 01 andis. r3,r9,1 3c4: 40 82 00 4c bne 410 <interrupt_exit_kernel_prepare+0x68> 3c8: 7d 20 00 a6 mfmsr r9 3cc: 55 29 04 5e rlwinm r9,r9,0,17,15 3d0: 7d 20 01 24 mtmsr r9 3d4: 7d 20 00 a6 mfmsr r9 3d8: 55 29 07 fa rlwinm r9,r9,0,31,29 3dc: 55 29 04 5e rlwinm r9,r9,0,17,15 3e0: 7d 20 01 24 mtmsr r9 3e4: 83 e1 00 0c lwz r31,12(r1) 3e8: 38 21 00 10 addi r1,r1,16 3ec: 4e 80 00 20 blr 3f0: 7c 08 02 a6 mflr r0 3f4: 90 01 00 14 stw r0,20(r1) 3f8: 48 00 00 01 bl 3f8 <interrupt_exit_kernel_prepare+0x50> 3f8: R_PPC_REL24 unrecoverable_exception 3fc: 81 22 00 70 lwz r9,112(r2) 400: 80 01 00 14 lwz r0,20(r1) 404: 75 23 00 01 andis. r3,r9,1 408: 7c 08 03 a6 mtlr r0 40c: 41 82 ff bc beq 3c8 <interrupt_exit_kernel_prepare+0x20> 410: 39 02 00 70 addi r8,r2,112 414: 3d 20 00 01 lis r9,1 418: 7c e0 40 28 lwarx r7,0,r8 41c: 7c e7 48 78 andc r7,r7,r9 420: 7c e0 41 2d stwcx. r7,0,r8 424: 40 a2 ff f4 bne 418 <interrupt_exit_kernel_prepare+0x70> 428: 38 60 00 01 li r3,1 42c: 7d 20 00 a6 mfmsr r9 430: 55 29 04 5e rlwinm r9,r9,0,17,15 434: 7d 20 01 24 mtmsr r9 438: 7d 20 00 a6 mfmsr r9 43c: 55 29 07 fa rlwinm r9,r9,0,31,29 440: 55 29 04 5e rlwinm r9,r9,0,17,15 444: 7d 20 01 24 mtmsr r9 448: 83 e1 00 0c lwz r31,12(r1) 44c: 38 21 00 10 addi r1,r1,16 450: 4e 80 00 20 blr