Message ID | 4A86BAF3.5060609@gmail.com |
---|---|
State | Changes Requested, archived |
Delegated to: | David Miller |
Headers | show |
Roel Kluin <roel.kluin@gmail.com> :
[...]
> Maybe someone could test this?
I may undust a pair of card and a split box but do not hold your breath.
Roel Kluin <roel.kluin@gmail.com> writes: > +++ b/drivers/net/wan/dscc4.c > @@ -663,9 +663,9 @@ static inline void dscc4_rx_skb(struct dscc4_dev_priv *dpriv, > } else { > if (skb->data[pkt_len] & FrameRdo) > dev->stats.rx_fifo_errors++; > - else if (!(skb->data[pkt_len] | ~FrameCrc)) > + else if (!(skb->data[pkt_len] & FrameCrc)) > dev->stats.rx_crc_errors++; This looks like a correct fix. > - else if (!(skb->data[pkt_len] | ~(FrameVfr | FrameRab))) > + else if (!(skb->data[pkt_len] & (FrameVfr | FrameRab))) > dev->stats.rx_length_errors++; This test requires both FrameVfr and FrameRab to be true (zero). Perhaps it should be: > + else if ((skb->data[pkt_len] & (FrameVfr | FrameRab)) != FrameVfr | FrameRab) > else > dev->stats.rx_errors++; rx_errors is incremented only on remaining errors. I think most drivers increment rx_errors on all RX errors, and simultaneously rx_*_errors when needed. Perhaps something like the following should be better? u8 status = ~skb->data[pkt_len]; if (status == 0) looks_good...; else { if (status & FrameRab) ... if (status & FrameVfr) ... etc. rx_errors++; } I don't have the hardware and can't test (donations of such hw welcome).
diff --git a/drivers/net/wan/dscc4.c b/drivers/net/wan/dscc4.c index 8face5d..b686050 100644 --- a/drivers/net/wan/dscc4.c +++ b/drivers/net/wan/dscc4.c @@ -663,9 +663,9 @@ static inline void dscc4_rx_skb(struct dscc4_dev_priv *dpriv, } else { if (skb->data[pkt_len] & FrameRdo) dev->stats.rx_fifo_errors++; - else if (!(skb->data[pkt_len] | ~FrameCrc)) + else if (!(skb->data[pkt_len] & FrameCrc)) dev->stats.rx_crc_errors++; - else if (!(skb->data[pkt_len] | ~(FrameVfr | FrameRab))) + else if (!(skb->data[pkt_len] & (FrameVfr | FrameRab))) dev->stats.rx_length_errors++; else dev->stats.rx_errors++;