On 9/16/2021 12:46 AM, Haiyang Zhang wrote:
+ memset(vmap_pages, 0,
+ sizeof(*vmap_pages) * vmap_page_index);
+ vmap_page_index = 0;
+
+ for (j = 0; j < i; j++)
+ __free_pages(pages[j], alloc_unit);
+
+ kfree(pages);
+ alloc_unit = 1;
This is the case where a large enough contiguous physical memory chunk
could not be found. But rather than dropping all the way down to single
pages, would it make sense to try something smaller, but not 1? For
example, cut the alloc_unit in half and try again. But I'm not sure of
all the implications.
I had the same question. But probably gradually decrementing uses too much
time?
This version is to propose the solution. We may optimize this to try
smaller size until to single page if this is right direction.