From: Joao Martins <joao.m.martins@oracle.com> To: Jason Gunthorpe <jgg@nvidia.com>, "Tian, Kevin" <kevin.tian@intel.com> Cc: "iommu@lists.linux-foundation.org" <iommu@lists.linux-foundation.org>, Joerg Roedel <joro@8bytes.org>, Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>, Will Deacon <will@kernel.org>, Robin Murphy <robin.murphy@arm.com>, Jean-Philippe Brucker <jean-philippe@linaro.org>, Keqian Zhu <zhukeqian1@huawei.com>, Shameerali Kolothum Thodi <shameerali.kolothum.thodi@huawei.com>, David Woodhouse <dwmw2@infradead.org>, Lu Baolu <baolu.lu@linux.intel.com>, Nicolin Chen <nicolinc@nvidia.com>, Yishai Hadas <yishaih@nvidia.com>, Eric Auger <eric.auger@redhat.com>, "Liu, Yi L" <yi.l.liu@intel.com>, Alex Williamson <alex.williamson@redhat.com>, Cornelia Huck <cohuck@redhat.com>, "kvm@vger.kernel.org" <kvm@vger.kernel.org> Subject: Re: [PATCH RFC 02/19] iommufd: Dirty tracking for io_pagetable Date: Fri, 29 Apr 2022 15:28:06 +0100 [thread overview] Message-ID: <3fae7334-df70-183f-6629-9aad704b54fb@oracle.com> (raw) In-Reply-To: <20220429115616.GP8364@nvidia.com> On 4/29/22 12:56, Jason Gunthorpe wrote: > On Fri, Apr 29, 2022 at 08:07:14AM +0000, Tian, Kevin wrote: >>> From: Joao Martins <joao.m.martins@oracle.com> >>> Sent: Friday, April 29, 2022 5:09 AM >>> >>> +static int __set_dirty_tracking_range_locked(struct iommu_domain >>> *domain, >> >> suppose anything using iommu_domain as the first argument should >> be put in the iommu layer. Here it's more reasonable to use iopt >> as the first argument or simply merge with the next function. >> >>> + struct io_pagetable *iopt, >>> + bool enable) >>> +{ >>> + const struct iommu_domain_ops *ops = domain->ops; >>> + struct iommu_iotlb_gather gather; >>> + struct iopt_area *area; >>> + int ret = -EOPNOTSUPP; >>> + unsigned long iova; >>> + size_t size; >>> + >>> + iommu_iotlb_gather_init(&gather); >>> + >>> + for (area = iopt_area_iter_first(iopt, 0, ULONG_MAX); area; >>> + area = iopt_area_iter_next(area, 0, ULONG_MAX)) { >> >> how is this different from leaving iommu driver to walk the page table >> and the poke the modifier bit for all present PTEs? As commented in last >> patch this may allow removing the range op completely. > > Yea, I'm not super keen on the two ops either, especially since they > are so wildly different. > /me ack > I would expect that set_dirty_tracking turns on tracking for the > entire iommu domain, for all present and future maps > Yes. I didn't do that correctly on ARM, neither on device-attach (for x86 e.g. on hotplug). > While set_dirty_tracking_range - I guess it only does the range, so if > we make a new map then the new range will be untracked? But that is > now racy, we have to map and then call set_dirty_tracking_range > > It seems better for the iommu driver to deal with this and ARM should > atomically make the new maps dirty tracking.. > Next iteration I'll need to fix the way IOMMUs handle dirty-tracking probing and tracking in its private intermediate structures. But yes, I was trying to transfer this to the iommu driver (perhaps in a convoluted way). >>> +int iopt_set_dirty_tracking(struct io_pagetable *iopt, >>> + struct iommu_domain *domain, bool enable) >>> +{ >>> + struct iommu_domain *dom; >>> + unsigned long index; >>> + int ret = -EOPNOTSUPP; > > Returns EOPNOTSUPP if the xarray is empty? > Argh no. Maybe -EINVAL is better here.
WARNING: multiple messages have this Message-ID (diff)
From: Joao Martins <joao.m.martins@oracle.com> To: Jason Gunthorpe <jgg@nvidia.com>, "Tian, Kevin" <kevin.tian@intel.com> Cc: Jean-Philippe Brucker <jean-philippe@linaro.org>, Yishai Hadas <yishaih@nvidia.com>, "kvm@vger.kernel.org" <kvm@vger.kernel.org>, Will Deacon <will@kernel.org>, Cornelia Huck <cohuck@redhat.com>, Alex Williamson <alex.williamson@redhat.com>, "iommu@lists.linux-foundation.org" <iommu@lists.linux-foundation.org>, David Woodhouse <dwmw2@infradead.org>, Robin Murphy <robin.murphy@arm.com> Subject: Re: [PATCH RFC 02/19] iommufd: Dirty tracking for io_pagetable Date: Fri, 29 Apr 2022 15:28:06 +0100 [thread overview] Message-ID: <3fae7334-df70-183f-6629-9aad704b54fb@oracle.com> (raw) In-Reply-To: <20220429115616.GP8364@nvidia.com> On 4/29/22 12:56, Jason Gunthorpe wrote: > On Fri, Apr 29, 2022 at 08:07:14AM +0000, Tian, Kevin wrote: >>> From: Joao Martins <joao.m.martins@oracle.com> >>> Sent: Friday, April 29, 2022 5:09 AM >>> >>> +static int __set_dirty_tracking_range_locked(struct iommu_domain >>> *domain, >> >> suppose anything using iommu_domain as the first argument should >> be put in the iommu layer. Here it's more reasonable to use iopt >> as the first argument or simply merge with the next function. >> >>> + struct io_pagetable *iopt, >>> + bool enable) >>> +{ >>> + const struct iommu_domain_ops *ops = domain->ops; >>> + struct iommu_iotlb_gather gather; >>> + struct iopt_area *area; >>> + int ret = -EOPNOTSUPP; >>> + unsigned long iova; >>> + size_t size; >>> + >>> + iommu_iotlb_gather_init(&gather); >>> + >>> + for (area = iopt_area_iter_first(iopt, 0, ULONG_MAX); area; >>> + area = iopt_area_iter_next(area, 0, ULONG_MAX)) { >> >> how is this different from leaving iommu driver to walk the page table >> and the poke the modifier bit for all present PTEs? As commented in last >> patch this may allow removing the range op completely. > > Yea, I'm not super keen on the two ops either, especially since they > are so wildly different. > /me ack > I would expect that set_dirty_tracking turns on tracking for the > entire iommu domain, for all present and future maps > Yes. I didn't do that correctly on ARM, neither on device-attach (for x86 e.g. on hotplug). > While set_dirty_tracking_range - I guess it only does the range, so if > we make a new map then the new range will be untracked? But that is > now racy, we have to map and then call set_dirty_tracking_range > > It seems better for the iommu driver to deal with this and ARM should > atomically make the new maps dirty tracking.. > Next iteration I'll need to fix the way IOMMUs handle dirty-tracking probing and tracking in its private intermediate structures. But yes, I was trying to transfer this to the iommu driver (perhaps in a convoluted way). >>> +int iopt_set_dirty_tracking(struct io_pagetable *iopt, >>> + struct iommu_domain *domain, bool enable) >>> +{ >>> + struct iommu_domain *dom; >>> + unsigned long index; >>> + int ret = -EOPNOTSUPP; > > Returns EOPNOTSUPP if the xarray is empty? > Argh no. Maybe -EINVAL is better here. _______________________________________________ iommu mailing list iommu@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/iommu
next prev parent reply other threads:[~2022-04-29 14:28 UTC|newest] Thread overview: 209+ messages / expand[flat|nested] mbox.gz Atom feed top 2022-04-28 21:09 [PATCH RFC 00/19] IOMMUFD Dirty Tracking Joao Martins 2022-04-28 21:09 ` Joao Martins 2022-04-28 21:09 ` [PATCH RFC 01/19] iommu: Add iommu_domain ops for dirty tracking Joao Martins 2022-04-28 21:09 ` Joao Martins 2022-04-29 7:54 ` Tian, Kevin 2022-04-29 7:54 ` Tian, Kevin 2022-04-29 10:44 ` Joao Martins 2022-04-29 10:44 ` Joao Martins 2022-04-29 12:08 ` Jason Gunthorpe 2022-04-29 12:08 ` Jason Gunthorpe via iommu 2022-04-29 14:26 ` Joao Martins 2022-04-29 14:26 ` Joao Martins 2022-04-29 14:35 ` Jason Gunthorpe 2022-04-29 14:35 ` Jason Gunthorpe via iommu 2022-04-29 13:40 ` Baolu Lu 2022-04-29 13:40 ` Baolu Lu 2022-04-29 15:27 ` Joao Martins 2022-04-29 15:27 ` Joao Martins 2022-04-28 21:09 ` [PATCH RFC 02/19] iommufd: Dirty tracking for io_pagetable Joao Martins 2022-04-28 21:09 ` Joao Martins 2022-04-29 8:07 ` Tian, Kevin 2022-04-29 8:07 ` Tian, Kevin 2022-04-29 10:48 ` Joao Martins 2022-04-29 10:48 ` Joao Martins 2022-04-29 11:56 ` Jason Gunthorpe 2022-04-29 11:56 ` Jason Gunthorpe via iommu 2022-04-29 14:28 ` Joao Martins [this message] 2022-04-29 14:28 ` Joao Martins 2022-04-29 23:51 ` Baolu Lu 2022-04-29 23:51 ` Baolu Lu 2022-05-02 11:57 ` Joao Martins 2022-05-02 11:57 ` Joao Martins 2022-08-29 10:01 ` Shameerali Kolothum Thodi 2022-04-28 21:09 ` [PATCH RFC 03/19] iommufd: Dirty tracking data support Joao Martins 2022-04-28 21:09 ` Joao Martins 2022-04-29 8:12 ` Tian, Kevin 2022-04-29 8:12 ` Tian, Kevin 2022-04-29 10:54 ` Joao Martins 2022-04-29 10:54 ` Joao Martins 2022-04-29 12:09 ` Jason Gunthorpe 2022-04-29 12:09 ` Jason Gunthorpe via iommu 2022-04-29 14:33 ` Joao Martins 2022-04-29 14:33 ` Joao Martins 2022-04-30 4:11 ` Baolu Lu 2022-04-30 4:11 ` Baolu Lu 2022-05-02 12:06 ` Joao Martins 2022-05-02 12:06 ` Joao Martins 2022-04-28 21:09 ` [PATCH RFC 04/19] iommu: Add an unmap API that returns dirtied IOPTEs Joao Martins 2022-04-28 21:09 ` Joao Martins 2022-04-30 5:12 ` Baolu Lu 2022-04-30 5:12 ` Baolu Lu 2022-05-02 12:22 ` Joao Martins 2022-05-02 12:22 ` Joao Martins 2022-04-28 21:09 ` [PATCH RFC 05/19] iommufd: Add a dirty bitmap to iopt_unmap_iova() Joao Martins 2022-04-28 21:09 ` Joao Martins 2022-04-29 12:14 ` Jason Gunthorpe 2022-04-29 12:14 ` Jason Gunthorpe via iommu 2022-04-29 14:36 ` Joao Martins 2022-04-29 14:36 ` Joao Martins 2022-04-28 21:09 ` [PATCH RFC 06/19] iommufd: Dirty tracking IOCTLs for the hw_pagetable Joao Martins 2022-04-28 21:09 ` Joao Martins 2022-04-28 21:09 ` [PATCH RFC 07/19] iommufd/vfio-compat: Dirty tracking IOCTLs compatibility Joao Martins 2022-04-28 21:09 ` Joao Martins 2022-04-29 12:19 ` Jason Gunthorpe 2022-04-29 12:19 ` Jason Gunthorpe via iommu 2022-04-29 14:27 ` Joao Martins 2022-04-29 14:27 ` Joao Martins 2022-04-29 14:36 ` Jason Gunthorpe via iommu 2022-04-29 14:36 ` Jason Gunthorpe 2022-04-29 14:52 ` Joao Martins 2022-04-29 14:52 ` Joao Martins 2022-04-28 21:09 ` [PATCH RFC 08/19] iommufd: Add a test for dirty tracking ioctls Joao Martins 2022-04-28 21:09 ` Joao Martins 2022-04-28 21:09 ` [PATCH RFC 09/19] iommu/amd: Access/Dirty bit support in IOPTEs Joao Martins 2022-04-28 21:09 ` Joao Martins 2022-05-31 11:34 ` Suravee Suthikulpanit via iommu 2022-05-31 11:34 ` Suravee Suthikulpanit 2022-05-31 12:15 ` Baolu Lu 2022-05-31 12:15 ` Baolu Lu 2022-05-31 15:22 ` Joao Martins 2022-05-31 15:22 ` Joao Martins 2022-04-28 21:09 ` [PATCH RFC 10/19] iommu/amd: Add unmap_read_dirty() support Joao Martins 2022-04-28 21:09 ` Joao Martins 2022-05-31 12:39 ` Suravee Suthikulpanit 2022-05-31 12:39 ` Suravee Suthikulpanit via iommu 2022-05-31 15:51 ` Joao Martins 2022-05-31 15:51 ` Joao Martins 2022-04-28 21:09 ` [PATCH RFC 11/19] iommu/amd: Print access/dirty bits if supported Joao Martins 2022-04-28 21:09 ` Joao Martins 2022-04-28 21:09 ` [PATCH RFC 12/19] iommu/arm-smmu-v3: Add feature detection for HTTU Joao Martins 2022-04-28 21:09 ` Joao Martins 2022-04-28 21:09 ` [PATCH RFC 13/19] iommu/arm-smmu-v3: Add feature detection for BBML Joao Martins 2022-04-28 21:09 ` Joao Martins 2022-04-29 11:11 ` Robin Murphy 2022-04-29 11:11 ` Robin Murphy 2022-04-29 11:54 ` Joao Martins 2022-04-29 11:54 ` Joao Martins 2022-04-29 12:26 ` Robin Murphy 2022-04-29 12:26 ` Robin Murphy 2022-04-29 14:34 ` Joao Martins 2022-04-29 14:34 ` Joao Martins 2022-04-28 21:09 ` [PATCH RFC 14/19] iommu/arm-smmu-v3: Add read_and_clear_dirty() support Joao Martins 2022-04-28 21:09 ` Joao Martins 2022-08-29 9:59 ` Shameerali Kolothum Thodi 2022-04-28 21:09 ` [PATCH RFC 15/19] iommu/arm-smmu-v3: Add set_dirty_tracking_range() support Joao Martins 2022-04-28 21:09 ` Joao Martins 2022-04-29 8:28 ` Tian, Kevin 2022-04-29 8:28 ` Tian, Kevin 2022-04-29 11:05 ` Joao Martins 2022-04-29 11:05 ` Joao Martins 2022-04-29 11:19 ` Robin Murphy 2022-04-29 11:19 ` Robin Murphy 2022-04-29 12:06 ` Joao Martins 2022-04-29 12:06 ` Joao Martins 2022-04-29 12:23 ` Jason Gunthorpe 2022-04-29 12:23 ` Jason Gunthorpe via iommu 2022-04-29 14:45 ` Joao Martins 2022-04-29 14:45 ` Joao Martins 2022-04-29 16:11 ` Jason Gunthorpe 2022-04-29 16:11 ` Jason Gunthorpe via iommu 2022-04-29 16:40 ` Joao Martins 2022-04-29 16:40 ` Joao Martins 2022-04-29 16:46 ` Jason Gunthorpe 2022-04-29 16:46 ` Jason Gunthorpe via iommu 2022-04-29 19:20 ` Robin Murphy 2022-04-29 19:20 ` Robin Murphy 2022-05-02 11:52 ` Joao Martins 2022-05-02 11:52 ` Joao Martins 2022-05-02 11:57 ` Joao Martins 2022-05-02 11:57 ` Joao Martins 2022-05-05 7:25 ` Shameerali Kolothum Thodi 2022-05-05 7:25 ` Shameerali Kolothum Thodi via iommu 2022-05-05 9:52 ` Joao Martins 2022-05-05 9:52 ` Joao Martins 2022-08-29 9:59 ` Shameerali Kolothum Thodi 2022-08-29 10:00 ` Shameerali Kolothum Thodi 2022-04-28 21:09 ` [PATCH RFC 16/19] iommu/arm-smmu-v3: Enable HTTU for stage1 with io-pgtable mapping Joao Martins 2022-04-28 21:09 ` Joao Martins 2022-04-29 11:35 ` Robin Murphy 2022-04-29 11:35 ` Robin Murphy 2022-04-29 12:10 ` Joao Martins 2022-04-29 12:10 ` Joao Martins 2022-04-29 12:46 ` Robin Murphy 2022-04-29 12:46 ` Robin Murphy 2022-08-29 10:00 ` Shameerali Kolothum Thodi 2022-04-28 21:09 ` [PATCH RFC 17/19] iommu/arm-smmu-v3: Add unmap_read_dirty() support Joao Martins 2022-04-28 21:09 ` Joao Martins 2022-04-29 11:53 ` Robin Murphy 2022-04-29 11:53 ` Robin Murphy 2022-04-28 21:09 ` [PATCH RFC 18/19] iommu/intel: Access/Dirty bit support for SL domains Joao Martins 2022-04-28 21:09 ` Joao Martins 2022-04-29 9:03 ` Tian, Kevin 2022-04-29 9:03 ` Tian, Kevin 2022-04-29 11:20 ` Joao Martins 2022-04-29 11:20 ` Joao Martins 2022-04-30 6:12 ` Baolu Lu 2022-04-30 6:12 ` Baolu Lu 2022-05-02 12:24 ` Joao Martins 2022-05-02 12:24 ` Joao Martins 2022-04-28 21:09 ` [PATCH RFC 19/19] iommu/intel: Add unmap_read_dirty() support Joao Martins 2022-04-28 21:09 ` Joao Martins 2022-04-29 5:45 ` [PATCH RFC 00/19] IOMMUFD Dirty Tracking Tian, Kevin 2022-04-29 5:45 ` Tian, Kevin 2022-04-29 10:27 ` Joao Martins 2022-04-29 10:27 ` Joao Martins 2022-04-29 12:38 ` Jason Gunthorpe 2022-04-29 12:38 ` Jason Gunthorpe via iommu 2022-04-29 15:20 ` Joao Martins 2022-04-29 15:20 ` Joao Martins 2022-05-05 7:40 ` Tian, Kevin 2022-05-05 7:40 ` Tian, Kevin 2022-05-05 14:07 ` Jason Gunthorpe 2022-05-05 14:07 ` Jason Gunthorpe via iommu 2022-05-06 3:51 ` Tian, Kevin 2022-05-06 3:51 ` Tian, Kevin 2022-05-06 11:46 ` Jason Gunthorpe 2022-05-06 11:46 ` Jason Gunthorpe via iommu 2022-05-10 1:38 ` Tian, Kevin 2022-05-10 1:38 ` Tian, Kevin 2022-05-10 11:50 ` Joao Martins 2022-05-10 11:50 ` Joao Martins 2022-05-11 1:17 ` Tian, Kevin 2022-05-11 1:17 ` Tian, Kevin 2022-05-10 13:46 ` Jason Gunthorpe via iommu 2022-05-10 13:46 ` Jason Gunthorpe 2022-05-11 1:10 ` Tian, Kevin 2022-05-11 1:10 ` Tian, Kevin 2022-07-12 18:34 ` Joao Martins 2022-07-21 14:24 ` Jason Gunthorpe 2022-05-02 18:11 ` Alex Williamson 2022-05-02 18:11 ` Alex Williamson 2022-05-02 18:52 ` Jason Gunthorpe 2022-05-02 18:52 ` Jason Gunthorpe via iommu 2022-05-03 10:48 ` Joao Martins 2022-05-03 10:48 ` Joao Martins 2022-05-05 7:42 ` Tian, Kevin 2022-05-05 7:42 ` Tian, Kevin 2022-05-05 10:06 ` Joao Martins 2022-05-05 10:06 ` Joao Martins 2022-05-05 11:03 ` Tian, Kevin 2022-05-05 11:03 ` Tian, Kevin 2022-05-05 11:50 ` Joao Martins 2022-05-05 11:50 ` Joao Martins 2022-05-06 3:14 ` Tian, Kevin 2022-05-06 3:14 ` Tian, Kevin 2022-05-05 13:55 ` Jason Gunthorpe 2022-05-05 13:55 ` Jason Gunthorpe via iommu 2022-05-06 3:17 ` Tian, Kevin 2022-05-06 3:17 ` Tian, Kevin
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=3fae7334-df70-183f-6629-9aad704b54fb@oracle.com \ --to=joao.m.martins@oracle.com \ --cc=alex.williamson@redhat.com \ --cc=baolu.lu@linux.intel.com \ --cc=cohuck@redhat.com \ --cc=dwmw2@infradead.org \ --cc=eric.auger@redhat.com \ --cc=iommu@lists.linux-foundation.org \ --cc=jean-philippe@linaro.org \ --cc=jgg@nvidia.com \ --cc=joro@8bytes.org \ --cc=kevin.tian@intel.com \ --cc=kvm@vger.kernel.org \ --cc=nicolinc@nvidia.com \ --cc=robin.murphy@arm.com \ --cc=shameerali.kolothum.thodi@huawei.com \ --cc=suravee.suthikulpanit@amd.com \ --cc=will@kernel.org \ --cc=yi.l.liu@intel.com \ --cc=yishaih@nvidia.com \ --cc=zhukeqian1@huawei.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: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.