All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stanislav Fomichev <stfomichev@gmail.com>
To: Mina Almasry <almasrymina@google.com>
Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-doc@vger.kernel.org, virtualization@lists.linux.dev,
	kvm@vger.kernel.org, linux-kselftest@vger.kernel.org,
	"David S. Miller" <davem@davemloft.net>,
	"Eric Dumazet" <edumazet@google.com>,
	"Jakub Kicinski" <kuba@kernel.org>,
	"Paolo Abeni" <pabeni@redhat.com>,
	"Simon Horman" <horms@kernel.org>,
	"Donald Hunter" <donald.hunter@gmail.com>,
	"Jonathan Corbet" <corbet@lwn.net>,
	"Andrew Lunn" <andrew+netdev@lunn.ch>,
	"Jeroen de Borst" <jeroendb@google.com>,
	"Praveen Kaligineedi" <pkaligineedi@google.com>,
	"Shailend Chand" <shailend@google.com>,
	"Kuniyuki Iwashima" <kuniyu@amazon.com>,
	"Willem de Bruijn" <willemb@google.com>,
	"David Ahern" <dsahern@kernel.org>,
	"Neal Cardwell" <ncardwell@google.com>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	"Jason Wang" <jasowang@redhat.com>,
	"Xuan Zhuo" <xuanzhuo@linux.alibaba.com>,
	"Eugenio Pérez" <eperezma@redhat.com>,
	"Stefan Hajnoczi" <stefanha@redhat.com>,
	"Stefano Garzarella" <sgarzare@redhat.com>,
	"Shuah Khan" <shuah@kernel.org>,
	sdf@fomichev.me, asml.silence@gmail.com, dw@davidwei.uk,
	"Jamal Hadi Salim" <jhs@mojatatu.com>,
	"Victor Nogueira" <victor@mojatatu.com>,
	"Pedro Tammela" <pctammela@mojatatu.com>,
	"Samiullah Khawaja" <skhawaja@google.com>
Subject: Re: [PATCH net-next v4 6/9] net: enable driver support for netmem TX
Date: Fri, 21 Feb 2025 16:35:24 -0800	[thread overview]
Message-ID: <Z7kbzJSl_nNUoPnR@mini-arch> (raw)
In-Reply-To: <CAHS8izO2PU-A9gQHkJpB=QkFkiKvVUNCm5Von5GFY+5qV5+Oog@mail.gmail.com>

