All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Wells Lu 呂芳騰" <wells.lu@sunplus.com>
To: Andrew Lunn <andrew@lunn.ch>
Cc: "Denis Kirjanov" <dkirjanov@suse.de>,
	"Wells Lu" <wellslutw@gmail.com>,
	"davem@davemloft.net" <davem@davemloft.net>,
	"kuba@kernel.org" <kuba@kernel.org>,
	"robh+dt@kernel.org" <robh+dt@kernel.org>,
	"netdev@vger.kernel.org" <netdev@vger.kernel.org>,
	"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"p.zabel@pengutronix.de" <p.zabel@pengutronix.de>,
	"Vincent Shih 施錕鴻" <vincent.shih@sunplus.com>
Subject: RE: [PATCH v2 2/2] net: ethernet: Add driver for Sunplus SP7021
Date: Thu, 18 Nov 2021 08:15:11 +0000	[thread overview]
Message-ID: <62964ef2c4bc4dd6a316f160f2a3b94d@sphcmbx02.sunplus.com.tw> (raw)
In-Reply-To: <YY/bGkVEKLS75sU0@lunn.ch>

Hi,


> > > > +//define MAC interrupt status bit
> > > please embrace all comments with /* */
> >
> > Do you mean to modify comment, for example,
> >
> > //define MAC interrupt status bit
> >
> > to
> >
> > /* define MAC interrupt status bit */
> 
> Yes. The Kernel is written in C, so C style comments are preferred over C++ comments, even
> if later versions of the C standard allow C++ style comments.

I'll modify all comments to C style in next patch.


> You should also read the netdev FAQ, which makes some specific comments about how multi-line
> comments should be formatted.

Thanks for routing me to the document.
I'll use the new format for multi-line comments.
---
It is requested that you make it look like this:

/* foobar blah blah blah
 * another line of text
 */


> > Yes, I'll add error check in next patch as shown below:
> >
> > 		rx_skbinfo[j].mapping = dma_map_single(&comm->pdev->dev, skb->data,
> > 						       comm->rx_desc_buff_size,
> > 						       DMA_FROM_DEVICE);
> > 		if (dma_mapping_error(&comm->pdev->dev, rx_skbinfo[j].mapping))
> > 			goto mem_alloc_fail;
> 
> If it is clear how to fix the code, just do it. No need to tell us what you are going to
> do, we will see the change when reviewing the next version.

Thanks, I see.


> > > > +/* Transmit a packet (called by the kernel) */ static int
> > > > +ethernet_start_xmit(struct sk_buff *skb, struct net_device *ndev)
> > > > +{
> > > > +	struct sp_mac *mac = netdev_priv(ndev);
> > > > +	struct sp_common *comm = mac->comm;
> > > > +	u32 tx_pos;
> > > > +	u32 cmd1;
> > > > +	u32 cmd2;
> > > > +	struct mac_desc *txdesc;
> > > > +	struct skb_info *skbinfo;
> > > > +	unsigned long flags;
> > > > +
> > > > +	if (unlikely(comm->tx_desc_full == 1)) {
> > > > +		// No TX descriptors left. Wait for tx interrupt.
> > > > +		netdev_info(ndev, "TX descriptor queue full when xmit!\n");
> > > > +		return NETDEV_TX_BUSY;
> > > Do you really have to return NETDEV_TX_BUSY?
> >
> > (tx_desc_full == 1) means there is no TX descriptor left in ring buffer.
> > So there is no way to do new transmit. Return 'busy' directly.
> > I am not sure if this is a correct process or not.
> > Could you please teach is there any other way to take care of this case?
> > Drop directly?
> 
> There are a few hundred examples to follow, other MAC drivers. What do they do when out
> of TX buffers? Find the most common pattern, and follow it.

But some drivers return NETDEV_TX_BUSY, some drivers drop packet and return NETDEV_TX_OK
Some drivers seem do not take care this issue. I am not sure.


> You should also thinking about the netdev_info(). Do you really want to spam the kernel
> log? Say you are connected to a 10/Half link, and the application is trying to send UDP
> at 100Mbps, Won't you see a lot of these messages? change it to _debug(), or rate limit
> it.

Yes, I'll modify most netdev_info() to netdev_dbg() in next patch.


> > static void ethernet_tx_timeout(struct net_device *ndev, unsigned int
> > txqueue) {
> > 	struct sp_mac *mac = netdev_priv(ndev);
> > 	struct net_device *ndev2;
> > 	unsigned long flags;
> >
> > 	netdev_err(ndev, "TX timed out!\n");
> > 	ndev->stats.tx_errors++;
> >
> > 	spin_lock_irqsave(&mac->comm->tx_lock, flags);
> > 	netif_stop_queue(ndev);
> > 	ndev2 = mac->next_ndev;
> > 	if (ndev2)
> > 		netif_stop_queue(ndev2);
> >
> > 	hal_mac_stop(mac);
> > 	hal_mac_init(mac);
> > 	hal_mac_start(mac);
> >
> > 	// Accept TX packets again.
> > 	netif_trans_update(ndev);
> > 	netif_wake_queue(ndev);
> > 	if (ndev2) {
> > 		netif_trans_update(ndev2);
> > 		netif_wake_queue(ndev2);
> > 	}
> >
> > 	spin_unlock_irqrestore(&mac->comm->tx_lock, flags); }
> >
> > Is that ok?
> 
> This ndev2 stuff is not nice. You probably need a cleaner abstract of two netdev's sharing
> one TX and RX ring. See if there are any other switchdev drivers with a similar structure
> you can copy. Maybe cpsw_new.c? But be careful with that driver. cpsw is a bit of a mess
> due to an incorrect initial design with respect to its L2 switch. A lot of my initial comments
> are to stop you making the same mistakes.

I'll define a array (pointer to struct net_dev) in driver private (shared) 
structure to access to all net devices. No more mac->next_ndev;.

>     Andrew

Thank you very much for your review.


Best regards,
Wells

  reply	other threads:[~2021-11-18  8:17 UTC|newest]

Thread overview: 63+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-11-03 11:02 [PATCH 0/2] This is a patch series of ethernet driver for Sunplus SP7021 SoC Wells Lu
2021-11-03 11:02 ` [PATCH 1/2] devicetree: bindings: net: Add bindings doc for Sunplus SP7021 Wells Lu
2021-11-03 11:02 ` [PATCH 2/2] net: ethernet: Add driver " Wells Lu
2021-11-03 12:05   ` Denis Kirjanov
2021-11-03 14:08     ` Wells Lu 呂芳騰
2021-11-03 12:10   ` Philipp Zabel
2021-11-03 15:11     ` Wells Lu 呂芳騰
2021-11-03 15:52   ` Randy Dunlap
2021-11-03 18:08     ` Wells Lu 呂芳騰
2021-11-03 19:30       ` Andrew Lunn
2021-11-04  5:31         ` Wells Lu 呂芳騰
2021-11-04 12:59           ` Andrew Lunn
2021-11-04 14:55             ` Randy Dunlap
2021-11-04 17:51               ` Wells Lu 呂芳騰
2021-11-04 17:46             ` Wells Lu 呂芳騰
2021-11-04 18:21               ` Andrew Lunn
2021-11-04 19:03                 ` Wells Lu 呂芳騰
2021-11-03 20:26       ` Randy Dunlap
2021-11-03 16:51   ` Andrew Lunn
2021-11-05 11:25     ` Wells Lu 呂芳騰
2021-11-05 13:37       ` Andrew Lunn
2021-11-08  9:37         ` Wells Lu 呂芳騰
2021-11-08 13:15           ` Andrew Lunn
2021-11-08 14:26             ` Wells Lu 呂芳騰
2021-11-08 14:52               ` Andrew Lunn
2021-11-08 16:47                 ` Wells Lu 呂芳騰
2021-11-08 17:32                   ` Andrew Lunn
2021-11-09 14:39                     ` Wells Lu 呂芳騰
2021-11-09 15:32                       ` Andrew Lunn
2021-11-09 17:05                         ` Wells Lu 呂芳騰
2021-11-14 19:19   ` Pavel Skripkin
2021-11-17  9:28     ` Wells Lu 呂芳騰
2021-11-03 11:27 ` [PATCH 0/2] This is a patch series of ethernet driver for Sunplus SP7021 SoC Denis Kirjanov
2021-11-11  9:04 ` [PATCH v2 0/2] This is a patch series for pinctrl " Wells Lu
2021-11-11  9:04   ` [PATCH v2 1/2] devicetree: bindings: net: Add bindings doc for Sunplus SP7021 Wells Lu
2021-11-11 14:57     ` Rob Herring
2021-11-12  2:57       ` Wells Lu 呂芳騰
2021-11-11 18:23     ` Andrew Lunn
2021-11-12  2:50       ` Wells Lu 呂芳騰
2021-11-11  9:04   ` [PATCH v2 2/2] net: ethernet: Add driver " Wells Lu
2021-11-11 11:31     ` Denis Kirjanov
2021-11-13 14:22       ` Wells Lu 呂芳騰
2021-11-13 15:34         ` Andrew Lunn
2021-11-18  8:15           ` Wells Lu 呂芳騰 [this message]
2021-11-12 17:42     ` kernel test robot
2021-11-12 17:42       ` kernel test robot
2021-11-12 23:16     ` Florian Fainelli
2021-11-12 23:24       ` Andrew Lunn
2021-11-15 14:38         ` Wells Lu 呂芳騰
2021-11-14 18:59       ` Wells Lu 呂芳騰
2021-11-12 23:58     ` Andrew Lunn
2021-11-16 17:09       ` Wells Lu 呂芳騰
2021-11-16 22:15         ` Andrew Lunn
2021-11-18  8:22           ` Wells Lu 呂芳騰
2021-11-25 11:28       ` Wells Lu 呂芳騰
2021-11-25 15:20         ` Andrew Lunn
2021-11-26  3:56           ` Wells Lu 呂芳騰
2021-11-26 14:38             ` Andrew Lunn
2021-11-26 16:12               ` Wells Lu 呂芳騰
2021-11-26 18:07                 ` Andrew Lunn
2021-11-26 19:13                   ` Wells Lu 呂芳騰
2021-11-26 19:32                     ` Andrew Lunn
2021-11-29 11:16                       ` Wells Lu 呂芳騰

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=62964ef2c4bc4dd6a316f160f2a3b94d@sphcmbx02.sunplus.com.tw \
    --to=wells.lu@sunplus.com \
    --cc=andrew@lunn.ch \
    --cc=davem@davemloft.net \
    --cc=devicetree@vger.kernel.org \
    --cc=dkirjanov@suse.de \
    --cc=kuba@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=p.zabel@pengutronix.de \
    --cc=robh+dt@kernel.org \
    --cc=vincent.shih@sunplus.com \
    --cc=wellslutw@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.