Re: [PATCH 2/3] Kconfig: improve handling for all{rand,yes,no,}.config fragments

2018-02-22 Thread Masahiro Yamada
2018-02-22 1:57 GMT+09:00 Arnd Bergmann :
> On Tue, Feb 20, 2018 at 6:04 PM, Masahiro Yamada
>  wrote:
>> 2018-02-20 18:59 GMT+09:00 Arnd Bergmann :
>>> On Tue, Feb 20, 2018 at 10:26 AM, Masahiro Yamada
>>>  wrote:
 2018-02-17 6:41 GMT+09:00 Arnd Bergmann :
>>>
> @@ -621,14 +622,24 @@ int main(int ac, char **av)
> case randconfig:name = "allrandom.config"; break;
> default: break;
> }
> -   if (conf_read_simple(name, S_DEF_USER) &&
> -   conf_read_simple("all.config", S_DEF_USER)) {
> -   fprintf(stderr,
> -   _("*** KCONFIG_ALLCONFIG set, but no 
> \"%s\" or \"all.config\" file found\n"),
> -   name);
> -   exit(1);
> +   /* try ./name, arch/$(ARCH)/configs/name and 
> kernel/config/name */
> +   if (!conf_read_simple(name, S_DEF_USER))
> +   break;
> +   arch = getenv("ARCH");
> +   if (arch) {
> +   snprintf(fullname, sizeof(fullname), 
> "arch/%s/configs/%s",
> +arch, name);
> +   if (!conf_read_simple(fullname, S_DEF_USER))
> +   break;
> }


 I am not a big fan of hard-coding the kernel directory structure.

 We already do this [1], but I am thinking of kicking this out.
 [1] 
 https://github.com/torvalds/linux/blob/v4.16-rc1/scripts/kconfig/confdata.c#L33
>>>
>>> Ok, I see. How about adding a way to detect that we are build-testing
>>> with randconfig instead?
>>
>>
>> How about implementing something in scripts/kconfig/Makefile?
>>
>> merge_config collects config fragments into 'configfiles'
>>
>> I was thinking of a similar thing.
>>
>>
>> If KCONFIG_ALLCONFIG is 1,
>> scripts/kconfig/Makefile searches
>> './', '$srctree/', 'arch/$(SRCARCH)/configs/', 'kernel/configs/'
>> and sets the found file in it,
>>
>> If KCONFIG_ALLCONFIG already contains a file name, it is used as-is.
>>
>> scripts/kconfig/conf.c will be simplified.
>
> Yes, good idea. I'm struggling a bit with the implementation (fitting
> it into the
> simple-tagets rule), can you come up with a prototype?


Just a prototype for the Makefile part.
(We need to agree with the search order specification, though)


>8-
configs_dirs := $(srctree)/kernel/configs/ $(srctree)/arch/$(SRCARCH)/configs/

