Re: [PATCH 1/3] bcm43xx-mac80211: Catch dma mapping failures.

2007-04-10 Thread Michael Buesch
Series applied, thanks.
All untested, of course, as I don't have such a machine.

-- 
Greetings Michael.
___
Bcm43xx-dev mailing list
Bcm43xx-dev@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/bcm43xx-dev


Re: [PATCH 1/3] bcm43xx-mac80211: Catch dma mapping failures.

2007-04-10 Thread Michael Buesch
Series applied, thanks.
All untested, of course, as I don't have such a machine.

-- 
Greetings Michael.
___
Bcm43xx-dev mailing list
Bcm43xx-dev@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/bcm43xx-dev


Re: [PATCH 1/3] bcm43xx-mac80211: Catch dma mapping failures.

2007-04-10 Thread Michael Buesch
What the hell? I CCed Will, but somebody stripped it off on
its way from my server to the list...

On Tuesday 10 April 2007 20:12, Michael Buesch wrote:
 Series applied, thanks.
 All untested, of course, as I don't have such a machine.
 

-- 
Greetings Michael.
___
Bcm43xx-dev mailing list
Bcm43xx-dev@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/bcm43xx-dev


Re: [PATCH 1/3] bcm43xx-mac80211: Catch dma mapping failures.

