diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c
index bb6f041673615850aec151c4b51cf6d4ac17a29e..c76aaca5694dd88c6fee8af964e8c62ccd3ad272 100644
--- a/arch/x86/kernel/traps.c
+++ b/arch/x86/kernel/traps.c
@@ -351,9 +351,11 @@ io_check_error(unsigned char reason, struct pt_regs *regs)
 	reason = (reason & 0xf) | 8;
 	outb(reason, 0x61);
 
-	i = 2000;
-	while (--i)
-		udelay(1000);
+	i = 20000;
+	while (--i) {
+		touch_nmi_watchdog();
+		udelay(100);
+	}
 
 	reason &= ~8;
 	outb(reason, 0x61);