From: Sam Ravnborg <sam@ravnborg.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-kbuild <linux-kbuild@vger.kernel.org>,
LKML <linux-kernel@vger.kernel.org>,
Roman Zippel <zippel@linux-m68k.org>, Ingo Molnar <mingo@elte.hu>
Subject: [GIT] kbuild
Date: Wed, 18 Mar 2009 20:35:11 +0100 [thread overview]
Message-ID: <20090318193511.GA14621@uranus.ravnborg.org> (raw)
Fix the following issues:
o 'make randconfig' failed to generate random values for choices
thus letting several build-time bugs slip through the randconfig
based testing in tip - and likely for others doing builds based
on randconfig too
This fix is not a minimal fix - some effort were put into making
the code more strightforward and a few comments was added in the
process.
o Use seed for random with a resolution higher than 1 second.
Now that 'make randconfig' is much faster we can generate more
than one randconfig on a decent box within one second.
Please pull,
Sam
The following changes since commit 5bee17f18b595937e6beafeee5197868a3f74a06:
Kyle McMartin (1):
parisc: sba_iommu: fix build bug when CONFIG_PARISC_AGP=y
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/sam/kbuild-fixes.git master
Ingo Molnar (1):
kconfig: improve seed in randconfig
Sam Ravnborg (1):
kconfig: fix randconfig for choice blocks
Full diff of the two changes:
scripts/kconfig/conf.c | 16 +++++++++++++-
scripts/kconfig/confdata.c | 51 +++++++++++++++++++++++++++++++-------------
2 files changed, 51 insertions(+), 16 deletions(-)
diff --git a/scripts/kconfig/conf.c b/scripts/kconfig/conf.c
index 3e1057f..d190092 100644
--- a/scripts/kconfig/conf.c
+++ b/scripts/kconfig/conf.c
@@ -11,6 +11,7 @@
#include <time.h>
#include <unistd.h>
#include <sys/stat.h>
+#include <sys/time.h>
#define LKC_DIRECT_LINK
#include "lkc.h"
@@ -464,9 +465,22 @@ int main(int ac, char **av)
input_mode = set_yes;
break;
case 'r':
+ {
+ struct timeval now;
+ unsigned int seed;
+
+ /*
+ * Use microseconds derived seed,
+ * compensate for systems where it may be zero
+ */
+ gettimeofday(&now, NULL);
+
+ seed = (unsigned int)((now.tv_sec + 1) * (now.tv_usec + 1));
+ srand(seed);
+
input_mode = set_random;
- srand(time(NULL));
break;
+ }
case 'h':
printf(_("See README for usage info\n"));
exit(0);
diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c
index 830d9ea..273d738 100644
--- a/scripts/kconfig/confdata.c
+++ b/scripts/kconfig/confdata.c
@@ -843,7 +843,7 @@ void conf_set_all_new_symbols(enum conf_def_mode mode)
default:
continue;
}
- if (!sym_is_choice(sym) || mode != def_random)
+ if (!(sym_is_choice(sym) && mode == def_random))
sym->flags |= SYMBOL_DEF_USER;
break;
default:
@@ -856,28 +856,49 @@ void conf_set_all_new_symbols(enum conf_def_mode mode)
if (mode != def_random)
return;
-
+ /*
+ * We have different type of choice blocks.
+ * If curr.tri equal to mod then we can select several
+ * choice symbols in one block.
+ * In this case we do nothing.
+ * If curr.tri equal yes then only one symbol can be
+ * selected in a choice block and we set it to yes,
+ * and the rest to no.
+ */
for_all_symbols(i, csym) {
if (sym_has_value(csym) || !sym_is_choice(csym))
continue;
sym_calc_value(csym);
+
+ if (csym->curr.tri != yes)
+ continue;
+
prop = sym_get_choice_prop(csym);
- def = -1;
- while (1) {
- cnt = 0;
- expr_list_for_each_sym(prop->expr, e, sym) {
- if (sym->visible == no)
- continue;
- if (def == cnt++) {
- csym->def[S_DEF_USER].val = sym;
- break;
- }
+
+ /* count entries in choice block */
+ cnt = 0;
+ expr_list_for_each_sym(prop->expr, e, sym)
+ cnt++;
+
+ /*
+ * find a random value and set it to yes,
+ * set the rest to no so we have only one set
+ */
+ def = (rand() % cnt);
+
+ cnt = 0;
+ expr_list_for_each_sym(prop->expr, e, sym) {
+ if (def == cnt++) {
+ sym->def[S_DEF_USER].tri = yes;
+ csym->def[S_DEF_USER].val = sym;
+ }
+ else {
+ sym->def[S_DEF_USER].tri = no;
}
- if (def >= 0 || cnt < 2)
- break;
- def = (rand() % cnt) + 1;
}
csym->flags |= SYMBOL_DEF_USER;
+ /* clear VALID to get value calculated */
+ csym->flags &= ~(SYMBOL_VALID);
}
}
next reply other threads:[~2009-03-18 19:33 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-03-18 19:35 Sam Ravnborg [this message]
-- strict thread matches above, loose matches on Subject: below --
2010-07-07 9:08 [GIT] kbuild Michal Marek
2010-07-07 16:41 ` Linus Torvalds
2010-07-08 5:47 ` Michal Marek
2010-03-08 14:34 Michal Marek
2009-09-21 17:56 Sam Ravnborg
2009-06-14 21:09 Sam Ravnborg
2009-05-01 10:15 Sam Ravnborg
2009-04-19 9:25 Sam Ravnborg
2009-04-19 22:39 ` Paul Mundt
2009-04-19 23:45 ` Sam Ravnborg
2009-04-20 0:52 ` Linus Torvalds
2009-04-20 1:41 ` Al Viro
2009-04-20 2:49 ` Al Viro
2009-04-20 4:45 ` Sam Ravnborg
2009-04-20 5:15 ` Al Viro
2009-04-20 8:24 ` Sam Ravnborg
2009-04-20 4:42 ` Sam Ravnborg
2009-04-11 19:45 Sam Ravnborg
2009-03-11 19:24 Sam Ravnborg
2009-02-17 21:11 Sam Ravnborg
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=20090318193511.GA14621@uranus.ravnborg.org \
--to=sam@ravnborg.org \
--cc=linux-kbuild@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=torvalds@linux-foundation.org \
--cc=zippel@linux-m68k.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