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.
Showing the changes to include/linux (1 of 8 files). Show all
Unified · Split
| @@ -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 | |