| From 4e7120d79edb31e4ee68e6f8421448e4603be1e9 Mon Sep 17 00:00:00 2001 |
| From: Eric Auger <eric.auger@redhat.com> |
| Date: Fri, 8 Nov 2019 16:58:03 +0100 |
| Subject: iommu/vt-d: Fix QI_DEV_IOTLB_PFSID and QI_DEV_EIOTLB_PFSID macros |
| |
| From: Eric Auger <eric.auger@redhat.com> |
| |
| 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: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| include/linux/intel-iommu.h | 6 ++++-- |
| 1 file changed, 4 insertions(+), 2 deletions(-) |
| |
| --- a/include/linux/intel-iommu.h |
| +++ b/include/linux/intel-iommu.h |
| @@ -286,7 +286,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 |
| |
| @@ -311,7 +312,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 |
| |
| #define QI_PGRP_IDX(idx) (((u64)(idx)) << 55) |