Rust for Linux List
 help / color / mirror / Atom feed
* [PATCH 0/3] drm/nova: make unstable uAPI use explicit
@ 2026-10-19 21:24 Danilo Krummrich
  2026-10-19 21:24 ` [PATCH 1/3] drm/nova: mark the uAPI header as unstable Danilo Krummrich
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Danilo Krummrich @ 2026-10-19 21:24 UTC (permalink / raw)
  To: dakr, aliceryhl, airlied, simona, ojeda, boqun, gary, bjorn3_gh,
	lossin, a.hindborg, tmgross, daniel.almeida, tamird, acourbot,
	work, jhubbard, apopple, ecourtney, lyude, kherbst
  Cc: nova-gpu, dri-devel, rust-for-linux

Nova and its uAPI are under active upstream development. We want to develop
these interfaces upstream while making clear that they are not yet stable and
may change incompatibly.

This series makes that status more explicit and requires users to acknowledge it
before enabling the driver, tainting the kernel when they do.

Introduce a minimal Rust abstraction for kernel tainting in order to support
this.

As individual interfaces stabilize, they should move from nova_drm_unstable.h to
the stable nova_drm.h header. Once all interfaces have moved and all
stakeholders agree that the uAPI is stable, the acknowledgment requirement and
kernel tainting can be removed.

(Compile-tested only, as I'm currently travelling.)

Danilo Krummrich (3):
  drm/nova: mark the uAPI header as unstable
  rust: add kernel taint abstraction
  drm/nova: require explicit opt-in to unstable uAPI

 drivers/gpu/drm/nova/Kconfig             |  11 +-
 drivers/gpu/drm/nova/nova.rs             |  55 +++++-
 drivers/gpu/drm/nova/nova_drm_unstable.h | 212 +++++++++++++++++++++++
 include/uapi/drm/nova_drm.h              | 204 +---------------------
 rust/bindings/bindings_helper.h          |   1 +
 rust/kernel/lib.rs                       |   1 +
 rust/kernel/panic.rs                     |  50 ++++++
 rust/uapi/uapi_helper.h                  |   2 +
 8 files changed, 332 insertions(+), 204 deletions(-)
 create mode 100644 drivers/gpu/drm/nova/nova_drm_unstable.h
 create mode 100644 rust/kernel/panic.rs


base-commit: 3497a403264b094ebd61b8b755165d56e7d9dc37
-- 
2.56.0


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH 1/3] drm/nova: mark the uAPI header as unstable
  2026-10-19 21:24 [PATCH 0/3] drm/nova: make unstable uAPI use explicit Danilo Krummrich
@ 2026-10-19 21:24 ` Danilo Krummrich
  2026-10-19 22:08   ` Faith Ekstrand
  2026-10-19 21:24 ` [PATCH 2/3] rust: add kernel taint abstraction Danilo Krummrich
  2026-10-19 21:24 ` [PATCH 3/3] drm/nova: require explicit opt-in to unstable uAPI Danilo Krummrich
  2 siblings, 1 reply; 5+ messages in thread
From: Danilo Krummrich @ 2026-10-19 21:24 UTC (permalink / raw)
  To: dakr, aliceryhl, airlied, simona, ojeda, boqun, gary, bjorn3_gh,
	lossin, a.hindborg, tmgross, daniel.almeida, tamird, acourbot,
	work, jhubbard, apopple, ecourtney, lyude, kherbst
  Cc: nova-gpu, dri-devel, rust-for-linux

The header already documents that its uAPI is unstable and intended for
development. It may change incompatibly as it is developed upstream.
Rename it to nova_drm_unstable.h and move it out of include/uapi/ to
make this more explicit.

As individual interfaces become stable, move them to
include/uapi/drm/nova_drm.h.

Signed-off-by: Danilo Krummrich <dakr@kernel.org>
---
 drivers/gpu/drm/nova/nova_drm_unstable.h | 212 +++++++++++++++++++++++
 include/uapi/drm/nova_drm.h              | 204 +---------------------
 rust/uapi/uapi_helper.h                  |   2 +
 3 files changed, 217 insertions(+), 201 deletions(-)
 create mode 100644 drivers/gpu/drm/nova/nova_drm_unstable.h

diff --git a/drivers/gpu/drm/nova/nova_drm_unstable.h b/drivers/gpu/drm/nova/nova_drm_unstable.h
new file mode 100644
index 000000000000..3577dede15a6
--- /dev/null
+++ b/drivers/gpu/drm/nova/nova_drm_unstable.h
@@ -0,0 +1,212 @@
+/* SPDX-License-Identifier: MIT */
+
+#ifndef __NOVA_DRM_UNSTABLE_H__
+#define __NOVA_DRM_UNSTABLE_H__
+
+#include <drm/drm.h>
+
+/* DISCLAIMER: Do not use, this is not a stable uAPI.
+ *
+ * This uAPI serves only testing purposes as long as this driver is still in
+ * development. It is required to implement and test infrastructure which is
+ * upstreamed in the context of this driver. See also [1].
+ *
+ * The uAPI in this file may change incompatibly. Stable interfaces should
+ * be moved to include/uapi/drm/nova_drm.h.
+ *
+ * [1] https://lore.kernel.org/dri-devel/Zfsj0_tb-0-tNrJy@cassiopeiae/
+ */
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+/**
+ * enum drm_nova_architecture - GPU architecture identifier
+ */
+enum drm_nova_architecture {
+	NOVA_DRM_ARCHITECTURE_TURING		= 0x16,
+	NOVA_DRM_ARCHITECTURE_AMPERE		= 0x17,
+	NOVA_DRM_ARCHITECTURE_HOPPER		= 0x18,
+	NOVA_DRM_ARCHITECTURE_ADA		= 0x19,
+	NOVA_DRM_ARCHITECTURE_BLACKWELL_GB10X	= 0x1a,
+	NOVA_DRM_ARCHITECTURE_BLACKWELL_GB20X	= 0x1b,
+};
+
+/**
+ * enum drm_nova_chipid - opaque GPU chip identifier
+ *
+ * These values identify the chip a GPU is based on. They are otherwise
+ * opaque: userspace must not assume the values carry any particular meaning
+ * or encoding, only that they may be compared against this enum.
+ */
+enum drm_nova_chipid {
+	/* Turing */
+	NOVA_DRM_CHIPID_TU102			= 0x162,
+	NOVA_DRM_CHIPID_TU104			= 0x164,
+	NOVA_DRM_CHIPID_TU106			= 0x166,
+	NOVA_DRM_CHIPID_TU117			= 0x167,
+	NOVA_DRM_CHIPID_TU116			= 0x168,
+	/* Ampere */
+	NOVA_DRM_CHIPID_GA100			= 0x170,
+	NOVA_DRM_CHIPID_GA102			= 0x172,
+	NOVA_DRM_CHIPID_GA103			= 0x173,
+	NOVA_DRM_CHIPID_GA104			= 0x174,
+	NOVA_DRM_CHIPID_GA106			= 0x176,
+	NOVA_DRM_CHIPID_GA107			= 0x177,
+	/* Hopper */
+	NOVA_DRM_CHIPID_GH100			= 0x180,
+	/* Ada */
+	NOVA_DRM_CHIPID_AD102			= 0x192,
+	NOVA_DRM_CHIPID_AD103			= 0x193,
+	NOVA_DRM_CHIPID_AD104			= 0x194,
+	NOVA_DRM_CHIPID_AD106			= 0x196,
+	NOVA_DRM_CHIPID_AD107			= 0x197,
+	/* Blackwell GB10x */
+	NOVA_DRM_CHIPID_GB100			= 0x1a0,
+	NOVA_DRM_CHIPID_GB102			= 0x1a2,
+	/* Blackwell GB20x */
+	NOVA_DRM_CHIPID_GB202			= 0x1b2,
+	NOVA_DRM_CHIPID_GB203			= 0x1b3,
+	NOVA_DRM_CHIPID_GB205			= 0x1b5,
+	NOVA_DRM_CHIPID_GB206			= 0x1b6,
+	NOVA_DRM_CHIPID_GB207			= 0x1b7,
+};
+
+/**
+ * struct drm_nova_gem_create - create a new DRM GEM object
+ */
+struct drm_nova_gem_create {
+	/**
+	 * @handle: The handle of the new DRM GEM object.
+	 */
+	__u32 handle;
+
+	/**
+	 * @pad: 32 bit padding, should be 0.
+	 */
+	__u32 pad;
+
+	/**
+	 * @size: The size of the new DRM GEM object.
+	 */
+	__u64 size;
+};
+
+/**
+ * struct drm_nova_gem_info - query DRM GEM object metadata
+ */
+struct drm_nova_gem_info {
+	/**
+	 * @handle: The handle of the DRM GEM object to query.
+	 */
+	__u32 handle;
+
+	/**
+	 * @pad: 32 bit padding, should be 0.
+	 */
+	__u32 pad;
+
+	/**
+	 * @size: The size of the DRM GEM object.
+	 */
+	__u64 size;
+};
+
+/**
+ * struct drm_nova_info - query device information
+ */
+struct drm_nova_info {
+	/**
+	 * @id: The identifier of the information to query.
+	 */
+	__u32 id;
+
+	/**
+	 * @size: The amount of space allocated by userspace at @data. The kernel
+	 * will return the number of bytes it wrote, or the size of the queried
+	 * information structure if @data is NULL.
+	 */
+	__u32 size;
+
+	/**
+	 * @data: Pointer to the userspace buffer into which the queried
+	 * information will be written. May be NULL, in which case nothing is
+	 * written and @size is set to the size of the information structure so
+	 * userspace can allocate a suitably sized buffer.
+	 */
+	__u64 data;
+};
+
+/**
+ * DRM_NOVA_INFO_GPU
+ *
+ * Query GPU information. The result is returned in a
+ * &struct drm_nova_info_gpu.
+ */
+#define DRM_NOVA_INFO_GPU		0x00
+
+/**
+ * struct drm_nova_info_gpu - GPU information
+ */
+struct drm_nova_info_gpu {
+	/**
+	 * @architecture: GPU architecture identifier.
+	 *
+	 * See &enum drm_nova_architecture for currently known architectures.
+	 */
+	__u32 architecture;
+
+	/**
+	 * @chipid: Opaque GPU chip identifier.
+	 *
+	 * See &enum drm_nova_chipid for currently known chips.
+	 */
+	__u32 chipid;
+
+	/**
+	 * @vram_size: Amount of usable FB, excluding GSP carveouts and protected
+	 * regions.
+	 */
+	__u64 vram_size;
+
+	/**
+	 * @vram_bar_size: Size of the PCI BAR aperture used to access VRAM, in bytes.
+	 */
+	__u64 vram_bar_size;
+
+	/**
+	 * @gpu_name: NUL-terminated full GPU name.
+	 */
+	__u8 gpu_name[64];
+
+	/**
+	 * @gpu_short_name: NUL-terminated short GPU name.
+	 */
+	__u8 gpu_short_name[64];
+
+	/**
+	 * @gpu_gid: 16-byte SHA-1 GPU identifier supplied by GSP-RM.
+	 */
+	__u8 gpu_gid[16];
+};
+
+#define DRM_NOVA_INFO			0x00
+#define DRM_NOVA_GEM_CREATE		0x01
+#define DRM_NOVA_GEM_INFO		0x02
+
+/* Note: this is an enum so that it can be resolved by Rust bindgen. */
+enum {
+	DRM_IOCTL_NOVA_INFO		= DRM_IOWR(DRM_COMMAND_BASE + DRM_NOVA_INFO,
+						   struct drm_nova_info),
+	DRM_IOCTL_NOVA_GEM_CREATE	= DRM_IOWR(DRM_COMMAND_BASE + DRM_NOVA_GEM_CREATE,
+						   struct drm_nova_gem_create),
+	DRM_IOCTL_NOVA_GEM_INFO		= DRM_IOWR(DRM_COMMAND_BASE + DRM_NOVA_GEM_INFO,
+						   struct drm_nova_gem_info),
+};
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* __NOVA_DRM_UNSTABLE_H__ */
diff --git a/include/uapi/drm/nova_drm.h b/include/uapi/drm/nova_drm.h
index d7017ed17143..ad362301e3b1 100644
--- a/include/uapi/drm/nova_drm.h
+++ b/include/uapi/drm/nova_drm.h
@@ -3,207 +3,9 @@
 #ifndef __NOVA_DRM_H__
 #define __NOVA_DRM_H__
 
-#include "drm.h"
-
-/* DISCLAIMER: Do not use, this is not a stable uAPI.
- *
- * This uAPI serves only testing purposes as long as this driver is still in
- * development. It is required to implement and test infrastructure which is
- * upstreamed in the context of this driver. See also [1].
- *
- * [1] https://lore.kernel.org/dri-devel/Zfsj0_tb-0-tNrJy@cassiopeiae/T/#u
- */
-
-#if defined(__cplusplus)
-extern "C" {
-#endif
-
-/**
- * enum drm_nova_architecture - GPU architecture identifier
- */
-enum drm_nova_architecture {
-	NOVA_DRM_ARCHITECTURE_TURING		= 0x16,
-	NOVA_DRM_ARCHITECTURE_AMPERE		= 0x17,
-	NOVA_DRM_ARCHITECTURE_HOPPER		= 0x18,
-	NOVA_DRM_ARCHITECTURE_ADA		= 0x19,
-	NOVA_DRM_ARCHITECTURE_BLACKWELL_GB10X	= 0x1a,
-	NOVA_DRM_ARCHITECTURE_BLACKWELL_GB20X	= 0x1b,
-};
-
-/**
- * enum drm_nova_chipid - opaque GPU chip identifier
- *
- * These values identify the chip a GPU is based on. They are otherwise
- * opaque: userspace must not assume the values carry any particular meaning
- * or encoding, only that they may be compared against this enum.
- */
-enum drm_nova_chipid {
-	/* Turing */
-	NOVA_DRM_CHIPID_TU102			= 0x162,
-	NOVA_DRM_CHIPID_TU104			= 0x164,
-	NOVA_DRM_CHIPID_TU106			= 0x166,
-	NOVA_DRM_CHIPID_TU117			= 0x167,
-	NOVA_DRM_CHIPID_TU116			= 0x168,
-	/* Ampere */
-	NOVA_DRM_CHIPID_GA100			= 0x170,
-	NOVA_DRM_CHIPID_GA102			= 0x172,
-	NOVA_DRM_CHIPID_GA103			= 0x173,
-	NOVA_DRM_CHIPID_GA104			= 0x174,
-	NOVA_DRM_CHIPID_GA106			= 0x176,
-	NOVA_DRM_CHIPID_GA107			= 0x177,
-	/* Hopper */
-	NOVA_DRM_CHIPID_GH100			= 0x180,
-	/* Ada */
-	NOVA_DRM_CHIPID_AD102			= 0x192,
-	NOVA_DRM_CHIPID_AD103			= 0x193,
-	NOVA_DRM_CHIPID_AD104			= 0x194,
-	NOVA_DRM_CHIPID_AD106			= 0x196,
-	NOVA_DRM_CHIPID_AD107			= 0x197,
-	/* Blackwell GB10x */
-	NOVA_DRM_CHIPID_GB100			= 0x1a0,
-	NOVA_DRM_CHIPID_GB102			= 0x1a2,
-	/* Blackwell GB20x */
-	NOVA_DRM_CHIPID_GB202			= 0x1b2,
-	NOVA_DRM_CHIPID_GB203			= 0x1b3,
-	NOVA_DRM_CHIPID_GB205			= 0x1b5,
-	NOVA_DRM_CHIPID_GB206			= 0x1b6,
-	NOVA_DRM_CHIPID_GB207			= 0x1b7,
-};
-
-/**
- * struct drm_nova_gem_create - create a new DRM GEM object
- */
-struct drm_nova_gem_create {
-	/**
-	 * @handle: The handle of the new DRM GEM object.
-	 */
-	__u32 handle;
-
-	/**
-	 * @pad: 32 bit padding, should be 0.
-	 */
-	__u32 pad;
-
-	/**
-	 * @size: The size of the new DRM GEM object.
-	 */
-	__u64 size;
-};
-
-/**
- * struct drm_nova_gem_info - query DRM GEM object metadata
- */
-struct drm_nova_gem_info {
-	/**
-	 * @handle: The handle of the DRM GEM object to query.
-	 */
-	__u32 handle;
-
-	/**
-	 * @pad: 32 bit padding, should be 0.
-	 */
-	__u32 pad;
-
-	/**
-	 * @size: The size of the DRM GEM obejct.
-	 */
-	__u64 size;
-};
-
-/**
- * struct drm_nova_info - query device information
+/*
+ * Stable Nova uAPI. Interfaces should be moved here from
+ * drivers/gpu/drm/nova/nova_drm_unstable.h as they become stable.
  */
-struct drm_nova_info {
-	/**
-	 * @id: The identifier of the information to query.
-	 */
-	__u32 id;
-
-	/**
-	 * @size: The amount of space allocated by userspace at @data. The kernel
-	 * will return the number of bytes it wrote, or the size of the queried
-	 * information structure if @data is NULL.
-	 */
-	__u32 size;
-
-	/**
-	 * @data: Pointer to the userspace buffer into which the queried
-	 * information will be written. May be NULL, in which case nothing is
-	 * written and @size is set to the size of the information structure so
-	 * userspace can allocate a suitably sized buffer.
-	 */
-	__u64 data;
-};
-
-/**
- * DRM_NOVA_INFO_GPU
- *
- * Query GPU information. The result is returned in a
- * &struct drm_nova_info_gpu.
- */
-#define DRM_NOVA_INFO_GPU		0x00
-
-/**
- * struct drm_nova_info_gpu - GPU information
- */
-struct drm_nova_info_gpu {
-	/**
-	 * @architecture: GPU architecture identifier.
-	 *
-	 * See &enum drm_nova_architecture for currently known architectures.
-	 */
-	__u32 architecture;
-
-	/**
-	 * @chipid: Opaque GPU chip identifier.
-	 *
-	 * See &enum drm_nova_chipid for currently known chips.
-	 */
-	__u32 chipid;
-
-	/**
-	 * @vram_size: Amount of usable FB, excluding GSP carveouts and protected
-	 * regions.
-	 */
-	__u64 vram_size;
-
-	/**
-	 * @vram_bar_size: Size of the PCI BAR aperture used to access VRAM, in bytes.
-	 */
-	__u64 vram_bar_size;
-
-	/**
-	 * @gpu_name: NUL-terminated full GPU name.
-	 */
-	__u8 gpu_name[64];
-
-	/**
-	 * @gpu_short_name: NUL-terminated short GPU name.
-	 */
-	__u8 gpu_short_name[64];
-
-	/**
-	 * @gpu_gid: 16-byte SHA-1 GPU identifier supplied by GSP-RM.
-	 */
-	__u8 gpu_gid[16];
-};
-
-#define DRM_NOVA_INFO			0x00
-#define DRM_NOVA_GEM_CREATE		0x01
-#define DRM_NOVA_GEM_INFO		0x02
-
-/* Note: this is an enum so that it can be resolved by Rust bindgen. */
-enum {
-	DRM_IOCTL_NOVA_INFO		= DRM_IOWR(DRM_COMMAND_BASE + DRM_NOVA_INFO,
-						   struct drm_nova_info),
-	DRM_IOCTL_NOVA_GEM_CREATE	= DRM_IOWR(DRM_COMMAND_BASE + DRM_NOVA_GEM_CREATE,
-						   struct drm_nova_gem_create),
-	DRM_IOCTL_NOVA_GEM_INFO		= DRM_IOWR(DRM_COMMAND_BASE + DRM_NOVA_GEM_INFO,
-						   struct drm_nova_gem_info),
-};
-
-#if defined(__cplusplus)
-}
-#endif
 
 #endif /* __NOVA_DRM_H__ */
diff --git a/rust/uapi/uapi_helper.h b/rust/uapi/uapi_helper.h
index 489748ef642c..44fb6203c0ad 100644
--- a/rust/uapi/uapi_helper.h
+++ b/rust/uapi/uapi_helper.h
@@ -6,6 +6,8 @@
  * Sorted alphabetically.
  */
 
+#include "../../drivers/gpu/drm/nova/nova_drm_unstable.h"
+
 #include <uapi/drm/drm.h>
 #include <uapi/drm/nova_drm.h>
 #include <uapi/drm/panthor_drm.h>
-- 
2.56.0


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 2/3] rust: add kernel taint abstraction
  2026-10-19 21:24 [PATCH 0/3] drm/nova: make unstable uAPI use explicit Danilo Krummrich
  2026-10-19 21:24 ` [PATCH 1/3] drm/nova: mark the uAPI header as unstable Danilo Krummrich
