aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorMichael Buesch <mbuesch@freenet.de>2006-03-14 10:05:26 -0500
committerJohn W. Linville <linville@tuxdriver.com>2006-03-27 11:19:38 -0500
commit49f29efa7f44a79b64c7882c68e171898d0495a0 (patch)
treec09f7a2be4a1eaa4a9d7ab2c095633c9003dc905 /drivers/net
parente9357c056c5e62516f0044e60591d41f00ca7cfa (diff)
[PATCH] bcm43xx: Fix crash on ifdown, by being careful in pio/dma freeing.
This bug was caused by the packing of the bcm43xx_dma and bcm43xx_pio structures into a union. Signed-off-by: Michael Buesch <mbuesch@freenet.de> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/wireless/bcm43xx/bcm43xx_dma.c6
-rw-r--r--drivers/net/wireless/bcm43xx/bcm43xx_pio.c6
2 files changed, 10 insertions, 2 deletions
diff --git a/drivers/net/wireless/bcm43xx/bcm43xx_dma.c b/drivers/net/wireless/bcm43xx/bcm43xx_dma.c
index 7ed368a587f3..9c64438b767f 100644
--- a/drivers/net/wireless/bcm43xx/bcm43xx_dma.c
+++ b/drivers/net/wireless/bcm43xx/bcm43xx_dma.c
@@ -531,7 +531,11 @@ static void bcm43xx_destroy_dmaring(struct bcm43xx_dmaring *ring)
531 531
532void bcm43xx_dma_free(struct bcm43xx_private *bcm) 532void bcm43xx_dma_free(struct bcm43xx_private *bcm)
533{ 533{
534 struct bcm43xx_dma *dma = bcm43xx_current_dma(bcm); 534 struct bcm43xx_dma *dma;
535
536 if (bcm43xx_using_pio(bcm))
537 return;
538 dma = bcm43xx_current_dma(bcm);
535 539
536 bcm43xx_destroy_dmaring(dma->rx_ring1); 540 bcm43xx_destroy_dmaring(dma->rx_ring1);
537 dma->rx_ring1 = NULL; 541 dma->rx_ring1 = NULL;
diff --git a/drivers/net/wireless/bcm43xx/bcm43xx_pio.c b/drivers/net/wireless/bcm43xx/bcm43xx_pio.c
index 7bddae910de9..5b6f0a84d017 100644
--- a/drivers/net/wireless/bcm43xx/bcm43xx_pio.c
+++ b/drivers/net/wireless/bcm43xx/bcm43xx_pio.c
@@ -377,7 +377,11 @@ static void bcm43xx_destroy_pioqueue(struct bcm43xx_pioqueue *queue)
377 377
378void bcm43xx_pio_free(struct bcm43xx_private *bcm) 378void bcm43xx_pio_free(struct bcm43xx_private *bcm)
379{ 379{
380 struct bcm43xx_pio *pio = bcm43xx_current_pio(bcm); 380 struct bcm43xx_pio *pio;
381
382 if (!bcm43xx_using_pio(bcm))
383 return;
384 pio = bcm43xx_current_pio(bcm);
381 385
382 bcm43xx_destroy_pioqueue(pio->queue3); 386 bcm43xx_destroy_pioqueue(pio->queue3);
383 pio->queue3 = NULL; 387 pio->queue3 = NULL;