forked from Minki/linux
iommu/vt-d: Correctly check addr alignment in qi_flush_dev_iotlb_pasid()
An incorrect address mask is being used in the qi_flush_dev_iotlb_pasid()
to check the address alignment. This leads to a lot of spurious kernel
warnings:
[ 485.837093] DMAR: Invalidate non-aligned address 7f76f47f9000, order 0
[ 485.837098] DMAR: Invalidate non-aligned address 7f76f47f9000, order 0
[ 492.494145] qi_flush_dev_iotlb_pasid: 5734 callbacks suppressed
[ 492.494147] DMAR: Invalidate non-aligned address 7f7728800000, order 11
[ 492.508965] DMAR: Invalidate non-aligned address 7f7728800000, order 11
Fix it by checking the alignment in right way.
Fixes: 288d08e780
("iommu/vt-d: Handle non-page aligned address")
Reported-and-tested-by: Guo Kaijie <Kaijie.Guo@intel.com>
Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
Cc: Liu Yi L <yi.l.liu@intel.com>
Link: https://lore.kernel.org/r/20210119043500.1539596-1-baolu.lu@linux.intel.com
Signed-off-by: Joerg Roedel <jroedel@suse.de>
This commit is contained in:
parent
a44092e326
commit
494b3688bb
@ -1496,7 +1496,7 @@ void qi_flush_dev_iotlb_pasid(struct intel_iommu *iommu, u16 sid, u16 pfsid,
|
|||||||
* Max Invs Pending (MIP) is set to 0 for now until we have DIT in
|
* Max Invs Pending (MIP) is set to 0 for now until we have DIT in
|
||||||
* ECAP.
|
* ECAP.
|
||||||
*/
|
*/
|
||||||
if (addr & GENMASK_ULL(size_order + VTD_PAGE_SHIFT, 0))
|
if (!IS_ALIGNED(addr, VTD_PAGE_SIZE << size_order))
|
||||||
pr_warn_ratelimited("Invalidate non-aligned address %llx, order %d\n",
|
pr_warn_ratelimited("Invalidate non-aligned address %llx, order %d\n",
|
||||||
addr, size_order);
|
addr, size_order);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user