Calculating the timeout from get_cycles() is a historical leftover without
any functional requirement.

Use ktime_get() instead.

Signed-off-by: Thomas Gleixner <[email protected]>
Cc: [email protected]
Cc: Lu Baolu <[email protected]>
Cc: [email protected]
---
 arch/x86/include/asm/iommu.h |    3 ---
 drivers/iommu/intel/dmar.c   |    4 ++--
 drivers/iommu/intel/iommu.h  |    8 ++++++--
 3 files changed, 8 insertions(+), 7 deletions(-)

--- a/arch/x86/include/asm/iommu.h
+++ b/arch/x86/include/asm/iommu.h
@@ -18,9 +18,6 @@ extern bool x86_swiotlb_enable;
 #define x86_swiotlb_enable false
 #endif
 
-/* 10 seconds */
-#define DMAR_OPERATION_TIMEOUT ((cycles_t) tsc_khz*10*1000)
-
 static inline int __init
 arch_rmrr_sanity_check(struct acpi_dmar_reserved_memory *rmrr)
 {
--- a/drivers/iommu/intel/dmar.c
+++ b/drivers/iommu/intel/dmar.c
@@ -1606,9 +1606,9 @@ void qi_flush_pasid_cache(struct intel_i
  */
 void dmar_disable_qi(struct intel_iommu *iommu)
 {
+       ktime_t start_time = ktime_get();
        unsigned long flags;
        u32 sts;
-       cycles_t start_time = get_cycles();
 
        if (!ecap_qis(iommu->ecap))
                return;
@@ -1624,7 +1624,7 @@ void dmar_disable_qi(struct intel_iommu
         */
        while ((readl(iommu->reg + DMAR_IQT_REG) !=
                readl(iommu->reg + DMAR_IQH_REG)) &&
-               (DMAR_OPERATION_TIMEOUT > (get_cycles() - start_time)))
+              (DMAR_OPERATION_TIMEOUT > (ktime_get() - start_time)))
                cpu_relax();
 
        iommu->gcmd &= ~DMA_GCMD_QIE;
--- a/drivers/iommu/intel/iommu.h
+++ b/drivers/iommu/intel/iommu.h
@@ -23,6 +23,7 @@
 #include <linux/xarray.h>
 #include <linux/perf_event.h>
 #include <linux/pci.h>
+#include <linux/timekeeping.h>
 #include <linux/generic_pt/iommu.h>
 
 #include <asm/iommu.h>
@@ -360,14 +361,17 @@
 /* PERFINTRSTS_REG */
 #define DMA_PERFINTRSTS_PIS    ((u32)1)
 
+#define DMAR_OPERATION_TIMEOUT  (((ktime_t)10) * NSEC_PER_SEC)
+
 #define IOMMU_WAIT_OP(iommu, offset, op, cond, sts)                    \
 do {                                                                   \
-       cycles_t start_time = get_cycles();                             \
+       ktime_t start_time = ktime_get();                               \
+                                                                       \
        while (1) {                                                     \
                sts = op(iommu->reg + offset);                          \
                if (cond)                                               \
                        break;                                          \
-               if (DMAR_OPERATION_TIMEOUT < (get_cycles() - start_time))\
+               if (DMAR_OPERATION_TIMEOUT < (ktime_get() - start_time))\
                        panic("DMAR hardware is malfunctioning\n");     \
                cpu_relax();                                            \
        }                                                               \


Reply via email to