From: Rodrigo Vivi <rodrigo.vivi@intel.com>
To: Jiri Pirko <jiri@resnulli.us>
Cc: Konstantin Sinyuk <ksinyuk@kernel.org>,
<dri-devel@lists.freedesktop.org>,
Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
Francois Dugast <francois.dugast@intel.com>,
David Airlie <airlied@gmail.com>, Simona Vetter <simona@ffwll.ch>,
Maxime Ripard <mripard@kernel.org>,
Thomas Zimmermann <tzimmermann@suse.de>,
Jonathan Corbet <corbet@lwn.net>,
Shuah Khan <skhan@linuxfoundation.org>,
Donald Hunter <donald.hunter@gmail.com>,
"Jakub Kicinski" <kuba@kernel.org>,
"David S. Miller" <davem@davemloft.net>,
"Eric Dumazet" <edumazet@google.com>,
Paolo Abeni <pabeni@redhat.com>, Simon Horman <horms@kernel.org>,
Ilia Levi <ilia.levi@intel.com>, <linux-doc@vger.kernel.org>,
<linux-kselftest@vger.kernel.org>, <netdev@vger.kernel.org>,
<linux-kernel@vger.kernel.org>, <jhs@mojatatu.com>,
<jgg@nvidia.com>
Subject: Re: [RFC PATCH 0/12] drm/fabric: vendor-neutral topology infrastructure for scale-up accelerator interconnects
Date: Fri, 28 Aug 2026 12:28:10 -0400 [thread overview]
Message-ID: <apG3Gsk1TeMD-oCc@intel.com> (raw)
In-Reply-To: <apAsfOowcG0cTvT8@FV6GYCPJ69>
On Thu, Aug 27, 2026 at 02:35:16PM +0200, Jiri Pirko wrote:
> Mon, Aug 24, 2026 at 10:09:28AM +0200, ksinyuk@kernel.org wrote:
>
> [..]
>
> >Example queries using the in-tree YNL tool are:
> >
> > $ ./tools/net/ynl/pyynl/cli.py \
> > --spec Documentation/netlink/specs/drm_fabric.yaml \
> > --dump fabric-get
> > $ ./tools/net/ynl/pyynl/cli.py \
> > --spec Documentation/netlink/specs/drm_fabric.yaml \
> > --dump endpoint-get --json '{"fabric-id": <id>}'
> > $ ./tools/net/ynl/pyynl/cli.py \
> > --spec Documentation/netlink/specs/drm_fabric.yaml \
> > --do port-get --json '{"endpoint-id": <id>, "port-index": 0}'
>
> Using generic netlink instead of sysfs for this makes a lot of sense,
> but it may be a bit odd to use it outside the networking area.
> I've been struggling with the same in another non-networking use-case
> as well.
Please notice that this bubble was already broken. Netlink design
always had the dream to replace ioctl everywhere. And there are already
other usage in place that are not network related.
In our case we use the netlink API for GPU RAS error reporting: drm-ras.
Also there are other usages in netlink spec that apparently has nothing
to do with networking, like energy...
And in this particular case here, the drm-fabric is a 'network' of
GPU memory... At some point we even wondered if net/ was the right
place for this common API....
> I have been building a framework that keeps the benefits of
> generic netlink, extends it and is fd-based.
> I call it CTLV, here's a link to an early pre-RFC draft:
>
> https://github.com/jpirko/linux_mlxsw/commits/wip_ctlv_pre_rfc_draft1/
>
> What are the benefits over generic netlink:
>
> - No networking in the dependency chain. No netlink sockets,
> no CAP_NET_ADMIN, and no network namespace semantics to reason about
> for a device that has none.
>
> - One character device per registered instance, not one global family.
> Access control is the file: udev rules, ACLs, an fd passed into
> a container. The open mode decides what is allowed - actions need
> write, queries need read - so there is no permission model
> to reinvent per family.
>
> - Events per open file description, not a multicast group.
> Each descriptor has its own subscriptions and queue, and an overflow
> is reported in-band: the next read returns an event-overflow record
> naming the first and last sequence lost and how many.
>
> - Large payloads are referenced, not copied. A blob attribute carries
> a user VA, a memfd and offset, or a dma-buf fd. Nothing big travels
> through the message.
>
> - One YAML specification, everything generated from it: kernel metadata,
> UAPI headers, userspace bindings and the reference documentation.
> Introspectio. is answered out of the same metadata the validator
> enforces, so a device cannot advertise an operation it will refuse.
> A checked-in ABI snapshot makes any wire change a reviewable diff.
>
> - Family inheritance. A family inherits another's operations and fills
> declared extension points. The effective schema is resolved per
> device and the chain is exposed to user. A shared core with
> per-driver extensions is declared once, and both attributes and
> operations can be extended.
>
> - Introspection is per-device and live. The framework answers three
> queries on every device: the family chain, one entry per published
> operation, and any operation's full attribute tree with its bounds
> and limits.
>
> The answer is what this device accepts right now, including what
> a vendor extension added to an inherited operation and whether an op
> is currently disabled, and op-changed events carry the generation
> ops-dump reports, so a dump can be ordered against a change.
> GETFAMILY and GETPOLICY describe a family statically - there is
> no device in that model to ask.
>
> - Fragmented queries are built in, with a consistency check.
> A continuation carries the generation it started from, and if
> the answer changed underneath it is refused with ESTALE,
> reporting the expected and the current generation instead of
> reassembling a torn reply.
>
> - Attributes are 8-byte aligned. CTLV_ALIGNTO is 8, so
> a 64-bit payload is naturally aligned and there is no per-family
> padding to remember - netlink's 4-byte alignment is why
> nla_put_64bit() needs an explicit NOP pad attribute.
>
> - Cheaper round trip. A one-attribute query measured 2.6x cheaper
> than a genetlink one in the same guest - a debug kernel.
>
> - Async operations using io_uring are planned as a follow-up extension.
>
> The framework owns validation, schema resolution, blob acquisition,
> reply serialization and the event queues. All getters and putters
> are generated helpers. A family implements semantics only, and
> the aim is to make that hard to get wrong.
>
> Would this make sense to use for you?
>
> [..]
next prev parent reply other threads:[~2026-08-28 16:28 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-24 8:09 Konstantin Sinyuk
2026-08-24 8:09 ` [RFC PATCH 01/12] drm/fabric: add core object model and provider API Konstantin Sinyuk
2026-08-24 8:09 ` [RFC PATCH 02/12] drm/fabric: add query uAPI and generated headers Konstantin Sinyuk
2026-08-24 8:09 ` [RFC PATCH 03/12] drm/fabric: implement query netlink operations Konstantin Sinyuk
2026-08-24 8:09 ` [RFC PATCH 04/12] drm/fabric: add read-only synthetic provider Konstantin Sinyuk
2026-08-24 8:09 ` [RFC PATCH 05/12] drm/fabric: add object-model KUnit tests Konstantin Sinyuk
2026-08-24 8:09 ` [RFC PATCH 06/12] drm/fabric: add YNL query and policy selftests Konstantin Sinyuk
2026-08-24 8:09 ` [RFC PATCH 07/12] drm/fabric: add topology-provisioning core Konstantin Sinyuk
2026-08-24 8:09 ` [RFC PATCH 08/12] drm/fabric: add provisioning netlink uAPI Konstantin Sinyuk
2026-08-24 8:09 ` [RFC PATCH 09/12] drm/fabric: implement mutation netlink operations Konstantin Sinyuk
2026-08-24 8:09 ` [RFC PATCH 10/12] drm/fabric: make the synthetic provider writable Konstantin Sinyuk
2026-08-24 8:09 ` [RFC PATCH 11/12] drm/fabric: add mutation KUnit tests Konstantin Sinyuk
2026-08-24 8:09 ` [RFC PATCH 12/12] drm/fabric: add mutation netlink selftests Konstantin Sinyuk
2026-08-26 9:32 ` [RFC PATCH 0/12] drm/fabric: vendor-neutral topology infrastructure for scale-up accelerator interconnects Leon Romanovsky
2026-08-26 15:38 ` Konstantin Sinyuk
2026-08-27 17:09 ` Leon Romanovsky
2026-08-28 16:13 ` Rodrigo Vivi
2026-08-27 12:35 ` Jiri Pirko
2026-08-28 16:28 ` Rodrigo Vivi [this message]
2026-08-28 17:03 ` Jason Gunthorpe
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=apG3Gsk1TeMD-oCc@intel.com \
--to=rodrigo.vivi@intel.com \
--cc=airlied@gmail.com \
--cc=corbet@lwn.net \
--cc=davem@davemloft.net \
--cc=donald.hunter@gmail.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=edumazet@google.com \
--cc=francois.dugast@intel.com \
--cc=horms@kernel.org \
--cc=ilia.levi@intel.com \
--cc=jgg@nvidia.com \
--cc=jhs@mojatatu.com \
--cc=jiri@resnulli.us \
--cc=ksinyuk@kernel.org \
--cc=kuba@kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=maarten.lankhorst@linux.intel.com \
--cc=mripard@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=simona@ffwll.ch \
--cc=skhan@linuxfoundation.org \
--cc=tzimmermann@suse.de \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®