Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 972c40b5 authored by Eric Dumazet's avatar Eric Dumazet Committed by David S. Miller
Browse files

KS8851: Correct RX packet allocation



Use netdev_alloc_skb_ip_align() helper and do correct allocation

Tested-by: default avatarAbraham Arce <x0066660@ti.com>
Signed-off-by: default avatarAbraham Arce <x0066660@ti.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 719f8358
Loading
Loading
Loading
Loading
+21 −18
Original line number Original line Diff line number Diff line
@@ -503,21 +503,23 @@ static void ks8851_rx_pkts(struct ks8851_net *ks)
		ks8851_wrreg16(ks, KS_RXQCR,
		ks8851_wrreg16(ks, KS_RXQCR,
			       ks->rc_rxqcr | RXQCR_SDA | RXQCR_ADRFE);
			       ks->rc_rxqcr | RXQCR_SDA | RXQCR_ADRFE);


		if (rxlen > 0) {
		if (rxlen > 4) {
			skb = netdev_alloc_skb(ks->netdev, rxlen + 2 + 8);
			unsigned int rxalign;
			if (!skb) {

				/* todo - dump frame and move on */
			rxlen -= 4;
			}
			rxalign = ALIGN(rxlen, 4);

			skb = netdev_alloc_skb_ip_align(ks->netdev, rxalign);
			/* two bytes to ensure ip is aligned, and four bytes
			if (skb) {
			 * for the status header and 4 bytes of garbage */

			skb_reserve(skb, 2 + 4 + 4);
				/* 4 bytes of status header + 4 bytes of
				 * garbage: we put them before ethernet
				 * header, so that they are copied,
				 * but ignored.
				 */


			rxpkt = skb_put(skb, rxlen - 4) - 8;
				rxpkt = skb_put(skb, rxlen) - 8;


			/* align the packet length to 4 bytes, and add 4 bytes
				ks8851_rdfifo(ks, rxpkt, rxalign + 8);
			 * as we're getting the rx status header as well */
			ks8851_rdfifo(ks, rxpkt, ALIGN(rxlen, 4) + 8);


				if (netif_msg_pktdata(ks))
				if (netif_msg_pktdata(ks))
					ks8851_dbg_dumpkkt(ks, rxpkt);
					ks8851_dbg_dumpkkt(ks, rxpkt);
@@ -526,7 +528,8 @@ static void ks8851_rx_pkts(struct ks8851_net *ks)
				netif_rx(skb);
				netif_rx(skb);


				ks->netdev->stats.rx_packets++;
				ks->netdev->stats.rx_packets++;
			ks->netdev->stats.rx_bytes += rxlen - 4;
				ks->netdev->stats.rx_bytes += rxlen;
			}
		}
		}


		ks8851_wrreg16(ks, KS_RXQCR, ks->rc_rxqcr);
		ks8851_wrreg16(ks, KS_RXQCR, ks->rc_rxqcr);