History

vhost: factor out IOTLB

This patch factors out IOTLB into a dedicated module in order to be reused by other modules like vringh. User may choose to enable the automatic retiring by specifying VHOST_IOTLB_FLAG_RETIRE flag to fit for the case of vhost device IOTLB implementation.

Jason Wang committed 6 years ago

Commit 0bbe3061 parent 792a4f28 files · +315 −181Browse files

Showing the changes to include/linux (1 of 8 files). Show all

Unified · Split

include/linux/vhost_iotlb.h+47−0
@@ -0,0 +1,47 @@
1+/* SPDX-License-Identifier: GPL-2.0 */
2+#ifndef _LINUX_VHOST_IOTLB_H
3+#define _LINUX_VHOST_IOTLB_H
4+
5+#include <linux/interval_tree_generic.h>
6+
7+struct vhost_iotlb_map {
8+ struct rb_node rb;
9+ struct list_head link;
10+ u64 start;
11+ u64 last;
12+ u64 size;
13+ u64 addr;
14+#define VHOST_MAP_RO 0x1
15+#define VHOST_MAP_WO 0x2
16+#define VHOST_MAP_RW 0x3
17+ u32 perm;
18+ u32 flags_padding;
19+ u64 __subtree_last;
20+};
21+
22+#define VHOST_IOTLB_FLAG_RETIRE 0x1
23+
24+struct vhost_iotlb {
25+ struct rb_root_cached root;
26+ struct list_head list;
27+ unsigned int limit;
28+ unsigned int nmaps;
29+ unsigned int flags;
30+};
31+
32+int vhost_iotlb_add_range(struct vhost_iotlb *iotlb, u64 start, u64 last,
33+ u64 addr, unsigned int perm);
34+void vhost_iotlb_del_range(struct vhost_iotlb *iotlb, u64 start, u64 last);
35+
36+struct vhost_iotlb *vhost_iotlb_alloc(unsigned int limit, unsigned int flags);
37+void vhost_iotlb_free(struct vhost_iotlb *iotlb);
38+void vhost_iotlb_reset(struct vhost_iotlb *iotlb);
39+
40+struct vhost_iotlb_map *
41+vhost_iotlb_itree_first(struct vhost_iotlb *iotlb, u64 start, u64 last);
42+struct vhost_iotlb_map *
43+vhost_iotlb_itree_next(struct vhost_iotlb_map *map, u64 start, u64 last);
44+
45+void vhost_iotlb_map_free(struct vhost_iotlb *iotlb,
46+ struct vhost_iotlb_map *map);
47+#endif