.. | .. |
---|
2263 | 2263 | __func__, p_index, ring->c_index, |
---|
2264 | 2264 | ring->read_ptr, dma_length_status); |
---|
2265 | 2265 | |
---|
| 2266 | + if (unlikely(len > RX_BUF_LENGTH)) { |
---|
| 2267 | + netif_err(priv, rx_status, dev, "oversized packet\n"); |
---|
| 2268 | + dev->stats.rx_length_errors++; |
---|
| 2269 | + dev->stats.rx_errors++; |
---|
| 2270 | + dev_kfree_skb_any(skb); |
---|
| 2271 | + goto next; |
---|
| 2272 | + } |
---|
| 2273 | + |
---|
2266 | 2274 | if (unlikely(!(dma_flag & DMA_EOP) || !(dma_flag & DMA_SOP))) { |
---|
2267 | 2275 | netif_err(priv, rx_status, dev, |
---|
2268 | 2276 | "dropping fragmented packet!\n"); |
---|
.. | .. |
---|
3389 | 3397 | return ret; |
---|
3390 | 3398 | } |
---|
3391 | 3399 | |
---|
3392 | | -static void bcmgenet_netif_stop(struct net_device *dev) |
---|
| 3400 | +static void bcmgenet_netif_stop(struct net_device *dev, bool stop_phy) |
---|
3393 | 3401 | { |
---|
3394 | 3402 | struct bcmgenet_priv *priv = netdev_priv(dev); |
---|
3395 | 3403 | |
---|
.. | .. |
---|
3404 | 3412 | /* Disable MAC transmit. TX DMA disabled must be done before this */ |
---|
3405 | 3413 | umac_enable_set(priv, CMD_TX_EN, false); |
---|
3406 | 3414 | |
---|
3407 | | - phy_stop(dev->phydev); |
---|
| 3415 | + if (stop_phy) |
---|
| 3416 | + phy_stop(dev->phydev); |
---|
3408 | 3417 | bcmgenet_disable_rx_napi(priv); |
---|
3409 | 3418 | bcmgenet_intr_disable(priv); |
---|
3410 | 3419 | |
---|
.. | .. |
---|
3430 | 3439 | |
---|
3431 | 3440 | netif_dbg(priv, ifdown, dev, "bcmgenet_close\n"); |
---|
3432 | 3441 | |
---|
3433 | | - bcmgenet_netif_stop(dev); |
---|
| 3442 | + bcmgenet_netif_stop(dev, false); |
---|
3434 | 3443 | |
---|
3435 | 3444 | /* Really kill the PHY state machine and disconnect from it */ |
---|
3436 | 3445 | phy_disconnect(dev->phydev); |
---|
.. | .. |
---|
4232 | 4241 | |
---|
4233 | 4242 | netif_device_detach(dev); |
---|
4234 | 4243 | |
---|
4235 | | - bcmgenet_netif_stop(dev); |
---|
| 4244 | + bcmgenet_netif_stop(dev, true); |
---|
4236 | 4245 | |
---|
4237 | 4246 | if (!device_may_wakeup(d)) |
---|
4238 | 4247 | phy_suspend(dev->phydev); |
---|