Excerpts from Christophe Leroy's message of February 11, 2021 2:44 am:
> As far as I can see, almost all callers of unrecoverable_exception() expect 
> it to never return.
> 
> Can we mark it __noreturn ?

I don't see why not, do_exit is noreturn. We could make die() noreturn 
as well.

> 
> 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

Nice!

Thanks,
Nick

> 
> 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
> 

Reply via email to