vfio: avoid inefficient operations on VFIO group in vfio_pin/unpin_pages
vfio_group_pin_pages() and vfio_group_unpin_pages() are introduced to avoid inefficient search/check/ref/deref opertions associated with VFIO group as those in each calling into vfio_pin_pages() and vfio_unpin_pages(). VFIO group is taken as arg directly. The callers combine search/check/ref/deref operations associated with VFIO group by calling vfio_group_get_external_user()/vfio_group_get_external_user_from_dev() beforehand, and vfio_group_put_external_user() afterwards. Suggested-by: Alex Williamson <alex.williamson@redhat.com> Signed-off-by: Yan Zhao <yan.y.zhao@intel.com> Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
This commit is contained in:
committed by
Alex Williamson
parent
8d46c0cca5
commit
40280cf7e8
@@ -111,6 +111,12 @@ extern int vfio_pin_pages(struct device *dev, unsigned long *user_pfn,
|
||||
extern int vfio_unpin_pages(struct device *dev, unsigned long *user_pfn,
|
||||
int npage);
|
||||
|
||||
extern int vfio_group_pin_pages(struct vfio_group *group,
|
||||
unsigned long *user_iova_pfn, int npage,
|
||||
int prot, unsigned long *phys_pfn);
|
||||
extern int vfio_group_unpin_pages(struct vfio_group *group,
|
||||
unsigned long *user_iova_pfn, int npage);
|
||||
|
||||
extern int vfio_dma_rw(struct vfio_group *group, dma_addr_t user_iova,
|
||||
void *data, size_t len, bool write);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user