@ 2026-10-19 21:24 ` Danilo Krummrich
  2026-10-19 21:24 ` [PATCH 3/3] drm/nova: require explicit opt-in to unstable uAPI Danilo Krummrich
  2 siblings, 0 replies; 5+ messages in thread
From: Danilo Krummrich @ 2026-10-19 21:24 UTC (permalink / raw)
  To: dakr, aliceryhl, airlied, simona, ojeda, boqun, gary, bjorn3_gh,
	lossin, a.hindborg, tmgross, daniel.almeida, tamird, acourbot,
	work, jhubbard, apopple, ecourtney, lyude, kherbst
  Cc: nova-gpu, dri-devel, rust-for-linux

Allow Rust code to taint the kernel to record conditions that may be
relevant when diagnosing subsequent kernel failures.

Signed-off-by: Danilo Krummrich <dakr@kernel.org>
---
 rust/bindings/bindings_helper.h |  1 +
 rust/kernel/lib.rs              |  1 +
 rust/kernel/panic.rs            | 50 +++++++++++++++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 rust/kernel/panic.rs

diff --git a/rust/bindings/bindings_helper.h b/rust/bindings/bindings_helper.h
index 930e63290cdd..bc248918c99b 100644
--- a/rust/bindings/bindings_helper.h
+++ b/rust/bindings/bindings_helper.h
@@ -74,6 +74,7 @@
 #include <linux/mm.h>
 #include <linux/miscdevice.h>
 #include <linux/of_device.h>
