From: Jean-Philippe Brucker <jean-philippe@linaro.org>
To: Nicolin Chen <nicolinc@nvidia.com>
Cc: jgg@nvidia.com, robin.murphy@arm.com, will@kernel.org,
eric.auger@redhat.com, kevin.tian@intel.com,
baolu.lu@linux.intel.com, joro@8bytes.org,
shameerali.kolothum.thodi@huawei.com,
linux-arm-kernel@lists.infradead.org, iommu@lists.linux.dev,
linux-kernel@vger.kernel.org, yi.l.liu@intel.com
Subject: Re: [PATCH v1 02/14] iommufd: Add nesting related data structures for ARM SMMUv3
Date: Thu, 9 Mar 2023 13:42:17 +0000 [thread overview]
Message-ID: <20230309134217.GA1673607@myrica> (raw)
In-Reply-To: <364cfbe5b228ab178093db2de13fa3accf7a6120.1678348754.git.nicolinc@nvidia.com>
Hi Nicolin,
On Thu, Mar 09, 2023 at 02:53:38AM -0800, Nicolin Chen wrote:
> Add the following data structures for corresponding ioctls:
> iommu_hwpt_arm_smmuv3 => IOMMUFD_CMD_HWPT_ALLOC
> iommu_hwpt_invalidate_arm_smmuv3 => IOMMUFD_CMD_HWPT_INVALIDATE
>
> Also, add IOMMU_HW_INFO_TYPE_ARM_SMMUV3 and IOMMU_PGTBL_TYPE_ARM_SMMUV3_S1
> to the header and corresponding type/size arrays.
>
> Signed-off-by: Nicolin Chen <nicolinc@nvidia.com>
> +/**
> + * struct iommu_hwpt_arm_smmuv3 - ARM SMMUv3 specific page table data
> + *
> + * @flags: page table entry attributes
> + * @s2vmid: Virtual machine identifier
> + * @s1ctxptr: Stage-1 context descriptor pointer
> + * @s1cdmax: Number of CDs pointed to by s1ContextPtr
> + * @s1fmt: Stage-1 Format
> + * @s1dss: Default substream
> + */
> +struct iommu_hwpt_arm_smmuv3 {
> +#define IOMMU_SMMUV3_FLAG_S2 (1 << 0) /* if unset, stage-1 */
I don't understand the purpose of this flag, since the structure only
provides stage-1 configuration fields
> +#define IOMMU_SMMUV3_FLAG_VMID (1 << 1) /* vmid override */
Doesn't this break isolation? The VMID space is global for the SMMU, so
the guest could access cached mappings of another device
> + __u64 flags;
> + __u32 s2vmid;
> + __u32 __reserved;
> + __u64 s1ctxptr;
> + __u64 s1cdmax;
> + __u64 s1fmt;
> + __u64 s1dss;
> +};
> +
> +/**
> + * struct iommu_hwpt_invalidate_arm_smmuv3 - ARM SMMUv3 cahce invalidation info
> + * @flags: boolean attributes of cache invalidation command
> + * @opcode: opcode of cache invalidation command
> + * @ssid: SubStream ID
> + * @granule_size: page/block size of the mapping in bytes
> + * @range: IOVA range to invalidate
> + */
> +struct iommu_hwpt_invalidate_arm_smmuv3 {
> +#define IOMMU_SMMUV3_CMDQ_TLBI_VA_LEAF (1 << 0)
> + __u64 flags;
> + __u8 opcode;
> + __u8 padding[3];
> + __u32 asid;
> + __u32 ssid;
> + __u32 granule_size;
> + struct iommu_iova_range range;
> +};
Although we can keep the alloc and hardware info separate for each IOMMU
architecture, we should try to come up with common invalidation methods.
It matters because things like vSVA, or just efficient dynamic mappings,
will require optimal invalidation latency. A paravirtual interface like
vhost-iommu can help with that, as the host kernel will handle guest
invalidations directly instead of doing a round-trip to host userspace
(and we'll likely want the same path for PRI.)
Supporting HW page tables for a common PV IOMMU does require some
architecture-specific knowledge, but invalidation messages contain roughly
the same information on all architectures. The PV IOMMU won't include
command opcodes for each possible architecture if one generic command does
the same job.
Ideally I'd like something like this for vhost-iommu:
* slow path through userspace for complex requests like attach-table and
probe, where the VMM can decode arch-specific information and translate
them to iommufd and vhost-iommu ioctls to update the configuration.
* fast path within the kernel for performance-critical requests like
invalidate, page request and response. It would be absurd for the
vhost-iommu driver to translate generic invalidation requests from the
guest into arch-specific commands with special opcodes, when the next
step is calling the IOMMU driver which does that for free.
During previous discussions we came up with generic invalidations that
could fit both Arm and x86 [1][2]. The only difference was the ASID
(called archid/id in those proposals) which VT-d didn't need. Could we try
to build on that?
[1] https://elixir.bootlin.com/linux/v5.17/source/include/uapi/linux/iommu.h#L161
[2] https://lists.oasis-open.org/archives/virtio-dev/202102/msg00014.html
Thanks,
Jean
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2023-03-09 13:43 UTC|newest]
Thread overview: 165+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-09 10:53 [PATCH v1 00/14] Add Nested Translation Support for SMMUv3 Nicolin Chen
2023-03-09 10:53 ` [PATCH v1 01/14] iommu: Add iommu_get_unmanaged_domain helper Nicolin Chen
2023-03-09 12:51 ` Robin Murphy
2023-03-09 14:19 ` Jason Gunthorpe
2023-03-09 19:04 ` Robin Murphy
2023-03-10 0:23 ` Jason Gunthorpe
2023-03-10 8:41 ` Eric Auger
2023-03-10 15:55 ` Jason Gunthorpe
2023-03-16 1:21 ` Nicolin Chen
2023-03-16 18:42 ` Robin Murphy
2023-03-16 20:01 ` Nicolin Chen
2023-03-20 12:51 ` Jason Gunthorpe
2023-03-10 10:14 ` Eric Auger
2023-03-10 15:33 ` Jason Gunthorpe
2023-03-10 15:44 ` Shameerali Kolothum Thodi
2023-03-10 15:56 ` Jason Gunthorpe
2023-03-10 16:07 ` Shameerali Kolothum Thodi
2023-03-10 16:21 ` Jason Gunthorpe
2023-03-10 16:30 ` Shameerali Kolothum Thodi
2023-03-10 17:03 ` Jason Gunthorpe
2023-03-22 16:07 ` Eric Auger
2023-03-22 17:02 ` Jason Gunthorpe
2023-03-22 17:41 ` Eric Auger
2023-03-22 18:07 ` Jason Gunthorpe
2023-03-16 19:51 ` Nicolin Chen
2023-03-16 19:56 ` Shameerali Kolothum Thodi
2023-03-22 15:44 ` Eric Auger
2023-03-09 10:53 ` [PATCH v1 02/14] iommufd: Add nesting related data structures for ARM SMMUv3 Nicolin Chen
2023-03-09 13:42 ` Jean-Philippe Brucker [this message]
2023-03-09 14:48 ` Jason Gunthorpe
2023-03-09 18:26 ` Jean-Philippe Brucker
2023-03-09 21:01 ` Jason Gunthorpe
2023-03-10 12:16 ` Jean-Philippe Brucker
2023-03-10 14:52 ` Robin Murphy
2023-03-10 15:25 ` Jason Gunthorpe
2023-03-10 15:57 ` Robin Murphy
2023-03-10 16:03 ` Jason Gunthorpe
2023-03-17 10:10 ` Tian, Kevin
2023-03-17 10:04 ` Tian, Kevin
2023-03-10 4:50 ` Nicolin Chen
2023-03-10 12:54 ` Jean-Philippe Brucker
2023-03-10 14:00 ` Jason Gunthorpe
2023-03-10 16:06 ` Jason Gunthorpe
2023-03-16 0:59 ` Nicolin Chen
2023-03-09 15:26 ` Shameerali Kolothum Thodi
2023-03-09 15:40 ` Jason Gunthorpe
2023-03-09 15:51 ` Shameerali Kolothum Thodi
2023-03-09 15:59 ` Jason Gunthorpe
2023-03-09 16:07 ` Shameerali Kolothum Thodi
2023-03-10 5:26 ` Nicolin Chen
2023-03-10 5:36 ` Nicolin Chen
2023-03-10 12:55 ` Jason Gunthorpe
2023-03-10 5:18 ` Nicolin Chen
2023-03-10 5:04 ` Nicolin Chen
2023-03-10 11:33 ` Eric Auger
2023-03-10 12:51 ` Jason Gunthorpe
2023-03-17 10:17 ` Tian, Kevin
2023-03-09 10:53 ` [PATCH v1 03/14] iommufd/device: Setup MSI on kernel-managed domains Nicolin Chen
2023-03-10 16:45 ` Eric Auger
2023-03-11 0:17 ` Nicolin Chen
2023-03-09 10:53 ` [PATCH v1 04/14] iommu/arm-smmu-v3: Add arm_smmu_hw_info Nicolin Chen
2023-03-09 13:03 ` Robin Murphy
2023-03-10 1:17 ` Nicolin Chen
2023-03-10 15:28 ` Robin Murphy
2023-03-16 0:13 ` Nicolin Chen
2023-03-16 15:19 ` Robin Murphy
2023-03-16 20:06 ` Nicolin Chen
2023-04-12 7:47 ` Nicolin Chen
2023-03-09 10:53 ` [PATCH v1 05/14] iommu/arm-smmu-v3: Remove ARM_SMMU_DOMAIN_NESTED Nicolin Chen
2023-03-10 16:39 ` Eric Auger
2023-03-10 17:05 ` Jason Gunthorpe
2023-03-11 0:24 ` Nicolin Chen
2023-03-11 0:23 ` Nicolin Chen
2023-03-09 10:53 ` [PATCH v1 06/14] iommu/arm-smmu-v3: Unset corresponding STE fields when s2_cfg is NULL Nicolin Chen
2023-03-09 13:13 ` Robin Murphy
2023-03-09 18:24 ` Shameerali Kolothum Thodi
2023-03-10 1:54 ` Nicolin Chen
2023-03-09 10:53 ` [PATCH v1 07/14] iommu/arm-smmu-v3: Add STRTAB_STE_0_CFG_NESTED for 2-stage translation Nicolin Chen
2023-03-09 10:53 ` [PATCH v1 08/14] iommu/arm-smmu-v3: Prepare for nested domain support Nicolin Chen
2023-03-10 20:39 ` Robin Murphy
2023-03-11 12:40 ` Nicolin Chen
2023-03-09 10:53 ` [PATCH v1 09/14] iommu/arm-smmu-v3: Implement arm_smmu_get_unmanaged_domain Nicolin Chen
2023-03-09 10:53 ` [PATCH v1 10/14] iommu/arm-smmu-v3: Pass in user_cfg to arm_smmu_domain_finalise Nicolin Chen
2023-03-09 10:53 ` [PATCH v1 11/14] iommu/arm-smmu-v3: Add arm_smmu_domain_alloc_user Nicolin Chen
2023-03-24 15:28 ` Eric Auger
2023-03-24 17:40 ` Nicolin Chen
2023-03-24 17:50 ` Jason Gunthorpe
2023-03-24 18:00 ` Nicolin Chen
2023-03-24 15:33 ` Eric Auger
2023-03-24 17:43 ` Nicolin Chen
2023-03-09 10:53 ` [PATCH v1 12/14] iommu/arm-smmu-v3: Support IOMMU_DOMAIN_NESTED type of allocations Nicolin Chen
2023-03-09 13:20 ` Robin Murphy
2023-03-09 14:28 ` Robin Murphy
2023-03-10 1:34 ` Nicolin Chen
2023-03-24 15:44 ` Eric Auger
2023-03-24 16:30 ` Jason Gunthorpe
2023-03-24 17:50 ` Nicolin Chen
2023-03-24 17:51 ` Jason Gunthorpe
2023-03-24 17:55 ` Nicolin Chen
2023-03-09 10:53 ` [PATCH v1 13/14] iommu/arm-smmu-v3: Add CMDQ_OP_TLBI_NH_VAA and CMDQ_OP_TLBI_NH_ALL Nicolin Chen
2023-03-09 13:44 ` Robin Murphy
2023-03-10 1:19 ` Nicolin Chen
2023-03-09 10:53 ` [PATCH v1 14/14] iommu/arm-smmu-v3: Add arm_smmu_cache_invalidate_user Nicolin Chen
2023-03-09 14:49 ` Robin Murphy
2023-03-09 15:31 ` Jason Gunthorpe
2023-03-10 4:20 ` Nicolin Chen
2023-03-10 16:19 ` Jason Gunthorpe
2023-03-11 11:56 ` Nicolin Chen
2023-03-11 12:53 ` Nicolin Chen
2023-03-20 13:03 ` Jason Gunthorpe
2023-03-20 15:56 ` Nicolin Chen
2023-03-20 16:04 ` Jason Gunthorpe
2023-03-20 16:59 ` Nicolin Chen
2023-03-20 18:45 ` Jason Gunthorpe
2023-03-20 21:22 ` Nicolin Chen
2023-03-20 22:19 ` Jason Gunthorpe
2023-03-22 20:57 ` Nicolin Chen
2023-03-23 12:17 ` Jason Gunthorpe
2023-03-17 9:41 ` Tian, Kevin
2023-03-17 14:24 ` Nicolin Chen
2023-03-20 12:59 ` Jason Gunthorpe
2023-03-20 16:12 ` Nicolin Chen
2023-03-20 18:00 ` Jason Gunthorpe
2023-03-21 8:34 ` Tian, Kevin
2023-03-21 11:48 ` Jason Gunthorpe
2023-03-22 6:42 ` Nicolin Chen
2023-03-22 12:43 ` Jason Gunthorpe
2023-03-22 17:11 ` Nicolin Chen
2023-03-22 17:28 ` Jason Gunthorpe
2023-03-22 19:21 ` Nicolin Chen
2023-03-22 19:41 ` Jason Gunthorpe
2023-03-22 20:43 ` Nicolin Chen
2023-03-23 12:16 ` Jason Gunthorpe
2023-03-23 18:13 ` Nicolin Chen
2023-03-23 18:27 ` Jason Gunthorpe
2023-03-24 9:02 ` Tian, Kevin
2023-03-24 14:57 ` Jason Gunthorpe
2023-03-24 17:35 ` Nicolin Chen
2023-03-28 3:03 ` Tian, Kevin
2023-03-24 8:47 ` Tian, Kevin
2023-03-24 14:44 ` Jason Gunthorpe
2023-03-28 2:48 ` Tian, Kevin
2023-03-28 12:26 ` Jason Gunthorpe
2023-03-31 8:09 ` Tian, Kevin
2023-03-17 9:24 ` Tian, Kevin
2023-03-10 3:51 ` Nicolin Chen
2023-03-10 17:53 ` Robin Murphy
2023-03-10 18:49 ` Jason Gunthorpe
2023-03-11 12:38 ` Nicolin Chen
2023-03-13 13:07 ` Robin Murphy
2023-03-16 0:01 ` Nicolin Chen
2023-03-16 14:58 ` Robin Murphy
2023-03-16 21:09 ` Nicolin Chen
2023-03-20 1:32 ` Nicolin Chen
2023-03-20 13:11 ` Jason Gunthorpe
2023-03-20 15:28 ` Nicolin Chen
2023-03-20 16:01 ` Jason Gunthorpe
2023-03-20 16:35 ` Nicolin Chen
2023-03-20 18:07 ` Jason Gunthorpe
2023-03-20 20:46 ` Nicolin Chen
2023-03-20 22:14 ` Jason Gunthorpe
2023-03-22 5:14 ` Nicolin Chen
2023-03-24 8:55 ` Tian, Kevin
2023-03-17 9:47 ` Tian, Kevin
2023-03-17 14:16 ` Nicolin Chen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230309134217.GA1673607@myrica \
--to=jean-philippe@linaro.org \
--cc=baolu.lu@linux.intel.com \
--cc=eric.auger@redhat.com \
--cc=iommu@lists.linux.dev \
--cc=jgg@nvidia.com \
--cc=joro@8bytes.org \
--cc=kevin.tian@intel.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=nicolinc@nvidia.com \
--cc=robin.murphy@arm.com \
--cc=shameerali.kolothum.thodi@huawei.com \
--cc=will@kernel.org \
--cc=yi.l.liu@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox