pci_dma_sync_sg in 2.4 tree seems broken. pci_map_sg were fixed a while ago. Please fix pci_dma_sync_sg also. Here is a patch. Index: pci.h =================================================================== RCS file: /home/cvs/linux/include/asm-mips/pci.h,v retrieving revision 1.24.2.16 diff -u -r1.24.2.16 pci.h --- pci.h 17 Nov 2003 01:07:45 -0000 1.24.2.16 +++ pci.h 1 Jul 2004 13:10:48 -0000 @@ -270,20 +270,28 @@ */ static inline void pci_dma_sync_sg(struct pci_dev *hwdev, struct scatterlist *sg, - int nelems, int direction) + int nents, int direction) { -#ifdef CONFIG_NONCOHERENT_IO int i; -#endif if (direction == PCI_DMA_NONE) out_of_line_bug(); - /* Make sure that gcc doesn't leave the empty loop body. */ -#ifdef CONFIG_NONCOHERENT_IO - for (i = 0; i < nelems; i++, sg++) - dma_cache_wback_inv((unsigned long)sg->address, sg->length); -#endif + for (i = 0; i < nents; i++, sg++) { + if (sg->address && sg->page) + out_of_line_bug(); + else if (!sg->address && !sg->page) + out_of_line_bug(); + + if (sg->address) { + dma_cache_wback_inv((unsigned long)sg->address, + sg->length); + } else { + dma_cache_wback_inv((unsigned long) + (page_address(sg->page) + sg->offset), + sg->length); + } + } } /* --- Atsushi Nemoto