CACHE_INVAL()

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

Прототип:

#include <sys/cache.h>
CACHE_INVAL( 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 flags) и предварительно определяют физические адреса данных.
len
Число байт в буфере, для которых соответствующие строки кэша должны быть аннулированы.

Библиотека:

libcache

Описание:

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

Перед использованием макросов 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() должны использовать вызов msync() библиотеки С для выполнения синхронизации кэша.

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

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

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

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

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

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

struct cache_ctrl, cache_fini(), CACHE_FLUSH(), cache_init()




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