Ubuntu

Comment 9 for bug 333903

pauls (paulatgm) wrote :

> Indeed wl, ssb and b43 take the same modalias space, that's why the
> jockey-generated blacklist has this rule:
>
> # load wl before b44 so that both work
> install wl modprobe -r b43 b44 b43legacy ssb; modprobe --ignore-install wl $CMDLINE_OPTS; modprobe -Qba b44
>
> That means: "if you install wl, remove b43 b44 b43legacy ssb, install
> wl, and then load b43 again". b43 and friends won't get autoloaded due
> to the blacklisting. I actually thought that this got successfully
> tested in the intrepit timeframe, but maybe it was, and it stopped
> working in Jaunty.

Yes, I had inserted this same line in intrepid /etc/modprobe.d/wl and it was working for me there, so it's definitely a change in jaunty.

> At first I'd think that b44 is loaded first, which pulls in ssb as a
> dependency, and then the kernel doesn't bother modprobing again, since
> there's already a driver which (supposedly) covers the device. However,
> you already said that ssb would be loaded first, then b43, then b44?

I'm confused by the output of "lshw -C network" which shows this for the ethernet:

       product: BCM4401-B0 100Base-TX
       bus info: pci@0000:03:00.0
       configuration: broadcast=yes driver=b44 driverversion=2.0 ip=65.191.200.226 latency=64 module=ssb multicast=yes

You say the ethernet uses b44 and pulls in ssb as a dependency, but why does it show the module as ssb instead of b44. I guess I'm confused about the difference between a module and a driver. I thought they were the same. I would have expected the driver and module listings to both be b44.

Anyway, the output for the wifi shows:

       product: BCM4328 802.11a/b/g/n
       bus info: pci@0000:0b:00.0
       configuration: driver=b43-pci-bridge latency=0 module=ssb

Isnt' the ssb module the reason that the STA "wl" module won't ever get called? Apparently, the "blacklist ssb" statement isn't working (more below). Do we need some blacklist statement for "b43-pci-bridge" (whatever that is, since it's no a module in /lib/modules/).

>
> Since you already tried blacklisting b44, it seems that something in
> udev doesn't respect the blacklist. However, a "grep modprobe
> /lib/udev/rules.d" shows that all calls have -b ("use blacklist"). So
> I'm quite stunned now.
>
> Do you happen to have an /etc/modules which explicitly loads b44 or b43
> or ssb?

Here's the contents of /etc/modules

# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
loop
lp
rtc
fuse

> Also, to checkout whether the blacklist is actually being used, could
> you try appending these:
>
> install b44 echo b44 >> /tmp/modprobe.log; /sbin/modprobe --ignore-install b44
> install b43 echo b43 >> /tmp/modprobe.log; /sbin/modprobe --ignore-install b43
> install ssb echo ssb >> /tmp/modprobe.log; /sbin/modprobe --ignore-install ssb
> install wl echo wl >> /tmp/modprobe.log; modprobe -r b43 b44 b43legacy ssb; modprobe --ignore-install wl $CMDLINE_OPTS; modprobe -Qba b44
>
> (and remove the other install rules for those three, but do keep the
> blacklist entries). Do you get a /tmp/modprobe.log? If so, then
> something is not adhering the blacklist.

This is /etc/modprobe.d/blacklist-bcm43

blacklist bcm43xx
blacklist b43
blacklist b43_legacy
blacklist ssb
# load wl before b44 so that both work
#install wl modprobe -r b43 b44 b43legacy ssb; modprobe --ignore-install wl $CMDLINE_OPTS; modprobe -Qba b44
blacklist b44
install b44 echo b44 >> /tmp/modprobe.log; /sbin/modprobe --ignore-install b44
install b43 echo b43 >> /tmp/modprobe.log; /sbin/modprobe --ignore-install b43
install ssb echo ssb >> /tmp/modprobe.log; /sbin/modprobe --ignore-install ssb
install wl echo wl >> /tmp/modprobe.log; modprobe -r b43 b44 b43legacy ssb; modprobe --ignore-install wl $CMDLINE_OPTS; modprobe -Qba b44

After rebooting there is no modprobe.log.