Add the check for object iommufd, if the iommfd enabled. pass the information to vhost_vdpa. vhost_vdpa dev start will check this bool and connect to the iommufd
Signed-off-by: Cindy Lu <l...@redhat.com> --- net/vhost-vdpa.c | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/net/vhost-vdpa.c b/net/vhost-vdpa.c index 1a13a34d35..d4819c28e1 100644 --- a/net/vhost-vdpa.c +++ b/net/vhost-vdpa.c @@ -659,16 +659,12 @@ static const VhostShadowVirtqueueOps vhost_vdpa_net_svq_ops = { .avail_handler = vhost_vdpa_net_handle_ctrl_avail, }; -static NetClientState *net_vhost_vdpa_init(NetClientState *peer, - const char *device, - const char *name, - int vdpa_device_fd, - int queue_pair_index, - int nvqs, - bool is_datapath, - bool svq, - struct vhost_vdpa_iova_range iova_range, - VhostIOVATree *iova_tree) +static NetClientState * +net_vhost_vdpa_init(NetClientState *peer, const char *device, const char *name, + int vdpa_device_fd, int queue_pair_index, int nvqs, + bool is_datapath, bool svq, bool enable_iommufd, + struct vhost_vdpa_iova_range iova_range, + VhostIOVATree *iova_tree) { NetClientState *nc = NULL; VhostVDPAState *s; @@ -691,6 +687,7 @@ static NetClientState *net_vhost_vdpa_init(NetClientState *peer, s->vhost_vdpa.iova_range = iova_range; s->vhost_vdpa.shadow_data = svq; s->vhost_vdpa.iova_tree = iova_tree; + s->vhost_vdpa.enable_iommufd = enable_iommufd; if (!is_datapath) { s->cvq_cmd_out_buffer = qemu_memalign(qemu_real_host_page_size(), vhost_vdpa_net_cvq_cmd_page_len()); @@ -793,6 +790,12 @@ int net_init_vhost_vdpa(const Netdev *netdev, const char *name, } } + bool enable_iommufd = false; + if (opts->iommufd) { + enable_iommufd = true; + printf("[%s] %d called\n", __func__, __LINE__); + } + r = vhost_vdpa_get_features(vdpa_device_fd, &features, errp); if (unlikely(r < 0)) { goto err; @@ -825,15 +828,15 @@ int net_init_vhost_vdpa(const Netdev *netdev, const char *name, for (i = 0; i < queue_pairs; i++) { ncs[i] = net_vhost_vdpa_init(peer, TYPE_VHOST_VDPA, name, vdpa_device_fd, i, 2, true, opts->x_svq, - iova_range, iova_tree); + enable_iommufd, iova_range, iova_tree); if (!ncs[i]) goto err; } if (has_cvq) { - nc = net_vhost_vdpa_init(peer, TYPE_VHOST_VDPA, name, - vdpa_device_fd, i, 1, false, - opts->x_svq, iova_range, iova_tree); + nc = net_vhost_vdpa_init(peer, TYPE_VHOST_VDPA, name, vdpa_device_fd, i, + 1, false, opts->x_svq, enable_iommufd, + iova_range, iova_tree); if (!nc) goto err; } -- 2.34.3