diff options
Diffstat (limited to 'drivers/net/sc92031.c')
-rw-r--r-- | drivers/net/sc92031.c | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/drivers/net/sc92031.c b/drivers/net/sc92031.c index 8d6030022d14..e35050322f97 100644 --- a/drivers/net/sc92031.c +++ b/drivers/net/sc92031.c | |||
@@ -428,9 +428,9 @@ static void _sc92031_set_mar(struct net_device *dev) | |||
428 | void __iomem *port_base = priv->port_base; | 428 | void __iomem *port_base = priv->port_base; |
429 | u32 mar0 = 0, mar1 = 0; | 429 | u32 mar0 = 0, mar1 = 0; |
430 | 430 | ||
431 | if ((dev->flags & IFF_PROMISC) | 431 | if ((dev->flags & IFF_PROMISC) || |
432 | || dev->mc_count > multicast_filter_limit | 432 | dev->mc_count > multicast_filter_limit || |
433 | || (dev->flags & IFF_ALLMULTI)) | 433 | (dev->flags & IFF_ALLMULTI)) |
434 | mar0 = mar1 = 0xffffffff; | 434 | mar0 = mar1 = 0xffffffff; |
435 | else if (dev->flags & IFF_MULTICAST) { | 435 | else if (dev->flags & IFF_MULTICAST) { |
436 | struct dev_mc_list *mc_list; | 436 | struct dev_mc_list *mc_list; |
@@ -777,10 +777,10 @@ static void _sc92031_rx_tasklet(struct net_device *dev) | |||
777 | 777 | ||
778 | rx_ring_offset = (rx_ring_offset + 4) % RX_BUF_LEN; | 778 | rx_ring_offset = (rx_ring_offset + 4) % RX_BUF_LEN; |
779 | 779 | ||
780 | if (unlikely(rx_status == 0 | 780 | if (unlikely(rx_status == 0 || |
781 | || rx_size > (MAX_ETH_FRAME_SIZE + 4) | 781 | rx_size > (MAX_ETH_FRAME_SIZE + 4) || |
782 | || rx_size < 16 | 782 | rx_size < 16 || |
783 | || !(rx_status & RxStatesOK))) { | 783 | !(rx_status & RxStatesOK))) { |
784 | _sc92031_rx_tasklet_error(dev, rx_status, rx_size); | 784 | _sc92031_rx_tasklet_error(dev, rx_status, rx_size); |
785 | break; | 785 | break; |
786 | } | 786 | } |
@@ -793,7 +793,7 @@ static void _sc92031_rx_tasklet(struct net_device *dev) | |||
793 | 793 | ||
794 | rx_len -= rx_size_align + 4; | 794 | rx_len -= rx_size_align + 4; |
795 | 795 | ||
796 | skb = netdev_alloc_skb(dev, pkt_size + NET_IP_ALIGN); | 796 | skb = netdev_alloc_skb_ip_align(dev, pkt_size); |
797 | if (unlikely(!skb)) { | 797 | if (unlikely(!skb)) { |
798 | if (printk_ratelimit()) | 798 | if (printk_ratelimit()) |
799 | printk(KERN_ERR "%s: Couldn't allocate a skb_buff for a packet of size %u\n", | 799 | printk(KERN_ERR "%s: Couldn't allocate a skb_buff for a packet of size %u\n", |
@@ -801,8 +801,6 @@ static void _sc92031_rx_tasklet(struct net_device *dev) | |||
801 | goto next; | 801 | goto next; |
802 | } | 802 | } |
803 | 803 | ||
804 | skb_reserve(skb, NET_IP_ALIGN); | ||
805 | |||
806 | if ((rx_ring_offset + pkt_size) > RX_BUF_LEN) { | 804 | if ((rx_ring_offset + pkt_size) > RX_BUF_LEN) { |
807 | memcpy(skb_put(skb, RX_BUF_LEN - rx_ring_offset), | 805 | memcpy(skb_put(skb, RX_BUF_LEN - rx_ring_offset), |
808 | rx_ring + rx_ring_offset, RX_BUF_LEN - rx_ring_offset); | 806 | rx_ring + rx_ring_offset, RX_BUF_LEN - rx_ring_offset); |