mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Konstantin Sinyuk <ksinyuk@kernel.org>
To: dri-devel@lists.freedesktop.org
Cc: 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>,
	Rodrigo Vivi <rodrigo.vivi@intel.com>,
	linux-doc@vger.kernel.org, linux-kselftest@vger.kernel.org,
	netdev@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [RFC PATCH 08/12] drm/fabric: add provisioning netlink uAPI
Date: Mon, 24 Aug 2026 11:09:36 +0300	[thread overview]
Message-ID: <2e6631d18a5a05e5a6217ce0b342fb5fedd2ca7d.1787552412.git.ksinyuk@kernel.org> (raw)
In-Reply-To: <cover.1787552412.git.ksinyuk@kernel.org>

From: Ilia Levi <ilia.levi@intel.com>

Extend the YNL specification with six privileged provisioning commands.

FABRIC_NEW and FABRIC_DEL create and delete empty userspace-owned
fabrics; FABRIC_NEW carries a fabric-new-params nest with the type, name
and instance ID. ENDPOINT_SET changes fabric membership and endpoint
administrative state, PORT_SET changes port administrative state, and
PORT_PEER_NEW and PORT_PEER_DEL manage peer adjacency. All six require
GENL_ADMIN_PERM.

A peer request carries its type-qualified identity and far-end port
index. The descriptor is stored without resolving it to a local object,
as documented in Documentation/gpu/drm-fabric.rst.

Add an endpoint-change notification and extend the existing port-change
and peer notifications to cover userspace-requested transitions.

Generate the headers from the tree root with:

  tools/net/ynl/pyynl/ynl_gen_c.py --mode uapi --header \
      --spec Documentation/netlink/specs/drm_fabric.yaml \
      -o include/uapi/drm/drm_fabric.h
  tools/net/ynl/pyynl/ynl_gen_c.py --mode kernel --header \
      --spec Documentation/netlink/specs/drm_fabric.yaml \
      -o drivers/gpu/drm/fabric/drm_fabric_nl.h

The generated source names the six doit handlers, so it lands with their
implementation in the next patch. Drop the temporary administrative-state
definitions now that the generated headers provide them.

Signed-off-by: Ilia Levi <ilia.levi@intel.com>
Co-developed-by: Konstantin Sinyuk <ksinyuk@kernel.org>
Signed-off-by: Konstantin Sinyuk <ksinyuk@kernel.org>
Assisted-by: GitHub-Copilot:claude-opus-4.8
---
 Documentation/gpu/drm-fabric.rst            | 117 ++++++++++++---
 Documentation/netlink/specs/drm_fabric.yaml | 155 +++++++++++++++++++-
 drivers/gpu/drm/fabric/drm_fabric_nl.h      |  30 ++++
 include/drm/drm_fabric.h                    |   9 +-
 include/uapi/drm/drm_fabric.h               |  28 ++++
 5 files changed, 312 insertions(+), 27 deletions(-)

diff --git a/Documentation/gpu/drm-fabric.rst b/Documentation/gpu/drm-fabric.rst
index 61e2c18bf0b5..4ee7cb7ef6ac 100644
--- a/Documentation/gpu/drm-fabric.rst
+++ b/Documentation/gpu/drm-fabric.rst
@@ -87,9 +87,11 @@ switch, an accelerator on another node, or a local endpoint that merely
 unregistered -- so only the provider knows when a port's physical adjacency
 actually changed, and only the provider retracts or replaces the descriptor.
 
-``port-peer-delete-ntf`` reports an explicitly retracted half-edge; it is
-not emitted when a peer merely becomes locally unresolvable, so its absence
-is not evidence the far end is still reachable.
+``port-peer-delete-ntf`` reports an explicitly retracted half-edge -- through
+the provider's own report or, on a userspace-managed port, a userspace
+``port-peer-del`` request -- and is never emitted when a peer merely becomes
+locally unresolvable, so its absence is not evidence the far end is still
+reachable.
 
 Endpoint teardown removes the endpoint's owned half-edges without
 generating a separate event for each port: the delete already describes
