Я пытаюсь создать массив типа "struct scatterlist" из буфера, указанного адресом виртуального ядра (я знаю размер буфера в байтах, но он может быть большим). В идеале я хотел бы иметь такую функцию, как init_sg_array_from_buf:
void my_function(void *buffer, int buffer_length)
{
struct scatterlist *sg;
int sg_count;
sg_count = init_sg_array_from_buf(buffer, buffer_length, sg);
}
Какая функция в API-интерфейсе scatterlist выполняет нечто подобное? В настоящее время единственная возможность, которую я вижу, - это вручную определить количество страниц, охватываемых буфером. У Windows есть макрос ядра, называемый «ADDRESS_AND_SIZE_TO_SPAN_PAGES», но мне даже не удалось найти что-то подобное в ядре linux.