Currently pci_unmap_addr(), etc. are always defined as nop. It should be defined when pci_unmap_single is not a nop. Here is a patch. diff -ur linux-mips/include/asm-mips/pci.h linux/include/asm-mips/pci.h --- linux-mips/include/asm-mips/pci.h 2005-07-26 22:14:07.000000000 +0900 +++ linux/include/asm-mips/pci.h 2005-08-05 22:33:14.000000000 +0900 @@ -94,7 +94,7 @@ */ extern unsigned int PCI_DMA_BUS_IS_PHYS; -#ifdef CONFIG_MAPPED_DMA_IO +#ifndef CONFIG_DMA_COHERENT /* pci_unmap_{single,page} is not a nop, thus... */ #define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME) dma_addr_t ADDR_NAME; @@ -104,7 +104,7 @@ #define pci_unmap_len(PTR, LEN_NAME) ((PTR)->LEN_NAME) #define pci_unmap_len_set(PTR, LEN_NAME, VAL) (((PTR)->LEN_NAME) = (VAL)) -#else /* CONFIG_MAPPED_DMA_IO */ +#else /* CONFIG_DMA_COHERENT */ /* pci_unmap_{page,single} is a nop so... */ #define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME) @@ -114,7 +114,7 @@ #define pci_unmap_len(PTR, LEN_NAME) (0) #define pci_unmap_len_set(PTR, LEN_NAME, VAL) do { } while (0) -#endif /* CONFIG_MAPPED_DMA_IO */ +#endif /* CONFIG_DMA_COHERENT */ /* This is always fine. */ #define pci_dac_dma_supported(pci_dev, mask) (1)