+#include <linux/panic.h>
 #include <linux/pci.h>
 #include <linux/phy.h>
 #include <linux/pid_namespace.h>
diff --git a/rust/kernel/lib.rs b/rust/kernel/lib.rs
index f9ef36217bb5..fd8fe9373401 100644
--- a/rust/kernel/lib.rs
+++ b/rust/kernel/lib.rs
@@ -112,6 +112,7 @@
 #[cfg(CONFIG_PM_OPP)]
 pub mod opp;
 pub mod page;
+pub mod panic;
 #[cfg(CONFIG_PCI)]
 pub mod pci;
 pub mod pid_namespace;
diff --git a/rust/kernel/panic.rs b/rust/kernel/panic.rs
new file mode 100644
index 000000000000..8a78591dfb8a
--- /dev/null
+++ b/rust/kernel/panic.rs
@@ -0,0 +1,50 @@
+// SPDX-License-Identifier: GPL-2.0
+
+//! Kernel taint tracking.
+//!
+//! C header: [`include/linux/panic.h`](srctree/include/linux/panic.h)
+//!
+//! See the [tainted-kernels documentation] for the meaning of each taint.
+//!
+//! [tainted-kernels documentation]: srctree/Documentation/admin-guide/tainted-kernels.rst
+
+/// A reason for tainting the kernel.
+#[derive(Clone, Copy, Debug, Eq, PartialEq)]
+#[repr(u32)]
+pub enum Taint {
+    /// Tainting was explicitly requested by the user.
+    User = bindings::TAINT_USER,
+}
+
+impl Taint {
+    #[inline]
+    const fn as_raw(self) -> u32 {
+        self as u32
+    }
+}
+
+/// Whether lock debugging remains reliable after a tainting event.
+#[derive(Clone, Copy, Debug, Eq, PartialEq)]
+#[repr(u32)]
+pub enum Lockdep {
+    /// Keep lock debugging enabled.
+    StillOk = bindings::lockdep_ok_LOCKDEP_STILL_OK,
+}
+
+impl Lockdep {
+    #[inline]
+    const fn as_raw(self) -> bindings::lockdep_ok {
+        self as u32
+    }
+}
+
+/// Adds a kernel taint flag.
+///
+/// Taint flags persist until reboot, even if the module that set them is unloaded.
+/// Use [`Lockdep::StillOk`] when the tainting event does not compromise lock debugging.
+/// This may panic if the kernel's `panic_on_taint` setting matches a set taint flag.
+#[inline]
+pub fn add_taint(flag: Taint, lockdep: Lockdep) {
+    // SAFETY: `Taint` and `Lockdep` restrict both arguments to valid C API values.
+    unsafe { bindings::add_taint(flag.as_raw(), lockdep.as_raw()) };
+}
-- 
2.56.0


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 3/3] drm/nova: require explicit opt-in to unstable uAPI
  2026-10-19 21:24 [PATCH 0/3] drm/nova: make unstable uAPI use explicit Danilo Krummrich
  2026-10-19 21:24 ` [PATCH 1/3] drm/nova: mark the uAPI header as unstable Danilo Krummrich
  2026-10-19 21:24 ` [PATCH 2/3] rust: add kernel taint abstraction Danilo Krummrich
