| From c0a721363b3a7833c611115a82e04b58aead1677 Mon Sep 17 00:00:00 2001 |
| From: Eric Auger <eric.auger@redhat.com> |
| Date: Fri, 8 Nov 2019 16:58:03 +0100 |
| Subject: [PATCH] iommu/vt-d: Fix QI_DEV_IOTLB_PFSID and QI_DEV_EIOTLB_PFSID |
| macros |
| |
| commit 4e7120d79edb31e4ee68e6f8421448e4603be1e9 upstream. |
| |
| For both PASID-based-Device-TLB Invalidate Descriptor and |
| Device-TLB Invalidate Descriptor, the Physical Function Source-ID |
| value is split according to this layout: |
| |
| PFSID[3:0] is set at offset 12 and PFSID[15:4] is put at offset 52. |
| Fix the part laid out at offset 52. |
| |
| Fixes: 0f725561e1684 ("iommu/vt-d: Add definitions for PFSID") |
| Signed-off-by: Eric Auger <eric.auger@redhat.com> |
| Acked-by: Jacob Pan <jacob.jun.pan@linux.intel.com> |
| Cc: stable@vger.kernel.org # v4.19+ |
| Acked-by: Lu Baolu <baolu.lu@linux.intel.com> |
| Signed-off-by: Joerg Roedel <jroedel@suse.de> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/include/linux/intel-iommu.h b/include/linux/intel-iommu.h |
| index ba8dc520cc79..1a1f77f77c0e 100644 |
| --- a/include/linux/intel-iommu.h |
| +++ b/include/linux/intel-iommu.h |
| @@ -334,7 +334,8 @@ enum { |
| #define QI_DEV_IOTLB_SID(sid) ((u64)((sid) & 0xffff) << 32) |
| #define QI_DEV_IOTLB_QDEP(qdep) (((qdep) & 0x1f) << 16) |
| #define QI_DEV_IOTLB_ADDR(addr) ((u64)(addr) & VTD_PAGE_MASK) |
| -#define QI_DEV_IOTLB_PFSID(pfsid) (((u64)(pfsid & 0xf) << 12) | ((u64)(pfsid & 0xfff) << 52)) |
| +#define QI_DEV_IOTLB_PFSID(pfsid) (((u64)(pfsid & 0xf) << 12) | \ |
| + ((u64)((pfsid >> 4) & 0xfff) << 52)) |
| #define QI_DEV_IOTLB_SIZE 1 |
| #define QI_DEV_IOTLB_MAX_INVS 32 |
| |
| @@ -358,7 +359,8 @@ enum { |
| #define QI_DEV_EIOTLB_PASID(p) (((u64)p) << 32) |
| #define QI_DEV_EIOTLB_SID(sid) ((u64)((sid) & 0xffff) << 16) |
| #define QI_DEV_EIOTLB_QDEP(qd) ((u64)((qd) & 0x1f) << 4) |
| -#define QI_DEV_EIOTLB_PFSID(pfsid) (((u64)(pfsid & 0xf) << 12) | ((u64)(pfsid & 0xfff) << 52)) |
| +#define QI_DEV_EIOTLB_PFSID(pfsid) (((u64)(pfsid & 0xf) << 12) | \ |
| + ((u64)((pfsid >> 4) & 0xfff) << 52)) |
| #define QI_DEV_EIOTLB_MAX_INVS 32 |
| |
| /* Page group response descriptor QW0 */ |
| -- |
| 2.7.4 |
| |