@@ -170,9 +172,9 @@ the mutation lock, so the nested acquisition would self-deadlock. A successful
 callback therefore cannot be invalidated before commit, and the post-callback
 checks are invariant assertions only.
 
-A fabric records whether it was created by a provider or by userspace. Only an
-empty userspace-created fabric may be deleted through the provisioning core;
-provider-owned and non-empty fabrics are rejected.
+A fabric records whether it was created by a provider
+(drm_fabric_register()) or by userspace (``fabric-new``); see
+`Provisioning`_ for the deletion rules.
 
 Generic Netlink family
 ======================
@@ -216,8 +218,9 @@ User space enumerates topology with four read-only commands, each supporting a
 single lookup (``do``) and a bulk dump (``dump``):
 
 * ``fabric-get`` -- enumerate fabrics (``do`` by ``fabric-id``, ``dump`` for all).
-* ``endpoint-get`` -- enumerate endpoints, optionally filtered by ``fabric-id``,
-  or resolve one by ``endpoint-id`` or backing ``dev-name``/``bus-name``.
+* ``endpoint-get`` -- enumerate endpoints, optionally filtered by ``fabric-id``
+  (0 selects orphans), or resolve one by ``endpoint-id`` or by its backing
+  ``dev-name`` with an optional ``bus-name``.
 * ``port-get`` -- enumerate ports, filtered by ``endpoint-id``. Ports may report
   the provider's maximum capability as ``max-lane-count`` and
   ``max-lane-signaling-rate-mbps`` (zero means unknown); these are maxima, not
@@ -243,10 +246,10 @@ a partial payload and are declared with ``event:``.
      - Trigger
      - Payload
    * - ``fabric-create-ntf``
-     - a fabric is registered by a provider
+     - a fabric is registered (provider or ``fabric-new``)
      - reuses ``fabric-get``
    * - ``fabric-delete-ntf``
-     - a provider-owned fabric is unregistered
+     - a fabric is unregistered or removed via ``fabric-del``
      - reuses ``fabric-get``
    * - ``endpoint-create-ntf``
      - an endpoint is registered
@@ -254,15 +257,19 @@ a partial payload and are declared with ``event:``.
    * - ``endpoint-delete-ntf``
      - an endpoint is unregistered
      - reuses ``endpoint-get``
+   * - ``endpoint-change-ntf``
+     - an endpoint's fabric attachment or administrative state changes
+     - reuses ``endpoint-get``
    * - ``port-change-ntf``
-     - a port's operational state changes
+     - a port's operational or administrative state changes
      - reuses ``port-get``
    * - ``port-peer-create-ntf``
-     - a port's peer descriptor is set by its provider
+     - a port's peer descriptor is set (provider or ``port-peer-new``)
      - partial (``event:``)
    * - ``port-peer-delete-ntf``
-     - a port's peer descriptor is explicitly unset by its provider; never
-       emitted for an implicit half-edge loss (see `Peer semantics`_)
+     - a port's peer descriptor is explicitly unset (provider or
+       ``port-peer-del``); never emitted for an implicit half-edge loss
+       (see `Peer semantics`_)
      - partial (``event:``)
 
 Notifications are best-effort. A listener that detects loss, restarts, or
@@ -274,9 +281,9 @@ Topology generation and dump consistency
 The core keeps a nonzero generation counter and advances it whenever topology or
 exposed state changes. It is surfaced as the ``topology-generation`` attribute on
 ``fabric-get``, ``endpoint-get`` and ``port-get`` replies and on the topology
-notifications. A provider-reported change advances the generation before its
-notification is serialized, so an event carries the post-change value that a
-later ``get``/``dump`` will also report.
+notifications. A committed change -- provider-reported or userspace mutation
+-- advances the generation before its notification is serialized, so an event
+carries the post-change value that a later ``get``/``dump`` will also report.
 
 ``topology-generation`` is a change token, not a timestamp, liveness counter or
 event count: a changed value means topology changed, but the delta between two
