aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Chan <mchan@broadcom.com>2006-03-23 04:12:38 -0500
committerDavid S. Miller <davem@davemloft.net>2006-03-23 04:12:38 -0500
commit0f31f99446270e66c6f18c7d87aadd7db1dad214 (patch)
tree7cac41b473b1e85d97df34a4fe4f6e329a534b6f
parentbf5295bba804a6aead9bc1c0d5970173a9d4e08e (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.c34
-rw-r--r--drivers/net/bnx2.h2
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)
392static int 388static int
393bnx2_alloc_mem(struct bnx2 *bp) 389bnx2_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
4088static u32 bnx2_reg_rd_ind(struct bnx2 *bp, u32 offset); 4090static u32 bnx2_reg_rd_ind(struct bnx2 *bp, u32 offset);