Re: [PATCH v8 2/4] drm/virtgpu api: add blob userptr resource
From: Huang, Honglei
Date: Fri Sep 18 2026 - 12:09:14 EST
On 9/18/2026 8:12 PM, Akihiko Odaki wrote:
On 2026/09/18 18:59, Honglei Huang wrote:
Add a userptr address field so userspace can request a blob backed
by an existing process mapping. A non-zero userptr selects that
path; probe VIRTGPU_PARAM_USERPTR before using the field.
GPU-readonly backing is requested with the virtio CREATE_BLOB wire
flag VIRTIO_GPU_BLOB_FLAG_USE_READONLY (also
VIRTGPU_BLOB_FLAG_USE_READONLY). The device MUST NOT write such a
resource. The guest pins without FOLL_WRITE only when the device
advertised VIRTIO_GPU_F_BLOB_READONLY (VIRTGPU_PARAM_BLOB_READONLY).
Signed-off-by: Honglei Huang <honghuan@xxxxxxx>
---
include/uapi/drm/virtgpu_drm.h | 13 +++++++++++++
include/uapi/linux/virtio_gpu.h | 6 ++++++
2 files changed, 19 insertions(+)
diff --git a/include/uapi/drm/virtgpu_drm.h b/include/uapi/drm/ virtgpu_drm.h
index 95587e12ae..80f73b3276 100644
--- a/include/uapi/drm/virtgpu_drm.h
+++ b/include/uapi/drm/virtgpu_drm.h
@@ -99,6 +99,8 @@ struct drm_virtgpu_execbuffer {
#define VIRTGPU_PARAM_SUPPORTED_CAPSET_IDs 7 /* Bitmask of supported capability set ids */
#define VIRTGPU_PARAM_EXPLICIT_DEBUG_NAME 8 /* Ability to set debug name from userspace */
#define VIRTGPU_PARAM_BLOB_ALIGNMENT 9 /* Device alignment requirements for blobs */
+#define VIRTGPU_PARAM_USERPTR 10 /* CREATE_BLOB userptr field is supported */
+#define VIRTGPU_PARAM_BLOB_READONLY 11 /* VIRTGPU_BLOB_FLAG_USE_READONLY is honored */
struct drm_virtgpu_getparam {
__u64 param;
@@ -186,6 +188,10 @@ struct drm_virtgpu_resource_create_blob {
#define VIRTGPU_BLOB_FLAG_USE_MAPPABLE 0x0001
#define VIRTGPU_BLOB_FLAG_USE_SHAREABLE 0x0002
#define VIRTGPU_BLOB_FLAG_USE_CROSS_DEVICE 0x0004
+/* Wire flag: device MUST NOT write. Guest pins without FOLL_WRITE.
+ * Rejected unless VIRTGPU_PARAM_BLOB_READONLY is 1.
+ */
According to Documentation/process/coding-style.rst, the preferred style for long (multi-line) comments is:
/*
* This is the preferred style for multi-line
* comments in the Linux kernel source code.
* Please use it consistently.
*
* Description: A column of asterisks on the left side,
* with beginning and ending almost-blank lines.
*/
So please avoid putting text on the same line as the opening /*.
Furthermore, because this is a UAPI header (defining the interface between userspace and the kernel, rather than the guest and the host), it should use terminology appropriate for userspace. Kernel-internal implementation details like FOLL_WRITE and terms like "guest" shouldn't be mentioned here.
That being said, I don't think this comment is necessary in the first place. Anyone who needs to know the exact behavior will look at the virtio specification. I recommend just dropping the comment entirely.
Thanks for the review, will remove this comment here.
+#define VIRTGPU_BLOB_FLAG_USE_READONLY 0x0008
/* zero is invalid blob_mem */
__u32 blob_mem;
__u32 blob_flags;
@@ -205,6 +211,13 @@ struct drm_virtgpu_resource_create_blob {
#define DRM_VIRTGPU_BLOB_FLAG_HINT_DEFER_MAPPING 0x0001
__u32 blob_hints;
__u32 pad2;
+
+ /*
+ * Guest VA to pin as blob backing. Non-zero selects the userptr
+ * path and is valid only with VIRTGPU_BLOB_MEM_GUEST. Must be 0
+ * otherwise. Probe VIRTGPU_PARAM_USERPTR before using this field.
+ */
This comment is useful since it discusses UAPI specifics. However, please avoid the term "Guest VA". Since guest userspace has no concept of a "host" or "PA" (physical address), simply saying "address" is sufficient and more concise.
Got it, will modify the comment in next version.
Regards,
Honglei
Regards,
Akihiko Odaki
+ __u64 userptr;
};
#define VIRTGPU_CONTEXT_PARAM_CAPSET_ID 0x0001
diff --git a/include/uapi/linux/virtio_gpu.h b/include/uapi/linux/ virtio_gpu.h
index 3d4dfadc9d..33f5332e59 100644
--- a/include/uapi/linux/virtio_gpu.h
+++ b/include/uapi/linux/virtio_gpu.h
@@ -72,6 +72,10 @@
* must be aligned to that value.
*/
#define VIRTIO_GPU_F_BLOB_ALIGNMENT 5
+/*
+ * VIRTIO_GPU_BLOB_FLAG_USE_READONLY
+ */
+#define VIRTIO_GPU_F_BLOB_READONLY 6
enum virtio_gpu_ctrl_type {
VIRTIO_GPU_UNDEFINED = 0,
@@ -415,6 +419,8 @@ struct virtio_gpu_resource_create_blob {
#define VIRTIO_GPU_BLOB_FLAG_USE_MAPPABLE 0x0001
#define VIRTIO_GPU_BLOB_FLAG_USE_SHAREABLE 0x0002
#define VIRTIO_GPU_BLOB_FLAG_USE_CROSS_DEVICE 0x0004
+/* Device MUST NOT write. Driver may pin read-only guest pages. */
+#define VIRTIO_GPU_BLOB_FLAG_USE_READONLY 0x0008
/* zero is invalid blob mem */
__le32 blob_mem;
__le32 blob_flags;