Читаю LDD 3. Scatter list используются, когда нет возможности выделить один непрерывный буфер для обмена через DMA. Значит создаем и заполняем данными несколько буферов. Инициализируем массив структур типа scatterlist соответствующими параметрами созданных ранее буферов (пусть массив будет называться sg, для определенности). Теперь выполняем dma_map_sg(..., sg, ...). Теперь в элементах sg должны быть прописаны шинные адреса, с которыми может работать контроллер DMA. А возвращается нам актуальное число (N) элементов sg, так как dma_map_sg мог некоторые сшить/объединить. Но теперь в соответствии с LDD нужно опять последовательно для каждого из этих N элементов sg получать шинный адрес и длину (sg_dma_address и sg_dma_len) и отдавать их контроллеру DMA. Т.е. в итоге получается, что все равно приходится отрабатывать с каждым буфером последовательно и по отдельности? Ради чего тогда все это городилось? Ну может быть IOMMU некоторые буфера «сшил». И это вся польза? Или все-таки есть некоторые DMA контроллеры, которые могут работать напрямую со scatterlist? Или я что-то не понимаю?