All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH net-next 1/5] bnx2: Add PCI ID for 5716S.
@ 2008-11-12 23:10 Michael Chan
  2008-11-12 23:10 ` [PATCH net-next 2/5] bnx2: Restrict WoL support Michael Chan
                   ` (4 more replies)
  0 siblings, 5 replies; 11+ messages in thread
From: Michael Chan @ 2008-11-12 23:10 UTC (permalink / raw)
  To: davem; +Cc: netdev, Michael Chan, Matt Carlson, Benjamin Li

Signed-off-by: Michael Chan <mchan@broadcom.com>
Signed-off-by: Matt Carlson <mcarlson@broadcom.com>
Signed-off-by: Benjamin Li <benli@broadcom.com>
---
 drivers/net/bnx2.c |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c
index 51b163a..49ebb50 100644
--- a/drivers/net/bnx2.c
+++ b/drivers/net/bnx2.c
@@ -89,6 +89,7 @@ typedef enum {
 	BCM5709,
 	BCM5709S,
 	BCM5716,
+	BCM5716S,
 } board_t;
 
 /* indexed by board_t, above */
@@ -105,6 +106,7 @@ static struct {
 	{ "Broadcom NetXtreme II BCM5709 1000Base-T" },
 	{ "Broadcom NetXtreme II BCM5709 1000Base-SX" },
 	{ "Broadcom NetXtreme II BCM5716 1000Base-T" },
+	{ "Broadcom NetXtreme II BCM5716 1000Base-SX" },
 	};
 
 static DEFINE_PCI_DEVICE_TABLE(bnx2_pci_tbl) = {
@@ -128,6 +130,8 @@ static DEFINE_PCI_DEVICE_TABLE(bnx2_pci_tbl) = {
 	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, BCM5709S },
 	{ PCI_VENDOR_ID_BROADCOM, 0x163b,
 	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, BCM5716 },
+	{ PCI_VENDOR_ID_BROADCOM, 0x163c,
+	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, BCM5716 },
 	{ 0, }
 };
 
-- 
1.5.6.GIT



^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH net-next 2/5] bnx2: Restrict WoL support.
  2008-11-12 23:10 [PATCH net-next 1/5] bnx2: Add PCI ID for 5716S Michael Chan
@ 2008-11-12 23:10 ` Michael Chan
  2008-11-13  0:01   ` David Miller
  2008-11-12 23:10 ` [PATCH net-next 3/5] bnx2: Set rx buffer water marks based on MTU Michael Chan
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 11+ messages in thread
From: Michael Chan @ 2008-11-12 23:10 UTC (permalink / raw)
  To: davem; +Cc: netdev, Michael Chan, Matt Carlson, Benjamin Li

On some quad-port cards that cannot support WoL on all ports due
to excessive power consumption, the driver needs to restrict WoL
on some ports by checking VAUX_PRESET bit.

Signed-off-by: Michael Chan <mchan@broadcom.com>
Signed-off-by: Matt Carlson <mcarlson@broadcom.com>
Signed-off-by: Benjamin Li <benli@broadcom.com>
---
 drivers/net/bnx2.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c
index 49ebb50..d28cbce 100644
--- a/drivers/net/bnx2.c
+++ b/drivers/net/bnx2.c
@@ -7586,7 +7586,8 @@ bnx2_init_board(struct pci_dev *pdev, struct net_device *dev)
 
 	if ((CHIP_ID(bp) == CHIP_ID_5708_A0) ||
 	    (CHIP_ID(bp) == CHIP_ID_5708_B0) ||
-	    (CHIP_ID(bp) == CHIP_ID_5708_B1)) {
+	    (CHIP_ID(bp) == CHIP_ID_5708_B1) ||
+	    !(REG_RD(bp, BNX2_PCI_CONFIG_3) & BNX2_PCI_CONFIG_3_VAUX_PRESET)) {
 		bp->flags |= BNX2_FLAG_NO_WOL;
 		bp->wol = 0;
 	}
-- 
1.5.6.GIT



^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH net-next 3/5] bnx2: Set rx buffer water marks based on MTU.
  2008-11-12 23:10 [PATCH net-next 1/5] bnx2: Add PCI ID for 5716S Michael Chan
  2008-11-12 23:10 ` [PATCH net-next 2/5] bnx2: Restrict WoL support Michael Chan
