dma-buf: system_heap: account for system heap allocation in memcg
The system dma-buf heap lets userspace allocate buffers from the page allocator. However, these allocations are not accounted for in memcg, allowing processes to escape limits that may be configured. Pass __GFP_ACCOUNT for system heap allocations, based on the dma_heap.mem_accounting parameter, to use memcg and account for them. Signed-off-by: Eric Chanudet <echanude@redhat.com> Reviewed-by: T.J. Mercier <tjmercier@google.com> Reviewed-by: Maxime Ripard <mripard@kernel.org> Signed-off-by: Sumit Semwal <sumit.semwal@linaro.org> Link: https://patch.msgid.link/20260116-dmabuf-heap-system-memcg-v3-2-ecc6b62cc446@redhat.com
This commit is contained in:
parent
bb33013bdd
commit
3c227be906
|
|
@ -320,14 +320,17 @@ static struct page *alloc_largest_available(unsigned long size,
|
|||
{
|
||||
struct page *page;
|
||||
int i;
|
||||
gfp_t flags;
|
||||
|
||||
for (i = 0; i < NUM_ORDERS; i++) {
|
||||
if (size < (PAGE_SIZE << orders[i]))
|
||||
continue;
|
||||
if (max_order < orders[i])
|
||||
continue;
|
||||
|
||||
page = alloc_pages(order_flags[i], orders[i]);
|
||||
flags = order_flags[i];
|
||||
if (mem_accounting)
|
||||
flags |= __GFP_ACCOUNT;
|
||||
page = alloc_pages(flags, orders[i]);
|
||||
if (!page)
|
||||
continue;
|
||||
return page;
|
||||
|
|
|
|||
Loading…
Reference in New Issue