Red Hat Bugzilla – Bug 498622
iwl3945 stays disabled after booted with rf killswitch on
Last modified: 2009-10-05 05:39:04 EDT
Description of problem:
I can't get my wifi working after booting with rf kill switch on and turning it off afterwards.
Module iwl3945 has to be reloaded for wifi to work again.
Version-Release number of selected component (if applicable):
Steps to Reproduce:
1. turn rf killswitch on
3. turn rf killswitch off
4. try to up the interface (ip l set up dev wlan0)
wlan0 device is not working
kernel thinks module has been disabled.
from /var/log/messages (after the "ip l set up dev wlan0" command)
kernel: iwl3945: Radio disabled by SW RF kill (module parameter)
working wlan interface after rf killswitch is turned off
It works as expected with vanilla kernel 184.108.40.206.
I forgot to mention my hw:
03:00.0 Network controller: Intel Corporation PRO/Wireless 3945ABG [Golan] Network Connection (rev 02)
This bug appears to have been reported against 'rawhide' during the Fedora 11 development cycle.
Changing version to '11'.
More information and reason for this action is here:
If you unload iwl3945 module using rmmod and then load it again using modprobe, wireless card starts to work, at least for me on Lenovo R61. There just needs to be a way to make system do that automatically after switching killswitch.
Thanks for reply.
I know this workaround and am glad there is a way to make my wireless work. But I'd rather see a clean fix than hard-wiring a workaround into the system. Especially when this behaviour is caused by some of fedora patches (upstream kernel worked fine).
I've noticed that my workaround doesn't work in all cases.
In rfkill subsystem switch has tree states HARD_BLOCK, SOFT_BLOCK and
UNBLOCKED and can be only in one state at the same time.
In iwl3945 driver are separate switches (bits) STATUS_RF_KILL_SW, STATUS_RF_KILL_HW, radio transmitter can be enabled only if both of these bits are clear.
- during boot rfkill change state from UNBLOCK to SOFT_BLOCK and then again
- if rfkill move to SOFT_BLOCK it set STATUS_RF_KILL_SW in driver and
clear it when change to UNBLOCK
- if iwl3945 driver initialize during SOFT_BLOCK and laptop killswitch is
on, it change set STATUS_RF_KILL_HW and rfkill state to HARD_BLOCK
- rfkill wants to change to UNBLOCK but the state is now HARD_BLOCK - so
- killswitch on laptop change to off, iwl3945 clear STATUS_RF_KILL_HW
- iwl3945 still has set STATUS_RF_KILL_SW, so not enable radio
Problem not happens if during rfkill UNBLOCK->SOFT_BLOCK->UNBLOCK
sequence iwl3945 driver is not initializing it's owns RF KILL internals or laptop killswitch is off.
Bug can be observed in fedora due to backported
It is also present in mainline 2.6.30 and fixed in 2.6.31-rc1 because of rewrite of rfkill subsystem in:
Author: Johannes Berg <email@example.com>
Date: Tue Jun 2 13:01:37 2009 +0200
After commit rfkill subsystem is mach more sane implemented and HW/SW switches are represented as separate bits line in iwl3945 dirver.
Created attachment 350247 [details]
This is workaround/fix of problem. In iwl3945 we disable SW switch regardless of HW switch state. We also report SW state before HW state to move rfkill subsystem to SOFT_BLOCK rather than HARD_BLOCK.
I do basic tests the patch on my laptop and generally it works. I not tested it with suspend (as KDE Hibernete button in F11 seems not work for me :-( )
Below is link to kernel with fix:
*** Bug 505456 has been marked as a duplicate of this bug. ***
Fedora 11 now is switching to 2.6.30 kernel. Sadly on vanilla 220.127.116.11 the rfkill with iwl3945 driver perform even worse. On my laptop after turning killswitch on and off wifi not work. Have to not use rfkill switch at all to make wifi working.
I'm closing this bug since is fixed in kernel 18.104.22.168, and F11 ships now 22.214.171.124 .
Fix confirmed, thanks.