Книга: Разработка ядра Linux
Функция find_vma_intersection()
Функция find_vma_intersection()
Функция find_vma_intersection()
возвращает первую область памяти, которая перекрывается с указанным интервалом адресов. Эта функция определена в файле <linux/mm.h>
следующим образом. Это функция с подстановкой тела.
static inline struct vm_area_struct* find_vma_intersection(
struct mm_struct *mm, unsigned long start_addr,
unsigned long end_addr) {
struct vm_area_struct *vma;
vma = find_vma(mm, start_addr);
if (vma && end_addr <= vma->vm_start)
vma = NULL;
return vma;
}
Первый параметр — адресное пространство, в котором выполняется поиск, параметр start_addr
— это первый адрес интервала адресов, а параметр end_addr
— последний адрес интервала.
Очевидно, что если функция find_vma()
возвращает значение NULL
, то это же значение будет возвращать и функция find_vma_intersection()
. Если функция find_vma()
возвращает существующую область VMA, то функция find_vma_intersection()
возвратит ту же область только тогда, когда эта область не начинается после конца данного диапазона адресов. Если область памяти, которая возвращается функцией find_vma()
, начинается после последнего адреса из указанного диапазона, то функция find_vma_intersection()
возвращает значение NULL
.