@ 2026-10-19 21:24 ` Danilo Krummrich
  2 siblings, 0 replies; 5+ messages in thread
From: Danilo Krummrich @ 2026-10-19 21:24 UTC (permalink / raw)
  To: dakr, aliceryhl, airlied, simona, ojeda, boqun, gary, bjorn3_gh,
	lossin, a.hindborg, tmgross, daniel.almeida, tamird, acourbot,
	work, jhubbard, apopple, ecourtney, lyude, kherbst
  Cc: nova-gpu, dri-devel, rust-for-linux

Nova and its uAPI are under active upstream development. Require users
to acknowledge that the uAPI is not yet stable and may change
incompatibly before enabling the driver.

Refuse to load unless acknowledge_unstable_uapi=1 is set, and taint the
kernel when enabled. This keeps use of the unstable interfaces an
explicit opt-in while they are developed upstream.

Signed-off-by: Danilo Krummrich <dakr@kernel.org>
---
 drivers/gpu/drm/nova/Kconfig | 11 +++++++-
 drivers/gpu/drm/nova/nova.rs | 55 ++++++++++++++++++++++++++++++++++--
 2 files changed, 63 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/nova/Kconfig b/drivers/gpu/drm/nova/Kconfig
index ba16c74401f8..2cb62517b2f9 100644
--- a/drivers/gpu/drm/nova/Kconfig
+++ b/drivers/gpu/drm/nova/Kconfig
@@ -12,6 +12,15 @@ config DRM_NOVA
 	  Choose this if you want to build the Nova DRM driver for Nvidia
 	  GSP-based GPUs.
 
-	  This driver is work in progress and may not be functional.
+	  This driver is under active upstream development and may not be
+	  functional. Its uAPI is intended to be developed upstream alongside
+	  the driver and is not yet stable. It may change incompatibly during
+	  development.
+
+	  Loading requires the acknowledge_unstable_uapi=1 module parameter, or
+	  nova-drm.acknowledge_unstable_uapi=1 on the kernel command line when
+	  built in.
+
+	  Enabling the driver taints the kernel.
 
 	  If M is selected, the module will be called nova-drm.
diff --git a/drivers/gpu/drm/nova/nova.rs b/drivers/gpu/drm/nova/nova.rs
index 1fd454c7e0df..ad68f6e1a613 100644
--- a/drivers/gpu/drm/nova/nova.rs
+++ b/drivers/gpu/drm/nova/nova.rs
@@ -2,16 +2,67 @@
 
 //! Nova DRM Driver
 
+use kernel::{
+    auxiliary,
+    driver::Registration,
+    panic::{
+        self,
+        Lockdep,
+        Taint, //
+    },
+    prelude::*,
+    InPlaceModule, //
+};
+
 mod driver;
 mod file;
 mod gem;
 
 use crate::driver::NovaDriver;
 
-kernel::module_auxiliary_driver! {
-    type: NovaDriver,
+module! {
+    type: NovaModule,
     name: "nova-drm",
     authors: ["Danilo Krummrich"],
     description: "Nova GPU driver",
     license: "GPL v2",
+    params: {
+        acknowledge_unstable_uapi: bool {
+            default: false,
+            description: "Acknowledge that Nova and its uAPI are under active upstream development \
+                          and the uAPI may change incompatibly; enable the driver (taints kernel)",
+        },
+    },
+}
+
+#[pin_data]
+struct NovaModule {
+    #[pin]
+    _driver: Registration<auxiliary::Adapter<NovaDriver>>,
+}
+
+impl NovaModule {
+    fn check_unstable_uapi() -> Result {
+        pr_warn!("Nova and its uAPI are under active upstream development\n");
+
+        if !module_parameters::acknowledge_unstable_uapi.value() {
+            pr_err!("Driver disabled: Nova's uAPI is unstable and may change incompatibly\n");
+            pr_info!("Set nova-drm.acknowledge_unstable_uapi=1 to enable (taints kernel)\n");
+            return Err(EPERM);
+        }
+
+        pr_warn!("Unstable uAPI enabled; userspace compatibility is not guaranteed\n");
+        panic::add_taint(Taint::User, Lockdep::StillOk);
+
+        Ok(())
+    }
+}
+
+impl InPlaceModule for NovaModule {
+    fn init(module: &'static kernel::ThisModule) -> impl PinInit<Self, Error> {
+        try_pin_init!(Self {
+            _: { Self::check_unstable_uapi()? },
+            _driver <- Registration::new(<Self as kernel::ModuleMetadata>::NAME, module),
+        })
+    }
 }
-- 
2.56.0


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH 1/3] drm/nova: mark the uAPI header as unstable
  2026-10-19 21:24 ` [PATCH 1/3] drm/nova: mark the uAPI header as unstable Danilo Krummrich
