diff options
author | Jason Wang <jasowang@redhat.com> | 2021-10-20 12:55:51 +0800 |
---|---|---|
committer | Michael S. Tsirkin <mst@redhat.com> | 2021-10-20 04:44:05 -0400 |
commit | 7327813d17086fadabe3b27ba2d9737c8a33c5b0 (patch) | |
tree | a6c034ba59273ab3566a7a88989d46a88efc3e8e | |
parent | 81d7228647e0bd17d4f4f0434b8ed410fe5f7497 (diff) | |
download | qemu-7327813d17086fadabe3b27ba2d9737c8a33c5b0.zip |
vhost-vdpa: open device fd in net_init_vhost_vdpa()
This patch switches to open device fd in net_init_vhost_vpda(). This is
used to prepare for the multiqueue support.
Reviewed-by: Stefano Garzarella <sgarzare@redhat.com>
Signed-off-by: Jason Wang <jasowang@redhat.com>
Message-Id: <20211020045600.16082-2-jasowang@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
-rw-r--r-- | net/vhost-vdpa.c | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/net/vhost-vdpa.c b/net/vhost-vdpa.c index 6dc68d8677..fd4ff5a0fb 100644 --- a/net/vhost-vdpa.c +++ b/net/vhost-vdpa.c @@ -170,24 +170,19 @@ static NetClientInfo net_vhost_vdpa_info = { }; static int net_vhost_vdpa_init(NetClientState *peer, const char *device, - const char *name, const char *vhostdev) + const char *name, int vdpa_device_fd) { NetClientState *nc = NULL; VhostVDPAState *s; - int vdpa_device_fd = -1; int ret = 0; assert(name); nc = qemu_new_net_client(&net_vhost_vdpa_info, peer, device, name); snprintf(nc->info_str, sizeof(nc->info_str), TYPE_VHOST_VDPA); s = DO_UPCAST(VhostVDPAState, nc, nc); - vdpa_device_fd = qemu_open_old(vhostdev, O_RDWR); - if (vdpa_device_fd == -1) { - return -errno; - } + s->vhost_vdpa.device_fd = vdpa_device_fd; ret = vhost_vdpa_add(nc, (void *)&s->vhost_vdpa); if (ret) { - qemu_close(vdpa_device_fd); qemu_del_net_client(nc); } return ret; @@ -197,8 +192,20 @@ int net_init_vhost_vdpa(const Netdev *netdev, const char *name, NetClientState *peer, Error **errp) { const NetdevVhostVDPAOptions *opts; + int vdpa_device_fd, ret; assert(netdev->type == NET_CLIENT_DRIVER_VHOST_VDPA); opts = &netdev->u.vhost_vdpa; - return net_vhost_vdpa_init(peer, TYPE_VHOST_VDPA, name, opts->vhostdev); + + vdpa_device_fd = qemu_open_old(opts->vhostdev, O_RDWR); + if (vdpa_device_fd == -1) { + return -errno; + } + + ret = net_vhost_vdpa_init(peer, TYPE_VHOST_VDPA, name, vdpa_device_fd); + if (ret) { + qemu_close(vdpa_device_fd); + } + + return ret; } |