Что означают флаги VM_MIXEDMAP и VM_PFNMAP в ядре Linux?

#linux #linux-kernel #driver #linux-device-driver #embedded-linux

#linux #linux-ядро #драйвер #linux-device-driver #встроенный-linux

Вопрос:

Эти два флага используются драйверами, но я не понимаю, зачем они нам нужны. Что произойдет, если я не установлю эти два флага в VMA? Когда я должен их использовать? Может ли кто-нибудь указать некоторые варианты использования? Спасибо.

Ответ №1:

Лучшее объяснение для VM_MIXEDMAP , и косвенно для VM_PFNMAP , исходит из описания отправки исправления, которое представило его: http://visa.lab.asu.edu/gitlab/fstrace/android-kernel-msm-hammerhead-3.4-marshmallow-mr3/commit/b379d790197cdf8a95fb67507d75a24ac0a1678d

Короче говоря, VM_MIXEDMAP позволяет отображению содержать как «управляемые» страницы (т. Е. контролируемые диспетчером памяти), так и «неуправляемые» страницы (т. Е. предоставленные «как есть», как физические устройства). VM_PFNMAP для «полностью неуправляемых» областей, ресурсы которых не контролируются обычной системой распределения (например, опять же, как физические устройства, отображаемые в пространстве пользователя).

Оба флага предназначены для особого использования, VM_PFNMAP обсуждается здесь:https://linux-mm.org/DeviceDriverMmap

На мой взгляд, маловероятно, что в «обычных» драйверах устройств происходит использование VM_MIXEDMAP .

Комментарии:

1. Является ли VM_PFNMAP подмножеством VM_MIXEDMAP?

2. Вроде того… но я думаю, что последнее зарезервировано для очень «внутренних» случаев, в частности оптимизаций, основанных на механизме копирования при записи и т.д…