[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <e181b834-025f-4b2d-a13f-cdde2c74e710@intel.com>
Date: Tue, 11 Feb 2025 17:02:59 +0800
From: Yi Liu <yi.l.liu@...el.com>
To: Baolu Lu <baolu.lu@...ux.intel.com>, Joerg Roedel <joro@...tes.org>, "Will
Deacon" <will@...nel.org>, Robin Murphy <robin.murphy@....com>, Kevin Tian
<kevin.tian@...el.com>
CC: <iommu@...ts.linux.dev>, <linux-kernel@...r.kernel.org>,
<stable@...r.kernel.org>
Subject: Re: [PATCH v2 1/1] iommu/vt-d: Make intel_iommu_drain_pasid_prq()
cover faults for RID
On 2025/2/5 10:28, Baolu Lu wrote:
> On 2025/1/21 15:01, Yi Liu wrote:
>> On 2025/1/21 10:31, Lu Baolu wrote:
>>> This driver supports page faults on PCI RID since commit <9f831c16c69e>
>>> ("iommu/vt-d: Remove the pasid present check in prq_event_thread") by
>>> allowing the reporting of page faults with the pasid_present field cleared
>>> to the upper layer for further handling. The fundamental assumption here
>>> is that the detach or replace operations act as a fence for page faults.
>>> This implies that all pending page faults associated with a specific RID
>>> or PASID are flushed when a domain is detached or replaced from a device
>>> RID or PASID.
>>>
>>> However, the intel_iommu_drain_pasid_prq() helper does not correctly
>>> handle faults for RID. This leads to faults potentially remaining pending
>>> in the iommu hardware queue even after the domain is detached, thereby
>>> violating the aforementioned assumption.
>>>
>>> Fix this issue by extending intel_iommu_drain_pasid_prq() to cover faults
>>> for RID.
>>>
>>> Fixes: 9f831c16c69e ("iommu/vt-d: Remove the pasid present check in
>>> prq_event_thread")
>>> Cc: stable@...r.kernel.org
>>> Suggested-by: Kevin Tian <kevin.tian@...el.com>
>>> Signed-off-by: Lu Baolu <baolu.lu@...ux.intel.com>
>>> Reviewed-by: Kevin Tian <kevin.tian@...el.com>
>>> ---
>>> drivers/iommu/intel/prq.c | 4 +++-
>>> 1 file changed, 3 insertions(+), 1 deletion(-)
>>>
>>> Change log:
>>> v2:
>>> - Add check on page faults targeting RID.
>>>
>>> v1: https://lore.kernel.org/linux-iommu/20250120080144.810455-1-
>>> baolu.lu@...ux.intel.com/
>>>
>>> diff --git a/drivers/iommu/intel/prq.c b/drivers/iommu/intel/prq.c
>>> index c2d792db52c3..064194399b38 100644
>>> --- a/drivers/iommu/intel/prq.c
>>> +++ b/drivers/iommu/intel/prq.c
>>> @@ -87,7 +87,9 @@ void intel_iommu_drain_pasid_prq(struct device *dev,
>>> u32 pasid)
>>> struct page_req_dsc *req;
>>> req = &iommu->prq[head / sizeof(*req)];
>>> - if (!req->pasid_present || req->pasid != pasid) {
>>> + if (req->rid != sid ||
>>
>> Does intel-iommu driver managed pasid per-bdf? or global? If the prior one,
>> the rid check is needed even in the old time that does not PRIs in the RID
>> path.
>
> Do you mean that this fix should be back ported farther than the fix tag
> commit?
correct.
> The iommu driver doesn't manage the PASID. IOMMUFD and SVA do actually.
> The SVA uses global PASID. IOMMUFD doesn't yet support PASIDs, pending
> the merging of your patches. Therefore, per-BDF PASID management is not
> currently implemented in the Linux tree. Anything I overlooked?
then, it's fine. No need to backport it I suppose.
--
Regards,
Yi Liu
Powered by blists - more mailing lists