This was on virtual list:
[PATCH] x86_64, pci_iommu_alloc, dma_ops and iSCSI
Here is the mail and patch. markmc@redhat.com found the bug and made the patch
and I think pushed upstream and in RHEL. I ccd him because he knows more about
this than me.
Hi,
With iSCSI root on x86_64 DomU I was seeing an oops in
scsi_calculate_bounce_limit() where PCI_DMA_BUS_IS_PHYS() was called.
Issue is that dma_ops is NULL.
Attached patch fixes it for me - call no_iommu_init() as a fallback.
This is what upstream Xen does, except upstream does it in
x86_64/mm/init-xen.c:mem_init() whereas, for some reason, we have this
stuff in i386/kernel/pci-dma-xen.c:pci_iommu_init(). Not sure where the
divergence from upstream came from.
Cheers,
Mark.
--- ./arch/i386/kernel/pci-dma-xen.c.x86_64-no-iommu 2006-10-02
10:58:11.000000000 +0100
+++ ./arch/i386/kernel/pci-dma-xen.c 2006-10-02 10:58:51.000000000 +0100
@@ -18,6 +18,7 @@
#include <asm/tlbflush.h>
#include <asm-i386/mach-xen/asm/swiotlb.h>
#include <asm/bug.h>
+#include <asm/proto.h>
#ifdef __x86_64__
int iommu_merge __read_mostly = 0;
@@ -64,6 +65,7 @@
#ifdef CONFIG_SWIOTLB
pci_swiotlb_init();
#endif
+ no_iommu_init();
}
__init int iommu_setup(char *p)