* [PATCH 1/3] myri10ge: define some previously hardwired firmware constants [not found] <44E0DA08.9080304@myri.com> @ 2006-08-14 21:52 ` Brice Goglin 2006-08-14 21:53 ` [PATCH 2/3] myri10ge: allow to disable link status change reporting Brice Goglin 2006-08-14 21:53 ` [PATCH 3/3] myri10ge: convert to netdev_alloc_skb Brice Goglin 2 siblings, 0 replies; 6+ messages in thread From: Brice Goglin @ 2006-08-14 21:52 UTC (permalink / raw) To: Jeff Garzik; +Cc: netdev Define some previously hardwired firmware constants. Signed-off-by: Brice Goglin <brice@myri.com> --- drivers/net/myri10ge/myri10ge.c | 17 ++++++++++------- drivers/net/myri10ge/myri10ge_mcp.h | 14 +++++++++++++- 2 files changed, 23 insertions(+), 8 deletions(-) Index: linux-mm/drivers/net/myri10ge/myri10ge.c =================================================================== --- linux-mm.orig/drivers/net/myri10ge/myri10ge.c 2006-08-14 14:21:47.000000000 -0400 +++ linux-mm/drivers/net/myri10ge/myri10ge.c 2006-08-14 14:21:57.000000000 -0400 @@ -271,7 +271,7 @@ struct mcp_cmd *buf; char buf_bytes[sizeof(*buf) + 8]; struct mcp_cmd_response *response = mgp->cmd; - char __iomem *cmd_addr = mgp->sram + MXGEFW_CMD_OFFSET; + char __iomem *cmd_addr = mgp->sram + MXGEFW_ETH_CMD; u32 dma_low, dma_high, result, value; int sleep_total = 0; @@ -404,7 +404,7 @@ buf[4] = htonl(dma_low); /* dummy addr LSW */ buf[5] = htonl(enable); /* enable? */ - submit = mgp->sram + 0xfc01c0; + submit = mgp->sram + MXGEFW_BOOT_DUMMY_RDMA; myri10ge_pio_copy(submit, &buf, sizeof(buf)); for (i = 0; mgp->cmd->data != MYRI10GE_NO_CONFIRM_DATA && i < 20; i++) @@ -600,7 +600,7 @@ buf[5] = htonl(8); /* where to copy to */ buf[6] = htonl(0); /* where to jump to */ - submit = mgp->sram + 0xfc0000; + submit = mgp->sram + MXGEFW_BOOT_HANDOFF; myri10ge_pio_copy(submit, &buf, sizeof(buf)); mb(); @@ -1648,9 +1648,11 @@ } if (mgp->mtrr >= 0) { - mgp->tx.wc_fifo = (u8 __iomem *) mgp->sram + 0x200000; - mgp->rx_small.wc_fifo = (u8 __iomem *) mgp->sram + 0x300000; - mgp->rx_big.wc_fifo = (u8 __iomem *) mgp->sram + 0x340000; + mgp->tx.wc_fifo = (u8 __iomem *) mgp->sram + MXGEFW_ETH_SEND_4; + mgp->rx_small.wc_fifo = + (u8 __iomem *) mgp->sram + MXGEFW_ETH_RECV_SMALL; + mgp->rx_big.wc_fifo = + (u8 __iomem *) mgp->sram + MXGEFW_ETH_RECV_BIG; } else { mgp->tx.wc_fifo = NULL; mgp->rx_small.wc_fifo = NULL; @@ -1841,7 +1843,8 @@ if (cnt > 0) { /* pad it to 64 bytes. The src is 64 bytes bigger than it * needs to be so that we don't overrun it */ - myri10ge_pio_copy(tx->wc_fifo + (cnt << 18), src, 64); + myri10ge_pio_copy(tx->wc_fifo + MXGEFW_ETH_SEND_OFFSET(cnt), + src, 64); mb(); } } Index: linux-mm/drivers/net/myri10ge/myri10ge_mcp.h =================================================================== --- linux-mm.orig/drivers/net/myri10ge/myri10ge_mcp.h 2006-08-14 14:21:47.000000000 -0400 +++ linux-mm/drivers/net/myri10ge/myri10ge_mcp.h 2006-08-14 14:21:57.000000000 -0400 @@ -91,7 +91,19 @@ /* Commands */ -#define MXGEFW_CMD_OFFSET 0xf80000 +#define MXGEFW_BOOT_HANDOFF 0xfc0000 +#define MXGEFW_BOOT_DUMMY_RDMA 0xfc01c0 + +#define MXGEFW_ETH_CMD 0xf80000 +#define MXGEFW_ETH_SEND_4 0x200000 +#define MXGEFW_ETH_SEND_1 0x240000 +#define MXGEFW_ETH_SEND_2 0x280000 +#define MXGEFW_ETH_SEND_3 0x2c0000 +#define MXGEFW_ETH_RECV_SMALL 0x300000 +#define MXGEFW_ETH_RECV_BIG 0x340000 + +#define MXGEFW_ETH_SEND(n) (0x200000 + (((n) & 0x03) * 0x40000)) +#define MXGEFW_ETH_SEND_OFFSET(n) (MXGEFW_ETH_SEND(n) - MXGEFW_ETH_SEND_4) enum myri10ge_mcp_cmd_type { MXGEFW_CMD_NONE = 0, ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 2/3] myri10ge: allow to disable link status change reporting [not found] <44E0DA08.9080304@myri.com> 2006-08-14 21:52 ` [PATCH 1/3] myri10ge: define some previously hardwired firmware constants Brice Goglin @ 2006-08-14 21:53 ` Brice Goglin 2006-08-14 22:02 ` Jeff Garzik 2006-08-14 21:53 ` [PATCH 3/3] myri10ge: convert to netdev_alloc_skb Brice Goglin 2 siblings, 1 reply; 6+ messages in thread From: Brice Goglin @ 2006-08-14 21:53 UTC (permalink / raw) To: Jeff Garzik; +Cc: netdev Add myri10ge_verbose module parameter to disable reporting of link status change since some Ethernet switches seem to generate a lot of status changes under some circumstances and some people want to avoid useless flooding in the logs. Also add a counter for link status changes to statistics. Signed-off-by: Brice Goglin <brice@myri.com> --- drivers/net/myri10ge/myri10ge.c | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) Index: linux-mm/drivers/net/myri10ge/myri10ge.c =================================================================== --- linux-mm.orig/drivers/net/myri10ge/myri10ge.c 2006-08-14 14:22:07.000000000 -0400 +++ linux-mm/drivers/net/myri10ge/myri10ge.c 2006-08-14 14:30:50.000000000 -0400 @@ -192,6 +192,7 @@ u32 read_dma; u32 write_dma; u32 read_write_dma; + u32 link_changes; }; static char *myri10ge_fw_unaligned = "myri10ge_ethp_z8e.dat"; @@ -257,6 +258,10 @@ MODULE_PARM_DESC(myri10ge_max_irq_loops, "Set stuck legacy IRQ detection threshold\n"); +static int myri10ge_verbose = 1; +module_param(myri10ge_verbose, int, S_IRUGO | S_IWUSR); +MODULE_PARM_DESC(myri10ge_verbose, "Enable verbose printing\n"); + #define MYRI10GE_FW_OFFSET 1024*1024 #define MYRI10GE_HIGHPART_TO_U32(X) \ (sizeof (X) == 8) ? ((u32)((u64)(X) >> 32)) : (0) @@ -764,6 +769,7 @@ mgp->rx_small.cnt = 0; mgp->rx_done.idx = 0; mgp->rx_done.cnt = 0; + mgp->link_changes = 0; status = myri10ge_update_mac_address(mgp, mgp->dev->dev_addr); myri10ge_change_promisc(mgp, 0, 0); myri10ge_change_pause(mgp, mgp->pause); @@ -1085,13 +1091,19 @@ if (mgp->link_state != stats->link_up) { mgp->link_state = stats->link_up; if (mgp->link_state) { - printk(KERN_INFO "myri10ge: %s: link up\n", - mgp->dev->name); + if (myri10ge_verbose) + printk(KERN_INFO + "myri10ge: %s: link up\n", + mgp->dev->name); netif_carrier_on(mgp->dev); + mgp->link_changes++; } else { - printk(KERN_INFO "myri10ge: %s: link down\n", - mgp->dev->name); + if (myri10ge_verbose) + printk(KERN_INFO + "myri10ge: %s: link down\n", + mgp->dev->name); netif_carrier_off(mgp->dev); + mgp->link_changes++; } } if (mgp->rdma_tags_available != @@ -1293,8 +1305,9 @@ "serial_number", "tx_pkt_start", "tx_pkt_done", "tx_req", "tx_done", "rx_small_cnt", "rx_big_cnt", "wake_queue", "stop_queue", "watchdog_resets", "tx_linearized", - "link_up", "dropped_link_overflow", "dropped_link_error_or_filtered", - "dropped_runt", "dropped_overrun", "dropped_no_small_buffer", + "link_changes", "link_up", "dropped_link_overflow", + "dropped_link_error_or_filtered", "dropped_runt", + "dropped_overrun", "dropped_no_small_buffer", "dropped_no_big_buffer" }; @@ -1345,6 +1358,7 @@ data[i++] = (unsigned int)mgp->stop_queue; data[i++] = (unsigned int)mgp->watchdog_resets; data[i++] = (unsigned int)mgp->tx_linearized; + data[i++] = (unsigned int)mgp->link_changes; data[i++] = (unsigned int)ntohl(mgp->fw_stats->link_up); data[i++] = (unsigned int)ntohl(mgp->fw_stats->dropped_link_overflow); data[i++] = ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 2/3] myri10ge: allow to disable link status change reporting 2006-08-14 21:53 ` [PATCH 2/3] myri10ge: allow to disable link status change reporting Brice Goglin @ 2006-08-14 22:02 ` Jeff Garzik 2006-08-15 12:46 ` Brice Goglin 0 siblings, 1 reply; 6+ messages in thread From: Jeff Garzik @ 2006-08-14 22:02 UTC (permalink / raw) To: Brice Goglin; +Cc: netdev Brice Goglin wrote: > Add myri10ge_verbose module parameter to disable reporting of > link status change since some Ethernet switches seem to generate > a lot of status changes under some circumstances and some people > want to avoid useless flooding in the logs. > > Also add a counter for link status changes to statistics. > > Signed-off-by: Brice Goglin <brice@myri.com> NAK - use the standard netif_msg_xxx and the msg_enable style variable found in many drivers. No need for a module parameter, ethtool already covers this type of need. Jeff ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 2/3] myri10ge: allow to disable link status change reporting 2006-08-14 22:02 ` Jeff Garzik @ 2006-08-15 12:46 ` Brice Goglin 2006-08-15 12:49 ` Brice Goglin 0 siblings, 1 reply; 6+ messages in thread From: Brice Goglin @ 2006-08-15 12:46 UTC (permalink / raw) To: Jeff Garzik; +Cc: netdev Jeff Garzik wrote: > Brice Goglin wrote: >> Add myri10ge_verbose module parameter to disable reporting of >> link status change since some Ethernet switches seem to generate >> a lot of status changes under some circumstances and some people >> want to avoid useless flooding in the logs. >> >> Also add a counter for link status changes to statistics. >> >> Signed-off-by: Brice Goglin <brice@myri.com> > > NAK - use the standard netif_msg_xxx and the msg_enable style variable > found in many drivers. No need for a module parameter, ethtool > already covers this type of need. Oh right, didn't know that, thanks. Actually, most of the drivers I looked at also define an additional module parameter "debug" (to initialize their "msg_enable") :) I copied-pasted and did the same in the following patch. Would it be ok? Once this is commited, we will probably use the other netif_msg_xxx() later to disable/enable some other messages. >From Brice Goglin <brice@myri.com> [PATCH] myri10ge: use netif_msg_link Add msg_enable and use netif_msg_link to enable/disable reporting of link status changes since some Ethernet switches seem to generate a lot of status changes under some circumstances and some people want to avoid useless flooding in the logs. Also add a counter for link status changes to statistics. --- drivers/net/myri10ge/myri10ge.c | 46 +++++++++++++++++++++++++++++++++------- 1 file changed, 39 insertions(+), 7 deletions(-) Index: linux-mm/drivers/net/myri10ge/myri10ge.c =================================================================== --- linux-mm.orig/drivers/net/myri10ge/myri10ge.c 2006-08-14 21:48:14.000000000 -0400 +++ linux-mm/drivers/net/myri10ge/myri10ge.c 2006-08-14 22:13:17.000000000 -0400 @@ -192,6 +192,8 @@ u32 read_dma; u32 write_dma; u32 read_write_dma; + u32 link_changes; + u32 msg_enable; }; static char *myri10ge_fw_unaligned = "myri10ge_ethp_z8e.dat"; @@ -257,6 +259,12 @@ MODULE_PARM_DESC(myri10ge_max_irq_loops, "Set stuck legacy IRQ detection threshold\n"); +#define MYRI10GE_MSG_DEFAULT NETIF_MSG_LINK + +static int myri10ge_debug = -1; /* defaults above */ +module_param(myri10ge_debug, int, 0); +MODULE_PARM_DESC(myri10ge_debug, "Debug level (0=none,...,16=all)"); + #define MYRI10GE_FW_OFFSET 1024*1024 #define MYRI10GE_HIGHPART_TO_U32(X) \ (sizeof (X) == 8) ? ((u32)((u64)(X) >> 32)) : (0) @@ -764,6 +772,7 @@ mgp->rx_small.cnt = 0; mgp->rx_done.idx = 0; mgp->rx_done.cnt = 0; + mgp->link_changes = 0; status = myri10ge_update_mac_address(mgp, mgp->dev->dev_addr); myri10ge_change_promisc(mgp, 0, 0); myri10ge_change_pause(mgp, mgp->pause); @@ -1085,13 +1094,19 @@ if (mgp->link_state != stats->link_up) { mgp->link_state = stats->link_up; if (mgp->link_state) { - printk(KERN_INFO "myri10ge: %s: link up\n", - mgp->dev->name); + if (netif_msg_link(mgp)) + printk(KERN_INFO + "myri10ge: %s: link up\n", + mgp->dev->name); netif_carrier_on(mgp->dev); + mgp->link_changes++; } else { - printk(KERN_INFO "myri10ge: %s: link down\n", - mgp->dev->name); + if (netif_msg_link(mgp)) + printk(KERN_INFO + "myri10ge: %s: link down\n", + mgp->dev->name); netif_carrier_off(mgp->dev); + mgp->link_changes++; } } if (mgp->rdma_tags_available != @@ -1293,8 +1308,9 @@ "serial_number", "tx_pkt_start", "tx_pkt_done", "tx_req", "tx_done", "rx_small_cnt", "rx_big_cnt", "wake_queue", "stop_queue", "watchdog_resets", "tx_linearized", - "link_up", "dropped_link_overflow", "dropped_link_error_or_filtered", - "dropped_runt", "dropped_overrun", "dropped_no_small_buffer", + "link_changes", "link_up", "dropped_link_overflow", + "dropped_link_error_or_filtered", "dropped_runt", + "dropped_overrun", "dropped_no_small_buffer", "dropped_no_big_buffer" }; @@ -1345,6 +1361,7 @@ data[i++] = (unsigned int)mgp->stop_queue; data[i++] = (unsigned int)mgp->watchdog_resets; data[i++] = (unsigned int)mgp->tx_linearized; + data[i++] = (unsigned int)mgp->link_changes; data[i++] = (unsigned int)ntohl(mgp->fw_stats->link_up); data[i++] = (unsigned int)ntohl(mgp->fw_stats->dropped_link_overflow); data[i++] = @@ -1355,6 +1372,18 @@ data[i++] = (unsigned int)ntohl(mgp->fw_stats->dropped_no_big_buffer); } +static void myri10ge_set_msglevel(struct net_device *netdev, u32 value) +{ + struct myri10ge_priv *mgp = netdev_priv(netdev); + mgp->msg_enable = value; +} + +static u32 myri10ge_get_msglevel(struct net_device *netdev) +{ + struct myri10ge_priv *mgp = netdev_priv(netdev); + return mgp->msg_enable; +} + static struct ethtool_ops myri10ge_ethtool_ops = { .get_settings = myri10ge_get_settings, .get_drvinfo = myri10ge_get_drvinfo, @@ -1375,7 +1404,9 @@ #endif .get_strings = myri10ge_get_strings, .get_stats_count = myri10ge_get_stats_count, - .get_ethtool_stats = myri10ge_get_ethtool_stats + .get_ethtool_stats = myri10ge_get_ethtool_stats, + .set_msglevel = myri10ge_set_msglevel, + .get_msglevel = myri10ge_get_msglevel }; static int myri10ge_allocate_rings(struct net_device *dev) @@ -2580,6 +2611,7 @@ mgp->csum_flag = MXGEFW_FLAGS_CKSUM; mgp->pause = myri10ge_flow_control; mgp->intr_coal_delay = myri10ge_intr_coal_delay; + mgp->msg_enable = netif_msg_init(myri10ge_debug, MYRI10GE_MSG_DEFAULT); init_waitqueue_head(&mgp->down_wq); if (pci_enable_device(pdev)) { ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 2/3] myri10ge: allow to disable link status change reporting 2006-08-15 12:46 ` Brice Goglin @ 2006-08-15 12:49 ` Brice Goglin 0 siblings, 0 replies; 6+ messages in thread From: Brice Goglin @ 2006-08-15 12:49 UTC (permalink / raw) To: Jeff Garzik; +Cc: netdev Brice Goglin wrote: > From Brice Goglin <brice@myri.com> > > [PATCH] myri10ge: use netif_msg_link > > Add msg_enable and use netif_msg_link to enable/disable reporting > of link status changes since some Ethernet switches seem to generate > a lot of status changes under some circumstances and some people > want to avoid useless flooding in the logs. > > Also add a counter for link status changes to statistics. > Signed-off-by: Brice Goglin <brice@myri.com> > --- > drivers/net/myri10ge/myri10ge.c | 46 +++++++++++++++++++++++++++++++++------- > 1 file changed, 39 insertions(+), 7 deletions(-) > > Index: linux-mm/drivers/net/myri10ge/myri10ge.c > =================================================================== > --- linux-mm.orig/drivers/net/myri10ge/myri10ge.c 2006-08-14 21:48:14.000000000 -0400 > +++ linux-mm/drivers/net/myri10ge/myri10ge.c 2006-08-14 22:13:17.000000000 -0400 > @@ -192,6 +192,8 @@ > u32 read_dma; > u32 write_dma; > u32 read_write_dma; > + u32 link_changes; > + u32 msg_enable; > }; > > static char *myri10ge_fw_unaligned = "myri10ge_ethp_z8e.dat"; > @@ -257,6 +259,12 @@ > MODULE_PARM_DESC(myri10ge_max_irq_loops, > "Set stuck legacy IRQ detection threshold\n"); > > +#define MYRI10GE_MSG_DEFAULT NETIF_MSG_LINK > + > +static int myri10ge_debug = -1; /* defaults above */ > +module_param(myri10ge_debug, int, 0); > +MODULE_PARM_DESC(myri10ge_debug, "Debug level (0=none,...,16=all)"); > + > #define MYRI10GE_FW_OFFSET 1024*1024 > #define MYRI10GE_HIGHPART_TO_U32(X) \ > (sizeof (X) == 8) ? ((u32)((u64)(X) >> 32)) : (0) > @@ -764,6 +772,7 @@ > mgp->rx_small.cnt = 0; > mgp->rx_done.idx = 0; > mgp->rx_done.cnt = 0; > + mgp->link_changes = 0; > status = myri10ge_update_mac_address(mgp, mgp->dev->dev_addr); > myri10ge_change_promisc(mgp, 0, 0); > myri10ge_change_pause(mgp, mgp->pause); > @@ -1085,13 +1094,19 @@ > if (mgp->link_state != stats->link_up) { > mgp->link_state = stats->link_up; > if (mgp->link_state) { > - printk(KERN_INFO "myri10ge: %s: link up\n", > - mgp->dev->name); > + if (netif_msg_link(mgp)) > + printk(KERN_INFO > + "myri10ge: %s: link up\n", > + mgp->dev->name); > netif_carrier_on(mgp->dev); > + mgp->link_changes++; > } else { > - printk(KERN_INFO "myri10ge: %s: link down\n", > - mgp->dev->name); > + if (netif_msg_link(mgp)) > + printk(KERN_INFO > + "myri10ge: %s: link down\n", > + mgp->dev->name); > netif_carrier_off(mgp->dev); > + mgp->link_changes++; > } > } > if (mgp->rdma_tags_available != > @@ -1293,8 +1308,9 @@ > "serial_number", "tx_pkt_start", "tx_pkt_done", > "tx_req", "tx_done", "rx_small_cnt", "rx_big_cnt", > "wake_queue", "stop_queue", "watchdog_resets", "tx_linearized", > - "link_up", "dropped_link_overflow", "dropped_link_error_or_filtered", > - "dropped_runt", "dropped_overrun", "dropped_no_small_buffer", > + "link_changes", "link_up", "dropped_link_overflow", > + "dropped_link_error_or_filtered", "dropped_runt", > + "dropped_overrun", "dropped_no_small_buffer", > "dropped_no_big_buffer" > }; > > @@ -1345,6 +1361,7 @@ > data[i++] = (unsigned int)mgp->stop_queue; > data[i++] = (unsigned int)mgp->watchdog_resets; > data[i++] = (unsigned int)mgp->tx_linearized; > + data[i++] = (unsigned int)mgp->link_changes; > data[i++] = (unsigned int)ntohl(mgp->fw_stats->link_up); > data[i++] = (unsigned int)ntohl(mgp->fw_stats->dropped_link_overflow); > data[i++] = > @@ -1355,6 +1372,18 @@ > data[i++] = (unsigned int)ntohl(mgp->fw_stats->dropped_no_big_buffer); > } > > +static void myri10ge_set_msglevel(struct net_device *netdev, u32 value) > +{ > + struct myri10ge_priv *mgp = netdev_priv(netdev); > + mgp->msg_enable = value; > +} > + > +static u32 myri10ge_get_msglevel(struct net_device *netdev) > +{ > + struct myri10ge_priv *mgp = netdev_priv(netdev); > + return mgp->msg_enable; > +} > + > static struct ethtool_ops myri10ge_ethtool_ops = { > .get_settings = myri10ge_get_settings, > .get_drvinfo = myri10ge_get_drvinfo, > @@ -1375,7 +1404,9 @@ > #endif > .get_strings = myri10ge_get_strings, > .get_stats_count = myri10ge_get_stats_count, > - .get_ethtool_stats = myri10ge_get_ethtool_stats > + .get_ethtool_stats = myri10ge_get_ethtool_stats, > + .set_msglevel = myri10ge_set_msglevel, > + .get_msglevel = myri10ge_get_msglevel > }; > > static int myri10ge_allocate_rings(struct net_device *dev) > @@ -2580,6 +2611,7 @@ > mgp->csum_flag = MXGEFW_FLAGS_CKSUM; > mgp->pause = myri10ge_flow_control; > mgp->intr_coal_delay = myri10ge_intr_coal_delay; > + mgp->msg_enable = netif_msg_init(myri10ge_debug, MYRI10GE_MSG_DEFAULT); > init_waitqueue_head(&mgp->down_wq); > > if (pci_enable_device(pdev)) { > > > > ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 3/3] myri10ge: convert to netdev_alloc_skb [not found] <44E0DA08.9080304@myri.com> 2006-08-14 21:52 ` [PATCH 1/3] myri10ge: define some previously hardwired firmware constants Brice Goglin 2006-08-14 21:53 ` [PATCH 2/3] myri10ge: allow to disable link status change reporting Brice Goglin @ 2006-08-14 21:53 ` Brice Goglin 2 siblings, 0 replies; 6+ messages in thread From: Brice Goglin @ 2006-08-14 21:53 UTC (permalink / raw) To: Jeff Garzik; +Cc: netdev Convert the myri10ge driver to use netdev_alloc_skb instead of dev_alloc_skb, which requires to propagate the net_device across several functions. Signed-off-by: Brice Goglin <brice@myri.com> --- drivers/net/myri10ge/myri10ge.c | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) Index: linux-mm/drivers/net/myri10ge/myri10ge.c =================================================================== --- linux-mm.orig/drivers/net/myri10ge/myri10ge.c 2006-08-14 14:21:57.000000000 -0400 +++ linux-mm/drivers/net/myri10ge/myri10ge.c 2006-08-14 14:22:07.000000000 -0400 @@ -798,12 +798,13 @@ * pages directly and building a fraglist in the near future. */ -static inline struct sk_buff *myri10ge_alloc_big(int bytes) +static inline struct sk_buff *myri10ge_alloc_big(struct net_device *dev, + int bytes) { struct sk_buff *skb; unsigned long data, roundup; - skb = dev_alloc_skb(bytes + 4096 + MXGEFW_PAD); + skb = netdev_alloc_skb(dev, bytes + 4096 + MXGEFW_PAD); if (skb == NULL) return NULL; @@ -821,12 +822,13 @@ /* Allocate 2x as much space as required and use whichever portion * does not cross a 4KB boundary */ -static inline struct sk_buff *myri10ge_alloc_small_safe(unsigned int bytes) +static inline struct sk_buff *myri10ge_alloc_small_safe(struct net_device *dev, + unsigned int bytes) { struct sk_buff *skb; unsigned long data, boundary; - skb = dev_alloc_skb(2 * (bytes + MXGEFW_PAD) - 1); + skb = netdev_alloc_skb(dev, 2 * (bytes + MXGEFW_PAD) - 1); if (unlikely(skb == NULL)) return NULL; @@ -847,12 +849,13 @@ /* Allocate just enough space, and verify that the allocated * space does not cross a 4KB boundary */ -static inline struct sk_buff *myri10ge_alloc_small(int bytes) +static inline struct sk_buff *myri10ge_alloc_small(struct net_device *dev, + int bytes) { struct sk_buff *skb; unsigned long roundup, data, end; - skb = dev_alloc_skb(bytes + 16 + MXGEFW_PAD); + skb = netdev_alloc_skb(dev, bytes + 16 + MXGEFW_PAD); if (unlikely(skb == NULL)) return NULL; @@ -868,15 +871,17 @@ "myri10ge_alloc_small: small skb crossed 4KB boundary\n"); myri10ge_skb_cross_4k = 1; dev_kfree_skb_any(skb); - skb = myri10ge_alloc_small_safe(bytes); + skb = myri10ge_alloc_small_safe(dev, bytes); } return skb; } static inline int -myri10ge_getbuf(struct myri10ge_rx_buf *rx, struct pci_dev *pdev, int bytes, - int idx) +myri10ge_getbuf(struct myri10ge_rx_buf *rx, struct myri10ge_priv *mgp, + int bytes, int idx) { + struct net_device *dev = mgp->dev; + struct pci_dev *pdev = mgp->pdev; struct sk_buff *skb; dma_addr_t bus; int len, retval = 0; @@ -884,11 +889,11 @@ bytes += VLAN_HLEN; /* account for 802.1q vlan tag */ if ((bytes + MXGEFW_PAD) > (4096 - 16) /* linux overhead */ ) - skb = myri10ge_alloc_big(bytes); + skb = myri10ge_alloc_big(dev, bytes); else if (myri10ge_skb_cross_4k) - skb = myri10ge_alloc_small_safe(bytes); + skb = myri10ge_alloc_small_safe(dev, bytes); else - skb = myri10ge_alloc_small(bytes); + skb = myri10ge_alloc_small(dev, bytes); if (unlikely(skb == NULL)) { rx->alloc_fail++; @@ -951,7 +956,7 @@ unmap_len = pci_unmap_len(&rx->info[idx], len); /* try to replace the received skb */ - if (myri10ge_getbuf(rx, mgp->pdev, bytes, idx)) { + if (myri10ge_getbuf(rx, mgp, bytes, idx)) { /* drop the frame -- the old skbuf is re-cycled */ mgp->stats.rx_dropped += 1; return 0; @@ -968,7 +973,6 @@ skb_put(skb, len); skb->protocol = eth_type_trans(skb, mgp->dev); - skb->dev = mgp->dev; if (mgp->csum_flag) { if ((skb->protocol == ntohs(ETH_P_IP)) || (skb->protocol == ntohs(ETH_P_IPV6))) { @@ -1439,7 +1443,7 @@ /* Fill the receive rings */ for (i = 0; i <= mgp->rx_small.mask; i++) { - status = myri10ge_getbuf(&mgp->rx_small, mgp->pdev, + status = myri10ge_getbuf(&mgp->rx_small, mgp, mgp->small_bytes, i); if (status) { printk(KERN_ERR @@ -1451,8 +1455,7 @@ for (i = 0; i <= mgp->rx_big.mask; i++) { status = - myri10ge_getbuf(&mgp->rx_big, mgp->pdev, - dev->mtu + ETH_HLEN, i); + myri10ge_getbuf(&mgp->rx_big, mgp, dev->mtu + ETH_HLEN, i); if (status) { printk(KERN_ERR "myri10ge: %s: alloced only %d big bufs\n", ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2006-08-15 12:49 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <44E0DA08.9080304@myri.com>
2006-08-14 21:52 ` [PATCH 1/3] myri10ge: define some previously hardwired firmware constants Brice Goglin
2006-08-14 21:53 ` [PATCH 2/3] myri10ge: allow to disable link status change reporting Brice Goglin
2006-08-14 22:02 ` Jeff Garzik
2006-08-15 12:46 ` Brice Goglin
2006-08-15 12:49 ` Brice Goglin
2006-08-14 21:53 ` [PATCH 3/3] myri10ge: convert to netdev_alloc_skb Brice Goglin
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).