From: James Bottomley on
[Sam: I know you don't maintain kbuild anymore, but since you have the
most experience, if you could find time to comment, I'd be grateful]

The select problem is that the kbuild select directive will turn a
symbol on without reference to its dependencies. This, in turn, means
that either selected symbols must select their dependencies, or that
people using select have to be aware of the selected symbol's dependency
and build those dependencies into their symbol (leading to duplication
and the possibility of getting the dependencies out of sync). We use
select for the scsi transport classes, so we run into this problem in
SCSI quite a lot.

I think the correct fix is to make a symbol that selects another symbol
automatically inherit all of the selected symbol's dependencies.

There seems to be a fairly easy way to do this in kbuild. Right at the
moment, select is handled as additional symbol values as the last point
in the symbol tree evaluation process. Instead, what I propose doing is
for every select symbol, we add an extra unconditional default for the
selected symbol of the selecting symbol's current value (this breaks a
possible dependency cycle) and add to the dependencies of the selecting
symbol, the symbol it's currently selecting.

There's one wrinkle to all of this in that the current parser for
default values stops when it finds the first valid (i.e. whose if clause
evaluates to true) default. To make the above scheme work, I need to
modify the default parser so it takes the highest tristate of all the
valid defaults (and bumps m to y for bool).

Does this look acceptable to people? I think it should give the desired
result and has the added benefit that we can then strip the extra select
overlay out of the kbuild system (making the parser slightly simpler).

If this looks like a good idea to people, I think I can code up a quick
patch.

James



