From nobody Tue Nov 26 09:42:25 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=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1708971341; cv=none; d=zohomail.com; s=zohoarc; b=GXOyyhQqF9TZIw3H0S/ERINSz9uohskAm1QhLXSSkE7pdG/XgpgtOHFnISK72hsG7b1eEQ1nqtGS221BpOiuDSLYtXJUuN2lpedj5c5vAZkOmusT4e+CAGAoOSZ97OqSb3LUFkh9I1BSgIWSwxnq3E4MfHg228nB4gT107IKJj4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1708971341; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=tLxoFwBniMzzRTmjC94fnXeOryYlKWv3cZzBB1FVazQ=; b=eIi0SHoXm5xgwPWfWU2JuGpyUW+lChE1u9tWxH4lFyh91jFTa2aYRdkoQfBatqUdVT0d9VmXceQr68cTeG5uxDqnwHhBJId+Rsw0enZ/aDhe75fWWFjgXNCtuXRgAh2EnKZ/ClgMXMHFWyyT6lIQlqsdIcKezjRlhRXoo8KKAso= 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 1708971341420795.055347473807; Mon, 26 Feb 2024 10:15:41 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1refUl-0005FP-0d; Mon, 26 Feb 2024 13:14:31 -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 1refUi-0005Ek-SW for qemu-devel@nongnu.org; Mon, 26 Feb 2024 13:14:28 -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 1refUU-00058y-DF for qemu-devel@nongnu.org; Mon, 26 Feb 2024 13:14:25 -0500 Received: from mimecast-mx02.redhat.com (mx-ext.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-211-htOJg4IUPlShTb5kYYX9Lw-1; Mon, 26 Feb 2024 13:14:10 -0500 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.rdu2.redhat.com [10.11.54.2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 41C743C000BC; Mon, 26 Feb 2024 18:14:10 +0000 (UTC) Received: from laptop.redhat.com (unknown [10.39.192.130]) by smtp.corp.redhat.com (Postfix) with ESMTP id 4BA1340C1020; Mon, 26 Feb 2024 18:14:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1708971252; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=tLxoFwBniMzzRTmjC94fnXeOryYlKWv3cZzBB1FVazQ=; b=OIx6aekPUl4KcH8oR0DYdkcp8J62d0Pr+0iY+g/Ojke3vbtoxltcu6P/dGdELI8rxSESKe j1jSE4WdgQzpiR2mrTw6IWvr4maGv6RdcPhtWTwxwAYXl3oEtb9ics4KIWUfQ0ufbbvOa0 zcTflfoHVdX/giCuPj0pDA6FstrV3Ns= X-MC-Unique: htOJg4IUPlShTb5kYYX9Lw-1 From: Eric Auger To: eric.auger.pro@gmail.com, eric.auger@redhat.com, qemu-devel@nongnu.org, qemu-arm@nongnu.org, mst@redhat.com, jean-philippe@linaro.org, peter.maydell@linaro.org, clg@redhat.com, yanghliu@redhat.com Cc: alex.williamson@redhat.com, zhenzhong.duan@intel.com, jasowang@redhat.com, pbonzini@redhat.com, berrange@redhat.com Subject: [PATCH v5 2/3] virtio-iommu: Add a granule property Date: Mon, 26 Feb 2024 19:11:11 +0100 Message-ID: <20240226181337.24148-3-eric.auger@redhat.com> In-Reply-To: <20240226181337.24148-1-eric.auger@redhat.com> References: <20240226181337.24148-1-eric.auger@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.2 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=170.10.129.124; envelope-from=eric.auger@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.014, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=unavailable 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-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1708971341869100001 Content-Type: text/plain; charset="utf-8" This allows to choose which granule will be used by default by the virtio-iommu. Current page size mask default is qemu_target_page_mask so this translates into a 4K granule. Signed-off-by: Eric Auger Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Zhenzhong Duan --- v4 -> v5: - use -(n * KiB) (Phild) v3 -> v4: - granule_mode introduction moved to that patch --- include/hw/virtio/virtio-iommu.h | 2 ++ hw/virtio/virtio-iommu.c | 28 +++++++++++++++++++++++++--- qemu-options.hx | 3 +++ 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/include/hw/virtio/virtio-iommu.h b/include/hw/virtio/virtio-io= mmu.h index 5fbe4677c2..f2785f7997 100644 --- a/include/hw/virtio/virtio-iommu.h +++ b/include/hw/virtio/virtio-iommu.h @@ -24,6 +24,7 @@ #include "hw/virtio/virtio.h" #include "hw/pci/pci.h" #include "qom/object.h" +#include "qapi/qapi-types-virtio.h" =20 #define TYPE_VIRTIO_IOMMU "virtio-iommu-device" #define TYPE_VIRTIO_IOMMU_PCI "virtio-iommu-pci" @@ -67,6 +68,7 @@ struct VirtIOIOMMU { Notifier machine_done; bool granule_frozen; uint8_t aw_bits; + GranuleMode granule_mode; }; =20 #endif diff --git a/hw/virtio/virtio-iommu.c b/hw/virtio/virtio-iommu.c index 2ec5ef3cd1..33e0520bc8 100644 --- a/hw/virtio/virtio-iommu.c +++ b/hw/virtio/virtio-iommu.c @@ -29,6 +29,7 @@ #include "sysemu/reset.h" #include "sysemu/sysemu.h" #include "qemu/reserved-region.h" +#include "qemu/units.h" #include "qapi/error.h" #include "qemu/error-report.h" #include "trace.h" @@ -1115,8 +1116,8 @@ static int virtio_iommu_notify_flag_changed(IOMMUMemo= ryRegion *iommu_mr, } =20 /* - * The default mask (TARGET_PAGE_MASK) is the smallest supported guest gra= nule, - * for example 0xfffffffffffff000. When an assigned device has page size + * The default mask depends on the "granule" property. For example, with + * 4K granule, it is -(4 * KiB). When an assigned device has page size * restrictions due to the hardware IOMMU configuration, apply this restri= ction * to the mask. */ @@ -1313,7 +1314,26 @@ static void virtio_iommu_device_realize(DeviceState = *dev, Error **errp) * in vfio realize */ s->config.bypass =3D s->boot_bypass; - s->config.page_size_mask =3D qemu_target_page_mask(); + + switch (s->granule_mode) { + case GRANULE_MODE_4K: + s->config.page_size_mask =3D -(4 * KiB); + break; + case GRANULE_MODE_8K: + s->config.page_size_mask =3D -(8 * KiB); + break; + case GRANULE_MODE_16K: + s->config.page_size_mask =3D -(16 * KiB); + break; + case GRANULE_MODE_64K: + s->config.page_size_mask =3D -(64 * KiB); + break; + case GRANULE_MODE_HOST: + s->config.page_size_mask =3D qemu_real_host_page_mask(); + break; + default: + error_setg(errp, "Unsupported granule mode"); + } if (s->aw_bits < 32 || s->aw_bits > 64) { error_setg(errp, "aw-bits must be within [32,64]"); } @@ -1527,6 +1547,8 @@ static Property virtio_iommu_properties[] =3D { TYPE_PCI_BUS, PCIBus *), DEFINE_PROP_BOOL("boot-bypass", VirtIOIOMMU, boot_bypass, true), DEFINE_PROP_UINT8("aw-bits", VirtIOIOMMU, aw_bits, 0), + DEFINE_PROP_GRANULE_MODE("granule", VirtIOIOMMU, granule_mode, + GRANULE_MODE_4K), DEFINE_PROP_END_OF_LIST(), }; =20 diff --git a/qemu-options.hx b/qemu-options.hx index 3b670758b0..c7b43b67d5 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -1179,6 +1179,9 @@ SRST ``aw-bits=3Dval`` (val between 32 and 64, default depends on machine) This decides the address width of IOVA address space. It defaults to 39 bits on q35 machines and 48 bits on ARM virt machines. + ``granule=3Dval`` (possible values are 4K, 8K, 16K, 64K and host) + This decides the default granule to be be exposed by the + virtio-iommu. If host, the granule matches the host page size. =20 ERST =20 --=20 2.41.0