@@ -308,8 +315,8 @@ Monitor notifications are likewise emitted only into ``init_net``, so a listener
 that joins the multicast group from another network namespace never receives
 them.
 
-Examples
-========
+Query examples
+--------------
 
 Query the topology with the in-tree YNL tool, pointing it at the spec:
 
@@ -364,6 +371,78 @@ Query a single port:
 
 The family name on the wire is ``drm-fabric``.
 
+Provisioning
+============
+
+The provisioning interface requires ``CAP_NET_ADMIN``. ``fabric-new`` and
+``fabric-del`` are core-owned; the rest are serviced by the provider and
+return ``-EOPNOTSUPP`` where it does not implement the matching callback:
+
+* ``fabric-new`` -- create an empty, userspace-owned fabric. The request
+  carries a ``fabric-new-params`` nest with the fabric type, an optional name
+  and a provider-defined instance ID.
+* ``fabric-del`` -- delete an empty, userspace-owned fabric. Refuses a
+  provider-owned fabric (``-EPERM``) and a non-empty one (``-EBUSY``).
+* ``endpoint-set`` -- attach an orphan endpoint, selected by ``endpoint-id`` or
+  by its backing ``dev-name`` with an optional ``bus-name``, to a fabric;
+  detach it with ``fabric-id`` 0; and/or set its administrative state.
+* ``port-set`` -- set a port's administrative state.
+* ``port-peer-new`` / ``port-peer-del`` -- set or unset a port's neighbor
+  half-edge. Valid only on a userspace-managed port; a provider-managed port
+  returns ``-EOPNOTSUPP`` (see `Peer management mode`_).
+
+Mutation commands carry ``GENL_ADMIN_PERM`` and are additionally confined to
+``init_net``. ``GENL_ADMIN_PERM`` only checks ``CAP_NET_ADMIN`` in the caller's
+user namespace, which a process in a nested user and network namespace may
+hold; restricting mutators to ``init_net`` prevents container-local privilege
+from reconfiguring host-global topology.
+
+A userspace-created fabric additionally pins this module for as long as it
+remains registered: ``fabric-new`` takes the pin, ``fabric-del`` releases it.
+
+Peer management mode
+--------------------
+
+A port uses one peer-management mode, fixed by the provider at registration.
+
+In provider-managed mode, the provider reports peer creation and removal
+(drm_fabric_port_set_peer() / drm_fabric_port_unset_peer()) and userspace peer
+provisioning is unsupported (``port-peer-new`` / ``port-peer-del`` return
+``-EOPNOTSUPP``).
+
+In userspace-managed mode, peer creation and removal are requested through the
+provisioning API and the provider does not independently replace or retract the
+peer (drm_fabric_port_set_peer() / drm_fabric_port_unset_peer() return
+``-EOPNOTSUPP``).
+
+One authority per descriptor prevents concurrent updates from both sources.
+Setting an occupied port returns ``-EEXIST``; unsetting an empty port returns
+``-ENOENT``.
+
+Provisioning examples
+---------------------
+
+Provision with the in-tree YNL tool (root, initial namespace):
+
+.. code-block:: bash
+
+    # Create an empty fabric
+    ./tools/net/ynl/pyynl/cli.py \
+        --spec Documentation/netlink/specs/drm_fabric.yaml \
+        --do fabric-new \
+        --json '{"fabric-new-params": {"type": "synthetic", "instance-id": 42}}'
+
+The command returns a core-assigned ``fabric-id``. Use that value in the
+following requests.
+
+.. code-block:: bash
+
+    # Attach an orphan endpoint to the returned fabric
+    ./tools/net/ynl/pyynl/cli.py \
+        --spec Documentation/netlink/specs/drm_fabric.yaml \
+        --do endpoint-set \
+        --json '{"endpoint-id": 5, "fabric-id": <returned-fabric-id>}'
+
 Synthetic provider
 ==================
 