@ 2008-11-12 23:10 ` Michael Chan
  2008-11-13  0:02   ` David Miller
  2008-11-12 23:10 ` [PATCH net-next 4/5] bnx2: Reorganize timeout constants Michael Chan
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 11+ messages in thread
From: Michael Chan @ 2008-11-12 23:10 UTC (permalink / raw)
  To: davem; +Cc: netdev, Michael Chan, Matt Carlson, Benjamin Li

The default rx buffer water marks for XOFF/XON are for 1500 MTU.  At
larger MTUs, these water marks need to be adjusted for effective
flow control.

Signed-off-by: Michael Chan <mchan@broadcom.com>
Signed-off-by: Matt Carlson <mcarlson@broadcom.com>
Signed-off-by: Benjamin Li <benli@broadcom.com>
---
 drivers/net/bnx2.c |   12 ++++++++++--
 drivers/net/bnx2.h |   21 +++++++++++++++++++++
 2 files changed, 31 insertions(+), 2 deletions(-)

diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c
index d28cbce..a52ffdc 100644
--- a/drivers/net/bnx2.c
+++ b/drivers/net/bnx2.c
@@ -4473,7 +4473,7 @@ bnx2_reset_chip(struct bnx2 *bp, u32 reset_code)
 static int
 bnx2_init_chip(struct bnx2 *bp)
 {
-	u32 val;
+	u32 val, mtu;
 	int rc, i;
 
 	/* Make sure the interrupt is not active. */
@@ -4565,11 +4565,19 @@ bnx2_init_chip(struct bnx2 *bp)
 	REG_WR(bp, BNX2_EMAC_BACKOFF_SEED, val);
 
 	/* Program the MTU.  Also include 4 bytes for CRC32. */
-	val = bp->dev->mtu + ETH_HLEN + 4;
+	mtu = bp->dev->mtu;
+	val = mtu + ETH_HLEN + ETH_FCS_LEN;
 	if (val > (MAX_ETHERNET_PACKET_SIZE + 4))
 		val |= BNX2_EMAC_RX_MTU_SIZE_JUMBO_ENA;
 	REG_WR(bp, BNX2_EMAC_RX_MTU_SIZE, val);
 
+	if (mtu < 1500)
+		mtu = 1500;
+
+	bnx2_reg_wr_ind(bp, BNX2_RBUF_CONFIG, BNX2_RBUF_CONFIG_VAL(mtu));
+	bnx2_reg_wr_ind(bp, BNX2_RBUF_CONFIG2, BNX2_RBUF_CONFIG2_VAL(mtu));
+	bnx2_reg_wr_ind(bp, BNX2_RBUF_CONFIG3, BNX2_RBUF_CONFIG3_VAL(mtu));
+
 	for (i = 0; i < BNX2_MAX_MSIX_VEC; i++)
 		bp->bnx2_napi[i].last_status_idx = 0;
 
diff --git a/drivers/net/bnx2.h b/drivers/net/bnx2.h
index 617d953..2b9649a 100644
--- a/drivers/net/bnx2.h
+++ b/drivers/net/bnx2.h
@@ -4199,7 +4199,14 @@ struct l2_fhdr {
 
 #define BNX2_RBUF_CONFIG				0x0020000c
 #define BNX2_RBUF_CONFIG_XOFF_TRIP			 (0x3ffL<<0)
+#define BNX2_RBUF_CONFIG_XOFF_TRIP_VAL(mtu)		 \
+	((((mtu) - 1500) * 31 / 1000) + 54)
 #define BNX2_RBUF_CONFIG_XON_TRIP			 (0x3ffL<<16)
+#define BNX2_RBUF_CONFIG_XON_TRIP_VAL(mtu)		 \
+	((((mtu) - 1500) * 39 / 1000) + 66)
+#define BNX2_RBUF_CONFIG_VAL(mtu)			 \
+	(BNX2_RBUF_CONFIG_XOFF_TRIP_VAL(mtu) |		 \
+	(BNX2_RBUF_CONFIG_XON_TRIP_VAL(mtu) << 16))
 
 #define BNX2_RBUF_FW_BUF_ALLOC				0x00200010
 #define BNX2_RBUF_FW_BUF_ALLOC_VALUE			 (0x1ffL<<7)
@@ -4221,11 +4228,25 @@ struct l2_fhdr {
 
 #define BNX2_RBUF_CONFIG2				0x0020001c
 #define BNX2_RBUF_CONFIG2_MAC_DROP_TRIP			 (0x3ffL<<0)
+#define BNX2_RBUF_CONFIG2_MAC_DROP_TRIP_VAL(mtu)	 \
+	((((mtu) - 1500) * 4 / 1000) + 5)
 #define BNX2_RBUF_CONFIG2_MAC_KEEP_TRIP			 (0x3ffL<<16)
+#define BNX2_RBUF_CONFIG2_MAC_KEEP_TRIP_VAL(mtu)	 \
+	((((mtu) - 1500) * 2 / 100) + 30)
+#define BNX2_RBUF_CONFIG2_VAL(mtu)			 \
+	(BNX2_RBUF_CONFIG2_MAC_DROP_TRIP_VAL(mtu) |	 \
+	(BNX2_RBUF_CONFIG2_MAC_KEEP_TRIP_VAL(mtu) << 16))
 
 #define BNX2_RBUF_CONFIG3				0x00200020
 #define BNX2_RBUF_CONFIG3_CU_DROP_TRIP			 (0x3ffL<<0)
+#define BNX2_RBUF_CONFIG3_CU_DROP_TRIP_VAL(mtu)		 \
+	((((mtu) - 1500) * 12 / 1000) + 18)
 #define BNX2_RBUF_CONFIG3_CU_KEEP_TRIP			 (0x3ffL<<16)
+#define BNX2_RBUF_CONFIG3_CU_KEEP_TRIP_VAL(mtu)		 \
+	((((mtu) - 1500) * 2 / 100) + 30)
+#define BNX2_RBUF_CONFIG3_VAL(mtu)			 \
+	(BNX2_RBUF_CONFIG3_CU_DROP_TRIP_VAL(mtu) |	 \
+	(BNX2_RBUF_CONFIG3_CU_KEEP_TRIP_VAL(mtu) << 16))
 
 #define BNX2_RBUF_PKT_DATA				0x00208000
 #define BNX2_RBUF_CLIST_DATA				0x00210000
-- 
1.5.6.GIT



^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH net-next 4/5] bnx2: Reorganize timeout constants.
  2008-11-12 23:10 [PATCH net-next 1/5] bnx2: Add PCI ID for 5716S Michael Chan
  2008-11-12 23:10 ` [PATCH net-next 2/5] bnx2: Restrict WoL support Michael Chan
  2008-11-12 23:10 ` [PATCH net-next 3/5] bnx2: Set rx buffer water marks based on MTU Michael Chan
@ 2008-11-12 23:10 ` Michael Chan
  2008-11-12 23:10 ` [PATCH net-next 5/5] bnx2: Update version to 1.8.2 Michael Chan
  2008-11-13  0:01 ` [PATCH net-next 1/5] bnx2: Add PCI ID for 5716S David Miller
  4 siblings, 0 replies; 11+ messages in thread
