From: "Jörn Engel" <joern@wohnheim.fh-wedel.de>
To: David Hinds <dahinds@users.sourceforge.net>
Cc: linux-kernel@vger.kernel.org
Subject: Worst recursion in the kernel
Date: Wed, 3 Dec 2003 15:31:22 +0100 [thread overview]
Message-ID: <20031203143122.GA6470@wohnheim.fh-wedel.de> (raw)
Really bad code demand really rude words, sorry.
After playing with stack checking again, I've found this little beauty
in 2.6.0-test3: [1]
WARNING: recursion detected:
20 read_cis_cache
36 pcmcia_get_tuple_data
308 read_tuple
448 pcmcia_validate_cis
12 readable
24 cis_readable
28 do_mem_probe
24 inv_probe
16 validate_mem
32 set_cis_map
28 read_cis_mem
284 verify_cis_cache
Explanation:
verify_cis_cache calls read_cis_mem, which calls set_cis_map, which
call ..., which calls read_cis_cache, which finally calls
verify_cis_cache again.
The numbers to the left is the stack space consumed by each function.
See drivers/pcmcia/cistpl.c and drivers/pcmcia/rsrc_mgr.c for all the
glory.
Most likely this recursion will never occur, as one of those calls can
depends on circumstances that prohibit recursion, but semantic
checking is a bitch for software and in this case even for humans.
Put another way: THERE IS NO WAY TO MAKE SURE THIS WORKS.
If the code cannot be made simpler, how can anyone fix bugs in it.
Just reread the famous signature about code being as smart as
possible.
*sigh*
Ok David, sorry about this. There are more cases of similar
recursions in the kernel, just not quite as bad. And I had to pick
someone as a bad example and start a small public flamefest, so people
realize the problem.
Still, you should have a close look at that code path during 2.7 and
see if it really makes sense the way it is now.
[1] Yes, it is outdated, but I need stable test data for now.
Jörn
--
Measure. Don't tune for speed until you've measured, and even then
don't unless one part of the code overwhelms the rest.
-- Rob Pike
next reply other threads:[~2003-12-03 14:31 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-12-03 14:31 Jörn Engel [this message]
2003-12-03 18:07 ` David Hinds
2003-12-03 19:04 ` Jörn Engel
2003-12-03 22:57 ` Russell King
2003-12-03 23:08 ` Mike Fedyk
2003-12-03 23:36 ` David Hinds
2003-12-04 14:14 ` Jörn Engel
2003-12-04 15:08 ` Martin Waitz
2003-12-04 18:40 ` Russell King
2003-12-04 18:46 ` Jörn Engel
2003-12-03 23:08 ` David Hinds
2003-12-04 13:47 ` Jörn Engel
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=20031203143122.GA6470@wohnheim.fh-wedel.de \
--to=joern@wohnheim.fh-wedel.de \
--cc=dahinds@users.sourceforge.net \
--cc=linux-kernel@vger.kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®