No, it's not the job of dma_map_sg. Before dma_map_sg, physical
continuous page frames in a scatter list are supposed be coalesced.
For example, the block layer creates a scatter list in which physical
continuous page frames are coalesced for SCSI drivers.
With some of IOMMUs, dma_map_sg might coalesce virtual and physical
continuous page frames. If 2.6.24 doesn't do for you, 2.6.27 doesn't
too.
--