Нужно ли делать кэш недействительным перед чтением из кадрового буфера?

Я пытаюсь читать с /dev/fb0 на машине Linux.

я просто open("/dev/fb0", O_RDWR), затем mmap, затем memcpy из сопоставленного указателя.

Все выглядит хорошо, за исключением того, что верхний правый угол изображения, который я получаю, взят из предыдущего кадра.

Это похоже на проблему когерентности кэша. В частности, я использую его на чипе ARM, где GPU и CPU разделяют память.

Это правда? Является ли обычной практикой аннулирование кэша после mmapв кадр кадра?

Если мне нужно аннулировать память, какой вызов API я должен использовать?

Я пробую Memory.h из SDK от TI, но есть ли более стандартная альтернатива /Linux/Posix?

1 ответ

Убедитесь, что GPU завершил запись данных в буфер перед memcpy(). В этом случае вам не нужно аннулировать кеш, поскольку кешированный буфер не будет кэшироваться. Если вы подозреваете, что копируемые данные кэшируются, вы можете использовать следующий API для аннулирования кэша:

outer_cache.inv_range()

Смотрите заголовочный файл arch / arm / include / asm / outercache.h.

Другие вопросы по тегам