diff --git a/Documentation/netlink/specs/drm_fabric.yaml b/Documentation/netlink/specs/drm_fabric.yaml
index 778443d92a0d..0c9a56f4b387 100644
--- a/Documentation/netlink/specs/drm_fabric.yaml
+++ b/Documentation/netlink/specs/drm_fabric.yaml
@@ -18,6 +18,16 @@ doc: |
   Replies and notifications carry a topology-generation token so an
   interrupted or changed dump can be discarded and retried.
 
+  The provisioning surface (fabric-new, fabric-del, endpoint-set, port-set,
+  port-peer-new and port-peer-del) requires administrative permission and is
+  restricted to the initial network namespace. fabric-new and fabric-del are
+  implemented by the core and do not depend on a provider callback. The rest
+  are serviced by the provider and return -EOPNOTSUPP where it does not
+  implement the matching one.
+
+  The interface is extensible: new fabric types and attributes can be added
+  without breaking the uAPI.
+
 definitions:
   -
     name: type
@@ -46,6 +56,13 @@ definitions:
     doc: Kind of device directly adjacent at a port's far end.
     entries: [accel, switch]
 
+  -
+    name: admin-state
+    type: enum
+    value-start: 1
+    doc: Administrative (requested) state of an endpoint or port.
+    entries: [down, up]
+
 attribute-sets:
   -
     name: drm-fabric
@@ -108,6 +125,17 @@ attribute-sets:
           or DUMP reply carries its snapshot's generation; a notification
           carries the generation of its change. Statistics reads do not
           advance it.
+      # Provisioning request parameters
+      -
+        name: admin-state
+        type: u32
+        enum: admin-state
+        doc: Requested administrative state.
+      -
+        name: fabric-new-params
+        type: nest
+        nested-attributes: fabric-new-params
+        doc: Creation parameters for ``fabric-new`` (full nest).
 
   -
     name: fabric
@@ -136,6 +164,30 @@ attribute-sets:
         type: u64
         doc: Vendor-unique fabric instance identifier (e.g. a hive ID).
 
+  -
+    name: fabric-new-params
+    name-prefix: drm-fabric-a-fabric-new-params-
+    enum-name: drm-fabric-a-fabric-new-params
+    doc: Creation parameters carried by a ``fabric-new`` request.
+    attributes:
+      -
+        name: type
+        type: u32
+        enum: type
+        doc: Fabric interconnect technology, see enum type.
+      -
+        name: name
+        type: string
+        checks:
+          max-len: 31
+        doc: >-
+          Human-readable fabric name. Bounded to the core's storage so an
+          over-long name is rejected rather than silently truncated.
+      -
+        name: instance-id
+        type: u64
+        doc: Vendor-unique fabric instance identifier (e.g. a hive ID).
+
   -
     name: endpoint
     name-prefix: drm-fabric-a-endpoint-attrs-
@@ -152,7 +204,7 @@ attribute-sets:
       -
         name: fabric-id
         type: u32
-        doc: Identifier of the parent fabric.
+        doc: Identifier of the parent fabric, 0 while orphaned.
       -
         name: fabric-ep-id
         type: u64
@@ -169,6 +221,11 @@ attribute-sets:
         name: bus-name
         type: string
         doc: The bus of the backing device (e.g. pci).
+      -
+        name: admin-state
+        type: u32
+        enum: admin-state
+        doc: Endpoint's administrative state.
 
   -
     name: port
@@ -209,6 +266,11 @@ attribute-sets:
         type: nest
         nested-attributes: peer
         doc: Peer info, absent if the port has no neighbor set.
+      -
+        name: admin-state
+        type: u32
+        enum: admin-state
+        doc: Port's administrative state.
 
   -
     name: peer
@@ -421,6 +483,97 @@ operations:
         reply shape (full fabric nest).
       notify: fabric-get
 