On 02/21, Mina Almasry wrote:
> On Thu, Feb 20, 2025 at 11:13 AM Stanislav Fomichev
> <stfomichev@gmail.com> wrote:
> >
> > On 02/20, Mina Almasry wrote:
> > > Drivers need to make sure not to pass netmem dma-addrs to the
> > > dma-mapping API in order to support netmem TX.
> > >
> > > Add helpers and netmem_dma_*() helpers that enables special handling of
> > > netmem dma-addrs that drivers can use.
> > >
> > > Document in netmem.rst what drivers need to do to support netmem TX.
> > >
> > > Signed-off-by: Mina Almasry <almasrymina@google.com>
> > >
> > > ---
> > >
> > > v4:
> > > - New patch
> > > ---
> > >  .../networking/net_cachelines/net_device.rst  |  1 +
> > >  Documentation/networking/netdev-features.rst  |  5 +++++
> > >  Documentation/networking/netmem.rst           | 14 +++++++++++--
> > >  include/linux/netdevice.h                     |  2 ++
> > >  include/net/netmem.h                          | 20 +++++++++++++++++++
> > >  5 files changed, 40 insertions(+), 2 deletions(-)
> > >
> > > diff --git a/Documentation/networking/net_cachelines/net_device.rst b/Documentation/networking/net_cachelines/net_device.rst
> > > index 15e31ece675f..e3043b033647 100644
> > > --- a/Documentation/networking/net_cachelines/net_device.rst
> > > +++ b/Documentation/networking/net_cachelines/net_device.rst
> > > @@ -10,6 +10,7 @@ Type                                Name                        fastpath_tx_acce
> > >  =================================== =========================== =================== =================== ===================================================================================
> > >  unsigned_long:32                    priv_flags                  read_mostly                             __dev_queue_xmit(tx)
> > >  unsigned_long:1                     lltx                        read_mostly                             HARD_TX_LOCK,HARD_TX_TRYLOCK,HARD_TX_UNLOCK(tx)
> > > +unsigned long:1                          netmem_tx:1;                read_mostly
> > >  char                                name[16]
> > >  struct netdev_name_node*            name_node
> > >  struct dev_ifalias*                 ifalias
> > > diff --git a/Documentation/networking/netdev-features.rst b/Documentation/networking/netdev-features.rst
> > > index 5014f7cc1398..02bd7536fc0c 100644
> > > --- a/Documentation/networking/netdev-features.rst
> > > +++ b/Documentation/networking/netdev-features.rst
> > > @@ -188,3 +188,8 @@ Redundancy) frames from one port to another in hardware.
> > >  This should be set for devices which duplicate outgoing HSR (High-availability
> > >  Seamless Redundancy) or PRP (Parallel Redundancy Protocol) tags automatically
> > >  frames in hardware.
> > > +
> > > +* netmem-tx
> > > +
> > > +This should be set for devices which support netmem TX. See
> > > +Documentation/networking/netmem.rst
> > > diff --git a/Documentation/networking/netmem.rst b/Documentation/networking/netmem.rst
> > > index 7de21ddb5412..43054d44c407 100644
> > > --- a/Documentation/networking/netmem.rst
> > > +++ b/Documentation/networking/netmem.rst
> > > @@ -19,8 +19,8 @@ Benefits of Netmem :
> > >  * Simplified Development: Drivers interact with a consistent API,
> > >    regardless of the underlying memory implementation.
> > >
> > > -Driver Requirements
> > > -===================
> > > +Driver RX Requirements
> > > +======================
> > >
> > >  1. The driver must support page_pool.
> > >
> > > @@ -77,3 +77,13 @@ Driver Requirements
> > >     that purpose, but be mindful that some netmem types might have longer
> > >     circulation times, such as when userspace holds a reference in zerocopy
> > >     scenarios.
> > > +
> > > +Driver TX Requirements
> > > +======================
> > > +
> > > +1. Driver should use netmem_dma_unmap_page_attrs() in lieu of
> > > +   dma_unmap_page[_attrs](), and netmem_dma_unmap_addr_set() in lieu of
> > > +   dma_unmap_addr_set(). The netmem variants will handle netmems that should
> > > +   not be dma-unmapped by the driver, such as dma-buf netmems.
> >
> > Not all drivers use dma_unmap_addr_xxx APIs (looking at mlx5). Might
> > be worth mentioning that for the drivers managing the mappings
> > differently, care might be taken to not unmap netmems?
> >
> 
> Yes now that I take a closer look, it's poorly worded to imply the
> issue is limited to dma_unmap. I will reword to say that all
> dma_map*() APIs must be avoided, and we have helpers for
> dma_unmap_*(), and more helpers can be added if needed (similar to
> wording in the Driver RX requirements).
> 
> > > +2. Driver should declare support by setting `netdev->netmem_tx = true`
> > > diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
> > > index fccc03cd2164..d8cfd5d69ddf 100644
> > > --- a/include/linux/netdevice.h
> > > +++ b/include/linux/netdevice.h
> > > @@ -1753,6 +1753,7 @@ enum netdev_reg_state {
> > >   *   @lltx:          device supports lockless Tx. Deprecated for real HW
> > >   *                   drivers. Mainly used by logical interfaces, such as
> > >   *                   bonding and tunnels
> > > + *   @netmem_tx:     device support netmem_tx.
> > >   *
> > >   *   @name:  This is the first field of the "visible" part of this structure
> > >   *           (i.e. as seen by users in the "Space.c" file).  It is the name
> > > @@ -2061,6 +2062,7 @@ struct net_device {
> > >       struct_group(priv_flags_fast,
> > >               unsigned long           priv_flags:32;
> > >               unsigned long           lltx:1;
> > > +             unsigned long           netmem_tx:1;
> > >       );
> > >       const struct net_device_ops *netdev_ops;
> > >       const struct header_ops *header_ops;
> > > diff --git a/include/net/netmem.h b/include/net/netmem.h
> > > index a2148ffb203d..1fb39ad63290 100644
> > > --- a/include/net/netmem.h
> > > +++ b/include/net/netmem.h
> > > @@ -8,6 +8,7 @@
> > >  #ifndef _NET_NETMEM_H
> > >  #define _NET_NETMEM_H
> > >
> > > +#include <linux/dma-mapping.h>
> > >  #include <linux/mm.h>
> > >  #include <net/net_debug.h>
> > >
> > > @@ -267,4 +268,23 @@ static inline unsigned long netmem_get_dma_addr(netmem_ref netmem)
> > >  void get_netmem(netmem_ref netmem);
> > >  void put_netmem(netmem_ref netmem);
> > >
> >
> > [..]
> >
> > > +#define netmem_dma_unmap_addr_set(NETMEM, PTR, ADDR_NAME, VAL)   \
> > > +     do {                                                     \
> > > +             if (!netmem_is_net_iov(NETMEM))                  \
> > > +                     dma_unmap_addr_set(PTR, ADDR_NAME, VAL); \
> > > +             else                                             \
> > > +                     dma_unmap_addr_set(PTR, ADDR_NAME, 0);   \
> > > +     } while (0)
> >
> > Any reason not do to static inline instaed?
> 
> Because the args passed to dma_unmap_addr_set are quite unique,
> AFAICT. PTR is a pointer to any struct that has a field (anywhere)
> inside of it called ADDR_NAME, then dma_unmap_addr_set does something
> like:
> 
> PTR->ADDR_NAME = VAL;
> 
> A static inline needs well defined types, and I couldn't figure out
> how to do that (or if it is possible), so a macro it is I guess.
> 
> Where I could, I went with static inline.

Ah dma_unmap_addr_set itself is an ugly define :-( Makes sense.

  reply	other threads:[~2025-02-22  0:35 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-02-20  2:09 [PATCH net-next v4 0/9] Device memory TCP TX Mina Almasry
2025-02-20  2:09 ` [PATCH net-next v4 1/9] net: add get_netmem/put_netmem support Mina Almasry
2025-02-20 19:34   ` Stanislav Fomichev
2025-02-20  2:09 ` [PATCH net-next v4 2/9] net: devmem: TCP tx netlink api Mina Almasry
2025-02-20  2:09 ` [PATCH net-next v4 3/9] net: devmem: Implement TX path Mina Almasry
2025-02-20 21:00   ` Stanislav Fomichev
2025-02-20  2:09 ` [PATCH net-next v4 4/9] net: devmem: make dmabuf unbinding scheduled work Mina Almasry
2025-02-20 21:00   ` Stanislav Fomichev
2025-02-20  2:09 ` [PATCH net-next v4 5/9] net: add devmem TCP TX documentation Mina Almasry
2025-02-20  8:13   ` Bagas Sanjaya
2025-02-20 21:04   ` Stanislav Fomichev
2025-02-20  2:09 ` [PATCH net-next v4 6/9] net: enable driver support for netmem TX Mina Almasry
2025-02-20 19:13   ` Stanislav Fomichev
2025-02-22  0:11     ` Mina Almasry
2025-02-22  0:35       ` Stanislav Fomichev [this message]
2025-02-20  2:09 ` [PATCH net-next v4 7/9] gve: add netmem TX support to GVE DQO-RDA mode Mina Almasry
2025-02-20  2:09 ` [PATCH net-next v4 8/9] net: check for driver support in netmem TX Mina Almasry
2025-02-20 21:05   ` Stanislav Fomichev
2025-02-20  2:09 ` [PATCH net-next v4 9/9] selftests: ncdevmem: Implement devmem TCP TX Mina Almasry
2025-02-20 19:09   ` Stanislav Fomichev
2025-02-20 20:01   ` Stanislav Fomichev
2025-02-22  0:08     ` Mina Almasry
2025-02-22  0:20       ` Stanislav Fomichev
2025-02-22  0:24         ` Mina Almasry

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=Z7kbzJSl_nNUoPnR@mini-arch \
    --to=stfomichev@gmail.com \
    --cc=almasrymina@google.com \
    --cc=andrew+netdev@lunn.ch \
    --cc=asml.silence@gmail.com \
    --cc=corbet@lwn.net \
    --cc=davem@davemloft.net \
    --cc=donald.hunter@gmail.com \
    --cc=dsahern@kernel.org \
    --cc=dw@davidwei.uk \
    --cc=edumazet@google.com \
    --cc=eperezma@redhat.com \
    --cc=horms@kernel.org \
    --cc=jasowang@redhat.com \
    --cc=jeroendb@google.com \
    --cc=jhs@mojatatu.com \
    --cc=kuba@kernel.org \
    --cc=kuniyu@amazon.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=mst@redhat.com \
    --cc=ncardwell@google.com \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=pctammela@mojatatu.com \
    --cc=pkaligineedi@google.com \
    --cc=sdf@fomichev.me \
    --cc=sgarzare@redhat.com \
    --cc=shailend@google.com \
    --cc=shuah@kernel.org \
    --cc=skhawaja@google.com \
    --cc=stefanha@redhat.com \
    --cc=victor@mojatatu.com \
    --cc=virtualization@lists.linux.dev \
    --cc=willemb@google.com \
    --cc=xuanzhuo@linux.alibaba.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.