CACHE_FLUSH()

Очистить строки кэша, связанные с буфером данных

Прототип:

#include <sys/cache.h>
CACHE_FLUSH( struct cache_ctrl *cinfo,
void *vaddr,
uint64_t paddr,
size_t len );

Аргументы:

cinfo
Указатель на структуру cache_ctrl, которая была изначально передана в функцию cache_init().
vaddr
Виртуальный адрес буфера; это указатель на данные в виртуальном адресном пространстве драйвера.
paddr
Физический адрес буфера: обычно он находится в том же адресном пространстве, которое внешнее устройство будет использовать для ссылки на данные. Физический адрес получается путем вызова mem_offset64(). Поскольку эта функция довольно дорогостоящая, драйверы обычно выделяют пул буферов данных при инициализации (например, путем вызова mmap() с помощью флагов MAP_PHYS и MAP_ANON) и заранее определяют физические адреса данных.
len
Количество байт в буфере, для которых кэшированные данные должны быть сброшены в память.

Библиотека:

libcache

Описание:

Этот макрос используется для сброса любых строк кэша, связанных с буфером данных, в память. Эта процедура гарантирует, что любые изменения, внесенные в данные ЦП, будут отражены содержимым памяти, и, таким образом, внешнее устройство, читающее данные, не будет извлекать устаревшие данные. Дополнительные сведения о согласованности кеша см. в записи для cache_init().

До использования макроса CACHE_*() на платформах ARM и MIPS, вызывающий поток должен получить права на чтение и запись путем вызова ThreadCtl(), с указанием флага _NTO_TCTL_IO:

ThreadCtl( _NTO_TCTL_IO, 0 );

Не выполнение данной операции влечет появление сигнала SIGILL (недопустимая инструкция).

Переменные окружения:

Следующие переменные среды, если они существуют, влияют на поведение данной функции:

CACHE_NOP
Указывает библиотеке, что макросы CACHE_FLUSH() и CACHE_INVAL() не должны действовать.
CACHE_MSYNC
Указывает библиотеке, что макросы CACHE_FLUSH() и CACHE_INVAL() должны использовать вызов библиотеки C msync() для выполнения синхронизации кеша.

Классификация:

ЗОСРВ «Нейтрино»

Безопасность использования
Точка остановки потока
Нет
Обработчик прерываний
Да
Обработчик сигналов
Да
В потоке
Да

Предостережения:

CACHE_FLUSH() является макросом.

Тематические ссылки:

struct cache_ctrl, cache_fini(), cache_init(), CACHE_INVAL()




Предыдущий раздел: Описание API библиотеки cache