On Sunday 13 April 2008, Thomas Bächler wrote: > Johannes Berg schrieb: > >>> I compiled half a dozen kernels and now figured it out. This is the > >>> patch that causes rt2500pci to be slow. If I revert it, it is fast again: > >>> http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=d43c7b37ad787173d08683f05eadeea0398fefdf > > > >> That's odd. But that patch looks a bit fishy now that I look at it, care > >> to try below change (manually, this isn't a patch)? > >> > >> johannes > >> > >> bool use_protection = (erp_value & WLAN_ERP_USE_PROTECTION) != 0; > >> - bool use_short_preamble = (erp_value & WLAN_ERP_BARKER_PREAMBLE) == 0; > >> + bool use_short_preamble = (erp_value & WLAN_ERP_BARKER_PREAMBLE) != 0; > >> DECLARE_MAC_BUF(mac); > > > > No, wait, I'm confused, the original patch is correct. As far as I can > > tell, the code there is correct. The bug in that code was actually > > introduced by me based on the wrong thinking I just did again. > > I figured as much from the original commit message. So rt2500pci works > properly when the use_short_preamble has the wrong value, and breaks > when it has the right one. > By the way, 2.6.25-rc8 was the first time that rt2500pci was ever fast > enough to be usable at all for me, so the bug you introduced seemed to > be the fix for my speed problems (which is odd). My guess is that > rt2500pci treats use_short_preamble wrong. Could you test this with the below patch? This enables short_preamble for all rt2x00 drivers regardless of what mac80211 issues. --- diff --git a/drivers/net/wireless/rt2x00/rt2x00config.c b/drivers/net/wireless/rt2x00/rt2x00config.c index a9930a0..1c24f5a 100644 --- a/drivers/net/wireless/rt2x00/rt2x00config.c +++ b/drivers/net/wireless/rt2x00/rt2x00config.c @@ -83,7 +83,7 @@ void rt2x00lib_config_erp(struct rt2x00_dev *rt2x00dev, memset(&erp, 0, sizeof(erp)); - erp.short_preamble = bss_conf->use_short_preamble; + erp.short_preamble = 1; erp.ack_timeout = PLCP + get_duration(ACK_SIZE, 10); erp.ack_consume_time = SIFS + PLCP + get_duration(ACK_SIZE, 10); @@ -92,7 +92,7 @@ void rt2x00lib_config_erp(struct rt2x00_dev *rt2x00dev, else erp.ack_timeout += DIFS; - if (bss_conf->use_short_preamble) { + if (1) { erp.ack_timeout += SHORT_PREAMBLE; erp.ack_consume_time += SHORT_PREAMBLE; } else { -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html