--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo(a)vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
From: Geert Uytterhoeven on
On Wed, May 5, 2010 at 23:49, James Bottomley
<James.Bottomley(a)hansenpartnership.com> wrote:
> [Sam: I know you don't maintain kbuild anymore, but since you have the
> most experience, if you could find time to comment, I'd be grateful]
>
> The select problem is that the kbuild select directive will turn a
> symbol on without reference to its dependencies.  This, in turn, means
> that either selected symbols must select their dependencies, or that
> people using select have to be aware of the selected symbol's dependency
> and build those dependencies into their symbol (leading to duplication
> and the possibility of getting the dependencies out of sync).  We use
> select for the scsi transport classes, so we run into this problem in
> SCSI quite a lot.
>
> I think the correct fix is to make a symbol that selects another symbol
> automatically inherit all of the selected symbol's dependencies.

What if there's a good reason the selected symbol has this dependency?
E.g. it depends on a critical feature not available? Like CONFIG_HAS_IOMEM?

Gr{oetje,eeting}s,

Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert(a)linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo(a)vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
From: James Bottomley on
On Thu, 2010-05-06 at 08:47 +0200, Geert Uytterhoeven wrote:
> On Wed, May 5, 2010 at 23:49, James Bottomley
> <James.Bottomley(a)hansenpartnership.com> wrote:
> > [Sam: I know you don't maintain kbuild anymore, but since you have the
> > most experience, if you could find time to comment, I'd be grateful]
> >
> > The select problem is that the kbuild select directive will turn a
> > symbol on without reference to its dependencies. This, in turn, means
> > that either selected symbols must select their dependencies, or that
> > people using select have to be aware of the selected symbol's dependency
> > and build those dependencies into their symbol (leading to duplication
> > and the possibility of getting the dependencies out of sync). We use
> > select for the scsi transport classes, so we run into this problem in
> > SCSI quite a lot.
> >
> > I think the correct fix is to make a symbol that selects another symbol
> > automatically inherit all of the selected symbol's dependencies.
>
> What if there's a good reason the selected symbol has this dependency?
> E.g. it depends on a critical feature not available? Like CONFIG_HAS_IOMEM?

I don't quite understand the question. If a selected symbol has a
critical dependency which is config'd to N then the build usually
breaks ... that's what I'm calling the select problem. I thought
CONFIG_HAS_IOMEM was usually selected by the architecture, though. In
the new proposal, we wouldn't be able to generate the invalid
configuration in the first place.

James


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo(a)vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
From: Geert Uytterhoeven on
On Thu, May 6, 2010 at 15:17, James Bottomley
<James.Bottomley(a)hansenpartnership.com> wrote:
> On Thu, 2010-05-06 at 08:47 +0200, Geert Uytterhoeven wrote:
>> On Wed, May 5, 2010 at 23:49, James Bottomley
>> <James.Bottomley(a)hansenpartnership.com> wrote:
>> > [Sam: I know you don't maintain kbuild anymore, but since you have the
>> > most experience, if you could find time to comment, I'd be grateful]
>> >
>> > The select problem is that the kbuild select directive will turn a
>> > symbol on without reference to its dependencies.  This, in turn, means
>> > that either selected symbols must select their dependencies, or that
>> > people using select have to be aware of the selected symbol's dependency
>> > and build those dependencies into their symbol (leading to duplication
>> > and the possibility of getting the dependencies out of sync).  We use
>> > select for the scsi transport classes, so we run into this problem in
>> > SCSI quite a lot.
>> >
>> > I think the correct fix is to make a symbol that selects another symbol
>> > automatically inherit all of the selected symbol's dependencies.
>>
>> What if there's a good reason the selected symbol has this dependency?
>> E.g. it depends on a critical feature not available? Like CONFIG_HAS_IOMEM?
>
> I don't quite understand the question.  If a selected symbol has a
> critical dependency which is config'd to N then the build usually
> breaks ... that's what I'm calling the select problem.  I thought
> CONFIG_HAS_IOMEM was usually selected by the architecture, though.  In
> the new proposal, we wouldn't be able to generate the invalid
> configuration in the first place.

Sorry, my fault, -EREPLY_TOO_EARLY_AFTER_WAKEUP.
Upon rereading what you actually wrote, it made complete sense, and my
question didn't.

Gr{oetje,eeting}s,

Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert(a)linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo(a)vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
From: Michal Marek on
On 5.5.2010 23:49, James Bottomley wrote:
> [Sam: I know you don't maintain kbuild anymore, but since you have the
> most experience, if you could find time to comment, I'd be grateful]
>
> The select problem is that the kbuild select directive will turn a
> symbol on without reference to its dependencies. This, in turn, means
> that either selected symbols must select their dependencies, or that
> people using select have to be aware of the selected symbol's dependency
> and build those dependencies into their symbol (leading to duplication
> and the possibility of getting the dependencies out of sync). We use
> select for the scsi transport classes, so we run into this problem in
> SCSI quite a lot.
>
> I think the correct fix is to make a symbol that selects another symbol
> automatically inherit all of the selected symbol's dependencies.
>
> There seems to be a fairly easy way to do this in kbuild. Right at the
> moment, select is handled as additional symbol values as the last point
> in the symbol tree evaluation process. Instead, what I propose doing is
> for every select symbol, we add an extra unconditional default for the
> selected symbol of the selecting symbol's current value (this breaks a
> possible dependency cycle) and add to the dependencies of the selecting
> symbol, the symbol it's currently selecting.

Nice trick :-).


> There's one wrinkle to all of this in that the current parser for
> default values stops when it finds the first valid (i.e. whose if clause
> evaluates to true) default. To make the above scheme work, I need to
> modify the default parser so it takes the highest tristate of all the
> valid defaults (and bumps m to y for bool).

We should check if some Kconfig file doesn't rely on this "first hit"
behavior and fix it to explicitly list the condition for a given
default. Another option would be to add
default SYM1 || SYM2
to a symbol selected by SYM1 and SYM2.


> Does this look acceptable to people? I think it should give the desired
> result and has the added benefit that we can then strip the extra select
> overlay out of the kbuild system (making the parser slightly simpler).
>
> If this looks like a good idea to people, I think I can code up a quick
> patch.

Other than the above, right now I don't see any issues with such approach.

On a related note, I see Vegard's GSoC project to use a sat solver for
kconfig got accepted [1]. Vegard, how is the project progressing?

[1]
http://socghop.appspot.com/gsoc/student_project/show/google/gsoc2010/psu_home/t127230762803

Michal
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo(a)vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/