I have written a driver for a high speed PCI data acquisition board that supports 64 bit DMA. This module has been tested on Red Hat FC4 and works well as long as the RAM installed on the system is 4 GB or less. When more than 4 GB RAM is installed the call to dma_map_single(..) panics the kernel with the message:

kernel panic - not syncing: PCI-DMA: memory would be corrupted

The buffer passed to dma_map_single(..) is allocated using __get_free_pages and is 512KB in length (that is the size of the DMA that the hardware does).

Is there any solution to this problem?

thanks in advance for any help