sky2: don't do GRO on second port

There's something very important I forgot to tell you.
What?

Don't cross the GRO streams.
Why?

It would be bad.
I'm fuzzy on the whole good/bad thing. What do you mean, "bad"?

Try to imagine all the Internet as you know it stopping instantaneously
and every bit in every packet swapping at the speed of light.
Total packet reordering.
Right. That's bad. Okay. All right. Important safety tip. Thanks, Hubert

The simplest way to stop this is just avoid doing GRO on the second port.
Very few Marvell boards support two ports per ring, and GRO is just
an optimization.

Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by stephen hemminger and committed by David S. Miller de6be6c1 750e9fad

+11 -8
+11 -8
drivers/net/sky2.c
··· 2520 2520 } 2521 2521 } 2522 2522 2523 - static inline void sky2_skb_rx(const struct sky2_port *sky2, 2523 + static inline void sky2_skb_rx(struct napi_struct *napi, 2524 + const struct sky2_port *sky2, 2524 2525 u32 status, struct sk_buff *skb) 2525 2526 { 2526 2527 #ifdef SKY2_VLAN_TAG_USED 2527 - u16 vlan_tag = be16_to_cpu(sky2->rx_tag); 2528 2528 if (sky2->vlgrp && (status & GMR_FS_VLAN)) { 2529 - if (skb->ip_summed == CHECKSUM_NONE) 2529 + u16 vlan_tag = be16_to_cpu(sky2->rx_tag); 2530 + 2531 + if (skb->ip_summed == CHECKSUM_NONE || 2532 + sky2->netdev != napi->dev) 2530 2533 vlan_hwaccel_receive_skb(skb, sky2->vlgrp, vlan_tag); 2531 2534 else 2532 - vlan_gro_receive(&sky2->hw->napi, sky2->vlgrp, 2533 - vlan_tag, skb); 2535 + vlan_gro_receive(napi, sky2->vlgrp, vlan_tag, skb); 2534 2536 return; 2535 2537 } 2536 2538 #endif 2537 - if (skb->ip_summed == CHECKSUM_NONE) 2539 + if (skb->ip_summed == CHECKSUM_NONE || 2540 + sky2->netdev != napi->dev) 2538 2541 netif_receive_skb(skb); 2539 2542 else 2540 - napi_gro_receive(&sky2->hw->napi, skb); 2543 + napi_gro_receive(napi, skb); 2541 2544 } 2542 2545 2543 2546 static inline void sky2_rx_done(struct sky2_hw *hw, unsigned port, ··· 2641 2638 2642 2639 skb->protocol = eth_type_trans(skb, dev); 2643 2640 2644 - sky2_skb_rx(sky2, status, skb); 2641 + sky2_skb_rx(&hw->napi, sky2, status, skb); 2645 2642 2646 2643 /* Stop after net poll weight */ 2647 2644 if (++work_done >= to_do)