Linux: согласованность кэша после DMALinux

Ответить
Anonymous
 Linux: согласованность кэша после DMA

Сообщение Anonymous »

В драйвере ядра Linux перед запуском DMA из устройства в ОЗУ я вызываю:

Код: Выделить всё

DmaHandle = dma_map_single (sDevice, VirtualAddress + Offset, Size, DMA_FROM_DEVICE);
dma_sync_single_for_device (sDevice, DmaHandle, Size, DMA_FROM_DEVICE);
После завершения DMA я звоню:

Код: Выделить всё

dma_sync_single_for_cpu (sDevice, DmaHandle, Size, DMA_FROM_DEVICE)
dma_unmap_single (sDevice, DmaHandle, Size, DMA_FROM_DEVICE)
Это работает.
Но у меня также есть еще один DMA от устройства к оперативной памяти.
Этот DMA инициирован, но мы не можем подождите, пока он закончится.
Мы опрашиваем регистр «Счетчик приема», который сообщает нам, сколько байтов мы получили.
Предположим, мы получили 128 байтов.
Мне нужно немедленно прочитать эти байты и обработать их. их.
Для этого я звоню:

Код: Выделить всё

DmaHandle = dma_map_single (sDevice, VirtualAddress, ReceiveCount, DMA_FROM_DEVICE);
dma_sync_single_for_device (sDevice, DmaHandle, ReceiveCount, DMA_FROM_DEVICE);

dma_sync_single_for_cpu (sDevice, DmaHandle , ReceiveCount, DMA_FROM_DEVICE)
dma_unmap_single (sDevice, DmaHandle , ReceiveCount, DMA_FROM_DEVICE)
Я делаю это каждый раз, когда «Счетчик приема» > 0.
Виртуальный адрес увеличивается каждый раз в соответствии с регистром «Счетчик приема».
Как вы думаете, это сработает?

Подробнее здесь: https://stackoverflow.com/questions/785 ... -after-dma
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»