[patch 09/38] iommu/vt-d: Use sched_clock() instead of get_cycles()
Thomas Gleixner <[email protected]> Fri, 10 Apr 2026 14:19:12 +0200
| Newsgroups | org.kernel.vger.linux-hams,dev.linux.lists.iommu,dev.linux.lists.loongarch,org.infradead.lists.linux-arm-kernel,org.infradead.lists.linux-riscv,org.kernel.vger.linux-alpha,org.kernel.vger.linux-crypto,org.kernel.vger.linux-ext4,org.kernel.vger.linux-fbdev,org.kernel.vger.linux-kernel,org.kernel.vger.linux-m68k,org.kernel.vger.linux-openrisc,org.kernel.vger.linux-parisc,org.kernel.vger.linux-s390,org.kernel.vger.linux-wireless,org.kernel.vger.netdev,org.kernel.vger.sparclinux,org.kvack.linux-mm,org.ozlabs.lists.linuxppc-dev |
|---|---|
| Message-ID | <[email protected]> |
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(); \ } \