Re: cx8802.ko module not being built with current HG tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, 10 Feb 2009 22:21:39 +0100
Hans Verkuil <hverkuil@xxxxxxxxx> wrote:


> > $ grep CONFIG_HAS_DMA /usr/src/kernels/2.6.18-125.el5-x86_64/.config
> > CONFIG_HAS_DMA=y
> 
> Oops, this fixes a different bug. It is still a bug fix, though, since it 
> prevents CX88 from being build at all on any vanilla kernels < 2.6.22. Can 
> you apply it?

Applied, thanks.

> > Also, the original reporter were for an Ubuntu kernel 2.6.22.
> 
> I did some more testing and the bug disappears in kernel 2.6.25. Also, if I 
> just run 'make', then the .config file it produces is fine. I wonder if it 
> isn't a bug in menuconfig itself.

It seems to be a bug at the Kbuild, fixed on Feb, 2008, on this changeset: 
commit 587c90616a5b44e6ccfac38e64d4fecee51d588c (attached).

As explained, after the patch description, the value for the Kconfig var, after
the patch, uses this formula:

    	(value && dependency) || select

where value is the default value.

Since CONFIG_CX88_MPEG is defined as:

config VIDEO_CX88_MPEG
        tristate
        depends on VIDEO_CX88_DVB || VIDEO_CX88_BLACKBIRD
        default y

And there there's no select, the value of CONFIG_CX88_MPEG is determined by:
	('y' && dependency)

The most complex case is when we have CX88 defined as:
	CX88 = 'y'

if both CX88_DVB and CX88_BLACKBIRD are defined as 'm' (or one of them is 'n'
and the other is 'm'), then CX88_MPEG is defined as:
	CX88_MPEG = 'm'

If one of CX88_DVB or CX88_BLACKBIRD is defined as 'y'; then we have:
	CX88_MPEG = 'y'

If both are 'n', we have:
	CX88_MPEG = 'n'

So, it seems that, after commit 587c90616a5b44e6ccfac38e64d4fecee51d588c,
everything is working as expected. We just need to provide a hack at the
out-of-tree build system for kernels that don't have this commit applied.

Cheers,
Mauro

commit 587c90616a5b44e6ccfac38e64d4fecee51d588c
Author: Roman Zippel <zippel@xxxxxxxxxxxxxx>
Date:   Mon Feb 11 21:13:47 2008 +0100

    kconfig: fix select in combination with default
    
    > The attached .config (with current -git) results in a compile
    > error since it contains:
    >
    > CONFIG_X86=y
    > # CONFIG_EMBEDDED is not set
    > CONFIG_SERIO=m
    > CONFIG_SERIO_I8042=y
    >
    > Looking at drivers/input/serio/Kconfig I simply don't get how this
    > can happen.
    
    You've hit the rather subtle rules of select vs default. What happened is
    that SERIO is selected to m, but SERIO_I8042 isn't selected so the default
    of y is used instead.
    We already had the problem in the past that select and default don't work
    well together, so this patch cleans this up and makes the rule hopefully
    more straightforward. Basically now the value is calculated like this:
    
    	(value && dependency) || select
    
    where the value is the user choice (if available and the symbol is
    visible) or default.
    
    In this case it means SERIO and SERIO_I8042 are both set to y due to their
    default and if SERIO didn't had the default, then the SERIO_I8042 value
    would be limited to m due to the dependency.
    
    I tested this patch with more 10000 random configs and above case is the
    only the difference that showed up, so I hope there is nothing that
    depended on the old more complex and subtle rules.
    
    Signed-off-by: Roman Zippel <zippel@xxxxxxxxxxxxxx>
    Tested-by: Adrian Bunk <bunk@xxxxxxxxxx>
    Signed-off-by: Sam Ravnborg <sam@xxxxxxxxxxxx>

diff --git a/scripts/kconfig/symbol.c b/scripts/kconfig/symbol.c
index 3929e5b..4a03191 100644
--- a/scripts/kconfig/symbol.c
+++ b/scripts/kconfig/symbol.c
@@ -298,22 +298,30 @@ void sym_calc_value(struct symbol *sym)
 		if (sym_is_choice_value(sym) && sym->visible == yes) {
 			prop = sym_get_choice_prop(sym);
 			newval.tri = (prop_get_symbol(prop)->curr.val == sym) ? yes : no;
-		} else if (EXPR_OR(sym->visible, sym->rev_dep.tri) != no) {
-			sym->flags |= SYMBOL_WRITE;
-			if (sym_has_value(sym))
-				newval.tri = sym->def[S_DEF_USER].tri;
-			else if (!sym_is_choice(sym)) {
-				prop = sym_get_default_prop(sym);
-				if (prop)
-					newval.tri = expr_calc_value(prop->expr);
+		} else {
+			if (sym->visible != no) {
+				/* if the symbol is visible use the user value
+				 * if available, otherwise try the default value
+				 */
+				sym->flags |= SYMBOL_WRITE;
+				if (sym_has_value(sym)) {
+					newval.tri = EXPR_AND(sym->def[S_DEF_USER].tri,
+							      sym->visible);
+					goto calc_newval;
+				}
 			}
-			newval.tri = EXPR_OR(EXPR_AND(newval.tri, sym->visible), sym->rev_dep.tri);
-		} else if (!sym_is_choice(sym)) {
-			prop = sym_get_default_prop(sym);
-			if (prop) {
+			if (sym->rev_dep.tri != no)
 				sym->flags |= SYMBOL_WRITE;
-				newval.tri = expr_calc_value(prop->expr);
+			if (!sym_is_choice(sym)) {
+				prop = sym_get_default_prop(sym);
+				if (prop) {
+					sym->flags |= SYMBOL_WRITE;
+					newval.tri = EXPR_AND(expr_calc_value(prop->expr),
+							      prop->visible.tri);
+				}
 			}
+		calc_newval:
+			newval.tri = EXPR_OR(newval.tri, sym->rev_dep.tri);
 		}
 		if (newval.tri == mod && sym_get_type(sym) == S_BOOLEAN)
 			newval.tri = yes;
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux