public inbox for netdev@vger.kernel.org 
 help / color / mirror / Atom feed
From: Stephen Hemminger <shemminger@vyatta•com>
To: Jeff Garzik <jgarzik@pobox•com>
Cc: netdev@vger•kernel.org
Subject: [PATCH 09/13] myri: use netdev_alloc_skb
Date: Wed, 16 Apr 2008 16:37:36 -0700	[thread overview]
Message-ID: <20080416233757.623681762@vyatta.com> (raw)
In-Reply-To: 20080416233727.732025083@vyatta.com

[-- Attachment #1: myri --]
[-- Type: text/plain, Size: 2787 bytes --]

Use netdev_alloc_skb. This sets skb->dev and allows arch specific
allocation.

Copmpile tested only

Signed-off-by: Stephen Hemminger <shemminger@vyatta•com>

--- a/drivers/net/myri_sbus.c	2008-04-07 10:36:16.000000000 -0700
+++ b/drivers/net/myri_sbus.c	2008-04-07 12:44:15.000000000 -0700
@@ -266,6 +266,22 @@ static void myri_clean_rings(struct myri
 	}
 }
 
+
+/* We use this to acquire receive skb's that we can DMA directly into. */
+#define RX_SKB_PAD(addr) (PTR_ALIGN(addr, 64) - (unsigned long)(addr))
+
+static struct sk_buff *myri_alloc_skb(struct net_device *dev,
+				      unsigned int length, gfp_t gfp_flags)
+{
+	struct sk_buff *skb;
+
+	skb = __netdev_alloc_skb(dev, length + 64, gfp_flags);
+	if (likely(skb)) {
+		skb_reserve(skb, RX_SKB_PAD(skb->data));
+	}
+	return skb;
+}
+
 static void myri_init_rings(struct myri_eth *mp, int from_irq)
 {
 	struct recvq __iomem *rq = mp->rq;
@@ -285,7 +301,6 @@ static void myri_init_rings(struct myri_
 		if (!skb)
 			continue;
 		mp->rx_skbs[i] = skb;
-		skb->dev = dev;
 		skb_put(skb, RX_ALLOC_SIZE);
 
 		dma_addr = sbus_map_single(mp->myri_sdev, skb->data, RX_ALLOC_SIZE, SBUS_DMA_FROMDEVICE);
@@ -469,7 +484,6 @@ static void myri_rx(struct myri_eth *mp,
 					  RX_ALLOC_SIZE,
 					  SBUS_DMA_FROMDEVICE);
 			mp->rx_skbs[index] = new_skb;
-			new_skb->dev = dev;
 			skb_put(new_skb, RX_ALLOC_SIZE);
 			dma_addr = sbus_map_single(mp->myri_sdev,
 						   new_skb->data,
@@ -485,7 +499,7 @@ static void myri_rx(struct myri_eth *mp,
 			DRX(("trim(%d) ", len));
 			skb_trim(skb, len);
 		} else {
-			struct sk_buff *copy_skb = dev_alloc_skb(len);
+			struct sk_buff *copy_skb = netdev_alloc_skb(dev, len + 2);
 
 			DRX(("SMALLBUFF "));
 			if (copy_skb == NULL) {
@@ -493,7 +507,7 @@ static void myri_rx(struct myri_eth *mp,
 				goto drop_it;
 			}
 			/* DMA sync already done above. */
-			copy_skb->dev = dev;
+			skb_reserve(copy_skb, 2);
 			DRX(("resv_and_put "));
 			skb_put(copy_skb, len);
 			skb_copy_from_linear_data(skb, copy_skb->data, len);
--- a/drivers/net/myri_sbus.h	2008-04-07 10:36:16.000000000 -0700
+++ b/drivers/net/myri_sbus.h	2008-04-07 12:43:47.000000000 -0700
@@ -291,21 +291,4 @@ struct myri_eth {
 	struct sbus_dev			*myri_sdev;	/* Our SBUS device struct.    */
 };
 
-/* We use this to acquire receive skb's that we can DMA directly into. */
-#define ALIGNED_RX_SKB_ADDR(addr) \
-        ((((unsigned long)(addr) + (64 - 1)) & ~(64 - 1)) - (unsigned long)(addr))
-static inline struct sk_buff *myri_alloc_skb(unsigned int length, gfp_t gfp_flags)
-{
-	struct sk_buff *skb;
-
-	skb = alloc_skb(length + 64, gfp_flags);
-	if(skb) {
-		int offset = ALIGNED_RX_SKB_ADDR(skb->data);
-
-		if(offset)
-			skb_reserve(skb, offset);
-	}
-	return skb;
-}
-
 #endif /* !(_MYRI_SBUS_H) */

-- 


  parent reply	other threads:[~2008-04-16 23:49 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-04-16 23:37 [PATCH 00/13] Network driver changes for 2.6.26 Stephen Hemminger
2008-04-16 23:37 ` [PATCH 04/13] via-velocity: use netdev_alloc_skb Stephen Hemminger
2008-04-16 23:37 ` [PATCH 05/13] via-velocity: use memmove Stephen Hemminger
2008-04-16 23:37 ` [PATCH 06/13] sis190: use netdev_alloc_skb Stephen Hemminger
2008-04-17  1:04   ` Wang Chen
2008-04-17  2:16   ` Wang Chen
2008-04-17  2:59     ` Stephen Hemminger
2008-04-17  6:50   ` Francois Romieu
2008-04-16 23:37 ` [PATCH 07/13] sb1250: " Stephen Hemminger
2008-05-05 12:34   ` Maciej W. Rozycki
2008-04-16 23:37 ` [PATCH 08/13] ns8320: " Stephen Hemminger
2008-05-31  2:20   ` Jeff Garzik
2008-04-16 23:37 ` Stephen Hemminger [this message]
2008-04-16 23:37 ` [PATCH 10/13] ixp2000: " Stephen Hemminger
2008-04-17 13:53   ` Lennert Buytenhek
2008-04-16 23:37 ` [PATCH 11/13] hamachi: " Stephen Hemminger
2008-04-16 23:37 ` [PATCH 12/13] dl2k: " Stephen Hemminger
2008-04-16 23:37 ` [PATCH 13/13] acenic: " Stephen Hemminger
2008-05-31  2:21   ` Jeff Garzik
     [not found] ` <20080416233757.090004281@vyatta.com>
2008-04-17  2:33   ` [PATCH 02/13] atl1: " Jay Cliburn
     [not found] ` <20080416233757.015978466@vyatta.com>
2008-05-22 18:13   ` [PATCH 01/13] tg3: remove unneeded semicolons Jeff Garzik
     [not found] ` <20080416233757.166190217@vyatta.com>
2008-05-31  2:20   ` [PATCH 03/13] ts108: use netdev_alloc_skb Jeff Garzik

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20080416233757.623681762@vyatta.com \
    --to=shemminger@vyatta$(echo .)com \
    --cc=jgarzik@pobox$(echo .)com \
    --cc=netdev@vger$(echo .)kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox