Merge branch 'upstream-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6 into upstream-fixes

+35 -10
+6 -1
drivers/net/wireless/bcm43xx/bcm43xx_leds.c
··· 189 189 case BCM43xx_LED_INACTIVE: 190 190 continue; 191 191 case BCM43xx_LED_OFF: 192 + case BCM43xx_LED_BCM4303_3: 192 193 break; 193 194 case BCM43xx_LED_ON: 194 195 turn_on = 1; 195 196 break; 196 197 case BCM43xx_LED_ACTIVITY: 198 + case BCM43xx_LED_BCM4303_0: 197 199 turn_on = activity; 198 200 break; 199 201 case BCM43xx_LED_RADIO_ALL: 200 202 turn_on = radio->enabled; 201 203 break; 202 204 case BCM43xx_LED_RADIO_A: 205 + case BCM43xx_LED_BCM4303_2: 203 206 turn_on = (radio->enabled && phy->type == BCM43xx_PHYTYPE_A); 204 207 break; 205 208 case BCM43xx_LED_RADIO_B: 209 + case BCM43xx_LED_BCM4303_1: 206 210 turn_on = (radio->enabled && 207 211 (phy->type == BCM43xx_PHYTYPE_B || 208 212 phy->type == BCM43xx_PHYTYPE_G)); ··· 261 257 continue; 262 258 #endif /* CONFIG_BCM43XX_DEBUG */ 263 259 default: 264 - assert(0); 260 + dprintkl(KERN_INFO PFX "Bad value in leds_update," 261 + " led->behaviour: 0x%x\n", led->behaviour); 265 262 }; 266 263 267 264 if (led->activelow)
+6
drivers/net/wireless/bcm43xx/bcm43xx_leds.h
··· 46 46 BCM43xx_LED_TEST_BLINKSLOW, 47 47 BCM43xx_LED_TEST_BLINKMEDIUM, 48 48 BCM43xx_LED_TEST_BLINKFAST, 49 + 50 + /* Misc values for BCM4303 */ 51 + BCM43xx_LED_BCM4303_0 = 0x2B, 52 + BCM43xx_LED_BCM4303_1 = 0x78, 53 + BCM43xx_LED_BCM4303_2 = 0x2E, 54 + BCM43xx_LED_BCM4303_3 = 0x19, 49 55 }; 50 56 51 57 int bcm43xx_leds_init(struct bcm43xx_private *bcm);
+15 -1
drivers/net/wireless/bcm43xx/bcm43xx_main.c
··· 3163 3163 static void bcm43xx_periodic_work_handler(void *d) 3164 3164 { 3165 3165 struct bcm43xx_private *bcm = d; 3166 + struct net_device *net_dev = bcm->net_dev; 3166 3167 unsigned long flags; 3167 3168 u32 savedirqs = 0; 3168 3169 int badness; 3170 + unsigned long orig_trans_start = 0; 3169 3171 3170 3172 mutex_lock(&bcm->mutex); 3171 3173 badness = estimate_periodic_work_badness(bcm->periodic_state); ··· 3175 3173 /* Periodic work will take a long time, so we want it to 3176 3174 * be preemtible. 3177 3175 */ 3178 - netif_tx_disable(bcm->net_dev); 3176 + 3177 + netif_tx_lock_bh(net_dev); 3178 + /* We must fake a started transmission here, as we are going to 3179 + * disable TX. If we wouldn't fake a TX, it would be possible to 3180 + * trigger the netdev watchdog, if the last real TX is already 3181 + * some time on the past (slightly less than 5secs) 3182 + */ 3183 + orig_trans_start = net_dev->trans_start; 3184 + net_dev->trans_start = jiffies; 3185 + netif_stop_queue(net_dev); 3186 + netif_tx_unlock_bh(net_dev); 3187 + 3179 3188 spin_lock_irqsave(&bcm->irq_lock, flags); 3180 3189 bcm43xx_mac_suspend(bcm); 3181 3190 if (bcm43xx_using_pio(bcm)) ··· 3211 3198 bcm43xx_pio_thaw_txqueues(bcm); 3212 3199 bcm43xx_mac_enable(bcm); 3213 3200 netif_wake_queue(bcm->net_dev); 3201 + net_dev->trans_start = orig_trans_start; 3214 3202 } 3215 3203 mmiowb(); 3216 3204 spin_unlock_irqrestore(&bcm->irq_lock, flags);
+2 -2
drivers/net/wireless/hostap/hostap_plx.c
··· 364 364 365 365 pos = 0; 366 366 while (pos < CIS_MAX_LEN - 1 && cis[pos] != CISTPL_END) { 367 - if (pos + cis[pos + 1] >= CIS_MAX_LEN) 367 + if (pos + 2 + cis[pos + 1] > CIS_MAX_LEN) 368 368 goto cis_error; 369 369 370 370 switch (cis[pos]) { ··· 391 391 break; 392 392 393 393 case CISTPL_MANFID: 394 - if (cis[pos + 1] < 5) 394 + if (cis[pos + 1] < 4) 395 395 goto cis_error; 396 396 manfid1 = cis[pos + 2] + (cis[pos + 3] << 8); 397 397 manfid2 = cis[pos + 4] + (cis[pos + 5] << 8);
+6 -6
net/ieee80211/ieee80211_rx.c
··· 1078 1078 1079 1079 while (length >= sizeof(*info_element)) { 1080 1080 if (sizeof(*info_element) + info_element->len > length) { 1081 - IEEE80211_ERROR("Info elem: parse failed: " 1082 - "info_element->len + 2 > left : " 1083 - "info_element->len+2=%zd left=%d, id=%d.\n", 1084 - info_element->len + 1085 - sizeof(*info_element), 1086 - length, info_element->id); 1081 + IEEE80211_DEBUG_MGMT("Info elem: parse failed: " 1082 + "info_element->len + 2 > left : " 1083 + "info_element->len+2=%zd left=%d, id=%d.\n", 1084 + info_element->len + 1085 + sizeof(*info_element), 1086 + length, info_element->id); 1087 1087 /* We stop processing but don't return an error here 1088 1088 * because some misbehaviour APs break this rule. ie. 1089 1089 * Orinoco AP1000. */