[<prev] [next>] [day] [month] [year] [list]
Message-ID: <20251130033855.28823-1-r4o5m6e8o@163.com>
Date: Sun, 30 Nov 2025 11:38:55 +0800
From: Yufeng Wang <r4o5m6e8o@....com>
To: "Michael S . Tsirkin" <mst@...hat.com>,
Jason Wang <jasowang@...hat.com>,
Xuan Zhuo <xuanzhuo@...ux.alibaba.com>,
Eugenio Pérez <eperezma@...hat.com>,
Yufeng Wang <r4o5m6e8o@....com>,
virtualization@...ts.linux.dev,
linux-kernel@...r.kernel.org
Cc: Yuedong Wang <wyd20130109@....com>,
Yuexuan Wang <wangyx20170302@....com>,
Haimei Qu <545714393@...com>
Subject: [PATCH] tools: add map and vmap to virtio_device
Fix compile error when make tools/virtio,
port over the virtio_device member map and vmap to tools.
Fixes: bee8c7c24b73 ("virtio: introduce map ops in virtio core")
Signed-off-by: Yufeng Wang <r4o5m6e8o@....com>
Tested-by: Yuedong Wang <wyd20130109@....com>
Tested-by: Yuexuan Wang <wangyx20170302@....com>
Tested-by: Haimei Qu <545714393@...com>
---
tools/virtio/linux/virtio.h | 28 ++++++++++++++++++++++++++++
tools/virtio/linux/virtio_config.h | 21 +++++++++++++++++++++
2 files changed, 49 insertions(+)
diff --git a/tools/virtio/linux/virtio.h b/tools/virtio/linux/virtio.h
index 5d3440f474dd..4c2c87336d29 100644
--- a/tools/virtio/linux/virtio.h
+++ b/tools/virtio/linux/virtio.h
@@ -4,17 +4,24 @@
#include <linux/scatterlist.h>
#include <linux/kernel.h>
#include <linux/spinlock.h>
+#include <linux/dma-mapping.h>
struct device {
void *parent;
};
+union virtio_map {
+ struct device *dma_dev;
+};
+
struct virtio_device {
struct device dev;
u64 features;
struct list_head vqs;
spinlock_t vqs_list_lock;
const struct virtio_config_ops *config;
+ const struct virtio_map_ops *map;
+ union virtio_map vmap;
};
struct virtqueue {
@@ -69,4 +76,25 @@ struct virtqueue *vring_new_virtqueue(unsigned int index,
const char *name);
void vring_del_virtqueue(struct virtqueue *vq);
+void *virtqueue_map_alloc_coherent(struct virtio_device *vdev,
+ union virtio_map mapping_token,
+ size_t size, dma_addr_t *dma_handle,
+ gfp_t gfp);
+
+void virtqueue_map_free_coherent(struct virtio_device *vdev,
+ union virtio_map mapping_token,
+ size_t size, void *vaddr,
+ dma_addr_t dma_handle);
+
+dma_addr_t virtqueue_map_page_attrs(const struct virtqueue *_vq,
+ struct page *page,
+ unsigned long offset,
+ size_t size,
+ enum dma_data_direction dir,
+ unsigned long attrs);
+
+void virtqueue_unmap_page_attrs(const struct virtqueue *_vq,
+ dma_addr_t dma_handle,
+ size_t size, enum dma_data_direction dir,
+ unsigned long attrs);
#endif
diff --git a/tools/virtio/linux/virtio_config.h b/tools/virtio/linux/virtio_config.h
index 42a564f22f2d..ee696dad294a 100644
--- a/tools/virtio/linux/virtio_config.h
+++ b/tools/virtio/linux/virtio_config.h
@@ -10,6 +10,27 @@ struct virtio_config_ops {
int (*enable_vq_after_reset)(struct virtqueue *vq);
};
+struct virtio_map_ops {
+ dma_addr_t (*map_page)(union virtio_map map, struct page *page,
+ unsigned long offset, size_t size,
+ enum dma_data_direction dir, unsigned long attrs);
+ void (*unmap_page)(union virtio_map map, dma_addr_t map_handle,
+ size_t size, enum dma_data_direction dir,
+ unsigned long attrs);
+ void (*sync_single_for_cpu)(union virtio_map map, dma_addr_t map_handle,
+ size_t size, enum dma_data_direction dir);
+ void (*sync_single_for_device)(union virtio_map map,
+ dma_addr_t map_handle, size_t size,
+ enum dma_data_direction dir);
+ void *(*alloc)(union virtio_map map, size_t size,
+ dma_addr_t *map_handle, gfp_t gfp);
+ void (*free)(union virtio_map map, size_t size, void *vaddr,
+ dma_addr_t map_handle, unsigned long attrs);
+ bool (*need_sync)(union virtio_map map, dma_addr_t map_handle);
+ int (*mapping_error)(union virtio_map map, dma_addr_t map_handle);
+ size_t (*max_mapping_size)(union virtio_map map);
+};
+
/*
* __virtio_test_bit - helper to test feature bits. For use by transports.
* Devices should normally use virtio_has_feature,
--
2.43.0
Powered by blists - more mailing lists