From: Michael Chan @ 2008-11-12 23:10 UTC (permalink / raw)
  To: davem; +Cc: netdev, Michael Chan, Matt Carlson, Benjamin Li

Move all related timeout constants to the same location.  BNX2
prefix is also added to make them more consistent.

Signed-off-by: Michael Chan <mchan@broadcom.com>
Signed-off-by: Matt Carlson <mcarlson@broadcom.com>
Signed-off-by: Benjamin Li <benli@broadcom.com>
---
 drivers/net/bnx2.c |    8 ++++----
 drivers/net/bnx2.h |   14 +++++++-------
 2 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c
index a52ffdc..84563b0 100644
--- a/drivers/net/bnx2.c
+++ b/drivers/net/bnx2.c
@@ -1656,7 +1656,7 @@ bnx2_setup_serdes_phy(struct bnx2 *bp, u8 port)
 		 * exchanging base pages plus 3 next pages and
 		 * normally completes in about 120 msec.
 		 */
-		bp->current_interval = SERDES_AN_TIMEOUT;
+		bp->current_interval = BNX2_SERDES_AN_TIMEOUT;
 		bp->serdes_an_pending = 1;
 		mod_timer(&bp->timer, jiffies + bp->current_interval);
 	} else {
@@ -2278,7 +2278,7 @@ bnx2_fw_sync(struct bnx2 *bp, u32 msg_data, int ack, int silent)
 		return 0;
 
 	/* wait for an acknowledgement. */
-	for (i = 0; i < (FW_ACK_TIME_OUT_MS / 10); i++) {
+	for (i = 0; i < (BNX2_FW_ACK_TIME_OUT_MS / 10); i++) {
 		msleep(10);
 
 		val = bnx2_shmem_rd(bp, BNX2_FW_MB);
@@ -5705,7 +5705,7 @@ bnx2_5708_serdes_timer(struct bnx2 *bp)
 		bnx2_read_phy(bp, bp->mii_bmcr, &bmcr);
 		if (bmcr & BMCR_ANENABLE) {
 			bnx2_enable_forced_2g5(bp);
-			bp->current_interval = SERDES_FORCED_TIMEOUT;
+			bp->current_interval = BNX2_SERDES_FORCED_TIMEOUT;
 		} else {
 			bnx2_disable_forced_2g5(bp);
 			bp->serdes_an_pending = 2;
@@ -6522,7 +6522,7 @@ bnx2_nway_reset(struct net_device *dev)
 
 		spin_lock_bh(&bp->phy_lock);
 
-		bp->current_interval = SERDES_AN_TIMEOUT;
+		bp->current_interval = BNX2_SERDES_AN_TIMEOUT;
 		bp->serdes_an_pending = 1;
 		mod_timer(&bp->timer, jiffies + bp->current_interval);
 	}
diff --git a/drivers/net/bnx2.h b/drivers/net/bnx2.h
index 2b9649a..34ca478 100644
--- a/drivers/net/bnx2.h
+++ b/drivers/net/bnx2.h
@@ -6679,8 +6679,6 @@ struct bnx2_napi {
 	struct bnx2_tx_ring_info	tx_ring;
 };
 
-#define BNX2_TIMER_INTERVAL			HZ
-
 struct bnx2 {
 	/* Fields used in the tx and intr/napi performance paths are grouped */
 	/* together in the beginning of the structure. */
@@ -6728,7 +6726,11 @@ struct bnx2 {
 
 	/* End of fields used in the performance code paths. */
 
-	int			current_interval;
+	unsigned int		current_interval;
+#define BNX2_TIMER_INTERVAL		HZ
+#define BNX2_SERDES_AN_TIMEOUT		(HZ / 3)
+#define BNX2_SERDES_FORCED_TIMEOUT	(HZ / 10)
+
 	struct			timer_list timer;
 	struct work_struct	reset_task;
 
@@ -6860,8 +6862,6 @@ struct bnx2 {
 #define PHY_LOOPBACK		2
 
 	u8			serdes_an_pending;
-#define SERDES_AN_TIMEOUT	(HZ / 3)
-#define SERDES_FORCED_TIMEOUT	(HZ / 10)
 
 	u8			mac_addr[8];
 
@@ -6959,14 +6959,14 @@ struct fw_info {
 /* This value (in milliseconds) determines the frequency of the driver
  * issuing the PULSE message code.  The firmware monitors this periodic
  * pulse to determine when to switch to an OS-absent mode. */
-#define DRV_PULSE_PERIOD_MS                 250
+#define BNX2_DRV_PULSE_PERIOD_MS                 250
 
 /* This value (in milliseconds) determines how long the driver should
  * wait for an acknowledgement from the firmware before timing out.  Once
  * the firmware has timed out, the driver will assume there is no firmware
  * running and there won't be any firmware-driver synchronization during a
  * driver reset. */
-#define FW_ACK_TIME_OUT_MS                  1000
+#define BNX2_FW_ACK_TIME_OUT_MS                  1000
 
 
 #define BNX2_DRV_RESET_SIGNATURE		0x00000000
-- 
1.5.6.GIT



^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH net-next 5/5] bnx2: Update version to 1.8.2.
  2008-11-12 23:10 [PATCH net-next 1/5] bnx2: Add PCI ID for 5716S Michael Chan
                   ` (2 preceding siblings ...)
  2008-11-12 23:10 ` [PATCH net-next 4/5] bnx2: Reorganize timeout constants Michael Chan
@ 2008-11-12 23:10 ` Michael Chan
  2008-11-13  0:03   ` David Miller
  2008-11-13  5:49   ` [PATCH] bnx2: bnx2_alloc_rx_mem() should use kmalloc() for small allocations Eric Dumazet
  2008-11-13  0:01 ` [PATCH net-next 1/5] bnx2: Add PCI ID for 5716S David Miller
  4 siblings, 2 replies; 11+ messages in thread
From: Michael Chan @ 2008-11-12 23:10 UTC (permalink / raw)
  To: davem; +Cc: netdev, Michael Chan, Matt Carlson, Benjamin Li

Signed-off-by: Michael Chan <mchan@broadcom.com>
Signed-off-by: Matt Carlson <mcarlson@broadcom.com>
Signed-off-by: Benjamin Li <benli@broadcom.com>
---
 drivers/net/bnx2.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c
index 84563b0..0853b3c 100644
--- a/drivers/net/bnx2.c
+++ b/drivers/net/bnx2.c
@@ -57,8 +57,8 @@
 
 #define DRV_MODULE_NAME		"bnx2"
 #define PFX DRV_MODULE_NAME	": "
-#define DRV_MODULE_VERSION	"1.8.1"
-#define DRV_MODULE_RELDATE	"Oct 7, 2008"
+#define DRV_MODULE_VERSION	"1.8.2"
+#define DRV_MODULE_RELDATE	"Nov 10, 2008"
 
 #define RUN_AT(x) (jiffies + (x))
 
-- 
1.5.6.GIT



^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH net-next 1/5] bnx2: Add PCI ID for 5716S.
  2008-11-12 23:10 [PATCH net-next 1/5] bnx2: Add PCI ID for 5716S Michael Chan
                   ` (3 preceding siblings ...)
  2008-11-12 23:10 ` [PATCH net-next 5/5] bnx2: Update version to 1.8.2 Michael Chan
@ 2008-11-13  0:01 ` David Miller
  4 siblings, 0 replies; 11+ messages in thread
From: David Miller @ 2008-11-13  0:01 UTC (permalink / raw)
  To: mchan; +Cc: netdev, mcarlson, benli

From: "Michael Chan" <mchan@broadcom.com>
Date: Wed, 12 Nov 2008 15:10:00 -0800

> Signed-off-by: Michael Chan <mchan@broadcom.com>
> Signed-off-by: Matt Carlson <mcarlson@broadcom.com>
> Signed-off-by: Benjamin Li <benli@broadcom.com>

Applied.

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH net-next 2/5] bnx2: Restrict WoL support.
  2008-11-12 23:10 ` [PATCH net-next 2/5] bnx2: Restrict WoL support Michael Chan
@ 2008-11-13  0:01   ` David Miller
  0 siblings, 0 replies; 11+ messages in thread
From: David Miller @ 2008-11-13  0:01 UTC (permalink / raw)
  To: mchan; +Cc: netdev, mcarlson, benli

From: "Michael Chan" <mchan@broadcom.com>
Date: Wed, 12 Nov 2008 15:10:01 -0800

> On some quad-port cards that cannot support WoL on all ports due
> to excessive power consumption, the driver needs to restrict WoL
> on some ports by checking VAUX_PRESET bit.
> 
> Signed-off-by: Michael Chan <mchan@broadcom.com>
> Signed-off-by: Matt Carlson <mcarlson@broadcom.com>
> Signed-off-by: Benjamin Li <benli@broadcom.com>

Applied.

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH net-next 3/5] bnx2: Set rx buffer water marks based on MTU.
  2008-11-12 23:10 ` [PATCH net-next 3/5] bnx2: Set rx buffer water marks based on MTU Michael Chan
@ 2008-11-13  0:02   ` David Miller
  0 siblings, 0 replies; 11+ messages in thread
From: David Miller @ 2008-11-13  0:02 UTC (permalink / raw)
  To: mchan; +Cc: netdev, mcarlson, benli

From: "Michael Chan" <mchan@broadcom.com>
Date: Wed, 12 Nov 2008 15:10:02 -0800

> The default rx buffer water marks for XOFF/XON are for 1500 MTU.  At
> larger MTUs, these water marks need to be adjusted for effective
> flow control.
> 
> Signed-off-by: Michael Chan <mchan@broadcom.com>
> Signed-off-by: Matt Carlson <mcarlson@broadcom.com>
> Signed-off-by: Benjamin Li <benli@broadcom.com>

Applied.

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH net-next 5/5] bnx2: Update version to 1.8.2.
  2008-11-12 23:10 ` [PATCH net-next 5/5] bnx2: Update version to 1.8.2 Michael Chan
@ 2008-11-13  0:03   ` David Miller
  2008-11-13  5:49   ` [PATCH] bnx2: bnx2_alloc_rx_mem() should use kmalloc() for small allocations Eric Dumazet
  1 sibling, 0 replies; 11+ messages in thread
From: David Miller @ 2008-11-13  0:03 UTC (permalink / raw)
  To: mchan; +Cc: netdev, mcarlson, benli

From: "Michael Chan" <mchan@broadcom.com>
Date: Wed, 12 Nov 2008 15:10:04 -0800

> Signed-off-by: Michael Chan <mchan@broadcom.com>
> Signed-off-by: Matt Carlson <mcarlson@broadcom.com>
> Signed-off-by: Benjamin Li <benli@broadcom.com>

Also applied, thanks Michael.

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH]  bnx2: bnx2_alloc_rx_mem() should use kmalloc() for small allocations
  2008-11-12 23:10 ` [PATCH net-next 5/5] bnx2: Update version to 1.8.2 Michael Chan
  2008-11-13  0:03   ` David Miller
@ 2008-11-13  5:49   ` Eric Dumazet
  2008-11-13  6:49     ` David Miller
  1 sibling, 1 reply; 11+ messages in thread
From: Eric Dumazet @ 2008-11-13  5:49 UTC (permalink / raw)
  To: Michael Chan; +Cc: davem, netdev, Matt Carlson, Benjamin Li

[-- Attachment #1: Type: text/plain, Size: 825 bytes --]

Hi all

# grep bnx2 /proc/vmallocinfo
0xf8218000-0xf821a000    8192 bnx2_alloc_rx_mem+0x33/0x310 pages=1 vmalloc
0xf821b000-0xf821d000    8192 bnx2_alloc_rx_mem+0x33/0x310 pages=1 vmalloc
0xf8220000-0xf8234000   81920 bnx2_init_board+0x104/0xae0 phys=f6000000 ioremap
0xf8240000-0xf8254000   81920 bnx2_init_board+0x104/0xae0 phys=fa000000 ioremap


Any chance bnx2_alloc_rx_mem doesnt use vmalloc() to allocate less than a page of memory ?

Thank you

[PATCH] bnx2: bnx2_alloc_rx_mem() should use kmalloc() for small allocations

Add two helper functions to allocate and free memory, using kzalloc() or vmalloc()
depending of the size of the allocation

Signed-off-by: Eric Dumazet <dada1@cosmosbay.com>
---
 drivers/net/bnx2.c |   36 +++++++++++++++++++++++++-----------
 1 files changed, 25 insertions(+), 11 deletions(-)

[-- Attachment #2: bnx2.patch --]
[-- Type: text/plain, Size: 2038 bytes --]

diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c
index 0853b3c..93c8256 100644
--- a/drivers/net/bnx2.c
+++ b/drivers/net/bnx2.c
@@ -523,6 +523,24 @@ bnx2_free_tx_mem(struct bnx2 *bp)
 	}
 }
 
+static void *
+bnx2_alloc_kmem(size_t sz)
+{
+	if (sz <= PAGE_SIZE)
+		return kzalloc(sz, GFP_KERNEL);
+	else
+		return 	__vmalloc(sz, GFP_KERNEL | __GFP_ZERO, PAGE_KERNEL);
+}
+
+static void
+bnx2_free_kmem(void *ptr, size_t sz)
+{
+	if (sz <= PAGE_SIZE)
+		kfree(ptr);
+	else
+		vfree(ptr);
+}
+
 static void
 bnx2_free_rx_mem(struct bnx2 *bp)
 {
@@ -541,7 +559,8 @@ bnx2_free_rx_mem(struct bnx2 *bp)
 			rxr->rx_desc_ring[j] = NULL;
 		}
 		if (rxr->rx_buf_ring)
-			vfree(rxr->rx_buf_ring);
+			bnx2_free_kmem(rxr->rx_buf_ring,
+				       SW_RXBD_RING_SIZE * bp->rx_max_ring);
 		rxr->rx_buf_ring = NULL;
 
 		for (j = 0; j < bp->rx_max_pg_ring; j++) {
@@ -552,7 +571,8 @@ bnx2_free_rx_mem(struct bnx2 *bp)
 			rxr->rx_pg_desc_ring[i] = NULL;
 		}
 		if (rxr->rx_pg_ring)
-			vfree(rxr->rx_pg_ring);
+			bnx2_free_kmem(rxr->rx_pg_ring,
+				       SW_RXPG_RING_SIZE * bp->rx_max_pg_ring);
 		rxr->rx_pg_ring = NULL;
 	}
 }
@@ -590,13 +610,10 @@ bnx2_alloc_rx_mem(struct bnx2 *bp)
 		int j;
 
 		rxr->rx_buf_ring =
-			vmalloc(SW_RXBD_RING_SIZE * bp->rx_max_ring);
+			bnx2_alloc_kmem(SW_RXBD_RING_SIZE * bp->rx_max_ring);
 		if (rxr->rx_buf_ring == NULL)
 			return -ENOMEM;
 
-		memset(rxr->rx_buf_ring, 0,
-		       SW_RXBD_RING_SIZE * bp->rx_max_ring);
-
 		for (j = 0; j < bp->rx_max_ring; j++) {
 			rxr->rx_desc_ring[j] =
 				pci_alloc_consistent(bp->pdev, RXBD_RING_SIZE,
@@ -607,13 +624,10 @@ bnx2_alloc_rx_mem(struct bnx2 *bp)
 		}
 
 		if (bp->rx_pg_ring_size) {
-			rxr->rx_pg_ring = vmalloc(SW_RXPG_RING_SIZE *
-						  bp->rx_max_pg_ring);
+			rxr->rx_pg_ring = bnx2_alloc_kmem(SW_RXPG_RING_SIZE *
+							  bp->rx_max_pg_ring);
 			if (rxr->rx_pg_ring == NULL)
 				return -ENOMEM;
-
-			memset(rxr->rx_pg_ring, 0, SW_RXPG_RING_SIZE *
-			       bp->rx_max_pg_ring);
 		}
 
 		for (j = 0; j < bp->rx_max_pg_ring; j++) {

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH] bnx2: bnx2_alloc_rx_mem() should use kmalloc() for small allocations
  2008-11-13  5:49   ` [PATCH] bnx2: bnx2_alloc_rx_mem() should use kmalloc() for small allocations Eric Dumazet
@ 2008-11-13  6:49     ` David Miller
  0 siblings, 0 replies; 11+ messages in thread
From: David Miller @ 2008-11-13  6:49 UTC (permalink / raw)
  To: dada1; +Cc: mchan, netdev, mcarlson, benli

From: Eric Dumazet <dada1@cosmosbay.com>
Date: Thu, 13 Nov 2008 06:49:14 +0100

> Any chance bnx2_alloc_rx_mem doesnt use vmalloc() to allocate less
> than a page of memory ?
>
> [PATCH] bnx2: bnx2_alloc_rx_mem() should use kmalloc() for small allocations

Eric, I've seen (and used) this idiom enough times that I think
it deserves a generic construct somewhere instead of replicating
this sequence over and over again.

Don't you agree? :-)

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2008-11-13  6:49 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-11-12 23:10 [PATCH net-next 1/5] bnx2: Add PCI ID for 5716S Michael Chan
2008-11-12 23:10 ` [PATCH net-next 2/5] bnx2: Restrict WoL support Michael Chan
2008-11-13  0:01   ` David Miller
2008-11-12 23:10 ` [PATCH net-next 3/5] bnx2: Set rx buffer water marks based on MTU Michael Chan
2008-11-13  0:02   ` David Miller
2008-11-12 23:10 ` [PATCH net-next 4/5] bnx2: Reorganize timeout constants Michael Chan
2008-11-12 23:10 ` [PATCH net-next 5/5] bnx2: Update version to 1.8.2 Michael Chan
2008-11-13  0:03   ` David Miller
2008-11-13  5:49   ` [PATCH] bnx2: bnx2_alloc_rx_mem() should use kmalloc() for small allocations Eric Dumazet
2008-11-13  6:49     ` David Miller
2008-11-13  0:01 ` [PATCH net-next 1/5] bnx2: Add PCI ID for 5716S David Miller

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.