2007-04-06 Thread Michael Buesch
On Friday 06 April 2007 03:35, Will Dyson wrote:
 On 4/5/07, Michael Buesch [EMAIL PROTECTED] wrote:
  On Thursday 05 April 2007 06:03, Will Dyson wrote:
   @@ -1052,8 +1059,10 @@ static void dma_tx_fragment(struct bcm43xx_dmaring 
   *ring,
  
 memcpy(meta-txstat.control, ctl, sizeof(*ctl));
 meta-skb = skb;
   - meta-dmaaddr = map_descbuffer(ring, skb-data, skb-len, 1);
 meta-is_last_fragment = 1;
   + meta-dmaaddr = map_descbuffer(ring, skb-data, skb-len, 1);
   + if(dma_mapping_error(meta-dmaaddr))
 
  Codingstyle. Space between if and (
 
 Sigh. I did try ./scripts/Lindent, by the way. Pretty useless. It
 tries to change almost every line.

Yeah, lindent is useless when patching existing code.

 Is there a set of indent args that will actually help with this,
 without generating so much noise that I can't see what I messed up?

I'm sorry, I don't know.

-- 
Greetings Michael.
___
Bcm43xx-dev mailing list
Bcm43xx-dev@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/bcm43xx-dev


Re: [PATCH 1/3] bcm43xx-mac80211: Catch dma mapping failures.

2007-04-05 Thread Michael Buesch
On Thursday 05 April 2007 06:03, Will Dyson wrote:
 @@ -1052,8 +1059,10 @@ static void dma_tx_fragment(struct bcm43xx_dmaring 
 *ring,
  
   memcpy(meta-txstat.control, ctl, sizeof(*ctl));
   meta-skb = skb;
 - meta-dmaaddr = map_descbuffer(ring, skb-data, skb-len, 1);
   meta-is_last_fragment = 1;
 + meta-dmaaddr = map_descbuffer(ring, skb-data, skb-len, 1);
 + if(dma_mapping_error(meta-dmaaddr))

Codingstyle. Space between if and (

-- 
Greetings Michael.
___
Bcm43xx-dev mailing list
Bcm43xx-dev@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/bcm43xx-dev


Re: [PATCH 1/3] bcm43xx-mac80211: Catch dma mapping failures.

2007-04-05 Thread Will Dyson
On 4/5/07, Michael Buesch [EMAIL PROTECTED] wrote:
 On Thursday 05 April 2007 06:03, Will Dyson wrote:
  @@ -1052,8 +1059,10 @@ static void dma_tx_fragment(struct bcm43xx_dmaring 
  *ring,
 
memcpy(meta-txstat.control, ctl, sizeof(*ctl));
meta-skb = skb;
  - meta-dmaaddr = map_descbuffer(ring, skb-data, skb-len, 1);
meta-is_last_fragment = 1;
  + meta-dmaaddr = map_descbuffer(ring, skb-data, skb-len, 1);
  + if(dma_mapping_error(meta-dmaaddr))

 Codingstyle. Space between if and (

Sigh. I did try ./scripts/Lindent, by the way. Pretty useless. It
tries to change almost every line.

Is there a set of indent args that will actually help with this,
without generating so much noise that I can't see what I messed up?

-- 
Will Dyson
http://www.lucidts.com/
Linux/Mac/Win consulting
___
Bcm43xx-dev mailing list
Bcm43xx-dev@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/bcm43xx-dev


[PATCH 1/3] bcm43xx-mac80211: Catch dma mapping failures.

2007-04-04 Thread Will Dyson
From: will [EMAIL PROTECTED](none)

Check result of dma_map_single(), print warnings and propagate errors up the
call stack.

Signed-off-by: Will Dyson [EMAIL PROTECTED]
---
 .../net/wireless/mac80211/bcm43xx/bcm43xx_dma.c|   39 +++-
 1 files changed, 30 insertions(+), 9 deletions(-)

diff --git a/drivers/net/wireless/mac80211/bcm43xx/bcm43xx_dma.c 
b/drivers/net/wireless/mac80211/bcm43xx/bcm43xx_dma.c
index d53679d..4abc6c8 100644
--- a/drivers/net/wireless/mac80211/bcm43xx/bcm43xx_dma.c
+++ b/drivers/net/wireless/mac80211/bcm43xx/bcm43xx_dma.c
@@ -525,9 +525,11 @@ static int setup_rx_descbuffer(struct bcm43xx_dmaring 
*ring,
return -ENOMEM;
dmaaddr = map_descbuffer(ring, skb-data,
 ring-rx_buffersize, 0);
+   if (dma_mapping_error(dmaaddr))
+   return -EIO;
+
meta-skb = skb;
meta-dmaaddr = dmaaddr;
-
ring-ops-fill_descriptor(ring, desc, dmaaddr,
   ring-rx_buffersize, 0, 0, 0);
 
@@ -552,8 +554,10 @@ static int alloc_initial_descbuffers(struct 
bcm43xx_dmaring *ring)
desc = ring-ops-idx2desc(ring, i, meta);
 
err = setup_rx_descbuffer(ring, desc, meta, GFP_KERNEL);
-   if (err)
+   if (err) {
+   printk(KERN_ERR PFX Failed to allocate initial 
descbuffers\n);
goto err_unwind;
+   }
}
mb();
ring-used_slots = ring-nr_slots;
@@ -1017,7 +1021,7 @@ struct bcm43xx_dmaring * parse_cookie(struct 
bcm43xx_wldev *dev,
return ring;
 }
 
-static void dma_tx_fragment(struct bcm43xx_dmaring *ring,
+static int dma_tx_fragment(struct bcm43xx_dmaring *ring,
struct sk_buff *skb,
struct ieee80211_tx_control *ctl)
 {
@@ -1026,23 +1030,26 @@ static void dma_tx_fragment(struct bcm43xx_dmaring 
*ring,
int slot;
struct bcm43xx_dmadesc_generic *desc;
struct bcm43xx_dmadesc_meta *meta;
+   struct bcm43xx_dmadesc_meta *meta_hdr;
 
 #define SLOTS_PER_PACKET  2
assert(skb_shinfo(skb)-nr_frags == 0);
 
/* Get a slot for the header. */
slot = request_slot(ring);
-   desc = ops-idx2desc(ring, slot, meta);
-   memset(meta, 0, sizeof(*meta));
+   desc = ops-idx2desc(ring, slot, meta_hdr);
+   memset(meta_hdr, 0, sizeof(*meta_hdr));
 
header = (ring-txhdr_cache[slot * sizeof(struct bcm43xx_txhdr_fw4)]);
bcm43xx_generate_txhdr(ring-dev, header,
   skb-data, skb-len, ctl,
   generate_cookie(ring, slot));
 
-   meta-dmaaddr = map_descbuffer(ring, (unsigned char *)header,
+   meta_hdr-dmaaddr = map_descbuffer(ring, (unsigned char *)header,
   sizeof(struct bcm43xx_txhdr_fw4), 1);
-   ops-fill_descriptor(ring, desc, meta-dmaaddr,
+   if (dma_mapping_error(meta_hdr-dmaaddr))
+   return -EIO;
+   ops-fill_descriptor(ring, desc, meta_hdr-dmaaddr,
 sizeof(struct bcm43xx_txhdr_fw4), 1, 0, 0);
 
/* Get a slot for the payload. */
@@ -1052,8 +1059,10 @@ static void dma_tx_fragment(struct bcm43xx_dmaring *ring,
 
memcpy(meta-txstat.control, ctl, sizeof(*ctl));
meta-skb = skb;
-   meta-dmaaddr = map_descbuffer(ring, skb-data, skb-len, 1);
meta-is_last_fragment = 1;
+   meta-dmaaddr = map_descbuffer(ring, skb-data, skb-len, 1);
+   if(dma_mapping_error(meta-dmaaddr))
+   goto out_unmap_hdr;
 
ops-fill_descriptor(ring, desc, meta-dmaaddr,
 skb-len, 0, 1, 1);
@@ -1061,6 +1070,12 @@ static void dma_tx_fragment(struct bcm43xx_dmaring *ring,
/* Now transfer the whole frame. */
wmb();
ops-poke_tx(ring, next_slot(ring, slot));
+   return 0;
+
+out_unmap_hdr:
+   unmap_descbuffer(ring, meta_hdr-dmaaddr,
+   sizeof(struct bcm43xx_txhdr_fw4), 1);
+   return -EIO;
 }
 
 int bcm43xx_dma_tx(struct bcm43xx_wldev *dev,
@@ -1068,6 +1083,7 @@ int bcm43xx_dma_tx(struct bcm43xx_wldev *dev,
   struct ieee80211_tx_control *ctl)
 {
struct bcm43xx_dmaring *ring = dev-dma.tx_ring1;
+   int err = 0;
 
assert(ring-tx);
if (unlikely(free_slots(ring)  SLOTS_PER_PACKET)) {
@@ -1078,7 +1094,12 @@ int bcm43xx_dma_tx(struct bcm43xx_wldev *dev,
return NETDEV_TX_BUSY;
}
 
-   dma_tx_fragment(ring, skb, ctl);
+   err = dma_tx_fragment(ring, skb, ctl);
+   if (unlikely(err)) {
+   printkl(KERN_ERR PFX DMA tx mapping failure\n);
+   return NETDEV_TX_BUSY;
+   }
+
ring-nr_tx_packets++;
if (free_slots(ring)  SLOTS_PER_PACKET) {
/* FIXME: we currently only have one queue */
-- 
1.5.0.3

___

[PATCH 1/3] bcm43xx-mac80211: Catch dma mapping failures.

2007-03-25 Thread Will Dyson

Check result of dma_map_single(), print warnings and propagate errors up the
call stack.

Signed-off-by: Will Dyson [EMAIL PROTECTED]
---
.../net/wireless/mac80211/bcm43xx/bcm43xx_dma.c|   39
+++-
1 files changed, 30 insertions(+), 9 deletions(-)

diff --git a/drivers/net/wireless/mac80211/bcm43xx/bcm43xx_dma.c
b/drivers/net/wireless/mac80211/bcm43xx/bcm43xx_dma.c
index d53679d..4abc6c8 100644
--- a/drivers/net/wireless/mac80211/bcm43xx/bcm43xx_dma.c
+++ b/drivers/net/wireless/mac80211/bcm43xx/bcm43xx_dma.c
@@ -525,9 +525,11 @@ static int setup_rx_descbuffer(struct bcm43xx_dmaring
*ring,
return -ENOMEM;
dmaaddr = map_descbuffer(ring, skb-data,
 ring-rx_buffersize, 0);
+if (dma_mapping_error(dmaaddr))
+return -EIO;
+
meta-skb = skb;
meta-dmaaddr = dmaaddr;
-
ring-ops-fill_descriptor(ring, desc, dmaaddr,
   ring-rx_buffersize, 0, 0, 0);

@@ -552,8 +554,10 @@ static int alloc_initial_descbuffers(struct
bcm43xx_dmaring *ring)
desc = ring-ops-idx2desc(ring, i, meta);

err = setup_rx_descbuffer(ring, desc, meta, GFP_KERNEL);
-if (err)
+if (err) {
+printk(KERN_ERR PFX Failed to allocate initial
descbuffers\n);
goto err_unwind;
+}
}
mb();
ring-used_slots = ring-nr_slots;
@@ -1017,7 +1021,7 @@ struct bcm43xx_dmaring * parse_cookie(struct
bcm43xx_wldev *dev,
return ring;
}

-static void dma_tx_fragment(struct bcm43xx_dmaring *ring,
+static int dma_tx_fragment(struct bcm43xx_dmaring *ring,
struct sk_buff *skb,
struct ieee80211_tx_control *ctl)
{
@@ -1026,23 +1030,26 @@ static void dma_tx_fragment(struct bcm43xx_dmaring
*ring,
int slot;
struct bcm43xx_dmadesc_generic *desc;
struct bcm43xx_dmadesc_meta *meta;
+struct bcm43xx_dmadesc_meta *meta_hdr;

#define SLOTS_PER_PACKET  2
assert(skb_shinfo(skb)-nr_frags == 0);

/* Get a slot for the header. */
slot = request_slot(ring);
-desc = ops-idx2desc(ring, slot, meta);
-memset(meta, 0, sizeof(*meta));
+desc = ops-idx2desc(ring, slot, meta_hdr);
+memset(meta_hdr, 0, sizeof(*meta_hdr));

header = (ring-txhdr_cache[slot * sizeof(struct bcm43xx_txhdr_fw4)]);
bcm43xx_generate_txhdr(ring-dev, header,
   skb-data, skb-len, ctl,
   generate_cookie(ring, slot));

-meta-dmaaddr = map_descbuffer(ring, (unsigned char *)header,
+meta_hdr-dmaaddr = map_descbuffer(ring, (unsigned char *)header,
   sizeof(struct bcm43xx_txhdr_fw4), 1);
-ops-fill_descriptor(ring, desc, meta-dmaaddr,
+if (dma_mapping_error(meta_hdr-dmaaddr))
+return -EIO;
+ops-fill_descriptor(ring, desc, meta_hdr-dmaaddr,
 sizeof(struct bcm43xx_txhdr_fw4), 1, 0, 0);

/* Get a slot for the payload. */
@@ -1052,8 +1059,10 @@ static void dma_tx_fragment(struct bcm43xx_dmaring
*ring,

memcpy(meta-txstat.control, ctl, sizeof(*ctl));
meta-skb = skb;
-meta-dmaaddr = map_descbuffer(ring, skb-data, skb-len, 1);
meta-is_last_fragment = 1;
+meta-dmaaddr = map_descbuffer(ring, skb-data, skb-len, 1);
+if(dma_mapping_error(meta-dmaaddr))
+goto out_unmap_hdr;

ops-fill_descriptor(ring, desc, meta-dmaaddr,
 skb-len, 0, 1, 1);
@@ -1061,6 +1070,12 @@ static void dma_tx_fragment(struct bcm43xx_dmaring
*ring,
/* Now transfer the whole frame. */
wmb();
ops-poke_tx(ring, next_slot(ring, slot));
+return 0;
+
+out_unmap_hdr:
+unmap_descbuffer(ring, meta_hdr-dmaaddr,
+sizeof(struct bcm43xx_txhdr_fw4), 1);
+return -EIO;
}

int bcm43xx_dma_tx(struct bcm43xx_wldev *dev,
@@ -1068,6 +1083,7 @@ int bcm43xx_dma_tx(struct bcm43xx_wldev *dev,
   struct ieee80211_tx_control *ctl)
{
struct bcm43xx_dmaring *ring = dev-dma.tx_ring1;
+int err = 0;

assert(ring-tx);
if (unlikely(free_slots(ring)  SLOTS_PER_PACKET)) {
@@ -1078,7 +1094,12 @@ int bcm43xx_dma_tx(struct bcm43xx_wldev *dev,
return NETDEV_TX_BUSY;
}

-dma_tx_fragment(ring, skb, ctl);
+err = dma_tx_fragment(ring, skb, ctl);
+if (unlikely(err)) {
+printkl(KERN_ERR PFX DMA tx mapping failure\n);
+return NETDEV_TX_BUSY;
+}
+
ring-nr_tx_packets++;
if (free_slots(ring)  SLOTS_PER_PACKET) {
/* FIXME: we currently only have one queue */
--
1.5.0.3



--
Will Dyson
http://www.lucidts.com/
Linux/Mac/Win consulting
___
Bcm43xx-dev mailing list
Bcm43xx-dev@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/bcm43xx-dev