mirror of
https://github.com/genodelabs/genode.git
synced 2025-06-01 15:10:56 +00:00
lx_emul: align __alloc_pages_bulk implementation
The upstream implementation is used to allocate order-0 pages in a batch and users, e.g. page-pool allocator, may rely on that behaviour and thus it is implemented with this commit.
This commit is contained in:
parent
191306531c
commit
9eeeb4e36c
@ -19,29 +19,6 @@
|
|||||||
#include <lx_emul/debug.h>
|
#include <lx_emul/debug.h>
|
||||||
#include <lx_emul/page_virt.h>
|
#include <lx_emul/page_virt.h>
|
||||||
|
|
||||||
unsigned long __alloc_pages_bulk(gfp_t gfp,int preferred_nid,
|
|
||||||
nodemask_t * nodemask, int nr_pages,
|
|
||||||
struct list_head * page_list, struct page ** page_array)
|
|
||||||
{
|
|
||||||
if (page_list)
|
|
||||||
lx_emul_trace_and_stop("__alloc_pages_bulk unsupported argument");
|
|
||||||
|
|
||||||
{
|
|
||||||
void const *ptr = lx_emul_mem_alloc_aligned(PAGE_SIZE*nr_pages, PAGE_SIZE);
|
|
||||||
struct page *page = lx_emul_virt_to_page(ptr);
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < nr_pages; i++) {
|
|
||||||
|
|
||||||
if (page_array[i])
|
|
||||||
lx_emul_trace_and_stop("__alloc_pages_bulk: page_array entry not null");
|
|
||||||
|
|
||||||
page_array[i] = page + i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return nr_pages;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void lx_free_pages(struct page *page, bool force)
|
static void lx_free_pages(struct page *page, bool force)
|
||||||
{
|
{
|
||||||
@ -80,6 +57,33 @@ static struct page * lx_alloc_pages(unsigned const nr_pages)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
unsigned long __alloc_pages_bulk(gfp_t gfp,int preferred_nid,
|
||||||
|
nodemask_t * nodemask, int nr_pages,
|
||||||
|
struct list_head * page_list, struct page ** page_array)
|
||||||
|
{
|
||||||
|
unsigned long allocated_pages = 0;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (page_list)
|
||||||
|
lx_emul_trace_and_stop("__alloc_pages_bulk unsupported argument");
|
||||||
|
|
||||||
|
for (i = 0; i < nr_pages; i++) {
|
||||||
|
|
||||||
|
if (page_array[i])
|
||||||
|
lx_emul_trace_and_stop("__alloc_pages_bulk: page_array entry not null");
|
||||||
|
|
||||||
|
page_array[i] = lx_alloc_pages(1);
|
||||||
|
|
||||||
|
if (!page_array[i])
|
||||||
|
break;
|
||||||
|
|
||||||
|
++allocated_pages;
|
||||||
|
}
|
||||||
|
|
||||||
|
return allocated_pages;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* In earlier kernel versions, '__alloc_pages' was an inline function.
|
* In earlier kernel versions, '__alloc_pages' was an inline function.
|
||||||
*/
|
*/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user