Make the intel-iommu_wait_op macro work when jiffies are not running
PATCH 1/1 Make the intel-iommu_wait_op macro work when jiffies are not running
The following patch changes the intel-iommu.c code to use the TSC instead of jiffies for detecting bad DMAR functionality. Some systems with bad bios's have been seen to hang in early boot spinning in the IOMMU_WAIT_IO macro. This patch will replace the forever spin with a call to panic.
diffstat:
$ diffstat patches/wait_op_tsc.patch intel-iommu.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
--mgross
Signed-off-by mark gross <[email protected]>
drivers/pci/intel-iommu.c +4 -4
@@ -49,7 +49,7 @@#define DEFAULT_DOMAIN_ADDRESS_WIDTH 48 -#define DMAR_OPERATION_TIMEOUT (HZ*60)/* 1m */ +#define DMAR_OPERATION_TIMEOUT ((cycles_t) tsc_khz*10*1000)/* 10sec */ #define DOMAIN_MAX_ADDR (gaw) ((((u64)1) << gaw) - 1)
@@ -490,13 +490,13 @@#define IOMMU_WAIT_OP (iommu, offset, op, cond, sts) \ {\ - unsigned long start_time = jiffies;\ + cycles_t start_time = get_cycles();\ while (1) {\ sts = op (iommu->reg + offset);\ if (cond)\ break;\ - if (time_after(jiffies, start_time + DMAR_OPERATION_TIMEOUT))\ - panic("DMAR hardware is malfunctioning\n");\ + if (DMAR_OPERATION_TIMEOUT < (get_cycles() - start_time))\ + panic("DMAR hardware is malfunctioning\n");\ cpu_relax();\ }\ }
Jesse Barnes
AppliedQuoted 7 lines · mark gross
The following patch changes the
intel-iommu.ccode to use the TSC instead of jiffies for detecting bad DMAR functionality. Some systems with bad bios's have been seen to hang in early boot spinning in theIOMMU_WAIT_IOmacro. This patch will replace the forever spin with a call to panic.
Quoted 8 lines
diffstat:
$ diffstat patches/wait_op_tsc.patch intel-iommu.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)--mgross
Signed-off-by mark gross <[email protected]>
Applied to the 'for-linus' tree.
Thanks,
Jesse