In preparation to support VIRTIO_F_DMB, define the feature bit. A
device that negotiates it holds its virtqueues and the buffers they
reference in a Device Memory Buffer, a shared memory region the device
owns. Every address the driver publishes to such a device is an offset
into that region, so the device can only reach memory the driver placed
there.

Define VIRTIO_F_DMB as 44 and raise VIRTIO_TRANSPORT_F_END to 45, so
virtio_dev_probe() preserves the bit into finalize_features() where a
transport can act on it. VIRTIO_DEVICE_F_MASK derives from the same
bound, and the expansion drivers/vdpa/vdpa.c writes out by hand moves
with it. The feature is a proposal before the virtio Technical
Committee and has no allocated number, so 44 is provisional.

Link: 
https://lore.kernel.org/virtio-comment/[email protected]/
Assisted-by: Kiro:claude-opus-5 checkpatch sparse
Signed-off-by: Alexander Graf <[email protected]>
---
 drivers/vdpa/vdpa.c                |  2 +-
 include/uapi/linux/virtio_config.h | 17 ++++++++++++++++-
 2 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/drivers/vdpa/vdpa.c b/drivers/vdpa/vdpa.c
index 1757a33f298f..ae9326394c2e 100644
--- a/drivers/vdpa/vdpa.c
+++ b/drivers/vdpa/vdpa.c
@@ -548,7 +548,7 @@ vdpa_nl_cmd_mgmtdev_get_dumpit(struct sk_buff *msg, struct 
netlink_callback *cb)
 
 /*
  * Bitmask for all per-device features: feature bits VIRTIO_TRANSPORT_F_START
- * through VIRTIO_TRANSPORT_F_END are unset, i.e. 0xfffff8000fffffff for
+ * through VIRTIO_TRANSPORT_F_END are unset, i.e. 0xffffc0000fffffff for
  * all 64bit features. If the features are extended beyond 64 bits, or new
  * "holes" are reserved for other type of features than per-device, this
  * macro would have to be updated.
diff --git a/include/uapi/linux/virtio_config.h 
b/include/uapi/linux/virtio_config.h
index 2445f365bce7..986e2b5fb3c8 100644
--- a/include/uapi/linux/virtio_config.h
+++ b/include/uapi/linux/virtio_config.h
@@ -52,7 +52,7 @@
  * rest are per-device feature bits.
  */
 #define VIRTIO_TRANSPORT_F_START       28
-#define VIRTIO_TRANSPORT_F_END         42
+#define VIRTIO_TRANSPORT_F_END         45
 
 #ifndef VIRTIO_CONFIG_NO_LEGACY
 /* Do we get callbacks when the ring is completely used, even if we've
@@ -120,4 +120,19 @@
  */
 #define VIRTIO_F_ADMIN_VQ              41
 
+/*
+ * This feature indicates that the device offers a Device Memory Buffer: a
+ * shared memory region, owned by the device, that holds the virtqueues and
+ * the buffers they reference.  When this feature is negotiated, every address
+ * that the driver places in a virtqueue is an offset into the Device Memory
+ * Buffer region rather than a physical address or a bus address.  The device
+ * is thereby confined to memory the driver has published in that region.
+ *
+ * The feature is a specification proposal before the virtio Technical
+ * Committee, not a ratified feature.  The number below is provisional: the
+ * committee has allocated none for it, and it will change if the committee
+ * allocates a different one.  Do not treat it as a stable interface yet.
+ */
+#define VIRTIO_F_DMB                   44
+
 #endif /* _UAPI_LINUX_VIRTIO_CONFIG_H */

Reply via email to