• Cheng Jian's avatar
    sched/idle: Micro-optimize the idle loop · 54b933c6
    Cheng Jian authored
    Move the loop-invariant calculation of 'cpu' in do_idle() out of the loop body,
    because the current CPU is always constant.
    
    This improves the generated code both on x86-64 and ARM64:
    
    x86-64:
    
    Before patch (execution in loop):
    	864:       0f ae e8                lfence
    	867:       65 8b 05 c2 38 f1 7e    mov %gs:0x7ef138c2(%rip),%eax
    	86e:       89 c0                   mov %eax,%eax
    	870:       48 0f a3 05 68 19 08    bt  %rax,0x1081968(%rip)
    	877:	   01
    
    After patch (execution in loop):
    	872:       0f ae e8                lfence
    	875:       4c 0f a3 25 63 19 08    bt  %r12,0x1081963(%rip)
    	87c:       01
    
    ARM64:
    
    Before patch (execution in loop):
    	c58:       d5033d9f        dsb     ld
    	c5c:       d538d080        mrs     x0, tpidr_el1
    	c60:       b8606a61        ldr     w1, [x19,x0]
    	c64:       1100fc20        add     w0, w1, #0x3f
    	c68:       7100003f        cmp     w1, #0x0
    	c6c:       1a81b000        csel    w0, w0, w1, lt
    	c70:       13067c00        asr     w0, w0, #6
    	c74:       93407c00        sxtw    x0, w0
    	c78:       f8607a80        ldr     x0, [x20,x0,lsl #3]
    	c7c:       9ac12401        lsr     x1, x0, x1
    	c80:       36000581        tbz     w1, #0, d30 <do_idle+0x128>
    
    After patch (execution in loop):
    	c84:       d5033d9f        dsb     ld
    	c88:       f9400260        ldr     x0, [x19]
    	c8c:       ea14001f        tst     x0, x20
    	c90:       54000580        b.eq    d40 <do_idle+0x138>
    Signed-off-by: default avatarCheng Jian <cj.chengjian@huawei.com>
    [ Rewrote the title and the changelog. ]
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: huawei.libin@huawei.com
    Cc: xiexiuqi@huawei.com
    Link: http://lkml.kernel.org/r/1508930907-107755-1-git-send-email-cj.chengjian@huawei.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    54b933c6
Name
Last commit
Last update
Documentation Loading commit data...
arch Loading commit data...
block Loading commit data...
certs Loading commit data...
crypto Loading commit data...
drivers Loading commit data...
firmware Loading commit data...
fs Loading commit data...
include Loading commit data...
init Loading commit data...
ipc Loading commit data...
kernel Loading commit data...
lib Loading commit data...
mm Loading commit data...
net Loading commit data...
samples Loading commit data...
scripts Loading commit data...
security Loading commit data...
sound Loading commit data...
tools Loading commit data...
usr Loading commit data...
virt Loading commit data...
.cocciconfig Loading commit data...
.get_maintainer.ignore Loading commit data...
.gitattributes Loading commit data...
.gitignore Loading commit data...
.mailmap Loading commit data...
COPYING Loading commit data...
CREDITS Loading commit data...
Kbuild Loading commit data...
Kconfig Loading commit data...
MAINTAINERS Loading commit data...
Makefile Loading commit data...
README Loading commit data...