[rt2x00-users] [PATCH] [BISECTED] rt2x00: Fix load_firmware - PBF system register not ready regression.
Helmut Schaa
helmut.schaa at googlemail.com
Thu Nov 25 06:37:48 UTC 2010
Am Mittwoch 24 November 2010 schrieb Wolfgang Kufner:
> Hi,
>
> On Wed, Nov 24, 2010 at 10:09 PM, Helmut Schaa
> <helmut.schaa at googlemail.com> wrote:
> >> Ok, the question is why gets the beacon queue killed (after the beacon int
> > update) over and over again? And also why does the beacon int update happen
> > all the time. Mind to add a WARN_ON to see the call trace?
>
> Not at all. Here you go:
Thanks.
I've trimmed the calltrace a bit for better readability:
> [<ffffffff8106374f>] warn_slowpath_common+0x7f/0xc0
> [<ffffffff81063846>] warn_slowpath_fmt+0x46/0x50
> [<ffffffffa0488600>] rt2800pci_kill_tx_queue+0xc0/0xe0 [rt2800pci]
> [<ffffffff815ad50e>] ? mutex_lock+0x1e/0x50
> [<ffffffffa03e1386>] rt2x00queue_update_beacon+0x116/0x140 [rt2x00lib]
> [<ffffffff815abb8e>] ? printk+0x68/0x6a
> [<ffffffff8107308c>] ? lock_timer_base+0x3c/0x70
> [<ffffffffa03df64c>] rt2x00mac_bss_info_changed+0xfc/0x180 [rt2x00lib]
> [<ffffffffa03998f3>] ieee80211_bss_info_change_notify+0x113/0x200 [mac80211]
> [<ffffffffa039ef0d>] ieee80211_offchannel_stop_beaconing+0xdd/0xf0 [mac80211]
> [<ffffffffa039e5b8>] __ieee80211_start_scan+0x1c8/0x250 [mac80211]
> [<ffffffff815483af>] ? unix_stream_sendmsg+0x3ff/0x420
> [<ffffffffa039e81a>] ieee80211_request_scan+0x3a/0x60 [mac80211]
> [<ffffffffa03acc82>] ieee80211_scan+0x72/0x90 [mac80211]
> [<ffffffffa037484b>] cfg80211_wext_siwscan+0x2ab/0x340 [cfg80211]
> [<ffffffff81587c40>] ioctl_standard_iw_point+0x1d0/0x3e0
> [<ffffffffa03745a0>] ? cfg80211_wext_siwscan+0x0/0x340 [cfg80211]
> [<ffffffff81587e50>] ? ioctl_standard_call+0x0/0xd0
> [<ffffffff815889f0>] ? ioctl_private_call+0x0/0xa0
> [<ffffffff81587ef1>] ioctl_standard_call+0xa1/0xd0
> [<ffffffff814bdc20>] ? __dev_get_by_name+0xb0/0xd0
> [<ffffffff81587e50>] ? ioctl_standard_call+0x0/0xd0
> [<ffffffff815871dc>] wireless_process_ioctl+0x1ac/0x1c0
> [<ffffffff81587e50>] ? ioctl_standard_call+0x0/0xd0
> [<ffffffff81587261>] wext_ioctl_dispatch+0x71/0xb0
> [<ffffffff815889f0>] ? ioctl_private_call+0x0/0xa0
> [<ffffffff81587346>] wext_handle_ioctl+0x46/0xa0
> [<ffffffff814bfb3f>] dev_ioctl+0x4df/0x4f0
> [<ffffffff815ae9c5>] ? _raw_spin_lock_irq+0x15/0x20
> [<ffffffff8100b841>] ? handle_signal+0x131/0x280
> [<ffffffff814a705a>] sock_ioctl+0xea/0x2b0
> [<ffffffff81171e91>] do_vfs_ioctl+0xb1/0x450
> [<ffffffff811722b1>] sys_ioctl+0x81/0xa0
> [<ffffffff8100c172>] system_call_fastpath+0x16/0x1b
So, mac80211 disableds beaconing while scanning (makes sense). But when
killing the beacon queue we also overwrite the beacon int. I'd propose
something like the following to mitigate this issue.
Could you please try this (untested) patch instead of your workaround?
The same fix would be needed in rt2800usb as well.
Signed-off-by: Helmut Schaa <helmut.schaa at googlemail.com>
---
diff --git a/drivers/net/wireless/rt2x00/rt2800pci.c b/drivers/net/wireless/rt2x00/rt2800pci.c
index 3a1468a..bea8352 100644
--- a/drivers/net/wireless/rt2x00/rt2800pci.c
+++ b/drivers/net/wireless/rt2x00/rt2800pci.c
@@ -588,7 +588,11 @@ static void rt2800pci_kill_tx_queue(struct data_queue *queue)
u32 reg;
if (queue->qid == QID_BEACON) {
- rt2800_register_write(rt2x00dev, BCN_TIME_CFG, 0);
+ rt2800_register_read(rt2x00dev, BCN_TIME_CFG, ®);
+ rt2x00_set_field32(®, BCN_TIME_CFG_TSF_TICKING, 0);
+ rt2x00_set_field32(®, BCN_TIME_CFG_TBTT_ENABLE, 0);
+ rt2x00_set_field32(®, BCN_TIME_CFG_BEACON_GEN, 0);
+ rt2800_register_write(rt2x00dev, BCN_TIME_CFG, reg);
return;
}
More information about the users
mailing list