+    -
+      name: endpoint-change-ntf
+      doc: |
+        Endpoint state change notification.
+        Reuses the endpoint-get reply shape (full endpoint nest).
+      notify: endpoint-get
+
+    -
+      name: fabric-new
+      doc: Create a new empty fabric
+      attribute-set: drm-fabric
+      flags: [admin-perm]
+      do:
+        pre: drm-fabric-nl-pre-doit
+        post: drm-fabric-nl-post-doit
+        request:
+          attributes:
+            - fabric-new-params
+        reply:
+          attributes:
+            - fabric-id
+
+    -
+      name: fabric-del
+      doc: Delete an empty fabric
+      attribute-set: drm-fabric
+      flags: [admin-perm]
+      do:
+        pre: drm-fabric-nl-pre-doit
+        post: drm-fabric-nl-post-doit
+        request:
+          attributes:
+            - fabric-id
+
+    -
+      name: endpoint-set
+      doc: Attach/detach an endpoint to a fabric and/or set its admin state
+      attribute-set: drm-fabric
+      flags: [admin-perm]
+      do:
+        pre: drm-fabric-nl-endpoint-pre-doit
+        post: drm-fabric-nl-endpoint-post-doit
+        request:
+          attributes:
+            - endpoint-id
+            - dev-name
+            - bus-name
+            - fabric-id
+            - admin-state
+
+    -
+      name: port-set
+      doc: Set a port's administrative state
+      attribute-set: drm-fabric
+      flags: [admin-perm]
+      do:
+        pre: drm-fabric-nl-port-pre-doit
+        post: drm-fabric-nl-port-post-doit
+        request:
+          attributes:
+            - endpoint-id
+            - port-index
+            - admin-state
+
+    -
+      name: port-peer-new
+      doc: Set a port's neighbor
+      attribute-set: drm-fabric
+      flags: [admin-perm]
+      do:
+        pre: drm-fabric-nl-port-pre-doit
+        post: drm-fabric-nl-port-post-doit
+        request:
+          attributes:
+            - endpoint-id
+            - port-index
+            - peer
+
+    -
+      name: port-peer-del
+      doc: Unset a port's neighbor
+      attribute-set: drm-fabric
+      flags: [admin-perm]
+      do:
+        pre: drm-fabric-nl-port-pre-doit
+        post: drm-fabric-nl-port-post-doit
+        request:
+          attributes:
+            - endpoint-id
+            - port-index
+
 mcast-groups:
   list:
     -
diff --git a/drivers/gpu/drm/fabric/drm_fabric_nl.h b/drivers/gpu/drm/fabric/drm_fabric_nl.h
index 8cedc004260f..03b3d22f180c 100644
--- a/drivers/gpu/drm/fabric/drm_fabric_nl.h
+++ b/drivers/gpu/drm/fabric/drm_fabric_nl.h
@@ -12,6 +12,27 @@
 
 #include <uapi/drm/drm_fabric.h>
 
+/* Common nested types */
+extern const struct nla_policy drm_fabric_fabric_new_params_nl_policy[DRM_FABRIC_A_FABRIC_NEW_PARAMS_INSTANCE_ID + 1];
+extern const struct nla_policy drm_fabric_peer_nl_policy[DRM_FABRIC_A_PEER_ATTRS_PORT_INDEX + 1];
+
+int drm_fabric_nl_pre_doit(const struct genl_split_ops *ops,
+			   struct sk_buff *skb, struct genl_info *info);
+int drm_fabric_nl_endpoint_pre_doit(const struct genl_split_ops *ops,
+				    struct sk_buff *skb,
+				    struct genl_info *info);
+int drm_fabric_nl_port_pre_doit(const struct genl_split_ops *ops,
+				struct sk_buff *skb, struct genl_info *info);
+void
+drm_fabric_nl_post_doit(const struct genl_split_ops *ops, struct sk_buff *skb,
+			struct genl_info *info);
+void
+drm_fabric_nl_endpoint_post_doit(const struct genl_split_ops *ops,
+				 struct sk_buff *skb, struct genl_info *info);
+void
+drm_fabric_nl_port_post_doit(const struct genl_split_ops *ops,
+			     struct sk_buff *skb, struct genl_info *info);
+
 int drm_fabric_nl_fabric_get_doit(struct sk_buff *skb, struct genl_info *info);
 int drm_fabric_nl_fabric_get_dumpit(struct sk_buff *skb,
 				    struct netlink_callback *cb);
