On Mon, Mar 20, 2017 at 11:08 AM, Jani Nikula <jani.nikula@xxxxxxxxxxxxxxx> wrote: > On Mon, 20 Mar 2017, Arnd Bergmann <arnd@xxxxxxxx> wrote: >> The varargs macro trick in _PIPE3/_PHY3/_PORT3 was meant as an optimization >> to shrink the i915 kernel module by around 1000 bytes. > > To be clear, it was not at all intended to be an optimization, nothing > of the sort. The intention was to make it easier and less error prone to > add more parameters to said macros. The text size shring was just a > bonus. > >> However, the >> downside is a size regression with CONFIG_KASAN, as I found from stack size >> warnings with gcc-7.0.1: > > In his review of the original change, Chris provided this comparison > https://godbolt.org/g/YCK1od > > How does CONFIG_KASAN change this? Would be nice to see how the > generated code blows up. > I don't know how to generate a URL for it, but after adding this to the command line for gcc-7, -fsanitize=kernel-address -fasan-shadow-offset=0xdfff900000000000 --param asan-stack=1 --param asan-globals=1 --param asan-instrumentation-with-call-threshold=10000 -fsanitize-address-use-after-scope the code turned from really nice into the log series of checks below. Without -fsanitize-address-use-after-scope (which didn't exist before gcc-7), it's less bad but still exceeds the (arbitrary) 1536 byte limit. Arnd .LC0: .string "2 32 4 1 i 96 24 9 <unknown> " main: .LASANPC0: pushq %r12 pushq %rbp movabsq $-2305966154516004864, %rdx pushq %rbx subq $160, %rsp movq %rsp, %rbp leaq 96(%rsp), %rbx movq $1102416563, (%rsp) shrq $3, %rbp movq $.LC0, 8(%rsp) movq $.LASANPC0, 16(%rsp) leaq 0(%rbp,%rdx), %rax movl $-235802127, (%rax) movl $-218959356, 4(%rax) movl $-218959118, 8(%rax) movl $-234881024, 12(%rax) movl $-202116109, 16(%rax) movq %rbx, %rax movl $1, 32(%rsp) shrq $3, %rax movzbl (%rax,%rdx), %eax testb %al, %al je .L2 cmpb $3, %al jle .L53 .L2: leaq 4(%rbx), %rdi movabsq $-2305966154516004864, %rax movl $0, 96(%rsp) movq %rdi, %rdx shrq $3, %rdx movzbl (%rdx,%rax), %edx movq %rdi, %rax andl $7, %eax addl $3, %eax cmpb %dl, %al jl .L3 testb %dl, %dl jne .L54 .L3: leaq 8(%rbx), %rdi movabsq $-2305966154516004864, %rax movl $1, 100(%rsp) movq %rdi, %rdx shrq $3, %rdx movzbl (%rdx,%rax), %eax testb %al, %al je .L4 cmpb $3, %al jle .L55 .L4: leaq 12(%rbx), %rdi movabsq $-2305966154516004864, %rax movl $2, 104(%rsp) movq %rdi, %rdx shrq $3, %rdx movzbl (%rdx,%rax), %edx movq %rdi, %rax andl $7, %eax addl $3, %eax cmpb %dl, %al jl .L5 testb %dl, %dl jne .L56 .L5: leaq 16(%rbx), %rdi movabsq $-2305966154516004864, %rax movl $3, 108(%rsp) movq %rdi, %rdx shrq $3, %rdx movzbl (%rdx,%rax), %eax testb %al, %al je .L6 cmpb $3, %al jle .L57 .L6: leaq 20(%rbx), %rdi movabsq $-2305966154516004864, %rax movl $4, 112(%rsp) movq %rdi, %rdx shrq $3, %rdx movzbl (%rdx,%rax), %edx movq %rdi, %rax andl $7, %eax addl $3, %eax cmpb %dl, %al jl .L7 testb %dl, %dl jne .L58 .L7: movslq 32(%rsp), %r12 movabsq $-2305966154516004864, %rax movl $5, 116(%rsp) leaq (%rbx,%r12,4), %rdi movq %rdi, %rdx shrq $3, %rdx movzbl (%rdx,%rax), %edx movq %rdi, %rax andl $7, %eax addl $3, %eax cmpb %dl, %al jl .L8 testb %dl, %dl jne .L59 .L8: pxor %xmm0, %xmm0 movabsq $-2305966154516004864, %rdx movl 96(%rsp,%r12,4), %eax movl $0, 16(%rdx,%rbp) movups %xmm0, 0(%rbp,%rdx) addq $160, %rsp popq %rbx popq %rbp popq %r12 ret .L59: call __asan_report_load4_noabort jmp .L8 .L58: call __asan_report_store4_noabort jmp .L7 .L57: call __asan_report_store4_noabort jmp .L6 .L56: call __asan_report_store4_noabort jmp .L5 .L55: call __asan_report_store4_noabort jmp .L4 .L54: call __asan_report_store4_noabort jmp .L3 .L53: movq %rbx, %rdi call __asan_report_store4_noabort jmp .L2 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx