All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vadym Kochan <vadym.kochan@plvision.eu>
To: Jiri Pirko <jiri@resnulli.us>
Cc: netdev@vger.kernel.org, "David S. Miller" <davem@davemloft.net>,
	Oleksandr Mazur <oleksandr.mazur@plvision.eu>,
	Serhiy Boiko <serhiy.boiko@plvision.eu>,
	Serhiy Pshyk <serhiy.pshyk@plvision.eu>,
	Volodymyr Mytnyk <volodymyr.mytnyk@plvision.eu>,
	Taras Chornyi <taras.chornyi@plvision.eu>,
	Andrii Savka <andrii.savka@plvision.eu>,
	Jiri Pirko <jiri@mellanox.com>,
	Ido Schimmel <idosch@mellanox.com>, Andrew Lunn <andrew@lunn.ch>,
	Chris Packham <Chris.Packham@alliedtelesis.co.nz>
Subject: Re: [RFC next-next v2 1/5] net: marvell: prestera: Add driver for Prestera family ASIC devices
Date: Tue, 12 May 2020 10:15:52 +0300	[thread overview]
Message-ID: <20200512071552.GA17235@plvision.eu> (raw)
In-Reply-To: <20200512055536.GM2245@nanopsycho>

On Tue, May 12, 2020 at 07:55:36AM +0200, Jiri Pirko wrote:
> Mon, May 11, 2020 at 09:24:22PM CEST, vadym.kochan@plvision.eu wrote:
> >On Mon, May 11, 2020 at 02:57:23PM +0200, Jiri Pirko wrote:
> >> [...]
> >> 
> >> >diff --git a/drivers/net/ethernet/marvell/prestera/prestera_dsa.c b/drivers/net/ethernet/marvell/prestera/prestera_dsa.c
[...]
> >> >+netdev_tx_t prestera_sdma_xmit(struct prestera_sdma *sdma, struct sk_buff *skb)
> >> >+{
> >> >+	struct device *dma_dev = sdma->sw->dev->dev;
> >> >+	struct prestera_tx_ring *tx_ring;
> >> >+	struct net_device *dev = skb->dev;
> >> >+	struct prestera_sdma_buf *buf;
> >> >+	int err;
> >> >+
> >> >+	tx_ring = &sdma->tx_ring;
> >> >+
> >> >+	buf = &tx_ring->bufs[tx_ring->next_tx];
> >> >+	if (buf->is_used) {
> >> >+		schedule_work(&sdma->tx_work);
> >> >+		goto drop_skb;
> >> >+	}
> >> 
> >> What is preventing 2 CPUs to get here and work with the same buf?
> >
> >I assume you mean serialization between the recycling work and xmit
> >context ? Actually they are just updating 'is_used' field which
> 
> No.
> 
> >allows to use or free, what I can see is that may be I need to use
> >something like READ_ONCE/WRITE_ONCE, but the rest looks safe for me:
> >
> >1) recycler updates is_used=false only after fully freeing the buffer,
> >and only if it was set to true.
> >
> >2) xmit context gets next buffer to use only if it is freed
> >(is_used=false), and sets it to true after buffer is ready to be sent.
> >
> >So, yes these contexts both update this field but in strict sequence.
> >
> >If you mean of protecting of xmit on several CPUS so, the xmit should be
> >serialized on kernel, and the driver uses one queue which (as I
> >underand) is bound to particular CPU.
> 
> How is it serialized? You get here (to prestera_sdma_xmit()) on 2 CPUs
> with the same sdma pointer and 2 skbs.
> 

My understanding is:

dev_hard_start_xmit is the entry function which is called by the
networking layer to send skb via device (qos scheduler, pktgen, xfrm,
core - dev_direct_xmit(), etc).

All they acquire the HARD_TX_LOCK which locks particular tx queue. And
since the driver uses one tx queue there should be no concurrent access
inside ndo_start_xmit, right ?

[...]

  reply	other threads:[~2020-05-12  7:16 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-04-30 23:20 [RFC next-next v2 0/5] net: marvell: prestera: Add Switchdev driver for Prestera family ASIC device 98DX326x (AC3x) Vadym Kochan
2020-04-30 23:20 ` [RFC next-next v2 1/5] net: marvell: prestera: Add driver for Prestera family ASIC devices Vadym Kochan
2020-05-11 10:32   ` Jiri Pirko
2020-05-11 11:11     ` Vadym Kochan
2020-05-11 11:29       ` Jiri Pirko
2020-05-11 12:42         ` Andrew Lunn
2020-05-11 13:02           ` Vadym Kochan
2020-05-11 13:53             ` Andrew Lunn
2020-05-11 14:11               ` Vadym Kochan
2020-05-11 15:32                 ` Jiri Pirko
2020-05-11 16:43                   ` Andrew Lunn
2020-05-11 17:24                     ` Jiri Pirko
2020-05-12 14:53     ` Vadym Kochan
2020-05-12 15:03       ` Jiri Pirko
2020-05-12 15:07         ` Vadym Kochan
2020-05-12 15:21           ` Jiri Pirko
2020-05-11 12:57   ` Jiri Pirko
2020-05-11 19:24     ` Vadym Kochan
2020-05-12  5:55       ` Jiri Pirko
2020-05-12  7:15         ` Vadym Kochan [this message]
2020-05-12 11:13           ` Jiri Pirko
2020-05-12 14:50     ` Vadym Kochan
2020-05-12 15:02       ` Jiri Pirko
2020-04-30 23:20 ` [RFC next-next v2 2/5] net: marvell: prestera: Add PCI interface support Vadym Kochan
2020-05-01  0:00   ` Andrew Lunn
2020-05-01  6:22     ` Vadym Kochan
2020-05-01 13:25       ` Andrew Lunn
2020-05-11 11:23   ` Jiri Pirko
2020-05-26 16:26     ` Vadym Kochan
2020-05-27  5:53       ` Jiri Pirko
2020-05-27  8:55         ` Vadym Kochan
2020-05-27 12:01           ` Mickey Rachamim
2020-05-28 10:29             ` Jiri Pirko
2020-04-30 23:20 ` [RFC next-next v2 3/5] net: marvell: prestera: Add ethtool " Vadym Kochan
2020-05-11 17:31   ` Jiri Pirko
2020-04-30 23:20 ` [RFC next-next v2 4/5] net: marvell: prestera: Add Switchdev driver implementation Vadym Kochan
2020-04-30 23:20 ` [RFC next-next v2 5/5] dt-bindings: marvell,prestera: Add address mapping for Prestera Switchdev PCIe driver Vadym Kochan
2020-05-01  0:01   ` Andrew Lunn

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=20200512071552.GA17235@plvision.eu \
    --to=vadym.kochan@plvision.eu \
    --cc=Chris.Packham@alliedtelesis.co.nz \
    --cc=andrew@lunn.ch \
    --cc=andrii.savka@plvision.eu \
    --cc=davem@davemloft.net \
    --cc=idosch@mellanox.com \
    --cc=jiri@mellanox.com \
    --cc=jiri@resnulli.us \
    --cc=netdev@vger.kernel.org \
    --cc=oleksandr.mazur@plvision.eu \
    --cc=serhiy.boiko@plvision.eu \
    --cc=serhiy.pshyk@plvision.eu \
    --cc=taras.chornyi@plvision.eu \
    --cc=volodymyr.mytnyk@plvision.eu \
    /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.