diff options
author | Michael Chan <mchan@broadcom.com> | 2006-03-23 04:12:38 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2006-03-23 04:12:38 -0500 |
commit | 0f31f99446270e66c6f18c7d87aadd7db1dad214 (patch) | |
tree | 7cac41b473b1e85d97df34a4fe4f6e329a534b6f | |
parent | bf5295bba804a6aead9bc1c0d5970173a9d4e08e (diff) |
[BNX2]: Combine small mem allocations
Combine two small (56 byte and 320 byte) pci consistent memory
allocations into one allocation. Jeff Garzik suggested to store
the combined size in the bp structure for later use when freeing
the memory.
Use kzalloc() instead of kmalloc() + memset().
Signed-off-by: Michael Chan <mchan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/bnx2.c | 34 | ||||
-rw-r--r-- | drivers/net/bnx2.h | 2 |
2 files changed, 17 insertions, 19 deletions
diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c index c56888e66351..8ce5ae84c832 100644 --- a/drivers/net/bnx2.c +++ b/drivers/net/bnx2.c | |||
@@ -359,15 +359,11 @@ bnx2_free_mem(struct bnx2 *bp) | |||
359 | { | 359 | { |
360 | int i; | 360 | int i; |
361 | 361 | ||
362 | if (bp->stats_blk) { | ||
363 | pci_free_consistent(bp->pdev, sizeof(struct statistics_block), | ||
364 | bp->stats_blk, bp->stats_blk_mapping); | ||
365 | bp->stats_blk = NULL; | ||
366 | } | ||
367 | if (bp->status_blk) { | 362 | if (bp->status_blk) { |
368 | pci_free_consistent(bp->pdev, sizeof(struct status_block), | 363 | pci_free_consistent(bp->pdev, bp->status_stats_size, |
369 | bp->status_blk, bp->status_blk_mapping); | 364 | bp->status_blk, bp->status_blk_mapping); |
370 | bp->status_blk = NULL; | 365 | bp->status_blk = NULL; |
366 | bp->stats_blk = NULL; | ||
371 | } | 367 | } |
372 | if (bp->tx_desc_ring) { | 368 | if (bp->tx_desc_ring) { |
373 | pci_free_consistent(bp->pdev, | 369 | pci_free_consistent(bp->pdev, |
@@ -392,14 +388,13 @@ bnx2_free_mem(struct bnx2 *bp) | |||
392 | static int | 388 | static int |
393 | bnx2_alloc_mem(struct bnx2 *bp) | 389 | bnx2_alloc_mem(struct bnx2 *bp) |
394 | { | 390 | { |
395 | int i; | 391 | int i, status_blk_size; |
396 | 392 | ||
397 | bp->tx_buf_ring = kmalloc(sizeof(struct sw_bd) * TX_DESC_CNT, | 393 | bp->tx_buf_ring = kzalloc(sizeof(struct sw_bd) * TX_DESC_CNT, |
398 | GFP_KERNEL); | 394 | GFP_KERNEL); |
399 | if (bp->tx_buf_ring == NULL) | 395 | if (bp->tx_buf_ring == NULL) |
400 | return -ENOMEM; | 396 | return -ENOMEM; |
401 | 397 | ||
402 | memset(bp->tx_buf_ring, 0, sizeof(struct sw_bd) * TX_DESC_CNT); | ||
403 | bp->tx_desc_ring = pci_alloc_consistent(bp->pdev, | 398 | bp->tx_desc_ring = pci_alloc_consistent(bp->pdev, |
404 | sizeof(struct tx_bd) * | 399 | sizeof(struct tx_bd) * |
405 | TX_DESC_CNT, | 400 | TX_DESC_CNT, |
@@ -425,21 +420,22 @@ bnx2_alloc_mem(struct bnx2 *bp) | |||
425 | 420 | ||
426 | } | 421 | } |
427 | 422 | ||
428 | bp->status_blk = pci_alloc_consistent(bp->pdev, | 423 | /* Combine status and statistics blocks into one allocation. */ |
429 | sizeof(struct status_block), | 424 | status_blk_size = L1_CACHE_ALIGN(sizeof(struct status_block)); |
425 | bp->status_stats_size = status_blk_size + | ||
426 | sizeof(struct statistics_block); | ||
427 | |||
428 | bp->status_blk = pci_alloc_consistent(bp->pdev, bp->status_stats_size, | ||
430 | &bp->status_blk_mapping); | 429 | &bp->status_blk_mapping); |
431 | if (bp->status_blk == NULL) | 430 | if (bp->status_blk == NULL) |
432 | goto alloc_mem_err; | 431 | goto alloc_mem_err; |
433 | 432 | ||
434 | memset(bp->status_blk, 0, sizeof(struct status_block)); | 433 | memset(bp->status_blk, 0, bp->status_stats_size); |
435 | 434 | ||
436 | bp->stats_blk = pci_alloc_consistent(bp->pdev, | 435 | bp->stats_blk = (void *) ((unsigned long) bp->status_blk + |
437 | sizeof(struct statistics_block), | 436 | status_blk_size); |
438 | &bp->stats_blk_mapping); | ||
439 | if (bp->stats_blk == NULL) | ||
440 | goto alloc_mem_err; | ||
441 | 437 | ||
442 | memset(bp->stats_blk, 0, sizeof(struct statistics_block)); | 438 | bp->stats_blk_mapping = bp->status_blk_mapping + status_blk_size; |
443 | 439 | ||
444 | return 0; | 440 | return 0; |
445 | 441 | ||
diff --git a/drivers/net/bnx2.h b/drivers/net/bnx2.h index 18bc0919cc9e..5d132b00e8fd 100644 --- a/drivers/net/bnx2.h +++ b/drivers/net/bnx2.h | |||
@@ -4083,6 +4083,8 @@ struct bnx2 { | |||
4083 | 4083 | ||
4084 | struct flash_spec *flash_info; | 4084 | struct flash_spec *flash_info; |
4085 | u32 flash_size; | 4085 | u32 flash_size; |
4086 | |||
4087 | int status_stats_size; | ||
4086 | }; | 4088 | }; |
4087 | 4089 | ||
4088 | static u32 bnx2_reg_rd_ind(struct bnx2 *bp, u32 offset); | 4090 | static u32 bnx2_reg_rd_ind(struct bnx2 *bp, u32 offset); |