From nobody Thu May 9 23:06:14 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1665220033; cv=none; d=zohomail.com; s=zohoarc; b=CcqjHFcX06dRoBV3hgKbG0bJfrk4pKT/mmkwBCNA8TU2A+UFKaoYdkzVOQjThWosOdkynOWDA4i8yfbkzwBKgLO2taIQvQQCz9vYBvToywliH05ct+zSR0pfyfSDV1x3Vnrz5E21757UtCAvh2NY10b2mYBgVNIbxQQOUYHyLYI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1665220033; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:To; bh=ZWVQ+0IiKYBeOue4ny4mNo4gGZ3rBJUAvmK/ZJbCM1Q=; b=kj8Ryoz2Dz0LCL0iFTS/RusibkQuutSWRw0b0bqcm2gtFr8F6u322oi0tCZ4x3IUOdvkTzZFmUQpfPj5xoWY1l4IFuY+3fYL1Y18ke/n+bdY3+UOPBDloDso+aMh0VR7aIz3L3qnED/HGMmZyvabgFeW6GG0FcpzZQmkkxH5K+I= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1665220033084128.62545434770323; Sat, 8 Oct 2022 02:07:13 -0700 (PDT) Received: from localhost ([::1]:49140 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oh5nb-0007Tt-IX for importer@patchew.org; Sat, 08 Oct 2022 05:07:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36286) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oh5lE-0005vA-Dw for qemu-devel@nongnu.org; Sat, 08 Oct 2022 05:04:44 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:14084) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oh5lA-00077Y-OK for qemu-devel@nongnu.org; Sat, 08 Oct 2022 05:04:42 -0400 Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 298931Im021832; Sat, 8 Oct 2022 09:04:34 GMT Received: from phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta01.appoci.oracle.com [138.1.114.2]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3k30tt0ajc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Sat, 08 Oct 2022 09:04:33 +0000 Received: from pps.filterd (phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 2986wYpn039093; Sat, 8 Oct 2022 09:04:32 GMT Received: from ban25x6uut24.us.oracle.com (ban25x6uut24.us.oracle.com [10.153.73.24]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 3k2yn1dhb8-1; Sat, 08 Oct 2022 09:04:32 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : mime-version : content-type : content-transfer-encoding; s=corp-2022-7-12; bh=ZWVQ+0IiKYBeOue4ny4mNo4gGZ3rBJUAvmK/ZJbCM1Q=; b=wuWTuuoYFkn21ZMZSdSvqfCfmTgTYjB6EybZ/p14Jc7qtxZfTj0TgfeRG0ykGYtAHDcQ yk0USLfkZg3vSnFsCx1lcT3I6/INF0pGPEAd8GysTzkrAawZ5kCwc/kWYgcEzcOU1sNH QLNj2ycEqzRVrLENHefkh8lsrVL1IdYyHtlm+XgqYjTUbytAOuUjByt3EtIuIjcd+fKV L9gL9iG59GjQvsMMPedCIX34UupChSvhWhJZ6e9rzVr+rwYoQy4pz28XOaEzlb+EgsTD e8S1UslFW/0hqP+Q7XC5YDe5ABqfMlXflAQE8N6TOP1BRhbjjCy+54N5fHuhWD24RbHy nA== From: Si-Wei Liu To: qemu-devel@nongnu.org Cc: jasowang@redhat.com, eblake@redhat.com, armbru@redhat.com, eperezma@redhat.com Subject: [PATCH v2] vhost-vdpa: allow passing opened vhostfd to vhost-vdpa Date: Sat, 8 Oct 2022 00:58:58 -0700 Message-Id: <1665215938-24473-1-git-send-email-si-wei.liu@oracle.com> X-Mailer: git-send-email 1.8.3.1 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.895,Hydra:6.0.528,FMLib:17.11.122.1 definitions=2022-10-07_04,2022-10-07_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 bulkscore=0 adultscore=0 malwarescore=0 phishscore=0 suspectscore=0 mlxscore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2209130000 definitions=main-2210080056 X-Proofpoint-GUID: a2ojqMVrwYk6_R9sjYeOsNuSHHRq8Jss X-Proofpoint-ORIG-GUID: a2ojqMVrwYk6_R9sjYeOsNuSHHRq8Jss Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.177.32; envelope-from=si-wei.liu@oracle.com; helo=mx0b-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.com) X-ZM-MESSAGEID: 1665220142044100001 Similar to other vhost backends, vhostfd can be passed to vhost-vdpa backend as another parameter to instantiate vhost-vdpa net client. This would benefit the use case where only open file descriptors, as opposed to raw vhost-vdpa device paths, are accessible from the QEMU process. (qemu) netdev_add type=3Dvhost-vdpa,vhostfd=3D61,id=3Dvhost-vdpa1 Signed-off-by: Si-Wei Liu Acked-by: Eugenio P=C3=A9rez --- v2: - fixed typo in commit message - s/fd's/file descriptors/ --- net/vhost-vdpa.c | 25 ++++++++++++++++++++----- qapi/net.json | 3 +++ qemu-options.hx | 6 ++++-- 3 files changed, 27 insertions(+), 7 deletions(-) diff --git a/net/vhost-vdpa.c b/net/vhost-vdpa.c index 182b3a1..366b070 100644 --- a/net/vhost-vdpa.c +++ b/net/vhost-vdpa.c @@ -683,14 +683,29 @@ int net_init_vhost_vdpa(const Netdev *netdev, const c= har *name, =20 assert(netdev->type =3D=3D NET_CLIENT_DRIVER_VHOST_VDPA); opts =3D &netdev->u.vhost_vdpa; - if (!opts->vhostdev) { - error_setg(errp, "vdpa character device not specified with vhostde= v"); + if (!opts->has_vhostdev && !opts->has_vhostfd) { + error_setg(errp, + "vhost-vdpa: neither vhostdev=3D nor vhostfd=3D was spe= cified"); return -1; } =20 - vdpa_device_fd =3D qemu_open(opts->vhostdev, O_RDWR, errp); - if (vdpa_device_fd =3D=3D -1) { - return -errno; + if (opts->has_vhostdev && opts->has_vhostfd) { + error_setg(errp, + "vhost-vdpa: vhostdev=3D and vhostfd=3D are mutually ex= clusive"); + return -1; + } + + if (opts->has_vhostdev) { + vdpa_device_fd =3D qemu_open(opts->vhostdev, O_RDWR, errp); + if (vdpa_device_fd =3D=3D -1) { + return -errno; + } + } else if (opts->has_vhostfd) { + vdpa_device_fd =3D monitor_fd_param(monitor_cur(), opts->vhostfd, = errp); + if (vdpa_device_fd =3D=3D -1) { + error_prepend(errp, "vhost-vdpa: unable to parse vhostfd: "); + return -1; + } } =20 r =3D vhost_vdpa_get_features(vdpa_device_fd, &features, errp); diff --git a/qapi/net.json b/qapi/net.json index dd088c0..926ecc8 100644 --- a/qapi/net.json +++ b/qapi/net.json @@ -442,6 +442,8 @@ # @vhostdev: path of vhost-vdpa device # (default:'/dev/vhost-vdpa-0') # +# @vhostfd: file descriptor of an already opened vhost vdpa device +# # @queues: number of queues to be created for multiqueue vhost-vdpa # (default: 1) # @@ -456,6 +458,7 @@ { 'struct': 'NetdevVhostVDPAOptions', 'data': { '*vhostdev': 'str', + '*vhostfd': 'str', '*queues': 'int', '*x-svq': {'type': 'bool', 'features' : [ 'unstable'] } } } =20 diff --git a/qemu-options.hx b/qemu-options.hx index 913c71e..c040f74 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -2774,8 +2774,10 @@ DEF("netdev", HAS_ARG, QEMU_OPTION_netdev, " configure a vhost-user network, backed by a chardev '= dev'\n" #endif #ifdef __linux__ - "-netdev vhost-vdpa,id=3Dstr,vhostdev=3D/path/to/dev\n" + "-netdev vhost-vdpa,id=3Dstr[,vhostdev=3D/path/to/dev][,vhostfd=3Dh]\n" " configure a vhost-vdpa network,Establish a vhost-vdpa= netdev\n" + " use 'vhostdev=3D/path/to/dev' to open a vhost vdpa de= vice\n" + " use 'vhostfd=3Dh' to connect to an already opened vho= st vdpa device\n" #endif #ifdef CONFIG_VMNET "-netdev vmnet-host,id=3Dstr[,isolated=3Don|off][,net-uuid=3Duuid]\n" @@ -3280,7 +3282,7 @@ SRST -netdev type=3Dvhost-user,id=3Dnet0,chardev=3Dchr0 \ -device virtio-net-pci,netdev=3Dnet0 =20 -``-netdev vhost-vdpa,vhostdev=3D/path/to/dev`` +``-netdev vhost-vdpa[,vhostdev=3D/path/to/dev][,vhostfd=3Dh]`` Establish a vhost-vdpa netdev. =20 vDPA device is a device that uses a datapath which complies with --=20 1.8.3.1