@@ -26,6 +47,15 @@ int drm_fabric_nl_port_stats_get_doit(struct sk_buff *skb,
 				      struct genl_info *info);
 int drm_fabric_nl_port_stats_get_dumpit(struct sk_buff *skb,
 					struct netlink_callback *cb);
+int drm_fabric_nl_fabric_new_doit(struct sk_buff *skb, struct genl_info *info);
+int drm_fabric_nl_fabric_del_doit(struct sk_buff *skb, struct genl_info *info);
+int drm_fabric_nl_endpoint_set_doit(struct sk_buff *skb,
+				    struct genl_info *info);
+int drm_fabric_nl_port_set_doit(struct sk_buff *skb, struct genl_info *info);
+int drm_fabric_nl_port_peer_new_doit(struct sk_buff *skb,
+				     struct genl_info *info);
+int drm_fabric_nl_port_peer_del_doit(struct sk_buff *skb,
+				     struct genl_info *info);
 
 enum {
 	DRM_FABRIC_NLGRP_MONITOR,
diff --git a/include/drm/drm_fabric.h b/include/drm/drm_fabric.h
index 69e9099a1e57..0479b6435a0e 100644
--- a/include/drm/drm_fabric.h
+++ b/include/drm/drm_fabric.h
@@ -4,8 +4,8 @@
  */
 
 /*
- * DRM Fabric driver API: common object model for GPU interconnect topology
- * (fabric, endpoint, port and peer relationships).
+ * Common object model for GPU interconnect topology: fabric, endpoint, port
+ * and peer relationships.
  */
 
 #ifndef __DRM_FABRIC_H__
@@ -18,11 +18,6 @@
 
 #include <uapi/drm/drm_fabric.h>
 
-enum drm_fabric_admin_state {
-	DRM_FABRIC_ADMIN_STATE_DOWN = 1,
-	DRM_FABRIC_ADMIN_STATE_UP,
-};
-
 struct device;
 
 /**
diff --git a/include/uapi/drm/drm_fabric.h b/include/uapi/drm/drm_fabric.h
index b6c7bd6e35f0..e004200423e8 100644
--- a/include/uapi/drm/drm_fabric.h
+++ b/include/uapi/drm/drm_fabric.h
@@ -36,6 +36,14 @@ enum drm_fabric_peer_type {
 	DRM_FABRIC_PEER_TYPE_SWITCH,
 };
 
+/*
+ * Administrative (requested) state of an endpoint or port.
+ */
+enum drm_fabric_admin_state {
+	DRM_FABRIC_ADMIN_STATE_DOWN = 1,
+	DRM_FABRIC_ADMIN_STATE_UP,
+};
+
 enum drm_fabric_a {
 	DRM_FABRIC_A_FABRIC = 1,
 	DRM_FABRIC_A_ENDPOINT,
@@ -48,6 +56,8 @@ enum drm_fabric_a {
 	DRM_FABRIC_A_BUS_NAME,
 	DRM_FABRIC_A_PEER,
 	DRM_FABRIC_A_TOPOLOGY_GENERATION,
+	DRM_FABRIC_A_ADMIN_STATE,
+	DRM_FABRIC_A_FABRIC_NEW_PARAMS,
 
 	__DRM_FABRIC_A_MAX,
 	DRM_FABRIC_A_MAX = (__DRM_FABRIC_A_MAX - 1)
@@ -64,6 +74,15 @@ enum drm_fabric_a_fabric_attrs {
 	DRM_FABRIC_A_FABRIC_ATTRS_MAX = (__DRM_FABRIC_A_FABRIC_ATTRS_MAX - 1)
 };
 
+enum drm_fabric_a_fabric_new_params {
+	DRM_FABRIC_A_FABRIC_NEW_PARAMS_TYPE = 1,
+	DRM_FABRIC_A_FABRIC_NEW_PARAMS_NAME,
+	DRM_FABRIC_A_FABRIC_NEW_PARAMS_INSTANCE_ID,
+
+	__DRM_FABRIC_A_FABRIC_NEW_PARAMS_MAX,
+	DRM_FABRIC_A_FABRIC_NEW_PARAMS_MAX = (__DRM_FABRIC_A_FABRIC_NEW_PARAMS_MAX - 1)
+};
+
 enum drm_fabric_a_endpoint_attrs {
 	DRM_FABRIC_A_ENDPOINT_ATTRS_PAD = 1,
 	DRM_FABRIC_A_ENDPOINT_ATTRS_ENDPOINT_ID,
@@ -72,6 +91,7 @@ enum drm_fabric_a_endpoint_attrs {
 	DRM_FABRIC_A_ENDPOINT_ATTRS_NAME,
 	DRM_FABRIC_A_ENDPOINT_ATTRS_DEV_NAME,
 	DRM_FABRIC_A_ENDPOINT_ATTRS_BUS_NAME,
+	DRM_FABRIC_A_ENDPOINT_ATTRS_ADMIN_STATE,
 
 	__DRM_FABRIC_A_ENDPOINT_ATTRS_MAX,
 	DRM_FABRIC_A_ENDPOINT_ATTRS_MAX = (__DRM_FABRIC_A_ENDPOINT_ATTRS_MAX - 1)
@@ -84,6 +104,7 @@ enum drm_fabric_a_port_attrs {
 	DRM_FABRIC_A_PORT_ATTRS_MAX_LANE_COUNT,
 	DRM_FABRIC_A_PORT_ATTRS_MAX_LANE_SIGNALING_RATE_MBPS,
 	DRM_FABRIC_A_PORT_ATTRS_PEER,
+	DRM_FABRIC_A_PORT_ATTRS_ADMIN_STATE,
 
 	__DRM_FABRIC_A_PORT_ATTRS_MAX,
 	DRM_FABRIC_A_PORT_ATTRS_MAX = (__DRM_FABRIC_A_PORT_ATTRS_MAX - 1)
@@ -124,6 +145,13 @@ enum drm_fabric_cmd {
 	DRM_FABRIC_CMD_ENDPOINT_DELETE_NTF,
 	DRM_FABRIC_CMD_FABRIC_CREATE_NTF,
 	DRM_FABRIC_CMD_FABRIC_DELETE_NTF,
+	DRM_FABRIC_CMD_ENDPOINT_CHANGE_NTF,
+	DRM_FABRIC_CMD_FABRIC_NEW,
+	DRM_FABRIC_CMD_FABRIC_DEL,
+	DRM_FABRIC_CMD_ENDPOINT_SET,
+	DRM_FABRIC_CMD_PORT_SET,
+	DRM_FABRIC_CMD_PORT_PEER_NEW,
+	DRM_FABRIC_CMD_PORT_PEER_DEL,
 
 	__DRM_FABRIC_CMD_MAX,
 	DRM_FABRIC_CMD_MAX = (__DRM_FABRIC_CMD_MAX - 1)
-- 
2.43.0


  parent reply	other threads:[~2026-08-24  8:10 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-24  8:09 [RFC PATCH 0/12] drm/fabric: vendor-neutral topology infrastructure for scale-up accelerator interconnects 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 ` Konstantin Sinyuk [this message]
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

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=2e6631d18a5a05e5a6217ce0b342fb5fedd2ca7d.1787552412.git.ksinyuk@kernel.org \
    --to=ksinyuk@kernel.org \
    --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=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=rodrigo.vivi@intel.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®