allconfig_files = $(if $(filter 1, $(KCONFIG_ALLCONFIG)),$(firstword \
$(foreach f, $(1), $(wildcard $(addsuffix $(f), ./ $(srctree)/))) \
$(foreach f, $(1), $(subst $(space),$(comma),$(wildcard
$(addsuffix $(f), $(configs_dirs)), \
$(KCONFIG_ALLCONFIG))

allyesconfig: override KCONFIG_ALLCONFIG := $(call allconfig_files,
allyes.config all.config)
allmodconfig: override KCONFIG_ALLCONFIG := $(call allconfig_files,
allmoyes.config all.config)
 (likewise for allnoconfig, alldefconfig)
randconfig: override KCONFIG_ALLCONFIG := $(call allconfig_files,
allrandom.config all.config)
->8---


If a user specifies a file path in KCONFIG_ALLCONFIG, it is used as-is.

IF KCONFIG_ALLCONFIG=1, the input file is searched in the following order.
( [1] - [4] is the same as the current specification)

[1] ./allrandom.config
[2] $(srctree)/allrandom.config
[3] ./all.config
[4] $(srctree)/all.config
[5] $(srctree)/kernel/configs/allrandom.config +
$(srctree)/arch/$(SRCARCH)/configs/allrandom.config
[6] $(srctree)/kernel/configs/all.config +
$(srctree)/arch/$(SRCARCH)/configs/all.config

For [5] and [6], if multiple files are found, KCONFIG_ALLCONFIG
is set to comma-separated file paths.

scripts/kconfig/conf.c must be tweaked a little bit
if we need to read multiple config fragments.

Currently, tinyconfig for x86 comes from common part and arch-specific part.
./kernel/configs/tiny.config
./arch/x86/configs/tiny.config


What do you think?







> We also need to decide what happens when e.g. both a ./all.config and
> arch/${SRCARCH}/configs/allrand.config file exist, should the first path
> take precedence or the more specific file?
>



-- 
Best Regards
Masahiro Yamada


Re: [PATCH 2/3] Kconfig: improve handling for all{rand,yes,no,}.config fragments

2018-02-22 Thread Masahiro Yamada
2018-02-22 1:57 GMT+09:00 Arnd Bergmann :
> On Tue, Feb 20, 2018 at 6:04 PM, Masahiro Yamada
>  wrote:
>> 2018-02-20 18:59 GMT+09:00 Arnd Bergmann :
>>> On Tue, Feb 20, 2018 at 10:26 AM, Masahiro Yamada
>>>  wrote:
 2018-02-17 6:41 GMT+09:00 Arnd Bergmann :
>>>
> @@ -621,14 +622,24 @@ int main(int ac, char **av)
> case randconfig:name = "allrandom.config"; break;
> default: break;
> }
> -   if (conf_read_simple(name, S_DEF_USER) &&
> -   conf_read_simple("all.config", S_DEF_USER)) {
> -   fprintf(stderr,
> -   _("*** KCONFIG_ALLCONFIG set, but no 
> \"%s\" or \"all.config\" file found\n"),
> -   name);
> -   exit(1);
> +   /* try ./name, arch/$(ARCH)/configs/name and 
> kernel/config/name */
> +   if (!conf_read_simple(name, S_DEF_USER))
> +   break;
> +   arch = getenv("ARCH");
> +   if (arch) {
> +   snprintf(fullname, sizeof(fullname), 
> "arch/%s/configs/%s",
> +arch, name);
> +   if (!conf_read_simple(fullname, S_DEF_USER))
> +   break;
> }


 I am not a big fan of hard-coding the kernel directory structure.

 We already do this [1], but I am thinking of kicking this out.
 [1] 
 https://github.com/torvalds/linux/blob/v4.16-rc1/scripts/kconfig/confdata.c#L33
>>>
>>> Ok, I see. How about adding a way to detect that we are build-testing
>>> with randconfig instead?
>>
>>
>> How about implementing something in scripts/kconfig/Makefile?
>>
>> merge_config collects config fragments into 'configfiles'
>>
>> I was thinking of a similar thing.
>>
>>
>> If KCONFIG_ALLCONFIG is 1,
>> scripts/kconfig/Makefile searches
>> './', '$srctree/', 'arch/$(SRCARCH)/configs/', 'kernel/configs/'
>> and sets the found file in it,
>>
>> If KCONFIG_ALLCONFIG already contains a file name, it is used as-is.
>>
>> scripts/kconfig/conf.c will be simplified.
>
> Yes, good idea. I'm struggling a bit with the implementation (fitting
> it into the
> simple-tagets rule), can you come up with a prototype?


Just a prototype for the Makefile part.
(We need to agree with the search order specification, though)


>8-
configs_dirs := $(srctree)/kernel/configs/ $(srctree)/arch/$(SRCARCH)/configs/

allconfig_files = $(if $(filter 1, $(KCONFIG_ALLCONFIG)),$(firstword \
$(foreach f, $(1), $(wildcard $(addsuffix $(f), ./ $(srctree)/))) \
$(foreach f, $(1), $(subst $(space),$(comma),$(wildcard
$(addsuffix $(f), $(configs_dirs)), \
$(KCONFIG_ALLCONFIG))

allyesconfig: override KCONFIG_ALLCONFIG := $(call allconfig_files,
allyes.config all.config)
allmodconfig: override KCONFIG_ALLCONFIG := $(call allconfig_files,
allmoyes.config all.config)
 (likewise for allnoconfig, alldefconfig)
randconfig: override KCONFIG_ALLCONFIG := $(call allconfig_files,
allrandom.config all.config)
->8---


If a user specifies a file path in KCONFIG_ALLCONFIG, it is used as-is.

IF KCONFIG_ALLCONFIG=1, the input file is searched in the following order.
( [1] - [4] is the same as the current specification)

[1] ./allrandom.config
[2] $(srctree)/allrandom.config
[3] ./all.config
[4] $(srctree)/all.config
[5] $(srctree)/kernel/configs/allrandom.config +
$(srctree)/arch/$(SRCARCH)/configs/allrandom.config
[6] $(srctree)/kernel/configs/all.config +
$(srctree)/arch/$(SRCARCH)/configs/all.config

For [5] and [6], if multiple files are found, KCONFIG_ALLCONFIG
is set to comma-separated file paths.

scripts/kconfig/conf.c must be tweaked a little bit
if we need to read multiple config fragments.

Currently, tinyconfig for x86 comes from common part and arch-specific part.
./kernel/configs/tiny.config
./arch/x86/configs/tiny.config


What do you think?







> We also need to decide what happens when e.g. both a ./all.config and
> arch/${SRCARCH}/configs/allrand.config file exist, should the first path
> take precedence or the more specific file?
>



-- 
Best Regards
Masahiro Yamada


Re: [PATCH 2/3] Kconfig: improve handling for all{rand,yes,no,}.config fragments

2018-02-22 Thread Masahiro Yamada
2018-02-22 1:57 GMT+09:00 Arnd Bergmann :
> On Tue, Feb 20, 2018 at 6:04 PM, Masahiro Yamada
>  wrote:
>> 2018-02-20 18:59 GMT+09:00 Arnd Bergmann :
>>> On Tue, Feb 20, 2018 at 10:26 AM, Masahiro Yamada
>>>  wrote:
 2018-02-17 6:41 GMT+09:00 Arnd Bergmann :
>>>
> @@ -621,14 +622,24 @@ int main(int ac, char **av)
> case randconfig:name = "allrandom.config"; break;
> default: break;
> }
> -   if (conf_read_simple(name, S_DEF_USER) &&
> -   conf_read_simple("all.config", S_DEF_USER)) {
> -   fprintf(stderr,
> -   _("*** KCONFIG_ALLCONFIG set, but no 
> \"%s\" or \"all.config\" file found\n"),
> -   name);
> -   exit(1);
> +   /* try ./name, arch/$(ARCH)/configs/name and 
> kernel/config/name */
> +   if (!conf_read_simple(name, S_DEF_USER))
> +   break;
> +   arch = getenv("ARCH");
> +   if (arch) {
> +   snprintf(fullname, sizeof(fullname), 
> "arch/%s/configs/%s",
> +arch, name);
> +   if (!conf_read_simple(fullname, S_DEF_USER))
> +   break;
> }


 I am not a big fan of hard-coding the kernel directory structure.

 We already do this [1], but I am thinking of kicking this out.
 [1] 
 https://github.com/torvalds/linux/blob/v4.16-rc1/scripts/kconfig/confdata.c#L33
>>>
>>> Ok, I see. How about adding a way to detect that we are build-testing
>>> with randconfig instead?
>>
>>
>> How about implementing something in scripts/kconfig/Makefile?
>>
>> merge_config collects config fragments into 'configfiles'
>>
>> I was thinking of a similar thing.
>>
>>
>> If KCONFIG_ALLCONFIG is 1,
>> scripts/kconfig/Makefile searches
>> './', '$srctree/', 'arch/$(SRCARCH)/configs/', 'kernel/configs/'
>> and sets the found file in it,
>>
>> If KCONFIG_ALLCONFIG already contains a file name, it is used as-is.
>>
>> scripts/kconfig/conf.c will be simplified.
>
> Yes, good idea. I'm struggling a bit with the implementation (fitting
> it into the
> simple-tagets rule), can you come up with a prototype?
>
> We also need to decide what happens when e.g. both a ./all.config and
> arch/${SRCARCH}/configs/allrand.config file exist, should the first path
> take precedence or the more specific file?
>

Hmm, maybe the following order?

[1] ./allrandom.config
[2] $(srctree)/allrandom.config
[3] ./all.config
[4] $(srctree)/all.config
[5] kernel/configs/allrandom.config + arch/$(SRCARCH)/configs/allrandom.config


I think you want to include
both kernel/configs/allrandom.config and
arch/$(SRCARCH)/configs/allrandom.config
if exist.

Some options are common, some are arch-specific.

This is how tinyconfig works.


-- 
Best Regards
Masahiro Yamada


Re: [PATCH 2/3] Kconfig: improve handling for all{rand,yes,no,}.config fragments

2018-02-22 Thread Masahiro Yamada
2018-02-22 1:57 GMT+09:00 Arnd Bergmann :
> On Tue, Feb 20, 2018 at 6:04 PM, Masahiro Yamada
>  wrote:
>> 2018-02-20 18:59 GMT+09:00 Arnd Bergmann :
>>> On Tue, Feb 20, 2018 at 10:26 AM, Masahiro Yamada
>>>  wrote:
 2018-02-17 6:41 GMT+09:00 Arnd Bergmann :
>>>
> @@ -621,14 +622,24 @@ int main(int ac, char **av)
> case randconfig:name = "allrandom.config"; break;
> default: break;
> }
> -   if (conf_read_simple(name, S_DEF_USER) &&
> -   conf_read_simple("all.config", S_DEF_USER)) {
> -   fprintf(stderr,
> -   _("*** KCONFIG_ALLCONFIG set, but no 
> \"%s\" or \"all.config\" file found\n"),
> -   name);
> -   exit(1);
> +   /* try ./name, arch/$(ARCH)/configs/name and 
> kernel/config/name */
> +   if (!conf_read_simple(name, S_DEF_USER))
> +   break;
> +   arch = getenv("ARCH");
> +   if (arch) {
> +   snprintf(fullname, sizeof(fullname), 
> "arch/%s/configs/%s",
> +arch, name);
> +   if (!conf_read_simple(fullname, S_DEF_USER))
> +   break;
> }


 I am not a big fan of hard-coding the kernel directory structure.

 We already do this [1], but I am thinking of kicking this out.
 [1] 
 https://github.com/torvalds/linux/blob/v4.16-rc1/scripts/kconfig/confdata.c#L33
>>>
>>> Ok, I see. How about adding a way to detect that we are build-testing
>>> with randconfig instead?
>>
>>
>> How about implementing something in scripts/kconfig/Makefile?
>>
>> merge_config collects config fragments into 'configfiles'
>>
>> I was thinking of a similar thing.
>>
>>
>> If KCONFIG_ALLCONFIG is 1,
>> scripts/kconfig/Makefile searches
>> './', '$srctree/', 'arch/$(SRCARCH)/configs/', 'kernel/configs/'
>> and sets the found file in it,
>>
>> If KCONFIG_ALLCONFIG already contains a file name, it is used as-is.
>>
>> scripts/kconfig/conf.c will be simplified.
>
> Yes, good idea. I'm struggling a bit with the implementation (fitting
> it into the
> simple-tagets rule), can you come up with a prototype?
>
> We also need to decide what happens when e.g. both a ./all.config and
> arch/${SRCARCH}/configs/allrand.config file exist, should the first path
> take precedence or the more specific file?
>

Hmm, maybe the following order?

[1] ./allrandom.config
[2] $(srctree)/allrandom.config
[3] ./all.config
[4] $(srctree)/all.config
[5] kernel/configs/allrandom.config + arch/$(SRCARCH)/configs/allrandom.config


I think you want to include
both kernel/configs/allrandom.config and
arch/$(SRCARCH)/configs/allrandom.config
if exist.

Some options are common, some are arch-specific.

This is how tinyconfig works.


-- 
Best Regards
Masahiro Yamada


Re: [PATCH 2/3] Kconfig: improve handling for all{rand,yes,no,}.config fragments

2018-02-21 Thread Arnd Bergmann
On Tue, Feb 20, 2018 at 6:04 PM, Masahiro Yamada
 wrote:
> 2018-02-20 18:59 GMT+09:00 Arnd Bergmann :
>> On Tue, Feb 20, 2018 at 10:26 AM, Masahiro Yamada
>>  wrote:
>>> 2018-02-17 6:41 GMT+09:00 Arnd Bergmann :
>>
 @@ -621,14 +622,24 @@ int main(int ac, char **av)
 case randconfig:name = "allrandom.config"; break;
 default: break;
 }
 -   if (conf_read_simple(name, S_DEF_USER) &&
 -   conf_read_simple("all.config", S_DEF_USER)) {
 -   fprintf(stderr,
 -   _("*** KCONFIG_ALLCONFIG set, but no 
 \"%s\" or \"all.config\" file found\n"),
 -   name);
 -   exit(1);
 +   /* try ./name, arch/$(ARCH)/configs/name and 
 kernel/config/name */
 +   if (!conf_read_simple(name, S_DEF_USER))
 +   break;
 +   arch = getenv("ARCH");
 +   if (arch) {
 +   snprintf(fullname, sizeof(fullname), 
 "arch/%s/configs/%s",
 +arch, name);
 +   if (!conf_read_simple(fullname, S_DEF_USER))
 +   break;
 }
>>>
>>>
>>> I am not a big fan of hard-coding the kernel directory structure.
>>>
>>> We already do this [1], but I am thinking of kicking this out.
>>> [1] 
>>> https://github.com/torvalds/linux/blob/v4.16-rc1/scripts/kconfig/confdata.c#L33
>>
>> Ok, I see. How about adding a way to detect that we are build-testing
>> with randconfig instead?
>
>
> How about implementing something in scripts/kconfig/Makefile?
>
> merge_config collects config fragments into 'configfiles'
>
> I was thinking of a similar thing.
>
>
> If KCONFIG_ALLCONFIG is 1,
> scripts/kconfig/Makefile searches
> './', '$srctree/', 'arch/$(SRCARCH)/configs/', 'kernel/configs/'
> and sets the found file in it,
>
> If KCONFIG_ALLCONFIG already contains a file name, it is used as-is.
>
> scripts/kconfig/conf.c will be simplified.

Yes, good idea. I'm struggling a bit with the implementation (fitting
it into the
simple-tagets rule), can you come up with a prototype?

We also need to decide what happens when e.g. both a ./all.config and
arch/${SRCARCH}/configs/allrand.config file exist, should the first path
take precedence or the more specific file?

 Arnd


Re: [PATCH 2/3] Kconfig: improve handling for all{rand,yes,no,}.config fragments

2018-02-21 Thread Arnd Bergmann
On Tue, Feb 20, 2018 at 6:04 PM, Masahiro Yamada
 wrote:
> 2018-02-20 18:59 GMT+09:00 Arnd Bergmann :
>> On Tue, Feb 20, 2018 at 10:26 AM, Masahiro Yamada
>>  wrote:
>>> 2018-02-17 6:41 GMT+09:00 Arnd Bergmann :
>>
 @@ -621,14 +622,24 @@ int main(int ac, char **av)
 case randconfig:name = "allrandom.config"; break;
 default: break;
 }
 -   if (conf_read_simple(name, S_DEF_USER) &&
 -   conf_read_simple("all.config", S_DEF_USER)) {
 -   fprintf(stderr,
 -   _("*** KCONFIG_ALLCONFIG set, but no 
 \"%s\" or \"all.config\" file found\n"),
 -   name);
 -   exit(1);
 +   /* try ./name, arch/$(ARCH)/configs/name and 
 kernel/config/name */
 +   if (!conf_read_simple(name, S_DEF_USER))
 +   break;
 +   arch = getenv("ARCH");
 +   if (arch) {
 +   snprintf(fullname, sizeof(fullname), 
 "arch/%s/configs/%s",
 +arch, name);
 +   if (!conf_read_simple(fullname, S_DEF_USER))
 +   break;
 }
>>>
>>>
>>> I am not a big fan of hard-coding the kernel directory structure.
>>>
>>> We already do this [1], but I am thinking of kicking this out.
>>> [1] 
>>> https://github.com/torvalds/linux/blob/v4.16-rc1/scripts/kconfig/confdata.c#L33
>>
>> Ok, I see. How about adding a way to detect that we are build-testing
>> with randconfig instead?
>
>
> How about implementing something in scripts/kconfig/Makefile?
>
> merge_config collects config fragments into 'configfiles'
>
> I was thinking of a similar thing.
>
>
> If KCONFIG_ALLCONFIG is 1,
> scripts/kconfig/Makefile searches
> './', '$srctree/', 'arch/$(SRCARCH)/configs/', 'kernel/configs/'
> and sets the found file in it,
>
> If KCONFIG_ALLCONFIG already contains a file name, it is used as-is.
>
> scripts/kconfig/conf.c will be simplified.

Yes, good idea. I'm struggling a bit with the implementation (fitting
it into the
simple-tagets rule), can you come up with a prototype?

We also need to decide what happens when e.g. both a ./all.config and
arch/${SRCARCH}/configs/allrand.config file exist, should the first path
take precedence or the more specific file?

 Arnd


Re: [PATCH 2/3] Kconfig: improve handling for all{rand,yes,no,}.config fragments

2018-02-20 Thread Masahiro Yamada
2018-02-20 18:59 GMT+09:00 Arnd Bergmann :
> On Tue, Feb 20, 2018 at 10:26 AM, Masahiro Yamada
>  wrote:
>> 2018-02-17 6:41 GMT+09:00 Arnd Bergmann :
>
>>> @@ -621,14 +622,24 @@ int main(int ac, char **av)
>>> case randconfig:name = "allrandom.config"; break;
>>> default: break;
>>> }
>>> -   if (conf_read_simple(name, S_DEF_USER) &&
>>> -   conf_read_simple("all.config", S_DEF_USER)) {
>>> -   fprintf(stderr,
>>> -   _("*** KCONFIG_ALLCONFIG set, but no \"%s\" 
>>> or \"all.config\" file found\n"),
>>> -   name);
>>> -   exit(1);
>>> +   /* try ./name, arch/$(ARCH)/configs/name and 
>>> kernel/config/name */
>>> +   if (!conf_read_simple(name, S_DEF_USER))
>>> +   break;
>>> +   arch = getenv("ARCH");
>>> +   if (arch) {
>>> +   snprintf(fullname, sizeof(fullname), 
>>> "arch/%s/configs/%s",
>>> +arch, name);
>>> +   if (!conf_read_simple(fullname, S_DEF_USER))
>>> +   break;
>>> }
>>
>>
>> I am not a big fan of hard-coding the kernel directory structure.
>>
>> We already do this [1], but I am thinking of kicking this out.
>> [1] 
>> https://github.com/torvalds/linux/blob/v4.16-rc1/scripts/kconfig/confdata.c#L33
>
> Ok, I see. How about adding a way to detect that we are build-testing
> with randconfig instead?


How about implementing something in scripts/kconfig/Makefile?

merge_config collects config fragments into 'configfiles'

I was thinking of a similar thing.


If KCONFIG_ALLCONFIG is 1,
scripts/kconfig/Makefile searches
'./', '$srctree/', 'arch/$(SRCARCH)/configs/', 'kernel/configs/'
and sets the found file in it,

If KCONFIG_ALLCONFIG already contains a file name, it is used as-is.

scripts/kconfig/conf.c will be simplified.



>> BTW, I am trying to compiler capability check to Kconfig.
>> If this work is done, I hope some "depends on !COMPILE_TEST" will go
>> away (but not all?)
>> https://patchwork.kernel.org/patch/10225375/
>
> I think most of the 'depends on !COMPILE_TEST' are for cases that
> impact compile-testing in some way (more false-positive warnings,
> fewer real warnings, much slower compile speed), rather than a lack
> of check for a specific compiler version.
>
> We might be able to replace the CONFIG_STANDALONE and
> CONFIG_PREVENT_FIRMWARE_BUILD with Kconfig $(shell)
> checks if you think that leads to an improvement.
>

OK, then your kernel/configs/allrandom.config approach will be useful.



-- 
Best Regards
Masahiro Yamada


Re: [PATCH 2/3] Kconfig: improve handling for all{rand,yes,no,}.config fragments

2018-02-20 Thread Masahiro Yamada
2018-02-20 18:59 GMT+09:00 Arnd Bergmann :
> On Tue, Feb 20, 2018 at 10:26 AM, Masahiro Yamada
>  wrote:
>> 2018-02-17 6:41 GMT+09:00 Arnd Bergmann :
>
>>> @@ -621,14 +622,24 @@ int main(int ac, char **av)
>>> case randconfig:name = "allrandom.config"; break;
>>> default: break;
>>> }
>>> -   if (conf_read_simple(name, S_DEF_USER) &&
>>> -   conf_read_simple("all.config", S_DEF_USER)) {
>>> -   fprintf(stderr,
>>> -   _("*** KCONFIG_ALLCONFIG set, but no \"%s\" 
>>> or \"all.config\" file found\n"),
>>> -   name);
>>> -   exit(1);
>>> +   /* try ./name, arch/$(ARCH)/configs/name and 
>>> kernel/config/name */
>>> +   if (!conf_read_simple(name, S_DEF_USER))
>>> +   break;
>>> +   arch = getenv("ARCH");
>>> +   if (arch) {
>>> +   snprintf(fullname, sizeof(fullname), 
>>> "arch/%s/configs/%s",
>>> +arch, name);
>>> +   if (!conf_read_simple(fullname, S_DEF_USER))
>>> +   break;
>>> }
>>
>>
>> I am not a big fan of hard-coding the kernel directory structure.
>>
>> We already do this [1], but I am thinking of kicking this out.
>> [1] 
>> https://github.com/torvalds/linux/blob/v4.16-rc1/scripts/kconfig/confdata.c#L33
>
> Ok, I see. How about adding a way to detect that we are build-testing
> with randconfig instead?


How about implementing something in scripts/kconfig/Makefile?

merge_config collects config fragments into 'configfiles'

I was thinking of a similar thing.


If KCONFIG_ALLCONFIG is 1,
scripts/kconfig/Makefile searches
'./', '$srctree/', 'arch/$(SRCARCH)/configs/', 'kernel/configs/'
and sets the found file in it,

If KCONFIG_ALLCONFIG already contains a file name, it is used as-is.

scripts/kconfig/conf.c will be simplified.



>> BTW, I am trying to compiler capability check to Kconfig.
>> If this work is done, I hope some "depends on !COMPILE_TEST" will go
>> away (but not all?)
>> https://patchwork.kernel.org/patch/10225375/
>
> I think most of the 'depends on !COMPILE_TEST' are for cases that
> impact compile-testing in some way (more false-positive warnings,
> fewer real warnings, much slower compile speed), rather than a lack
> of check for a specific compiler version.
>
> We might be able to replace the CONFIG_STANDALONE and
> CONFIG_PREVENT_FIRMWARE_BUILD with Kconfig $(shell)
> checks if you think that leads to an improvement.
>

OK, then your kernel/configs/allrandom.config approach will be useful.



-- 
Best Regards
Masahiro Yamada


Re: [PATCH 2/3] Kconfig: improve handling for all{rand,yes,no,}.config fragments

2018-02-20 Thread Arnd Bergmann
On Tue, Feb 20, 2018 at 10:26 AM, Masahiro Yamada
 wrote:
> 2018-02-17 6:41 GMT+09:00 Arnd Bergmann :

>> @@ -621,14 +622,24 @@ int main(int ac, char **av)
>> case randconfig:name = "allrandom.config"; break;
>> default: break;
>> }
>> -   if (conf_read_simple(name, S_DEF_USER) &&
>> -   conf_read_simple("all.config", S_DEF_USER)) {
>> -   fprintf(stderr,
>> -   _("*** KCONFIG_ALLCONFIG set, but no \"%s\" 
>> or \"all.config\" file found\n"),
>> -   name);
>> -   exit(1);
>> +   /* try ./name, arch/$(ARCH)/configs/name and 
>> kernel/config/name */
>> +   if (!conf_read_simple(name, S_DEF_USER))
>> +   break;
>> +   arch = getenv("ARCH");
>> +   if (arch) {
>> +   snprintf(fullname, sizeof(fullname), 
>> "arch/%s/configs/%s",
>> +arch, name);
>> +   if (!conf_read_simple(fullname, S_DEF_USER))
>> +   break;
>> }
>
>
> I am not a big fan of hard-coding the kernel directory structure.
>
> We already do this [1], but I am thinking of kicking this out.
> [1] 
> https://github.com/torvalds/linux/blob/v4.16-rc1/scripts/kconfig/confdata.c#L33

Ok, I see. How about adding a way to detect that we are build-testing
with randconfig instead?

> BTW, I am trying to compiler capability check to Kconfig.
> If this work is done, I hope some "depends on !COMPILE_TEST" will go
> away (but not all?)
> https://patchwork.kernel.org/patch/10225375/

I think most of the 'depends on !COMPILE_TEST' are for cases that
impact compile-testing in some way (more false-positive warnings,
fewer real warnings, much slower compile speed), rather than a lack
of check for a specific compiler version.

We might be able to replace the CONFIG_STANDALONE and
CONFIG_PREVENT_FIRMWARE_BUILD with Kconfig $(shell)
checks if you think that leads to an improvement.

Arnd


Re: [PATCH 2/3] Kconfig: improve handling for all{rand,yes,no,}.config fragments

2018-02-20 Thread Arnd Bergmann
On Tue, Feb 20, 2018 at 10:26 AM, Masahiro Yamada
 wrote:
> 2018-02-17 6:41 GMT+09:00 Arnd Bergmann :

>> @@ -621,14 +622,24 @@ int main(int ac, char **av)
>> case randconfig:name = "allrandom.config"; break;
>> default: break;
>> }
>> -   if (conf_read_simple(name, S_DEF_USER) &&
>> -   conf_read_simple("all.config", S_DEF_USER)) {
>> -   fprintf(stderr,
>> -   _("*** KCONFIG_ALLCONFIG set, but no \"%s\" 
>> or \"all.config\" file found\n"),
>> -   name);
>> -   exit(1);
>> +   /* try ./name, arch/$(ARCH)/configs/name and 
>> kernel/config/name */
>> +   if (!conf_read_simple(name, S_DEF_USER))
>> +   break;
>> +   arch = getenv("ARCH");
>> +   if (arch) {
>> +   snprintf(fullname, sizeof(fullname), 
>> "arch/%s/configs/%s",
>> +arch, name);
>> +   if (!conf_read_simple(fullname, S_DEF_USER))
>> +   break;
>> }
>
>
> I am not a big fan of hard-coding the kernel directory structure.
>
> We already do this [1], but I am thinking of kicking this out.
> [1] 
> https://github.com/torvalds/linux/blob/v4.16-rc1/scripts/kconfig/confdata.c#L33

Ok, I see. How about adding a way to detect that we are build-testing
with randconfig instead?

> BTW, I am trying to compiler capability check to Kconfig.
> If this work is done, I hope some "depends on !COMPILE_TEST" will go
> away (but not all?)
> https://patchwork.kernel.org/patch/10225375/

I think most of the 'depends on !COMPILE_TEST' are for cases that
impact compile-testing in some way (more false-positive warnings,
fewer real warnings, much slower compile speed), rather than a lack
of check for a specific compiler version.

We might be able to replace the CONFIG_STANDALONE and
CONFIG_PREVENT_FIRMWARE_BUILD with Kconfig $(shell)
checks if you think that leads to an improvement.

Arnd


Re: [PATCH 2/3] Kconfig: improve handling for all{rand,yes,no,}.config fragments

2018-02-20 Thread Masahiro Yamada
2018-02-17 6:41 GMT+09:00 Arnd Bergmann :
> The kernel currently supports two methods of dealing with config
> fragments in the tree:
>
> a) Running "make foo.config" looks for arch/$(ARCH)/configs/foo.config
>and kernel/configs/foo.config, and applies the defaults from those
>files on top of the current configuration.
>
> b) Running "KCONFIG_ALLCONFIG=1 make randconfig" (or the equivalent
>allmodconfig/allnoconfig/allyesconfig/alldefconfig) will look
>for a "allrandconfig.config" file in the current directory or the
>top of the $(srctree). These are used as defaults before we generate
>the remaining options.
>
> This is rather inconsistent, and prevents us from easily shipping
> good defaults for "randconfig". I'm extending the logic here so that
> the second case also looks for the hardcoded file names in the standard
> directories (first arch/$(ARCH)/configs/, then kernel/configs) in the
> source tree.
>
> Signed-off-by: Arnd Bergmann 
> ---
>  scripts/kconfig/conf.c | 27 +++
>  1 file changed, 19 insertions(+), 8 deletions(-)
>
> diff --git a/scripts/kconfig/conf.c b/scripts/kconfig/conf.c
> index 866369f10ff8..848bf4d15e9a 100644
> --- a/scripts/kconfig/conf.c
> +++ b/scripts/kconfig/conf.c
> @@ -493,8 +493,9 @@ int main(int ac, char **av)
>  {
> const char *progname = av[0];
> int opt;
> -   const char *name, *defconfig_file = NULL /* gcc uninit */;
> +   const char *arch, *name, *defconfig_file = NULL /* gcc uninit */;
> struct stat tmpstat;
> +   char fullname[PATH_MAX+1];
>
> setlocale(LC_ALL, "");
> bindtextdomain(PACKAGE, LOCALEDIR);
> @@ -621,14 +622,24 @@ int main(int ac, char **av)
> case randconfig:name = "allrandom.config"; break;
> default: break;
> }
> -   if (conf_read_simple(name, S_DEF_USER) &&
> -   conf_read_simple("all.config", S_DEF_USER)) {
> -   fprintf(stderr,
> -   _("*** KCONFIG_ALLCONFIG set, but no \"%s\" 
> or \"all.config\" file found\n"),
> -   name);
> -   exit(1);
> +   /* try ./name, arch/$(ARCH)/configs/name and 
> kernel/config/name */
> +   if (!conf_read_simple(name, S_DEF_USER))
> +   break;
> +   arch = getenv("ARCH");
> +   if (arch) {
> +   snprintf(fullname, sizeof(fullname), 
> "arch/%s/configs/%s",
> +arch, name);
> +   if (!conf_read_simple(fullname, S_DEF_USER))
> +   break;
> }


I am not a big fan of hard-coding the kernel directory structure.

We already do this [1], but I am thinking of kicking this out.
[1] 
https://github.com/torvalds/linux/blob/v4.16-rc1/scripts/kconfig/confdata.c#L33



BTW, I am trying to compiler capability check to Kconfig.
If this work is done, I hope some "depends on !COMPILE_TEST" will go
away (but not all?)
https://patchwork.kernel.org/patch/10225375/



> -   break;
> +   snprintf(fullname, sizeof(fullname), "kernel/configs/%s", 
> name);
> +   if (!conf_read_simple(fullname, S_DEF_USER))
> +   break;
> +
> +   fprintf(stderr,
> +   _("*** KCONFIG_ALLCONFIG set, but no \"%s\" or 
> \"all.config\" file found\n"),
> +   name);
> +   exit(1);
> default:
> break;
> }
> --
> 2.9.0
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
> the body of a message to majord...@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html



-- 
Best Regards
Masahiro Yamada


Re: [PATCH 2/3] Kconfig: improve handling for all{rand,yes,no,}.config fragments

2018-02-20 Thread Masahiro Yamada
2018-02-17 6:41 GMT+09:00 Arnd Bergmann :
> The kernel currently supports two methods of dealing with config
> fragments in the tree:
>
> a) Running "make foo.config" looks for arch/$(ARCH)/configs/foo.config
>and kernel/configs/foo.config, and applies the defaults from those
>files on top of the current configuration.
>
> b) Running "KCONFIG_ALLCONFIG=1 make randconfig" (or the equivalent
>allmodconfig/allnoconfig/allyesconfig/alldefconfig) will look
>for a "allrandconfig.config" file in the current directory or the
>top of the $(srctree). These are used as defaults before we generate
>the remaining options.
>
> This is rather inconsistent, and prevents us from easily shipping
> good defaults for "randconfig". I'm extending the logic here so that
> the second case also looks for the hardcoded file names in the standard
> directories (first arch/$(ARCH)/configs/, then kernel/configs) in the
> source tree.
>
> Signed-off-by: Arnd Bergmann 
> ---
>  scripts/kconfig/conf.c | 27 +++
>  1 file changed, 19 insertions(+), 8 deletions(-)
>
> diff --git a/scripts/kconfig/conf.c b/scripts/kconfig/conf.c
> index 866369f10ff8..848bf4d15e9a 100644
> --- a/scripts/kconfig/conf.c
> +++ b/scripts/kconfig/conf.c
> @@ -493,8 +493,9 @@ int main(int ac, char **av)
>  {
> const char *progname = av[0];
> int opt;
> -   const char *name, *defconfig_file = NULL /* gcc uninit */;
> +   const char *arch, *name, *defconfig_file = NULL /* gcc uninit */;
> struct stat tmpstat;
> +   char fullname[PATH_MAX+1];
>
> setlocale(LC_ALL, "");
> bindtextdomain(PACKAGE, LOCALEDIR);
> @@ -621,14 +622,24 @@ int main(int ac, char **av)
> case randconfig:name = "allrandom.config"; break;
> default: break;
> }
> -   if (conf_read_simple(name, S_DEF_USER) &&
> -   conf_read_simple("all.config", S_DEF_USER)) {
> -   fprintf(stderr,
> -   _("*** KCONFIG_ALLCONFIG set, but no \"%s\" 
> or \"all.config\" file found\n"),
> -   name);
> -   exit(1);
> +   /* try ./name, arch/$(ARCH)/configs/name and 
> kernel/config/name */
> +   if (!conf_read_simple(name, S_DEF_USER))
> +   break;
> +   arch = getenv("ARCH");
> +   if (arch) {
> +   snprintf(fullname, sizeof(fullname), 
> "arch/%s/configs/%s",
> +arch, name);
> +   if (!conf_read_simple(fullname, S_DEF_USER))
> +   break;
> }


I am not a big fan of hard-coding the kernel directory structure.

We already do this [1], but I am thinking of kicking this out.
[1] 
https://github.com/torvalds/linux/blob/v4.16-rc1/scripts/kconfig/confdata.c#L33



BTW, I am trying to compiler capability check to Kconfig.
If this work is done, I hope some "depends on !COMPILE_TEST" will go
away (but not all?)
https://patchwork.kernel.org/patch/10225375/



> -   break;
> +   snprintf(fullname, sizeof(fullname), "kernel/configs/%s", 
> name);
> +   if (!conf_read_simple(fullname, S_DEF_USER))
> +   break;
> +
> +   fprintf(stderr,
> +   _("*** KCONFIG_ALLCONFIG set, but no \"%s\" or 
> \"all.config\" file found\n"),
> +   name);
> +   exit(1);
> default:
> break;
> }
> --
> 2.9.0
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
> the body of a message to majord...@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html



-- 
Best Regards
Masahiro Yamada