diff -u linux/arch/x86_64/kernel/pci-gart.c-o linux/arch/x86_64/kernel/pci-gart.c --- linux/arch/x86_64/kernel/pci-gart.c-o 2004-01-07 18:01:41.000000000 +0100 +++ linux/arch/x86_64/kernel/pci-gart.c 2004-01-07 18:08:33.000000000 +0100 @@ -97,6 +97,8 @@ next_bit = 0; } } + /* workaround for now */ + need_flush = 1; spin_unlock_irqrestore(&iommu_bitmap_lock, flags); return offset; } @@ -123,8 +125,12 @@ /* recheck flush count inside lock */ if (need_flush) { for (i = 0; northbridges[i]; i++) { + u32 w; pci_write_config_dword(northbridges[i], 0x9c, northbridge_flush_word[i] | 1); + do { + pci_read_config_dword(northbridges[i], 0x9c, &w); + } while (w & 1); flushed++; } if (!flushed)