> -----Original Message----- > From: Joe Perches [mailto:j...@perches.com] > On Wed, 2015-04-01 at 19:19 +0300, Madalin Bucur wrote: > > This introduces the Freescale Data Path Acceleration Architecture > > (DPAA) Ethernet driver (dpaa_eth) that builds upon the DPAA QMan, > > BMan, PAMU and FMan drivers to deliver Ethernet connectivity on > > the Freescale DPAA QorIQ platforms. > > trivial notes: > > > diff --git a/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c > b/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c > [] > > @@ -0,0 +1,835 @@ > > +/* Copyright 2008 - 2015 Freescale Semiconductor Inc. > > + * > > + * Redistribution and use in source and binary forms, with or without > > + * modification, are permitted provided that the following conditions are > met: > > + * * Redistributions of source code must retain the above copyright > > + * notice, this list of conditions and the following disclaimer. > > + * * Redistributions in binary form must reproduce the above copyright > > + * notice, this list of conditions and the following disclaimer in the > > + * documentation and/or other materials provided with the > distribution. > > + * * Neither the name of Freescale Semiconductor nor the > > + * names of its contributors may be used to endorse or promote > products > > + * derived from this software without specific prior written permission. > > + * > > + * ALTERNATIVELY, this software may be distributed under the terms of > the > > + * GNU General Public License ("GPL") as published by the Free Software > > + * Foundation, either version 2 of that License or (at your option) any > > + * later version. > > Given this is GPLed here, does the first block need to exist?
I'll replace that with this license text: /* Freescale(R) DPAA Ethernet Linux driver * Copyright 2008 - 2015 Freescale Semiconductor Inc. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see <http://www.gnu.org/licenses/>. */ > > +#define pr_fmt(fmt) \ > > + KBUILD_MODNAME ": " fmt > > single line please I will address this. > > +#include <linux/if_arp.h> /* arp_hdr_len() */ > > +#include <linux/if_vlan.h> /* VLAN_HLEN */ > > +#include <linux/icmp.h> /* struct icmphdr */ > > +#include <linux/ip.h> /* struct iphdr */ > > +#include <linux/ipv6.h> /* struct ipv6hdr */ > > +#include <linux/udp.h> /* struct udphdr */ > > +#include <linux/tcp.h> /* struct tcphdr */ > > +#include <linux/net.h> /* net_ratelimit() */ > > +#include <linux/if_ether.h> /* ETH_P_IP and ETH_P_IPV6 */ > > These comments are pretty unusual and likely incomplete > so they're probably not useful. I will clean-up all files. > > +static u8 debug = -1; > > +module_param(debug, byte, S_IRUGO); > > +MODULE_PARM_DESC(debug, "Module/Driver verbosity level"); > > default on? Likely default off would be better. Found several drivers that keep it by default enabled, should I change it to off? > > +static void _dpa_rx_error(struct net_device *net_dev, > > + const struct dpa_priv_s *priv, > > + struct dpa_percpu_priv_s *percpu_priv, > > + const struct qm_fd *fd, > > + u32 fqid) > > +{ > > + /* limit common, possibly innocuous Rx FIFO Overflow errors' > > + * interference with zero-loss convergence benchmark results. > > + */ > > + if (likely(fd->status & FM_FD_STAT_ERR_PHYSICAL)) > > + pr_warn_once("non-zero error counters in fman statistics > (sysfs)\n"); > > + else > > + if (netif_msg_hw(priv) && net_ratelimit()) > > + netdev_err(net_dev, "Err FD status = 0x%08x\n", > > + fd->status & FM_FD_STAT_RX_ERRORS); > > if (netif_msg_<foo>(priv)) > netdev_<level>(netdev, ...) > > uses can be written like: > > netif_<level>(priv, <foo>, netdev, ...); > > So this is perhaps better as > > if (likely(fd->status & FM_FD_STAT_ERR_PHYSICAL)) > pr_warn_once("non-zero error counters in fman statistics > (sysfs)\n"); > else if (net_ratelimit()) > netif_err(priv, hw, net_dev, "Err FD status = 0x%08x\n", > fd->status & FM_FD_STAT_RX_ERRORS); Thank you, will try to address all the occurrences. > > + > > + percpu_priv->stats.rx_errors++; > > + > > + dpa_fd_release(net_dev, fd);, > > +} > > + > > +static void _dpa_tx_error(struct net_device *net_dev, > > + const struct dpa_priv_s *priv, > > + struct dpa_percpu_priv_s *percpu_priv, > > + const struct qm_fd *fd, > > + u32 fqid) > > +{ > > + struct sk_buff *skb; > > + > > + if (netif_msg_hw(priv) && net_ratelimit()) > > + netdev_warn(net_dev, "FD status = 0x%08x\n", > > + fd->status & FM_FD_STAT_TX_ERRORS); > > netif_warn(priv, hw, net_dev, etc...); > Will change. > > +static int __cold dpa_eth_priv_stop(struct net_device *net_dev) > > Use of __cold is pretty unusual in drivers > > > +static struct dpa_bp * __cold > > +dpa_priv_bp_probe(struct device *dev) > > +{ > > + struct dpa_bp *dpa_bp; > > + > > + dpa_bp = devm_kzalloc(dev, sizeof(*dpa_bp), GFP_KERNEL); > > + if (unlikely(!dpa_bp)) { > > + dev_err(dev, "devm_kzalloc() failed\n"); > > No need for this alloc failure message Will remove. > > +static int dpa_priv_bp_create(struct net_device *net_dev, struct dpa_bp > *dpa_bp, > > + size_t count) > > +{ > > + struct dpa_priv_s *priv = netdev_priv(net_dev); > > + int i; > > + > > + if (netif_msg_probe(priv)) > > + dev_dbg(net_dev->dev.parent, > > + "Using private BM buffer pools\n"); > > Why emit using dev.parent? Will address. > > diff --git a/drivers/net/ethernet/freescale/dpaa/dpaa_eth_common.h > b/drivers/net/ethernet/freescale/dpaa/dpaa_eth_common.h > > > +int __cold dpa_start(struct net_device *net_dev); > > +int __cold dpa_stop(struct net_device *net_dev); > > +void __cold dpa_timeout(struct net_device *net_dev); > > Marking a function prototype with an attribute means > the implementation doesn't need the same attribute. We'll remove those attributes completely. > > +/* Convenience macros for storing/retrieving the skb back-pointers. > > + * > > + * NB: @off is an offset from a (struct sk_buff **) pointer! > > + */ > > +#define DPA_WRITE_SKB_PTR(skb, skbh, addr, off) \ > > + { \ > > + skbh = (struct sk_buff **)addr; \ > > + *(skbh + (off)) = skb; \ > > + } > > +#define DPA_READ_SKB_PTR(skb, skbh, addr, off) \ > > + { \ > > + skbh = (struct sk_buff **)addr; \ > > + skb = *(skbh + (off)); \ > > + } > > Maybe these are better as static inlines? Probably we can do this change and then use something like this in the code: dpa_write_skb_ptr(skb, &skbh, addr, off); dpa_read_skb_ptr(&skb, &skbh, addr, off); Thank you, Madalin -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/