• P
    tick/nohz: Evaluate the CPU expression after the static key · f105dfec
    Peter Zijlstra 提交于
    When tick_nohz_full_cpu() is called with smp_processor_id(), the latter
    is unconditionally evaluated whether the static key is on or off. It is
    not necessary in the off-case though, so make sure the cpu expression
    is executed at the last moment.
    
    Illustrate with the following test function:
    
    	int tick_nohz_test(void)
    	{
    		return tick_nohz_full_cpu(smp_processor_id());
    	}
    
    The resulting code before was:
    
    	mov    %gs:0x7eea92d1(%rip),%eax   # smp_processor_id() fetch
    	nopl   0x0(%rax,%rax,1)
    	xor    %eax,%eax
    	retq
    	cmpb   $0x0,0x29d393a(%rip)        # <tick_nohz_full_running>
    	je     tick_nohz_test+0x29         # jump to below eax clear
    	mov    %eax,%eax
    	bt     %rax,0x29d3936(%rip)        # <tick_nohz_full_mask>
    	setb   %al
    	movzbl %al,%eax
    	retq
    	xor    %eax,%eax
    	retq
    
    Now it becomes:
    
    	nopl   0x0(%rax,%rax,1)
    	xor    %eax,%eax
    	retq
    	cmpb   $0x0,0x29d3871(%rip)        # <tick_nohz_full_running>
    	je     tick_nohz_test+0x29         # jump to below eax clear
    	mov    %gs:0x7eea91f0(%rip),%eax   # smp_processor_id() fetch, after static key
    	mov    %eax,%eax
    	bt     %rax,0x29d3866(%rip)        # <tick_nohz_full_mask>
    	setb   %al
    	movzbl %al,%eax
    	retq
    	xor    %eax,%eax
    	retq
    Signed-off-by: NPeter Zijlstra <peterz@infradead.org>
    Signed-off-by: NFrederic Weisbecker <frederic@kernel.org>
    Signed-off-by: NIngo Molnar <mingo@kernel.org>
    Link: https://lore.kernel.org/r/20210512232924.150322-2-frederic@kernel.org
    f105dfec
tick.h 9.6 KB