Обычно вы не можете использовать старую память и использовать ее для прямого доступа к памяти. Проблема в том, что ваша область памяти может пересекать границы страниц и разделяться на различные области физической памяти. Кроме того, он может быть заменен, а затем снова переключен в другое физическое местоположение, чем раньше. На некоторых архитектурах есть области памяти, которые вообще не видны с шины устройства. Иногда вам может повезти, что ваши неправильно приобретенные буферы DMA работают, но это не гарантировано.
Проверьте функции распределения dma, такие как dma_alloc_coherent()
. Также LDD3 Глава 15.
Если у вас есть проблемы с распределением буферов DMA, потому что они слишком велики, у вас есть еще одна проблема, требующая, чтобы вы либо разделили свои передачи DMA вручную, либо использовали DMA с разбросом сбора.