From: Cesar Eduardo Barros <cesarb@cesarb.net>
To: Cesar Eduardo Barros <cesarb@cesarb.net>
Cc: Daniel Walker <dwalker@fifo99.com>,
linux-kernel@vger.kernel.org,
Andrew Morton <akpm@linux-foundation.org>,
Roland Dreier <rolandd@cisco.com>
Subject: Re: [PATCH] WARN_ONCE(): use bool for boolean flag
Date: Sun, 27 Sep 2009 15:12:55 -0300 [thread overview]
Message-ID: <4ABFAB27.1040608@cesarb.net> (raw)
In-Reply-To: <4ABFA583.6030908@cesarb.net>
Cesar Eduardo Barros escreveu:
> Daniel Walker escreveu:
>> On Sun, 2009-09-27 at 14:24 -0300, Cesar Eduardo Barros wrote:
>>
>>> In fact, I was expecting no change at all, since gcc should be able
>>> to see it is being treated as a boolean (perhaps I am trusting gcc
>>> too much). And to make matters even more confusing, my own test
>>> changing all __ret_warn_once to bool and dropping the !! caused an
>>> _increase_ of 598 bytes (x86-64 defconfig).
>>>
>>> text data bss dec hex filename
>>> 8100553 1207148 991988 10299689 9d2929 vmlinux.warnret.before
>>> 8101119 1207180 991988 10300287 9d2b7f vmlinux.warnret.after
>>>
>>> (And yes, data increased again.)
>>
>> If this was just your regular base line config , then that is odd .. I
>> also would think worse case would be no size reduction .. I did my
>> compile test on x86-32 btw..
>
> I will try looking at the first function which shows a difference in
> size (which appears to be handle_irq) and see what I can find.
I just took a quick look, and it does seem to be bad code generation
(the gcc on this machine is a bit old). The question is, is the gain in
less buggy gcc versions enough to offset the loss in older and buggier
gcc versions?
The function in question (stack_overflow_check() in
arch/x86/kernel/irq_64.c) has a somewhat complex expression in the call
to WARN_ON, which gcc seems to be pessimizing in this case (it is
storing the boolean in a register just to test it again).
I will send the patch I am using in the next email.
gcc (Ubuntu 4.3.2-1ubuntu12) 4.3.2
--- /dev/fd/63 2009-09-27 14:59:26.124947107 -0300
+++ /dev/fd/62 2009-09-27 14:59:26.144947152 -0300
@@ -246,14 +246,14 @@
pushq %rbp
#APP
# 14
"/scratch/build/cesarb/linux/linux-2.6/arch/x86/include/asm/current.h" 1
- movq %gs:per_cpu__current_task,%rcx
+ movq %gs:per_cpu__current_task,%rax
# 0 "" 2
#NO_APP
movq %rsp, %rbp
pushq %rbx
movl %edi, %ebx
subq $8, %rsp
- movq 8(%rcx), %r8
+ movq 8(%rax), %r8
movq 152(%rsi), %rdx
cmpq %r8, %rdx
jb .L24
@@ -262,28 +262,40 @@
ja .L24
leaq 400(%r8), %rax
cmpq %rax, %rdx
- jae .L24
+ setb %al
+ movzbl %al, %eax
+ jmp .L25
+.L24:
+ xorl %eax, %eax
+.L25:
+ testl %eax, %eax
+ je .L26
cmpb $0, __warned.21424(%rip)
- jne .L24
+ jne .L26
movq %rdx, %r9
- addq $1112, %rcx
- movq $.LC3, %rdx
movl $47, %esi
+ movq $.LC3, %rdx
+#APP
+# 14
"/scratch/build/cesarb/linux/linux-2.6/arch/x86/include/asm/current.h" 1
+ movq %gs:per_cpu__current_task,%rcx
+# 0 "" 2
+#NO_APP
movq $.LC0, %rdi
+ addq $1112, %rcx
xorl %eax, %eax
call warn_slowpath_fmt
movb $1, __warned.21424(%rip)
-.L24:
+.L26:
movl %ebx, %edi
call irq_to_desc
xorl %edx, %edx
testq %rax, %rax
- je .L26
+ je .L28
movq %rax, %rsi
movl %ebx, %edi
call *24(%rax)
movb $1, %dl
-.L26:
+.L28:
movb %dl, %al
popq %rdx
popq %rbx
--
Cesar Eduardo Barros
cesarb@cesarb.net
cesar.barros@gmail.com
next prev parent reply other threads:[~2009-09-27 18:12 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-09-27 13:53 [PATCH] WARN_ONCE(): use bool for boolean flag Cesar Eduardo Barros
2009-09-27 14:03 ` Daniel Walker
2009-09-27 15:56 ` Cesar Eduardo Barros
2009-09-27 16:52 ` Daniel Walker
2009-09-27 17:24 ` Cesar Eduardo Barros
2009-09-27 17:32 ` Daniel Walker
2009-09-27 17:48 ` Cesar Eduardo Barros
2009-09-27 18:12 ` Cesar Eduardo Barros [this message]
2009-09-27 18:25 ` [PATCH] WARN_ONCE(): use bool for condition Cesar Eduardo Barros
2009-09-27 18:28 ` Daniel Walker
2009-09-27 18:55 ` Cesar Eduardo Barros
2009-09-27 19:03 ` Daniel Walker
2009-09-29 20:59 ` Andrew Morton
2009-09-29 23:11 ` Cesar Eduardo Barros
2009-09-29 23:12 ` [PATCH] WARN_ONCE(): use bool for boolean flag Cesar Eduardo Barros
2009-09-30 0:17 ` Andrew Morton
2009-09-30 0:37 ` Cesar Eduardo Barros
2009-09-29 23:18 ` [PATCH] WARN_ONCE(): use bool for condition Cesar Eduardo Barros
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4ABFAB27.1040608@cesarb.net \
--to=cesarb@cesarb.net \
--cc=akpm@linux-foundation.org \
--cc=dwalker@fifo99.com \
--cc=linux-kernel@vger.kernel.org \
--cc=rolandd@cisco.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.