@ 2026-10-19 22:08   ` Faith Ekstrand
  0 siblings, 0 replies; 5+ messages in thread
From: Faith Ekstrand @ 2026-10-19 22:08 UTC (permalink / raw)
  To: Danilo Krummrich
  Cc: aliceryhl, airlied, simona, ojeda, boqun, gary, bjorn3_gh, lossin,
	a.hindborg, tmgross, daniel.almeida, tamird, acourbot, work,
	jhubbard, apopple, ecourtney, lyude, kherbst, nova-gpu, dri-devel,
	rust-for-linux

On Mon, Oct 19, 2026 at 5:26 PM Danilo Krummrich <dakr@kernel.org> wrote:
>
> The header already documents that its uAPI is unstable and intended for
> development. It may change incompatibly as it is developed upstream.
> Rename it to nova_drm_unstable.h and move it out of include/uapi/ to
> make this more explicit.
>
> As individual interfaces become stable, move them to
> include/uapi/drm/nova_drm.h.
>
> Signed-off-by: Danilo Krummrich <dakr@kernel.org>

Acked-by: Faith Ekstrand <faith.ekstrand@collabora.com>

> ---
>  drivers/gpu/drm/nova/nova_drm_unstable.h | 212 +++++++++++++++++++++++
>  include/uapi/drm/nova_drm.h              | 204 +---------------------
>  rust/uapi/uapi_helper.h                  |   2 +
>  3 files changed, 217 insertions(+), 201 deletions(-)
>  create mode 100644 drivers/gpu/drm/nova/nova_drm_unstable.h
>
> diff --git a/drivers/gpu/drm/nova/nova_drm_unstable.h b/drivers/gpu/drm/nova/nova_drm_unstable.h
> new file mode 100644
> index 000000000000..3577dede15a6
> --- /dev/null
> +++ b/drivers/gpu/drm/nova/nova_drm_unstable.h
> @@ -0,0 +1,212 @@
> +/* SPDX-License-Identifier: MIT */
> +
> +#ifndef __NOVA_DRM_UNSTABLE_H__
> +#define __NOVA_DRM_UNSTABLE_H__
> +
> +#include <drm/drm.h>
> +
> +/* DISCLAIMER: Do not use, this is not a stable uAPI.
> + *
> + * This uAPI serves only testing purposes as long as this driver is still in
> + * development. It is required to implement and test infrastructure which is
> + * upstreamed in the context of this driver. See also [1].
> + *
> + * The uAPI in this file may change incompatibly. Stable interfaces should
> + * be moved to include/uapi/drm/nova_drm.h.
> + *
> + * [1] https://lore.kernel.org/dri-devel/Zfsj0_tb-0-tNrJy@cassiopeiae/
> + */
> +
> +#if defined(__cplusplus)
> +extern "C" {
> +#endif
> +
> +/**
> + * enum drm_nova_architecture - GPU architecture identifier
> + */
> +enum drm_nova_architecture {
> +       NOVA_DRM_ARCHITECTURE_TURING            = 0x16,
> +       NOVA_DRM_ARCHITECTURE_AMPERE            = 0x17,
> +       NOVA_DRM_ARCHITECTURE_HOPPER            = 0x18,
> +       NOVA_DRM_ARCHITECTURE_ADA               = 0x19,
> +       NOVA_DRM_ARCHITECTURE_BLACKWELL_GB10X   = 0x1a,
> +       NOVA_DRM_ARCHITECTURE_BLACKWELL_GB20X   = 0x1b,
> +};
> +
> +/**
> + * enum drm_nova_chipid - opaque GPU chip identifier
> + *
> + * These values identify the chip a GPU is based on. They are otherwise
> + * opaque: userspace must not assume the values carry any particular meaning
> + * or encoding, only that they may be compared against this enum.
> + */
> +enum drm_nova_chipid {
> +       /* Turing */
> +       NOVA_DRM_CHIPID_TU102                   = 0x162,
> +       NOVA_DRM_CHIPID_TU104                   = 0x164,
> +       NOVA_DRM_CHIPID_TU106                   = 0x166,
> +       NOVA_DRM_CHIPID_TU117                   = 0x167,
> +       NOVA_DRM_CHIPID_TU116                   = 0x168,
> +       /* Ampere */
> +       NOVA_DRM_CHIPID_GA100                   = 0x170,
> +       NOVA_DRM_CHIPID_GA102                   = 0x172,
> +       NOVA_DRM_CHIPID_GA103                   = 0x173,
> +       NOVA_DRM_CHIPID_GA104                   = 0x174,
> +       NOVA_DRM_CHIPID_GA106                   = 0x176,
> +       NOVA_DRM_CHIPID_GA107                   = 0x177,
> +       /* Hopper */
> +       NOVA_DRM_CHIPID_GH100                   = 0x180,
> +       /* Ada */
> +       NOVA_DRM_CHIPID_AD102                   = 0x192,
> +       NOVA_DRM_CHIPID_AD103                   = 0x193,
> +       NOVA_DRM_CHIPID_AD104                   = 0x194,
> +       NOVA_DRM_CHIPID_AD106                   = 0x196,
> +       NOVA_DRM_CHIPID_AD107                   = 0x197,
> +       /* Blackwell GB10x */
> +       NOVA_DRM_CHIPID_GB100                   = 0x1a0,
> +       NOVA_DRM_CHIPID_GB102                   = 0x1a2,
> +       /* Blackwell GB20x */
> +       NOVA_DRM_CHIPID_GB202                   = 0x1b2,
> +       NOVA_DRM_CHIPID_GB203                   = 0x1b3,
> +       NOVA_DRM_CHIPID_GB205                   = 0x1b5,
> +       NOVA_DRM_CHIPID_GB206                   = 0x1b6,
> +       NOVA_DRM_CHIPID_GB207                   = 0x1b7,
> +};
> +
> +/**
> + * struct drm_nova_gem_create - create a new DRM GEM object
> + */
> +struct drm_nova_gem_create {
> +       /**
> +        * @handle: The handle of the new DRM GEM object.
> +        */
> +       __u32 handle;
> +
> +       /**
> +        * @pad: 32 bit padding, should be 0.
> +        */
> +       __u32 pad;
> +
> +       /**
> +        * @size: The size of the new DRM GEM object.
> +        */
> +       __u64 size;
> +};
> +
> +/**
> + * struct drm_nova_gem_info - query DRM GEM object metadata
> + */
> +struct drm_nova_gem_info {
> +       /**
> +        * @handle: The handle of the DRM GEM object to query.
> +        */
> +       __u32 handle;
> +
> +       /**
> +        * @pad: 32 bit padding, should be 0.
> +        */
> +       __u32 pad;
> +
> +       /**
> +        * @size: The size of the DRM GEM object.
> +        */
> +       __u64 size;
> +};
> +
> +/**
> + * struct drm_nova_info - query device information
> + */
> +struct drm_nova_info {
> +       /**
> +        * @id: The identifier of the information to query.
> +        */
> +       __u32 id;
> +
> +       /**
> +        * @size: The amount of space allocated by userspace at @data. The kernel
> +        * will return the number of bytes it wrote, or the size of the queried
> +        * information structure if @data is NULL.
> +        */
> +       __u32 size;
> +
> +       /**
> +        * @data: Pointer to the userspace buffer into which the queried
> +        * information will be written. May be NULL, in which case nothing is
> +        * written and @size is set to the size of the information structure so
> +        * userspace can allocate a suitably sized buffer.
> +        */
> +       __u64 data;
> +};
> +
> +/**
> + * DRM_NOVA_INFO_GPU
> + *
> + * Query GPU information. The result is returned in a
> + * &struct drm_nova_info_gpu.
> + */
> +#define DRM_NOVA_INFO_GPU              0x00
> +
> +/**
> + * struct drm_nova_info_gpu - GPU information
> + */
> +struct drm_nova_info_gpu {
> +       /**
> +        * @architecture: GPU architecture identifier.
> +        *
> +        * See &enum drm_nova_architecture for currently known architectures.
> +        */
> +       __u32 architecture;
> +
> +       /**
> +        * @chipid: Opaque GPU chip identifier.
> +        *
> +        * See &enum drm_nova_chipid for currently known chips.
> +        */
> +       __u32 chipid;
> +
> +       /**
> +        * @vram_size: Amount of usable FB, excluding GSP carveouts and protected
> +        * regions.
> +        */
> +       __u64 vram_size;
> +
> +       /**
> +        * @vram_bar_size: Size of the PCI BAR aperture used to access VRAM, in bytes.
> +        */
> +       __u64 vram_bar_size;
> +
> +       /**
> +        * @gpu_name: NUL-terminated full GPU name.
> +        */
> +       __u8 gpu_name[64];
> +
> +       /**
> +        * @gpu_short_name: NUL-terminated short GPU name.
> +        */
> +       __u8 gpu_short_name[64];
> +
> +       /**
> +        * @gpu_gid: 16-byte SHA-1 GPU identifier supplied by GSP-RM.
> +        */
> +       __u8 gpu_gid[16];
> +};
> +
> +#define DRM_NOVA_INFO                  0x00
> +#define DRM_NOVA_GEM_CREATE            0x01
> +#define DRM_NOVA_GEM_INFO              0x02
> +
> +/* Note: this is an enum so that it can be resolved by Rust bindgen. */
> +enum {
> +       DRM_IOCTL_NOVA_INFO             = DRM_IOWR(DRM_COMMAND_BASE + DRM_NOVA_INFO,
> +                                                  struct drm_nova_info),
> +       DRM_IOCTL_NOVA_GEM_CREATE       = DRM_IOWR(DRM_COMMAND_BASE + DRM_NOVA_GEM_CREATE,
> +                                                  struct drm_nova_gem_create),
> +       DRM_IOCTL_NOVA_GEM_INFO         = DRM_IOWR(DRM_COMMAND_BASE + DRM_NOVA_GEM_INFO,
> +                                                  struct drm_nova_gem_info),
> +};
> +
> +#if defined(__cplusplus)
> +}
> +#endif
> +
> +#endif /* __NOVA_DRM_UNSTABLE_H__ */
> diff --git a/include/uapi/drm/nova_drm.h b/include/uapi/drm/nova_drm.h
> index d7017ed17143..ad362301e3b1 100644
> --- a/include/uapi/drm/nova_drm.h
> +++ b/include/uapi/drm/nova_drm.h
> @@ -3,207 +3,9 @@
>  #ifndef __NOVA_DRM_H__
>  #define __NOVA_DRM_H__
>
> -#include "drm.h"
> -
> -/* DISCLAIMER: Do not use, this is not a stable uAPI.
> - *
> - * This uAPI serves only testing purposes as long as this driver is still in
> - * development. It is required to implement and test infrastructure which is
> - * upstreamed in the context of this driver. See also [1].
> - *
> - * [1] https://lore.kernel.org/dri-devel/Zfsj0_tb-0-tNrJy@cassiopeiae/T/#u
> - */
> -
> -#if defined(__cplusplus)
> -extern "C" {
> -#endif
> -
> -/**
> - * enum drm_nova_architecture - GPU architecture identifier
> - */
> -enum drm_nova_architecture {
> -       NOVA_DRM_ARCHITECTURE_TURING            = 0x16,
> -       NOVA_DRM_ARCHITECTURE_AMPERE            = 0x17,
> -       NOVA_DRM_ARCHITECTURE_HOPPER            = 0x18,
> -       NOVA_DRM_ARCHITECTURE_ADA               = 0x19,
> -       NOVA_DRM_ARCHITECTURE_BLACKWELL_GB10X   = 0x1a,
> -       NOVA_DRM_ARCHITECTURE_BLACKWELL_GB20X   = 0x1b,
> -};
> -
> -/**
> - * enum drm_nova_chipid - opaque GPU chip identifier
> - *
> - * These values identify the chip a GPU is based on. They are otherwise
> - * opaque: userspace must not assume the values carry any particular meaning
> - * or encoding, only that they may be compared against this enum.
> - */
> -enum drm_nova_chipid {
> -       /* Turing */
> -       NOVA_DRM_CHIPID_TU102                   = 0x162,
> -       NOVA_DRM_CHIPID_TU104                   = 0x164,
> -       NOVA_DRM_CHIPID_TU106                   = 0x166,
> -       NOVA_DRM_CHIPID_TU117                   = 0x167,
> -       NOVA_DRM_CHIPID_TU116                   = 0x168,
> -       /* Ampere */
> -       NOVA_DRM_CHIPID_GA100                   = 0x170,
> -       NOVA_DRM_CHIPID_GA102                   = 0x172,
> -       NOVA_DRM_CHIPID_GA103                   = 0x173,
> -       NOVA_DRM_CHIPID_GA104                   = 0x174,
> -       NOVA_DRM_CHIPID_GA106                   = 0x176,
> -       NOVA_DRM_CHIPID_GA107                   = 0x177,
> -       /* Hopper */
> -       NOVA_DRM_CHIPID_GH100                   = 0x180,
> -       /* Ada */
> -       NOVA_DRM_CHIPID_AD102                   = 0x192,
> -       NOVA_DRM_CHIPID_AD103                   = 0x193,
> -       NOVA_DRM_CHIPID_AD104                   = 0x194,
> -       NOVA_DRM_CHIPID_AD106                   = 0x196,
> -       NOVA_DRM_CHIPID_AD107                   = 0x197,
> -       /* Blackwell GB10x */
> -       NOVA_DRM_CHIPID_GB100                   = 0x1a0,
> -       NOVA_DRM_CHIPID_GB102                   = 0x1a2,
> -       /* Blackwell GB20x */
> -       NOVA_DRM_CHIPID_GB202                   = 0x1b2,
> -       NOVA_DRM_CHIPID_GB203                   = 0x1b3,
> -       NOVA_DRM_CHIPID_GB205                   = 0x1b5,
> -       NOVA_DRM_CHIPID_GB206                   = 0x1b6,
> -       NOVA_DRM_CHIPID_GB207                   = 0x1b7,
> -};
> -
> -/**
> - * struct drm_nova_gem_create - create a new DRM GEM object
> - */
> -struct drm_nova_gem_create {
> -       /**
> -        * @handle: The handle of the new DRM GEM object.
> -        */
> -       __u32 handle;
> -
> -       /**
> -        * @pad: 32 bit padding, should be 0.
> -        */
> -       __u32 pad;
> -
> -       /**
> -        * @size: The size of the new DRM GEM object.
> -        */
> -       __u64 size;
> -};
> -
> -/**
> - * struct drm_nova_gem_info - query DRM GEM object metadata
> - */
> -struct drm_nova_gem_info {
> -       /**
> -        * @handle: The handle of the DRM GEM object to query.
> -        */
> -       __u32 handle;
> -
> -       /**
> -        * @pad: 32 bit padding, should be 0.
> -        */
> -       __u32 pad;
> -
> -       /**
> -        * @size: The size of the DRM GEM obejct.
> -        */
> -       __u64 size;
> -};
> -
> -/**
> - * struct drm_nova_info - query device information
> +/*
> + * Stable Nova uAPI. Interfaces should be moved here from
> + * drivers/gpu/drm/nova/nova_drm_unstable.h as they become stable.
>   */
> -struct drm_nova_info {
> -       /**
> -        * @id: The identifier of the information to query.
> -        */
> -       __u32 id;
> -
> -       /**
> -        * @size: The amount of space allocated by userspace at @data. The kernel
> -        * will return the number of bytes it wrote, or the size of the queried
> -        * information structure if @data is NULL.
> -        */
> -       __u32 size;
> -
> -       /**
> -        * @data: Pointer to the userspace buffer into which the queried
> -        * information will be written. May be NULL, in which case nothing is
> -        * written and @size is set to the size of the information structure so
> -        * userspace can allocate a suitably sized buffer.
> -        */
> -       __u64 data;
> -};
> -
> -/**
> - * DRM_NOVA_INFO_GPU
> - *
> - * Query GPU information. The result is returned in a
> - * &struct drm_nova_info_gpu.
> - */
> -#define DRM_NOVA_INFO_GPU              0x00
> -
> -/**
> - * struct drm_nova_info_gpu - GPU information
> - */
> -struct drm_nova_info_gpu {
> -       /**
> -        * @architecture: GPU architecture identifier.
> -        *
> -        * See &enum drm_nova_architecture for currently known architectures.
> -        */
> -       __u32 architecture;
> -
> -       /**
> -        * @chipid: Opaque GPU chip identifier.
> -        *
> -        * See &enum drm_nova_chipid for currently known chips.
> -        */
> -       __u32 chipid;
> -
> -       /**
> -        * @vram_size: Amount of usable FB, excluding GSP carveouts and protected
> -        * regions.
> -        */
> -       __u64 vram_size;
> -
> -       /**
> -        * @vram_bar_size: Size of the PCI BAR aperture used to access VRAM, in bytes.
> -        */
> -       __u64 vram_bar_size;
> -
> -       /**
> -        * @gpu_name: NUL-terminated full GPU name.
> -        */
> -       __u8 gpu_name[64];
> -
> -       /**
> -        * @gpu_short_name: NUL-terminated short GPU name.
> -        */
> -       __u8 gpu_short_name[64];
> -
> -       /**
> -        * @gpu_gid: 16-byte SHA-1 GPU identifier supplied by GSP-RM.
> -        */
> -       __u8 gpu_gid[16];
> -};
> -
> -#define DRM_NOVA_INFO                  0x00
> -#define DRM_NOVA_GEM_CREATE            0x01
> -#define DRM_NOVA_GEM_INFO              0x02
> -
> -/* Note: this is an enum so that it can be resolved by Rust bindgen. */
> -enum {
> -       DRM_IOCTL_NOVA_INFO             = DRM_IOWR(DRM_COMMAND_BASE + DRM_NOVA_INFO,
> -                                                  struct drm_nova_info),
> -       DRM_IOCTL_NOVA_GEM_CREATE       = DRM_IOWR(DRM_COMMAND_BASE + DRM_NOVA_GEM_CREATE,
> -                                                  struct drm_nova_gem_create),
> -       DRM_IOCTL_NOVA_GEM_INFO         = DRM_IOWR(DRM_COMMAND_BASE + DRM_NOVA_GEM_INFO,
> -                                                  struct drm_nova_gem_info),
> -};
> -
> -#if defined(__cplusplus)
> -}
> -#endif
>
>  #endif /* __NOVA_DRM_H__ */
> diff --git a/rust/uapi/uapi_helper.h b/rust/uapi/uapi_helper.h
> index 489748ef642c..44fb6203c0ad 100644
> --- a/rust/uapi/uapi_helper.h
> +++ b/rust/uapi/uapi_helper.h
> @@ -6,6 +6,8 @@
>   * Sorted alphabetically.
>   */
>
> +#include "../../drivers/gpu/drm/nova/nova_drm_unstable.h"
> +
>  #include <uapi/drm/drm.h>
>  #include <uapi/drm/nova_drm.h>
>  #include <uapi/drm/panthor_drm.h>
> --
> 2.56.0
>

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2026-10-19 22:08 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-19 21:24 [PATCH 0/3] drm/nova: make unstable uAPI use explicit Danilo Krummrich
2026-10-19 21:24 ` [PATCH 1/3] drm/nova: mark the uAPI header as unstable Danilo Krummrich
2026-10-19 22:08   ` Faith Ekstrand
2026-10-19 21:24 ` [PATCH 2/3] rust: add kernel taint abstraction Danilo Krummrich
2026-10-19 21:24 ` [PATCH 3/3] drm/nova: require explicit opt-in to unstable uAPI Danilo Krummrich

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox