From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id C6468C4332F for ; Wed, 8 Nov 2023 10:04:14 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1r0fPg-0000Ld-0I; Wed, 08 Nov 2023 05:03:56 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1r0fPe-0000K8-CE for qemu-devel@nongnu.org; Wed, 08 Nov 2023 05:03:54 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1r0fPc-0003bO-HR for qemu-devel@nongnu.org; Wed, 08 Nov 2023 05:03:54 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1699437831; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Dk6QcyreoJ7f00isZy4XpopFxwstpVOdMmaaygkXpxw=; b=iXSGaINhdvhaUvyhtkTID7aatC8+zEGu5iKYOghorNcARxOPCKTImbpUzbZt4Yp+K3UlXs oNhwqfoTpKVkXtz3gT7AbFMzthHxMjcSVNunsaffIcrdUS+M9PeQ6ejL2WkQnUefXP5p6w klFiADF0F8t8Ma/H7/L33Z2uVHQXIYs= Received: from mail-qk1-f200.google.com (mail-qk1-f200.google.com [209.85.222.200]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-333-ZUAKSBxHPUy5BTsdAkgK_A-1; Wed, 08 Nov 2023 05:03:50 -0500 X-MC-Unique: ZUAKSBxHPUy5BTsdAkgK_A-1 Received: by mail-qk1-f200.google.com with SMTP id af79cd13be357-778a2e847f4so791140885a.0 for ; Wed, 08 Nov 2023 02:03:50 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699437829; x=1700042629; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=Dk6QcyreoJ7f00isZy4XpopFxwstpVOdMmaaygkXpxw=; b=f+pnFH+XoPsqMZAx0cGNjA948XxsXHmImsdgIDuuontmpu4Gtbig4XbeIl4ysvySSZ hQJPi6zm7T41kOJQL8gs7a4gg1ULhtG/Zgm6hbLCgRVrBlHD60Ze+g043zacFGLdrw2l ldUsEMGY1NiB8n7Uu7iZQRA0MrzJeDFpnY23N6NcX68OADLJSwULdZsMZo6e6553tmGL oyEoGZIpgQBLUKiFZ5JXdM+gLC32n+GNEuDjwV3DOX5dreXpd74r6D/tRs3ui2p0PCpp Xrz+6QUi0Z064aTkrMGNBrJa5inb7l0GgJrMgRSsxtQUNfM4r3HI0GzWB+bQ6AfFHOwH Dk/g== X-Gm-Message-State: AOJu0YyxTgY8K6/XNtIzc5YHlGpkOKo/fR+1wz7dBA9+A5Qf2RqZgkjS otVMdiHRs/yQu3Klyp3aYk+/lscTIc2V3rdFGbKGh6vgMa6bvzVQJUuSfHUFKHb8Dg9G62Z5Nb2 VCgaVnxhtQ701U1tn9VieQIA= X-Received: by 2002:a05:620a:8e84:b0:777:6d:b877 with SMTP id rf4-20020a05620a8e8400b00777006db877mr904926qkn.68.1699437829182; Wed, 08 Nov 2023 02:03:49 -0800 (PST) X-Google-Smtp-Source: AGHT+IEsZ+nPDE1wOfazFfJ1bX32DOI++EK4iOuoVUpQr6wu4MNprAtQN4bFs38pVBncuJaHJVEJYA== X-Received: by 2002:a05:620a:8e84:b0:777:6d:b877 with SMTP id rf4-20020a05620a8e8400b00777006db877mr904916qkn.68.1699437828911; Wed, 08 Nov 2023 02:03:48 -0800 (PST) Received: from ?IPV6:2a01:e0a:280:24f0:9db0:474c:ff43:9f5c? ([2a01:e0a:280:24f0:9db0:474c:ff43:9f5c]) by smtp.gmail.com with ESMTPSA id x9-20020a05620a0ec900b007743446efd1sm866515qkm.35.2023.11.08.02.03.46 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 08 Nov 2023 02:03:48 -0800 (PST) Message-ID: Date: Wed, 8 Nov 2023 11:03:45 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v4 26/41] backends/iommufd: Introduce the iommufd object Content-Language: en-US To: Markus Armbruster Cc: Zhenzhong Duan , qemu-devel@nongnu.org, alex.williamson@redhat.com, jgg@nvidia.com, nicolinc@nvidia.com, joao.m.martins@oracle.com, eric.auger@redhat.com, peterx@redhat.com, jasowang@redhat.com, kevin.tian@intel.com, yi.l.liu@intel.com, yi.y.sun@intel.com, chao.p.peng@intel.com, Paolo Bonzini , Eric Blake , =?UTF-8?Q?Daniel_P=2E_Berrang=C3=A9?= , Eduardo Habkost , Thomas Huth References: <20231102071302.1818071-1-zhenzhong.duan@intel.com> <20231102071302.1818071-27-zhenzhong.duan@intel.com> <87r0l0dc9q.fsf@pond.sub.org> From: =?UTF-8?Q?C=C3=A9dric_Le_Goater?= In-Reply-To: <87r0l0dc9q.fsf@pond.sub.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=170.10.129.124; envelope-from=clg@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 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+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Hello Markus, On 11/8/23 06:50, Markus Armbruster wrote: > Cédric Le Goater writes: > >> On 11/2/23 08:12, Zhenzhong Duan wrote: >>> From: Eric Auger >>> Introduce an iommufd object which allows the interaction >>> with the host /dev/iommu device. >>> The /dev/iommu can have been already pre-opened outside of qemu, >>> in which case the fd can be passed directly along with the >>> iommufd object: >>> This allows the iommufd object to be shared accross several >>> subsystems (VFIO, VDPA, ...). For example, libvirt would open >>> the /dev/iommu once. >>> If no fd is passed along with the iommufd object, the /dev/iommu >>> is opened by the qemu code. >>> The CONFIG_IOMMUFD option must be set to compile this new object. >>> Suggested-by: Alex Williamson >>> Signed-off-by: Eric Auger >>> Signed-off-by: Yi Liu >>> Signed-off-by: Zhenzhong Duan >>> --- >>> v4: add CONFIG_IOMMUFD check, document default case >>> MAINTAINERS | 7 ++ >>> qapi/qom.json | 22 ++++ >>> include/sysemu/iommufd.h | 46 +++++++ >>> backends/iommufd-stub.c | 59 +++++++++ >>> backends/iommufd.c | 257 +++++++++++++++++++++++++++++++++++++++ >>> backends/Kconfig | 4 + >>> backends/meson.build | 5 + >>> backends/trace-events | 12 ++ >>> qemu-options.hx | 13 ++ >>> 9 files changed, 425 insertions(+) >>> create mode 100644 include/sysemu/iommufd.h >>> create mode 100644 backends/iommufd-stub.c >>> create mode 100644 backends/iommufd.c >>> diff --git a/MAINTAINERS b/MAINTAINERS >>> index cd8d6b140f..6f35159255 100644 >>> --- a/MAINTAINERS >>> +++ b/MAINTAINERS >>> @@ -2135,6 +2135,13 @@ F: hw/vfio/ap.c >>> F: docs/system/s390x/vfio-ap.rst >>> L: qemu-s390x@nongnu.org >>> +iommufd >>> +M: Yi Liu >>> +M: Eric Auger >>> +S: Supported >>> +F: backends/iommufd.c >>> +F: include/sysemu/iommufd.h >>> + >>> vhost >>> M: Michael S. Tsirkin >>> S: Supported >>> diff --git a/qapi/qom.json b/qapi/qom.json >>> index c53ef978ff..27300add48 100644 >>> --- a/qapi/qom.json >>> +++ b/qapi/qom.json >>> @@ -794,6 +794,24 @@ >>> { 'struct': 'VfioUserServerProperties', >>> 'data': { 'socket': 'SocketAddress', 'device': 'str' } } >>> +## >>> +# @IOMMUFDProperties: >>> +# >>> +# Properties for iommufd objects. >>> +# >>> +# @fd: file descriptor name previously passed via 'getfd' command, >>> +# which represents a pre-opened /dev/iommu. This allows the >>> +# iommufd object to be shared accross several subsystems >>> +# (VFIO, VDPA, ...), and the file descriptor to be shared >>> +# with other process, e.g. DPDK. (default: QEMU opens >>> +# /dev/iommu by itself) >>> +# >>> +# Since: 8.2 >>> +## >>> +{ 'struct': 'IOMMUFDProperties', >>> + 'data': { '*fd': 'str' }, >>> + 'if': 'CONFIG_IOMMUFD' } >> >> >> Activating or not IOMMUFD on a platform is a configuration choice >> and it is not a dependency on an external resource. I would make >> things simpler and drop all the #ifdef in the documentation files. > > What exactly are you proposing? I would like to simplify the configuration part of this new IOMMUFD feature and avoid a ./configure option to enable/disable the feature since it has no external dependencies and can be compiled on all platforms. However, we know that it only makes sense to have the IOMMUFD backend on platforms s390x, aarch64, x86_64. So I am proposing as an improvement to enable IOMMUFD only on these platforms with this addition : imply IOMMUFD to hw/{i386,s390x,arm}/Kconfig files. This gives us the possibility to compile out the feature downstream if something goes wrong, using the files under : configs/devices/. Given that the IOMMUFD feature doesn't have any external dependencies and that the IOMMUFD backend object is common to all platforms, I am also proposing to remove all the CONFIG_IOMMUFD define usage in the documentation file "qemu-options.hx" and the schema file "qapi/qom.json". > > The use of 'if': 'CONFIG_IOMMUFD' in the QAPI schema enables > introspection with query-qmp-schema: when ObjectType @iommufd exists, > QEMU supports creating the object. Or am I confused? Object iommufd should always exist since it is common to all. Is that acceptable ? Thanks, C. > >> There might be a way to remove the documentation also. Not a big >> issue for now. >> >> >>> + >>> ## >>> # @RngProperties: >>> # >>> @@ -934,6 +952,8 @@ >>> 'input-barrier', >>> { 'name': 'input-linux', >>> 'if': 'CONFIG_LINUX' }, >>> + { 'name': 'iommufd', >>> + 'if': 'CONFIG_IOMMUFD' }, >>> 'iothread', >>> 'main-loop', >>> { 'name': 'memory-backend-epc', >>> @@ -1003,6 +1023,8 @@ >>> 'input-barrier': 'InputBarrierProperties', >>> 'input-linux': { 'type': 'InputLinuxProperties', >>> 'if': 'CONFIG_LINUX' }, >>> + 'iommufd': { 'type': 'IOMMUFDProperties', >>> + 'if': 'CONFIG_IOMMUFD' }, >>> 'iothread': 'IothreadProperties', >>> 'main-loop': 'MainLoopProperties', >>> 'memory-backend-epc': { 'type': 'MemoryBackendEpcProperties', > > [...] >