Создать массив struct scatterlist из буфера - PullRequest
0 голосов
/ 15 апреля 2020

Я пытаюсь создать массив типа "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.

...