This should fix some arch-specific problems with the "generic DMA" API implementations of dma_supported() and dma_set_mask(): - dma_set_mask(): * Removes pointless clones that were used on arm, i386, ia64, mips, and parisc * Also removed PCI-specific "asm-generic" version * Replaces them with a truly generic implementation that doesn't needlessly BUG() with non-PCI devices * Adds an ARCH_HAS_* hook to cope with sparc64-only restrictions (for ali5451 pci audio hardware); sparc64 retains a BUG() for non-pci hardware. - dma_supported(): * Removes broken versions from arm, i386, mips; the broken versions never actually compared the two masks they were specified to compare: + arm only verified there was a device mask + i386/mips didn't even do that much * Also removed PCI-specific "asm-generic" version * Replaces them with a generic implementation that + doesn't needlessly BUG() with non-PCI devices + actually compares the two masks (bit-wise) * Adds an ARCH_HAS_* hook to handle ia64 and parisc, which already have their own fancy implementations Sanity tested on x86/pc and ARM/PXA. It's unfortunate that the arch-specific BUG() behavior only started getting reported recently (test7?); and particularly that the previous dma_supported() was so broken even on i386. In consequence, it's not quite clear what bugs are being hidden by the bogus masking. - Dave