Re: [PATCH ieee80211] fix TX skb allocation flags and size

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Friday 14 October 2005 01:04, you wrote:
> Michael Buesch wrote:
> > @@ -221,11 +221,13 @@ static struct ieee80211_txb *ieee80211_a
> >   txb->frag_size = txb_size;
> >  
> >   for (i = 0; i < nr_frags; i++) {
> > -  txb->fragments[i] = dev_alloc_skb(txb_size);
> > +  txb->fragments[i] = __dev_alloc_skb(txb_size + headroom,
> > +          gfp_mask | GFP_DMA);
> >    if (unlikely(!txb->fragments[i])) {
> >     i--;
> 
> Very wrong.  GFP_DMA means ISA DMA.
> 
> See pci_map_xxx() and other DMA API functions.

Ok, the size issue is still valid and the real reason for doing this patch.
Please apply this:


ieee80211: Use tx_headroom

--- linux-2.6.14-rc4-git2/net/ieee80211/ieee80211_tx.c.orig 2005-10-13 22:45:13.000000000 +0200
+++ linux-2.6.14-rc4-git2/net/ieee80211/ieee80211_tx.c 2005-10-14 01:11:29.000000000 +0200
@@ -207,7 +207,7 @@ void ieee80211_txb_free(struct ieee80211
 }
 
 static struct ieee80211_txb *ieee80211_alloc_txb(int nr_frags, int txb_size,
-       gfp_t gfp_mask)
+       int headroom, gfp_t gfp_mask)
 {
  struct ieee80211_txb *txb;
  int i;
@@ -221,11 +221,13 @@ static struct ieee80211_txb *ieee80211_a
  txb->frag_size = txb_size;
 
  for (i = 0; i < nr_frags; i++) {
-  txb->fragments[i] = dev_alloc_skb(txb_size);
+  txb->fragments[i] = __dev_alloc_skb(txb_size + headroom,
+          gfp_mask);
   if (unlikely(!txb->fragments[i])) {
    i--;
    break;
   }
+  skb_reserve(txb->fragments[i], headroom);
  }
  if (unlikely(i != nr_frags)) {
   while (i >= 0)
@@ -350,7 +352,8 @@ int ieee80211_xmit(struct sk_buff *skb, 
  /* When we allocate the TXB we allocate enough space for the reserve
   * and full fragment bytes (bytes_per_frag doesn't include prefix,
   * postfix, header, FCS, etc.) */
- txb = ieee80211_alloc_txb(nr_frags, frag_size, GFP_ATOMIC);
+ txb = ieee80211_alloc_txb(nr_frags, frag_size,
+      ieee->tx_headroom, GFP_ATOMIC);
  if (unlikely(!txb)) {
   printk(KERN_WARNING "%s: Could not allocate TXB\n",
          ieee->dev->name);

Signed-off-by: Michael Buesch <[email protected]>

-- 
Greetings Michael.
ieee80211: Use tx_headroom

--- linux-2.6.14-rc4-git2/net/ieee80211/ieee80211_tx.c.orig	2005-10-13 22:45:13.000000000 +0200
+++ linux-2.6.14-rc4-git2/net/ieee80211/ieee80211_tx.c	2005-10-14 01:11:29.000000000 +0200
@@ -207,7 +207,7 @@ void ieee80211_txb_free(struct ieee80211
 }
 
 static struct ieee80211_txb *ieee80211_alloc_txb(int nr_frags, int txb_size,
-						 gfp_t gfp_mask)
+						 int headroom, gfp_t gfp_mask)
 {
 	struct ieee80211_txb *txb;
 	int i;
@@ -221,11 +221,13 @@ static struct ieee80211_txb *ieee80211_a
 	txb->frag_size = txb_size;
 
 	for (i = 0; i < nr_frags; i++) {
-		txb->fragments[i] = dev_alloc_skb(txb_size);
+		txb->fragments[i] = __dev_alloc_skb(txb_size + headroom,
+						    gfp_mask);
 		if (unlikely(!txb->fragments[i])) {
 			i--;
 			break;
 		}
+		skb_reserve(txb->fragments[i], headroom);
 	}
 	if (unlikely(i != nr_frags)) {
 		while (i >= 0)
@@ -350,7 +352,8 @@ int ieee80211_xmit(struct sk_buff *skb, 
 	/* When we allocate the TXB we allocate enough space for the reserve
 	 * and full fragment bytes (bytes_per_frag doesn't include prefix,
 	 * postfix, header, FCS, etc.) */
-	txb = ieee80211_alloc_txb(nr_frags, frag_size, GFP_ATOMIC);
+	txb = ieee80211_alloc_txb(nr_frags, frag_size,
+				  ieee->tx_headroom, GFP_ATOMIC);
 	if (unlikely(!txb)) {
 		printk(KERN_WARNING "%s: Could not allocate TXB\n",
 		       ieee->dev->name);

Signed-off-by: Michael Buesch <[email protected]>

Attachment: pgpcLg3kG7jU0.pgp
Description: PGP signature


[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux