* [PATCH] spi: fixed some core weirdness
@ 2010-10-21 19:06 Linus Walleij
[not found] ` <1287688004-27410-1-git-send-email-linus.walleij-0IS4wlFg1OjSUeElwK9/Pw@public.gmane.org>
0 siblings, 1 reply; 7+ messages in thread
From: Linus Walleij @ 2010-10-21 19:06 UTC (permalink / raw)
To: Grant Likely, spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f
Cc: Linus Walleij
Those things in the SPI core just strike me as particularly odd:
dev_dbg() used in an obvious error branch, and then two hardcoded
strings passed in as parameters.
Signed-off-by: Linus Walleij <linus.walleij-0IS4wlFg1OjSUeElwK9/Pw@public.gmane.org>
---
drivers/spi/spi.c | 10 +++++-----
1 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
index b5a78a1..fcaa200 100644
--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
@@ -300,16 +300,16 @@ int spi_add_device(struct spi_device *spi)
*/
status = spi_setup(spi);
if (status < 0) {
- dev_err(dev, "can't %s %s, status %d\n",
- "setup", dev_name(&spi->dev), status);
+ dev_err(dev, "can't setup %s, status %d\n",
+ dev_name(&spi->dev), status);
goto done;
}
/* Device may be bound to an active driver when this returns */
status = device_add(&spi->dev);
if (status < 0)
- dev_err(dev, "can't %s %s, status %d\n",
- "add", dev_name(&spi->dev), status);
+ dev_err(dev, "can't add %s, status %d\n",
+ dev_name(&spi->dev), status);
else
dev_dbg(dev, "registered child %s\n", dev_name(&spi->dev));
@@ -652,7 +652,7 @@ int spi_setup(struct spi_device *spi)
*/
bad_bits = spi->mode & ~spi->master->mode_bits;
if (bad_bits) {
- dev_dbg(&spi->dev, "setup: unsupported mode bits %x\n",
+ dev_err(&spi->dev, "setup: unsupported mode bits %x\n",
bad_bits);
return -EINVAL;
}
--
1.6.3.3
------------------------------------------------------------------------------
Nokia and AT&T present the 2010 Calling All Innovators-North America contest
Create new apps & games for the Nokia N8 for consumers in U.S. and Canada
$10 million total in prizes - $4M cash, 500 devices, nearly $6M in marketing
Develop with Nokia Qt SDK, Web Runtime, or Java and Publish to Ovi Store
http://p.sf.net/sfu/nokia-dev2dev
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH] spi: fixed some core weirdness
[not found] ` <1287688004-27410-1-git-send-email-linus.walleij-0IS4wlFg1OjSUeElwK9/Pw@public.gmane.org>
@ 2010-10-21 22:28 ` David Brownell
2010-10-21 23:11 ` Linus Walleij
2010-10-22 10:55 ` Linus Walleij
2010-10-22 16:43 ` Grant Likely
1 sibling, 2 replies; 7+ messages in thread
From: David Brownell @ 2010-10-21 22:28 UTC (permalink / raw)
To: Linus Walleij; +Cc: spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f
On Thu, 2010-10-21 at 21:06 +0200, Linus Walleij wrote:
> Those things in the SPI core just strike me as particularly odd:
> dev_dbg() used in an obvious error branch,
When debugging, that can be fine. "return errcode..." is how the error
gets reported; callers can handle that ... but they never read or
parse dev_err() output. dev_dbg() is for developers/debuggers.
> and then two hardcoded
> strings passed in as parameters.
Which reduced the text space used by the driver, by sharing parts
of the message that were not variable. I realize that some folk really
don't care how much memory gets wasted by constant strings,
but wasting image space still seems like a foolish policy to me.
I wouldn't merge this.
------------------------------------------------------------------------------
Nokia and AT&T present the 2010 Calling All Innovators-North America contest
Create new apps & games for the Nokia N8 for consumers in U.S. and Canada
$10 million total in prizes - $4M cash, 500 devices, nearly $6M in marketing
Develop with Nokia Qt SDK, Web Runtime, or Java and Publish to Ovi Store
http://p.sf.net/sfu/nokia-dev2dev
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] spi: fixed some core weirdness
2010-10-21 22:28 ` David Brownell
@ 2010-10-21 23:11 ` Linus Walleij
2010-10-22 10:55 ` Linus Walleij
1 sibling, 0 replies; 7+ messages in thread
From: Linus Walleij @ 2010-10-21 23:11 UTC (permalink / raw)
To: David Brownell; +Cc: spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f
2010/10/22 David Brownell <david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>:
>> and then two hardcoded
>> strings passed in as parameters.
>
> Which reduced the text space used by the driver, by sharing parts
> of the message that were not variable. I realize that some folk really
> don't care how much memory gets wasted by constant strings,
> but wasting image space still seems like a foolish policy to me.
Aha so that's what it's for, that was really a too ingeniously
clever way to save space for me.
Is this a very well-known and widespread idiom?
As for saving space, taste obviously differs, but I do care.
I got a patch for introducing discardable probe() functions in
struct amba_device nixed because of lack of interest, would you
back me up on that if I respin it?
Yours,
Linus Walleij
------------------------------------------------------------------------------
Nokia and AT&T present the 2010 Calling All Innovators-North America contest
Create new apps & games for the Nokia N8 for consumers in U.S. and Canada
$10 million total in prizes - $4M cash, 500 devices, nearly $6M in marketing
Develop with Nokia Qt SDK, Web Runtime, or Java and Publish to Ovi Store
http://p.sf.net/sfu/nokia-dev2dev
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] spi: fixed some core weirdness
2010-10-21 22:28 ` David Brownell
2010-10-21 23:11 ` Linus Walleij
@ 2010-10-22 10:55 ` Linus Walleij
1 sibling, 0 replies; 7+ messages in thread
From: Linus Walleij @ 2010-10-22 10:55 UTC (permalink / raw)
To: David Brownell; +Cc: spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f
2010/10/22 David Brownell <david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>:
>> and then two hardcoded
>> strings passed in as parameters.
>
> Which reduced the text space used by the driver, by sharing parts
> of the message that were not variable.
When I look at it, it doesn't. Quite the reverse.
I was curious on how much this would save/cost on this ARM system
so I compiled with and without these two lines altered. i.e. just:
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
index b5a78a1..8de6083 100644
--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
@@ -300,16 +300,16 @@ int spi_add_device(struct spi_device *spi)
*/
status = spi_setup(spi);
if (status < 0) {
- dev_err(dev, "can't %s %s, status %d\n",
- "setup", dev_name(&spi->dev), status);
+ dev_err(dev, "can't setup %s, status %d\n",
+ dev_name(&spi->dev), status);
goto done;
}
/* Device may be bound to an active driver when this returns */
status = device_add(&spi->dev);
if (status < 0)
- dev_err(dev, "can't %s %s, status %d\n",
- "add", dev_name(&spi->dev), status);
+ dev_err(dev, "can't add %s, status %d\n",
+ dev_name(&spi->dev), status);
else
dev_dbg(dev, "registered child %s\n", dev_name(&spi->dev));
Simple size measurement gives:
$ size vmlinux-before
text data bss dec hex filename
8554532 73120 102740 8730392 853718 vmlinux-before
$ size vmlinux-after
text data bss dec hex filename
8554530 73120 102740 8730390 853716 vmlinux-after
So this patch actually shrinks the size of the kernel, not the reverse
as could be assumed from the above argument.
But the plain .text size includes several subsections and probably
a number of alignment pecularities, so to get the details out, I diff:ed the
output from readelf -S on before and after:
Section Headers:
[Nr] Name Type Addr Off Size ES
Flg Lk Inf Al
[ 0] NULL 00000000 000000 000000 00
0 0 0
[ 1] .note.gnu.build-i NOTE 00000000 008000 000024 00
A 0 0 4
[ 2] .init PROGBITS c0008000 010000 663325 00
WAX 0 0 32
- [ 3] .text PROGBITS c066c000 674000 1a3f33 00
AX 0 0 1024
+ [ 3] .text PROGBITS c066c000 674000 1a3f39 00
AX 0 0 1024
[ 4] __ksymtab PROGBITS c0810000 818000 0036e0 00
A 0 0 4
[ 5] __ksymtab_gpl PROGBITS c08136e0 81b6e0 0016b0 00
A 0 0 4
[ 6] __ksymtab_strings PROGBITS c0814d90 81cd90 00a73c 00
A 0 0 1
[ 7] __init_rodata PROGBITS c081f4cc 8274cc 00001c 00
A 0 0 4
[ 8] __param PROGBITS c081f4e8 8274e8 000b18 00
A 0 0 4
- [ 9] .ARM.unwind_idx ARM_EXIDX c0820000 828000 00e170 00
AL 2 0 4
- [10] .ARM.unwind_tab PROGBITS c082e170 836170 003438 00
A 0 0 4
+ [ 9] .ARM.unwind_idx ARM_EXIDX c0820000 828000 00e168 00
AL 2 0 4
+ [10] .ARM.unwind_tab PROGBITS c082e168 836168 003438 00
A 0 0 4
[11] .data PROGBITS c0832000 83a000 011da0 00
WA 0 0 32
[12] .tcm_start NOBITS c0843da0 84bda0 000260 00
WA 0 0 1
[13] .bss NOBITS c0844000 84bda0 018ef4 00
WA 0 0 32
@@ -25,11 +25,11 @@
[20] .debug_ranges PROGBITS 00000000 1687620 03a6b0 00
0 0 8
[21] .debug_pubnames PROGBITS 00000000 16c1cd0 01a3ad 00
0 0 1
[22] .debug_str PROGBITS 00000000 16dc07d 06e07c 01
MS 0 0 1
- [23] .debug_frame PROGBITS 00000000 174a0fc 047134 00
0 0 4
- [24] .debug_loc PROGBITS 00000000 1791230 131f13 00
0 0 1
- [25] .shstrtab STRTAB 00000000 18c3143 00013f 00
0 0 1
- [26] .symtab SYMTAB 00000000 18c36e4 078800 10
27 25795 4
- [27] .strtab STRTAB 00000000 193bee4 053a5b 00
0 0 1
+ [23] .debug_frame PROGBITS 00000000 174a0fc 04712c 00
0 0 4
+ [24] .debug_loc PROGBITS 00000000 1791228 131f08 00
0 0 1
+ [25] .shstrtab STRTAB 00000000 18c3130 00013f 00
0 0 1
+ [26] .symtab SYMTAB 00000000 18c36d0 078800 10
27 25795 4
+ [27] .strtab STRTAB 00000000 193bed0 053a5b 00
0 0 1
So this patch cost 6 bytes of .text, saves 2 bytes of .ARM.unwind_idx,
saves 11 bytes in .debug_loc, saves 8 bytes in .debug_frame.
.ARM.unwind_idx is and architecture oddity, but the rest is rather general,
so in net total this patch actually ends up saving 19 bytes on this kernel.
We don't see it because of the way the tables are aligned probably,
maybe they are aligned upward to the next page or so and this
effect totally drowns in that.
Looking at it from a general view I find it hard to figure out how deferring
a string like "setup" or "add" to a string table could save memory,
each will be replaced with "%s" respectively saving 3 and 1 byte,
but inevitably at the cost of requiring to keep an address-bus-sized
pointer around somewhere, 4 bytes on the 32bit archs, meaning it is
expected to end up not saving space with this but rather the reverse.
Theoretically, in my book, you would loose 4-3 + 4-1 = 4 bytes,
with some secondary index for a string table (I guess these are the 8
bytes in .debug_frame) yet more, so something
like these 19 bytes net win are expected IMHO.
I don't know if it's typical for other archs though. What case are you
considering when you claim that the old way of doing things would
reduce text space? Can I reproduce it and learn something useful
about reducing the size of also this system?
Yours,
Linus Walleij
------------------------------------------------------------------------------
Nokia and AT&T present the 2010 Calling All Innovators-North America contest
Create new apps & games for the Nokia N8 for consumers in U.S. and Canada
$10 million total in prizes - $4M cash, 500 devices, nearly $6M in marketing
Develop with Nokia Qt SDK, Web Runtime, or Java and Publish to Ovi Store
http://p.sf.net/sfu/nokia-dev2dev
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH] spi: fixed some core weirdness
[not found] ` <1287688004-27410-1-git-send-email-linus.walleij-0IS4wlFg1OjSUeElwK9/Pw@public.gmane.org>
2010-10-21 22:28 ` David Brownell
@ 2010-10-22 16:43 ` Grant Likely
[not found] ` <20101022164343.GA20713-MrY2KI0G/OVr83L8+7iqerDks+cytr/Z@public.gmane.org>
1 sibling, 1 reply; 7+ messages in thread
From: Grant Likely @ 2010-10-22 16:43 UTC (permalink / raw)
To: Linus Walleij; +Cc: spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f
On Thu, Oct 21, 2010 at 09:06:44PM +0200, Linus Walleij wrote:
> Those things in the SPI core just strike me as particularly odd:
> dev_dbg() used in an obvious error branch, and then two hardcoded
> strings passed in as parameters.
>
> Signed-off-by: Linus Walleij <linus.walleij-0IS4wlFg1OjSUeElwK9/Pw@public.gmane.org>
Merged, thanks.
I ready David's nack, but We're quibbling over *bytes* in the single
digits in a multi-megabyte kernel. The total size of printk messages
is indeed a problem, but it isn't going to be solved by the kind of
micro-optimizations employed here.
I have dropped the dev_dbg->dev_err hunk though.
g.
> ---
> drivers/spi/spi.c | 10 +++++-----
> 1 files changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
> index b5a78a1..fcaa200 100644
> --- a/drivers/spi/spi.c
> +++ b/drivers/spi/spi.c
> @@ -300,16 +300,16 @@ int spi_add_device(struct spi_device *spi)
> */
> status = spi_setup(spi);
> if (status < 0) {
> - dev_err(dev, "can't %s %s, status %d\n",
> - "setup", dev_name(&spi->dev), status);
> + dev_err(dev, "can't setup %s, status %d\n",
> + dev_name(&spi->dev), status);
> goto done;
> }
>
> /* Device may be bound to an active driver when this returns */
> status = device_add(&spi->dev);
> if (status < 0)
> - dev_err(dev, "can't %s %s, status %d\n",
> - "add", dev_name(&spi->dev), status);
> + dev_err(dev, "can't add %s, status %d\n",
> + dev_name(&spi->dev), status);
> else
> dev_dbg(dev, "registered child %s\n", dev_name(&spi->dev));
>
> @@ -652,7 +652,7 @@ int spi_setup(struct spi_device *spi)
> */
> bad_bits = spi->mode & ~spi->master->mode_bits;
> if (bad_bits) {
> - dev_dbg(&spi->dev, "setup: unsupported mode bits %x\n",
> + dev_err(&spi->dev, "setup: unsupported mode bits %x\n",
> bad_bits);
> return -EINVAL;
> }
> --
> 1.6.3.3
>
------------------------------------------------------------------------------
Nokia and AT&T present the 2010 Calling All Innovators-North America contest
Create new apps & games for the Nokia N8 for consumers in U.S. and Canada
$10 million total in prizes - $4M cash, 500 devices, nearly $6M in marketing
Develop with Nokia Qt SDK, Web Runtime, or Java and Publish to Ovi Store
http://p.sf.net/sfu/nokia-dev2dev
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] spi: fixed some core weirdness
[not found] ` <20101022164343.GA20713-MrY2KI0G/OVr83L8+7iqerDks+cytr/Z@public.gmane.org>
@ 2010-10-22 23:20 ` David Brownell
[not found] ` <528767.85891.qm-4JhmkcZgSkmZZBmlwP4mLPu2YVrzzGjVVpNB7YpNyf8@public.gmane.org>
0 siblings, 1 reply; 7+ messages in thread
From: David Brownell @ 2010-10-22 23:20 UTC (permalink / raw)
To: Linus Walleij, Grant Likely
Cc: spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f
--- On Fri, 10/22/10, Grant Likely <grant.likely-s3s/WqlpOiPyB63q8FvJNQ@public.gmane.org> wrote:
> We're quibbling over *bytes* in the
> single digits in a multi-megabyte kernel.
> The total size of printk messages
> is indeed a problem, but it isn't going
> to be solved by the
> kind of micro-optimizations here.
True. Those two call sites were poor examples.
There are places where that technique wins
bigger, but those weren't such places. (The
shared strings were a bit small, while costs
for the unshared ones were more visible.
(The question "what's this doing" did get
answered, touching on a more interesting issue
of how to avoid wasting space.
Note also that "LongSharedStrings%s" win, but
the quickie analysis posted couldn't show that.
------------------------------------------------------------------------------
Nokia and AT&T present the 2010 Calling All Innovators-North America contest
Create new apps & games for the Nokia N8 for consumers in U.S. and Canada
$10 million total in prizes - $4M cash, 500 devices, nearly $6M in marketing
Develop with Nokia Qt SDK, Web Runtime, or Java and Publish to Ovi Store
http://p.sf.net/sfu/nokia-dev2dev
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] spi: fixed some core weirdness
[not found] ` <528767.85891.qm-4JhmkcZgSkmZZBmlwP4mLPu2YVrzzGjVVpNB7YpNyf8@public.gmane.org>
@ 2010-10-23 15:36 ` Linus Walleij
0 siblings, 0 replies; 7+ messages in thread
From: Linus Walleij @ 2010-10-23 15:36 UTC (permalink / raw)
To: David Brownell; +Cc: spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f
2010/10/23 David Brownell <david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>:
> Note also that "LongSharedStrings%s" win, but
> the quickie analysis posted couldn't show that.
There will definately be a win on bigger strings! However
manually sorting out smart substrings and using %s isn't
going to get us anywhere IMHO.
What it actually does is manual search and replace for
repeated sequences, which implies that the proper
way to reduce string space is to employ sequence
packing of them. Not gzip and such stuff that will
also huffman-code them, but something simple that
will quickly build the string from a hash or so.
Yours,
Linus Walleij
------------------------------------------------------------------------------
Nokia and AT&T present the 2010 Calling All Innovators-North America contest
Create new apps & games for the Nokia N8 for consumers in U.S. and Canada
$10 million total in prizes - $4M cash, 500 devices, nearly $6M in marketing
Develop with Nokia Qt SDK, Web Runtime, or Java and Publish to Ovi Store
http://p.sf.net/sfu/nokia-dev2dev
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2010-10-23 15:36 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-10-21 19:06 [PATCH] spi: fixed some core weirdness Linus Walleij
[not found] ` <1287688004-27410-1-git-send-email-linus.walleij-0IS4wlFg1OjSUeElwK9/Pw@public.gmane.org>
2010-10-21 22:28 ` David Brownell
2010-10-21 23:11 ` Linus Walleij
2010-10-22 10:55 ` Linus Walleij
2010-10-22 16:43 ` Grant Likely
[not found] ` <20101022164343.GA20713-MrY2KI0G/OVr83L8+7iqerDks+cytr/Z@public.gmane.org>
2010-10-22 23:20 ` David Brownell
[not found] ` <528767.85891.qm-4JhmkcZgSkmZZBmlwP4mLPu2YVrzzGjVVpNB7YpNyf8@public.gmane.org>
2010-10-23 15:36 ` Linus Walleij
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).