[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20110415182922.GA2458@myri.com>
Date: Fri, 15 Apr 2011 13:29:22 -0500
From: Jon Mason <jon.mason@...i.com>
To: Michał Mirosław <mirq-linux@...e.qmqm.pl>
Cc: netdev@...r.kernel.org, Andrew Gallatin <gallatin@...i.com>,
Brice Goglin <brice@...i.com>
Subject: Re: [PATCH] net: myri10ge: convert to hw_features
On Fri, Apr 15, 2011 at 04:50:50PM +0200, Michał Mirosław wrote:
> Signed-off-by: Michał Mirosław <mirq-linux@...e.qmqm.pl>
> ---
> drivers/net/myri10ge/myri10ge.c | 66 +++++++-------------------------------
> 1 files changed, 12 insertions(+), 54 deletions(-)
>
> diff --git a/drivers/net/myri10ge/myri10ge.c b/drivers/net/myri10ge/myri10ge.c
> index 1446de5..a48eb92 100644
> --- a/drivers/net/myri10ge/myri10ge.c
> +++ b/drivers/net/myri10ge/myri10ge.c
> @@ -205,7 +205,6 @@ struct myri10ge_priv {
> int tx_boundary; /* boundary transmits cannot cross */
> int num_slices;
> int running; /* running? */
> - int csum_flag; /* rx_csums? */
Get rid of MXGEFW_FLAGS_CKSUM in drivers/net/myri10ge/myri10ge_mcp.h,
as this was the only thing using it.
> int small_bytes;
> int big_bytes;
> int max_intr_slots;
> @@ -1386,7 +1385,7 @@ myri10ge_rx_done(struct myri10ge_slice_state *ss, int len, __wsum csum,
> skb->protocol = eth_type_trans(skb, dev);
> skb_record_rx_queue(skb, ss - &mgp->ss[0]);
>
> - if (mgp->csum_flag) {
> + if (dev->features & NETIF_F_RXCSUM) {
> if ((skb->protocol == htons(ETH_P_IP)) ||
> (skb->protocol == htons(ETH_P_IPV6))) {
> skb->csum = csum;
> @@ -1757,43 +1756,6 @@ myri10ge_get_ringparam(struct net_device *netdev,
> ring->tx_pending = ring->tx_max_pending;
> }
>
> -static u32 myri10ge_get_rx_csum(struct net_device *netdev)
> -{
> - struct myri10ge_priv *mgp = netdev_priv(netdev);
> -
> - if (mgp->csum_flag)
> - return 1;
> - else
> - return 0;
> -}
> -
> -static int myri10ge_set_rx_csum(struct net_device *netdev, u32 csum_enabled)
> -{
> - struct myri10ge_priv *mgp = netdev_priv(netdev);
> - int err = 0;
> -
> - if (csum_enabled)
> - mgp->csum_flag = MXGEFW_FLAGS_CKSUM;
> - else {
> - netdev->features &= ~NETIF_F_LRO;
> - mgp->csum_flag = 0;
> -
> - }
> - return err;
> -}
> -
> -static int myri10ge_set_tso(struct net_device *netdev, u32 tso_enabled)
> -{
> - struct myri10ge_priv *mgp = netdev_priv(netdev);
> - u32 flags = mgp->features & (NETIF_F_TSO6 | NETIF_F_TSO);
> -
> - if (tso_enabled)
> - netdev->features |= flags;
> - else
> - netdev->features &= ~flags;
> - return 0;
> -}
ethtool_op_set_tso does not support TSO6. This would remove the
enable/disable of that feature.
> -
> static const char myri10ge_gstrings_main_stats[][ETH_GSTRING_LEN] = {
> "rx_packets", "tx_packets", "rx_bytes", "tx_bytes", "rx_errors",
> "tx_errors", "rx_dropped", "tx_dropped", "multicast", "collisions",
> @@ -1944,11 +1906,6 @@ static u32 myri10ge_get_msglevel(struct net_device *netdev)
> return mgp->msg_enable;
> }
>
> -static int myri10ge_set_flags(struct net_device *netdev, u32 value)
> -{
> - return ethtool_op_set_flags(netdev, value, ETH_FLAG_LRO);
> -}
> -
> static const struct ethtool_ops myri10ge_ethtool_ops = {
> .get_settings = myri10ge_get_settings,
> .get_drvinfo = myri10ge_get_drvinfo,
> @@ -1957,19 +1914,12 @@ static const struct ethtool_ops myri10ge_ethtool_ops = {
> .get_pauseparam = myri10ge_get_pauseparam,
> .set_pauseparam = myri10ge_set_pauseparam,
> .get_ringparam = myri10ge_get_ringparam,
> - .get_rx_csum = myri10ge_get_rx_csum,
> - .set_rx_csum = myri10ge_set_rx_csum,
> - .set_tx_csum = ethtool_op_set_tx_hw_csum,
> - .set_sg = ethtool_op_set_sg,
> - .set_tso = myri10ge_set_tso,
> .get_link = ethtool_op_get_link,
> .get_strings = myri10ge_get_strings,
> .get_sset_count = myri10ge_get_sset_count,
> .get_ethtool_stats = myri10ge_get_ethtool_stats,
> .set_msglevel = myri10ge_set_msglevel,
> .get_msglevel = myri10ge_get_msglevel,
> - .get_flags = ethtool_op_get_flags,
> - .set_flags = myri10ge_set_flags
> };
>
> static int myri10ge_allocate_rings(struct myri10ge_slice_state *ss)
> @@ -3136,6 +3086,14 @@ static int myri10ge_set_mac_address(struct net_device *dev, void *addr)
> return 0;
> }
>
> +static u32 myri10ge_fix_features(struct net_device *dev, u32 features)
> +{
> + if (!(features & NETIF_F_RXCSUM))
> + features &= ~NETIF_F_LRO;
> +
> + return features;
> +}
> +
> static int myri10ge_change_mtu(struct net_device *dev, int new_mtu)
> {
> struct myri10ge_priv *mgp = netdev_priv(dev);
> @@ -3834,6 +3792,7 @@ static const struct net_device_ops myri10ge_netdev_ops = {
> .ndo_get_stats = myri10ge_get_stats,
> .ndo_validate_addr = eth_validate_addr,
> .ndo_change_mtu = myri10ge_change_mtu,
> + .ndo_fix_features = myri10ge_fix_features,
> .ndo_set_multicast_list = myri10ge_set_multicast_list,
> .ndo_set_mac_address = myri10ge_set_mac_address,
> };
> @@ -3860,7 +3819,6 @@ static int myri10ge_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
> mgp = netdev_priv(netdev);
> mgp->dev = netdev;
> mgp->pdev = pdev;
> - 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);
> @@ -3976,11 +3934,11 @@ static int myri10ge_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
> netdev->netdev_ops = &myri10ge_netdev_ops;
> netdev->mtu = myri10ge_initial_mtu;
> netdev->base_addr = mgp->iomem_base;
> - netdev->features = mgp->features;
> + netdev->hw_features = mgp->features | NETIF_F_LRO | NETIF_F_RXCSUM;
> + netdev->features = netdev->hw_features;
>
> if (dac_enabled)
> netdev->features |= NETIF_F_HIGHDMA;
> - netdev->features |= NETIF_F_LRO;
>
> netdev->vlan_features |= mgp->features;
> if (mgp->fw_ver_tiny < 37)
> --
> 1.7.2.5
>
> --
> To unsubscribe from this list: send the line "unsubscribe netdev" in
> the body of a message to majordomo@...r.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists