/
githubmirror
/
rdma-core
Обзор
Документация
Войти
/
githubmirror
/
rdma-core
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
util/interval_set.h
80 строк
2 KB
Mark Zhang
util: Add an "alignment" parameter for iset_alloc_range()
26 июн 2023, 11:34
26 июн 2023, 11:34
fcaa743
Код
Авторство
О чём код?
/* GPLv2 or OpenIB.org BSD (MIT) See COPYING file */ #include <stdint.h> struct iset; /** * iset_create - Create an interval set * * Return the created iset if succeeded, NULL otherwise, with errno set */ struct iset *iset_create(void); /** * iset_destroy - Destroy an interval set * @iset: The set to be destroyed */ void iset_destroy(struct iset *iset); /** * iset_insert_range - Insert a range to the set * @iset: The set to be operated * @start: The start address of the range * @length: The length of the range * * If this range is continuous to the adjacent ranges (before and/or after), * then they will be combined to a larger one. * * Return 0 if succeeded, errno otherwise */ int iset_insert_range(struct iset *iset, uint64_t start, uint64_t length); /** * iset_alloc_range - Allocate a range from the set * * @iset: The set to be operated * @length: The length of the range * @start: The start address of the allocated range * @alignment: The alignment that @start must be aligned with, must be power * of two * * Return 0 if succeeded, errno otherwise * * Note: There are these cases: * Case 1: Original range is fully taken +------------------+ |XXXXXXXXXXXXXXXXXX| +------------------+ => (NULL) Case 2: Original range shrunk +------------------+ |XXXXX | +------------------+ => +------------+ | | +------------+ Case 3: Original range shrunk +------------------+ | XXXXX| +------------------+ => +------------+ | | +------------+ Case 4: Original range splited +------------------+ | XXXXX | +------------------+ => +-----+ +------+ | | | | +-----+ +------+ */ int iset_alloc_range(struct iset *iset, uint64_t length, uint64_t *start, uint64_t alignment);