OSDN Git Service

CONFIG_TR/CONFIG_LLC: work around the problem with select
authorAl Viro <viro@ZenIV.linux.org.uk>
Sat, 4 Feb 2012 20:31:39 +0000 (20:31 +0000)
committerDavid S. Miller <davem@davemloft.net>
Tue, 7 Feb 2012 18:06:14 +0000 (13:06 -0500)
commitda0912868527913eba15f5ebcfb420b32a037f1a
tree4dde11f33b214f1d9c3e61a48a25964682ce328f
parentaadf1f0fc851d71095d2773bcda73e1423e6b730
CONFIG_TR/CONFIG_LLC: work around the problem with select

As it is, with PCI/ISA/MCA/CCW all set to n and PCMCIA set to m
setting TR to y will set LLC to m, with very unpleasant results -
net/802/psnap gets picked into obj-y, resulting in the kernel
that won't link - psnap calls functions from llc.  The cause,
AFAICS, is that kconfig gets rev_dep for LLC containing
|| TR && (deps for TR)
and even though TR is boolean, both LLC and PCMCIA are tristate
and that thing becomes || y && (n || m), i.e. || m.  The reason
for dependency on PCMCIA is that when none of PCI, ISA, MCA, CCW
or PCMCIA is set there'll be no tokenring drivers, so there's no
point building tokenring core.  Proper fix probably belongs in
kconfig (we need strict and, such that y <strict_and> m would be
y, so that rev_deps added for tristate selected by bool would
use that instead of &&; we'd have || TR <strict_and> (deps for TR)
in this case), but it's a rather intrusive change.  There's an
easy workaround in case of TR -> LLC select, namely to have a def_bool y
symbol sitting under if TR and have that symbol selecting LLC.
Kudos to johill for suggesting that one...

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/tokenring/Kconfig