iommu/vt-d: Improve ITE fault handling if target device isn't present
authorEthan Zhao <haifeng.zhao@linux.intel.com>
Tue, 5 Mar 2024 12:21:16 +0000 (20:21 +0800)
committerJoerg Roedel <jroedel@suse.de>
Wed, 6 Mar 2024 16:35:55 +0000 (17:35 +0100)
commit80a9b50c0b9e297669a8a400eb35468cd87a9aed
tree3744618d0bf552eddfdd43dea8fd5ca1ec9133b8
parent4fc82cd907ac075648789cc3a00877778aa1838b
iommu/vt-d: Improve ITE fault handling if target device isn't present

Because surprise removal could happen anytime, e.g. user could request safe
removal to EP(endpoint device) via sysfs and brings its link down to do
surprise removal cocurrently. such aggressive cases would cause ATS
invalidation request issued to non-existence target device, then deadly
loop to retry that request after ITE fault triggered in interrupt context.
this patch aims to optimize the ITE handling by checking the target device
presence state to avoid retrying the timeout request blindly, thus avoid
hard lockup or system hang.

Devices TLB should only be invalidated when devices are in the
iommu->device_rbtree (probed, not released) and present.

Fixes: 6ba6c3a4cacf ("VT-d: add device IOTLB invalidation support")
Reviewed-by: Dan Carpenter <dan.carpenter@linaro.org>
Signed-off-by: Ethan Zhao <haifeng.zhao@linux.intel.com>
Link: https://lore.kernel.org/r/20240301080727.3529832-4-haifeng.zhao@linux.intel.com
Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
Signed-off-by: Joerg Roedel <jroedel@suse.de>
drivers/iommu/intel/dmar.c