Hi Michael, After I applied the patch you provided below, the system is still frozen after I turn on the fcsfail flag. If it is possible, could you please test on your systems?
Thanks, -Bo On Mon, Mar 2, 2009 at 5:18 PM, Michael Buesch <[email protected]> wrote: > This changes the RX handler to pass more status flags to mac80211. > It also changes part of the drop policy, if bad frames were requested. > (Note that > currently mac80211 will throw a WARN_ON in that case. But nothing bad will > happen). > > This also removes some obsolete unused timestamping code. > > Signed-off-by: Michael Buesch <[email protected]> > > --- > > > John, please queue for the next feature release. > I'll probably look into the WARN_ON issue, too, but this is not too > important > as weird things are expected to happen if user requests passing of bad > frames. > > > Index: wireless-testing/drivers/net/wireless/b43/xmit.c > =================================================================== > --- wireless-testing.orig/drivers/net/wireless/b43/xmit.c 2009-03-02 > 23:14:52.000000000 +0100 > +++ wireless-testing/drivers/net/wireless/b43/xmit.c 2009-03-02 > 23:14:54.000000000 +0100 > @@ -538,8 +538,14 @@ void b43_rx(struct b43_wldev *dev, struc > chanstat = le16_to_cpu(rxhdr->channel); > phytype = chanstat & B43_RX_CHAN_PHYTYPE; > > - if (macstat & B43_RX_MAC_FCSERR) > + if (unlikely(macstat & B43_RX_MAC_FCSERR)) { > dev->wl->ieee_stats.dot11FCSErrorCount++; > + status.flag |= RX_FLAG_FAILED_FCS_CRC; > + } > + if (unlikely(phystat0 & (B43_RX_PHYST0_PLCPHCF | > B43_RX_PHYST0_PLCPFV))) > + status.flag |= RX_FLAG_FAILED_PLCP_CRC; > + if (phystat0 & B43_RX_PHYST0_SHORTPRMBL) > + status.flag |= RX_FLAG_SHORTPRE; > if (macstat & B43_RX_MAC_DECERR) { > /* Decryption with the given key failed. > * Drop the packet. We also won't be able to decrypt it with > @@ -606,8 +612,12 @@ void b43_rx(struct b43_wldev *dev, struc > phytype == B43_PHYTYPE_A); > else > status.rate_idx = b43_plcp_get_bitrate_idx_cck(plcp); > - if (unlikely(status.rate_idx == -1)) > - goto drop; > + if (unlikely(status.rate_idx == -1)) { > + /* PLCP seems to be corrupted. > + * Drop the frame, if we are not interested in corrupted > frames. */ > + if (!(dev->wl->filter_flags & FIF_PLCPFAIL)) > + goto drop; > + } > status.antenna = !!(phystat0 & B43_RX_PHYST0_ANT); > > /* > @@ -661,7 +671,6 @@ void b43_rx(struct b43_wldev *dev, struc > goto drop; > } > > - dev->stats.last_rx = jiffies; > ieee80211_rx_irqsafe(dev->wl->hw, skb, &status); > > return; > Index: wireless-testing/drivers/net/wireless/b43/b43.h > =================================================================== > --- wireless-testing.orig/drivers/net/wireless/b43/b43.h 2009-03-02 > 23:14:52.000000000 +0100 > +++ wireless-testing/drivers/net/wireless/b43/b43.h 2009-03-02 > 23:14:54.000000000 +0100 > @@ -550,9 +550,6 @@ struct b43_noise_calculation { > > struct b43_stats { > u8 link_noise; > - /* Store the last TX/RX times here for updating the leds. */ > - unsigned long last_tx; > - unsigned long last_rx; > }; > > struct b43_key { > Index: wireless-testing/drivers/net/wireless/b43/dma.c > =================================================================== > --- wireless-testing.orig/drivers/net/wireless/b43/dma.c 2009-03-02 > 23:14:52.000000000 +0100 > +++ wireless-testing/drivers/net/wireless/b43/dma.c 2009-03-02 > 23:14:54.000000000 +0100 > @@ -1425,7 +1425,6 @@ void b43_dma_handle_txstatus(struct b43_ > break; > slot = next_slot(ring, slot); > } > - dev->stats.last_tx = jiffies; > if (ring->stopped) { > B43_WARN_ON(free_slots(ring) < TX_SLOTS_PER_FRAME); > ieee80211_wake_queue(dev->wl->hw, ring->queue_prio); > > -- > Greetings, Michael. > _______________________________________________ > Bcm43xx-dev mailing list > [email protected] > https://lists.berlios.de/mailman/listinfo/bcm43xx-dev >
_______________________________________________ Bcm43xx-dev mailing list [email protected] https://lists.berlios.de/mailman/listinfo/bcm43xx-dev
